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/_____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
+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
+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/entity/Activity_entity/Activity_entity.aod b/entity/Activity_entity/Activity_entity.aod
index b5ebf375b211d4819d7a8865ffa277ec4f8e5e43..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>
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/Appointment_entity/entityfields/begin/valueProcess.js b/entity/Appointment_entity/entityfields/begin/valueProcess.js
index 2c01e234cb59893a1d1cd42da3d6828137dcba9c..494b5d528f0bac0d2135955a873332e8a462641b 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"));
@@ -21,6 +21,6 @@ if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$para
  */
 if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && vars.exists("$param.Entry_param"))
 {
-    var event = JSON.parse(vars.getString("$param.Entry_param"));
+    let event = JSON.parse(vars.getString("$param.Entry_param"));
     result.string(event[calendars.DTSTART]);
 }
\ No newline at end of file
diff --git a/entity/Appointment_entity/entityfields/end/valueProcess.js b/entity/Appointment_entity/entityfields/end/valueProcess.js
index c7b6ff0bc3c969be63c3338eb60768a41c9d7d20..23262e1a868e63515d37b22d4124b1d79728cc74 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"));
@@ -21,6 +21,6 @@ if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$para
  */
 if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && vars.exists("$param.Entry_param"))
 {
-    var event = JSON.parse(vars.getString("$param.Entry_param"));
+    let event = JSON.parse(vars.getString("$param.Entry_param"));
     result.string(event[calendars.DTEND]);
 }
\ No newline at end of file
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/DocumentTemplate_entity/DocumentTemplate_entity.aod b/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod
index 54d9b5cbd8ac10c1cbcc075fe73b66e90cf06d55..3e4bbba2abdc84a8a7f33554ef8178579318db16 100644
--- a/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod
+++ b/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod
@@ -410,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/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/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod
index 4115bd0f2d85eaa7418b5be4e79e12755268411e..d8bfbd275ac29413e596bd0b43dc2348f0b01f1a 100644
--- a/entity/Person_entity/Person_entity.aod
+++ b/entity/Person_entity/Person_entity.aod
@@ -1153,17 +1153,6 @@
         <entityName>Person_entity</entityName>
         <fieldName>SelfDuplicatesProvider</fieldName>
       </dependency>
-      <children>
-        <entityParameter>
-          <name>OnlyShowContactIds_param</name>
-        </entityParameter>
-        <entityParameter>
-          <name>DuplicateCurrentContactId_param</name>
-        </entityParameter>
-        <entityParameter>
-          <name>DuplicateActionsControl_param</name>
-        </entityParameter>
-      </children>
     </entityConsumer>
     <entityProvider>
       <name>SelfDuplicatesProvider</name>
@@ -1217,6 +1206,7 @@
       <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>
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/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/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/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/WorkflowSignal_entity/WorkflowSignal_entity.aod b/entity/WorkflowSignal_entity/WorkflowSignal_entity.aod
index 22dc96a8eb8d17d0d5e17b8e8c9ad8f9e5d736f8..05b77e9fea96cde4f1b68245d886d207ff6d41df 100644
--- a/entity/WorkflowSignal_entity/WorkflowSignal_entity.aod
+++ b/entity/WorkflowSignal_entity/WorkflowSignal_entity.aod
@@ -154,9 +154,6 @@
           <name>PROCESSDEFINITION_KEY.value</name>
           <recordfield>WORKFLOWSIGNAL.PROCESSDEFINITION_KEY</recordfield>
         </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>ICON.value</name>
-        </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/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 ee00b16f3d6133e3ef370e383e87e3abef6b16fb..cfa2e9c9be05a7b4c7e20b7047026e1a4116ece4 100644
--- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
+++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
@@ -6776,6 +6776,12 @@
     <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>
diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
index 7dd5d2d36f49bffcd5aea44659df52f988a76f78..297c496a68433d8c9e84ce33f27866a9b03c0b3f 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -8684,6 +8684,14 @@ Bitte Datumseingabe prüfen</value>
     <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>
diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
index 06a6494ca0a53643c3a58a6b8e3abbfd68f8dd2c..6b3c84ea6235206e04b715f9df49d1d37fa61386 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -6841,6 +6841,12 @@
     <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>
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/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/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/Context_lib/process.js b/process/Context_lib/process.js
index b80ce6921b2c5e758c16154c611bc4be90962f84..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]));
     }
diff --git a/process/DuplicateScanner_lib/process.js b/process/DuplicateScanner_lib/process.js
index a8dc77293f8549353fe7cdc6f922ebed64b3cd45..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,41 +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(["TIMETRACKING", "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", ""]
+    ];
 }
 
 /*
@@ -1205,10 +1174,10 @@ _DuplicateScannerUtils._getMergeUpdateTableInfosCurrentAlias = function()
  */
 _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 131538d01f20e9e2603f83062254e5b8fbbbd3fc..2393fee4b38cea9c67566988bf561a3c8a119949 100644
--- a/process/Email_lib/process.js
+++ b/process/Email_lib/process.js
@@ -27,6 +27,7 @@ function EmailWritingUtils () {}
  * @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, pSubject, pEmailFilename)
@@ -284,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;
diff --git a/process/Loghistory_lib/process.js b/process/Loghistory_lib/process.js
index 102df509f36fb4f5afbdf481462f14769e3095de..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")
     {
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/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/updateActivities_serverProzess/process.js b/process/updateActivities_serverProzess/process.js
index 65cbe7e7042b5872b3d4f9c6067df0227bc0c170..0a952cd68dca8ad315cb606d7aa6f0ef74faf6e4 100644
--- a/process/updateActivities_serverProzess/process.js
+++ b/process/updateActivities_serverProzess/process.js
@@ -3,9 +3,9 @@ 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) {
-    let columnsToUpdate = ["INFO"];
-    let newValue = row[0].split("<br/>\n").map(function (el) 
+activities.forEach(function (row) 
+{
+    var newValue = row[0].split("<br/>\n").map(function (el) 
     {
     	if (el == "")
             return "<br>";
@@ -14,7 +14,6 @@ activities.forEach(function (row) {
         else 
             return "<p>" + el + "</p><br>";
     }).join("\n");
-    let projectIdCondition = SqlCondition.equals("ACTIVITY.ACTIVITYID", row[1], "1=2");
-    
-    db.updateData("ACTIVITY", columnsToUpdate, null, [newValue], projectIdCondition);
+    newWhere("ACTIVITY.ACTIVITYID", row[1])
+        .updateFields({"INFO" : newValue});
 });
\ No newline at end of file
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],