diff --git a/.liquibase/Data_alias/basic/2020.1.0/ExportTemplate/create_ExportTemplateTables.xml b/.liquibase/Data_alias/basic/2020.1.0/ExportTemplate/create_ExportTemplateTables.xml
index 395d53acca0f37ec1a60dd814a6bbe496bcba984..8db11d6d41cd74caa351d90fa3b7ec99178d41da 100644
--- a/.liquibase/Data_alias/basic/2020.1.0/ExportTemplate/create_ExportTemplateTables.xml
+++ b/.liquibase/Data_alias/basic/2020.1.0/ExportTemplate/create_ExportTemplateTables.xml
@@ -12,8 +12,8 @@
             <column name="FIELDDELIMITER" type="VARCHAR(36)"/>
             <column name="ISOLANGUAGE" type="CHAR(3)"/>
             <column name="DESCRIPTION" type="VARCHAR(1337)"/>
-            <column name="DATE_EDIT" type="TIMESTAMP(9)"/>
-            <column name="DATE_NEW" type="TIMESTAMP(9)"/>
+            <column name="DATE_EDIT" type="DATETIME"/>
+            <column name="DATE_NEW" type="DATETIME"/>
             <column name="USER_EDIT" type="VARCHAR(50)"/>
             <column name="USER_NEW" type="VARCHAR(50)"/>
         </createTable>
diff --git a/.liquibase/Data_alias/basic/2020.1.0/changelog.xml b/.liquibase/Data_alias/basic/2020.1.0/changelog.xml
index acdab8c9648ae6b5cc3b6ae8ac7eefb2df311e4e..1a5cbcf126384fba33f6967c58d77ee72ab40449 100644
--- a/.liquibase/Data_alias/basic/2020.1.0/changelog.xml
+++ b/.liquibase/Data_alias/basic/2020.1.0/changelog.xml
@@ -10,4 +10,5 @@
     <include relativeToChangelogFile="true" file="changeType_productGroupCodeId.xml" />
     <include relativeToChangelogFile="true" file="add_WorkflowSignal_variables.xml"/>
     <include relativeToChangelogFile="true" file="AlterTablesForTranslation/changelog.xml"/>
+    <include relativeToChangelogFile="true" file="update_Salutation_headline.xml"/>
 </databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.1.0/update_Salutation_headline.xml b/.liquibase/Data_alias/basic/2020.1.0/update_Salutation_headline.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b1fb36eafde4081e707538fc607fd5f10b699b82
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.0/update_Salutation_headline.xml
@@ -0,0 +1,38 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="s.listl" id="45b6a4a0-f623-412f-ad57-d2fa1db09f62">
+        <update tableName="SALUTATION">
+            <column name="HEADLINE" value="Herrn Dr. Ing. {fn} {ln}"/>
+            <where>SALUTATIONID = '0500939e-5820-457d-a95f-6835b9501df9'</where>
+        </update>
+        <update tableName="SALUTATION">
+            <column name="HEADLINE" value="Herrn Prof. Dr. {fn} {ln}"/>
+            <where>SALUTATIONID = '1f19ba34-8346-4620-a10e-fb39fdd0be9b'</where>
+        </update>
+        <update tableName="SALUTATION">
+            <column name="HEADLINE" value="Herrn Präsident {fn} {ln}"/>
+            <where>SALUTATIONID = '4b9af3f4-f34a-4170-a28c-ffdbca80c4d3'</where>
+        </update>
+        <update tableName="SALUTATION">
+            <column name="HEADLINE" value="Herrn Professor {fn} {ln}"/>
+            <where>SALUTATIONID = '5d9ad542-27b8-4dec-bcbd-a2c7d223f012'</where>
+        </update>
+        <update tableName="SALUTATION">
+            <column name="HEADLINE" value="Herrn Prof. {fn} {ln}"/>
+            <where>SALUTATIONID = '75f4f04f-1877-425d-8d5d-56604d0040b2'</where>
+        </update>
+        <update tableName="SALUTATION">
+            <column name="HEADLINE" value="Herrn Dr. {fn} {ln}"/>
+            <where>SALUTATIONID = '76fe57c0-cf68-4240-ba6d-eb7d52f46317'</where>
+        </update>
+        <update tableName="SALUTATION">
+            <column name="HEADLINE" value="Herrn Bürgermeister {fn} - {ln}"/>
+            <where>SALUTATIONID = '8feaf27b-1fae-4d8c-a742-9cd023f46409'</where>
+        </update>
+        <update tableName="SALUTATION">
+            <column name="HEADLINE" value="Herrn {fn} {ln}"/>
+            <where>SALUTATIONID = 'c98c8644-9e00-4715-a775-827a364f5cef'</where>
+        </update>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/activity.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/activity.xml
index 0841eef8f6460bdc336baaaceb6eab057d601e87..8262731b75b6a2217d60e0be416960aadf233864 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/activity.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/activity.xml
@@ -174,7 +174,7 @@
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <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="INFO" value="&lt;p&gt;Messeeinladung und besondere Eintrittkarten zukommen lassen. Hat sich sehr gefreut&lt;/p&gt;&#10;"/>
       <column name="RESPONSIBLE" value="Admin"/>
       <column name="SUBJECT" value="Einladung Messe"/>
       <column name="USER_NEW" value="Admin"/>
@@ -412,7 +412,7 @@
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <column name="DIRECTION" value="i"/>
       <column name="ENTRYDATE" valueDate="2018-08-12T02:02:52"/>
-      <column name="INFO" value="Terminvorschlag gesendet. Aufgabe gestellt"/>
+      <column name="INFO" value="&lt;p&gt;Terminvorschlag gesendet. Aufgabe gestellt&lt;/p&gt;&#10;"/>
       <column name="RESPONSIBLE" value="Admin"/>
       <column name="SUBJECT" value="Präsentation: Terminvorschlag"/>
       <column name="USER_NEW" value="Admin"/>
@@ -484,7 +484,7 @@
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <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="INFO" value="&lt;p&gt;Angebot nachfassen, wir liegen vor Wettbewerb&lt;/p&gt;&#10;"/>
       <column name="RESPONSIBLE" value="Admin"/>
       <column name="SUBJECT" value="Angebot nachfassen"/>
       <column name="USER_NEW" value="Admin"/>
@@ -700,7 +700,7 @@
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <column name="DIRECTION" value="i"/>
       <column name="ENTRYDATE" valueDate="2018-02-22T03:41:22"/>
-      <column name="INFO" value="erworben von Roboterabteilung"/>
+      <column name="INFO" value="&lt;p&gt;erworben von Roboterabteilung&lt;/p&gt;&#10;"/>
       <column name="RESPONSIBLE" value="Admin"/>
       <column name="SUBJECT" value="Kauf der Maschine von KUKA, Augsburg"/>
       <column name="USER_NEW" value="Admin"/>
@@ -711,7 +711,7 @@
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/>
       <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="INFO" value="&lt;p&gt;Spezifikation ausgefüllt und abgeschickt&lt;/p&gt;&#10;"/>
       <column name="RESPONSIBLE" value="Admin"/>
       <column name="SUBJECT" value="Muster"/>
       <column name="USER_NEW" value="Admin"/>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/address.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/address.xml
index 41dac3bf114796915ea3eb8883eb5d96d67517ec..fef08cdf38b829dd95120db15d3fdc5ac0357aab 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/address.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/address.xml
@@ -63,29 +63,30 @@
       <column name="ZIP" value="80807"/>
     </insert>
     <insert tableName="address">
-      <column name="ADDRESS" value="Eichenallee"/>
+      <column name="ADDRESS" value="Freiberger Str."/>
       <column name="ADDRESSID" value="1a20347c-ab56-41cb-a7dc-bd61de7e2106"/>
       <column name="ADDR_TYPE" value="OFFICEADDR"/>
       <column name="BUILDINGNO" value="45"/>
-      <column name="CITY" value="München"/>
+      <column name="CITY" value="Dresden"/>
       <column name="CONTACT_ID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
       <column name="COUNTRY" value="DE"/>
       <column name="DATE_NEW" valueDate="2019-05-17T09:46:28"/>
       <column name="PROVINCE" value="Bayern"/>
       <column name="USER_NEW" value="Admin"/>
-      <column name="ZIP" value="80228"/>
+      <column name="ZIP" value="01159"/>
     </insert>
     <insert tableName="address">
-      <column name="ADDRESS" value="Dotterblumenstrasse"/>
+      <column name="ADDRESS" value="Regensburger Straße"/>
       <column name="ADDRESSID" value="25360df5-104e-4903-8440-f848d025a24b"/>
       <column name="ADDR_TYPE" value="OFFICEADDR"/>
+      <column name="BUILDINGNO" value="45"/>
       <column name="CITY" value="Ingolstadt"/>
       <column name="CONTACT_ID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
       <column name="COUNTRY" value="DE"/>
       <column name="DATE_NEW" valueDate="2019-05-17T09:49:41"/>
       <column name="PROVINCE" value="Bayern"/>
       <column name="USER_NEW" value="Admin"/>
-      <column name="ZIP" value="85051"/>
+      <column name="ZIP" value="85055"/>
     </insert>
     <insert tableName="address">
       <column name="ADDRESS" value="Hildburghausen"/>
@@ -103,7 +104,7 @@
       <column name="ZIP" value="84034"/>
     </insert>
     <insert tableName="address">
-      <column name="ADDRESS" value="Grassstraße"/>
+      <column name="ADDRESS" value="Landshuter Str."/>
       <column name="ADDRESSID" value="2a03d8cb-ffb7-4d04-b8b2-e55354380fb7"/>
       <column name="ADDR_TYPE" value="OFFICEADDR"/>
       <column name="BUILDINGNO" value="32"/>
@@ -111,12 +112,12 @@
       <column name="CONTACT_ID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
       <column name="COUNTRY" value="DE"/>
       <column name="DATE_NEW" valueDate="2019-05-17T09:42:01"/>
-      <column name="PROVINCE" value="Deutschland"/>
+      <column name="PROVINCE" value="Bayern"/>
       <column name="USER_NEW" value="Admin"/>
       <column name="ZIP" value="84144"/>
     </insert>
     <insert tableName="address">
-      <column name="ADDRESS" value="Baustraße"/>
+      <column name="ADDRESS" value="Bolzstraße"/>
       <column name="ADDRESSID" value="35e93f95-d723-46d6-955f-9192e41e3d83"/>
       <column name="ADDR_TYPE" value="OFFICEADDR"/>
       <column name="BUILDINGNO" value="64"/>
@@ -129,7 +130,7 @@
       <column name="ZIP" value="70173"/>
     </insert>
     <insert tableName="address">
-      <column name="ADDRESS" value="Leasingstrasse"/>
+      <column name="ADDRESS" value="Torstraße"/>
       <column name="ADDRESSID" value="36723051-8a5f-47d3-8185-71c82d463eb3"/>
       <column name="ADDR_TYPE" value="OFFICEADDR"/>
       <column name="BUILDINGNO" value="78"/>
@@ -139,7 +140,7 @@
       <column name="DATE_NEW" valueDate="2019-05-17T09:44:21"/>
       <column name="PROVINCE" value="Deutschland"/>
       <column name="USER_NEW" value="Admin"/>
-      <column name="ZIP" value="10409"/>
+      <column name="ZIP" value="10115"/>
     </insert>
     <insert tableName="address">
       <column name="ADDRESS" value="Neustadt"/>
@@ -157,17 +158,17 @@
       <column name="ZIP" value="84034"/>
     </insert>
     <insert tableName="address">
-      <column name="ADDRESS" value="Stahlstraße"/>
+      <column name="ADDRESS" value="Königstraße"/>
       <column name="ADDRESSID" value="4eb7039a-1515-4545-86b4-85426a67fcd5"/>
       <column name="ADDR_TYPE" value="OFFICEADDR"/>
-      <column name="BUILDINGNO" value="24"/>
+      <column name="BUILDINGNO" value="4"/>
       <column name="CITY" value="Hamburg"/>
       <column name="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
       <column name="COUNTRY" value="DE"/>
       <column name="DATE_NEW" valueDate="2019-05-15T03:21:35"/>
-      <column name="PROVINCE" value="Deutschland"/>
+      <column name="PROVINCE" value="Hamburg"/>
       <column name="USER_NEW" value="Admin"/>
-      <column name="ZIP" value="20095"/>
+      <column name="ZIP" value="22767 "/>
     </insert>
     <insert tableName="address">
       <column name="ADDRESS" value="Büsingstrasse"/>
@@ -184,22 +185,22 @@
       <column name="ZIP" value="85230"/>
     </insert>
     <insert tableName="address">
-      <column name="ADDRESS" value="Muster-Straße"/>
+      <column name="ADDRESS" value="Sandstraße"/>
       <column name="ADDRESSID" value="6a3f6232-7a66-4a72-8d2d-66a3a9f1b9ea"/>
       <column name="ADDRIDENTIFIER" value="Tor 1"/>
       <column name="ADDR_TYPE" value="OFFICEADDR"/>
       <column name="BUILDINGNO" value="3"/>
-      <column name="CITY" value="München"/>
+      <column name="CITY" value="Nürnberg"/>
       <column name="CONTACT_ID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
       <column name="COUNTRY" value="DE"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:38"/>
       <column name="DISTRICT" value="Oberbayern"/>
       <column name="PROVINCE" value="Bayern"/>
       <column name="USER_NEW" value="Admin"/>
-      <column name="ZIP" value="80807"/>
+      <column name="ZIP" value="90443"/>
     </insert>
     <insert tableName="address">
-      <column name="ADDRESS" value="Hafenstraße"/>
+      <column name="ADDRESS" value="Friedrichshafen"/>
       <column name="ADDRESSID" value="7d116e5e-0c6b-475b-91e7-7cae94b65321"/>
       <column name="ADDR_TYPE" value="OFFICEADDR"/>
       <column name="BUILDINGNO" value="12"/>
@@ -209,7 +210,7 @@
       <column name="DATE_NEW" valueDate="2019-05-15T03:28:49"/>
       <column name="PROVINCE" value="Deutschland"/>
       <column name="USER_NEW" value="Admin"/>
-      <column name="ZIP" value="88045"/>
+      <column name="ZIP" value="88046"/>
     </insert>
     <insert tableName="address">
       <column name="ADDRESS" value="Grosse Praesidenten Str."/>
@@ -253,17 +254,17 @@
       <column name="ZIP" value="18074"/>
     </insert>
     <insert tableName="address">
-      <column name="ADDRESS" value="Kronenstraße"/>
+      <column name="ADDRESS" value="Fliederstraße"/>
       <column name="ADDRESSID" value="8923fff3-4294-4892-b3f3-8470ae89555e"/>
       <column name="ADDR_TYPE" value="OFFICEADDR"/>
-      <column name="BUILDINGNO" value="45"/>
-      <column name="CITY" value="Landshut"/>
+      <column name="BUILDINGNO" value="4"/>
+      <column name="CITY" value="Leonberg"/>
       <column name="CONTACT_ID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
       <column name="COUNTRY" value="DE"/>
       <column name="DATE_NEW" valueDate="2019-05-17T09:40:30"/>
-      <column name="PROVINCE" value="Deutschland"/>
+      <column name="PROVINCE" value="Baden-Württemberg"/>
       <column name="USER_NEW" value="Admin"/>
-      <column name="ZIP" value="84028"/>
+      <column name="ZIP" value="71229"/>
     </insert>
     <insert tableName="address">
       <column name="ADDRESS" value="Hauptstraße"/>
@@ -308,19 +309,19 @@
       <column name="ZIP" value="80456"/>
     </insert>
     <insert tableName="address">
-      <column name="ADDRESS" value="Rudower Strasse"/>
+      <column name="ADDRESS" value="Oeder Weg"/>
       <column name="ADDRESSID" value="90726b19-f23c-42dd-847a-7eacf4c71d18"/>
       <column name="ADDRIDENTIFIER" value="Tor 1"/>
       <column name="ADDR_TYPE" value="OFFICEADDR"/>
       <column name="BUILDINGNO" value="6"/>
-      <column name="CITY" value="München"/>
+      <column name="CITY" value="Frankfurt am Main"/>
       <column name="CONTACT_ID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
       <column name="COUNTRY" value="DE"/>
       <column name="DATE_NEW" valueDate="2019-05-13T01:16:38"/>
       <column name="DISTRICT" value="Oberbayern"/>
       <column name="PROVINCE" value="Bayern"/>
       <column name="USER_NEW" value="Admin"/>
-      <column name="ZIP" value="54595"/>
+      <column name="ZIP" value="60318"/>
     </insert>
     <insert tableName="address">
       <column name="ADDRESS" value="Hildburghausen"/>
@@ -378,7 +379,7 @@
       <column name="ZIP" value="84034"/>
     </insert>
     <insert tableName="address">
-      <column name="ADDRESS" value="Großstraße"/>
+      <column name="ADDRESS" value="Am Alten Viehmarkt"/>
       <column name="ADDRESSID" value="da05619e-47c6-4144-a698-f0f830d9f755"/>
       <column name="ADDR_TYPE" value="DELIVERADDR"/>
       <column name="BUILDINGNO" value="6"/>
@@ -391,7 +392,7 @@
       <column name="ZIP" value="84028"/>
     </insert>
     <insert tableName="address">
-      <column name="ADDRESS" value="Lagerstraße"/>
+      <column name="ADDRESS" value="Karlstraße"/>
       <column name="ADDRESSID" value="dd1a1831-b05a-41a7-a4e9-d73be9d77934"/>
       <column name="ADDR_TYPE" value="OFFICEADDR"/>
       <column name="BUILDINGNO" value="2"/>
@@ -417,32 +418,32 @@
       <column name="ZIP" value="28103"/>
     </insert>
     <insert tableName="address">
-      <column name="ADDRESS" value="Birkenstrasse"/>
+      <column name="ADDRESS" value="Julius-Leber-Straße"/>
       <column name="ADDRESSID" value="e1aef1b7-569b-46be-bc50-f02332a42ef1"/>
       <column name="ADDR_TYPE" value="OFFICEADDR"/>
-      <column name="BUILDINGNO" value="78"/>
-      <column name="CITY" value="Augsburg"/>
+      <column name="BUILDINGNO" value="5"/>
+      <column name="CITY" value="Hamburg"/>
       <column name="CONTACT_ID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
       <column name="COUNTRY" value="DE"/>
       <column name="DATE_NEW" valueDate="2019-05-17T09:50:42"/>
-      <column name="PROVINCE" value="Bayern"/>
+      <column name="PROVINCE" value="Hamburg"/>
       <column name="USER_NEW" value="Admin"/>
-      <column name="ZIP" value="86130"/>
+      <column name="ZIP" value="22765"/>
     </insert>
     <insert tableName="address">
-      <column name="ADDRESS" value="Grabweg"/>
+      <column name="ADDRESS" value="Blumenstraße"/>
       <column name="ADDRESSID" value="ea50cb02-7d4d-433d-9cd3-c262d5a0bb27"/>
       <column name="ADDR_TYPE" value="OFFICEADDR"/>
-      <column name="BUILDINGNO" value="17a"/>
-      <column name="CITY" value="Neumünster"/>
+      <column name="BUILDINGNO" value="11"/>
+      <column name="CITY" value="Regensburg"/>
       <column name="CONTACT_ID" value="449080f6-b714-4189-a261-37439d0d4010"/>
       <column name="COUNTRY" value="DE"/>
       <column name="DATE_EDIT" valueDate="2019-06-07T02:49:33"/>
       <column name="DATE_NEW" valueDate="2019-05-17T10:04:16"/>
-      <column name="PROVINCE" value="Deutschland"/>
+      <column name="PROVINCE" value="Bayern"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
-      <column name="ZIP" value="24534"/>
+      <column name="ZIP" value="93055"/>
     </insert>
     <insert tableName="address">
       <column name="ADDRESS" value="Spresstrasse"/>
@@ -459,7 +460,7 @@
       <column name="ZIP" value="33739"/>
     </insert>
     <insert tableName="address">
-      <column name="ADDRESS" value="Lützowplatz"/>
+      <column name="ADDRESS" value="Gotthardstraße"/>
       <column name="ADDRESSID" value="f54606ee-ecdd-4859-ad7d-aa096c5e9596"/>
       <column name="ADDRIDENTIFIER" value="Tor 4"/>
       <column name="ADDR_TYPE" value="OFFICEADDR"/>
@@ -473,7 +474,7 @@
       <column name="PROVINCE" value="Bayern"/>
       <column name="USER_EDIT" value="Admin"/>
       <column name="USER_NEW" value="Admin"/>
-      <column name="ZIP" value="80807"/>
+      <column name="ZIP" value="80689"/>
     </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
index e7537efd60b1b160c4b39e5000410371a5caa391..157efcc8d25bb71741a87f6b4ab0de8c26f8f8d4 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/salutation.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/salutation.xml
@@ -3,7 +3,7 @@
   <changeSet author="autogenerated" id="fd073db7-3e03-4f39-8d7b-d28692863574">
     <delete tableName="salutation"/>
     <insert tableName="salutation">
-      <column name="HEADLINE" value="Herr Dr. Ing. {fn} {ln}"/>
+      <column name="HEADLINE" value="Herrn Dr. Ing. {fn} {ln}"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="LETTERSALUTATION" value="Sehr geehrter Herr Dr. Ing. {ln}"/>
       <column name="SALUTATION" value="Herr"/>
@@ -42,7 +42,7 @@
       <column name="SORT" valueNumeric="18"/>
     </insert>
     <insert tableName="salutation">
-      <column name="HEADLINE" value="Herr Prof. Dr. {fn} {ln}"/>
+      <column name="HEADLINE" value="Herrn Prof. Dr. {fn} {ln}"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="LETTERSALUTATION" value="Sehr geehrter Herr Professor"/>
       <column name="SALUTATION" value="Herr"/>
@@ -101,7 +101,7 @@
       <column name="TITLE" value="Dr. Ing."/>
     </insert>
     <insert tableName="salutation">
-      <column name="HEADLINE" value="Herr Präsident {fn} {ln}"/>
+      <column name="HEADLINE" value="Herrn Präsident {fn} {ln}"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="LETTERSALUTATION" value="Sehr geehrter Herr Präsident"/>
       <column name="SALUTATION" value="Herr"/>
@@ -151,7 +151,7 @@
       <column name="TITLE" value="Dr. Ing."/>
     </insert>
     <insert tableName="salutation">
-      <column name="HEADLINE" value="Herr Professor {fn} {ln}"/>
+      <column name="HEADLINE" value="Herrn Professor {fn} {ln}"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="LETTERSALUTATION" value="Sehr geehrter Herr Professor"/>
       <column name="SALUTATION" value="Herr"/>
@@ -197,7 +197,7 @@
       <column name="SORT" valueNumeric="4"/>
     </insert>
     <insert tableName="salutation">
-      <column name="HEADLINE" value="Herr Prof. {fn} {ln}"/>
+      <column name="HEADLINE" value="Herrn Prof. {fn} {ln}"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="LETTERSALUTATION" value="Sehr geehrter Herr Professor"/>
       <column name="SALUTATION" value="Herr"/>
@@ -217,7 +217,7 @@
       <column name="TITLE" value="Dr. Ing."/>
     </insert>
     <insert tableName="salutation">
-      <column name="HEADLINE" value="Herr Dr. {fn} {ln}"/>
+      <column name="HEADLINE" value="Herrn Dr. {fn} {ln}"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="LETTERSALUTATION" value="Sehr geehrter Herr Dr. {ln}"/>
       <column name="SALUTATION" value="Herr"/>
@@ -236,7 +236,7 @@
       <column name="SORT" valueNumeric="16"/>
     </insert>
     <insert tableName="salutation">
-      <column name="HEADLINE" value="Herr Bürgermeister {fn} - {ln}"/>
+      <column name="HEADLINE" value="Herrn Bürgermeister {fn} - {ln}"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="LETTERSALUTATION" value="Sehr geehrter Herr Bürgermeister"/>
       <column name="SALUTATION" value="Herr"/>
@@ -265,7 +265,7 @@
       <column name="SORT" valueNumeric="8"/>
     </insert>
     <insert tableName="salutation">
-      <column name="HEADLINE" value="Herr {fn} {ln}"/>
+      <column name="HEADLINE" value="Herrn {fn} {ln}"/>
       <column name="ISOLANGUAGE" value="deu"/>
       <column name="LETTERSALUTATION" value="Sehr geehrter Herr {ln}"/>
       <column name="SALUTATION" value="Herr"/>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/2020.0.2/changelog.xml b/.liquibase/_____SYSTEMALIAS/basic/2020.0.2/changelog.xml
deleted file mode 100644
index 953f0a414ac0746d874fea860fc99e189b9f06d5..0000000000000000000000000000000000000000
--- a/.liquibase/_____SYSTEMALIAS/basic/2020.0.2/changelog.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?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="" id="">
-
-    </changeSet>
-</databaseChangeLog>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/Workflow/webserviceUser_flowableIdmService.xml b/.liquibase/_____SYSTEMALIAS/basic/Workflow/webserviceUser_flowableIdmService.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0a2ee09d6b8b500b6cedb743a27d400a0529bd1e
--- /dev/null
+++ b/.liquibase/_____SYSTEMALIAS/basic/Workflow/webserviceUser_flowableIdmService.xml
@@ -0,0 +1,86 @@
+<?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="">
+    <insert tableName="ASYS_USERS">
+      <column name="GROUPID" value="BASIC"/>
+      <column name="NAME" value="_____USER_6283cfd9-cf4d-4711-95a1-9b0d74526e01"/>
+      <column name="DATE_EDIT" valueDate="2020-05-14T11:21:02"/>
+      <column name="ID" value="e8bad787-35c6-44e4-8fc2-7bb76b8d104c"/>
+      <column name="PROPVAL" value="1589448062175"/>
+      <column name="PROPKEY" value="lastModified"/>
+      <column name="DATE_NEW" valueDate="2020-05-14T11:18:32"/>
+    </insert>
+    <insert tableName="ASYS_USERS">
+      <column name="GROUPID" value="BASIC"/>
+      <column name="NAME" value="_____USER_6283cfd9-cf4d-4711-95a1-9b0d74526e01"/>
+      <column name="DATE_EDIT" valueDate="2020-05-14T11:18:32"/>
+      <column name="ID" value="9e9282e3-eceb-4daa-ab9e-8bc10d0826c5"/>
+      <column name="PROPVAL" value="_____USER_6283cfd9-cf4d-4711-95a1-9b0d74526e01"/>
+      <column name="PROPKEY" value="name"/>
+      <column name="DATE_NEW" valueDate="2020-05-14T11:18:32"/>
+    </insert>
+    <insert tableName="ASYS_USERS">
+      <column name="GROUPID" value="BASIC"/>
+      <column name="NAME" value="_____USER_6283cfd9-cf4d-4711-95a1-9b0d74526e01"/>
+      <column name="DATE_EDIT" valueDate="2020-05-14T11:18:55"/>
+      <column name="ID" value="e684981a-0dad-4c70-a1ba-3728e9b8d634"/>
+      <column name="PROPVAL" value="flowableIdmService"/>
+      <column name="PROPKEY" value="title"/>
+      <column name="DATE_NEW" valueDate="2020-05-14T11:18:32"/>
+    </insert>
+    <insert tableName="ASYS_USERS">
+      <column name="GROUPID" value="BASIC"/>
+      <column name="NAME" value="_____USER_6283cfd9-cf4d-4711-95a1-9b0d74526e01"/>
+      <column name="DATE_EDIT" valueDate="2020-05-14T11:19:46"/>
+      <column name="ID" value="40dc0beb-3e8c-443f-9f2d-d6e3791578e2"/>
+      <column name="PROPVAL" value="flowableIdm@domain.local"/>
+      <column name="PROPKEY" value="email"/>
+      <column name="DATE_NEW" valueDate="2020-05-14T11:19:46"/>
+    </insert>
+    <insert tableName="ASYS_USERS">
+      <column name="GROUPID" value="ROLE"/>
+      <column name="NAME" value="_____USER_6283cfd9-cf4d-4711-95a1-9b0d74526e01"/>
+      <column name="DATE_EDIT" valueDate="2020-05-14T11:21:02"/>
+      <column name="ID" value="7a4b30eb-945e-40d2-85b9-012b0e39a7d0"/>
+      <column name="PROPVAL" value="INTERNAL_WEBSERVICE"/>
+      <column name="PROPKEY" value="roleNames"/>
+      <column name="DATE_NEW" valueDate="2020-05-14T11:21:02"/>
+    </insert>
+    <insert tableName="ASYS_USERS">
+      <column name="GROUPID" value="BASIC"/>
+      <column name="NAME" value="_____USER_6283cfd9-cf4d-4711-95a1-9b0d74526e01"/>
+      <column name="DATE_EDIT" valueDate="2020-05-14T11:19:23"/>
+      <column name="ID" value="212c7c61-dc52-49ed-a019-2b22ac4d921e"/>
+      <column name="PROPVAL" value="flowableIdm@domain.local"/>
+      <column name="PROPKEY" value="calendarID"/>
+      <column name="DATE_NEW" valueDate="2020-05-14T11:19:23"/>
+    </insert>
+    <insert tableName="ASYS_USERS">
+      <column name="GROUPID" value="PASSWORD"/>
+      <column name="NAME" value="_____USER_6283cfd9-cf4d-4711-95a1-9b0d74526e01"/>
+      <column name="DATE_EDIT" valueDate="2020-05-14T11:20:55"/>
+      <column name="ID" value="bc51d51a-e38d-4d18-8c7b-8d5e7e8f0efc"/>
+      <column name="PROPVAL" value="SHA256S:5DD06838D4B56748E038A6B1CA04A51DE3678CA3E02FFB5489AAF79D9F179EAD:37E8982A02AB059E474538FE69760CA0434AA1D5F33810CDF247851D29344238"/>
+      <column name="PROPKEY" value="password"/>
+      <column name="DATE_NEW" valueDate="2020-05-14T11:20:55"/>
+    </insert>
+    <insert tableName="ASYS_USERS">
+      <column name="GROUPID" value="PASSWORD"/>
+      <column name="NAME" value="_____USER_6283cfd9-cf4d-4711-95a1-9b0d74526e01"/>
+      <column name="DATE_EDIT" valueDate="2020-05-14T11:20:55"/>
+      <column name="ID" value="03f02f1c-ce3d-4a87-83a4-090bf430f6ca"/>
+      <column name="PROPVAL" value="1589448055732"/>
+      <column name="PROPKEY" value="passwordChanged"/>
+      <column name="DATE_NEW" valueDate="2020-05-14T11:20:55"/>
+    </insert>
+    <rollback>
+        <delete tableName="ASYS_USERS">
+            <where>NAME = ?</where>
+            <whereParams>
+                    <param value="_____USER_6283cfd9-cf4d-4711-95a1-9b0d74526e01" />
+            </whereParams>
+        </delete>
+    </rollback>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/72f0f500-e7b7-4b0d-90e3-240d9edc88ee b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/72f0f500-e7b7-4b0d-90e3-240d9edc88ee
index 3be0dfa1a18f8d33f1c593c88e952b6a264a1ab3..f6b1d7441cd9c9098fcd3cb7a243f1d8246809b3 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/72f0f500-e7b7-4b0d-90e3-240d9edc88ee
+++ b/.liquibase/_____SYSTEMALIAS/basic/_demoData/generatedData/ASYS_BINARIES/BINDATA/blobFiles/72f0f500-e7b7-4b0d-90e3-240d9edc88ee
@@ -1,24 +1,29 @@
-FCC: imap://daniel.tran%40mailbox.org@imap.mailbox.org/Sent
 X-Identity-Key: id1
 X-Account-Key: account1
-To: test@test.de
-From: Daniel Tran <daniel.tran@mailbox.org>
 Subject: Angebotsanfrage
-Message-ID: <7a91719a-d935-2527-39b9-af1bd6f2279d@mailbox.org>
-Date: Mon, 23 Mar 2020 15:32:05 +0100
+From: Johannes Goderbauer <j.goderbauer@adito.de>
+Message-ID: <c23553b0-50b9-baf7-00e4-ff7e1170e6cd@adito.de>
+Date: Tue, 26 May 2020 10:47:18 +0200
 X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0;
  attachmentreminder=0; deliveryformat=4
-User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
- Thunderbird/68.4.1
+User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101
+ Thunderbird/68.2.2
 MIME-Version: 1.0
-Content-Type: multipart/related;
- boundary="------------00BB79588E3CE6482B5F269C"
-Content-Language: de-DE
+Content-Type: multipart/mixed; 
+	boundary="----=_Part_6533_1502248680.1571231060707"
 
-This is a multi-part message in MIME format.
---------------00BB79588E3CE6482B5F269C
-Content-Type: text/html; charset=utf-8
-Content-Transfer-Encoding: 8bit
+------=_Part_6533_1502248680.1571231060707
+Content-Type: multipart/alternative; 
+	boundary="----=_Part_6534_297348878.1571231060707"
+
+------=_Part_6534_297348878.1571231060707
+Content-Type: multipart/related; 
+	boundary="----=_Part_6535_946016905.1571231060707"
+
+------=_Part_6535_946016905.1571231060707
+Content-Type: text/html; charset=UTF-8
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: inline
 
 <html>
   <head>
@@ -29,113 +34,151 @@ Content-Transfer-Encoding: 8bit
     <div dir="ltr" style="font-size:12pt; color:#000000;
       background-color:#FFFFFF;
       font-family:Calibri,Arial,Helvetica,sans-serif">
-      <p>{@letterSalutation@}</p>
-      besten Dank für Ihre Anfrage.<br>
-      Im Folgenden bieten wir Ihnen gerne die gewünschten
+      {@letterSalutation@},
+      <p/>
+      besten Dank f=C3=BCr Ihre Anfrage.<br>
+      Im Folgenden bieten wir Ihnen gerne die gew=C3=BCnschten
       Produkte/Dienstleistungen an.<br>
-      Wir freuen uns auf Ihre Bestätigung des Angebots und stehen Ihnen
-      bei Rückfragen gerne zur Verfügung.
-      <p>Mit freundlichen Grüßen</p>
-      <div>{@senderName@}</div>
-      <div><br>
-        {@senderFullAddress@}</div>
-      <div><br>
-        FON: {@senderPhone@}</div>
-      <div>E-Mail: {@senderEmail@}</div>
-      <div>Web: <span lang="EN-US"><a href="https://www.adito.de"
-            target="_blank"><span lang="DE">www.adito.de</span></a></span> 
-        <br>
-         </div>
-       
-      <div><span lang="EN-US"><a
-            href="https://www.adito.de/?utm_source=signatur_startseite_logo"
-            target="_blank"><span style="color:windowtext;
-              text-decoration:none" lang="DE"><img
-                src="cid:part2.55E5AA4F.D41229A8@mailbox.org"
-                id="Bild_x0020_1" class="ms-rte-paste-setimagesize"
-                style="width:2.0833in; height:.5in" width="200"
-                height="48" border="0"></span><span lang="DE"><br>
-            </span></a></span><br>
-        ADITO Software GmbH | Geschäftsführer: Heinz Boesl, Johannes
-        Boesl, Tobias Mirwald<br>
-        Registergericht AG Landshut HRB 2403 | Ust-IdNr. DE 128946565 <br>
-        <br>
-        <span lang="EN-US"><a
-            href="https://www.adito.de/knowhow/blog/?utm_source=signatur_blog"
-            target="_blank"><span lang="DE">CRM Blog</span></a></span> |
-        <span lang="EN-US"><a
-href="https://www.adito.de/crm-akademie/webinar.html?utm_source=signatur_webinare"
-            target="_blank"><span lang="DE">Webinare</span></a></span> |
-        <span lang="EN-US"><a
-href="https://www.adito.de/crm-anbieter/crm-messen-veranstaltungen.html?utm_source=signatur_events"
-            target="_blank"><span lang="DE">Events</span></a> </span></div>
-      <div><span style="color:white">@@SPNR</span></div>
-      <p><br>
+      Wir freuen uns auf Ihre Best=C3=A4tigung des Angebots und stehen Ihnen
+      bei R=C3=BCckfragen gerne zur Verf=C3=BCgung.
+      <br/>
+      <br>Mit freundlichen Gr=C3=BC=C3=9Fen=20
+      <br>{@senderName@}
+      <br/><br/>
+      <p>
+        <b>{@senderOrgname@}</b>
+        <br/>{@senderFullAddress@}
+        <br/>
+        <br/>FON: {@senderPhone@}
+        <br/>E-Mail: {@senderEmail@}
+        <br/>Web:&nbsp;<a href=3D"https://www.meineFirma.de">www.meineFirma.de</a>
+      </p>
+      <br/><br/>
+      <a href=3D"https://www.adito.de/?utm_source=3Dsignatur_startseite_logo">
+      <img border=3D0 width=3D206 height=3D81 style=3D'width:2.1458in;height:.843=
+      7in' id=3D"Grafik_x0020_1" src=3D"cid:image001.png@01D5842B.05639490">
+      </a>
+      <br/><br/>
+      <p>{@senderOrgname@}| Gesch=C3=A4ftsf=C3=BChrer: Harold Smith
+      <br>Amtsgericht Landshut HRB 182038
+      <br>
+      <br>
+
+      </span>
+
+      <a href=3D"https://www.adito.de/knowhow/blog/?utm_source=3Dsignatur_blog" t=
+      arget=3D"_blank">
+
+      <span lang=3DDE style=3D'color:blue'>CRM Blog
+
+      </span>
+
+      </a>
+
+      <span lang=3DDE> |=20
+
+      </span>
+
+      <a href=3D"https://www.adito.de/crm-akademie/webinar.html?utm_source=3Dsign=
+      atur_webinare" target=3D"_blank">
+
+      <span lang=3DDE style=3D'color:blue'>Webinare
+
+      </span>
+
+      </a>
+
+      <span lang=3DDE> |=20</span>
+
+      <a href=3D"https://www.adito.de/crm-anbieter/crm-messen-veranstaltungen.htm=
+      l?utm_source=3Dsignatur_events" target=3D"_blank">
+
+      <span lang=3DDE style=3D'color:blue'>Events
+
+      </span>
+
+      </a>=20
+
+
       </p>
-    </div>
   </body>
-</html>
 
---------------00BB79588E3CE6482B5F269C
-Content-Type: image/png;
- name="elploafdhcnceakm.png"
+</html>
+------=_Part_6535_946016905.1571231060707
+Content-Type: image/png; name=image001.png
 Content-Transfer-Encoding: base64
-Content-ID: <part2.55E5AA4F.D41229A8@mailbox.org>
-Content-Disposition: inline;
- filename="elploafdhcnceakm.png"
-
-iVBORw0KGgoAAAANSUhEUgAAAMgAAAAwCAYAAABUmTXqAAAK/klEQVR4nO2de2wcxR3Hh4ZH
-S4CQECtg381viGibCCiUpLSIAGlwExzw+eY3gVIeKhQqCJQQEAWKqgYq0QeoUNJSexdCRapC
-cXkUmdh7COSGhDo8pCqt0qa1jjh3O8MjBAItEJLA9Q/n3LOzs7uz57tLYD7ST/5nd36Pme/O
-7uzOmZDq2Y84uTxxvXdHmZP72zi0bbHs43T1thM3VwqwtxsdmsXSeFzvEY1AXml0aBZLY1ne
-20Tc3AdWIBZLEE7fEo04SpNczwrE8inHya3TCcTOIJZPN519LEQcJXLfaisQy6cYJ3dzqEAe
-GPg3IYQUyYLb1HTxkmL4wh4G4iUFor+fzN2/0elYLOOL420IFcj9f9lICCE+aXtWMVEKMx/w
-h41Ox2IZP+59amaoONxcidw/8C9CCJFk4UNRAlGAOwdJ20GNTstiGR8c7/ZxFYidRSyfKFxv
-aLwFopjY0U3IhEanZrFUR2fvqZHiSCaQkmT480anZ7FUh5v7Y60Eopgoqeb2qY1O0WJJhuMc
-QJzc+zUVCBWdjU7TYklGV++iWOKoEIhP2v5gJBAmSn4LP6LRqVos5ri5VbEFsmJdWSC9avoi
-I4FIECsanarFYsadKycS19sVXyBr84QQ4pOzl6pmNBKIYqKUn9w6qdEpWyzx6eq7LLY43FyJ
-3N+/qXyqJJn/mgpEgniokelaLGa4Xr+RQNynXy+fWiTn3GgqEMVEqZjKHNPIlC2WeNzlTTET
-R65EHO/FyiYUiFcTzCI9jUrZYomPm7vBWCBdT19U2YRP8Qo7i1g+mcT5tGSUebvIvd2HjG1G
-gthqPIsw8adGpGyxxMPxTjKePVwv8NYo6SwyBHxmvdO2WOLheHcbC6Sz7xJdc4qJbcYiAXyq
-jhlbLAY4njK+vVree5iuOUnxmiSziKR4aj3Ttliiifvl7mhbFdWsAlTms4h4qR4p6/CBz/Np
-9swoM223mFowJU67UVZI4+kq3XGaonyOAjxpE8uyqny3YKoi91PGI8YwU83tdGx8g1PaDiuk
-M7OLwFEx/IEPeLti6EjABxTgSgn4uALxWKVJwCck4MMS8AEJwpXA75AUlyngFyrK51TmFcQQ
-tB89BO1HF9L8uOjtF67nmq9eeWdFdYwCvCDJLOIDPyWq7VqgAC+PHSPl3zZpuwhiYZJaxLyo
-vKIAV+rqFuZbAr+hfJwE8VbNYhzp29Eb5hSIu2riF8RHCsRjQaujkuKpkvKf+hSvkCC+Lxk/
-P7z3nNy2BDPIs8TxniFO7ndhTSd5L9KoWcSkoySIrUZtU9Fa68G3e8B/x8S3BH51Rf6DtReI
-uP7//nBtzevBcPsrRyGUffotmPIpP0cBckX5Ep/yc33Kz9H3XGfvvATiGLHDXa8UNjB8hpck
-K2R9ZxGficXGMTK8JHb7NHtmPQSimCgpmp0V17fPxOLycRLwnzUXCOPXDceEi+pWD8BHyzkq
-JmZIKlqLKX6GArxcpvGbhTR+Rd9zjvdENQLZL8YPx0mGBfOkxMtxB994oJh4xzRGCfhm3Pbr
-KpCKARHle5RAmNhc+/hw6XC98YV61UMy3F5+zriVkM8owAsUFdd2EzJBMn6ppOJHwb129xOH
-VyMO4uZi/XDc8MOXeWI+8HlxB2A1KCquDRlsqxTD1XqR7HlLE4R2kAJ+rBi+G9ck4HsxhPv2
-Jjb3s5G+xwhEAeZrPlh31ytyAQdwp2L42u7nq/zw30rDvALMS0A5XJtwv4V0ZvZIns3tU2Ua
-M5Lx832KizZTMT2419y+q6oWSMQPx0kQz4cNsAjlF5IN+fhsIMceGFLgd0aKCvhxcIeLrZWD
-UYdukErANwePbGvaODVzaBzbTM+eXEhnZkvgVysmdoTUb0aU77EC2UzF9EKaH6eYmBFkxVTm
-GAn4sK6tIoiFxZT4fNC5Q8BnFlMdx29omntIfnLrJMnEh5p2dvhMLC6kM80byLEHRtW1m5AJ
-+cmtk4qQbRsWiyZPmj1v7LnRWy0c78WqBWLww3FJrAhCRBWpGnzGf6m/2uFV5eMk5Tfpi48/
-ifSjHaT4etS5OkJjqniGiyuQWD6B36FrK+7eHr+Fn6DtcxB3mdZhJDYq2vUXW36pWWudPS1V
-i8PNJd+THtcA80kLFkUxtWCKXhzCH3u8AvGf4OLj9qhZJGQG2RJnBgpiCPhMvUDw61G+kwhE
-Af4mpL9mRLdASCGNp+svNubvmMpsYguP1OfJrzRrzfFu3CcEwkSpCByTFi0MxdDRdxReHHD8
-Uv0VKvynjGohkPXT5k/UPZNIKlqjfDdKIJLyb+jjyZ5oWocy+cmtkySI94PrgdeYteZ66/cV
-gdRiFlHN7VNDfL4RdE43IRN0HaAAd4YN9FoI5GUy6wDFxBtRV+K9TSCh8bTwE0zrUGb9tPkT
-lWY1svL9SzS/XvWFcRFHvQTCRKlIsxdFpWWCYvigzlfY/api4mbtecDv0J1XC4EMkraDFMPX
-P0kCKaYyXzKtQ5mNUzOHjo9AnNyycRPIioFXCSFEkrbf11IgioltSQs3lsEj25q0fmK8xZdM
-bNScu2tD09w99scQUhuB9JO5+0vALfuaQMJusYqpjuNN61Bm9wyi+Yp8+P1LPJxc3lwM3q6x
-tr/T9xFZMfAPQgjxSdujNRbIqM8iqkEBPqX1wfBJn+LFPhOLg0wBv1AC6lfsAFcG+azJDDKl
-7TDdcmkxxc+I8t0ogfjA5+naKKT5caZ1KLOhae4h2meQihXJcJze+cbicHLrSGdPC/nVk82k
-s6dlxJb3psh9z0wjhBCfnN1fa4GocZhFJGS+XPM4A75YDRNInPX+IHyGX9PFUEx1fDXKd6ME
-UkhnZmvjhmybaR3K+C38CG1slH83XiuOt9JcIF7klVuSs76oKJ9TTGVPjjJFs7Mk47clGXwS
-xPeSFpAQQhTDP9daIEE/ZRTyHuS1JHnI5o60ZOI5XQyVuzP3NoGo5nYaUrvnVXP7wab1IIQQ
-Cbhcm2fAquSe3Np9IHG894wFsry3KUnAMRIKvH+OGHxvJfVXTGVPrrU4yjb28wX9DCI+UAwf
-HN7XEGEUf6uY6FYMVysQH2lrxHD7xqmZQ6N8N0ogL5NZB0jAt7XtgHhVMXxQMvEzyfBWSflN
-ivIlw8vsuFRRca3P+HWS4rLy3hHFxLqw/og3M3X28QSzx/MmBTQh7E1wqFG+JJE/wIF6CUQy
-8Uil73p+rCgBB+L6boRACCFEMRyqVz0UE6UhwKOio3Jzjyd4/jAqoAnrp82fGPJNTsjgG32F
-jINKiwUhbb4jqWhVlM9R6Y7TYhnlc6I2QVXOIvX93H30/fZeKpCuetVDghiMjsjpOZg4uR3m
-Aump6f/xkEzckyRpH/B2Iz+ARW17gLckjT+0o0H0l4+rn0Bw9dgY90aBDAEeVT+B4GXREXXl
-rkmwtPuCSfGSkJ/cOilx4s0d6Tg+VNjLPSY+LKZO+VzS+ENXTpgo+ZSfS0j4h3TjNxCEGxRj
-hO+bTfJVgNrlfNOXfD7NnpfkDsLIgP8iXjROrpe43lbieFuiLfcmcb2tpKvvWyYJJ0VSXCZB
-vCUBt8Q1BbhTUlwW1XY3IRMUE90ScK1k4rkRA1wjAdcoQF5t/D7jV0rAtRJwzRgfA5KJe4aP
-yZ5Y9jnqGBMDXKMYrpYgnpEgehTDLgV4iwJ+4RC0H62LT9HsrEDfw1tes0a5grheW8uA5e0o
-VHM79Rm/TgI+LkH8VYIYVIBq9wLOtnh7ZMTWir0jf1cg+hXgj8N3Co7mf5J/snI3OsGuAAAA
-AElFTkSuQmCC
---------------00BB79588E3CE6482B5F269C--
+Content-Disposition: inline; filename=image001.png
+Content-ID: <image001.png@01D5842B.05639490>
+
+iVBORw0KGgoAAAANSUhEUgAAAM4AAABRCAYAAACaL5lSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
+bWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp
+bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6
+eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0
+MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo
+dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw
+dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv
+IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS
+ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD
+cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNl
+SUQ9InhtcC5paWQ6MDA4QzAyM0IwREIwMTFFNEFGMDREM0VEMjExRjlBRTIiIHhtcE1NOkRvY3Vt
+ZW50SUQ9InhtcC5kaWQ6MDA4QzAyM0MwREIwMTFFNEFGMDREM0VEMjExRjlBRTIiPiA8eG1wTU06
+RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowMDhDMDIzOTBEQjAxMUU0QUYw
+NEQzRUQyMTFGOUFFMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowMDhDMDIzQTBEQjAxMUU0
+QUYwNEQzRUQyMTFGOUFFMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1w
+bWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhF3nYoAAAlvSURBVHja7J1fjBXVHcfPJQJRoe1urQYJ
+RBYlMUJisqwvGNjY3WgEUtN2CeWBIGb3Ju6LElsW+gA8AHe1UfuwTcBASB/Q7CZNG0tjw2pWU15k
+NzEBJFnLqmvQBNEbU0pbX+jve+9vlrOzM/fOnTtz78zs95P8cv/MOTPnzJzvnN/5zZ+Tu3XrliGE
+1MYC7gJCKBxCKBxCKBxCKBxCKBxCCIVDCIVDCIVDCIVDyDzmDq8/d+1/PY5trRB7VGyt2BqxVWLL
+xe4RW6JpbohdF7sq9qnYpNhFsY/Evoi6QKeOvMAWQKITToQ8LPaEWKfYBrFlVdL/SO1BsU3W/1+J
+nRMbE3tP7DIPHcmicLrFfia2VWxlBOuD4H6pNi32tthfxM7yEJIsCAc9yw6x7WJLYyozhNgvtlPs
+LbHT2hMRkjrhYPzynNhu/d4IIMxesafEToqdiGMcREhcwnlKe4AtTaoDhHpArF1sSOwdHlYSN/WG
+o/Niv2+iaGy2aFnyPKwkqT1OTmyf2pIE1Qdh7t+J/VjsqBgfbyWJEU5OXaMDCa0ThHxYbJHYIYqH
+JMVV25dg0dgc0LIS0nTh5FPWGPdxzEOaLRxEz/YkbEwTxG3bo2UnpOHCQci3XwffaWONln0FDzdp
+tHBwcXNLiuu5RetASMOE02nKdwSknd1aF0IaIpwdGXFzVmhdCIldOLjLeXuG6rtd60RIrMLBowFL
+M1TfpVonQmITDh5C25rBOm/VuhESi3Dw5ObKDNZ5pdaNkFiE05nhenfy0JM4hIMI1IYM13uD4QVR
+EoNw8DaaZRmu9zKtIyGh8HusYG3UG/pJ6w/NKy89O/P70j+nzSsn/zTz+5EHV5oHlt9rep58fFa+
+sQ8vmEtXps35C5/4+12PrTMP3H9v6dMGeZAX6/Cp49tsAiRK4TTsnrS771xsdj3TZTrWPeQrCtil
+jmnzhzfPmH//538zyyC0/l9tLonSC6wT1tmxzgxJ3q+//a4pdSTzx1Vb1SjR/Hr3L3xFY4MeCWnt
+3wf7d/iKxgYC+83un7vTruLhJ1H3OMsbsfHnpbdAo0Yv8rcPzpsz74/P6i3QU0AgtgA2b1pvPhQX
+DHltd+7MB+MzPQrSIa/tukE0mzeuN6f+/O6cOuZyubrr0tvb12bK73nDZ/cbbxwfzWKD2Tnw2l75
+KIiN/rHwYibvwggyobSfcO6Ju3COINDYX5axjsuNKo1PYLue+eksATy9scN0rF1T6q0AxkkYL9l8
+dvWaOXX1XfPZl9dK+W23zxJY1HXsUtEANK7RBDf+s1reakyJOFa7/utz6ivr6ZLlmTxBhHXVGvaw
+msfYYxYjf//HrHENBIMexVnmFs2cwIJr+WO33cKo64gGNKXfBzPcZo479Z2voqnU4zQENGz0DpWA
+aJAOLpoNxGa7dn6cv/jJbHfv/vtiqYu4ZhDN6pQd/5rdLUk/mPETQ109zo2GCOf8hUDpPr4yHTqv
+u8exAgQ3DCERC+d63BtGT1Ktt3G45uHK+VybmYPbDbSEc52Hn0QtnKtxb7jSuKZaWojOHvfUkt8J
+KjSijmT+jXEwqdOmeHuc/4bOe7OOvK46etLb24eoWI8pv4/aHhSP+IWZNRx9RX/mJd3xasvlP2wD
+USo7wlUaQ8jyYrUKhClnvewceO2Yltkr4maHq0vLEXkz5SijU8duJ6jgXpf8btPfe937Q5YXNU+L
+pilYaSY0zUiVsrdrObD+FmsR8o1Uyx+kx5mcByeNSa/GLzauB6XdtRgH66w21rqR9aDRDJu5YWGs
+f1yF5pe3YeWsU2QoW6DQt6a94hLNzP6AYFRY4y7RGN0Hwypav/UXrLwtrsU91fIHFc7FeSCci67G
+2KIHGQehqL1CDmbK0TLnbFSQtH11brtPbdDaRqu5Hept82hAzShnveDEgN5ltZzNc2pePaFTJ5S9
+Fel89sewfs876zPlR+GdywAFFZcX7VYPtj5E/kCuGubcxPSBWb1D+iuto01BDwp2YreGl0vo923S
+EIf17LTXOqhhaHe7c+qa5VUYJRdOvg94uGxRlhMXMStdJu+u41oNyjgRMNzdoq7SNucPdc3y2pC7
+rBPJNtulQvkkTd7cnp2vx3iHyydUcFP2nzXkD9TjYIKmcxnubc4ZaxIqbazO2XnQbowunB0KV6m9
+ju2PusdALn/bfZZsVjnrZTCCtPZ+8hyHqLinLMEajzQDbtG48hcr5Q/a44AxU55zM4uMefi4Xg13
+FtJQJ6Qh2o16IqxwAi5ri7mcsd5vVsNguyhp/co44fPdzZTur7aQxZ0wwW5DqioczO6Mq4dZfO/A
+ex5uhcO3VqOr5l6EpVih0RcrbL/R5ayHqSj2RwURhdqeFZWzx5s1i62ScDAlOh706s+gcC4npHHV
+SoshoRDB9Fjjw7qpdq8apkTH7M5LM75fnTNeUc74rSxn5kTjXFtyGLDHUAhE1HDHeCDhYGWYEr13
+nginBQPwIBcfWc5UsdcKLmyLYoVB3h192mR/GvRRnwE4y5n+3qbdcnErBSvaoxbOmNjJLO9cRKGs
+gWehylX7rmZdlU9LOdM2RtS7ClqiFg44IfbXtO6thQvvuBkgWd7auePuRqcN8Zi5faGsWaSlnIlA
+w9yOS1vQIIEjmDb7frkogwMOcNWGTPnNMGl7O8zknYsX/UA+76p2NpcGB/93WBslzugFn+QTzapM
+WsqZMPLW/sI9ae7l3ToOChxxq2UO0HfEXjXpegAMZX118aKFNwM2SvjAqzXqUvRohPi/tdkv4khL
+ORPU64yoONxjHNyVsD7MbUU5rzd67Nr/eqU8+8UOp2Sf/VbsiN/CU0deYKsioVgQIs9RsUMpqNsh
+LSshkRPmZR23tFF+L7bPJG/69hsqmKNaVkISIRxHPHCBvhHbk6CAwaSOw47x0JIkCscBDfRzU76f
+rdnTuSNcPqRBDEISLRyjDfWSKUdzMCV6o+edQagcF2hPmOzf4UAyJByn8R405bsMMCU6ZneO+8bQ
+f5nyfXSnzdznawhJhXAcxtQQL8fszpioNurnefCMEB53wJ3bvDpOMiEch7NqGHNgotpOU54+MOw7
+DPCOgHMqSjyEdpmHjmRROA6X1YZ07IPpAzETGqJwmJ8GU21g1gAnpI1QMt6wiZcF4r1niJLhbTQf
+cfxCkkQuyFwghJDZLOAuIITCIYTCIYTCIYTCIYTCIYRQOIRQOIRQOIRQOIRQOISQWvi/AAMA9Ucz
+DEaG0p8AAAAASUVORK5CYII=
+------=_Part_6535_946016905.1571231060707--
+
+------=_Part_6534_297348878.1571231060707
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: inline
+
+herzlichen Dank f=C3=BCr Ihre Anfrage und Ihr Interesse an unserem Produkt.=
+ Gerne sende ich Ihnen schon einmal die wichtigsten Informationen zu:
+
+------=_Part_6534_297348878.1571231060707--
+
+------=_Part_6533_1502248680.1571231060707--
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____configuration.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____configuration.xml
index ff6162159e8c884b236bc8476aa4737e42c20c73..5795e4d815a48cc716357f0e1fcfd511391b38a5 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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.2">
+<aliasConfig xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.4" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.4">
   <name>_____CONFIGURATION</name>
   <serverId>default</serverId>
   <definitionName>_____CONFIGURATION</definitionName>
@@ -11,10 +11,8 @@
       <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" />
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 8e3679aca78ef7fd2bbbde1f50a1606830e77277..4d4a0a7d7a49bb32b08971869d8a8d73d6d342fc 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.8.0</systemDbVersion>
+  <systemDbVersion>2.8.3</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 1eb782d8f9d3e3424e8e9bf8afa9d26174c49b96..37e7e783d6892eb1390bba54778e26d6a34ed997 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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.2">
+<aliasConfig xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.4" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.4">
   <name>f50ee138-12d9-420d-a4f9-9b8257e207e4</name>
   <description>jdbc:derby://localhost:1527/basic_data</description>
   <serverId>default</serverId>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/defaultDbRepository.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/defaultDbRepository.xml
index 52ece967854e69d918544eb401747fbbaeca8784..5eb83b66cac9ed8a68d01ce0e6c3f93523a23096 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/data/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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.2">
+<aliasConfig xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.4" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.4">
   <name>defaultDbRepository_default</name>
   <serverId>default</serverId>
   <definitionName>defaultDbRepository</definitionName>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/mailServerIMAP.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/mailServerIMAP.xml
index 783efb1f106e3917e36a2424e80e45a18a8b5da9..bed14237c350bfc9561427fe948b64c425fb8ca6 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/mailServerIMAP.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/mailServerIMAP.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.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.2">
+<aliasConfig xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.4" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.4">
   <name>mailServerIMAP_default</name>
   <serverId>default</serverId>
   <definitionName>mailServerIMAP</definitionName>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_permissionaction.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_permissionaction.xml
index ac3dc71255a55718c3fbf2dc8f5c82c72cdb37b4..3abb262430cbc72e7b4d2f4027f8adebfd43f3f1 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_permissionaction.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_permissionaction.xml
@@ -1,6 +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">
-    <changeSet author="s.leipold" id="3d4baf88-48c0-4ad2-9ceb-72dd8a1a9f6z">
+    <changeSet author="s.leipold" id="b01f6744-e732-45a2-a550-070fb1f1f2c">
         
         <insert tableName="ASYS_PERMISSIONACTION">
             <column name="ASYS_PERMISSIONACTIONID" value="ADMIN_PERMACTION_VIEW_METADATA      "/>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_system.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_system.xml
index 516dc89be7d670a2555b1e87f6c2fa97959933c9..ca53b5a37ac699700f1c7a68524167d5460a1f44 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_system.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_system.xml
@@ -3,11 +3,11 @@
 <changeSet author="j.hoermanns" id="3d4baf88-48c0-4ad2-9ceb-72dd8a1a9f6a">
     <insert tableName="ASYS_SYSTEM">
         <column name="ID" value="_____SYSTEM_SYSDB_VERSION                                      "/>
-        <column name="DATE_EDIT" valueDate="2019-01-21T13:24:41.668"/>
+        <column name="DATE_EDIT" valueDate="2020-05-14T11:06:09.420"/>
         <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.8.0"/>
+        <column name="TITLE" value="2.8.3"/>
         <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/changelog.xml b/.liquibase/_____SYSTEMALIAS/changelog.xml
index 6d6c244604e5ac24f9eb9e96d2e9a82c37f71364..0cff9f38ee81bb25310dd733eb038dc903af637e 100644
--- a/.liquibase/_____SYSTEMALIAS/changelog.xml
+++ b/.liquibase/_____SYSTEMALIAS/changelog.xml
@@ -3,4 +3,6 @@
     <include relativeToChangelogFile="true" file="basic/init/init.xml"/>
 
     <include relativeToChangelogFile="true" file="basic/_demoData/changelog.xml" context="example"/>
+    
+    <include relativeToChangelogFile="true" file="basic/Workflow/webserviceUser_flowableIdmService.xml" context="workflow"/>
 </databaseChangeLog>
diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod
index 3cf0386dfd91a32515217928491ca53e6044b766..06901c17a5ee9fae60cfaf16c684d29b93499f6b 100644
--- a/aliasDefinition/Data_alias/Data_alias.aod
+++ b/aliasDefinition/Data_alias/Data_alias.aod
@@ -263,7 +263,7 @@
                   <customJDitoProperty>
                     <name>translate4Log</name>
                     <global v="false" />
-                    <property>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/contact/entityfields/language/customproperties/translate4log/property.js</property>
+                    <property>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/contact/entityfields/isolanguage/customproperties/translate4log/property.js</property>
                   </customJDitoProperty>
                 </customProperties>
               </entityFieldDb>
@@ -1686,7 +1686,7 @@
                 <name>GROUPCODEID</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="1" />
+                <columnType v="12" />
                 <size v="36" />
                 <scale v="0" />
                 <notNull v="false" />
@@ -1746,10 +1746,11 @@
                     <global v="false" />
                     <property v="true" />
                   </customBooleanProperty>
-                  <customStringProperty>
+                  <customJDitoProperty>
                     <name>translate4Log</name>
                     <global v="false" />
-                  </customStringProperty>
+                    <property>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/product/entityfields/contact_id/customproperties/translate4log/property.js</property>
+                  </customJDitoProperty>
                 </customProperties>
                 <dependencies>
                   <entityDependency>
@@ -2186,6 +2187,11 @@
                     <global v="false" />
                     <property v="true" />
                   </customBooleanProperty>
+                  <customJDitoProperty>
+                    <name>translate4Log</name>
+                    <global v="false" />
+                    <property>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/productprice/entityfields/contact_id/customproperties/translate4log/property.js</property>
+                  </customJDitoProperty>
                 </customProperties>
                 <dependencies>
                   <entityDependency>
@@ -14925,6 +14931,20 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
         </entities>
diff --git a/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/contact/entityfields/isolanguage/customproperties/translate4log/property.js b/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/contact/entityfields/isolanguage/customproperties/translate4log/property.js
new file mode 100644
index 0000000000000000000000000000000000000000..57b05c44e8fcffe05080e9a0109aec6856eda75a
--- /dev/null
+++ b/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/contact/entityfields/isolanguage/customproperties/translate4log/property.js
@@ -0,0 +1,7 @@
+import("Keyword_lib");
+import("system.result");
+import("Loghistory_lib");
+
+var params = Translate4LogParams.load();
+var res = LanguageKeywordUtils.getViewValue(params.value, params.locale);
+result.string(res);
diff --git a/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/salesorder/entityfields/object_rowid/customproperties/translate4log/property.js b/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/salesorder/entityfields/object_rowid/customproperties/translate4log/property.js
index 00b69dab2571dae2f6258e66897a7073cb4ade8a..aa7a1fe2a061e4d09e65eab58e503c37562cf5a6 100644
--- a/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/salesorder/entityfields/object_rowid/customproperties/translate4log/property.js
+++ b/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/salesorder/entityfields/object_rowid/customproperties/translate4log/property.js
@@ -6,11 +6,10 @@ import("system.result");
 import("Context_lib");
 
 var params = Translate4LogParams.load();
-var val = params.value;
 
 var type = newSelect("OBJECT_TYPE")
            .from("SALESORDER")
-           .newWhere("OBJECT_ROWID", val)
-           .cell()
+           .where("SALESORDER.SALESORDERID", params.rowId)
+           .cell();
 
-result.string(db.cell(ContextUtils.getNameSql(type, val)));
+result.string(db.cell(ContextUtils.getNameSql(type, params.value)));
diff --git a/entity/360Degree_entity/360Degree_entity.aod b/entity/360Degree_entity/360Degree_entity.aod
index 7069d6c38e61b4bf3909502e67902cd1f7ecff6b..3ca98a082b746337cb9a5350356b790754247056 100644
--- a/entity/360Degree_entity/360Degree_entity.aod
+++ b/entity/360Degree_entity/360Degree_entity.aod
@@ -127,7 +127,6 @@
           <title>Contract</title>
           <onActionProcess>%aditoprj%/entity/360Degree_entity/entityfields/newmodule/children/newcontract/onActionProcess.js</onActionProcess>
           <iconId>VAADIN:FILE_TEXT</iconId>
-          <iconIdProcess>%aditoprj%/entity/360Degree_entity/entityfields/newmodule/children/newcontract/iconIdProcess.js</iconIdProcess>
           <stateProcess>%aditoprj%/entity/360Degree_entity/entityfields/newmodule/children/newcontract/stateProcess.js</stateProcess>
         </entityActionField>
         <entityActionField>
diff --git a/entity/Activity_entity/Activity_entity.aod b/entity/Activity_entity/Activity_entity.aod
index bb17b9fa7f2471bd1c69064d7f84a049d033be65..0d0a112f0c5bf19ba9ee893659b494b388606b3b 100644
--- a/entity/Activity_entity/Activity_entity.aod
+++ b/entity/Activity_entity/Activity_entity.aod
@@ -87,6 +87,12 @@
           <fieldName>Activities</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>262fe53d-7358-40ff-8641-e08add14528a</name>
+          <entityName>Object_entity</entityName>
+          <fieldName>Activities</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
     </entityProvider>
     <entityField>
@@ -485,7 +491,6 @@
       <children>
         <entityParameter>
           <name>LinkedObjectId_param</name>
-          <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/appointments/children/linkedobjectid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
     </entityConsumer>
@@ -566,6 +571,7 @@
     </entityField>
     <entityField>
       <name>bindata</name>
+      <title>data</title>
       <contentType>FILE</contentType>
       <stateProcess>%aditoprj%/entity/Activity_entity/entityfields/bindata/stateProcess.js</stateProcess>
       <onValueChange>%aditoprj%/entity/Activity_entity/entityfields/bindata/onValueChange.js</onValueChange>
diff --git a/entity/Activity_entity/recordcontainers/db/conditionProcess.js b/entity/Activity_entity/recordcontainers/db/conditionProcess.js
index fe77ebfa1d1ce7e8056d1505bcbda07e318f163e..6b1c96c3d19779e42de1168ab94b5e132eac7264 100644
--- a/entity/Activity_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Activity_entity/recordcontainers/db/conditionProcess.js
@@ -1,59 +1,56 @@
-import("system.logging");
 import("Employee_lib");
 import("system.vars");
 import("system.db");
 import("system.result");
 import("Sql_lib");
 
-var loadNothing = false;
-var cond = newWhere();
+var condition = newWhere();
 if (vars.exists("$param.RowId_param") && vars.get("$param.RowId_param") && vars.exists("$param.ObjectId_param") && vars.get("$param.ObjectId_param"))
 {
+    var activityLinkSubselect = newSelect("ACTIVITYLINK.ACTIVITYLINKID")
+        .from("ACTIVITYLINK")
+        .where("ACTIVITYLINK.ACTIVITY_ID = ACTIVITY.ACTIVITYID")
+        .and("ACTIVITYLINK.OBJECT_TYPE", "$param.ObjectId_param");
+        
     var rowId = vars.get("$param.RowId_param");
-    var rowIds = [rowId];
-    var rowIdCond = null;
     if (vars.get("$param.ObjectId_param") == "Person")
     {
-        var personIdSelect = newSelect("CONTACT.CONTACTID")
-                                    .from("CONTACT")
-                                    .where("CONTACT.CONTACTID", rowId)
-                                    .and("CONTACT.PERSON_ID", newSelect("CONTACT.PERSON_ID")
-                                                                .from("CONTACT")
-                                                                .where("CONTACT.CONTACTID", rowId));                                     
-        rowIds = personIdSelect.array(db.COLUMN);
+        //in the Person context, all activites linked to the person should be shown, so it is necessary to get all contactIds of that person
+        var allPersonRelatedContactIds = newSelect("personContacts.CONTACTID")
+            .from("CONTACT")
+            .join("CONTACT", "CONTACT.PERSON_ID = personContacts.PERSON_ID", "personContacts")
+            .where("CONTACT.CONTACTID", "$param.RowId_param")                                
+            .arrayColumn();
+            
+        if (allPersonRelatedContactIds.length === 0)
+            condition.and("1=2");
+        else
+        {
+            activityLinkSubselect.and("ACTIVITYLINK.OBJECT_ROWID", allPersonRelatedContactIds, SqlBuilder.IN());
+            condition.and(null, activityLinkSubselect, SqlBuilder.EXISTS());
+        }
+    }
+    else
+    {
+        activityLinkSubselect.and("ACTIVITYLINK.OBJECT_ROWID", "$param.RowId_param");
+        condition.and(null, activityLinkSubselect, SqlBuilder.EXISTS());
     }
-    
-    var activityLinkSubselect = newSelect("ACTIVITYLINK.ACTIVITY_ID")
-                                        .from("ACTIVITYLINK")
-                                        .where("ACTIVITYLINK.OBJECT_ROWID", rowIds, SqlBuilder.IN())
-                                        .and("ACTIVITYLINK.OBJECT_TYPE", "$param.ObjectId_param");
-        
-                                    // TODO: more performant way than IN. Maybe a join??
-    cond.and("ACTIVITY.ACTIVITYID", activityLinkSubselect, SqlBuilder.IN());
 }
     
-if(vars.getString("$param.OnlyInnate_param") == "true") 
+if (vars.exists("$param.ActivityIDs_param") && vars.get("$param.ActivityIDs_param")) 
 {
-    var ownContactId = EmployeeUtils.getCurrentContactId();
-    if (ownContactId)
-        cond.and("ACTIVITY.RESPONSIBLE", ownContactId);
-    else
-        loadNothing = true;
-}
-
-if (vars.exists("$param.ActivityIDs_param") && vars.get("$param.ActivityIDs_param")) {
-    var acticityIDs = JSON.parse(vars.get("$param.ActivityIDs_param"));
-    cond.and("ACTIVITY.ACTIVITYID",acticityIDs , SqlBuilder.IN());
+    var acticityIds = JSON.parse(vars.get("$param.ActivityIDs_param"));
+    condition.and("ACTIVITY.ACTIVITYID", acticityIds, SqlBuilder.IN());
 }
 
-if (loadNothing)
-{
-    resCond = "1 = 2";
-}
-else
+if (vars.getString("$param.OnlyInnate_param") == "true") 
 {
-    //TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
-    var resCond = cond.toString();
+    var ownContactId = EmployeeUtils.getCurrentContactId();
+    if (ownContactId)
+        condition.and("ACTIVITY.RESPONSIBLE", ownContactId);
+    else
+        condition.clearWhere().and("1=2");
 }
 
-result.string(resCond);
\ No newline at end of file
+//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
+result.string(condition.toString());
\ No newline at end of file
diff --git a/entity/Address_entity/afterOperatingState.js b/entity/Address_entity/afterOperatingState.js
index 02ce06265c7a4a2186f6b3da49e9a14bb646bd84..23f607ff7d13f5153ef6e252d1f8e6b185218040 100644
--- a/entity/Address_entity/afterOperatingState.js
+++ b/entity/Address_entity/afterOperatingState.js
@@ -1,3 +1,6 @@
+import("system.vars");
 import("system.neon");
 
-neon.setFieldValue("$field.AddressSearch", "");
\ No newline at end of file
+//in some cases, the field does not exist yet/not anymore when the afterOperatingState process is called
+if (vars.exists("$field.AddressSearch"))
+    neon.setFieldValue("$field.AddressSearch", "");//why is this needed?
\ No newline at end of file
diff --git a/entity/Analyses_entity/entityfields/new_tasks/valueProcess.js b/entity/Analyses_entity/entityfields/new_tasks/valueProcess.js
index 510afae5b2c0dfeb0451be8d4d176fc18bb6258c..3e2e63befe862a254f918262148b84b87d920816 100644
--- a/entity/Analyses_entity/entityfields/new_tasks/valueProcess.js
+++ b/entity/Analyses_entity/entityfields/new_tasks/valueProcess.js
@@ -7,6 +7,7 @@ import("KeywordRegistry_basic");
 var opentask = newSelect("count(TASKID)")
     .from("TASK")
     .where("TASK.STATUS", $KeywordRegistry.taskStatus$new())
+    .and ("TASK.KIND", "TASK")
     .and("TASK.EDITOR_CONTACT_ID", EmployeeUtils.getCurrentContactId())
     .cell();
     
diff --git a/entity/Analyses_entity/entityfields/overdue_tasks/valueProcess.js b/entity/Analyses_entity/entityfields/overdue_tasks/valueProcess.js
index a143770f57c25f94eb6c9ca911e7956949522ad9..98e88dd15849effecdb68f06183c6aedd6498ac2 100644
--- a/entity/Analyses_entity/entityfields/overdue_tasks/valueProcess.js
+++ b/entity/Analyses_entity/entityfields/overdue_tasks/valueProcess.js
@@ -7,6 +7,7 @@ import("system.result");
 var overdueTaskCount = newSelect("count(TASKID)")
                     .from("TASK")
                     .where("TASK.MATURITY_DATE", "$sys.date", SqlBuilder.LESS())
+                    .and ("TASK.KIND", "TASK")
                     .and("TASK.EDITOR_CONTACT_ID", EmployeeUtils.getCurrentContactId())
                     .and("TASK.STATUS", TaskUtils.getEndedStatuses(), SqlBuilder.NOT_IN())
                     .cell()
diff --git a/entity/AnyContact_entity/AnyContact_entity.aod b/entity/AnyContact_entity/AnyContact_entity.aod
index 8db94a88d290b6ae25d9b37180d3c350627e4344..ea4b4e03bb85dfca064ee1c4401f5174f586b282 100644
--- a/entity/AnyContact_entity/AnyContact_entity.aod
+++ b/entity/AnyContact_entity/AnyContact_entity.aod
@@ -122,7 +122,6 @@ See ContactUtils.getRelationTypeByPersOrg for possible values</description>
       <name>PERSON_PICTURE</name>
       <contentType>IMAGE</contentType>
       <valueProcess>%aditoprj%/entity/AnyContact_entity/entityfields/person_picture/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/AnyContact_entity/entityfields/person_picture/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
       <name>STANDARD_EMAIL_COMMUNICATION</name>
diff --git a/entity/AnyContact_entity/entityfields/person_picture/displayValueProcess.js b/entity/AnyContact_entity/entityfields/person_picture/displayValueProcess.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/AppointmentLink_entity/AppointmentLink_entity.aod b/entity/AppointmentLink_entity/AppointmentLink_entity.aod
index bd96e6718e64f97200c02601e8fa738702515118..58aaa1c134d0aef45cc2e8c2b0d482ff4b95680f 100644
--- a/entity/AppointmentLink_entity/AppointmentLink_entity.aod
+++ b/entity/AppointmentLink_entity/AppointmentLink_entity.aod
@@ -93,17 +93,10 @@
     </entityActionField>
     <entityParameter>
       <name>LinkedObjectId_param</name>
-      <valueProcess>%aditoprj%/entity/AppointmentLink_entity/entityfields/linkedobjectid_param/valueProcess.js</valueProcess>
       <expose v="true" />
       <description>PARAMETER
 </description>
     </entityParameter>
-    <entityConsumer>
-      <name>AppointmentId</name>
-      <dependency>
-        <name>dependency</name>
-      </dependency>
-    </entityConsumer>
     <entityParameter>
       <name>AppointmentState_param</name>
       <expose v="true" />
diff --git a/entity/Appointment_entity/Appointment_entity.aod b/entity/Appointment_entity/Appointment_entity.aod
index 441da772bfa867ea346a87ee00699eb47facb425..a88c2b6e6d636b7e7c8b39c6815377002469eb4f 100644
--- a/entity/Appointment_entity/Appointment_entity.aod
+++ b/entity/Appointment_entity/Appointment_entity.aod
@@ -240,9 +240,7 @@
       <title>New activity</title>
       <onActionProcess>%aditoprj%/entity/Appointment_entity/entityfields/newactivity/onActionProcess.js</onActionProcess>
       <iconId>VAADIN:HOURGLASS</iconId>
-      <stateProcess>%aditoprj%/entity/Appointment_entity/entityfields/newactivity/stateProcess.js</stateProcess>
       <tooltip>New activity</tooltip>
-      <tooltipProcess>%aditoprj%/entity/Appointment_entity/entityfields/newactivity/tooltipProcess.js</tooltipProcess>
     </entityActionField>
     <entityField>
       <name>STATUS_ACTION</name>
diff --git a/entity/Appointment_entity/entityfields/begin/valueProcess.js b/entity/Appointment_entity/entityfields/begin/valueProcess.js
index 2c01e234cb59893a1d1cd42da3d6828137dcba9c..eca54b63828df7f3d8624fd9f8ea12f33358e3d9 100644
--- a/entity/Appointment_entity/entityfields/begin/valueProcess.js
+++ b/entity/Appointment_entity/entityfields/begin/valueProcess.js
@@ -8,7 +8,7 @@ import("system.result");
  */
 if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.Entry_param"))
 {
-    var event = JSON.parse(vars.getString("$param.Entry_param"));
+    let event = JSON.parse(vars.getString("$param.Entry_param"));
 
     if(vars.get("$this.value"))
         result.string(vars.get("$this.value"));
diff --git a/entity/Appointment_entity/entityfields/end/valueProcess.js b/entity/Appointment_entity/entityfields/end/valueProcess.js
index c7b6ff0bc3c969be63c3338eb60768a41c9d7d20..b953112d2ccabc54e8eebea2d9766346addafcdd 100644
--- a/entity/Appointment_entity/entityfields/end/valueProcess.js
+++ b/entity/Appointment_entity/entityfields/end/valueProcess.js
@@ -8,7 +8,7 @@ import("system.result");
  */
 if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.Entry_param"))
 {
-    var event = JSON.parse(vars.getString("$param.Entry_param"));
+    let event = JSON.parse(vars.getString("$param.Entry_param"));
 
     if(vars.get("$this.value"))
         result.string(vars.get("$this.value"));
diff --git a/entity/Appointment_entity/entityfields/newactivity/stateProcess.js b/entity/Appointment_entity/entityfields/newactivity/stateProcess.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/Attribute_entity/Attribute_entity.aod b/entity/Attribute_entity/Attribute_entity.aod
index 4ffbcecb9997e552d82e0beec3c133749ac077c3..81ed998586bd298aa9203da5bcbb1f50c2da615f 100644
--- a/entity/Attribute_entity/Attribute_entity.aod
+++ b/entity/Attribute_entity/Attribute_entity.aod
@@ -323,6 +323,8 @@
           <isObjectAction v="false" />
           <isSelectionAction v="true" />
           <iconId>VAADIN:FILE_TREE_SMALL</iconId>
+          <state>AUTO</state>
+          <stateProcess>%aditoprj%/entity/Attribute_entity/entityfields/attributeactions/children/newchildattribute/stateProcess.js</stateProcess>
         </entityActionField>
       </children>
     </entityActionGroup>
diff --git a/entity/Attribute_entity/entityfields/attributeactions/children/newchildattribute/stateProcess.js b/entity/Attribute_entity/entityfields/attributeactions/children/newchildattribute/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8d1104b5aaa31e686a00a58b47dba81fe63ead08
--- /dev/null
+++ b/entity/Attribute_entity/entityfields/attributeactions/children/newchildattribute/stateProcess.js
@@ -0,0 +1,9 @@
+import("Attribute_lib");
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+if(vars.get("$sys.selection").length == 1 && vars.get("$field.ATTRIBUTE_TYPE") == $AttributeTypes.GROUP.toString())
+    result.string(neon.COMPONENTSTATE_EDITABLE)
+else
+    result.string(neon.COMPONENTSTATE_DISABLED)
\ 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 2db6fc3da92b0707cb73c6c480ce2aa0df02be3c..9d50cc58b4426a6edc78c8f787084914be798653 100644
--- a/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js
@@ -16,7 +16,7 @@ var childType = vars.get("$param.ChildType_param");
 var objectType = vars.get("$param.ObjectType_param");
 var filteredIds = vars.getString("$param.FilteredAttributeIds_param") ? JSON.parse(vars.getString("$param.FilteredAttributeIds_param")) : null
 var attributeCountObj = vars.get("$param.AttributeCount_param") ? JSON.parse(vars.getString("$param.AttributeCount_param")) : null;
-var displaySimpleName = vars.get("$param.DisplaySimpleName_param");
+var displaySimpleName = vars.getString("$param.DisplaySimpleName_param") == "true" ? true : false;
 
 var themeObjectRowId = vars.get("$param.ThemeObjectRowId_param");
 
diff --git a/entity/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod
index 479d44ab5de6c5679e52ac87fa78d7beeaf9e407..e2e46ded6f8c1b63b5ed6aa1f2432491c0edd213 100644
--- a/entity/BulkMail_entity/BulkMail_entity.aod
+++ b/entity/BulkMail_entity/BulkMail_entity.aod
@@ -262,7 +262,6 @@
       <title>Preview</title>
       <contentType>HTML</contentType>
       <state>INVISIBLE</state>
-      <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/contentpreview/stateProcess.js</stateProcess>
       <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/contentpreview/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
diff --git a/entity/BulkMail_entity/entityfields/contentpreview/stateProcess.js b/entity/BulkMail_entity/entityfields/contentpreview/stateProcess.js
deleted file mode 100644
index 255c6a981d797dac132edfcb2a23159b6abb5241..0000000000000000000000000000000000000000
--- a/entity/BulkMail_entity/entityfields/contentpreview/stateProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.vars");
-import("system.neon");
-import("system.result");
-
-if (vars.get("$field.contentPreview"))
-    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
index 6d2d0aeedf3df91a3186eb64c2bb18582a2d1df4..88626d517388be0ae8c0186c2f3729d00b741eb7 100644
--- a/entity/BulkMail_entity/entityfields/sender/valueProcess.js
+++ b/entity/BulkMail_entity/entityfields/sender/valueProcess.js
@@ -1,5 +1,8 @@
+import("system.neon");
+import("system.vars");
 import("Communication_lib");
 import("system.result");
 import("Employee_lib");
 
+if(vars.get("$this.value") == null && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
 result.string(CommUtil.getStandardMail(EmployeeUtils.getCurrentContactId()));
\ No newline at end of file
diff --git a/entity/BulkMail_entity/recordcontainers/db/onDBInsert.js b/entity/BulkMail_entity/recordcontainers/db/onDBInsert.js
index d1cc3f17cb73fcb1cd437eb34c5ca4c7a8621ef0..765ab4952ebc53f5733ec38b05f5b85fef838e2e 100644
--- a/entity/BulkMail_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/BulkMail_entity/recordcontainers/db/onDBInsert.js
@@ -1,55 +1,55 @@
-import("Workflow_lib");
-import("Binary_lib");
-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");
-
-if (vars.get("$field.templateType") != 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, new FileUpload(bindata), content, DocumentTemplate.types.HTML);
-
-if (template && template.content && BulkMailUtils.isValidTemplateType(template.type))
-{
-    if (!template.filename)
-        template.filename = bulkMailName + ".html";
-    SingleBinaryUtils.insert("BULKMAIL", "DOCUMENT", bulkMailId, template.content, template.filename);
-}
-
-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"];
-    });
-}
-
-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));
-
+import("Workflow_lib");
+import("Binary_lib");
+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");
+
+if (vars.get("$field.templateType") != 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, new FileUpload(bindata), content, DocumentTemplate.types.HTML);
+
+if (template && template.content && BulkMailUtils.isValidTemplateType(template.type))
+{
+    if (!template.filename)
+        template.filename = bulkMailName + ".html";
+    SingleBinaryUtils.insert("BULKMAIL", "DOCUMENT", bulkMailId, template.content, template.filename);
+}
+
+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"];
+    });
+}
+
+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));
+
 WorkflowSignalSender.inserted();
\ 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 08049ff49d5f0e1dfe9d29c1f1f330b631a59cde..d0d6d13510e00a5910eb93432d98a6163d8ce175 100644
--- a/entity/BulkMail_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/BulkMail_entity/recordcontainers/db/onDBUpdate.js
@@ -1,37 +1,37 @@
-import("Workflow_lib");
-import("system.util");
-import("Binary_lib");
-import("system.neon");
-import("Sql_lib");
-import("DocumentTemplate_lib");
-import("system.result");
-import("system.vars");
-import("system.db");
-import("Document_lib");
-import("Bulkmail_lib");
-
-// eml is not editable
-if (vars.get("$field.templateType") != 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 = BulkMailUtils.getBulkMailTemplate(bulkMailId, templateId, false, false, new FileUpload(bindata));
-if (content)
-    template.content = util.encodeBase64String(content);
-
-if (template && template.content && BulkMailUtils.isValidTemplateType(template.type))
-{
-    if (!template.filename)
-        template.filename = bulkMailName + ".html";
-    
-    SingleBinaryUtils.set("BULKMAIL", "DOCUMENT", vars.get("$local.uid"), template.content, template.filename);
-    
-    neon.refresh(["$field.content"]);
-}
-
+import("Workflow_lib");
+import("system.util");
+import("Binary_lib");
+import("system.neon");
+import("Sql_lib");
+import("DocumentTemplate_lib");
+import("system.result");
+import("system.vars");
+import("system.db");
+import("Document_lib");
+import("Bulkmail_lib");
+
+// eml is not editable
+if (vars.get("$field.templateType") != 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 = BulkMailUtils.getBulkMailTemplate(bulkMailId, templateId, false, false, new FileUpload(bindata));
+if (content)
+    template.content = util.encodeBase64String(content);
+
+if (template && template.content && BulkMailUtils.isValidTemplateType(template.type))
+{
+    if (!template.filename)
+        template.filename = bulkMailName + ".html";
+    
+    SingleBinaryUtils.set("BULKMAIL", "DOCUMENT", vars.get("$local.uid"), template.content, template.filename);
+    
+    neon.refresh(["$field.content"]);
+}
+
 WorkflowSignalSender.updated();
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/entityfields/campaign_id/onValueChange.js b/entity/CampaignParticipant_entity/entityfields/campaign_id/onValueChange.js
index 73033cd7e06fc00bb164ff8920be139478a10057..f5f6c5c6594a1a57fb3aaa41b59dfd0768bfc430 100644
--- a/entity/CampaignParticipant_entity/entityfields/campaign_id/onValueChange.js
+++ b/entity/CampaignParticipant_entity/entityfields/campaign_id/onValueChange.js
@@ -2,5 +2,8 @@ import("system.neon");
 import("Campaign_lib");
 import("system.vars");
 
-var stepId = CampaignUtils.getDefaultCampaignStep(vars.get("local.value"));
-neon.setFieldValue("$field.CAMPAIGNSTEP_ID", stepId);
\ No newline at end of file
+if(vasr.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW)
+{
+    var stepId = CampaignUtils.getDefaultCampaignStep(vars.get("local.value"));
+    neon.setFieldValue("$field.CAMPAIGNSTEP_ID", stepId);
+}
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/onDBInsert.js b/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/onDBInsert.js
index bc3712278f25894a8721b39e3ab1ce74ecab3e00..354005207ee1ef200be6f0b9b6f02d3ed51ce909 100644
--- a/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/onDBInsert.js
+++ b/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/onDBInsert.js
@@ -8,4 +8,4 @@ var contactId = rowdata["CAMPAIGNPARTICIPANT.CONTACT_ID"];
 var campaignParticipantId = vars.get("$local.uid");
 var previousCampaignstepId = "";
 
-CampaignUtils.createLogEntry(campaignId, campaignStepId, contactId, campaignParticipantId, previousCampaignstepId);
\ No newline at end of file
+CampaignUtils.createLogEntry(campaignId, campaignStepId, campaignParticipantId, previousCampaignstepId);
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/CampaignStep_entity.aod b/entity/CampaignStep_entity/CampaignStep_entity.aod
index 81199f0672d48d253e28448fbbd21e2d9443074a..4b36e31d21405f4df2a56b34fd8bc4fd6b32b80a 100644
--- a/entity/CampaignStep_entity/CampaignStep_entity.aod
+++ b/entity/CampaignStep_entity/CampaignStep_entity.aod
@@ -116,7 +116,6 @@
     <entityField>
       <name>DATE_EDIT</name>
       <valueProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/date_edit/valueProcess.js</valueProcess>
-      <onValueChange>%aditoprj%/entity/CampaignStep_entity/entityfields/date_edit/onValueChange.js</onValueChange>
       <onValueChangeTypes>
         <element>MASK</element>
         <element>PROCESS</element>
diff --git a/entity/CampaignStep_entity/entityfields/date_edit/onValueChange.js b/entity/CampaignStep_entity/entityfields/date_edit/onValueChange.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/Contract_entity/entityfields/contractcode/onValidation.js b/entity/Contract_entity/entityfields/contractcode/onValidation.js
index 4d3cfa688f691b265b2348d492a123d2ef8f47e4..df25fe9ca414526317a2169a3ed9f3d9ec1d74ac 100644
--- a/entity/Contract_entity/entityfields/contractcode/onValidation.js
+++ b/entity/Contract_entity/entityfields/contractcode/onValidation.js
@@ -1,11 +1,5 @@
-import("system.vars");
-import("system.result");
 import("system.neon");
-import("Contract_lib");
-import("Entity_lib");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW
-    && !ContractUtils.validateContractNumber(vars.get("local.value")))
-{
-    vars.set("$field.CONTRACTCODE", ContractUtils.getNextContractNumber().toString());
-}
\ No newline at end of file
+//reload the field on save to make sure the contractcode is really unique, otherwise the contractcode could be the same for two contracts created at
+//the same time
+neon.refresh(["$field.CONTRACTCODE"]);
\ No newline at end of file
diff --git a/entity/Countries_Entity/documentation.adoc b/entity/Countries_Entity/documentation.adoc
index 6af57c1dc49b08cdba1a7586222917ca872fd5dd..e0a8f85b84d70ef1db2bd8385cf83a059bd1b11d 100644
--- a/entity/Countries_Entity/documentation.adoc
+++ b/entity/Countries_Entity/documentation.adoc
@@ -8,4 +8,7 @@ It could be easily extend to hold information like:
 * timezones (Multistring)
 * currencies
 * spoken languages
-* etc
\ No newline at end of file
+* etc
+
+The data origin is: https://chromium-i18n.appspot.com/ssl-address
+For more information, see: https://github.com/google/libaddressinput/wiki/AddressValidationMetadata at https://github.com/google/libaddressinput
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod b/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod
index 8e7c5a1804a911cc3e7641c41f0c300c03a87e41..3e4bbba2abdc84a8a7f33554ef8178579318db16 100644
--- a/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod
+++ b/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod
@@ -191,7 +191,6 @@
       <name>Attachments</name>
       <targetContextField>TARGET_CONTEXT</targetContextField>
       <targetIdField>DOCUMENTTEMPLATEID</targetIdField>
-      <targetConsumerProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/attachments/targetConsumerProcess.js</targetConsumerProcess>
       <titlePlural>Attachments</titlePlural>
       <recordContainer>db</recordContainer>
       <dependencies>
@@ -411,6 +410,10 @@
           <name>REPLACEMENTNAME.value</name>
           <recordfield>DOCUMENTTEMPLATE.REPLACEMENTNAME</recordfield>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>KIND.displayValue</name>
+          <expression>%aditoprj%/entity/DocumentTemplate_entity/recordcontainers/db/recordfieldmappings/kind.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
   </recordContainers>
diff --git a/entity/DocumentTemplate_entity/recordcontainers/db/recordfieldmappings/kind.displayvalue/expression.js b/entity/DocumentTemplate_entity/recordcontainers/db/recordfieldmappings/kind.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8f3819fed4e85372be055d5ad7cb4dac7723cc6
--- /dev/null
+++ b/entity/DocumentTemplate_entity/recordcontainers/db/recordfieldmappings/kind.displayvalue/expression.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.documentTemplateType(), "DOCUMENTTEMPLATE.KIND");
+result.string(sql);
diff --git a/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod b/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod
index e2ce64f96ec552b3e1e6357c940ecf6436466203..b7116402fb566724a159f7c003fde69a19901b96 100644
--- a/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod
+++ b/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod
@@ -4,7 +4,7 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/entity/DuplicateScanner_entity/documentation.adoc</documentation>
   <title>Duplicate Configuration</title>
-  <iconId>VAADIN:DATABASE</iconId>
+  <iconId>VAADIN:COG_O</iconId>
   <titlePlural>Configurations</titlePlural>
   <recordContainer>DBRecordContainer</recordContainer>
   <entityFields>
diff --git a/entity/Duplicates_entity/Duplicates_entity.aod b/entity/Duplicates_entity/Duplicates_entity.aod
index 35d21a2faa68a5a0649dd4054e16d929988de77a..8b4c751722f526a33993a40e759fceb7a461a008 100644
--- a/entity/Duplicates_entity/Duplicates_entity.aod
+++ b/entity/Duplicates_entity/Duplicates_entity.aod
@@ -7,6 +7,7 @@
   <siblings>
     <element>DuplicatesUnrelated_entity</element>
   </siblings>
+  <iconId>VAADIN:DATABASE</iconId>
   <recordContainer>recordContainer</recordContainer>
   <entityFields>
     <entityProvider>
diff --git a/entity/Email_entity/Email_entity.aod b/entity/Email_entity/Email_entity.aod
index 456f7cec906d6daf6c64a643fc544fea8c1e4e9d..b328022e7bb7911735abc0e14869cb594e133bce 100644
--- a/entity/Email_entity/Email_entity.aod
+++ b/entity/Email_entity/Email_entity.aod
@@ -55,7 +55,6 @@
       <textInputAllowed v="true" />
       <valueProcess>%aditoprj%/entity/Email_entity/entityfields/recipient/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/Email_entity/entityfields/recipient/displayValueProcess.js</displayValueProcess>
-      <onValueChange>%aditoprj%/entity/Email_entity/entityfields/recipient/onValueChange.js</onValueChange>
     </entityField>
     <entityConsumer>
       <name>EmailAddresses</name>
@@ -104,6 +103,14 @@
       <name>NotificationMsg_param</name>
       <expose v="true" />
     </entityParameter>
+    <entityField>
+      <name>subject</name>
+      <title>Subject</title>
+    </entityField>
+    <entityParameter>
+      <name>EmailFilename</name>
+      <expose v="true" />
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
diff --git a/entity/Email_entity/entityfields/recipient/onValueChange.js b/entity/Email_entity/entityfields/recipient/onValueChange.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/Email_entity/recordcontainers/jdito/onInsert.js b/entity/Email_entity/recordcontainers/jdito/onInsert.js
index 6452af3ccd2e7b4c3f51aaaac14a19f5be2f37ca..b266465e5e7d8102995d9f786ab61d9c84080438 100644
--- a/entity/Email_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/Email_entity/recordcontainers/jdito/onInsert.js
@@ -12,8 +12,10 @@ import("system.question");
 var attachments = JSON.parse(vars.get("$param.Attachments_param"));
 var senderContactId = vars.get("$param.ContactId_param");
 var bindata =  new FileUpload(vars.get("$field.bindata"));
+var emailFilename = vars.get("$param.EmailFilename");
 var notificationMsg = vars.get("$param.NotificationMsg_param");
 var notificationTitle = translate.text("Offer status changed");
+var subject = vars.get("$field.subject");
 
 var eml = EmailWritingUtils.openMailTemplate(
     vars.get("$field.RECIPIENT"), 
@@ -21,7 +23,9 @@ var eml = EmailWritingUtils.openMailTemplate(
     vars.get("$field.DOCUMENT_TEMPLATE"), 
     senderContactId,
     bindata,
-    attachments
+    attachments,
+    subject,
+    emailFilename
     );
 
 
diff --git a/entity/Employee_entity/recordcontainers/jdito/onDelete.js b/entity/Employee_entity/recordcontainers/jdito/onDelete.js
index 0dc6052548fade830520481f16f01cc9bc9ce372..24ad2b0487705801548cc6654fe9a82e0bdb4322 100644
--- a/entity/Employee_entity/recordcontainers/jdito/onDelete.js
+++ b/entity/Employee_entity/recordcontainers/jdito/onDelete.js
@@ -11,7 +11,7 @@ if (EmployeeUtils.getCurrentUserName() != vars.get("$field.TITLE") && !EmployeeU
 {
     tools.deleteUser(vars.get("$field.TITLE"));
     
-    AttributeRelationQuery(EmployeeUtils.sliceUserId(vars.get("$field.UID")), null, ContextUtils.getCurrentContextId())
+    new AttributeRelationQuery(EmployeeUtils.sliceUserId(vars.get("$field.UID")), null, ContextUtils.getCurrentContextId())
         .deleteAllAttributes();
         
     WorkflowSignalSender.deleted();
diff --git a/entity/ExportTemplateField_entity/ExportTemplateField_entity.aod b/entity/ExportTemplateField_entity/ExportTemplateField_entity.aod
index 84396f573ecbeabfe825ea1fb6eb34e59f81aed8..8a781b6807e97a4ded80d80874109af4024f380e 100644
--- a/entity/ExportTemplateField_entity/ExportTemplateField_entity.aod
+++ b/entity/ExportTemplateField_entity/ExportTemplateField_entity.aod
@@ -25,6 +25,7 @@
     </entityField>
     <entityField>
       <name>FIELD</name>
+      <documentation>%aditoprj%/entity/ExportTemplateField_entity/entityfields/field/documentation.adoc</documentation>
       <title>Field</title>
       <mandatory v="true" />
       <dropDownProcess>%aditoprj%/entity/ExportTemplateField_entity/entityfields/field/dropDownProcess.js</dropDownProcess>
@@ -81,7 +82,6 @@
         <dbRecordFieldMapping>
           <name>EXPORTTEMPLATE_ID.value</name>
           <recordfield>EXPORTTEMPLATEFIELD.EXPORTTEMPLATE_ID</recordfield>
-          <expression>%aditoprj%/entity/ExportTemplateField_entity/recordcontainers/db/recordfieldmappings/exporttemplate_id.value/expression.js</expression>
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>EXPORTTEMPLATEFIELDID.value</name>
diff --git a/entity/ExportTemplateField_entity/documentation.adoc b/entity/ExportTemplateField_entity/documentation.adoc
index 12a981536f07b090008f49b7462d5ec16c7c5d6c..5e0969dbcc58b6eda7bed398b37b8c2a955fdcfa 100644
--- a/entity/ExportTemplateField_entity/documentation.adoc
+++ b/entity/ExportTemplateField_entity/documentation.adoc
@@ -1,4 +1,9 @@
 = ExportTemplateField_entity
 
 Entity to store all the Fields from the ExportTemplates, linked to the Template via the ExportTemplateId. 
+
+The selection of Exportfields is created by using the Placeholder function "PlaceholderUtils.getPlaceholders()".
+If you want to add more fields, you just have to add the function "CustomPlaceholderUtils.getPlaceholders()" to the dropDownProcess 
+and add the desired Fields as placeholders in the CustomPlaceholder_lib.
+
 Own dbTable Entity is needed to make it possible to store multiple fields for one template
\ No newline at end of file
diff --git a/entity/ExportTemplateField_entity/entityfields/field/documentation.adoc b/entity/ExportTemplateField_entity/entityfields/field/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..6144ef2d4a9e1092004a6c876a516666207c53b7
--- /dev/null
+++ b/entity/ExportTemplateField_entity/entityfields/field/documentation.adoc
@@ -0,0 +1,5 @@
+= FIELD
+
+The selection of Exportfields is created by using the Placeholder function "PlaceholderUtils.getPlaceholders()".
+If you want to add more fields, you just have to add the function "CustomPlaceholderUtils.getPlaceholders()" to the dropDownProcess 
+and add the desired Fields as placeholders in the CustomPlaceholder_lib.
diff --git a/entity/ExportTemplateField_entity/entityfields/field/dropDownProcess.js b/entity/ExportTemplateField_entity/entityfields/field/dropDownProcess.js
index 08ec9605693f96322c16424b5da5990bbf9a9b11..f5b8c998801e7aafdb45582d7a566614367a30a2 100644
--- a/entity/ExportTemplateField_entity/entityfields/field/dropDownProcess.js
+++ b/entity/ExportTemplateField_entity/entityfields/field/dropDownProcess.js
@@ -2,6 +2,12 @@ import("system.result");
 import("Placeholder_lib");
 import("system.text")
 
+
+//The current selection of Exportfields is created by using the Placeholder function "PlaceholderUtils.getPlaceholders()".
+//if you want to add more fields, you just have to add the function "CustomPlaceholderUtils.getPlaceholders()" to the dropDownProcess 
+//and add the desired Fields as placeholders in the CustomPlaceholder_lib.
+
+    
 var placeholders = PlaceholderUtils.getPlaceholders(null, true).map(function (placeholder){
     return [placeholder.placeholderName, placeholder.title || placeholder.placeholderName];
 })
diff --git a/entity/ExportTemplateField_entity/recordcontainers/db/recordfieldmappings/exporttemplate_id.value/expression.js b/entity/ExportTemplateField_entity/recordcontainers/db/recordfieldmappings/exporttemplate_id.value/expression.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/ExportTemplatePlaceOfUse_entity/ExportTemplatePlaceOfUse_entity.aod b/entity/ExportTemplatePlaceOfUse_entity/ExportTemplatePlaceOfUse_entity.aod
index 62ae13223cf74fa95420336c7956d8aa21222179..90fdce90c45d94f3c24108835f5536e84121ac77 100644
--- a/entity/ExportTemplatePlaceOfUse_entity/ExportTemplatePlaceOfUse_entity.aod
+++ b/entity/ExportTemplatePlaceOfUse_entity/ExportTemplatePlaceOfUse_entity.aod
@@ -24,6 +24,7 @@
     </entityField>
     <entityField>
       <name>PLACEOFUSE</name>
+      <documentation>%aditoprj%/entity/ExportTemplatePlaceOfUse_entity/entityfields/placeofuse/documentation.adoc</documentation>
       <title>Place of use</title>
       <consumer>ContextExportTemplatePlaceOfUse</consumer>
       <mandatory v="true" />
@@ -89,7 +90,6 @@
         <dbRecordFieldMapping>
           <name>EXPORTTEMPLATE_ID.value</name>
           <recordfield>EXPORTTEMPLATEPLACEOFUSE.EXPORTTEMPLATE_ID</recordfield>
-          <expression>%aditoprj%/entity/ExportTemplatePlaceOfUse_entity/recordcontainers/db/recordfieldmappings/exporttemplate_id.value/expression.js</expression>
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>EXPORTTEMPLATEPLACEOFUSEID.value</name>
diff --git a/entity/ExportTemplatePlaceOfUse_entity/documentation.adoc b/entity/ExportTemplatePlaceOfUse_entity/documentation.adoc
index 33f229e05ddc227b08ebb4f7eb4d91dada61a9b6..a61ae5a651de0f753557aa094ba139dc5c3957a5 100644
--- a/entity/ExportTemplatePlaceOfUse_entity/documentation.adoc
+++ b/entity/ExportTemplatePlaceOfUse_entity/documentation.adoc
@@ -1,5 +1,9 @@
 = ExportTemplatePlaceOfUse_entity
 
 Entity to select all Modules where the created template should be useable (to limit the availability in the modules).
-Linked via the ExportTemplateID
-Own dbTable and Entity are to make it possible to store multiple fields for one template.
\ No newline at end of file
+
+The selection of Places Of usage is created via the link to the context_entity and limiting it 
+by the Blacklist_param (which is being inverted to an whitelist thanks to the invertBlacklist_param).
+
+Linked via the ExportTemplateID to ExportTemplates.
+Own dbTable and Entity are to make it possible to store multiple fields for one template.
diff --git a/entity/ExportTemplatePlaceOfUse_entity/entityfields/placeofuse/documentation.adoc b/entity/ExportTemplatePlaceOfUse_entity/entityfields/placeofuse/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..38a9ff1a0f6494d732d9d7fe50d771885f7496fa
--- /dev/null
+++ b/entity/ExportTemplatePlaceOfUse_entity/entityfields/placeofuse/documentation.adoc
@@ -0,0 +1,4 @@
+= PlaceOfuse
+
+The selection of Places Of usage is created via the link to the context_entity and limiting it 
+by the Blacklist_param (which is being inverted to an whitelist thanks to the invertBlacklist_param).
\ No newline at end of file
diff --git a/entity/ExportTemplatePlaceOfUse_entity/recordcontainers/db/recordfieldmappings/exporttemplate_id.value/expression.js b/entity/ExportTemplatePlaceOfUse_entity/recordcontainers/db/recordfieldmappings/exporttemplate_id.value/expression.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/ExportTemplateSelection_entity/ExportTemplateSelection_entity.aod b/entity/ExportTemplateSelection_entity/ExportTemplateSelection_entity.aod
index 7c94afdf0eb4902303df2f786bd5712fc80413fc..c71abcd85ffe75e618a0c6200d47d934392b62fd 100644
--- a/entity/ExportTemplateSelection_entity/ExportTemplateSelection_entity.aod
+++ b/entity/ExportTemplateSelection_entity/ExportTemplateSelection_entity.aod
@@ -35,7 +35,6 @@
       <children>
         <entityParameter>
           <name>ExportTemplateIDs_param</name>
-          <valueProcess>%aditoprj%/entity/ExportTemplateSelection_entity/entityfields/exporttemplatecomsumer/children/exporttemplateids_param/valueProcess.js</valueProcess>
           <expose v="true" />
         </entityParameter>
         <entityParameter>
@@ -58,7 +57,6 @@
     </entityField>
     <entityParameter>
       <name>comingFrom_param</name>
-      <valueProcess>%aditoprj%/entity/ExportTemplateSelection_entity/entityfields/comingfrom_param/valueProcess.js</valueProcess>
       <expose v="true" />
     </entityParameter>
     <entityField>
diff --git a/entity/ExportTemplateSelection_entity/entityfields/comingfrom_param/valueProcess.js b/entity/ExportTemplateSelection_entity/entityfields/comingfrom_param/valueProcess.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/ExportTemplateSelection_entity/entityfields/exporttemplatecomsumer/children/exporttemplateids_param/valueProcess.js b/entity/ExportTemplateSelection_entity/entityfields/exporttemplatecomsumer/children/exporttemplateids_param/valueProcess.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/ExportTemplate_entity/ExportTemplate_entity.aod b/entity/ExportTemplate_entity/ExportTemplate_entity.aod
index 76b8d5beb4ef5bbba6322d4f8fc63e25f66780d4..becc0bf70eb7448cfedfb3b682ecdb0269a2b6dd 100644
--- a/entity/ExportTemplate_entity/ExportTemplate_entity.aod
+++ b/entity/ExportTemplate_entity/ExportTemplate_entity.aod
@@ -124,7 +124,6 @@
     </entityProvider>
     <entityParameter>
       <name>comingFrom_param</name>
-      <valueProcess>%aditoprj%/entity/ExportTemplate_entity/entityfields/comingfrom_param/valueProcess.js</valueProcess>
       <expose v="true" />
     </entityParameter>
     <entityField>
diff --git a/entity/ExportTemplate_entity/documentation.adoc b/entity/ExportTemplate_entity/documentation.adoc
index 7ff3082082e4138fb3e2b25da143e3099646eb9e..740f4ae68f9ba3857df31085446ce60a2c3f4897 100644
--- a/entity/ExportTemplate_entity/documentation.adoc
+++ b/entity/ExportTemplate_entity/documentation.adoc
@@ -1,9 +1,26 @@
 = ExportTemplate_entity
 
-Entity to store all the ExportTemplates.
-Exporttemplates are used to give the user an easy way to export Data from an table.
+Entity to store all the Export templates.
+Export templates are used to give the user an easy way to export Data from an table. 
+The template gets configured once (by an system-admin) and  the user can easily use these template 
+via the action without having to worry about the fields and their sorting.
 
-linked via the ExportTemplateId to: 
+Process:
+    1. The System-admin configures a Export template with the desired specification (title, description, 
+       places of use, separators, language, fields and sorting)
+    2. The User is located in the Filterview of the context specified in the place of use of the template.
+    3. Selects the records manually or uses the filter function to limit the data he wants to export 
+    4. And presses on the action (Located at the top of the Table)
+    5. Selects the desired template and an fitting Name for the exported Data (If none: "templateTitle_dd.MM.yyyy.HH:mm:ss")
+    6. Download of the CSV-file starts automatically 
+    Appendix: The CSV is arranged like this: every field gets one column, which has the translated columntitle 
+              at the top and the data in the cells underneath in the same sorting as the filterview.
+              fields which don't have any data to show are just left blank.
+
+PlaceOfUse is used to configure where the template can be used. (Only Options at the moment are the Contact and the Organisation Context)
+ISOLanguage is used to translate the columntitles in the correct language. (Not the data itself!)
+
+Linked via the ExportTemplateId to: 
 -ExportTemplateField_entity to make it possible to store multiple fields for one template
 -ExportTemplatePlaceOfUse_entity to make it possible to store multiple places of usage for one template
--ExportTemplateSelection_entity entity for the selection of the template
\ No newline at end of file
+-ExportTemplateSelection_entity entity for the selection of the template you want to use to export the table.
diff --git a/entity/ExportTemplate_entity/entityfields/comingfrom_param/valueProcess.js b/entity/ExportTemplate_entity/entityfields/comingfrom_param/valueProcess.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/Forecast_entity/Forecast_entity.aod b/entity/Forecast_entity/Forecast_entity.aod
index 81e7a7e32838e48bfb03d11c1f19887ef8cabc30..ddbbc5bc0918b30506c6eeb149e695d904e12a09 100644
--- a/entity/Forecast_entity/Forecast_entity.aod
+++ b/entity/Forecast_entity/Forecast_entity.aod
@@ -22,7 +22,7 @@
     </entityField>
     <entityField>
       <name>GROUPCODE</name>
-      <title>Product</title>
+      <title>Product Group</title>
       <consumer>KeywordProductGroupcodes</consumer>
       <mandatory v="true" />
       <displayValueProcess>%aditoprj%/entity/Forecast_entity/entityfields/groupcode/displayValueProcess.js</displayValueProcess>
diff --git a/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod b/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod
index ac1185cf4bfd2c46ca3757b28ac12aed8472efb0..3c1336f58bb89beb5882d3d227165b7145289271 100644
--- a/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod
+++ b/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod
@@ -4,7 +4,6 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/entity/KeywordAttribute_entity/documentation.adoc</documentation>
   <title>Keyword Attribute</title>
-  <grantDeleteProcess>%aditoprj%/entity/KeywordAttribute_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/KeywordAttribute_entity/contentTitleProcess.js</contentTitleProcess>
   <iconId>VAADIN:KEY_O</iconId>
   <iconIdProcess>%aditoprj%/entity/KeywordAttribute_entity/iconIdProcess.js</iconIdProcess>
diff --git a/entity/KeywordAttribute_entity/grantDeleteProcess.js b/entity/KeywordAttribute_entity/grantDeleteProcess.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/Language_entity/Language_entity.aod b/entity/Language_entity/Language_entity.aod
index ba192d32cbc1fadd54eae27445e14e25c61006c1..4511f71a29b7613767ddba5aeddac2e16e5dfb8e 100644
--- a/entity/Language_entity/Language_entity.aod
+++ b/entity/Language_entity/Language_entity.aod
@@ -143,6 +143,8 @@
         <dbRecordFieldMapping>
           <name>ISO3.value</name>
           <recordfield>AB_LANGUAGE.ISO3</recordfield>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>NAME_LATIN.value</name>
diff --git a/entity/Leadimport_entity/Leadimport_entity.aod b/entity/Leadimport_entity/Leadimport_entity.aod
index c93e9f8e136ec3b49148421046f5be2d3668b990..5c483b9f63d00e93dc890594bc436b40fb45f62e 100644
--- a/entity/Leadimport_entity/Leadimport_entity.aod
+++ b/entity/Leadimport_entity/Leadimport_entity.aod
@@ -5,6 +5,9 @@
   <documentation>%aditoprj%/entity/Leadimport_entity/documentation.adoc</documentation>
   <icon>NEON:IMPORT</icon>
   <title>Lead Import</title>
+  <grantUpdate v="true" />
+  <grantUpdateProcess>%aditoprj%/entity/Leadimport_entity/grantUpdateProcess.js</grantUpdateProcess>
+  <grantDelete v="true" />
   <grantDeleteProcess>%aditoprj%/entity/Leadimport_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/Leadimport_entity/contentTitleProcess.js</contentTitleProcess>
   <iconId>NEON:IMPORT</iconId>
@@ -55,6 +58,9 @@
       <name>bindata</name>
       <title>File</title>
       <contentType>FILE</contentType>
+      <mandatory v="true" />
+      <mandatoryProcess>%aditoprj%/entity/Leadimport_entity/entityfields/bindata/mandatoryProcess.js</mandatoryProcess>
+      <stateProcess>%aditoprj%/entity/Leadimport_entity/entityfields/bindata/stateProcess.js</stateProcess>
       <valueProcess>%aditoprj%/entity/Leadimport_entity/entityfields/bindata/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/Leadimport_entity/entityfields/bindata/displayValueProcess.js</displayValueProcess>
     </entityField>
@@ -66,6 +72,7 @@
       <title>Transfer data</title>
       <onActionProcess>%aditoprj%/entity/Leadimport_entity/entityfields/transferdata/onActionProcess.js</onActionProcess>
       <isMenuAction v="true" />
+      <isObjectAction v="false" />
       <isSelectionAction v="false" />
       <iconId>VAADIN:INBOX</iconId>
     </entityActionField>
@@ -245,6 +252,7 @@
     </entityField>
     <entityField>
       <name>loadedData</name>
+      <state>AUTO</state>
     </entityField>
     <entityActionField>
       <name>Load_Data</name>
@@ -252,6 +260,7 @@
       <onActionProcess>%aditoprj%/entity/Leadimport_entity/entityfields/load_data/onActionProcess.js</onActionProcess>
       <isMenuAction v="true" />
       <iconId>VAADIN:CLOUD_DOWNLOAD</iconId>
+      <state>INVISIBLE</state>
     </entityActionField>
     <entityConsumer>
       <name>LeadTempC</name>
diff --git a/entity/Leadimport_entity/entityfields/bindata/mandatoryProcess.js b/entity/Leadimport_entity/entityfields/bindata/mandatoryProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c86f1480b018155974967ef1c7f73001996becc5
--- /dev/null
+++ b/entity/Leadimport_entity/entityfields/bindata/mandatoryProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW)
+    result.string("true");
+else 
+    result.string("false");
\ No newline at end of file
diff --git a/entity/Leadimport_entity/entityfields/bindata/stateProcess.js b/entity/Leadimport_entity/entityfields/bindata/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..82996dba0e46889f66cd7fe7149649e580eba948
--- /dev/null
+++ b/entity/Leadimport_entity/entityfields/bindata/stateProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW)
+    result.string("EDITABLE");
+else 
+    result.string("READONLY");
\ No newline at end of file
diff --git a/entity/Leadimport_entity/entityfields/leadimportreset/onActionProcess.js b/entity/Leadimport_entity/entityfields/leadimportreset/onActionProcess.js
index b3b5434170aa6509d402bd72d43622309ee9ab3a..c7b4f0fdf7661d9430c260c73320cac09a35dec8 100644
--- a/entity/Leadimport_entity/entityfields/leadimportreset/onActionProcess.js
+++ b/entity/Leadimport_entity/entityfields/leadimportreset/onActionProcess.js
@@ -4,6 +4,7 @@ import("system.vars");
 import("KeywordRegistry_basic");
 import("Sql_lib");
 import("system.db");
+import("system.neon");
 
 let leadimportId = vars.get("$field.LEADIMPORTID");
 
@@ -32,6 +33,8 @@ newWhere("LEAD.LEADIMPORT_ID", leadimportId)
 // Ändern des Status auf Created
 newWhere("LEADIMPORT.LEADIMPORTID", leadimportId).updateData(true, "LEADIMPORT", ["Status"], null, [$KeywordRegistry.importStatus$created()]);
 
+neon.refreshAll();
+
 /**
  * Deletes the Data with was created by the Leadimport of the given table
  * 
@@ -41,11 +44,12 @@ newWhere("LEADIMPORT.LEADIMPORTID", leadimportId).updateData(true, "LEADIMPORT",
  */
 function _deleteData (pTableName, pleadimportId, pdateADayBefor) 
 {
+    let uTableName = pTableName.charAt(0);
     newWhere(pTableName + "." + pTableName + "ID", 
         newSelect(pTableName + "." + pTableName + "ID")
-        .from(pTableName)
-        .join("LEADLOG", "LEADLOG.DATE_NEW = " + pTableName + ".DATE_NEW")
-        .where(pTableName + ".USER_NEW = LEADLOG.USER_NEW")
+        .from(pTableName, uTableName)
+        .join("LEADLOG", "LEADLOG.DATE_NEW = " + uTableName + ".DATE_NEW")
+        .where(uTableName + ".USER_NEW = LEADLOG.USER_NEW")
         .and("LEADLOG.LEADIMPORT_ID", pleadimportId)
         .and("LEADLOG.DATE_NEW", pdateADayBefor.getTime(), "# >= ?"), SqlBuilder.IN())
     .from(pTableName)
diff --git a/entity/Leadimport_entity/entityfields/transferdata/onActionProcess.js b/entity/Leadimport_entity/entityfields/transferdata/onActionProcess.js
index fafffc5af0aef86b2c87725292e3954073dd29c3..030b5064fd4b0f485c28ae2841dfed08842b14b1 100644
--- a/entity/Leadimport_entity/entityfields/transferdata/onActionProcess.js
+++ b/entity/Leadimport_entity/entityfields/transferdata/onActionProcess.js
@@ -41,7 +41,13 @@ if (binMetadatas.length > 0)
     }
 
     //process.execute("importLead_serverProcess", params);
-    process.executeAsync("importLead_serverProcess", params, false, user, process.THREADPRIORITY_LOW, process.TIMERTYPE_SERVER)
+    var processConfig = process.createStartAsyncConfig().setName("importLead_serverProcess")
+                                                        .setLocalVariables(params)
+                                                        .setShowErrorDialog(false)
+                                                        .setUser(user)
+                                                        .setThreadPriority(process.THREADPRIORITY_LOW)
+                                                        .setTimerType(process.TIMERTYPE_SERVER);
+    process.startAsync(processConfig);
 } else {
     question.showMessage("Error: The Importfile could not be found anymore.");
 }
\ No newline at end of file
diff --git a/entity/Leadimport_entity/grantDeleteProcess.js b/entity/Leadimport_entity/grantDeleteProcess.js
index 9f316828ed1c0cf3259ad6ed055a60b3da65edb3..416fae60ccb6b7be26ccf428eb9c5f692b18b077 100644
--- a/entity/Leadimport_entity/grantDeleteProcess.js
+++ b/entity/Leadimport_entity/grantDeleteProcess.js
@@ -10,4 +10,4 @@ var canDelete = new HasLinkedObjectTester()
     .andNoEntityRows("Task_entity", "Tasks", {ObjectId_param : currentContext, RowId_param : rowId}) //Tasks
     .validate();
 
-result.string(canDelete);
\ No newline at end of file
+result.string(canDelete);
diff --git a/entity/Leadimport_entity/grantUpdateProcess.js b/entity/Leadimport_entity/grantUpdateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3013d5b76c2c1036c8efb77ee4a4260ca6d96d15
--- /dev/null
+++ b/entity/Leadimport_entity/grantUpdateProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+import("KeywordRegistry_basic");
+
+result.string((vars.get("$field.STATUS") != $KeywordRegistry.importStatus$transfered()).toString());
\ No newline at end of file
diff --git a/entity/Leadimport_entity/recordcontainers/db/onDBInsert.js b/entity/Leadimport_entity/recordcontainers/db/onDBInsert.js
index 1f82f62e8044dcf276f7546ee8c3eb4c78dd4725..9335140ab1c5174408bc2300ee3ec2e263bd06e1 100644
--- a/entity/Leadimport_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/Leadimport_entity/recordcontainers/db/onDBInsert.js
@@ -12,7 +12,7 @@ var assignmentRowId = vars.get("$field.LEADIMPORTID");
 var bindata = DocumentUtil.getBindataFromUpload(vars.get("$field.bindata"));
 var filename = DocumentUtil.getFilenameFromUpload(vars.get("$field.bindata"));
 
-var fieldSep = ExportTemplateUtils.getSentenceSeparator(vars.get("$field.FIELDSEPARATOR"));
+var fieldSep = ExportTemplateUtils.getFieldSeparator(vars.get("$field.FIELDSEPARATOR"));
 var fieldLimit = ExportTemplateUtils.getFieldDeLimiter(vars.get("$field.FIELDDELIMITERS"));
 var recordSep = ExportTemplateUtils.getSentenceSeparator(vars.get("$field.SENTENCESEPARATOR"));
 
diff --git a/entity/Member_entity/Member_entity.aod b/entity/Member_entity/Member_entity.aod
index 5dd48e6a7662134507c0e9b5c7c869db09714065..8dbfb116d099c099e2fc71242a290bf137576d32 100644
--- a/entity/Member_entity/Member_entity.aod
+++ b/entity/Member_entity/Member_entity.aod
@@ -81,7 +81,7 @@
       <dependency>
         <name>dependency</name>
         <entityName>Person_entity</entityName>
-        <fieldName>Contacts</fieldName>
+        <fieldName>IdFilteredActiveContacts</fieldName>
       </dependency>
       <children>
         <entityParameter>
diff --git a/entity/Notification_entity/Notification_entity.aod b/entity/Notification_entity/Notification_entity.aod
index 71ce2c0cd127943df5f658c170a930a2ca11ca07..32689181066c4c089b9cb02d88ba84063f371310 100644
--- a/entity/Notification_entity/Notification_entity.aod
+++ b/entity/Notification_entity/Notification_entity.aod
@@ -100,7 +100,7 @@
         </entityActionField>
         <entityActionField>
           <name>setRead</name>
-          <title>setRead</title>
+          <title>set Read</title>
           <description></description>
           <onActionProcess>%aditoprj%/entity/Notification_entity/entityfields/setnotificationstate/children/setread/onActionProcess.js</onActionProcess>
           <isSelectionAction v="true" />
@@ -109,14 +109,14 @@
           <tooltipProcess>%aditoprj%/entity/Notification_entity/entityfields/setnotificationstate/children/setread/tooltipProcess.js</tooltipProcess>
         </entityActionField>
         <entityActionField>
-          <name>setUnread</name>
-          <title>setUnread</title>
+          <name>setNew</name>
+          <title>set New</title>
           <description></description>
-          <onActionProcess>%aditoprj%/entity/Notification_entity/entityfields/setnotificationstate/children/setunread/onActionProcess.js</onActionProcess>
+          <onActionProcess>%aditoprj%/entity/Notification_entity/entityfields/setnotificationstate/children/setnew/onActionProcess.js</onActionProcess>
           <isSelectionAction v="true" />
           <iconId>VAADIN:BOOK</iconId>
           <tooltip></tooltip>
-          <tooltipProcess>%aditoprj%/entity/Notification_entity/entityfields/setnotificationstate/children/setunread/tooltipProcess.js</tooltipProcess>
+          <tooltipProcess>%aditoprj%/entity/Notification_entity/entityfields/setnotificationstate/children/setnew/tooltipProcess.js</tooltipProcess>
         </entityActionField>
       </children>
     </entityActionGroup>
diff --git a/entity/Notification_entity/entityfields/setnotificationstate/children/setunread/onActionProcess.js b/entity/Notification_entity/entityfields/setnotificationstate/children/setnew/onActionProcess.js
similarity index 100%
rename from entity/Notification_entity/entityfields/setnotificationstate/children/setunread/onActionProcess.js
rename to entity/Notification_entity/entityfields/setnotificationstate/children/setnew/onActionProcess.js
diff --git a/entity/Notification_entity/entityfields/setnotificationstate/children/setunread/tooltipProcess.js b/entity/Notification_entity/entityfields/setnotificationstate/children/setnew/tooltipProcess.js
similarity index 100%
rename from entity/Notification_entity/entityfields/setnotificationstate/children/setunread/tooltipProcess.js
rename to entity/Notification_entity/entityfields/setnotificationstate/children/setnew/tooltipProcess.js
diff --git a/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js b/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js
index c17d8835a8583f79cebbeda7a3f9a3ed5b7ed113..55ac5773b3cb1302c26846d766e066c70d64222f 100644
--- a/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js
@@ -2,6 +2,7 @@ import("system.db");
 import("system.translate");
 import("system.result");
 import("system.vars");
+import("system.neon");
 import("ObjectRelation_lib");
 import("Context_lib");
 import("Sql_lib");
@@ -83,7 +84,7 @@ else
             _loadObjectRelationTree.call(tree, originalObjectIds[i], originalObjectTypes[i], selectedRelationType);
         }
     }
-    if (uidParam) //workaround!
+    if (uidParam) //workaround! 
         tree = tree.filter(function (row) {return JSON.parse(row[0])[UID.objectRelationId] == uidParam});
 }
 
@@ -233,14 +234,20 @@ function _getEntryData(pObjectId, pDirection, pRelationType1, pRelationType2, pP
     if (pRelationType1 == undefined || pRelationType2 == undefined) 
         return [];
     
-    var [myNum, otherNum] = pDirection == "normal" ? [1, 2] : [2, 1];
+    var [myNum, otherNum] = pDirection == "normal" ? [2, 1] : [1, 2];
     
     onConditionForRelationTypeJoin = newWhere("AB_OBJECTRELATIONTYPEID = AB_OBJECTRELATIONTYPE" + myNum)
         .and("AB_OBJECTRELATION.AB_OBJECTRELATIONTYPE1", pRelationType1)
         .and("AB_OBJECTRELATION.AB_OBJECTRELATIONTYPE2", pRelationType2)
-        .and("AB_OBJECTRELATION.OBJECT" + myNum + "_ROWID", pObjectId)
         .andIfSet("AB_OBJECTRELATION.AB_OBJECTRELATIONID", pObjectRelationId || null); // set id to null, as only null works with .andIfSet
     
+    // wird benoetigt zum Bearbeiten 
+    if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+        onConditionForRelationTypeJoin.and("AB_OBJECTRELATION.OBJECT" + otherNum + "_ROWID", pObjectId);
+    else
+        onConditionForRelationTypeJoin.and("AB_OBJECTRELATION.OBJECT" + myNum + "_ROWID", pObjectId);
+    
+    
     // exclude previous node
     if (!pPrevId)
         onConditionForRelationTypeJoin.and("AB_OBJECTRELATION.OBJECT" + otherNum + "_ROWID is not null");
diff --git a/entity/Object_entity/Object_entity.aod b/entity/Object_entity/Object_entity.aod
index ea690ba4a943c3bc9b227d1ea0ca175678e403f2..2d1e2ff409dd15ec5a3c863503159b69ae385721 100644
--- a/entity/Object_entity/Object_entity.aod
+++ b/entity/Object_entity/Object_entity.aod
@@ -255,6 +255,22 @@
         </entityParameter>
       </children>
     </entityConsumer>
+    <entityConsumer>
+      <name>Activities</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Activity_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Tasks</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Task_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+    </entityConsumer>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
diff --git a/entity/Object_entity/recordcontainers/jdito/contentProcess.js b/entity/Object_entity/recordcontainers/jdito/contentProcess.js
index 959e539e3fa4fb174e0ed0f1e33c69860de603c2..67b5e68f5a12833bca63247bd9903b8d63e57f87 100644
--- a/entity/Object_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Object_entity/recordcontainers/jdito/contentProcess.js
@@ -5,7 +5,7 @@ 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.
+// --> THIS PROCESS WON'T BE EXECUTED IN SOME CASES.
 
 if (vars.get("$param.ObjectType_param"))
 {
diff --git a/entity/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod
index 0f57da59c153a56bb555e55212792c6558fd68bb..18b73ee9d79ca1d272ecba210f69d47f240fa849 100644
--- a/entity/Offer_entity/Offer_entity.aod
+++ b/entity/Offer_entity/Offer_entity.aod
@@ -930,7 +930,6 @@
       <name>LETTERSALUTATION</name>
       <title>Letter salutation</title>
       <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/lettersalutation/stateProcess.js</stateProcess>
-      <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/lettersalutation/valueProcess.js</valueProcess>
     </entityField>
     <entityActionField>
       <name>openAdminView</name>
diff --git a/entity/Offer_entity/entityfields/chosenaddress/valueProcess.js b/entity/Offer_entity/entityfields/chosenaddress/valueProcess.js
index 6ebcf9a49b9f2a8d6f2a5b7f54b38fb6a2481fce..f2e8d829a6610c678b5bdd1ad4aa2afaf88acd87 100644
--- a/entity/Offer_entity/entityfields/chosenaddress/valueProcess.js
+++ b/entity/Offer_entity/entityfields/chosenaddress/valueProcess.js
@@ -3,7 +3,7 @@ import("system.result");
 import("system.neon");
 import("system.vars");
 
-if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) && !vars.get("$field.ADDRESS"))
+if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT))
 {
     var defaultAddressId = ContactUtils.getDefaultAddressId(vars.get("$field.CONTACT_ID"));
     if (defaultAddressId)
diff --git a/entity/Offer_entity/entityfields/contact_id/onValueChange.js b/entity/Offer_entity/entityfields/contact_id/onValueChange.js
index 4d3ecbb18ee4bdbd45431fe3ea9b563c29dab08c..74fa8e077b78ed95d1e417ae9326c2ae2ff2d837 100644
--- a/entity/Offer_entity/entityfields/contact_id/onValueChange.js
+++ b/entity/Offer_entity/entityfields/contact_id/onValueChange.js
@@ -1,3 +1,4 @@
+import("PostalAddress_lib");
 import("Sql_lib");
 import("system.neon");
 import("system.vars");
@@ -17,6 +18,17 @@ if(contactid != "")
     if(lang != "") 
         neon.setFieldValue("field.ISOLANGUAGE", lang);
     
+    var defaultAddressId = ContactUtils.getDefaultAddressId(contactid);
+    if (defaultAddressId)
+    {
+        neon.setFieldValue("field.ChosenAddress", defaultAddressId);
+            neon.setFieldValue("$field.ADDRESS", AddressUtils.getAddressById(defaultAddressId));
+    }
+    var addrobj = new AddrObject(contactid);
+    var salutation = addrobj.getFormattedAddress(false, "{letter_salutation},");
+    if (salutation != "Err.,")
+        neon.setFieldValue("field.LETTERSALUTATION", salutation);
+    
     // set $field.CONTATCT_ORG_ID per contactid
     var orgid = ContactUtils.getPersOrgIds(contactid);
     neon.setFieldValue("$field.CONTACT_ORG_ID", orgid[2]);
diff --git a/entity/Offer_entity/entityfields/lettersalutation/valueProcess.js b/entity/Offer_entity/entityfields/lettersalutation/valueProcess.js
deleted file mode 100644
index c3b78386885faaaf9b3dcfe18c659d6bb76d9c46..0000000000000000000000000000000000000000
--- a/entity/Offer_entity/entityfields/lettersalutation/valueProcess.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import("system.result");
-import("system.neon");
-import("system.vars");
-import("Address_lib");
-
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) 
-{
-    var addrobj = new AddrObject(vars.get("$field.CONTACT_ID"));
-    var salutation = addrobj.getFormattedAddress(false, "{letter_salutation},");
-    if (salutation != "Err.,")
-        result.string(salutation);
-}
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/offercode/onValidation.js b/entity/Offer_entity/entityfields/offercode/onValidation.js
index 4d9d2f8a307e5bfe834ba5defbbe845b46d279fd..58a3364596c6f0a8f85c3863acf31b877c629f69 100644
--- a/entity/Offer_entity/entityfields/offercode/onValidation.js
+++ b/entity/Offer_entity/entityfields/offercode/onValidation.js
@@ -1,14 +1,5 @@
-import("system.vars");
-import("system.result");
 import("system.neon");
-import("Offer_lib");
-import("Salesproject_lib");
-import("Util_lib");
-import("Entity_lib");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW
-    && !vars.exists("$param.OfferCode_param")
-    && !OfferUtils.validateOfferNumber(vars.get("local.value")) )
-{
-    vars.set( "$field.OFFERCODE", OfferUtils.getNextOfferNumber().toString() );
-}
\ No newline at end of file
+//reload the field on save to make sure the offercode is really unique, otherwise the offercode could be the same for two offers created at
+//the same time
+neon.refresh(["$field.OFFERCODE"]);
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js b/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js
index c85acd3d4472ebd96a741c7fbffe07198f7acf72..fbd11f7034742ee93fa02bf571013cf7cfcafe3a 100644
--- a/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js
+++ b/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js
@@ -2,6 +2,7 @@ import("system.question");
 import("system.translate");
 import("system.vars");
 import("KeywordRegistry_basic");
+import("system.translate");
 import("Offer_lib");
 import("Email_lib");
 import("Sql_lib");
@@ -11,16 +12,17 @@ var attachmentArray = new Array();
 var notificationMsg = translate.text("The status of the offer was changed to \"Sent\".");
 var contactId = vars.get("$field.CONTACT_ID");
 var arrayReport = OfferUtils.buildOfferReport(vars.get("$field.OFFERID"));
+var emailFilename = translate.text("Offerrequest");
 
 if (vars.get("$field.CONTACT_ID") == null || "") contactId = vars.get("$field.CONTACT_ORG_ID");
 
 offerReport.content = arrayReport[1];
 offerReport.contentType = "application/pdf";
-offerReport.filename = vars.get("$field.#CONTENTTITLE") + ".pdf";
+offerReport.filename = translate.text("Offer No.") + vars.get("$field.#CONTENTTITLE") + ".pdf";
 
 attachmentArray[0] = offerReport;
 
-EmailWritingUtils.sendReportAsMail(contactId, attachmentArray, "Offer", notificationMsg);
+EmailWritingUtils.sendReportAsMail(contactId, attachmentArray, "Offer", notificationMsg, emailFilename);
 
 newWhere("OFFER.OFFERID", "$field.OFFERID")
     .updateData(true, "OFFER", ["STATUS"], null, [$KeywordRegistry.offerStatus$sent()]);
diff --git a/entity/Order_entity/Order_entity.aod b/entity/Order_entity/Order_entity.aod
index 4394b20365017d2cb7049e6caf600cb377e5c507..30c65d442d8e914dbe9ed081c33c60132450794a 100644
--- a/entity/Order_entity/Order_entity.aod
+++ b/entity/Order_entity/Order_entity.aod
@@ -784,7 +784,6 @@
     </entityParameter>
     <entityParameter>
       <name>OrderType_param</name>
-      <valueProcess>%aditoprj%/entity/Order_entity/entityfields/ordertype_param/valueProcess.js</valueProcess>
       <expose v="true" />
       <description>PARAMETER</description>
     </entityParameter>
diff --git a/entity/Order_entity/entityfields/ordertype_param/valueProcess.js b/entity/Order_entity/entityfields/ordertype_param/valueProcess.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/Order_entity/entityfields/salesordercode/onValidation.js b/entity/Order_entity/entityfields/salesordercode/onValidation.js
index 77e97cc10241ebf2a9cc22b62524870a95f98fee..f3e48817277e5545f8b9b6296bd84039c58682bf 100644
--- a/entity/Order_entity/entityfields/salesordercode/onValidation.js
+++ b/entity/Order_entity/entityfields/salesordercode/onValidation.js
@@ -1,15 +1,5 @@
-import("system.vars");
-import("system.result");
 import("system.neon");
-import("Order_lib");
-import("Salesproject_lib");
-import("Util_lib");
-import("Entity_lib");
-
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW
-    && !vars.exists("$param.OrderCode_param")
-    && !OrderUtils.validateOrderNumber(vars.get("local.value")) )
-{
-    vars.set( "$field.SALESORDERCODE", OrderUtils.getNextOrderNumber().toString() );
-}
 
+//reload the field on save to make sure the salesordercode is really unique, otherwise the salesordercode could be the same for two salesorders 
+//created at the same time
+neon.refresh(["$field.SALESORDERCODE"]);
\ No newline at end of file
diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod
index 55f954b6501a729d5579a4b2e1f797422f88c8bc..96b76098fde1ff72a627226316fcbca2d88d72cc 100644
--- a/entity/Organisation_entity/Organisation_entity.aod
+++ b/entity/Organisation_entity/Organisation_entity.aod
@@ -51,7 +51,6 @@
     <entityField>
       <name>CONTACTID</name>
       <title>CONTACTID</title>
-      <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/contactid/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>STATUS</name>
@@ -189,7 +188,6 @@
       <title>Address</title>
       <consumer>Addresses</consumer>
       <state>AUTO</state>
-      <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/address_id/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/Organisation_entity/entityfields/address_id/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityConsumer>
@@ -950,6 +948,7 @@
     <entityProvider>
       <name>SelfDuplicatesProvider</name>
       <titlePlural>Duplicates</titlePlural>
+      <recordContainer>index</recordContainer>
     </entityProvider>
     <entityParameter>
       <name>OnlyShowContactIds_param</name>
@@ -1080,12 +1079,14 @@
       <title>New Visit Recommendation</title>
       <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newvisitrecommendation/onActionProcess.js</onActionProcess>
       <iconId>VAADIN:CALENDAR</iconId>
+      <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/newvisitrecommendation/stateProcess.js</stateProcess>
     </entityActionField>
     <entityActionField>
       <name>newVisitPlanEntry</name>
       <title>New Weekplanentry</title>
       <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newvisitplanentry/onActionProcess.js</onActionProcess>
       <iconId>VAADIN:CAR</iconId>
+      <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/newvisitplanentry/stateProcess.js</stateProcess>
     </entityActionField>
     <entityActionField>
       <name>openLocation</name>
@@ -1308,9 +1309,6 @@
           <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js</filterConditionProcess>
           <filtertype>BASIC</filtertype>
         </filterExtensionSet>
-        <filterExtension>
-          <name>filterExtension</name>
-        </filterExtension>
       </filterExtensions>
     </dbRecordContainer>
     <indexRecordContainer>
diff --git a/entity/Organisation_entity/entityfields/contactid/valueProcess.js b/entity/Organisation_entity/entityfields/contactid/valueProcess.js
deleted file mode 100644
index 86ef789e064a4016f2d12c432498dc23474807aa..0000000000000000000000000000000000000000
--- a/entity/Organisation_entity/entityfields/contactid/valueProcess.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import("system.util");
-import("system.vars");
-import("system.result");
-import("system.neon");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-    result.string(util.getNewUUID());
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/newvisitplanentry/stateProcess.js b/entity/Organisation_entity/entityfields/newvisitplanentry/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..aefbc6e8f76f99c4281890f3461553c49562d5b9
--- /dev/null
+++ b/entity/Organisation_entity/entityfields/newvisitplanentry/stateProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+import("KeywordRegistry_basic");
+
+if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive())
+    result.string(neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/newvisitrecommendation/stateProcess.js b/entity/Organisation_entity/entityfields/newvisitrecommendation/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..aefbc6e8f76f99c4281890f3461553c49562d5b9
--- /dev/null
+++ b/entity/Organisation_entity/entityfields/newvisitrecommendation/stateProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+import("KeywordRegistry_basic");
+
+if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive())
+    result.string(neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/openlocation/onActionProcess.js b/entity/Organisation_entity/entityfields/openlocation/onActionProcess.js
index 764513935758151ec5cf988b86e9f304be4d296f..1b94fd17857e5341668bf6d95a4c3b548d1ab214 100644
--- a/entity/Organisation_entity/entityfields/openlocation/onActionProcess.js
+++ b/entity/Organisation_entity/entityfields/openlocation/onActionProcess.js
@@ -13,6 +13,8 @@ addressData = newSelect("ADDRESS, BUILDINGNO, ZIP, CITY, COUNTRY")
                     
 address.push(addressData.join("+"));
 
-addressUrl = "https://www.google.com/maps/dir/" + address.join("/");
+addressUrl = "https://www.google.com/maps/dir//" + address.join("/"); 
+// the two slashes after dir are needed, because google uses those to specify whether the address is the startpoint 
+// or the location of the route.  We need two, because we want the location of the organisation as the destination.
 
 neon.openUrl(addressUrl, true);
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js b/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js
index 45379fef45e865cc1b5db3b8ff3a663b1d24deb4..fdbb29bfe3953fb655929382d1c4f393330c2d0a 100644
--- a/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js
+++ b/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js
@@ -5,58 +5,47 @@ import("system.vars");
 import("DuplicateScanner_lib");
 import("system.result");
 
-let scannerName = "OrganisationDuplicates";
-let targetEntity = "Organisation_entity";
-let valuesToCheck = {};
+var scannerName = "OrganisationDuplicates";
+var targetEntity = "Organisation_entity";
+var valuesToCheck = {};
 var entityFieldsToLoad = DuplicateScannerUtils.GetEntityFieldsFromConfig(scannerName, targetEntity);
 
-if(entityFieldsToLoad == null || entityFieldsToLoad.length == 0)
-    result.string(JSON.stringify(["nodata"]));
+var idsForEmptyResult = JSON.stringify(["nodata"]);
+
+if (entityFieldsToLoad == null || entityFieldsToLoad.length == 0)
+    result.string(idsForEmptyResult);
 else
 {
     //Read the values of all available entity fields and write the fieldname7value combination
     //as key/value pairs into an object. This is used to trigger the scan for duplicates
 
-   vars.get("$field.STANDARD_CITY");
-   vars.get("$field.STANDARD_ZIP");
-   vars.get("$field.STANDARD_ADDRESS");
+    vars.get("$field.NAME")
+    vars.get("$field.STANDARD_CITY");
+    vars.get("$field.STANDARD_ZIP");
+    vars.get("$field.STANDARD_ADDRESS");
 
-   let field = '';
-   let fieldValue = '';
-   for (fieldname in entityFieldsToLoad) 
-   { 
-       field = entityFieldsToLoad[fieldname];
-       fieldValue = vars.get("$field." + field);
+    for (let fieldname in entityFieldsToLoad) 
+    { 
+        var field = entityFieldsToLoad[fieldname];
+        var fieldValue = vars.get("$field." + field);
 
-       if(fieldValue != null && fieldValue != "")
-       {
+        if (fieldValue)
            valuesToCheck[field] = fieldValue;
-       }
-   }
-
-   let scanResults = DuplicateScannerUtils.ScanForDuplicates(scannerName, targetEntity,
-   valuesToCheck, null);
-
-   let duplicateIds = [];
-
-   if(scanResults != undefined && scanResults != null)
-   {
-       //Run thru every duplicate result and read out the id. 
-       //Do it now to have a simple array on all usages lateron.
-       for (let i = 0; i < scanResults.length; i++)
-       {
-           let duplicateContactId = scanResults[i][indexsearch.FIELD_ID];
-           duplicateIds.push(duplicateContactId);
-       }
-   }
-
-   /*
-    * To achieve that if there are no duplicates, no contacts should be shown and therefore returned by the 
-    * recordcontainer, an invalid id gets returned. It then is used in the conditionProcess to load the duplicates.
-    * Because of its invalidity, no records are shown.
-   */
-   if(duplicateIds.length == 0)
-       result.string(JSON.stringify(["nodata"]));
-   else
-       result.string(JSON.stringify(duplicateIds));
+    }
+
+    var scanResults = DuplicateScannerUtils.ScanForDuplicates(scannerName, targetEntity, valuesToCheck, null) || [];
+    var duplicateIds = scanResults.map(function (scanResult)
+    {
+        return scanResult[indexsearch.FIELD_ID];
+    });
+
+    /*
+     * To achieve that if there are no duplicates, no contacts should be shown and therefore returned by the 
+     * recordcontainer, an invalid id gets returned. It then is used in the conditionProcess to load the duplicates.
+     * Because of its invalidity, no records are shown.
+     */
+    if (duplicateIds.length == 0)
+        result.string(idsForEmptyResult);
+    else
+        result.string(JSON.stringify(duplicateIds));
 }
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/index/affectedIds.js b/entity/Organisation_entity/recordcontainers/index/affectedIds.js
index 12de7b2aec6cc9bd8a679cc865ee7c3c1c1bca9b..a8b02566f9728cbe5a6c53033c884d780b6a71b8 100644
--- a/entity/Organisation_entity/recordcontainers/index/affectedIds.js
+++ b/entity/Organisation_entity/recordcontainers/index/affectedIds.js
@@ -41,8 +41,10 @@ switch (tableName)
                     .arrayColumn();
         });
         break;
+    default:
+        res = [];   //needed, because the Index is being rebuilt if nothing gets returned
 }
 
-if (res) {
     result.object(res);
-}
+    
+
diff --git a/entity/PermissionCalendar_entity/PermissionCalendar_entity.aod b/entity/PermissionCalendar_entity/PermissionCalendar_entity.aod
index 1561a02279e74ce1ead175e5864bd2d810aca2fd..8bd374fd3485951d6ff0cef39ff55d465a66f135 100644
--- a/entity/PermissionCalendar_entity/PermissionCalendar_entity.aod
+++ b/entity/PermissionCalendar_entity/PermissionCalendar_entity.aod
@@ -128,7 +128,6 @@
     </entityProvider>
     <entityParameter>
       <name>PermissionProcurer_param</name>
-      <valueProcess>%aditoprj%/entity/PermissionCalendar_entity/entityfields/permissionprocurer_param/valueProcess.js</valueProcess>
       <expose v="true" />
     </entityParameter>
     <entityParameter>
diff --git a/entity/PermissionDetail_entity/PermissionDetail_entity.aod b/entity/PermissionDetail_entity/PermissionDetail_entity.aod
index 89f1f962d9336cd357386cefa1be0d4ea96801ef..6746dfb9da55635d8b67b594885eb04d61a923ec 100644
--- a/entity/PermissionDetail_entity/PermissionDetail_entity.aod
+++ b/entity/PermissionDetail_entity/PermissionDetail_entity.aod
@@ -134,7 +134,6 @@
       <children>
         <entityParameter>
           <name>EntityName_param</name>
-          <valueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/metadata/children/entityname_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
     </entityConsumer>
diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod
index b50490a5992a498f3e2aa87967892a3f2c4e820d..d8bfbd275ac29413e596bd0b43dc2348f0b01f1a 100644
--- a/entity/Person_entity/Person_entity.aod
+++ b/entity/Person_entity/Person_entity.aod
@@ -47,7 +47,6 @@
       <name>LASTNAME</name>
       <title>Lastname</title>
       <mandatory v="true" />
-      <valueProcess>%aditoprj%/entity/Person_entity/entityfields/lastname/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>MIDDLENAME</name>
@@ -133,6 +132,10 @@
           <name>OrgId_param</name>
           <expose v="true" />
         </entityParameter>
+        <entityParameter>
+          <name>OnlyActive_param</name>
+          <expose v="false" />
+        </entityParameter>
       </children>
     </entityProvider>
     <entityField>
@@ -356,6 +359,10 @@
           <name>ExcludedContactIds_param</name>
           <expose v="false" />
         </entityParameter>
+        <entityParameter>
+          <name>OnlyActive_param</name>
+          <expose v="false" />
+        </entityParameter>
       </children>
     </entityProvider>
     <entityConsumer>
@@ -675,12 +682,6 @@
           <fieldName>ContactsConsumer</fieldName>
           <isConsumer v="false" />
         </entityDependency>
-        <entityDependency>
-          <name>4d317eb3-6a4e-40c6-946e-d54289dcd99b</name>
-          <entityName>Member_entity</entityName>
-          <fieldName>Contacts</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
         <entityDependency>
           <name>0b7a3dc8-854f-4a0b-9e1c-e6f7cd12d8f1</name>
           <entityName>DuplicatesDetails_entity</entityName>
@@ -717,6 +718,10 @@
           <name>OnlyShowContactIds_param</name>
           <expose v="true" />
         </entityParameter>
+        <entityParameter>
+          <name>OnlyActive_param</name>
+          <expose v="false" />
+        </entityParameter>
       </children>
     </entityProvider>
     <entityConsumer>
@@ -811,7 +816,8 @@
     </entityParameter>
     <entityParameter>
       <name>OnlyActive_param</name>
-      <valueProcess>%aditoprj%/entity/Person_entity/entityfields/avatartext_param/valueProcess.js</valueProcess>
+      <valueProcess>%aditoprj%/entity/Person_entity/entityfields/onlyactive_param/valueProcess.js</valueProcess>
+      <expose v="true" />
       <description>PARAMETER</description>
     </entityParameter>
     <entityConsumer>
@@ -888,7 +894,6 @@
     <entityField>
       <name>STANDARD_COUNTRY</name>
       <title>Country</title>
-      <valueProcess>%aditoprj%/entity/Person_entity/entityfields/standard_country/valueProcess.js</valueProcess>
     </entityField>
     <entityConsumer>
       <name>SelfDuplicatesUncached</name>
@@ -957,6 +962,10 @@
           <name>OrgId_param</name>
           <expose v="true" />
         </entityParameter>
+        <entityParameter>
+          <name>OnlyActive_param</name>
+          <expose v="false" />
+        </entityParameter>
       </children>
     </entityProvider>
     <entityActionField>
@@ -986,7 +995,6 @@
       <title>New task</title>
       <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/newtask/onActionProcess.js</onActionProcess>
       <iconId>VAADIN:TASKS</iconId>
-      <iconIdProcess>%aditoprj%/entity/Person_entity/entityfields/newtask/iconIdProcess.js</iconIdProcess>
     </entityActionField>
     <entityActionField>
       <name>addToCampaign</name>
@@ -1119,7 +1127,6 @@
       <name>openTaskView</name>
       <isMenuAction v="false" />
       <isObjectAction v="false" />
-      <stateProcess>%aditoprj%/entity/Person_entity/entityfields/opentaskview/stateProcess.js</stateProcess>
     </entityActionField>
     <entityActionField>
       <name>startWorkflow</name>
@@ -1135,50 +1142,6 @@
       <iconId>VAADIN:CURLY_BRACKETS</iconId>
       <stateProcess>%aditoprj%/entity/Person_entity/entityfields/openadminview/stateProcess.js</stateProcess>
     </entityActionField>
-    <entityConsumer>
-      <name>PersonDuplicates</name>
-      <dependency>
-        <name>dependency</name>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>targetEntity_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/personduplicates/children/targetentity_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>filterName_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/personduplicates/children/filtername_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>resultFields_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/personduplicates/children/resultfields_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>valuesToScan_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/personduplicates/children/valuestoscan_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>resultFieldsIdFieldName_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/personduplicates/children/resultfieldsidfieldname_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>recordIdToIgnore_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/personduplicates/children/recordidtoignore_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>targetContext_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/personduplicates/children/targetcontext_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>sourceContactId_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/personduplicates/children/sourcecontactid_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>contactIdToCheckForCachedDuplicates_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/personduplicates/children/contactidtocheckforcachedduplicates_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
     <entityParameter>
       <name>OnlyShowContactIds_param</name>
       <expose v="true" />
@@ -1190,20 +1153,6 @@
         <entityName>Person_entity</entityName>
         <fieldName>SelfDuplicatesProvider</fieldName>
       </dependency>
-      <children>
-        <entityParameter>
-          <name>OnlyShowContactIds_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/selfduplicates/children/onlyshowcontactids_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>DuplicateCurrentContactId_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/selfduplicates/children/duplicatecurrentcontactid_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>DuplicateActionsControl_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/selfduplicates/children/duplicateactionscontrol_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
     </entityConsumer>
     <entityProvider>
       <name>SelfDuplicatesProvider</name>
@@ -1221,6 +1170,10 @@
           <name>OnlyShowContactIds_param</name>
           <mandatory v="true" />
         </entityParameter>
+        <entityParameter>
+          <name>OnlyActive_param</name>
+          <expose v="false" />
+        </entityParameter>
       </children>
     </entityProvider>
     <entityField>
@@ -1244,18 +1197,62 @@
     </entityParameter>
     <entityField>
       <name>IndexPhoneticLastname</name>
-      <valueProcess>%aditoprj%/entity/Person_entity/entityfields/indexphoneticlastname/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>IndexPhoneticFirstname</name>
-      <valueProcess>%aditoprj%/entity/Person_entity/entityfields/indexphoneticfirstname/valueProcess.js</valueProcess>
     </entityField>
     <entityActionField>
       <name>newVisitPlanEntry</name>
       <title>New Weekplanentry</title>
       <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/newvisitplanentry/onActionProcess.js</onActionProcess>
       <iconId>VAADIN:CAR</iconId>
+      <stateProcess>%aditoprj%/entity/Person_entity/entityfields/newvisitplanentry/stateProcess.js</stateProcess>
     </entityActionField>
+    <entityProvider>
+      <name>IdFilteredActiveContacts</name>
+      <dependencies>
+        <entityDependency>
+          <name>511f3e4c-7493-4a31-a136-0ba80ba2ec85</name>
+          <entityName>Member_entity</entityName>
+          <fieldName>Contacts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+      <children>
+        <entityParameter>
+          <name>ExcludedContactIds_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>DuplicateActionsControl_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>OnlyOwnSupervised_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>OrgId_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>OnlyShowContactIds_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>OnlyActive_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>DuplicateCurrentContactId_param</name>
+          <expose v="false" />
+        </entityParameter>
+      </children>
+    </entityProvider>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js b/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js
index d9f980358fb5ae885dcbffee0116b9e187a23ff2..648ecdcc39a88b74966045e32a9fbb3d7fdb707c 100644
--- a/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js
+++ b/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js
@@ -3,15 +3,15 @@ import("system.vars");
 import("system.neon");
 import("DuplicateScanner_lib");
 
-let sourceContactId = vars.get("$param.DuplicateCurrentContactId_param");
-let targetContactId = vars.get("$sys.selection");
+var sourceContactId = vars.get("$param.DuplicateCurrentContactId_param");
+var targetContactId = vars.get("$sys.selection")[0];
 
 //todo the actual merge ought to happen in a separate view where the contact infos can be merged manually by the user.
-let mergeSuccess = DuplicateScannerUtils.MergePerson(sourceContactId, targetContactId);
+var mergeSuccess = DuplicateScannerUtils.MergePerson(sourceContactId, targetContactId);
 
 if(mergeSuccess)
 {
-    let currentContactId = EmployeeUtils.getCurrentContactId();
+    var currentContactId = EmployeeUtils.getCurrentContactId();
     if(currentContactId == null)
         currentContactId = "";
     DuplicateScannerUtils.CreateMergeSuccessActivity(sourceContactId, targetContactId, currentContactId, "Person");
diff --git a/entity/Person_entity/entityfields/newtask/iconIdProcess.js b/entity/Person_entity/entityfields/newtask/iconIdProcess.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/Person_entity/entityfields/newvisitplanentry/stateProcess.js b/entity/Person_entity/entityfields/newvisitplanentry/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..aefbc6e8f76f99c4281890f3461553c49562d5b9
--- /dev/null
+++ b/entity/Person_entity/entityfields/newvisitplanentry/stateProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+import("KeywordRegistry_basic");
+
+if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive())
+    result.string(neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/opentaskview/stateProcess.js b/entity/Person_entity/entityfields/opentaskview/stateProcess.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/Person_entity/recordcontainers/db/filterValuesProcess.js b/entity/Person_entity/recordcontainers/db/filterValuesProcess.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/Person_entity/recordcontainers/index/affectedIds.js b/entity/Person_entity/recordcontainers/index/affectedIds.js
index 24ea484ba1ecc993a37d14329c3901e7fb28a1c6..1cbcfeeb6850a41a4d13165adc198e5e10eb94c8 100644
--- a/entity/Person_entity/recordcontainers/index/affectedIds.js
+++ b/entity/Person_entity/recordcontainers/index/affectedIds.js
@@ -47,9 +47,9 @@ switch (tableName)
                     .arrayColumn();
         });
         break;
+    default:
+        res = [];   //needed, because the Index is being rebuilt if nothing gets returned
+        break;
 }
 
-if (res) {
-    result.object(res);
-}
-    
\ No newline at end of file
+    result.object(res);
\ No newline at end of file
diff --git a/entity/Product_entity/Product_entity.aod b/entity/Product_entity/Product_entity.aod
index d2f136356913dc5ed1ab126b38dce5e40e165ddd..87871e04a0b855f31100bc83b883457f13f11d72 100644
--- a/entity/Product_entity/Product_entity.aod
+++ b/entity/Product_entity/Product_entity.aod
@@ -24,7 +24,7 @@
     </entityField>
     <entityField>
       <name>GROUPCODEID</name>
-      <title>Product group</title>
+      <title>Product Group</title>
       <consumer>KeywordProductGroupcodes</consumer>
       <mandatory v="true" />
       <displayValueProcess>%aditoprj%/entity/Product_entity/entityfields/groupcodeid/displayValueProcess.js</displayValueProcess>
diff --git a/entity/Productprice_entity/Productprice_entity.aod b/entity/Productprice_entity/Productprice_entity.aod
index 7507c81c7c84565f69ea23840734a22674d19666..6d1292a40239e42a8ef9289f48e981d54275b310 100644
--- a/entity/Productprice_entity/Productprice_entity.aod
+++ b/entity/Productprice_entity/Productprice_entity.aod
@@ -235,7 +235,6 @@
       <hasDependentRecords v="true" />
       <conditionProcess>%aditoprj%/entity/Productprice_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
       <orderClauseProcess>%aditoprj%/entity/Productprice_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
-      <onDBDelete>%aditoprj%/entity/Productprice_entity/recordcontainers/db/onDBDelete.js</onDBDelete>
       <linkInformation>
         <linkInformation>
           <name>85fd1bcf-499f-4708-ad8e-18f5a0f5337d</name>
diff --git a/entity/Productprice_entity/entityfields/product_id/displayValueProcess.js b/entity/Productprice_entity/entityfields/product_id/displayValueProcess.js
index 902d8b81e59a1cebe37203456662652334a07411..62dfdaf791091cabb2983bad7ed5f34dd09272ba 100644
--- a/entity/Productprice_entity/entityfields/product_id/displayValueProcess.js
+++ b/entity/Productprice_entity/entityfields/product_id/displayValueProcess.js
@@ -5,11 +5,7 @@ import("system.db");
 import("Sql_lib");
 
 // TODO: Wenn es möglich ist, den anzeigenamen des Produkts über die Entity beziehung zu laden, dann umbauen...!!!
-if((vars.exists("$param.ProductId_param") && vars.get("$param.ProductId_param") && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-    || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW)
-{
-    result.string(newSelect("PRODUCTNAME")
-                    .from("PRODUCT")
-                    .whereIfSet("$field.PRODUCT_ID")
-                    .cell(true));
-}
\ No newline at end of file
+result.string(newSelect("PRODUCTNAME")
+    .from("PRODUCT")
+    .whereIfSet("PRODUCT.PRODUCTID", "$field.PRODUCT_ID")
+    .cell(true));
\ No newline at end of file
diff --git a/entity/Productprice_entity/recordcontainers/db/onDBDelete.js b/entity/Productprice_entity/recordcontainers/db/onDBDelete.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod
index 488d2ebf3e0cd71e82086f789ce845699d94d7a9..44bc9ab626639e8b99a9f08b176e85a2b8b8d61b 100644
--- a/entity/Salesproject_entity/Salesproject_entity.aod
+++ b/entity/Salesproject_entity/Salesproject_entity.aod
@@ -3,7 +3,7 @@
   <name>Salesproject_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/entity/Salesproject_entity/documentation.adoc</documentation>
-  <title>Salesproject</title>
+  <title>Sales Project</title>
   <siblings>
     <element>SalesprojectMilestone_entity</element>
   </siblings>
@@ -13,7 +13,7 @@
   <onValidation>%aditoprj%/entity/Salesproject_entity/onValidation.js</onValidation>
   <afterOperatingState>%aditoprj%/entity/Salesproject_entity/afterOperatingState.js</afterOperatingState>
   <iconId>VAADIN:BOOK_DOLLAR</iconId>
-  <titlePlural>Salesprojects</titlePlural>
+  <titlePlural>Sales Projects</titlePlural>
   <recordContainer>db</recordContainer>
   <entityFields>
     <entityProvider>
diff --git a/entity/Salesproject_entity/entityfields/projectcode/onValidation.js b/entity/Salesproject_entity/entityfields/projectcode/onValidation.js
index 2c9020b283b0fdbbbd8053aa313d14b19c347bf8..7f54dbb3d57551300fa0ad16b3485caab5d14475 100644
--- a/entity/Salesproject_entity/entityfields/projectcode/onValidation.js
+++ b/entity/Salesproject_entity/entityfields/projectcode/onValidation.js
@@ -1,12 +1,5 @@
-import("system.vars");
-import("system.result");
 import("system.neon");
-import("Salesproject_lib");
-import("Util_lib");
-import("Entity_lib");
 
-if( vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW
-    && !Salesproject.validateProjectNumber(vars.get("local.value")) )
-{
-    vars.set( "$field.PROJECTCODE", Salesproject.getNextProjectNumber().toString("1 = 1") );
-}
\ No newline at end of file
+//reload the field on save to make sure the projectcode is really unique, otherwise the projectcode could be the same for two projects created at
+//the same time
+neon.refresh(["$field.PROJECTCODE"]);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterValuesProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterValuesProcess.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/Salutation_entity/Salutation_entity.aod b/entity/Salutation_entity/Salutation_entity.aod
index 9c5ee36bbd9aed083cd330066f25118141a031c0..f7f79d1f0136d7b330265d712fd41d100d13e2f6 100644
--- a/entity/Salutation_entity/Salutation_entity.aod
+++ b/entity/Salutation_entity/Salutation_entity.aod
@@ -51,6 +51,7 @@
     <entityField>
       <name>SORT</name>
       <title>Sorting</title>
+      <valueProcess>%aditoprj%/entity/Salutation_entity/entityfields/sort/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>TITLE</name>
diff --git a/entity/Salutation_entity/entityfields/sex/valueProcess.js b/entity/Salutation_entity/entityfields/sex/valueProcess.js
index ce31dcbede0d54a6db9b46ee1b4e0dbcb3b30752..fdf5d8633b6a364a16d13f7f67a8934ac3fefe02 100644
--- a/entity/Salutation_entity/entityfields/sex/valueProcess.js
+++ b/entity/Salutation_entity/entityfields/sex/valueProcess.js
@@ -3,7 +3,7 @@ import("system.vars");
 import("KeywordRegistry_basic");
 import("system.result");
 
-/*if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) && vars.get("$this.value") == null)
+if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) && vars.get("$this.value") == null)
 {
     result.string($KeywordRegistry.personGender$other());
-}*/
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/entity/Salutation_entity/entityfields/sort/valueProcess.js b/entity/Salutation_entity/entityfields/sort/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..867b597fbcf1a681c2aa1b2e574b957af0add1b2
--- /dev/null
+++ b/entity/Salutation_entity/entityfields/sort/valueProcess.js
@@ -0,0 +1,12 @@
+import("system.neon");
+import("Sql_lib");
+import("system.vars");
+import("system.result");
+
+if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) && vars.get("$this.value") == null)
+{
+    var res = newSelect("max(SALUTATION.SORT)+1")
+                        .from("SALUTATION")
+                        .cell()
+    result.string(res);
+}
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/SupportTicket_entity.aod b/entity/SupportTicket_entity/SupportTicket_entity.aod
index f1320203bfe5a5c482665a7fbf8f0098ff4f8d0f..db8daa732b8e6ba8ac26517fd2f225314c6575a3 100644
--- a/entity/SupportTicket_entity/SupportTicket_entity.aod
+++ b/entity/SupportTicket_entity/SupportTicket_entity.aod
@@ -485,7 +485,6 @@
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>TASK_PRIORITY.displayValue</name>
-          <expression>%aditoprj%/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/task_priority.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>TASK_PROGRESS.value</name>
diff --git a/entity/Task_entity/Task_entity.aod b/entity/Task_entity/Task_entity.aod
index 28aaf1ff3a2235dee2c18623f6186cedb2503760..0be99b99ff62a5d371fa7c3147fcf23fa13fc07c 100644
--- a/entity/Task_entity/Task_entity.aod
+++ b/entity/Task_entity/Task_entity.aod
@@ -16,6 +16,14 @@
     <entityProvider>
       <name>#PROVIDER</name>
       <recordContainer>db</recordContainer>
+      <dependencies>
+        <entityDependency>
+          <name>7a20f989-4c0a-40aa-9092-6ea9e99e851e</name>
+          <entityName>Object_entity</entityName>
+          <fieldName>Tasks</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityField>
       <name>SUBJECT</name>
diff --git a/entity/Task_entity/contentTitleProcess.js b/entity/Task_entity/contentTitleProcess.js
index 42200983cd942d93065d3728601f40eb2cc2d4ad..f52078612d802465f741fa89ea2baae0165c1e6b 100644
--- a/entity/Task_entity/contentTitleProcess.js
+++ b/entity/Task_entity/contentTitleProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$field.TYPE.displayValue"))
\ No newline at end of file
+result.string(vars.get("$field.SUBJECT"))
\ 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 98ee6c1d37d0602d24647a54c6c46497854029d6..bf89d69810e24d611916e499974711d72c438654 100644
--- a/entity/Task_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Task_entity/recordcontainers/db/conditionProcess.js
@@ -33,6 +33,19 @@ if (loadNothing)
 }
 else
 {
+    //null has a special sql treatment, therefor check null and != 1
+    var protectionLevelCondition = newWhere("TASK.PROTECTIONLEVEL != 1 or TASK.PROTECTIONLEVEL is null");
+    if (ownContactId)
+    {
+        protectionLevelCondition.or(
+            newWhere("TASK.PROTECTIONLEVEL = 1")
+                .and(newWhere("TASK.EDITOR_CONTACT_ID", ownContactId)
+                          .or("TASK.REQUESTOR_CONTACT_ID", ownContactId)
+                )
+        );
+    }
+    cond.and(protectionLevelCondition)
+  
     //TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
     result.string(cond.toString());
 }
\ No newline at end of file
diff --git a/entity/TurnoverTree_entity/TurnoverTree_entity.aod b/entity/TurnoverTree_entity/TurnoverTree_entity.aod
index 2c31f603738fa26bdd6e905718259e6545517b64..412433f0950fd8d93d64fee60e73c9d96b126e4f 100644
--- a/entity/TurnoverTree_entity/TurnoverTree_entity.aod
+++ b/entity/TurnoverTree_entity/TurnoverTree_entity.aod
@@ -77,7 +77,7 @@
     </entityField>
     <entityField>
       <name>GROUP</name>
-      <title>Product group</title>
+      <title>Product Group</title>
     </entityField>
     <entityField>
       <name>FORECASTPRICE</name>
diff --git a/entity/UniversalFileProcessor_entity/entityfields/drop_action/onActionProcess.js b/entity/UniversalFileProcessor_entity/entityfields/drop_action/onActionProcess.js
index f72044a7c9312c6e04b4e3649629c884e82dc082..43feeb028966f9f5e0da867224d550f289cc459b 100644
--- a/entity/UniversalFileProcessor_entity/entityfields/drop_action/onActionProcess.js
+++ b/entity/UniversalFileProcessor_entity/entityfields/drop_action/onActionProcess.js
@@ -35,9 +35,9 @@ for (var i = 0, l = files.length; i < l; i++)
                 var incomingMailExec = new IncomingEmailExecutor(mailObj);
                 incomingMailExec.setAlias(dbAlias);
                 var mailImportResult = incomingMailExec.autoProcess()
-                if ((!mailImportResult.unlinkedMailId) && mailImportResult.activityId)
+                if ((!mailImportResult.isUnlinkedMail) && mailImportResult.activityId)
                     status.activitiesCreated++;
-                else if (mailImportResult.unlinkedMailId && mailImportResult.activityId)
+                else if (mailImportResult.isUnlinkedMail && mailImportResult.activityId)
                     status.unlinkedMailsCreated++;
                 else
                     status.skippedFiles++;
diff --git a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod
index 449150050accbbfd17b3ac473b85c6532b497ec1..46740270752b5207fb8b62d480d5ebf3c57259e9 100644
--- a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod
+++ b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod
@@ -173,12 +173,6 @@
       <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/visitplanemployeeweek_param/valueProcess.js</valueProcess>
       <expose v="true" />
     </entityParameter>
-    <entityConsumer>
-      <name>visitPlanEmployeeWeeks_Id</name>
-      <dependency>
-        <name>dependency</name>
-      </dependency>
-    </entityConsumer>
     <entityParameter>
       <name>ComingFromRecommendation_param</name>
       <expose v="true" />
diff --git a/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod b/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod
index 43bd4194877fb2a0fa8ccfd9b7d4385d7d1c5db0..5719de94c66c1f01c91b39451f9d96deb117f2c6 100644
--- a/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod
+++ b/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod
@@ -194,6 +194,9 @@
         </entityParameter>
       </children>
     </entityConsumer>
+    <entityField>
+      <name>VERSION_TITLE</name>
+    </entityField>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
@@ -234,6 +237,9 @@
         <jDitoRecordFieldMapping>
           <name>DESCRIPTION.value</name>
         </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>VERSION_TITLE.value</name>
+        </jDitoRecordFieldMapping>
       </recordFieldMappings>
     </jDitoRecordContainer>
   </recordContainers>
diff --git a/entity/WorkflowDefinition_entity/entityfields/diagram/valueProcess.js b/entity/WorkflowDefinition_entity/entityfields/diagram/valueProcess.js
index 732cf42d0b882149fc1e4dad9234383106637c06..a9231e7044d7ab9e4331809c863662b08f525404 100644
--- a/entity/WorkflowDefinition_entity/entityfields/diagram/valueProcess.js
+++ b/entity/WorkflowDefinition_entity/entityfields/diagram/valueProcess.js
@@ -3,5 +3,5 @@ import("system.result");
 import("system.neon");
 import("system.workflow");
 
-if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW && vars.get("$field.VERSION"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW && vars.get("$field.VERSION"))
     result.string(workflow.getProcessDiagram(vars.get("$field.UID")));
\ No newline at end of file
diff --git a/entity/WorkflowDefinition_entity/recordcontainers/jdito/contentProcess.js b/entity/WorkflowDefinition_entity/recordcontainers/jdito/contentProcess.js
index 6523e43702e8fd2ac39f3fbc8222069d5abd4eff..aff0261cf5187f58d2b66bafd7d223034036e2a4 100644
--- a/entity/WorkflowDefinition_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/WorkflowDefinition_entity/recordcontainers/jdito/contentProcess.js
@@ -1,3 +1,4 @@
+import("system.translate");
 import("KeywordRegistry_basic");
 import("system.vars");
 import("system.result");
@@ -50,7 +51,8 @@ result.object((function ()
             def.key,
             def.version,
             def.active,
-            def.description || ""
+            def.description || "",
+            translate.withArguments("Version %0", [def.version])
         ];
     });
 
diff --git a/entity/WorkflowSignal_entity/WorkflowSignal_entity.aod b/entity/WorkflowSignal_entity/WorkflowSignal_entity.aod
index 70792616c28e031a80569f42f07e0d2656ec68fe..05b77e9fea96cde4f1b68245d886d207ff6d41df 100644
--- a/entity/WorkflowSignal_entity/WorkflowSignal_entity.aod
+++ b/entity/WorkflowSignal_entity/WorkflowSignal_entity.aod
@@ -154,10 +154,6 @@
           <name>PROCESSDEFINITION_KEY.value</name>
           <recordfield>WORKFLOWSIGNAL.PROCESSDEFINITION_KEY</recordfield>
         </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>ICON.value</name>
-          <expression>%aditoprj%/entity/WorkflowSignal_entity/recordcontainers/db/recordfieldmappings/icon.value/expression.js</expression>
-        </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>VARIABLES.value</name>
           <recordfield>WORKFLOWSIGNAL.VARIABLES</recordfield>
diff --git a/entity/WorkflowSignal_entity/recordcontainers/db/conditionProcess.js b/entity/WorkflowSignal_entity/recordcontainers/db/conditionProcess.js
index 1bae28698e6ca6fea69f1f2327b507defec4368e..f923d3d4080f7f52d60664e2d6fefe329ff35cf2 100644
--- a/entity/WorkflowSignal_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/WorkflowSignal_entity/recordcontainers/db/conditionProcess.js
@@ -1,6 +1,16 @@
+import("system.vars");
+import("system.workflow");
 import("Sql_lib");
 import("system.result");
 
-var cond = newWhereIfSet("WORKFLOWSIGNAL.PROCESSDEFINITION_KEY", "$param.ProcessDefinitionKey_param");
+//include all signals with the same names as the ones in the current workflow definition to avoid conflicts
+var signals = JSON.parse(workflow.getSignalDefinitions(vars.get("$param.ProcessDefinitionId_param")));
+var signalNames = signals.map(function (signal)
+{
+    return signal.name;
+});
+
+var cond = newWhereIfSet("WORKFLOWSIGNAL.PROCESSDEFINITION_KEY", "$param.ProcessDefinitionKey_param")
+    .orIfSet("WORKFLOWSIGNAL.SIGNAL_NAME", signalNames, SqlBuilder.IN()); 
 
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/WorkflowSignal_entity/recordcontainers/db/recordfieldmappings/icon.value/expression.js b/entity/WorkflowSignal_entity/recordcontainers/db/recordfieldmappings/icon.value/expression.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/WorkflowStartConfig_entity/WorkflowStartConfig_entity.aod b/entity/WorkflowStartConfig_entity/WorkflowStartConfig_entity.aod
index d0a308b0c5f3f4c97b54e14d9797bb4a35b055b5..52186117b0ede7cb65a57fce5de0b5b2056a2c14 100644
--- a/entity/WorkflowStartConfig_entity/WorkflowStartConfig_entity.aod
+++ b/entity/WorkflowStartConfig_entity/WorkflowStartConfig_entity.aod
@@ -4,6 +4,7 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/entity/WorkflowStartConfig_entity/documentation.adoc</documentation>
   <title>Usage</title>
+  <imageProcess>%aditoprj%/entity/WorkflowStartConfig_entity/imageProcess.js</imageProcess>
   <titlePlural>Usage</titlePlural>
   <recordContainer>db</recordContainer>
   <entityFields>
@@ -18,6 +19,7 @@
       <title>Module</title>
       <consumer>Contexts</consumer>
       <mandatory v="true" />
+      <displayValueProcess>%aditoprj%/entity/WorkflowStartConfig_entity/entityfields/object_type/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
       <name>TRIGGER_EVENT</name>
diff --git a/entity/WorkflowStartConfig_entity/entityfields/object_type/displayValueProcess.js b/entity/WorkflowStartConfig_entity/entityfields/object_type/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..af662ad2474d3da0e5b3deab7764de0ad29d39bc
--- /dev/null
+++ b/entity/WorkflowStartConfig_entity/entityfields/object_type/displayValueProcess.js
@@ -0,0 +1,6 @@
+import("Context_lib");
+import("system.result");
+import("system.vars");
+
+var context = vars.get("$field.OBJECT_TYPE");
+result.string(context ? ContextUtils.getTitle(context, true) : "");
\ No newline at end of file
diff --git a/entity/WorkflowStartConfig_entity/imageProcess.js b/entity/WorkflowStartConfig_entity/imageProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..34147b89bd271ec01be2bb3fa1c6eb055186963f
--- /dev/null
+++ b/entity/WorkflowStartConfig_entity/imageProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.vars");
+import("system.project");
+
+var contextModel = project.getDataModel(project.DATAMODEL_KIND_CONTEXT, vars.get("$field.OBJECT_TYPE"));
+result.string(contextModel ? contextModel[5] : "");
\ No newline at end of file
diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
index fe27631e36b764b8516909749aedd5041d1e8eb3..cfa2e9c9be05a7b4c7e20b7047026e1a4116ece4 100644
--- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
+++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
@@ -6653,9 +6653,6 @@
     <entry>
       <key>Leadimport Reset</key>
     </entry>
-    <entry>
-      <key>Offer status changed!</key>
-    </entry>
     <entry>
       <key>Möchten Sie den Import abbrechen?</key>
     </entry>
@@ -6713,12 +6710,6 @@
     <entry>
       <key>Invalid file type; only .html, .eml and .txt are allowed</key>
     </entry>
-    <entry>
-      <key>ankle of</key>
-    </entry>
-    <entry>
-      <key>New Visit Recommendation</key>
-    </entry>
     <entry>
       <key>Set salesproject phase</key>
     </entry>
@@ -6761,6 +6752,42 @@
     <entry>
       <key>Full details</key>
     </entry>
+    <entry>
+      <key>Sales Projects</key>
+    </entry>
+    <entry>
+      <key>set Read</key>
+    </entry>
+    <entry>
+      <key>set New</key>
+    </entry>
+    <entry>
+      <key>Product Group</key>
+    </entry>
+    <entry>
+      <key>Version %0</key>
+    </entry>
+    <entry>
+      <key>data</key>
+    </entry>
+    <entry>
+      <key>Offer No.</key>
+    </entry>
+    <entry>
+      <key>Version %0</key>
+    </entry>
+    <entry>
+      <key>of other on this employee's calendar</key>
+    </entry>
+    <entry>
+      <key>of this employee on the calendar of others</key>
+    </entry>
+    <entry>
+      <key>Offerrequest</key>
+    </entry>
+    <entry>
+      <key>data</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
   <sqlModels>
diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
index e182131383250479abc646859eeab3a7ea62f6e5..297c496a68433d8c9e84ce33f27866a9b03c0b3f 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -8653,6 +8653,52 @@ Bitte Datumseingabe prüfen</value>
       <key>Not created yet</key>
       <value>Noch nicht erstellt</value>
     </entry>
+    <entry>
+      <key>Abgesagt</key>
+    </entry>
+    <entry>
+      <key>Sales Projects</key>
+    </entry>
+    <entry>
+      <key>set Read</key>
+      <value>Gelesen setzen</value>
+    </entry>
+    <entry>
+      <key>set New</key>
+      <value>Neu setzen</value>
+    </entry>
+    <entry>
+      <key>Product Group</key>
+      <value>Produktgruppe</value>
+    </entry>
+    <entry>
+      <key>Version %0</key>
+    </entry>
+    <entry>
+      <key>data</key>
+    </entry>
+    <entry>
+      <key>Offer No.</key>
+      <value>Angebots Nr.</value>
+    </entry>
+    <entry>
+      <key>Version %0</key>
+    </entry>
+    <entry>
+      <key>of other on this employee's calendar</key>
+      <value>von den Anderen auf den Kalender dieses Mitarbeiters</value>
+    </entry>
+    <entry>
+      <key>of this employee on the calendar of others</key>
+      <value>von diesem Mitarbeiter auf den Kalender von der Anderen</value>
+    </entry>
+    <entry>
+      <key>Offerrequest</key>
+      <value>Angebotsanfrage</value>
+    </entry>
+    <entry>
+      <key>data</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
index fd3c8a7f0d2df9506a9fa0331a6c036f52eedb88..6b3c84ea6235206e04b715f9df49d1d37fa61386 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -6706,9 +6706,6 @@
     <entry>
       <key>Leadimport Reset</key>
     </entry>
-    <entry>
-      <key>Offer status changed!</key>
-    </entry>
     <entry>
       <key>Möchten Sie den Import abbrechen?</key>
     </entry>
@@ -6787,12 +6784,6 @@
     <entry>
       <key>Create salesproject touchpoint</key>
     </entry>
-    <entry>
-      <key>Visit Planning</key>
-    </entry>
-    <entry>
-      <key>ankle of</key>
-    </entry>
     <entry>
       <key>Limited details</key>
     </entry>
@@ -6823,6 +6814,45 @@
     <entry>
       <key>Full details</key>
     </entry>
+    <entry>
+      <key>Invalid file type; only .html, .eml and .txt are allowed</key>
+    </entry>
+    <entry>
+      <key>Sales Projects</key>
+    </entry>
+    <entry>
+      <key>set Read</key>
+    </entry>
+    <entry>
+      <key>set New</key>
+    </entry>
+    <entry>
+      <key>Product Group</key>
+    </entry>
+    <entry>
+      <key>Version %0</key>
+    </entry>
+    <entry>
+      <key>data</key>
+    </entry>
+    <entry>
+      <key>Offer No.</key>
+    </entry>
+    <entry>
+      <key>Version %0</key>
+    </entry>
+    <entry>
+      <key>of other on this employee's calendar</key>
+    </entry>
+    <entry>
+      <key>of this employee on the calendar of others</key>
+    </entry>
+    <entry>
+      <key>Offerrequest</key>
+    </entry>
+    <entry>
+      <key>data</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/neonContext/Context/Context.aod b/neonContext/Context/Context.aod
index aeaabeff638488bfeb2fb549c885f9f5a35033bd..69e402bec3a328361873e350bcc52b4b31c28036 100644
--- a/neonContext/Context/Context.aod
+++ b/neonContext/Context/Context.aod
@@ -3,14 +3,4 @@
   <name>Context</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <entity>Context_entity</entity>
-  <references>
-    <neonViewReference>
-      <name>ddec38ae-82e6-4ac7-a50e-8a735eb9a075</name>
-      <view>ContextFilter_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>86650dd4-9569-433e-b3e5-fb9d62a7e45d</name>
-      <view>ContextLookup_vieww</view>
-    </neonViewReference>
-  </references>
 </neonContext>
diff --git a/neonContext/Document/Document.aod b/neonContext/Document/Document.aod
index 7c1ab4ead5e19992d370fb9a5b756b6dd824c8e2..23df7610e8382e65b899deb3cad08e580d3b3403 100644
--- a/neonContext/Document/Document.aod
+++ b/neonContext/Document/Document.aod
@@ -29,5 +29,9 @@
       <name>16c5b82f-8690-493c-98d9-150c086202d0</name>
       <view>DocumentDrawer_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>cd17be33-73ae-4e8d-a852-65152a772926</name>
+      <view>DocumentMultipleEdit_view</view>
+    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/DocumentTemplatePlaceOfUse/DocumentTemplatePlaceOfUse.aod b/neonContext/DocumentTemplatePlaceOfUse/DocumentTemplatePlaceOfUse.aod
index 32463ebbcd64371ea9b60df93ad30442b7fde96f..990276eaf640084d0bf1b0e4e66ce1be8b0f4679 100644
--- a/neonContext/DocumentTemplatePlaceOfUse/DocumentTemplatePlaceOfUse.aod
+++ b/neonContext/DocumentTemplatePlaceOfUse/DocumentTemplatePlaceOfUse.aod
@@ -5,10 +5,6 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <entity>DocumentTemplatePlaceOfUse_entity</entity>
   <references>
-    <neonViewReference>
-      <name>d602ddab-8a53-4f53-921d-5acb93e9bbe4</name>
-      <view>DocumentTemplateplaceOfUseList_viewasd</view>
-    </neonViewReference>
     <neonViewReference>
       <name>884cc1b0-6698-476e-a1ae-44fa6b88434d</name>
       <view>DocumentTemplatePlaceOfUseMultiEdit_view</view>
diff --git a/neonContext/DuplicateScan/DuplicateScan.aod b/neonContext/DuplicateScan/DuplicateScan.aod
deleted file mode 100644
index 0705b6d804e4e70948e677273aeb1e87e3e5c361..0000000000000000000000000000000000000000
--- a/neonContext/DuplicateScan/DuplicateScan.aod
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
-  <name>DuplicateScan</name>
-  <title>Duplicatescan</title>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <filterView>DuplicateScanFilter_view</filterView>
-  <editView>DuplicateScanEdit_view</editView>
-  <previewView>DuplicateScanPreview_view</previewView>
-  <entity>DuplicateScan_entity</entity>
-  <references>
-    <neonViewReference>
-      <name>53f8619a-aa58-45a3-afe4-a8cb15d76ece</name>
-      <view>DuplicateScanFilter_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>93945a65-b870-4f37-8282-da5d8c60f17d</name>
-      <view>DuplicateScanPreview_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>6688b424-8f21-49c7-8613-d6d822309a1a</name>
-      <view>DuplicateScanEdit_view</view>
-    </neonViewReference>
-  </references>
-</neonContext>
diff --git a/neonContext/ImportField/ImportField.aod b/neonContext/ImportField/ImportField.aod
index 8342f95ed93312c5c23b1a686b34577e72b1c34e..a2c30c3c1ce8e0b473fbd7b880a9e3babb1e303d 100644
--- a/neonContext/ImportField/ImportField.aod
+++ b/neonContext/ImportField/ImportField.aod
@@ -15,5 +15,9 @@
       <name>37f81868-7e5e-48c1-bb76-3215c7bfe87b</name>
       <view>ImportFieldEdit_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>e5940438-2213-49f8-8715-330963b677d9</name>
+      <view>ImportFieldFilterMapping_view</view>
+    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/LeadLog/LeadLog.aod b/neonContext/LeadLog/LeadLog.aod
index a94b9255cca710048f194093e7449a985b30c4f5..b183a8e3988e5d8f7e0e740ec362949841bf85eb 100644
--- a/neonContext/LeadLog/LeadLog.aod
+++ b/neonContext/LeadLog/LeadLog.aod
@@ -14,5 +14,9 @@
       <name>3e5f7e73-5a5c-4004-9b08-95f495e84a06</name>
       <view>LeadLogPreview_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>3ebb0277-6ff4-4ade-ae5c-32b2a2c02c41</name>
+      <view>LeadLogFilterDrawer_view</view>
+    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/Leadimport/Leadimport.aod b/neonContext/Leadimport/Leadimport.aod
index d0ea218db331ce02b718c6d07cd6d61264f38f5b..42e9bd76a2fc47e6d2ec9b9f828e43845182cec6 100644
--- a/neonContext/Leadimport/Leadimport.aod
+++ b/neonContext/Leadimport/Leadimport.aod
@@ -31,5 +31,17 @@
       <name>2ffd1242-8512-4f44-a3de-6e5c9501e3c9</name>
       <view>LeadimportDocEdit_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>a7355bc9-f925-4d6d-8284-3ebfc775d5a9</name>
+      <view>LeadimportLeadFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>63565f2e-7a0c-45e7-b25b-44de482e7be5</name>
+      <view>LeadimportLog_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>3c62f291-95ec-4156-8b0a-974027c75722</name>
+      <view>LeadimportLeadTempFilter_view</view>
+    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/LogHistory/LogHistory.aod b/neonContext/LogHistory/LogHistory.aod
index 9aeabbff89fae13f5f3e298054bebb8cecef5d8c..1a099c3496e637ac831daed690494cb11cd1748e 100644
--- a/neonContext/LogHistory/LogHistory.aod
+++ b/neonContext/LogHistory/LogHistory.aod
@@ -15,5 +15,9 @@
       <name>32181ad2-2766-4d52-a04b-4b74bcbd2453</name>
       <view>LogHistoryPreview_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>74b1ccb3-8a37-47df-a844-af03d3418e92</name>
+      <view>LogHistoryFilterDrawer_view</view>
+    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/Person/Person.aod b/neonContext/Person/Person.aod
index 9d3ca92578726c40e07fe7c2a4af1e723515fe39..5a9b1ecbe90107c4e484b01a2a7755d85faa8284 100644
--- a/neonContext/Person/Person.aod
+++ b/neonContext/Person/Person.aod
@@ -51,10 +51,6 @@
       <name>296af7da-1994-49a3-a26f-903f29609fae</name>
       <view>PersonAttributeRestriction_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>c91a69c4-8699-4117-9154-cb6be65f6a69</name>
-      <view>PersonDataPrivacy_view</view>
-    </neonViewReference>
     <neonViewReference>
       <name>dd102d90-0af3-4956-95f5-0175c50de3f4</name>
       <view>PersonMultiEdit_view</view>
diff --git a/neonContext/QuickEntry/QuickEntry.aod b/neonContext/QuickEntry/QuickEntry.aod
index 47e6955f0bd28a7078580f9f0d2f5188fb5e3ea4..c44db52e95254828433ff4928cda968192ca8872 100644
--- a/neonContext/QuickEntry/QuickEntry.aod
+++ b/neonContext/QuickEntry/QuickEntry.aod
@@ -10,9 +10,5 @@
       <name>43a3acbb-82a7-4d86-88f9-0e4265e4898d</name>
       <view>QuickEntryEdit_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>3a3a50cc-c112-410d-a836-171a07dbd323</name>
-      <view>QuickEntryFilter_view</view>
-    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/Salutation/Salutation.aod b/neonContext/Salutation/Salutation.aod
index 105e44671fae3f67a38045dfbbe0ad1968ef7f19..e483914f5a8af36115140b9b36a1ed72169dff3e 100644
--- a/neonContext/Salutation/Salutation.aod
+++ b/neonContext/Salutation/Salutation.aod
@@ -4,11 +4,16 @@
   <title></title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterView>SalutationFilter_view</filterView>
+  <editView>SalutationEdit_view</editView>
   <entity>Salutation_entity</entity>
   <references>
     <neonViewReference>
       <name>f4dff131-e058-4959-8141-f60910394a02</name>
       <view>SalutationFilter_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>f06f67b0-c7e3-4855-8342-4bc0f3ed7343</name>
+      <view>SalutationEdit_view</view>
+    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/TurnoverTree/TurnoverTree.aod b/neonContext/TurnoverTree/TurnoverTree.aod
index 2a54cfe9f256fa85df4809ec004416d19daf1fc0..2e1d45757356ea82e207636c6d09133c995cc50e 100644
--- a/neonContext/TurnoverTree/TurnoverTree.aod
+++ b/neonContext/TurnoverTree/TurnoverTree.aod
@@ -9,9 +9,5 @@
       <name>b8135e50-da8e-424c-9073-e721b4822736</name>
       <view>TurnoverTree_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>407eda43-5b44-4bae-980a-8ba522b0a5fe</name>
-      <view>TurnoverTreeForecast_view</view>
-    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/WorkflowInstance/WorkflowInstance.aod b/neonContext/WorkflowInstance/WorkflowInstance.aod
index 1645ba4c6393e29c8bc1766ffdc8fd03acbc901a..77696115abd5723f25ebb7e59cb566334f2b7e6b 100644
--- a/neonContext/WorkflowInstance/WorkflowInstance.aod
+++ b/neonContext/WorkflowInstance/WorkflowInstance.aod
@@ -24,10 +24,6 @@
       <name>1b36d7c5-af14-4cb6-9e68-99d738def562</name>
       <view>WorkflowInstanceMain_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>e701f4bc-29f4-4e93-98b5-d7d2cee1787e</name>
-      <view>WorkflowInstanceVariables_view</view>
-    </neonViewReference>
     <neonViewReference>
       <name>98e9064c-466c-43eb-a72a-c369e7eb28a4</name>
       <view>WorkflowInstanceTasks_view</view>
diff --git a/neonView/ActivityEdit_view/ActivityEdit_view.aod b/neonView/ActivityEdit_view/ActivityEdit_view.aod
index 4f90018a99e133b78829dcbe154b76b29e57b052..43d67ddddc3f0b08fbc3158cd66b5647bc83a8a0 100644
--- a/neonView/ActivityEdit_view/ActivityEdit_view.aod
+++ b/neonView/ActivityEdit_view/ActivityEdit_view.aod
@@ -20,10 +20,6 @@
           <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>
@@ -56,5 +52,10 @@
       <entityField>Attributes</entityField>
       <view>AttributeRelationMultiEdit_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>1dfe4fcc-eb36-4a6c-878d-f907d36de9ac</name>
+      <entityField>Documents</entityField>
+      <view>DocumentMultipleEdit_view</view>
+    </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/AttributeFilter_view/AttributeFilter_view.aod b/neonView/AttributeFilter_view/AttributeFilter_view.aod
index aa729603f97e329187240d31d343170cd77e98d8..573f26dd7d27579936a03fb6c149dd3318390280 100644
--- a/neonView/AttributeFilter_view/AttributeFilter_view.aod
+++ b/neonView/AttributeFilter_view/AttributeFilter_view.aod
@@ -15,6 +15,7 @@
       <parentField>ATTRIBUTE_PARENT_ID</parentField>
       <favoriteActionGroup1>AttributeActions</favoriteActionGroup1>
       <nodeExpandedField>expanded</nodeExpandedField>
+      <hideContentSearch v="false" />
       <showChildrenCount v="false" />
       <entityField>#ENTITY</entityField>
       <columns>
@@ -38,6 +39,7 @@
     </treeTableViewTemplate>
     <tableViewTemplate>
       <name>AttributesTable</name>
+      <hideContentSearch v="false" />
       <iconField>ICON</iconField>
       <titleField>FULL_ATTRIBUTE_NAME</titleField>
       <subtitleField>USAGELIST</subtitleField>
diff --git a/neonView/DocumentMultipleEdit_view/DocumentMultipleEdit_view.aod b/neonView/DocumentMultipleEdit_view/DocumentMultipleEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..26aa81b5f3e801333b1a5dddc11f352353abbf73
--- /dev/null
+++ b/neonView/DocumentMultipleEdit_view/DocumentMultipleEdit_view.aod
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>DocumentMultipleEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <genericMultipleViewTemplate>
+      <name>genericMultiple</name>
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonGenericMultipleTableColumn>
+          <name>c4cc3dbf-95cb-4947-ae8a-4c8cca9f21b0</name>
+          <entityField>BINDATA_UPLOAD</entityField>
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>40bf8a61-711f-42b8-b24c-0cdfc92e579f</name>
+          <entityField>NAME</entityField>
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>dc1d0e99-6600-4067-8192-07e8c605d362</name>
+          <entityField>DESCRIPTION</entityField>
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>ab509c66-f72a-46b5-af5d-2b5620506bf5</name>
+          <entityField>IS_MAIN_DOCUMENT</entityField>
+        </neonGenericMultipleTableColumn>
+      </columns>
+    </genericMultipleViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/EmailEdit_view/EmailEdit_view.aod b/neonView/EmailEdit_view/EmailEdit_view.aod
index 2585eb06279fc9f64f287e5f8be89c7b1f31f21e..2e045348b8c9b47c1a7950cc340c4ef62ca1894b 100644
--- a/neonView/EmailEdit_view/EmailEdit_view.aod
+++ b/neonView/EmailEdit_view/EmailEdit_view.aod
@@ -22,6 +22,10 @@
           <name>72441756-f00d-42a7-bd3f-a6f7964891bc</name>
           <entityField>DOCUMENT_TEMPLATE</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>6a72f9a6-f2fd-4a78-b1f9-2aca59cb25a1</name>
+          <entityField>subject</entityField>
+        </entityFieldLink>
       </fields>
     </genericViewTemplate>
     <actionsViewTemplate>
diff --git a/neonView/ImportFieldFilterMapping_view/ImportFieldFilterMapping_view.aod b/neonView/ImportFieldFilterMapping_view/ImportFieldFilterMapping_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..29a4e8be88bff2ea8e3aa2288698aa80d504f755
--- /dev/null
+++ b/neonView/ImportFieldFilterMapping_view/ImportFieldFilterMapping_view.aod
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>ImportFieldFilterMapping_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <titledListViewTemplate>
+      <name>ImportFieldFilterMappingTitledList</name>
+      <titleField>FIELDNAME</titleField>
+      <titleFieldFullWidth v="false" />
+      <fixedDrawer v="true" />
+      <entityField>#ENTITY</entityField>
+      <isDeletable v="false" />
+      <isCreatable v="false" />
+      <columns>
+        <neonTitledListTableColumn>
+          <name>97d7d6e2-cead-4d86-87bf-e300b2d743a5</name>
+          <entityField>MAPPINGFIELD</entityField>
+        </neonTitledListTableColumn>
+      </columns>
+    </titledListViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/KeywordAttributeFilter_view/KeywordAttributeFilter_view.aod b/neonView/KeywordAttributeFilter_view/KeywordAttributeFilter_view.aod
index a4dae5abbe388e1a9910a3a69f0242090b6e0849..29ad4b2f81fd6c8f054a396900c81d912cafd855 100644
--- a/neonView/KeywordAttributeFilter_view/KeywordAttributeFilter_view.aod
+++ b/neonView/KeywordAttributeFilter_view/KeywordAttributeFilter_view.aod
@@ -11,6 +11,7 @@
   <children>
     <tableViewTemplate>
       <name>Attributes</name>
+      <hideContentSearch v="false" />
       <titleField>NAME</titleField>
       <subtitleField>CONTAINER</subtitleField>
       <descriptionField>TYPE</descriptionField>
diff --git a/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod b/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod
index 5f0b7fa9a3b715553a935f1565430140b932fe1f..19ec98e97d3ca1fb6e441f2ef2ff5effc733f4fe 100644
--- a/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod
+++ b/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod
@@ -15,6 +15,7 @@
       <defaultGroupFields>
         <element>CONTAINER</element>
       </defaultGroupFields>
+      <hideContentSearch v="false" />
       <entityField>#ENTITY</entityField>
       <columns>
         <neonTreeTableColumn>
@@ -37,6 +38,7 @@
     </treeTableViewTemplate>
     <tableViewTemplate>
       <name>EntriesTable</name>
+      <hideContentSearch v="false" />
       <titleField>TITLE</titleField>
       <subtitleField>CONTAINER</subtitleField>
       <entityField>#ENTITY</entityField>
diff --git a/neonView/LeadLogFilterDrawer_view/LeadLogFilterDrawer_view.aod b/neonView/LeadLogFilterDrawer_view/LeadLogFilterDrawer_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..1463636384ef61e9a23e5af4775d6e344d902b33
--- /dev/null
+++ b/neonView/LeadLogFilterDrawer_view/LeadLogFilterDrawer_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.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>LeadLogFilterDrawer_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <drawerLayout>
+      <name>layout</name>
+      <layoutCaption>Import Logs</layoutCaption>
+      <fixedDrawer v="false" />
+    </drawerLayout>
+  </layout>
+  <children>
+    <neonViewReference>
+      <name>bfdfa657-c635-4cb7-b083-5243044d6d08</name>
+      <entityField>#ENTITY</entityField>
+      <view>LeadLogFilter_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/LeadimportLeadFilter_view/LeadimportLeadFilter_view.aod b/neonView/LeadimportLeadFilter_view/LeadimportLeadFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..e62ead8520b59abed55d818a3a92c454ea62de93
--- /dev/null
+++ b/neonView/LeadimportLeadFilter_view/LeadimportLeadFilter_view.aod
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>LeadimportLeadFilter_view</name>
+  <title>Transferdaten</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <layout>
+    <drawerLayout>
+      <name>layout</name>
+      <layoutCaption></layoutCaption>
+      <fixedDrawer v="true" />
+    </drawerLayout>
+  </layout>
+  <children>
+    <actionsViewTemplate>
+      <name>Actions</name>
+      <actions>
+        <element>LeadimportReset</element>
+        <element>TransferData</element>
+      </actions>
+      <entityField>#ENTITY</entityField>
+      <devices>
+        <element>MOBILE</element>
+        <element>TABLET</element>
+        <element>DESKTOP</element>
+      </devices>
+    </actionsViewTemplate>
+    <neonViewReference>
+      <name>43c63616-3587-48e4-b317-8cfb80d18b45</name>
+      <entityField>LeadC</entityField>
+      <view>LeadFilter_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/LeadimportLeadTempFilter_view/LeadimportLeadTempFilter_view.aod b/neonView/LeadimportLeadTempFilter_view/LeadimportLeadTempFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..6ec6b4bb48e5c1e8656ee8b9726dcf7454385642
--- /dev/null
+++ b/neonView/LeadimportLeadTempFilter_view/LeadimportLeadTempFilter_view.aod
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>LeadimportLeadTempFilter_view</name>
+  <title>Import Daten</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <layout>
+    <drawerLayout>
+      <name>layout</name>
+      <fixedDrawer v="true" />
+    </drawerLayout>
+  </layout>
+  <children>
+    <actionsViewTemplate>
+      <name>Actions</name>
+      <actions>
+        <element>Load_Data</element>
+      </actions>
+      <entityField>#ENTITY</entityField>
+    </actionsViewTemplate>
+    <neonViewReference>
+      <name>b3432200-c946-4ffb-bf32-df292e1c8a73</name>
+      <entityField>LeadTempC</entityField>
+      <view>LeadTempFilter_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/LeadimportLog_view/LeadimportLog_view.aod b/neonView/LeadimportLog_view/LeadimportLog_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..950120edca9d3838192fb9df1c7ad2447fb4c5c0
--- /dev/null
+++ b/neonView/LeadimportLog_view/LeadimportLog_view.aod
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>LeadimportLog_view</name>
+  <title>Logs</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <neonViewReference>
+      <name>0664bb5c-d976-43be-8239-da4ba36d9c61</name>
+      <entityField>LeadLogC</entityField>
+      <view>LeadLogFilterDrawer_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>0406b319-3d33-4077-b65e-b519ee62a670</name>
+      <entityField>LogHistoryC</entityField>
+      <view>LogHistoryFilterDrawer_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/LeadimportMain_view/LeadimportMain_view.aod b/neonView/LeadimportMain_view/LeadimportMain_view.aod
index 2d979a0aca6a2f2fc4b7cab6c72df06d39f2575e..5dfdbbc4f8e72eb7bfc2663fc78392ad12988910 100644
--- a/neonView/LeadimportMain_view/LeadimportMain_view.aod
+++ b/neonView/LeadimportMain_view/LeadimportMain_view.aod
@@ -15,24 +15,24 @@
       <view>LeadimportPreview_view</view>
     </neonViewReference>
     <neonViewReference>
-      <name>3c787fee-a6bf-4579-bab6-7cf4318bfd47</name>
-      <entityField>ImportFieldID</entityField>
-      <view>ImportFieldFilter_view</view>
+      <name>0ac7276f-4677-41e2-9ad5-57b0d2711b8b</name>
+      <entityField>#ENTITY</entityField>
+      <view>LeadimportLeadTempFilter_view</view>
     </neonViewReference>
     <neonViewReference>
-      <name>0dcbd908-51ef-43ad-b2a2-58304aa65770</name>
-      <entityField>LeadTempC</entityField>
-      <view>LeadTempFilter_view</view>
+      <name>51132482-3f97-44a0-ba08-bf395686e6b7</name>
+      <entityField>ImportFieldID</entityField>
+      <view>ImportFieldFilterMapping_view</view>
     </neonViewReference>
     <neonViewReference>
-      <name>d0109d4a-b0f4-45f8-a161-235bd3837384</name>
-      <entityField>LeadC</entityField>
-      <view>LeadFilter_view</view>
+      <name>5a6123d2-a2a4-416d-a138-fac6cdc5fb82</name>
+      <entityField>#ENTITY</entityField>
+      <view>LeadimportLeadFilter_view</view>
     </neonViewReference>
     <neonViewReference>
-      <name>19633cbf-79a3-4bed-93cb-2a1cc62fb6f3</name>
-      <entityField>LeadLogC</entityField>
-      <view>LeadLogFilter_view</view>
+      <name>b085a160-f739-487c-a24c-5d12898aa6f1</name>
+      <entityField>#ENTITY</entityField>
+      <view>LeadimportLog_view</view>
     </neonViewReference>
     <neonViewReference>
       <name>61237df6-2af1-41bd-bb56-da0bc624afb5</name>
@@ -44,15 +44,5 @@
       <entityField>Tasks</entityField>
       <view>TaskFilter_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>97f93e38-e955-485a-998a-3be4d07d4972</name>
-      <entityField>DocumentC</entityField>
-      <view>DocumentFilter_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>6cacd3bb-1937-4cf3-9a26-e205f8edebaa</name>
-      <entityField>LogHistoryC</entityField>
-      <view>LogHistoryFilter_view</view>
-    </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/LeadimportPreview_view/LeadimportPreview_view.aod b/neonView/LeadimportPreview_view/LeadimportPreview_view.aod
index ee53272397fe2ebc5d696b4f551fa5f6c046403a..7c0a2ef4066c8c8c7696f61f2a79fb0d28aaaf63 100644
--- a/neonView/LeadimportPreview_view/LeadimportPreview_view.aod
+++ b/neonView/LeadimportPreview_view/LeadimportPreview_view.aod
@@ -50,17 +50,8 @@
           <name>97a8978c-0e17-4a8d-a90b-fedfb7a4ff86</name>
           <entityField>FIELDDELIMITERS</entityField>
         </entityFieldLink>
-      </fields>
-    </genericViewTemplate>
-    <genericViewTemplate>
-      <name>Generic</name>
-      <showDrawer v="true" />
-      <drawerCaption>File</drawerCaption>
-      <hideLabels v="true" />
-      <entityField>#ENTITY</entityField>
-      <fields>
         <entityFieldLink>
-          <name>24d3036f-be4e-418c-a13f-e21c44112edf</name>
+          <name>76f80b3e-51be-41b8-93c0-a1ac0b5dc24f</name>
           <entityField>bindata</entityField>
         </entityFieldLink>
       </fields>
diff --git a/neonView/LogHistoryFilterDrawer_view/LogHistoryFilterDrawer_view.aod b/neonView/LogHistoryFilterDrawer_view/LogHistoryFilterDrawer_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..0c329f2bd4dbfc96cf6f22562fbada815a3a91b3
--- /dev/null
+++ b/neonView/LogHistoryFilterDrawer_view/LogHistoryFilterDrawer_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.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>LogHistoryFilterDrawer_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <drawerLayout>
+      <name>layout</name>
+      <layoutCaption>Logs</layoutCaption>
+      <fixedDrawer v="true" />
+    </drawerLayout>
+  </layout>
+  <children>
+    <neonViewReference>
+      <name>f05e7816-2448-4b99-af5d-8b9f17a1cc89</name>
+      <entityField>#ENTITY</entityField>
+      <view>LogHistoryFilter_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/PermissionActionEdit_view/PermissionActionEdit_view.aod b/neonView/PermissionActionEdit_view/PermissionActionEdit_view.aod
index 3f4b118739e963e7511ade42d7eb2d03de5fe722..ab4ce87a232c2c483b2c81404cf0d24397da68d4 100644
--- a/neonView/PermissionActionEdit_view/PermissionActionEdit_view.aod
+++ b/neonView/PermissionActionEdit_view/PermissionActionEdit_view.aod
@@ -16,6 +16,7 @@
         <neonGenericMultipleTableColumn>
           <name>0272107d-c34c-40e7-974e-5a63d2239fdb</name>
           <entityField>ACTION</entityField>
+          <fullWidth v="true" />
         </neonGenericMultipleTableColumn>
       </columns>
     </genericMultipleViewTemplate>
diff --git a/neonView/PermissionActionList_view/PermissionActionList_view.aod b/neonView/PermissionActionList_view/PermissionActionList_view.aod
index b07ef3eb50166e0787b94f915a9f72d3c02b4aba..5019e2d1b3739a17d7c80a9b64da998da4e7d437 100644
--- a/neonView/PermissionActionList_view/PermissionActionList_view.aod
+++ b/neonView/PermissionActionList_view/PermissionActionList_view.aod
@@ -2,6 +2,11 @@
 <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
   <name>PermissionActionList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
   <children>
     <titledListViewTemplate>
       <name>TitledList</name>
diff --git a/neonView/PermissionCalendarFilterDrawer_view/PermissionCalendarFilterDrawer_view.aod b/neonView/PermissionCalendarFilterDrawer_view/PermissionCalendarFilterDrawer_view.aod
index eae0d77964ec99af2f38e01b17c61d833af6c1a8..32b319f4445dd4838b972b11db7c6193c7833b35 100644
--- a/neonView/PermissionCalendarFilterDrawer_view/PermissionCalendarFilterDrawer_view.aod
+++ b/neonView/PermissionCalendarFilterDrawer_view/PermissionCalendarFilterDrawer_view.aod
@@ -5,7 +5,7 @@
   <layout>
     <drawerLayout>
       <name>layout</name>
-      <layoutCaption>My Calendar</layoutCaption>
+      <layoutCaption>of other on this employee's calendar</layoutCaption>
       <fixedDrawer v="true" />
     </drawerLayout>
   </layout>
diff --git a/neonView/PermissionCalendarFilterReverse_view/PermissionCalendarFilterReverse_view.aod b/neonView/PermissionCalendarFilterReverse_view/PermissionCalendarFilterReverse_view.aod
index e673da0fa5e12f5996cba4b5386645166e883ab2..df480a219c345fe0847a2ebdf5c5f62479108e60 100644
--- a/neonView/PermissionCalendarFilterReverse_view/PermissionCalendarFilterReverse_view.aod
+++ b/neonView/PermissionCalendarFilterReverse_view/PermissionCalendarFilterReverse_view.aod
@@ -7,7 +7,7 @@
   <layout>
     <drawerLayout>
       <name>layout</name>
-      <layoutCaption>Other Calendars</layoutCaption>
+      <layoutCaption>of this employee on the calendar of others</layoutCaption>
     </drawerLayout>
   </layout>
   <children>
diff --git a/neonView/PersonSimpleList_view/PersonSimpleList_view.aod b/neonView/PersonSimpleList_view/PersonSimpleList_view.aod
index 74abb3a7a145cecbc7f641a7a5d6ab0db63c5dff..5a2312e1f735abdb644f2145dbaa24f5edb0b514 100644
--- a/neonView/PersonSimpleList_view/PersonSimpleList_view.aod
+++ b/neonView/PersonSimpleList_view/PersonSimpleList_view.aod
@@ -19,8 +19,8 @@
       <entityField>#ENTITY</entityField>
       <columns>
         <neonTableColumn>
-          <name>d6207ade-29e7-4af0-ba5f-e9ddd799de7b</name>
-          <entityField>#IMAGE</entityField>
+          <name>cb441e57-dba4-49d6-a8f4-cea5db3187f2</name>
+          <entityField>PICTURE</entityField>
         </neonTableColumn>
         <neonTableColumn>
           <name>1053d3a7-c5ee-4260-86f6-54e820f53e9f</name>
diff --git a/neonView/SalutationEdit_view/SalutationEdit_view.aod b/neonView/SalutationEdit_view/SalutationEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..ebbb601e04d5e06c43c046a6eddce6deb667c789
--- /dev/null
+++ b/neonView/SalutationEdit_view/SalutationEdit_view.aod
@@ -0,0 +1,48 @@
+<?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.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>SalutationEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>generic</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>5c13e664-eb51-470f-84f0-bb25f72b0881</name>
+          <entityField>ISOLANGUAGE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>642ebe6f-1225-4ffd-9755-778997c8a179</name>
+          <entityField>SALUTATION_TEXT</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>22befd63-0f23-4527-aa63-22a2bb4aec73</name>
+          <entityField>TITLE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>d1db49fd-5599-4994-9a01-a93694a020c4</name>
+          <entityField>HEADLINE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>1e4d42d1-e075-4599-bd8e-0798ea77f0d2</name>
+          <entityField>LETTERSALUTATION</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>14541607-aa61-4a11-bca6-e5a5bbde743b</name>
+          <entityField>SEX</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>6ff09b16-dfdb-41de-88fe-a9a9fface3b7</name>
+          <entityField>SORT</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/SalutationFilter_view/SalutationFilter_view.aod b/neonView/SalutationFilter_view/SalutationFilter_view.aod
index b7e8746bfb30a3a9eb74f276748ea7307da98faf..9c60dce1f71f932d1fc696e1b470e6b01f70caac 100644
--- a/neonView/SalutationFilter_view/SalutationFilter_view.aod
+++ b/neonView/SalutationFilter_view/SalutationFilter_view.aod
@@ -11,38 +11,37 @@
   <children>
     <tableViewTemplate>
       <name>Salutations</name>
-      <inlineEdit v="true" />
       <titleField>SALUTATION_TEXT</titleField>
       <subtitleField>TITLE</subtitleField>
       <entityField>#ENTITY</entityField>
       <autoNewRow v="true" />
       <columns>
         <neonTableColumn>
-          <name>32e3fa28-1749-45a2-ae77-27ddfb221dba</name>
+          <name>ab3b9892-d5fa-4926-baf1-7f070ea7f68a</name>
           <entityField>ISOLANGUAGE</entityField>
         </neonTableColumn>
         <neonTableColumn>
-          <name>9cccf3a4-bbe7-453a-955c-246691c27dba</name>
+          <name>5a446b0a-f7cd-4c0d-9ce6-137958f28f4b</name>
           <entityField>SALUTATION_TEXT</entityField>
         </neonTableColumn>
         <neonTableColumn>
-          <name>3d4b8959-4558-4398-876a-09b46706827d</name>
+          <name>7789c052-d472-4870-b7a8-5c02b20b104b</name>
           <entityField>TITLE</entityField>
         </neonTableColumn>
         <neonTableColumn>
-          <name>f7e7e4a7-5719-457c-ac65-a2cdd993d9fb</name>
+          <name>75564574-3f21-4589-93ad-e30a69b44f4a</name>
           <entityField>HEADLINE</entityField>
         </neonTableColumn>
         <neonTableColumn>
-          <name>af9f6db4-f53a-48d8-aaa4-1dc8a6fd211e</name>
+          <name>621460f6-5e1b-4baa-b874-18097b6ca1bf</name>
           <entityField>LETTERSALUTATION</entityField>
         </neonTableColumn>
         <neonTableColumn>
-          <name>071b540d-3d67-4b0b-b382-7c8b3a43e755</name>
+          <name>3165c331-0b77-46ec-8f55-44cdb86edb6e</name>
           <entityField>SEX</entityField>
         </neonTableColumn>
         <neonTableColumn>
-          <name>b642b2cc-3439-4813-bda7-bb4358247f68</name>
+          <name>b4061b67-bd43-40de-8538-7fc1ca54afef</name>
           <entityField>SORT</entityField>
         </neonTableColumn>
       </columns>
diff --git a/neonView/WorkflowDefinitionFilter_view/WorkflowDefinitionFilter_view.aod b/neonView/WorkflowDefinitionFilter_view/WorkflowDefinitionFilter_view.aod
index 20bba3477ed256945986f4fd72c6f3e034e01413..595adfca1ccb73785d2dd9a9f66da399de710608 100644
--- a/neonView/WorkflowDefinitionFilter_view/WorkflowDefinitionFilter_view.aod
+++ b/neonView/WorkflowDefinitionFilter_view/WorkflowDefinitionFilter_view.aod
@@ -4,9 +4,9 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
   <layout>
-    <boxLayout>
+    <groupLayout>
       <name>layout</name>
-    </boxLayout>
+    </groupLayout>
   </layout>
   <children>
     <tableViewTemplate>
@@ -35,5 +35,16 @@
         </neonTableColumn>
       </columns>
     </tableViewTemplate>
+    <tilesViewTemplate>
+      <name>Tiles</name>
+      <iconField>DIAGRAM</iconField>
+      <titleField>NAME</titleField>
+      <subtitleField>KEY</subtitleField>
+      <descriptionField>DESCRIPTION</descriptionField>
+      <infoTopField>VERSION_TITLE</infoTopField>
+      <favoriteActionGroup1>tableActions</favoriteActionGroup1>
+      <entityField>#ENTITY</entityField>
+      <isCreatable v="true" />
+    </tilesViewTemplate>
   </children>
 </neonView>
diff --git a/neonView/WorkflowSignalFilter_view/WorkflowSignalFilter_view.aod b/neonView/WorkflowSignalFilter_view/WorkflowSignalFilter_view.aod
index 4a897cc5cc42bad2de0fbee6f89d8ca7fedf8289..15874fe38d83022e49d356df3f2474b6061bf7a7 100644
--- a/neonView/WorkflowSignalFilter_view/WorkflowSignalFilter_view.aod
+++ b/neonView/WorkflowSignalFilter_view/WorkflowSignalFilter_view.aod
@@ -4,9 +4,9 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
   <layout>
-    <noneLayout>
+    <boxLayout>
       <name>layout</name>
-    </noneLayout>
+    </boxLayout>
   </layout>
   <children>
     <tableViewTemplate>
diff --git a/neonView/WorkflowStartConfigFilter_view/WorkflowStartConfigFilter_view.aod b/neonView/WorkflowStartConfigFilter_view/WorkflowStartConfigFilter_view.aod
index 4b53e42cfc3e3ad67b10f25653df09bf611a0fe7..cdac1faccf7f16acf27044fd57f434dea9502e3c 100644
--- a/neonView/WorkflowStartConfigFilter_view/WorkflowStartConfigFilter_view.aod
+++ b/neonView/WorkflowStartConfigFilter_view/WorkflowStartConfigFilter_view.aod
@@ -15,12 +15,12 @@
       <autoNewRow v="true" />
       <columns>
         <neonTableColumn>
-          <name>0784e90b-133d-4d2b-b499-ac731a690f64</name>
-          <entityField>OBJECT_TYPE</entityField>
+          <name>4935777f-8760-4759-a70a-0ad64c506418</name>
+          <entityField>#IMAGE</entityField>
         </neonTableColumn>
         <neonTableColumn>
-          <name>c8b4032c-ce59-45fe-ab03-e393f8cdc050</name>
-          <entityField>TRIGGER_EVENT</entityField>
+          <name>0784e90b-133d-4d2b-b499-ac731a690f64</name>
+          <entityField>OBJECT_TYPE</entityField>
         </neonTableColumn>
       </columns>
     </tableViewTemplate>
diff --git a/process/Appointment_lib/process.js b/process/Appointment_lib/process.js
index c40c2d134dfd8ea6d7cc2d5b24d964bf80cbefc2..db2af54d0851e8c93d6d63881f8b8310b336feac 100644
--- a/process/Appointment_lib/process.js
+++ b/process/Appointment_lib/process.js
@@ -151,7 +151,6 @@ AppointmentUtils.setAppointmentLinkComponentState = function(pSysRecordstate, pA
     else if(pSysRecordstate == neon.OPERATINGSTATE_EDIT)
         entry = calendars.getEntry(pAppointmentIdFieldValue, null, null);
     
-    
 
     if(entry)
     {   
diff --git a/process/Attribute_lib/process.js b/process/Attribute_lib/process.js
index 2bd5cfbb0b9d4d0c229e4e4e7361ab4e1b9c00ee..40eed67b874f583649eda1b1369df0ea870e9921 100644
--- a/process/Attribute_lib/process.js
+++ b/process/Attribute_lib/process.js
@@ -1686,4 +1686,102 @@ AttributeRelationQuery.prototype.insertAttribute = function (pValue, pOmitValida
     
     new SqlBuilder().insertFields(attrData, "AB_ATTRIBUTERELATION", "AB_ATTRIBUTERELATIONID");
     return true;
+}
+
+/**
+ * deletes all attribute relations with the given rowId and objectType
+ * 
+ * @return {Number} count of deleted rows
+ */
+AttributeRelationQuery.prototype.deleteAllAttributes = function ()
+{
+    if (!this._rowId)
+        throw new Error("AttributeRelationQuery: Row id is required for delete");
+    
+    return newWhere("AB_ATTRIBUTERELATION.OBJECT_ROWID", this._rowId)
+        .andIfSet("AB_ATTRIBUTERELATION.OBJECT_TYPE", this._objectType)
+        .deleteData();
+}
+
+/**
+ * Object representing one attribute relation in the database. Don't use this constructor in you own code!
+ * Instances of this should only be created by functions in this library.
+ * 
+ * @param {String} pAttributeRelationId attribute relation id
+ * @param {String} pAttributeId attribute id
+ * @param {String} pValue value of the attribute
+ * @param {String} pAttributeName name of the attribute
+ * @param {String} pAttributeType type of the attribute
+ * @param {String} pObjectRowId rowId of the linked object
+ * @param {String} pObjectType context of the linked object
+ */
+function AttributeRelation (pAttributeRelationId, pAttributeId, pValue, pAttributeName, pAttributeType, pObjectRowId, pObjectType)
+{
+    if (!pAttributeRelationId)
+        throw new Error("AttributeRelation: pAttributeRelationId must be provided");
+        
+    this.attributeRelationId = pAttributeRelationId;
+    this.attributeId = pAttributeId;
+    this.value = pValue;
+    this.attributeName = pAttributeName;
+    this.attributeType = pAttributeType;
+    this.objectRowId = pObjectRowId;
+    this.objectType = pObjectType;
+    this.displayValue = undefined;
+    this.fullAttributeName = undefined;
+}
+
+/**
+ * updates the value of the attribute in the database
+ * 
+ * @param {String} pValue the new value of the attribute relation
+ * @return {Boolean} currently the function always returns true (if some kind of validation is implemented in the future, 
+ *      it will return false if the validation fails)
+ */
+AttributeRelation.prototype.updateAttribute = function (pValue)
+{
+    if (pValue == undefined || pValue == "")
+        throw new Error("AttributeRelation: no value provided for update");
+        
+    var attrData = {
+        "DATE_EDIT" : vars.get("$sys.date"),
+        "USER_EDIT" : vars.get("$sys.user")
+    };
+
+    var valueField = AttributeTypeUtil.getDatabaseField(this.attributeType);
+    if (valueField)
+        attrData[valueField] = pValue;
+
+    newWhere("AB_ATTRIBUTERELATION.AB_ATTRIBUTERELATIONID", this.attributeRelationId)
+        .updateFields(attrData);
+    return true;
+}
+
+/**
+ * deletes the attribute relation from the database
+ * 
+ * @param {Boolean} [pOmitValidation=false] if set to true, the function won't check if the min count prohibits the deletion
+ * @retun {Boolean} true if it was deleted and false if the min count doesn't allow the deletion
+ */
+AttributeRelation.prototype.deleteAttribute = function (pOmitValidation)
+{
+    if (!pOmitValidation)
+    {
+        var minCount = newSelect("MIN_COUNT")
+            .from("AB_ATTRIBUTEUSAGE")
+            .where("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", this.attributeId)
+            .and("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", this.objectType)
+            .cell();
+
+        if (minCount && minCount != 0)
+        {
+            let timesUsed = new AttributeRelationQuery(this.objectRowId, this.attributeId, this.objectType).getAttributeCount();
+            if (timesUsed <= minCount)
+                return false;
+        }
+    }
+    
+    newWhere("AB_ATTRIBUTERELATION.AB_ATTRIBUTERELATIONID", this.attributeRelationId)
+        .deleteData();
+    return true;
 }
\ No newline at end of file
diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js
index 3b2fa97df0c4634a148ea70a385874c03f24d145..81a3986c28047db9fa60e6ba408283818ee67146 100644
--- a/process/Bulkmail_lib/process.js
+++ b/process/Bulkmail_lib/process.js
@@ -37,14 +37,16 @@ BulkMailUtils.sendBulkMailOnServer = function (pBulkMailId, pTestRecipients, pUs
 {
     if (pUser === undefined)
         pUser = EmployeeUtils.getCurrentUserId();
-    process.executeAsync("sendBulkMail_serverProcess", 
-        {
+    
+    var processConfig = process.createStartAsyncConfig()
+        .setName("sendBulkMail_serverProcess")
+        .setLocalVariables({
             bulkMailId : pBulkMailId,
             testRecipients : JSON.stringify(pTestRecipients),
             user : pUser || ""
-        }
-        , false, pUser, process.THREADPRIORITY_NORM, process.TIMERTYPE_SERVER
-    );
+        })
+        .setUser(pUser)
+    process.startAsync(processConfig);
 }
 
 /**
@@ -444,12 +446,15 @@ SerialLetterUtils.openAddRecipientView = function (pContactIds)
 SerialLetterUtils.buildSerialLetterOnServer = function (pSerialLetterId, pRecipientIds)
 {
     var user = EmployeeUtils.getCurrentUserId();
-    process.executeAsync("buildSerialLetter_serverProcess", {
-        "serialLetterId" : pSerialLetterId,
-        "recipientIds" : JSON.stringify(pRecipientIds),
-        "user" : user
-       }
-       , false, vars.get("$sys.user"), process.THREADPRIORITY_NORM, process.TIMERTYPE_SERVER);
+    var processConfig = process.createStartAsyncConfig()
+        .setName("buildSerialLetter_serverProcess")
+        .setLocalVariables({
+            "serialLetterId" : pSerialLetterId,
+            "recipientIds" : JSON.stringify(pRecipientIds),
+            "user" : user
+        })
+        .setUser(vars.get("$sys.user"));
+    process.startAsync(processConfig);
 }
 
 /**
diff --git a/process/Calendar_lib/process.js b/process/Calendar_lib/process.js
index 7820ef4c7b5061a2dad85569762db68254816007..7cc5df86754571039fbac5b7806a5c2b51f3e7cf 100644
--- a/process/Calendar_lib/process.js
+++ b/process/Calendar_lib/process.js
@@ -117,52 +117,6 @@ CalendarUtil.getEffectiveCalendarIdFromUser = function(pUser)
         return "";
 }
 
-/*
- * Creates an new task (with link).
- *
- * @param {String} pSummary (optional)          <p>
- *                                              The summary.
- * @param {String} pDescription (optional)      <p>
- *                                              The description.
- * @param {Boolean} pWithLink (optional)        <p>
- *                                              True sets an linking to $image.frametable.<br>
- * @param {String[][]} pWithLink (optional)     <p>
- *                                              Description:<br>
- *                                              <ul>
- *                                              <li>pWithLink[0]: Name of the record</li>
- *                                              <li>pWithLink[1]: Id of the shown record</li>
- *                                              <li>pWithLink[2]: linking title</li>
- *                                              </ul>
- * @param {String} pUser (optional)             <p>
- *                                              The user (login).
- * @param {[]} pAffectedUsers (optional)        <p>
- *                                              The afftected users (login).
- * @param {date} pStart (optional)              <p>
- *                                              Start of the appointment.<br>
- * @param {integer} pGroupType (optional)       <p>
- *                                              calendars.GROUP_SINGLE , calendars.GROUP_MULTI
- * @param {date} pDuration (optional)           <p>
- *                                              Duration of the appointment.<br>
- * @param {integer} pCategory (optional)        <p>
- *                                              calendars.CATEGORIES , encoded(String) (e.g.: text.encodeMS(["Service"])).<br>
- * @param {String} pStatus (optional)           <p>
- *                                              Status of the task (calendars.STATUS_TENTATIVE, calendars.STATUS_CONFIRMED, <br>
- *                                              calendars.STATUS_CANCELLED).<br>
- * @param {String} pPriority (optional)         <p>
- *                                              Priority of the task.<br>
- * @param {String} pReminder (optional)         <p>
- *                                              Reminder for the task.<br>
- *
- * @return {void}
- */
-
-CalendarUtil.newSilentTodo = function(pSummary, pDescription, pWithLink, pUser, pAffectedUsers, pStart, pDuration, pGroupType, pCategory, pStatus, pPriority, pReminder)
-{
-    if ( pGroupType == undefined ) pGroupType = calendars.GROUP_SINGLE;
-    var todo = CalendarUtil.createEntry( calendars.VTODO, pSummary, pDescription, pWithLink, pUser, pAffectedUsers, pStart, pDuration, pCategory, pStatus, pPriority, pReminder );
-    
-    return calendars.insert([todo],calendars.GROUP_SINGLE);
-}
 
 /*
  * Creates and opens an new appointment object (with link).
diff --git a/process/Campaign_lib/process.js b/process/Campaign_lib/process.js
index c159f8c6c2187ae0d75b2f02bd5a5d6dd73e6e99..76a6c808995051fdfa248ab0177b7b3e8fb4a7bd 100644
--- a/process/Campaign_lib/process.js
+++ b/process/Campaign_lib/process.js
@@ -1,3 +1,4 @@
+import("system.util");
 import("system.translate");
 import("system.vars");
 import("system.db");
@@ -160,8 +161,6 @@ CampaignUtils.getCampaignStatusByCampaignId = function(pCampaignId)
  *                                              The corresponding campaign id.<br>
  * @param {String} pCampaignStepId              <p>
  *                                              The current campaign step id.<br>
- * @param {String} pContactId                   <p>
- *                                              The contact id,<br>
  * @param {String} pCampaignParticipantId       <p>
  *                                              The contact id of the campaign participant.<br>
  * @param {String} pPreviousCampaignStepId      <p>
@@ -169,11 +168,11 @@ CampaignUtils.getCampaignStatusByCampaignId = function(pCampaignId)
  * @return {Boolean}                            <p>
  *                                              Returns true in case the entry was successfully made.<br>                                                                                                                                                                                                   
  */
-CampaignUtils.createLogEntry = function(pCampaignId, pCampaignStepId, pContactId, pCampaignParticipantId, pPreviousCampaignStepId)
+CampaignUtils.createLogEntry = function(pCampaignId, pCampaignStepId, pCampaignParticipantId, pPreviousCampaignStepId)
 {
     let colsCampaignParticipantLog = CampaignUtils.getParticipantLogInsertColumnNames();
     
-    let valsCampaignParticipantLog = new Array(pCampaignId, pCampaignStepId, pContactId, pCampaignParticipantId, vars.get("$sys.user"), vars.get("$sys.date"), pPreviousCampaignStepId);
+    let valsCampaignParticipantLog = new Array(util.getNewUUID(), pCampaignId, pCampaignStepId, pCampaignParticipantId, vars.get("$sys.user"), vars.get("$sys.date"), pPreviousCampaignStepId);
     
     let rows = db.insertData("CAMPAIGNPARTICIPANTLOG", colsCampaignParticipantLog, null, valsCampaignParticipantLog);
     return (rows == 1);
@@ -187,7 +186,7 @@ CampaignUtils.createLogEntry = function(pCampaignId, pCampaignStepId, pContactId
  */
 CampaignUtils.getParticipantLogInsertColumnNames = function()
 {
-    return ["CAMPAIGNPARTICIPANT_ID", "CAMPAIGN_ID", "CAMPAIGNSTEP_ID", "CAMPAIGNPARTICIPANTLOGID", "USER_NEW", "DATE_NEW", "PREVIOUS_CAMPAIGNSTEP_ID"];
+    return ["CAMPAIGNPARTICIPANTLOGID", "CAMPAIGN_ID", "CAMPAIGNSTEP_ID", "CAMPAIGNPARTICIPANT_ID", "USER_NEW", "DATE_NEW", "PREVIOUS_CAMPAIGNSTEP_ID"];
 }
 
 /**
@@ -562,6 +561,9 @@ CampaignUtils.GetContactIdsNotInCampaignByCondition = function(pCampaignId, pCon
  * @param {String} pCondition                       <p>
  *                                                  The condition which shall be used, to<br>
  *                                                  limit the search result.<br>
+ * @param {Boolean} [pRightJoinContacts=false]      <p>
+ *                                                  Currently not used.<br>
+ *                                                  <p>
  * @return {String[]}                               <p>
  *                                                  The contact ids which are in the given<br>
  *                                                  campaign.<br>                                                                                                  
diff --git a/process/Contact_lib/process.js b/process/Contact_lib/process.js
index 375799008796f0742e47f2983e90dae6bf67d518..6db83d4d02c819c68bfc22f29827ae9f2b0a670c 100644
--- a/process/Contact_lib/process.js
+++ b/process/Contact_lib/process.js
@@ -298,14 +298,10 @@ ContactUtils.getPersOrgIds = function(pContactId)
  */
 ContactUtils.getPersOrgIds = function(pContactId)
 {
-    if (pContactId) {
-        return db.array(db.ROW, 
-            SqlCondition.begin()
-            .andPrepare("CONTACT.CONTACTID", pContactId)
-            .buildSql("select CONTACTID, PERSON_ID, ORGANISATION_ID from CONTACT", "1=0"));
-    }
-    
-    return [];
+    return newSelect("CONTACTID, PERSON_ID, ORGANISATION_ID")
+        .from("CONTACT")
+        .whereIfSet("CONTACT.CONTACTID", pContactId)
+        .arrayRow(true);
 }
 
 /**
@@ -317,17 +313,11 @@ ContactUtils.getPersOrgIds = function(pContactId)
  */
 ContactUtils.getOrganisationContactId = function(pAnyContactId)
 {
-    if (!pAnyContactId)
-        return "";
-    
-    var idSql = SqlCondition.begin()
-            .andPrepare("anyContact.CONTACTID", pAnyContactId, null, SqlUtils.getSingleColumnType("CONTACT", "CONTACTID"))
-            .and("CONTACT.PERSON_ID is null")
-            .buildSql("select CONTACT.CONTACTID "
-                    + " from CONTACT"
-                    + " join CONTACT anyContact on anyContact.ORGANISATION_ID = CONTACT.ORGANISATION_ID");
-    var id = db.cell(idSql);
-    return id;
+    return newSelect("CONTACT.CONTACTID")
+        .from("CONTACT")
+        .join("CONTACT", "anyContact.ORGANISATION_ID = CONTACT.ORGANISATION_ID and CONTACT.PERSON_ID is null", "anyContact")
+        .whereIfSet(["CONTACT", "CONTACTID", "anyContact"], pAnyContactId)
+        .cell(true);
 }
 
 /**
diff --git a/process/Context_lib/process.js b/process/Context_lib/process.js
index c34bf0f9149c424e179bb383e2e77cbf0cefa2f6..83ad817a1b9487b240e512d26d127e7f2b6a74e8 100644
--- a/process/Context_lib/process.js
+++ b/process/Context_lib/process.js
@@ -145,6 +145,10 @@ ContextUtils.getContextConsumer = function(pContextId)
             return "PrivatePersons";
         case ContextUtils.getContextName("Leadimport"):
             return "Leadimport";
+        case ContextUtils.getContextName("Task"):
+            return "Tasks";
+        case ContextUtils.getContextName("Activity"):
+            return "Activities";
         default:
             throw new Error(translate.withArguments("No consumer found for context '%0'", [pContextId]));
     }
@@ -161,24 +165,18 @@ ContextUtils.getContextConsumer = function(pContextId)
 ContextUtils.loadContentTitle = function(pEntity, pUid, pProvider)
 {    
     if (!pUid)
-    {
         return "";
-    }
 
     var conf = entities.createConfigForLoadingRows()
-                        .entity(pEntity)
-                        .uid(pUid)
-                        .fields(["#CONTENTTITLE"]);
+        .entity(pEntity)
+        .uid(pUid)
+        .fields(["#CONTENTTITLE"]);
 
     if (pProvider)
         conf.provider(pProvider);
-
-    if (entities.getRowCount(conf) > 0)
-    {
-        return entities.getRow(conf)["#CONTENTTITLE"];
-    }
-     
-    return "";
+    
+    var rows = entities.getRows(conf);
+    return rows.length === 1 ? rows[0]["#CONTENTTITLE"] : "";
 }
 
 /**
@@ -595,6 +593,20 @@ ContextUtils.getSelectMap  = function()
                             $KeywordRegistry.taskStatus$customerChecks(),
                         ])
                         .setCreationDateField("TASK.START_DATE")
+            ,"SupportTicket": ContextSelector.create("TICKET", "TICKETID", "TASK.SUBJECT")
+                        .setJoinExpression("left join TASK on TASK.TASKID = TICKET.TASK_ID left join TASKLINK on TASKLINK.TASK_ID = TASK.TASKID")
+                        .setCondition(newWhere("TICKET.TICKETTYPE", $KeywordRegistry.ticketType$supportTicket()))
+                        .setContactIdField("TASKLINK.OBJECT_ROWID")
+                        .setStateField("TASK.STATUS")
+                        .setActiveStates([
+                            $KeywordRegistry.taskStatus$new(),
+                            $KeywordRegistry.taskStatus$unassigned(),
+                            $KeywordRegistry.taskStatus$assigned(),
+                            $KeywordRegistry.taskStatus$inProgress(),
+                            $KeywordRegistry.taskStatus$waiting(),
+                            $KeywordRegistry.taskStatus$customerChecks(),
+                        ])
+                        .setCreationDateField("TASK.START_DATE")
             ,"BulkMail" : ContextSelector.create("BULKMAIL", "BULKMAILID", "NAME")
             ,"SerialLetter" : ContextSelector.create("SERIALLETTER", "SERIALLETTERID", "TITLE")
             ,"Leadimport": ContextSelector.create("LEADIMPORT", "LEADIMPORTID")
diff --git a/process/DuplicateScanner_lib/process.js b/process/DuplicateScanner_lib/process.js
index f9aee147be23831b4334ba5fda0efe05bb8957ed..3576d4dcf361c9a5a42faf46d65d33f7d2157a89 100644
--- a/process/DuplicateScanner_lib/process.js
+++ b/process/DuplicateScanner_lib/process.js
@@ -642,20 +642,29 @@ DuplicateScannerUtils.MergePerson = function(pSourceContactId, pTargetContactId)
     var deleteStatements = [];
 
     var sourcePersonId = newSelect("PERSON_ID")
-                            .from("CONTACT")
-                            .where("CONTACT.CONTACTID", pSourceContactId)
-                            .cell();
+        .from("CONTACT")
+        .where("CONTACT.CONTACTID", pSourceContactId)
+        .cell();
+    var targetPersonId = newSelect("PERSON_ID")
+        .from("CONTACT")
+        .where("CONTACT.CONTACTID", pTargetContactId)
+        .cell();
+        
     var tableInfosCurrentAlias = _DuplicateScannerUtils._getMergeUpdateTableInfosCurrentAlias();
     var tableInfosSystemAlias = _DuplicateScannerUtils._getMergeUpdateTableInfosSystemAlias();
 
-    updateStatementsCurrentAlias = updateStatementsCurrentAlias.concat(_DuplicateScannerUtils._buildUpdateResetStandardCommunications(pSourceContactId));
+    updateStatementsCurrentAlias.push(_DuplicateScannerUtils._buildUpdateResetStandardCommunications(pSourceContactId));
     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, SqlUtils.getSystemAlias()));
 
     deleteStatements = deleteStatements.concat(_DuplicateScannerUtils._buildDeleteRemoveObsoleteParticipantsRecordsQuery("CAMPAIGNPARTICIPANT", "CONTACT_ID", "CAMPAIGN_ID", pSourceContactId, pTargetContactId));
-    deleteStatements = deleteStatements.concat(_DuplicateScannerUtils._buildDeletePersonAndContactQuery(sourcePersonId, pSourceContactId));
+    
+    if (sourcePersonId != targetPersonId)
+        deleteStatements.push(["PERSON", newWhere("PERSON.PERSONID", sourcePersonId).build()]);
+    
+    deleteStatements.push(["CONTACT", newWhere("CONTACT.CONTACTID", pSourceContactId).build()]);
     deleteStatements = deleteStatements.concat(_DuplicateScannerUtils._buildDeleteCachedUnrelatedDuplicateQuery(pSourceContactId));
 
     var affectedRowsCurrentAlias = db.updates(updateStatementsCurrentAlias);
@@ -664,7 +673,7 @@ DuplicateScannerUtils.MergePerson = function(pSourceContactId, pTargetContactId)
 
     DuplicateScannerUtils.DeleteCachedDuplicate(pSourceContactId);
 
-    return (affectedRowsCurrentAlias > 0 && deletedRows >= 2);
+    return (affectedRowsCurrentAlias > 0 && deletedRows > 0);
 }
 
 DuplicateScannerUtils.CreateMergeSuccessActivity = function(pSourceContactId, pTargetContactId, pCurrentContactId, pContext)
@@ -821,14 +830,6 @@ DuplicateScannerUtils.GetUnrelatedRelationsForDuplicate = function(pDuplicateId)
 
 function _DuplicateScannerUtils() {}
 
-var INDEX_FILTER_CONDITION = 0;
-var INDEX_COUNT_CHARS_TO_USE = 1;
-var INDEX_MAX_RESULTS_THRESHOLD = 2;
-
-var INDEX_TABLE_NAME = 0;
-var INDEX_COLUMN_NAME = 1;
-var INDEX_CONDITION = 2;
-
 _DuplicateScannerUtils._loadEntityFieldsFromFieldConfigs = function(pEntityFieldConfigs)
 {
     let fieldNames = [];
@@ -843,7 +844,7 @@ _DuplicateScannerUtils._loadEntityFieldsFromFieldConfigs = function(pEntityField
 
 _DuplicateScannerUtils._buildUpdateResetStandardCommunications = function(pSourceContactId)
 {
-    return [["COMMUNICATION", ["ISSTANDARD"], null, ["0"], newWhere("COMMUNICATION.CONTACT_ID", pSourceContactId).build()]];
+    return newWhere("COMMUNICATION.CONTACT_ID", pSourceContactId).buildUpdateStatement({"ISSTANDARD" : "0"});
 }
 
 /*
@@ -938,7 +939,7 @@ _DuplicateScannerUtils._isUseExternalWebservice = function(pFilterName, pTargetE
                                 .where("DUPLICATESCANNER.FILTER_NAME", pFilterName)
                                 .and("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity)
                                 .cell();
-    return (isUseWebservice == 0) ? false : true;
+    return isUseWebservice != 0;
 }
 
 /*
@@ -1081,39 +1082,23 @@ _DuplicateScannerUtils._buildDeleteRemoveObsoleteParticipantsRecordsQuery = func
     let deleteCondition = newWhere([pTableName, pAssignableIdColumn], selectAssignableIdsOfTargetContactQuery, SqlBuilder.IN())
                                 .and([pTableName, pAssignableIdColumn], pSourceContactId)
 
-    let recordsToDelete = [];
-    recordsToDelete.push([pTableName, deleteCondition.build()]);
-    return recordsToDelete;
-}
-
-
-/*
- * Creates Queries to delete from the PERSON and CONTACT table.
- *
- * @returns {String[]} Queries to delete
- */
-_DuplicateScannerUtils._buildDeletePersonAndContactQuery = function(pSourcePersonId, pSourceContactId)
-{
-    let recordsToDelete = []
-    recordsToDelete.push(["PERSON", newWhere("PERSON.PERSONID", pSourcePersonId).build()]);
-    recordsToDelete.push(["CONTACT", newWhere("CONTACT.CONTACTID", pSourceContactId).build()]);
-    return recordsToDelete;
+    return [[pTableName, deleteCondition.build()]];
 }
 
 _DuplicateScannerUtils._buildDeleteOrganisationAndContactQuery = function(pSourceOrganisationId, pSourceContactId)
 {
-    let recordsToDelete = []
-    recordsToDelete.push(["ORGANISATION", newWhere("ORGANISATION.ORGANISATIONID", pSourceOrganisationId).build()]);
-    recordsToDelete.push(["CONTACT", newWhere("CONTACT.CONTACTID", pSourceContactId).build()]);
-    return recordsToDelete;
+    return [
+        newWhere("ORGANISATION.ORGANISATIONID", pSourceOrganisationId).buildDeleteStatement(),
+        newWhere("CONTACT.CONTACTID", pSourceContactId).buildDeleteStatement()
+    ];
 }
 
 _DuplicateScannerUtils._buildDeleteCachedUnrelatedDuplicateQuery = function(pSourceContactId)
 {
-    let recordsToDelete = []
-    recordsToDelete.push(["UNRELATEDDUPLICATES", newWhere("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pSourceContactId).build()]);
-    recordsToDelete.push(["UNRELATEDDUPLICATES", newWhere("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pSourceContactId).build()]);
-    return recordsToDelete;
+    return [
+        newWhere("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pSourceContactId).buildDeleteStatement(),
+        newWhere("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pSourceContactId).buildDeleteStatement()
+    ];
 }
 
 /*
@@ -1129,29 +1114,14 @@ _DuplicateScannerUtils._getIgnoreSourceRecordPattern = function(pRecordIdValueTo
 
 _DuplicateScannerUtils._buildUpdateContactIdStatements = function(pTableInfos, pSourceContactId, pTargetContactId, pAlias)
 {
-    let statements = [];
-
-    for (let i = 0; i < pTableInfos.length; i++)
+    return pTableInfos.map(function ([tableName, columnName, additionalCondition])
     {
-        let tableInfo = pTableInfos[i];
-        let updateStatement = _DuplicateScannerUtils._buildStatement(tableInfo, pSourceContactId, pTargetContactId, pAlias);
-        statements.push(updateStatement);
-    }
-    return statements;
-}
-
-_DuplicateScannerUtils._buildStatement = function(pTableinfos, pSourceContactId, pTargetContactId, pAlias)
-{
-    let tableName = pTableinfos[INDEX_TABLE_NAME];
-    let columnName = pTableinfos[INDEX_COLUMN_NAME];
-    let additionalCondition = pTableinfos[INDEX_CONDITION];
-
-    let condition = newWhere([tableName, columnName], pSourceContactId, undefined, undefined, pAlias);
-
-    if(additionalCondition != "")
-        condition.and(additionalCondition);
-
-    return [tableName, [columnName], null, [pTargetContactId], condition.build()];
+        var updateValues = {};
+        updateValues[columnName] = pTargetContactId;
+        return newWhere([tableName, columnName], pSourceContactId, undefined, undefined, pAlias)
+            .andIfSet(additionalCondition)
+            .buildUpdateStatement(updateValues, tableName)
+    });
 }
 
 /*
@@ -1161,42 +1131,40 @@ _DuplicateScannerUtils._buildStatement = function(pTableinfos, pSourceContactId,
  */
 _DuplicateScannerUtils._getMergeUpdateTableInfosCurrentAlias = function()
 {
-    var tableInfos = new Array();
-    tableInfos.push(["AB_APPOINTMENTLINK", "OBJECT_ROWID", ""]);
-    tableInfos.push(["AB_CTILOG", "CONTACT_ID", ""]);
-    tableInfos.push(["AB_OBJECTRELATION", "AB_OBJECTRELATIONID", ""]);
-    tableInfos.push(["AB_OBJECTRELATION", "OBJECT1_ROWID", ""]);
-    tableInfos.push(["AB_OBJECTRELATION", "OBJECT2_ROWID", ""]);
-    tableInfos.push(["AB_LOGHISTORY", "TABLENAMEID", ""]);
-    tableInfos.push(["ADDRESS", "CONTACT_ID", ""]);
-    tableInfos.push(["BULKMAILRECIPIENT", "CONTACT_ID", ""]);
-    tableInfos.push(["BULKMAIL", "TESTING_CONTACT_ID", ""]);
-    tableInfos.push(["CAMPAIGN", "EMPLOYEE_CONTACT_ID", ""]);
-    tableInfos.push(["CAMPAIGNSTEP", "EMPLOYEE_CONTACT_ID", ""]);
-    tableInfos.push(["COMMRESTRICTION", "CONTACT_ID", ""]);
-    tableInfos.push(["COMMRESTRICTION", "EMPLOYEE_INVOLVED", ""]);
-    tableInfos.push(["COMMUNICATION", "CONTACT_ID", ""]);
-    tableInfos.push(["COMPETITION", "CONTACT_ID", ""]);
-    tableInfos.push(["CONTRACT", "CONTACT_ID", ""]);
-    tableInfos.push(["LETTERRECIPIENT", "CONTACT_ID", ""]);
-    tableInfos.push(["OBJECTMEMBER", "CONTACT_ID", ""]);
-    tableInfos.push(["OFFER", "CONTACT_ID", ""]);
-    tableInfos.push(["PRODUCT", "CONTACT_ID", ""]);
-    tableInfos.push(["PRODUCTPRICE", "CONTACT_ID", ""]);
-    tableInfos.push(["SALESORDER", "CONTACT_ID", ""]);
-    tableInfos.push(["SALESPROJECT", "CONTACT_ID", ""]);
-    tableInfos.push(["TASK", "REQUESTOR_CONTACT_ID", ""]);
-    tableInfos.push(["TASK", "EDITOR_CONTACT_ID", ""]);
-    tableInfos.push(["TASKLINK", "OBJECT_ROWID", ""]);
-    tableInfos.push(["ACTIVITY", "RESPONSIBLE", ""]);
-    tableInfos.push(["DSGVO", "CONTACT_ID", ""]);
-    tableInfos.push(["DSGVOINFO", "CONTACT_ID", ""]);
-    tableInfos.push(["T\n\
-IMETRACKING", "CONTACT_ID", ""]);
-    tableInfos.push(["ACTIVITYLINK", "OBJECT_ROWID", ""]);
-    tableInfos.push(["AB_ATTRIBUTERELATION", "OBJECT_ROWID", ""]);
-
-    return tableInfos;
+    return [
+        ["AB_APPOINTMENTLINK", "OBJECT_ROWID", ""],
+        ["AB_CTILOG", "CONTACT_ID", ""],
+        ["AB_OBJECTRELATION", "AB_OBJECTRELATIONID", ""],
+        ["AB_OBJECTRELATION", "OBJECT1_ROWID", ""],
+        ["AB_OBJECTRELATION", "OBJECT2_ROWID", ""],
+        ["AB_LOGHISTORY", "TABLENAMEID", ""],
+        ["ADDRESS", "CONTACT_ID", ""],
+        ["BULKMAILRECIPIENT", "CONTACT_ID", ""],
+        ["BULKMAIL", "TESTING_CONTACT_ID", ""],
+        ["CAMPAIGN", "EMPLOYEE_CONTACT_ID", ""],
+        ["CAMPAIGNSTEP", "EMPLOYEE_CONTACT_ID", ""],
+        ["COMMRESTRICTION", "CONTACT_ID", ""],
+        ["COMMRESTRICTION", "EMPLOYEE_INVOLVED", ""],
+        ["COMMUNICATION", "CONTACT_ID", ""],
+        ["COMPETITION", "CONTACT_ID", ""],
+        ["CONTRACT", "CONTACT_ID", ""],
+        ["LETTERRECIPIENT", "CONTACT_ID", ""],
+        ["OBJECTMEMBER", "CONTACT_ID", ""],
+        ["OFFER", "CONTACT_ID", ""],
+        ["PRODUCT", "CONTACT_ID", ""],
+        ["PRODUCTPRICE", "CONTACT_ID", ""],
+        ["SALESORDER", "CONTACT_ID", ""],
+        ["SALESPROJECT", "CONTACT_ID", ""],
+        ["TASK", "REQUESTOR_CONTACT_ID", ""],
+        ["TASK", "EDITOR_CONTACT_ID", ""],
+        ["TASKLINK", "OBJECT_ROWID", ""],
+        ["ACTIVITY", "RESPONSIBLE", ""],
+        ["DSGVO", "CONTACT_ID", ""],
+        ["DSGVOINFO", "CONTACT_ID", ""],
+        ["TIMETRACKING", "CONTACT_ID", ""],
+        ["ACTIVITYLINK", "OBJECT_ROWID", ""],
+        ["AB_ATTRIBUTERELATION", "OBJECT_ROWID", ""]
+    ];
 }
 
 /*
@@ -1206,10 +1174,10 @@ IMETRACKING", "CONTACT_ID", ""]);
  */
 _DuplicateScannerUtils._getMergeUpdateTableInfosSystemAlias = function()
 {
-    var tableInfos = new Array();
-    tableInfos.push(["ASYS_CALENDARLINK", "DBID", ""]);
-    tableInfos.push(["ASYS_BINARIES", "ROW_ID", "TABLENAME = 'CONTACT'"]);
-    return tableInfos;
+    return [
+        ["ASYS_CALENDARLINK", "DBID", ""],
+        ["ASYS_BINARIES", "ROW_ID", "TABLENAME = 'CONTACT'"]
+    ];
 }
 
 /*
diff --git a/process/Email_lib/process.js b/process/Email_lib/process.js
index 8cb3bf65267d94c6979b25f3aec55bef66dacf56..2393fee4b38cea9c67566988bf561a3c8a119949 100644
--- a/process/Email_lib/process.js
+++ b/process/Email_lib/process.js
@@ -26,9 +26,11 @@ function EmailWritingUtils () {}
  * @param {String} [pRecipientContactId] contactId of the recipient, required to fill placeholders
  * @param {String} [pBindata] base64 binary data
  * @param {Array} [pAttachments] attachments in a array (base64 encoded).
+ * @param {String} pSubject an optional subject.
+ * @param {String} [pEmailFilename] filename of the email.
  * @return {Array} the eml document as array with [filename, base64]
  */
-EmailWritingUtils.openMailTemplate = function (pToRecipients, pSenderContactId, pTemplateId, pRecipientContactId, pBindata, pAttachments)
+EmailWritingUtils.openMailTemplate = function (pToRecipients, pSenderContactId, pTemplateId, pRecipientContactId, pBindata, pAttachments, pSubject, pEmailFilename)
 {
     if (pToRecipients && typeof(pToRecipients) == "string")
         pToRecipients = [pToRecipients];
@@ -59,7 +61,10 @@ EmailWritingUtils.openMailTemplate = function (pToRecipients, pSenderContactId,
         }       
     }
     
-    return email.downloadEML();
+    if (pSubject)
+        email.subject = pSubject;
+    
+    return email.downloadEML(pEmailFilename);
 }
 
 /**
@@ -70,14 +75,16 @@ EmailWritingUtils.openMailTemplate = function (pToRecipients, pSenderContactId,
  * @param {Array} pAttachmentArray array with attachments.
  * @param {String} pNotificationMsg message which will be shown after the operation is done.
  * @param {String} pComingFrom source from where you started (e.g. "Person", "Organisation" )
+ * @param {String} pEmailFilename optional file name of the email.
  */
-EmailWritingUtils.openNewMail = function (pToContactId, pToEmailAddress, pComingFrom, pAttachmentArray, pNotificationMsg)
+EmailWritingUtils.openNewMail = function (pToContactId, pToEmailAddress, pComingFrom, pAttachmentArray, pNotificationMsg, pEmailFilename)
 {
     var params = {
         "ContactId_param" : pToContactId,
         "Attachments_param" : JSON.stringify(pAttachmentArray),
         "ComingFrom_param" : pComingFrom,
-        "NotificationMsg_param" : pNotificationMsg 
+        "NotificationMsg_param" : pNotificationMsg,
+        "EmailFilename" : pEmailFilename
     };
     
     if (pToEmailAddress)
@@ -99,14 +106,15 @@ EmailWritingUtils.getMailbridgeAddress = function ()
  * @param {String} pComingFrom source from where you started (e.g. "Person", "Organisation")
  * @param {Array} pReportArray array with reports.
  * @param {String} pNotificationMsg message which will be shown after the operation is done.
+ * @param {String} pEmailFilename optional file name of the email.
  * Report have to be a object with these attrs: content (base64 encoded report), contentType (mimeType of the report), filename (complete filename with filending)
  */
-EmailWritingUtils.sendReportAsMail = function (pRecipient, pReportArray, pComingFrom, pNotificationMsg)
+EmailWritingUtils.sendReportAsMail = function (pRecipient, pReportArray, pComingFrom, pNotificationMsg, pEmailFilename)
 {
     var pRecpientEmail = newSelect("COMMUNICATION.ADDR").from("COMMUNICATION")
     .where("COMMUNICATION.CONTACT_ID", pRecipient).and("COMMUNICATION.MEDIUM_ID", "COMMEMAIL").cell();
             
-    EmailWritingUtils.openNewMail(pRecipient, pRecpientEmail, pComingFrom, pReportArray, pNotificationMsg);
+    EmailWritingUtils.openNewMail(pRecipient, pRecpientEmail, pComingFrom, pReportArray, pNotificationMsg, pEmailFilename);
 }
 
 /**
@@ -277,9 +285,8 @@ Email.prototype._newMailObject = function()
             mail.addBase64Attachment(mailId, pAttachment.content, 
                 DocumentTemplateUtils.getMimeType(pAttachment.templateId), pAttachment.filename, true, null);
         }
-        
-        mail.addBase64Attachment(mailId, pAttachment.content, pAttachment.contentType, pAttachment.filename,
-            true, null, null)
+        else
+            mail.addBase64Attachment(mailId, pAttachment.content, pAttachment.mimeType, pAttachment.filename, true, null, null)
     });
     
     return mailId;
@@ -321,12 +328,13 @@ Email.prototype.openMail = function ()
 /**
  * ask for a download of the email
  * 
+ * @param {String} [pFilename] the file name.
  * @return {Array} array of [filename, EML (base64)]
  */
-Email.prototype.downloadEML = function ()
+Email.prototype.downloadEML = function (pFilename)
 {
     var eml = this.getEML();
-    var filename = (this.subject || translate.text("Email Template")) + ".eml";
+    var filename = (pFilename || translate.text("Email Template")) + ".eml";
     neon.download(eml, filename);
     return [filename, eml];
 }
diff --git a/process/ImporterMappingFunctions_lib/process.js b/process/ImporterMappingFunctions_lib/process.js
index 496ae5c71a907dd73e1f0a41852e837d93f6c5b3..a5746a0276df1bc7963975598a51395c10e741b1 100644
--- a/process/ImporterMappingFunctions_lib/process.js
+++ b/process/ImporterMappingFunctions_lib/process.js
@@ -16,8 +16,8 @@ import("Importer_lib");
 
 /*
 +---------------------------------------------------------------+
-¦ toolkit methods for the import handler                ¦
-¦ DO NOT TOUCH - use lib_importerCustomMappingFunctions ¦
+� toolkit methods for the import handler                �
+� DO NOT TOUCH - use lib_importerCustomMappingFunctions �
 +---------------------------------------------------------------+
  */
 
@@ -145,7 +145,7 @@ function iAttribute(pObject)
                 var parent = "NULL";
                 // select ab_attributeid from AB_ATTRIBUTE where ATTRIBUTE_NAME = 'Subordinate campaign of' and attribute_parent_id is null
                 id = newSelect(ab_attributeId, alias).from(ab_attribute).where(attribute_name, attributes[i])
-                        .and(attribute_parent_id, "is null").cell();
+                        .and(attribute_parent_id + "is null").cell();
             } 
             else 
             {
diff --git a/process/IncomingEmailExecutor_lib/process.js b/process/IncomingEmailExecutor_lib/process.js
index 6841b19deb7a2398849d77c40c770dd190e9e7a9..a43fbc1f56043c6699cdfb335d50981fba6f24f0 100644
--- a/process/IncomingEmailExecutor_lib/process.js
+++ b/process/IncomingEmailExecutor_lib/process.js
@@ -109,6 +109,11 @@ IncomingEmailExecutor.prototype.getMailtextAsHtml = function()
         }
         textInfos.push(attachmentHtml);
     }
+    
+    textInfos = textInfos.map(function (el) 
+    { 
+        return "<p>" + el + "</p><br>";
+    });
 
     //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])
@@ -116,11 +121,10 @@ IncomingEmailExecutor.prototype.getMailtextAsHtml = function()
     else
         textInfos.push("<br/>\n" + text.text2html(this.rawMail[mail.MAIL_TEXT], true));
     
-    var res = textInfos.join("<br/>\n");
+    var res = textInfos.join("\n");
     return res;
 }
 
-
 IncomingEmailExecutor.prototype.getSenderInfo = function()
 {
     if (this._senderInfo == null)
@@ -212,14 +216,14 @@ IncomingEmailExecutor.prototype.deleteUnlinkedMail = function (pUnlinkedMailId)
 IncomingEmailExecutor.prototype.autoProcess = function(pUnlinkedMailId)
 {
     let tempResult = {};
+    tempResult.isUnlinkedMail = false;
     if (this.isUnlinkable())
     {
+        tempResult.isUnlinkedMail = true;
         if (pUnlinkedMailId)
             return {
                 unlinkedMailId: pUnlinkedMailId
             };
-        else
-            tempResult.unlinkedMailId = this.insertUnlinkedMail();
     }
 
     tempResult.activityId = this.createActivity().activityId;
diff --git a/process/IndexSearch_lib/process.js b/process/IndexSearch_lib/process.js
index b39ce87ed0696119457a4d37b819455fd182f89b..532ec972fe333d7fb1e89cf731d3127c8bd20a1b 100644
--- a/process/IndexSearch_lib/process.js
+++ b/process/IndexSearch_lib/process.js
@@ -22,15 +22,18 @@ function IndexsearchUtils() {}
  */
 IndexsearchUtils.getAffectedIdValues = function(fieldname, affectedInfoContainer, updateFn) {
     var affectedIds;
-    switch (affectedInfoContainer.action){
-        case "I":  
-            affectedIds = [affectedInfoContainer.newValues[affectedInfoContainer.columns.indexOf(fieldname)]];
+    switch (affectedInfoContainer.action)
+    {
+        case "I":
+            affectedIds = affectedInfoContainer.newValues[affectedInfoContainer.columns.indexOf(fieldname)];
+            affectedIds = affectedIds ? [affectedIds] : []
             break;
         case "U":
             affectedIds = updateFn.call(null, affectedInfoContainer.id);
             break;
         case "D":
-            affectedIds = [affectedInfoContainer.oldValues[affectedInfoContainer.columns.indexOf(fieldname)]];
+            affectedIds = affectedInfoContainer.oldValues[affectedInfoContainer.columns.indexOf(fieldname)];
+            affectedIds = affectedIds ? [affectedIds] : []
             break;
     }
     return affectedIds || [];
diff --git a/process/Loghistory_lib/process.js b/process/Loghistory_lib/process.js
index 59036002263ecb1d0e269fc2afc6cb7c6107e742..fa07e912c734554fe0e1955b5e3f926f889630fc 100644
--- a/process/Loghistory_lib/process.js
+++ b/process/Loghistory_lib/process.js
@@ -150,6 +150,8 @@ LogHistoryExecutor.prototype.execute = function ()
             {
                 description.push(translate.withArguments("%0 from \"%1\" to \"%2\"", [conf.Description, olddata[0], newdata[0]], this.translationLanguage));
             }
+            else
+                description.push(conf.Description + " " + newdata[0]);
         }
         if (conf.RefTable) this.affectedTable = conf.RefTable;
     } //no extra tables
@@ -284,7 +286,15 @@ LogHistoryExecutor.prototype._getDataForExtras = function(pId, pValues)
     if (this.affectedTable == "AB_ATTRIBUTERELATION") 
     {
         data[0] = AttributeUtil.getFullAttributeName(pId);
-        data[1] = AttributeRelationUtils.selectAttributeValue(pId, pValues, true);
+        //if the attribute type is "OBJECTSELECTION", entities.getRow is used for resolving the displayValue, that can cause an error
+        try {
+            data[1] = AttributeRelationUtils.selectAttributeValue(pId, pValues, true);
+        }
+        catch (err)
+        {
+            logging.log(err);
+            data[1] = null;
+        }
     }
     else if (this.affectedTable == "COMMUNICATION")
     {
@@ -349,7 +359,12 @@ LogHistoryExecutor.prototype._getFormattedValue = function (pColumnName, pDescri
         var params = Translate4LogParams.generateParams(this.idValue, pValue != null ? pValue.toString() : null, this.sqlAction, this.translationLanguage);
         var scriptId = "LogHistoryExecutor._getFormattedValue." 
             + this.structureDefinitionAlias + "." + this.affectedTable + "." +  pColumnName + ".translate4Log";
-        pValue = process.executeScript(scriptId, pDescription.translate4Log, params, vars.get("$sys.dbalias"));
+        var processConfig = process.createStartScriptConfig()
+            .setIdentifier(scriptId)
+            .setScript(pDescription.translate4Log)
+            .setLocalVariables(params)
+            .setAlias(vars.get("$sys.dbalias"));
+        pValue = process.startScript(processConfig);
     }
     else if (pDescription.columnType == String(SQLTYPES.TIMESTAMP) || pDescription.columnType == String(SQLTYPES.DATE)) 
         pValue = datetime.toDate(pValue, translate.text("dd.MM.yyyy", this.translationLanguage), "Europe/Berlin");//TODO: timezone?
diff --git a/process/Offer_lib/process.js b/process/Offer_lib/process.js
index b0bfefeff4221625ed37066bb16ef2963c6aa598..8b12e56fdbc6913c720f06ef108364e70115939e 100644
--- a/process/Offer_lib/process.js
+++ b/process/Offer_lib/process.js
@@ -1,3 +1,4 @@
+import("system.SQLTYPES");
 import("system.vars");
 import("system.util");
 import("system.datetime");
@@ -103,7 +104,7 @@ OfferUtils.createNewOffer = function(pContextId, pRowId, pRelationId, pActivityI
 OfferUtils.buildOfferReport = function (pOfferID)
 {
     var offerReport = new Report("Offer_report");  
-    
+
     var sqlUtil = new SqlMaskingUtils();
     
     var offerFields = [
@@ -159,11 +160,12 @@ OfferUtils.buildOfferReport = function (pOfferID)
         "0", 
         "''"
     ]; 
-    
+
     var itemData = newSelect(offerItemFields)
                             .from("OFFERITEM")
                             .leftJoin("PRODUCT", "PRODUCT.PRODUCTID = OFFERITEM.PRODUCT_ID")
                             .where("OFFERITEM.OFFER_ID", pOfferID)
+                            .orderBy("OFFERITEM.ITEMSORT asc")
                             .table();
             
     if (itemData.length == 0)
diff --git a/process/Order_lib/process.js b/process/Order_lib/process.js
index 8c7da8b6647c80508b635b1466ce8f8966ccdc25..b9d4815ae0586e19b95da36fc8c7c8d6825db17a 100644
--- a/process/Order_lib/process.js
+++ b/process/Order_lib/process.js
@@ -122,11 +122,11 @@ OrderUtils.copyOrder = function (pSourceOfferId, pContactId, pOrderType, pLangua
  * copies all offerItems of an offer and creates orderItems for an order
  * 
  * @param {String} pSourceOfferId the offer to get the items from
- * @param {String} pSourceOfferId the order to create the items for
+ * @param {String} pOrderId the order to create the items for
  */
-OrderUtils.copyOfferItemsToOrder = function (pSourceOfferId, pSourceOfferId)
+OrderUtils.copyOfferItemsToOrder = function (pSourceOfferId, pOrderId)
 {
-    var InputMapping = {
+    var inputMapping = {
         "OFFERITEM": {
             destinationModuleName : "SALESORDERITEM",
             DestinationColumnMapping : {
@@ -148,19 +148,19 @@ OrderUtils.copyOfferItemsToOrder = function (pSourceOfferId, pSourceOfferId)
             },
             condition: newWhereIfSet("OFFERITEM.OFFER_ID", pSourceOfferId).orderBy("ITEMSORT").toString("1=2", true),
             ValueMapping: {
-                "OFFER_ID" : pSourceOfferId
+                "OFFER_ID" : pOrderId
             }
         }
     };
-    CopyModuleUtils.copyModule(InputMapping);
+    CopyModuleUtils.copyModule(inputMapping);
     
-    var oiUtils = new OrderItemUtils(pSourceOfferId);
+    var oiUtils = new OrderItemUtils(pOrderId);
     
     //update order price
     cols = ["NET", "VAT"];
     var vals = oiUtils.getNetAndVat();
     
-    newWhere("SALESORDER.SALESORDERID", pSourceOfferId)
+    newWhere("SALESORDER.SALESORDERID", pOrderId)
         .updateData(true, "SALESORDER", cols, null, vals);
 }
 
diff --git a/process/Organisation_lib/process.js b/process/Organisation_lib/process.js
index ae3069a4d2e97d69214c1c028a2f281bce49ae2c..622b86c386ba03047f92019a9860f8c133f4c628 100644
--- a/process/Organisation_lib/process.js
+++ b/process/Organisation_lib/process.js
@@ -174,8 +174,10 @@ var activityData = activityQuery.table()
     //tasks
     var taskData = newSelect("TASK.SUBJECT, TASK.DESCRIPTION, TASK.STATUS, FIRSTNAME, LASTNAME")
                     .from("TASK")
-                    .join("CONTACT", "EDITOR_CONTACT_ID = CONTACTID")
-                    .leftJoin("PERSON", "CONTACT.PERSON_ID = PERSONID")
+                    .join("TASKLINK", "TASKLINK.TASK_ID = TASK.TASKID")
+                    .join("CONTACT", "TASKLINK.OBJECT_ROWID = CONTACTID and (TASKLINK.OBJECT_TYPE = 'Organisation' or TASKLINK.OBJECT_TYPE = 'Person')")
+                    .join("CONTACT c", "TASK.EDITOR_CONTACT_ID = c.CONTACTID")
+                    .leftJoin("PERSON", "c.PERSON_ID = PERSONID")
                     .where("CONTACT.ORGANISATION_ID", pOrgId)
                     .table();
 
diff --git a/process/SetAttribute_workflowService/process.js b/process/SetAttribute_workflowService/process.js
index 1fecaccbec55f29668e3257748971104d4874433..5ae7685d47c6712b675f29bf3f695e81dde188c4 100644
--- a/process/SetAttribute_workflowService/process.js
+++ b/process/SetAttribute_workflowService/process.js
@@ -1,34 +1,19 @@
-import("system.logging");
 import("Sql_lib");
 import("Attribute_lib");
 import("system.result");
 import("system.vars");
 
 var variables = JSON.parse(vars.get("$local.value"));
-var attributeName = variables.attributeName;
 
 var attributeId;
-if(attributeName)
+if (variables.attributeName)
 {
-    attributeId =  newSelect("AB_ATTRIBUTE.AB_ATTRIBUTEID")
-                        .from("AB_ATTRIBUTE")
-                        .where("AB_ATTRIBUTE.ATTRIBUTE_NAME", attributeName)
-                        .cell();
+    attributeId = newSelect("AB_ATTRIBUTE.AB_ATTRIBUTEID")
+        .from("AB_ATTRIBUTE")
+        .where("AB_ATTRIBUTE.ATTRIBUTE_NAME", variables.attributeName)
+        .cell();
 }
 else
-{
     attributeId = variables.attributeId;
-}
 
-var value = variables.attributeValue;
-var objectRowId = variables.targetId;
-var objectType = variables.targetContext;
-
-if(value)
-{
-    result.string(new AttributeRelationQuery(objectRowId, attributeId, objectType).insertAttribute(value));
-}
-else
-{
-    result.string(AttributeRelationUtils.insertAttribute(objectRowId, objectType, attributeId, null));
-}
+result.string(new AttributeRelationQuery(variables.targetId, attributeId, variables.targetContext).insertAttribute(variables.attributeValue));
\ No newline at end of file
diff --git a/process/SqlLib_tests/process.js b/process/SqlLib_tests/process.js
index e1b78e43af06ce94fc940d6eb5b280cc6223ce85..924162e2a4ef98f5dc93515f648fdad355ced736 100644
--- a/process/SqlLib_tests/process.js
+++ b/process/SqlLib_tests/process.js
@@ -646,68 +646,68 @@ var mandatoryErrorTests = new TestSuite([
     ["and without parameter should error", function(pTester)
     {
         new SqlBuilder().where().or();
-    }, SqlBuilder.ERROR_NO_PARAMETER_PROVIDED()],
+    }, SqlBuilder._ERROR_NO_PARAMETER_PROVIDED()],
 
     ["and with null as value should error", function(pTester)
     {
         new SqlBuilder().where().or("PERSON.FIRSTNAME", null);
-    }, SqlBuilder.ERROR_VALUE_IS_MANDATORY()],
+    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY()],
 
     ["and with undefined as value should error", function(pTester)
     {
         new SqlBuilder().where().or("PERSON.FIRSTNAME", undefined);
-    }, SqlBuilder.ERROR_VALUE_IS_MANDATORY()],
+    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY()],
 
     ["and with a jdito-var containing null should error", function(pTester)
     {
         vars.set("$global.TestingVarNull", null);
         
         new SqlBuilder().where().or("PERSON.FIRSTNAME", "$global.TestingVarNull");
-    }, SqlBuilder.ERROR_VALUE_IS_MANDATORY_JDITO_VAR()],
+    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY_JDITO_VAR()],
 
     ["and with an empty sql-builder as subquery should error", function(pTester)
     {        
         new SqlBuilder().where().or("PERSON.FIRSTNAME", new SqlBuilder());
-    }, SqlBuilder.ERROR_VALUE_IS_MANDATORY()],
+    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY()],
 
     ["and with an empty prepared statement as subquery should error", function(pTester)
     {        
         new SqlBuilder().where().or("PERSON.FIRSTNAME", ["", []]);
-    }, SqlBuilder.ERROR_VALUE_IS_MANDATORY()],
+    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY()],
 
 
 // or
     ["or without parameter should error", function(pTester)
     {
         new SqlBuilder().where().or();
-    }, SqlBuilder.ERROR_NO_PARAMETER_PROVIDED()],
+    }, SqlBuilder._ERROR_NO_PARAMETER_PROVIDED()],
 
     ["or with null as value should error", function(pTester)
     {
         new SqlBuilder().where().or("PERSON.FIRSTNAME", null);
-    }, SqlBuilder.ERROR_VALUE_IS_MANDATORY()],
+    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY()],
 
     ["or with undefined as value should error", function(pTester)
     {
         new SqlBuilder().where().or("PERSON.FIRSTNAME", undefined);
-    }, SqlBuilder.ERROR_VALUE_IS_MANDATORY()],
+    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY()],
 
     ["or with a jdito-var containing null should error", function(pTester)
     {
         vars.set("$global.TestingVarNull", null);
         
         new SqlBuilder().where().or("PERSON.FIRSTNAME", "$global.TestingVarNull");
-    }, SqlBuilder.ERROR_VALUE_IS_MANDATORY_JDITO_VAR()],
+    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY_JDITO_VAR()],
 
     ["or with an empty sql-builder as subquery should error", function(pTester)
     {        
         new SqlBuilder().where().or("PERSON.FIRSTNAME", new SqlBuilder());
-    }, SqlBuilder.ERROR_VALUE_IS_MANDATORY()],
+    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY()],
 
     ["or with an empty prepared statement as subquery should error", function(pTester)
     {        
         new SqlBuilder().where().or("PERSON.FIRSTNAME", ["", []]);
-    }, SqlBuilder.ERROR_VALUE_IS_MANDATORY()],
+    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY()],
 ]);
 
 var inStatementTests = new TestSuite([
@@ -766,7 +766,7 @@ var inStatementTests = new TestSuite([
     {
         new SqlBuilder()
                 .where("PERSON.LASTNAME", []);
-    }, SqlBuilder.ERROR_VALUE_IS_MANDATORY()]
+    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY()]
 ]);
 
 var testConstantFunctions = new TestSuite([
@@ -886,7 +886,7 @@ var subqueryAsFieldTests = new TestSuite([
                                 .where("ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
                                 .and("PERSON.FIRSTNAME", "val1") // test if the value is added at the correct place
         new SqlBuilder().where(subQuery, "val2", "# = ?");
-    }, SqlBuilder.ERROR_SUBSELECT_AS_FIELD_NO_FIELD_TYPE()],
+    }, SqlBuilder._ERROR_SUBSELECT_AS_FIELD_NO_FIELD_TYPE()],
 
     ["Test if a Subselect as field should error if it is not a full select.", function(pTester)
     {
@@ -895,7 +895,7 @@ var subqueryAsFieldTests = new TestSuite([
                                 .and("PERSON.FIRSTNAME", "val1") // test if the value is added at the correct place
     
         new SqlBuilder().where(subQuery, "val2", "# = ?", SQLTYPES.VARCHAR);
-    }, SqlBuilder.ERROR_SUBSELECT_AS_FIELD_NOT_COMPLETE()]
+    }, SqlBuilder._ERROR_SUBSELECT_AS_FIELD_NOT_COMPLETE()]
 ]);
 
 var conditionFormatTests = new TestSuite([
@@ -918,17 +918,17 @@ var conditionFormatTests = new TestSuite([
     ["pCondition should fail if more than one ? exists", function(pTester)
     {
         new SqlBuilder().where("PERSON.FIRSTNAME", "val1", "? test ?")
-    }, SqlBuilder.ERROR_CONDITION_WRONG_FORMAT()],
+    }, SqlBuilder._ERROR_CONDITION_WRONG_FORMAT()],
 
     ["pCondition should fail if more than one # exists", function(pTester)
     {
         new SqlBuilder().where("PERSON.FIRSTNAME", "val1", "# test #")
-    }, SqlBuilder.ERROR_CONDITION_WRONG_FORMAT()],
+    }, SqlBuilder._ERROR_CONDITION_WRONG_FORMAT()],
 
     ["pCondition should fail if # and ? are in wrong order", function(pTester)
     {
         new SqlBuilder().where("PERSON.FIRSTNAME", "val1", "? = #")
-    }, SqlBuilder.ERROR_CONDITION_WRONG_FORMAT()]
+    }, SqlBuilder._ERROR_CONDITION_WRONG_FORMAT()]
 ]);
 
 var subqueryAliasTests = new TestSuite([
diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js
index 6f66eddba14a1eb66543e240cb9292a85e696295..fb933d980b271bc431bdd4715c15d07243981ade 100644
--- a/process/Sql_lib/process.js
+++ b/process/Sql_lib/process.js
@@ -2463,6 +2463,48 @@ SqlBuilder.prototype.updateFields = function (pFieldValues, pTableName)
     return this.updateData(true, pTableName, columns, null, values);
 }
 
+/**
+ * Builds an array containing the table and condition for an update.
+ * 
+ * @param {Object} pFieldValues Object with the columns to update as keys mapped to their values
+ * @param {String} [pTableName] The table for updating data. If undefined, the from part of the SqlBuilder will be used (works only if it is a tablename). If no from is set,
+ *      the table of the first where-condition is used.
+ * @return {Array} array of [tableName, columns, columnTypes, values, preparedCondition], like it is required by db.updates or null if there is no condition
+ * @example 
+ * var updateStatements = [];
+ * updateStatements.push(newWhere("PERSON.PERSONID", pPersonId).buildUpdateStatement({"FIRSTNAME" : firstName}));
+ * updateStatements.push(newWhere("ORGANISATION.ORGANISATIONID", pOrganisationId).buildUpdateStatement({"NAME" : organisationName}));
+ * db.updates(updateStatements);
+ */
+SqlBuilder.prototype.buildUpdateStatement = function (pFieldValues, pTableName)
+{
+    if (!pFieldValues || typeof(pFieldValues) !== "object")
+        throw SqlBuilder._ERROR_UPDATE_VALUES_INVALID;
+        
+    var columns = [];
+    var values = [];
+    for (let field in pFieldValues)
+    {
+        columns.push(field);
+        values.push(pFieldValues[field].toString());
+    }
+    
+    if (columns.length !== 0 && this._checkForUpdate())
+    {
+        if (!pTableName && !this._tableName)
+            throw SqlBuilder._ERROR_NO_TABLE();
+        
+        return [
+            (pTableName ? pTableName : this._tableName),
+            columns,
+            null,
+            values,
+            this.buildCondition()
+        ];
+    }
+    return null;
+}
+
 /**
  * Inserts data in the database. This function doesn't require any where-condition, it is intended to be called right after 'new SqlBuilder()'. <br/>
  * 
@@ -2565,6 +2607,36 @@ SqlBuilder.prototype.deleteData = function(pExecuteOnlyIfConditionExists, pTable
     }
 }
 
+/**
+ * Builds an array containing the table and condition for a delete.
+ * 
+ * @param {Boolean} [pOnlyIfConditionExists=true] If true and there is no condition, null is returned.<br/>
+ *      <strong>IMPORTANT: If this is set to false and there is no condition, every row in the table will be deleted!</strong>
+ * @param {String} [pTableName] The table for deleting data. If undefined, the from part of the SqlBuilder will be used. If no from is set,
+ *      the table of the first where-condition is used.
+ * @return {Array} array of [tableName, preparedCondition], like it is required by db.deletes
+ * @example 
+ * var deleteStatements = [];
+ * deleteStatements.push(newWhere("PERSON.PERSONID", pPersonId).buildDeleteStatement());
+ * deleteStatements.push(newWhere("CONTACT.CONTACTID", pContactId).buildDeleteStatement());
+ * db.deletes(deleteStatements);
+ */
+SqlBuilder.prototype.buildDeleteStatement = function(pOnlyIfConditionExists, pTableName)
+{
+    if (this._checkForUpdate(pOnlyIfConditionExists))
+    {
+        if (!pTableName && !this._tableName)
+            throw SqlBuilder._ERROR_NO_TABLE();
+        
+        return [
+            (pTableName ? pTableName : this._tableName),
+            this.buildCondition()
+        ];
+    }
+    else
+        return null;
+}
+
 /**
  * Executes the SQL using db.cell and returns the result.<br/>
  * Note: the default for pExecuteOnlyIfConditionExists is false becausse it is more natural to select all rows if no condition exists.
diff --git a/process/TestIndexSearch/process.js b/process/TestIndexSearch/process.js
index 5495eb0a91fb11dac1cc19016882a846552d4d48..de5128f2fe74bf4e963c91cf24ff3ff8bfb2e3e6 100644
--- a/process/TestIndexSearch/process.js
+++ b/process/TestIndexSearch/process.js
@@ -11,13 +11,13 @@ logging.log(indexsearch.lookupIndexField("Person_entity", "PersAddresses.CITY.va
 logging.log(indexsearch.lookupIndexField(null, "Person_entity.FIRSTNAME.value"));
 logging.log(indexsearch.lookupIndexField(null, "Person_entity.PersAddresses.CITY.value"));
 var json = '{"entity":"Person_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"FIRSTNAME","operator":"STARTSWITH","value":"asd","key":"","contenttype":"TEXT"},{"type":"group","operator":"OR","childs":[{"type":"row","name":"LASTNAME","operator":"STARTSWITH","value":"L","key":"","contenttype":"TEXT"}]}]}}';
-logging.log(indexsearch.buildQueryFromSearchCondition(json));
+logging.log(indexsearch.toFilterPattern(json));
 
 var t1 = indexsearch.createTerm("lisa").setEntityField("Person_entity.FIRSTNAME");
 var t2 = indexsearch.createTerm("sommer").setEntityField("Person_entity.LASTNAME");
 var t3 = indexsearch.createWildcardTerm("LALA").setEntityField("Person_entity.PersAddresses.CITY");
 var patternConf = indexsearch.createPatternConfig().or(t1).or(t2).or(t3);
-var pattern = indexsearch.buildPatternString(patternConf);
+var pattern = indexsearch.buildPattern(patternConf);
 logging.log(pattern);
 var query = indexsearch.createIndexQuery()
 .setPattern(pattern).setEntities("Person_entity")
diff --git a/process/UnitTest_lib/process.js b/process/UnitTest_lib/process.js
index 69be82eb2dd4058256ef26d50ca4795360028d00..0ce141d4828e7b396f4cc4368c4daae06aec5dd1 100644
--- a/process/UnitTest_lib/process.js
+++ b/process/UnitTest_lib/process.js
@@ -53,6 +53,48 @@ function Tester(pCollectionName)
     this.currentTestHadAlreadyAssert = false;
 }
 
+/**
+ * generates a summary of the test results
+ * 
+ * @return {Obect}
+ */
+Tester.prototype.getSummary = function ()
+{
+    var summary = {
+        failures : 0,
+        successes : 0,
+        failedTests : [],
+        getMessage : function ()
+        {
+            var message = "-------------------------\n"
+                + (this.failures ? "Test failure" : "Test success")
+                + "\n-------------------------\nTests performed: " + (this.successes + this.failures)
+                + "\nTests successful: " + this.successes
+                + "\nTests failed: " + this.failures;
+            if (this.failedTests.length)
+            {
+                message += "\nFailures:";
+                this.failedTests.forEach(function (testName)
+                {
+                    message += "\n\t" + testName;
+                });
+            }
+            return message;
+        }
+    }
+    this.testResults.forEach(function ([testName,, successful])
+    {
+        if (successful)
+            summary.successes++;
+        else
+        {
+            summary.failures++;
+            summary.failedTests.push(testName);
+        }
+    });
+    return summary;
+}
+
 /**
  * With assert you can test if a variable is the same like an expected value.<br/>
  * The test result is added to the Tester<br/>
@@ -189,4 +231,5 @@ Tester.prototype.printResults = function ()
         logging.log(message);
         lastTestDescription = pResult[0];
     }, this);
+    logging.log(this.getSummary().getMessage());
 }
\ No newline at end of file
diff --git a/process/Workflow_lib/process.js b/process/Workflow_lib/process.js
index 39b2bdb10b70dc7c9f72e17087f1d144cdb59219..179875a721eeee920de4ed7fa72752661fcefbe9 100644
--- a/process/Workflow_lib/process.js
+++ b/process/Workflow_lib/process.js
@@ -204,8 +204,9 @@ WorkflowSignalSender.deleted = function (pTargetId, pTargetContext)
  * @param {String} pEvent event
  * @param {String} pTargetId uid of the dataset
  * @param {String} pTargetContext context of the dataset
+ * @param {Object} pVariables additional variables to set
  */
-WorkflowSignalSender.eventHappened = function (pEvent, pTargetId, pTargetContext)
+WorkflowSignalSender.eventHappened = function (pEvent, pTargetId, pTargetContext, pVariables)
 {
     var variables = WorkflowVariables.getTargetVariables(pTargetId, pTargetContext);
     
@@ -214,7 +215,7 @@ WorkflowSignalSender.eventHappened = function (pEvent, pTargetId, pTargetContext
     {
         if (_checkCondition(signal.entity, variables[WorkflowVariables.TARGET_ID()], signal.condition))
         {
-            var filteredVariables = {};
+            var filteredVariables = pVariables || {};
             signal.variables.forEach(function (varName)
             {
                 filteredVariables[varName] = variables[varName];
diff --git a/process/_test_clientProcess/process.js b/process/_test_clientProcess/process.js
index 69c8a127ca7561d158d3d268d54e5ce54db75c97..bae4f5fd7b722780627c1828db7848183aab8a82 100644
--- a/process/_test_clientProcess/process.js
+++ b/process/_test_clientProcess/process.js
@@ -1 +1 @@
-throw new Error("proccess not defined")throw new Error("proccess not defined")
\ No newline at end of file
+throw new Error("proccess not defined");
\ No newline at end of file
diff --git a/process/updateActivities_serverProzess/process.js b/process/updateActivities_serverProzess/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..0a952cd68dca8ad315cb606d7aa6f0ef74faf6e4
--- /dev/null
+++ b/process/updateActivities_serverProzess/process.js
@@ -0,0 +1,19 @@
+import("system.logging");
+import("system.db");
+import("Sql_lib");
+
+var activities = new SqlBuilder().select(["ACTIVITY.INFO", "ACTIVITY.ACTIVITYID"]).from("ACTIVITY").where("ACTIVITY.CATEGORY", "MAIL").and("ACTIVITY.INFO", "<%", SqlBuilder.NOT_LIKE()).and("ACTIVITY.INFO","%<html>%", SqlBuilder.LIKE()).table();
+activities.forEach(function (row) 
+{
+    var newValue = row[0].split("<br/>\n").map(function (el) 
+    {
+    	if (el == "")
+            return "<br>";
+        else if (el.startsWith("<html>"))
+            return el;
+        else 
+            return "<p>" + el + "</p><br>";
+    }).join("\n");
+    newWhere("ACTIVITY.ACTIVITYID", row[1])
+        .updateFields({"INFO" : newValue});
+});
\ No newline at end of file
diff --git a/process/updateActivities_serverProzess/updateActivities_serverProzess.aod b/process/updateActivities_serverProzess/updateActivities_serverProzess.aod
new file mode 100644
index 0000000000000000000000000000000000000000..51684eaceb296a2b5f75e7f1c82b373494b4e28e
--- /dev/null
+++ b/process/updateActivities_serverProzess/updateActivities_serverProzess.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>updateActivities_serverProzess</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/updateActivities_serverProzess/process.js</process>
+  <restrictedRoles />
+  <alias>Data_alias</alias>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>
diff --git a/process/workflowServiceTasks_rest/process.js b/process/workflowServiceTasks_rest/process.js
index 2da45ade3533c545a968cd5f377a2169e6f89223..470717e7e185c7c7af401533042bcac29582bee1 100644
--- a/process/workflowServiceTasks_rest/process.js
+++ b/process/workflowServiceTasks_rest/process.js
@@ -6,12 +6,8 @@ function restget (pRequest)
 {
     var request = JSON.parse(pRequest);
     
-    var serviceTasks = project.getDataModels(project.DATAMODEL_KIND_PROCESS)
-    .filter(function (row)
-    {
-        return /.+_workflowService$/.test(row[0]);
-    })
-    .map(function (row)
+    var serviceTaskNames = process.getProcesses([process.VARIANT_WORKFLOW]);
+    var serviceTasks = project.getDataModels(project.DATAMODEL_KIND_PROCESS, serviceTaskNames).map(function (row)
     {
         return {
             id : row[0],
diff --git a/report/Offer_report/reportData.jrxml b/report/Offer_report/reportData.jrxml
index b7186a7cbda409462e048d4141d7f021427bcc5c..54ef644c16b90f8066509a2fedf6ca135c56cebd 100644
--- a/report/Offer_report/reportData.jrxml
+++ b/report/Offer_report/reportData.jrxml
@@ -2,7 +2,7 @@
 <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report1" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="e7a916c8-3f9a-497d-84bb-3909b15271ea">
 	<property name="ireport.zoom" value="1.9487171000000014"/>
 	<property name="ireport.x" value="0"/>
-	<property name="ireport.y" value="233"/>
+	<property name="ireport.y" value="190"/>
 	<parameter name="myAddr" class="java.lang.String"/>
 	<parameter name="Pos" class="java.lang.String"/>
 	<parameter name="Articledescription" class="java.lang.String"/>
@@ -24,7 +24,7 @@
 	<parameter name="OfferDeliveryTerm" class="java.lang.String"/>
 	<parameter name="responsible" class="java.lang.String"/>
 	<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
-		<defaultValueExpression><![CDATA["C:\\Entwicklung\\stable2019\\project\\basic\\report\\Offer_report\\"]]></defaultValueExpression>
+		<defaultValueExpression><![CDATA["C:\\Entwicklung\\0.0\\project\\basic2\\report\\Offer_report\\"]]></defaultValueExpression>
 	</parameter>
 	<parameter name="adito.datasource.subdata" class="java.lang.Object"/>
 	<parameter name="SUMITEMSUM" class="java.lang.Double"/>
@@ -55,7 +55,6 @@
 	<field name="OFFER_VERSNR" class="java.lang.String"/>
 	<field name="OFFER_FOOTER" class="java.lang.String"/>
 	<sortField name="OFFER_OFFERID"/>
-	<sortField name="OFFERITEM_ITEMPOSITION"/>
 	<group name="OFFERID" isStartNewPage="true">
 		<groupExpression><![CDATA[$F{OFFER_OFFERID}]]></groupExpression>
 		<groupHeader>