diff --git a/.liquibase/Data_alias/basic/2020.1.2/AlterDatatypeOfKeyColumnsToChar/alter_ComunicationMedium_IdDatatype.xml b/.liquibase/Data_alias/basic/2020.1.2/AlterDatatypeOfKeyColumnsToChar/alter_ComunicationMedium_IdDatatype.xml
index 3e4f1fbd5b8f119ecc58649bab722422cfdf571b..7153295dc12d1b84566a0af057f0f65bf706f3e9 100644
--- a/.liquibase/Data_alias/basic/2020.1.2/AlterDatatypeOfKeyColumnsToChar/alter_ComunicationMedium_IdDatatype.xml
+++ b/.liquibase/Data_alias/basic/2020.1.2/AlterDatatypeOfKeyColumnsToChar/alter_ComunicationMedium_IdDatatype.xml
@@ -1,7 +1,17 @@
 <?xml version="1.1" encoding="UTF-8" standalone="no"?>
 <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
-                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
-    <changeSet author="b.ulrich" id="a9f53bcd-b541-4a46-bd40-a21f7fae7aba">
-        <modifyDataType columnName="MEDIUM_ID" newDataType="CHAR(36)" tableName="COMMUNICATION"/> 
+                   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 dbms="derby" author="b.ulrich" id="bd334096-a6ce-4739-b272-753a85ff103e">
+        <sql>
+            ALTER TABLE COMMUNICATION ADD COLUMN MEDIUM_ID_NEW CHAR(36);
+            UPDATE COMMUNICATION SET MEDIUM_ID_NEW=MEDIUM_ID;
+            ALTER TABLE COMMUNICATION DROP COLUMN MEDIUM_ID;
+            RENAME COLUMN COMMUNICATION.MEDIUM_ID_NEW TO MEDIUM_ID;
+        </sql>
     </changeSet>
+    
+    <changeSet dbms="!derby" author="b.ulrich" id="17c1eb73-3131-4a2b-bf9a-913590767c79">
+        <modifyDataType tableName="COMMUNICATION" columnName="MEDIUM_ID" newDataType="CHAR(36)"/>
+    </changeSet>
+
 </databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.1.2/AlterDatatypeOfKeyColumnsToChar/alter_DocumentTemplatePlaceOfUseDatatype.xml b/.liquibase/Data_alias/basic/2020.1.2/AlterDatatypeOfKeyColumnsToChar/alter_DocumentTemplatePlaceOfUseDatatype.xml
index 14c64bfefe06b69e868de85bdf8ab9fcd6a093c1..2cfda5e78c75dc24d61318c4867d381d01e4105d 100644
--- a/.liquibase/Data_alias/basic/2020.1.2/AlterDatatypeOfKeyColumnsToChar/alter_DocumentTemplatePlaceOfUseDatatype.xml
+++ b/.liquibase/Data_alias/basic/2020.1.2/AlterDatatypeOfKeyColumnsToChar/alter_DocumentTemplatePlaceOfUseDatatype.xml
@@ -1,7 +1,19 @@
 <?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="b.ulrich" id="5a0d5d3f-e849-4584-8082-481b1411d1fc">
-        <modifyDataType columnName="DOCUMENTTEMPLATE_ID" newDataType="CHAR(36)" tableName="DOCUMENTTEMPLATE"/> 
+    <changeSet dbms="derby" author="b.ulrich" id="83c25119-cf41-42ab-b42f-370195f9de87">
+        <!--not null must be set in derby before adding a primary key constraint-->
+        <sql>
+            ALTER TABLE DOCUMENTTEMPLATE ADD COLUMN DOCUMENTTEMPLATEID_NEW CHAR(36);
+            UPDATE DOCUMENTTEMPLATE SET DOCUMENTTEMPLATEID_NEW=DOCUMENTTEMPLATEID;
+            ALTER TABLE DOCUMENTTEMPLATE DROP COLUMN DOCUMENTTEMPLATEID;
+            RENAME COLUMN DOCUMENTTEMPLATE.DOCUMENTTEMPLATEID_NEW TO DOCUMENTTEMPLATEID;
+            ALTER TABLE DOCUMENTTEMPLATE ALTER COLUMN DOCUMENTTEMPLATEID NOT NULL;
+            ALTER TABLE DOCUMENTTEMPLATE ADD CONSTRAINT PK_DOCUMENTTEMPLATE_DOCUMENTTEMPLATEID  PRIMARY KEY (DOCUMENTTEMPLATEID);
+        </sql>
+    </changeSet>
+    
+    <changeSet dbms="!derby" author="b.ulrich" id="85ba6a61-9318-4118-ac4c-e33730f6581d">
+        <modifyDataType tableName="DOCUMENTTEMPLATE" columnName="DOCUMENTTEMPLATEID" newDataType="CHAR(36)"/>
     </changeSet>
 </databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.1.2/AlterDatatypeOfKeyColumnsToChar/alter_ExportTemplateDatatype.xml b/.liquibase/Data_alias/basic/2020.1.2/AlterDatatypeOfKeyColumnsToChar/alter_ExportTemplateDatatype.xml
index 7de92277180d51eb97a2cb562328e8e46751b43d..237c9fd9e447f01353d895dba2a7c1123e684471 100644
--- a/.liquibase/Data_alias/basic/2020.1.2/AlterDatatypeOfKeyColumnsToChar/alter_ExportTemplateDatatype.xml
+++ b/.liquibase/Data_alias/basic/2020.1.2/AlterDatatypeOfKeyColumnsToChar/alter_ExportTemplateDatatype.xml
@@ -1,10 +1,26 @@
 <?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="b.ulrich" id="77ee7dcd-cf5b-47ea-a59a-2b1230fad818">
-        <modifyDataType columnName="EXPORTTEMPLATE_ID" newDataType="CHAR(36)" tableName="EXPORTTEMPLATEPLACEOFUSE"/>
-        <modifyDataType columnName="EXPORTTEMPLATE_ID" newDataType="CHAR(36)" tableName="EXPORTTEMPLATEFIELD"/>
-        <modifyDataType columnName="EXPORTTEMPLATE_ID" newDataType="CHAR(36)" tableName="EXPORTTEMPLATESELECTION"/>
-        
+        <changeSet dbms="derby" author="b.ulrich" id="9c551ee3-f4f0-46e4-a671-943b58c74432">
+        <sql>
+            ALTER TABLE EXPORTTEMPLATEPLACEOFUSE ADD COLUMN EXPORTTEMPLATE_ID_NEW CHAR(36);
+            UPDATE EXPORTTEMPLATEPLACEOFUSE SET EXPORTTEMPLATE_ID_NEW=EXPORTTEMPLATE_ID;
+            ALTER TABLE EXPORTTEMPLATEPLACEOFUSE DROP COLUMN EXPORTTEMPLATE_ID;
+            RENAME COLUMN EXPORTTEMPLATEPLACEOFUSE.EXPORTTEMPLATE_ID_NEW TO EXPORTTEMPLATE_ID;
+             ALTER TABLE EXPORTTEMPLATEFIELD ADD COLUMN EXPORTTEMPLATE_ID_NEW CHAR(36);
+            UPDATE EXPORTTEMPLATEFIELD SET EXPORTTEMPLATE_ID_NEW=EXPORTTEMPLATE_ID;
+            ALTER TABLE EXPORTTEMPLATEFIELD DROP COLUMN EXPORTTEMPLATE_ID;
+            RENAME COLUMN EXPORTTEMPLATEFIELD.EXPORTTEMPLATE_ID_NEW TO EXPORTTEMPLATE_ID;
+             ALTER TABLE EXPORTTEMPLATESELECTION ADD COLUMN EXPORTTEMPLATE_ID_NEW CHAR(36);
+            UPDATE EXPORTTEMPLATESELECTION SET EXPORTTEMPLATE_ID_NEW=EXPORTTEMPLATE_ID;
+            ALTER TABLE EXPORTTEMPLATESELECTION DROP COLUMN EXPORTTEMPLATE_ID;
+            RENAME COLUMN EXPORTTEMPLATESELECTION.EXPORTTEMPLATE_ID_NEW TO EXPORTTEMPLATE_ID;
+        </sql>
+    </changeSet>
+    
+    <changeSet dbms="!derby" author="b.ulrich" id="a53a2f38-3788-44a2-a151-13b3853ccb74">
+        <modifyDataType tableName="EXPORTTEMPLATEPLACEOFUSE" columnName="EXPORTTEMPLATE_ID" newDataType="CHAR(36)"/>
+        <modifyDataType tableName="EXPORTTEMPLATEFIELD" columnName="EXPORTTEMPLATE_ID" newDataType="CHAR(36)"/>
+        <modifyDataType tableName="EXPORTTEMPLATESELECTION" columnName="EXPORTTEMPLATE_ID" newDataType="CHAR(36)"/>
     </changeSet>
 </databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.1.2/Notification/changelog.xml b/.liquibase/Data_alias/basic/2020.1.2/Notification/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1c9de620455f1a0e782540d3ca7e86c1181d8dbb
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.2/Notification/changelog.xml
@@ -0,0 +1,6 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+                   <include relativeToChangelogFile="true" file="init_NotificationType.xml"/>
+                   <include relativeToChangelogFile="true" file="insert_NotificationState.xml"/>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.1.2/Notification/init_NotificationType.xml b/.liquibase/Data_alias/basic/2020.1.2/Notification/init_NotificationType.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3d8f901c79b2216826873ea4664e1f1a401652fc
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.2/Notification/init_NotificationType.xml
@@ -0,0 +1,85 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="s.pongratz" id="b2894de0-4a19-4fcb-9412-0a5e91bfec80">
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="f862f71e-9155-4e88-8158-170ddfa4dbf3"/>
+            <column name="KEYID" value="_____SYSTEM_NOTIFICATION_PHONECALL"/>
+            <column name="TITLE" value="Phonecall"/>
+            <column name="CONTAINER" value="NotificationType"/>
+            <column name="SORTING" valueNumeric="0"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="19876b72-cd7d-4916-b853-22c4d9fe49c2"/>
+            <column name="KEYID" value="_____SYSTEM_NOTIFICATION_EMAIL"/>
+            <column name="TITLE" value="Email"/>
+            <column name="CONTAINER" value="NotificationType"/>
+            <column name="SORTING" valueNumeric="1"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="16f9fbb5-9b8a-4908-babd-06c86032a22b"/>
+            <column name="KEYID" value="_____SYSTEM_NOTIFICATION_APPOINTMENT"/>
+            <column name="TITLE" value="Appointment"/>
+            <column name="CONTAINER" value="NotificationType"/>
+            <column name="SORTING" valueNumeric="2"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="53458dba-80f5-427c-a44c-3fc8e74f3380"/>
+            <column name="KEYID" value="_____SYSTEM_NOTIFICATION_TODO"/>
+            <column name="TITLE" value="ToDo"/>
+            <column name="CONTAINER" value="NotificationType"/>
+            <column name="SORTING" valueNumeric="3"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="3d2393b3-ed13-44d6-9a6f-9280d84252cb"/>
+            <column name="KEYID" value="DownloadReady"/>
+            <column name="TITLE" value="download ready"/>
+            <column name="CONTAINER" value="NotificationType"/>
+            <column name="SORTING" valueNumeric="4"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="09ce4611-3254-4590-958a-79178924188b"/>
+            <column name="KEYID" value="BulkMailSent"/>
+            <column name="TITLE" value="bulk mail sent"/>
+            <column name="CONTAINER" value="NotificationType"/>
+            <column name="SORTING" valueNumeric="5"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="df47c6db-2a72-464a-b155-c4e33a4294ba"/>
+            <column name="KEYID" value="Leadimport_Notification"/>
+            <column name="TITLE" value="leadimport notification"/>
+            <column name="CONTAINER" value="NotificationType"/>
+            <column name="SORTING" valueNumeric="6"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+        
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="58281d88-71a7-4fa7-8ef8-9289fc904697"/>
+            <column name="KEYID" value="WorkflowNotification"/>
+            <column name="TITLE" value="workflow notification"/>
+            <column name="CONTAINER" value="NotificationType"/>
+            <column name="SORTING" valueNumeric="7"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.1.2/Notification/insert_NotificationState.xml b/.liquibase/Data_alias/basic/2020.1.2/Notification/insert_NotificationState.xml
new file mode 100644
index 0000000000000000000000000000000000000000..35501bf1692b76aa533e32e47930c612f0d97ef2
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.2/Notification/insert_NotificationState.xml
@@ -0,0 +1,15 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="s.pongratz" id="b2894de0-4a19-4fcb-9412-0a5e91bfec80">
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="daa6d8d8-fdc6-4fb2-9677-9ccc1f8a9b81"/>
+            <column name="KEYID" value="TODELETE"/>
+            <column name="TITLE" value="TODELETE"/>
+            <column name="CONTAINER" value="NotificationState"/>
+            <column name="SORTING" valueNumeric="4"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.1.2/changelog.xml b/.liquibase/Data_alias/basic/2020.1.2/changelog.xml
index 7564d2c1056f082eed989a808b8dd3c36756a230..1c85cb3902af93aedea0ecdcb568ade70245a5d0 100644
--- a/.liquibase/Data_alias/basic/2020.1.2/changelog.xml
+++ b/.liquibase/Data_alias/basic/2020.1.2/changelog.xml
@@ -1,9 +1,10 @@
 <?xml version="1.1" encoding="UTF-8" standalone="no"?>
 <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
-    <include file="AlterDocumentTemplatePlaceOfUseDatatype/changelog.xml" relativeToChangelogFile="true"/>
-    <include file="AddNullableToDateNew.xml" relativeToChangelogFile="true" />
+    <include file="AlterDatatypeOfKeyColumnsToChar/changelog.xml" relativeToChangelogFile="true"/>
+    <include file="AddNullableToDateNew.xml" relativeToChangelogFile="true" />    
     <include file="insert_workflowCategory_keyword.xml" relativeToChangelogFile="true"/>
+    <include file="Notification/changelog.xml" relativeToChangelogFile="true" />
     <include relativeToChangelogFile="true" file="drop_salesorder_unpaid.xml"/>
     <include relativeToChangelogFile="true" file="drop_salesorder_versnr.xml"/>
 </databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.1.2/insert_workflowCategory_keyword.xml b/.liquibase/Data_alias/basic/2020.1.2/insert_workflowCategory_keyword.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a4bbbd1638f60b4023e3ccab49955e358c011ba9
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.2/insert_workflowCategory_keyword.xml
@@ -0,0 +1,24 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="s.listl" id="38b13161-5163-48d9-9791-f9c7027cac62">
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="f241b36a-c2fe-40be-9e2e-8293c700d096"/>
+            <column name="KEYID" value="WORKFLOWCATEGORYMARKETING"/>
+            <column name="TITLE" value="Marketing"/>
+            <column name="CONTAINER" value="WorkflowCategory"/>
+            <column name="SORTING" valueNumeric="1"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="0"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="00a72718-554e-46ab-b83c-fb9b81be4be6"/>
+            <column name="KEYID" value="WORKFLOWCATEGORYRELEASE"/>
+            <column name="TITLE" value="Release"/>
+            <column name="CONTAINER" value="WorkflowCategory"/>
+            <column name="SORTING" valueNumeric="2"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+            <column name="ISESSENTIAL" valueNumeric="0"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.1.3/AlterButtonlabelTitles/AlterButtonLabelTitles.xml b/.liquibase/Data_alias/basic/2020.1.3/AlterButtonlabelTitles/AlterButtonLabelTitles.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5bc4d387a4d7bc4cdcc662a0fa1a30bce6ed7580
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.3/AlterButtonlabelTitles/AlterButtonLabelTitles.xml
@@ -0,0 +1,18 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="b.ulrich" id="853aca63-8234-4dfd-9fc6-2e8b71af82aa">
+        <update tableName="AB_KEYWORD_ENTRY">
+            <column name="TITLE" value="Read"/>
+            <where>AB_KEYWORD_ENTRYID='b5f402a0-29a0-43e9-8db3-454fdbcfc9d1'</where>
+        </update>
+        <update tableName="AB_KEYWORD_ENTRY">
+            <column name="TITLE" value="New"/>
+            <where>AB_KEYWORD_ENTRYID='678f61e5-ef27-4e1c-b52b-0e19188b038d'</where>
+        </update>
+        <update tableName="AB_KEYWORD_ENTRY">
+            <column name="TITLE" value="Archived"/>
+            <where>AB_KEYWORD_ENTRYID='1c40a2de-e6c1-469b-b324-d7089893ca5c'</where>
+        </update>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.1.3/VisitPlanEntry/rename_VisitPlanEntry_ORGANISATION_ID.xml b/.liquibase/Data_alias/basic/2020.1.3/VisitPlanEntry/rename_VisitPlanEntry_ORGANISATION_ID.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0603638910cfef98114adef301c6cffd487b4260
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.3/VisitPlanEntry/rename_VisitPlanEntry_ORGANISATION_ID.xml
@@ -0,0 +1,11 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+        <changeSet id="3d7f038c-04f1-45a2-9a1c-73c1a8666fea" author="b.ulrich" >
+    <renameColumn
+            columnDataType="CHAR(36)"  
+            newColumnName="ORGANISATION_CONTACT_ID"  
+            oldColumnName="ORGANISATION_ID"  
+            tableName="VISITPLANENTRY"/>  
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.1.3/changelog.xml b/.liquibase/Data_alias/basic/2020.1.3/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ac6898c7f18146b9aa3b2701ecc493491fa9d3f2
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.3/changelog.xml
@@ -0,0 +1,7 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <include file="AlterButtonLabelTitles/AlterButtonLabelTitles.xml" relativeToChangelogFile="true" />
+    <!--    disabled the following script since it is WIP-->
+    <!--<include file="VisitPlanEntry/rename_VisitPlanEntry_ORGANISATION_ID.xml" relativeToChangelogFile="true" />-->
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/visitplan.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/visitplan.xml
index af7e5d06f6b435f4ed23b000313f51c786bc0dfc..76b2a507a6cc1d7a3a10c71d177fcffa55ad4d8d 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/visitplan.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/visitplan.xml
@@ -15,7 +15,7 @@
           <column name="ENTRYDATE" valueDate="2020-05-18"/>
           <column name="BEGIN_TIME" value="10:00"/>
           <column name="END_TIME" value="11:00"/>
-          <column name="ORGANISATION_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
+          <column name="ORGANISATION_CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
           <column name ="CONTACT_ID" value="6c612f91-0160-4f09-9103-dccee7f7a6b7"/>
           <column name="VISITPLANEMPLOYEEWEEK_ID" value="821b3424-b6d2-41f8-b0b2-6a7c2c050214"/>
           <column name="STATUS" value="VISITSTATUSPLANNED                  "/>
@@ -25,7 +25,7 @@
           <column name="ENTRYDATE" valueDate="2020-05-19"/>
           <column name="BEGIN_TIME" value="14:00"/>
           <column name="END_TIME" value="17:00"/>
-          <column name="ORGANISATION_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
+          <column name="ORGANISATION_CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
           <column name ="CONTACT_ID" value="45635aca-7971-43df-a683-c80c86cb58cc"/>
           <column name="VISITPLANEMPLOYEEWEEK_ID" value="821b3424-b6d2-41f8-b0b2-6a7c2c050214"/>
           <column name="STATUS" value="VISITSTATUSPLANNED                  "/>
@@ -35,7 +35,7 @@
           <column name="ENTRYDATE" valueDate="2020-05-19"/>
           <column name="BEGIN_TIME" value="10:00"/>
           <column name="END_TIME" value="11:00"/>
-          <column name="ORGANISATION_ID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
+          <column name="ORGANISATION_CONTACT_ID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
           <column name ="CONTACT_ID" value="ef345d11-a40d-59e0-a24c-afcb6095d2cb"/>
           <column name="VISITPLANEMPLOYEEWEEK_ID" value="821b3424-b6d2-41f8-b0b2-6a7c2c050214"/>
           <column name="STATUS" value="VISITSTATUSPLANNED                  "/>
@@ -45,7 +45,7 @@
           <column name="ENTRYDATE" valueDate="2020-05-20"/>
           <column name="BEGIN_TIME" value="10:00"/>
           <column name="END_TIME" value="11:00"/>
-          <column name="ORGANISATION_ID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
+          <column name="ORGANISATION_CONTACT_ID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
           <column name ="CONTACT_ID" value="79ce56fc-0022-4d5c-91b1-080c0f1e2191"/>
           <column name="VISITPLANEMPLOYEEWEEK_ID" value="821b3424-b6d2-41f8-b0b2-6a7c2c050214"/>
           <column name="STATUS" value="VISITSTATUSPLANNED                  "/>
@@ -64,7 +64,7 @@
           <column name="ENTRYDATE" valueDate="2020-05-25"/>
           <column name="BEGIN_TIME" value="10:00"/>
           <column name="END_TIME" value="11:00"/>
-          <column name="ORGANISATION_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
+          <column name="ORGANISATION_CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
           <column name="VISITPLANEMPLOYEEWEEK_ID" value="73fbf25a-5668-411f-9ef5-42603d163a77"/>
           <column name="STATUS" value="VISITSTATUSPLANNED                  "/>
         </insert>
@@ -73,7 +73,7 @@
           <column name="ENTRYDATE" valueDate="2020-05-26"/>
           <column name="BEGIN_TIME" value="10:00"/>
           <column name="END_TIME" value="11:00"/>
-          <column name="ORGANISATION_ID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
+          <column name="ORGANISATION_CONTACT_ID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
           <column name="VISITPLANEMPLOYEEWEEK_ID" value="73fbf25a-5668-411f-9ef5-42603d163a77"/>
           <column name="STATUS" value="VISITSTATUSPLANNED                  "/>
         </insert>
@@ -82,7 +82,7 @@
           <column name="ENTRYDATE" valueDate="2020-05-27"/>
           <column name="BEGIN_TIME" value="10:00"/>
           <column name="END_TIME" value="11:00"/>
-          <column name="ORGANISATION_ID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
+          <column name="ORGANISATION_CONTACT_ID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
           <column name="VISITPLANEMPLOYEEWEEK_ID" value="73fbf25a-5668-411f-9ef5-42603d163a77"/>
           <column name="STATUS" value="VISITSTATUSPLANNED                  "/>
         </insert>
diff --git a/.liquibase/Data_alias/changelog.xml b/.liquibase/Data_alias/changelog.xml
index a8cc53b406959a8797b32a02af71dd93e1576384..415dcce4162c36e2f1c7945a6082d40e3968a5b1 100644
--- a/.liquibase/Data_alias/changelog.xml
+++ b/.liquibase/Data_alias/changelog.xml
@@ -14,7 +14,7 @@
     <include relativeToChangelogFile="true" file="basic/2020.1.0/changelog.xml"/>
     <include relativeToChangelogFile="true" file="basic/2020.1.1/changelog.xml"/>
     <include relativeToChangelogFile="true" file="basic/2020.1.2/changelog.xml"/>
-    
+
     <!--enable this only when you definetly want to overwrite the existing data with demo records:--> 
     <!--<include relativeToChangelogFile="true" file="basic/_demoData/changelog.xml" context="example"/>-->
 </databaseChangeLog>
\ No newline at end of file
diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod
index 80c4686210790a754e8528e02b583a833eebcfb3..6e685b98b76ffee42644c33a1e7fe269291ca42a 100644
--- a/aliasDefinition/Data_alias/Data_alias.aod
+++ b/aliasDefinition/Data_alias/Data_alias.aod
@@ -1180,12 +1180,12 @@
                 <name>MEDIUM_ID</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="12" />
+                <columnType v="1" />
                 <size v="36" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="true" />
+                <index v="false" />
                 <title>Medium</title>
                 <description></description>
                 <customProperties>
@@ -8275,7 +8275,7 @@
                 <columnType v="93" />
                 <size v="29" />
                 <scale v="9" />
-                <notNull v="false" />
+                <notNull v="true" />
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
@@ -8382,13 +8382,13 @@
               <entityFieldDb>
                 <name>DOCUMENTTEMPLATEID</name>
                 <dbName></dbName>
-                <primaryKey v="true" />
+                <primaryKey v="false" />
                 <columnType v="1" />
                 <size v="36" />
                 <scale v="0" />
-                <notNull v="true" />
-                <isUnique v="true" />
-                <index v="true" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
                 <documentation></documentation>
                 <title></title>
                 <description></description>
@@ -8560,7 +8560,7 @@
                 <columnType v="93" />
                 <size v="29" />
                 <scale v="9" />
-                <notNull v="false" />
+                <notNull v="true" />
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
@@ -8699,7 +8699,7 @@
                 <columnType v="93" />
                 <size v="29" />
                 <scale v="9" />
-                <notNull v="false" />
+                <notNull v="true" />
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
@@ -8957,7 +8957,7 @@
                 <columnType v="93" />
                 <size v="29" />
                 <scale v="9" />
-                <notNull v="false" />
+                <notNull v="true" />
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
@@ -9312,7 +9312,7 @@
                 <columnType v="93" />
                 <size v="29" />
                 <scale v="9" />
-                <notNull v="false" />
+                <notNull v="true" />
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
@@ -11604,7 +11604,7 @@
                 <columnType v="93" />
                 <size v="29" />
                 <scale v="9" />
-                <notNull v="false" />
+                <notNull v="true" />
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
@@ -11923,7 +11923,7 @@
                 <columnType v="93" />
                 <size v="29" />
                 <scale v="9" />
-                <notNull v="false" />
+                <notNull v="true" />
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
@@ -14019,12 +14019,12 @@
                 <name>EXPORTTEMPLATE_ID</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="12" />
+                <columnType v="1" />
                 <size v="36" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="true" />
+                <index v="false" />
                 <documentation></documentation>
                 <title></title>
                 <description></description>
@@ -14345,12 +14345,12 @@
                 <name>EXPORTTEMPLATE_ID</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="12" />
+                <columnType v="1" />
                 <size v="36" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="true" />
+                <index v="false" />
                 <documentation></documentation>
                 <title></title>
                 <description></description>
@@ -14400,12 +14400,12 @@
                 <name>EXPORTTEMPLATE_ID</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="12" />
+                <columnType v="1" />
                 <size v="36" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="true" />
+                <index v="false" />
                 <documentation></documentation>
                 <title></title>
                 <description></description>
diff --git a/entity/Address_entity/Address_entity.aod b/entity/Address_entity/Address_entity.aod
index a8fab2595e8795a739e854e715f1669bbd0477ac..0b6f95c995e62e440e543f9a9839fd760bf4a6c3 100644
--- a/entity/Address_entity/Address_entity.aod
+++ b/entity/Address_entity/Address_entity.aod
@@ -15,8 +15,6 @@
       <mandatoryProcess>%aditoprj%/entity/Address_entity/entityfields/address/mandatoryProcess.js</mandatoryProcess>
       <textInputAllowed v="true" />
       <stateProcess>%aditoprj%/entity/Address_entity/entityfields/address/stateProcess.js</stateProcess>
-      <valueProcess>%aditoprj%/entity/Address_entity/entityfields/address/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/Address_entity/entityfields/address/displayValueProcess.js</displayValueProcess>
       <onValueChange>%aditoprj%/entity/Address_entity/entityfields/address/onValueChange.js</onValueChange>
       <onValueChangeTypes>
         <element>MASK</element>
diff --git a/entity/Address_entity/entityfields/address/displayValueProcess.js b/entity/Address_entity/entityfields/address/displayValueProcess.js
deleted file mode 100644
index 18985f7a004b046c160746de13e8970eb6c87ece..0000000000000000000000000000000000000000
--- a/entity/Address_entity/entityfields/address/displayValueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.vars");
-import("system.result");
-
-// Needed for instant refresh if set by neon.setFieldValue
-// use the code if address webservice is active
-//result.string(vars.get("$field.ADDRESS"));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/address/valueProcess.js b/entity/Address_entity/entityfields/address/valueProcess.js
deleted file mode 100644
index 2c9d496185be419f31c762709ca97d83a1ae4bd4..0000000000000000000000000000000000000000
--- a/entity/Address_entity/entityfields/address/valueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.result");
-import("WsValidation_lib");
-import("system.vars");
-
-// use the code if address webservice is active
-//result.string(WsValidationUtils.valueFromJSON(vars.get("$this.value")));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/address_ws/valueProcess.js b/entity/Address_entity/entityfields/address_ws/valueProcess.js
index 5ccdf5a99f70f8b801158a56c1fa7b8136854130..2c7449d49d0036b67e5de71b0a7d7cf9b75876a9 100644
--- a/entity/Address_entity/entityfields/address_ws/valueProcess.js
+++ b/entity/Address_entity/entityfields/address_ws/valueProcess.js
@@ -1,3 +1,5 @@
+import("system.vars");
 import("WsValidation_lib");
 
-WsValidationFieldUtils.wsValueProcess(WsValidationType.get().TYPE_STREET_NOMINATIM, "$field.ADDRESS");
\ No newline at end of file
+if(!vars.get("$this.value"))
+    WsValidationFieldUtils.wsValueProcess(WsValidationType.get().TYPE_STREET_NOMINATIM, "$field.ADDRESS");
\ No newline at end of file
diff --git a/entity/AnyContact_entity/AnyContact_entity.aod b/entity/AnyContact_entity/AnyContact_entity.aod
index b9e852b3b2ae077b24a41200d051dad37e408a9a..c9855622f5a88df06c57b8c307adf3df0b6b88e7 100644
--- a/entity/AnyContact_entity/AnyContact_entity.aod
+++ b/entity/AnyContact_entity/AnyContact_entity.aod
@@ -4,7 +4,7 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/entity/AnyContact_entity/documentation.adoc</documentation>
   <contentTitleProcess>%aditoprj%/entity/AnyContact_entity/contentTitleProcess.js</contentTitleProcess>
-  <onInit>%aditoprj%/entity/AnyContact_entity/onInit.js</onInit>
+  <initFilterProcess>%aditoprj%/entity/AnyContact_entity/initFilterProcess.js</initFilterProcess>
   <imageProcess>%aditoprj%/entity/AnyContact_entity/imageProcess.js</imageProcess>
   <recordContainer>db</recordContainer>
   <entityFields>
diff --git a/entity/AnyContact_entity/initFilterProcess.js b/entity/AnyContact_entity/initFilterProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..695577262bdb7ee4519993bcaf130262075e81ca
--- /dev/null
+++ b/entity/AnyContact_entity/initFilterProcess.js
@@ -0,0 +1,19 @@
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+var statusInactive = $KeywordRegistry.contactStatus$inactive();
+var filter = {
+    type: "group",
+    operator: "AND",
+    childs: [{
+        type: "row",
+        name: "STATUS",
+        operator: "NOT_EQUAL",
+        contenttype: "TEXT",
+        key: statusInactive,
+        value: KeywordUtils.getViewValue($KeywordRegistry.contactStatus(), statusInactive)
+    }]
+};
+
+result.string(JSON.stringify(filter));
\ No newline at end of file
diff --git a/entity/AnyContact_entity/onInit.js b/entity/AnyContact_entity/onInit.js
deleted file mode 100644
index a75a8d405e273b1b3e026251a305676c2ccbd9ad..0000000000000000000000000000000000000000
--- a/entity/AnyContact_entity/onInit.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import("system.neon");
-import("Keyword_lib");
-import("system.vars");
-import("KeywordRegistry_basic");
-
-var statusFilterElement = {
-        "type":"row",
-        "name":"STATUS",
-        "operator":"NOT_EQUAL",
-        "key":$KeywordRegistry.contactStatus$inactive(),
-        "contenttype": "TEXT"
-};
-    
-statusFilterElement.value = KeywordUtils.getViewValue($KeywordRegistry.contactStatus(), statusFilterElement.key);
-    
-var filter = {
-        "type":"group",
-        "operator":"AND",
-        "childs": [statusFilterElement]
-};
-    
-filter = JSON.stringify(filter);
-neon.setFilter("#ENTITY", filter);
\ No newline at end of file
diff --git a/entity/Appointment_entity/Appointment_entity.aod b/entity/Appointment_entity/Appointment_entity.aod
index 28c70af66100db91d5c2b61eea6d9ff584fb5832..c68158fb3304f71cc78829cd7f1490171a04782b 100644
--- a/entity/Appointment_entity/Appointment_entity.aod
+++ b/entity/Appointment_entity/Appointment_entity.aod
@@ -183,6 +183,7 @@
         <entityParameter>
           <name>AppointmentState_param</name>
           <valueProcess>%aditoprj%/entity/Appointment_entity/entityfields/appointmentlinks/children/appointmentstate_param/valueProcess.js</valueProcess>
+          <expose v="false" />
         </entityParameter>
       </children>
     </entityConsumer>
diff --git a/entity/Appointment_entity/entityfields/begin/valueProcess.js b/entity/Appointment_entity/entityfields/begin/valueProcess.js
index 494b5d528f0bac0d2135955a873332e8a462641b..87e3ad4739d488a6973d66b2320eac4c6e31dfd4 100644
--- a/entity/Appointment_entity/entityfields/begin/valueProcess.js
+++ b/entity/Appointment_entity/entityfields/begin/valueProcess.js
@@ -19,8 +19,8 @@ if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$para
 /**
  * Sets explicitly the start date when a preset is sent from the core, due to a move or resize event from the user. Do not remove.
  */
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && vars.exists("$param.Entry_param"))
-{
-    let event = JSON.parse(vars.getString("$param.Entry_param"));
-    result.string(event[calendars.DTSTART]);
-}
\ No newline at end of file
+//if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && vars.exists("$param.Entry_param"))
+//{
+//    var 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 23262e1a868e63515d37b22d4124b1d79728cc74..4f9cd21b8a46a565aab9140cd54114628d793305 100644
--- a/entity/Appointment_entity/entityfields/end/valueProcess.js
+++ b/entity/Appointment_entity/entityfields/end/valueProcess.js
@@ -19,8 +19,8 @@ if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$para
 /**
  * Sets explicitly the end date when a preset is sent from the core, due to a move or resize event from the user. Do not remove.
  */
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && vars.exists("$param.Entry_param"))
-{
-    let event = JSON.parse(vars.getString("$param.Entry_param"));
-    result.string(event[calendars.DTEND]);
-}
\ No newline at end of file
+//if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && vars.exists("$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/Appointment_entity/recordcontainers/jdito/contentProcess.js b/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js
index 7e8972a145953d11163f3fccc1879487dea6e31b..e56415a0faf52007f91bcc4e92f9ae20aebfa819 100644
--- a/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js
@@ -13,7 +13,25 @@ import("system.neon");
 var appointmentSelect = newSelect("APPOINTMENT_ID").from("AB_APPOINTMENTLINK");
 var appointmentUids;
 
-if(vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW && vars.get("$local.idvalues") != null && vars.get("$local.idvalues") != "")
+/**
+ * Will be used, if the user is operating the calendar.
+ */
+if(vars.exists("$param.Entry_param") && vars.get("$param.Entry_param"))
+{
+    var entry = JSON.parse(vars.getString("$param.Entry_param"));
+
+    var masterEntry = null;
+    if (vars.exists("$param.MasterEntry_param") && vars.get("$param.MasterEntry_param") != "") {
+        masterEntry = JSON.parse(vars.getString("$param.MasterEntry_param"));
+    }
+
+    //@TODO Icon 
+    result.object([
+        buildEntry(entry, masterEntry)
+    ]);
+}
+
+else if(vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW && vars.get("$local.idvalues") != null && vars.get("$local.idvalues") != "")
 {
     var selectedids = vars.get("$local.idvalues");
     result.object([buildEntry(calendars.getEntry(selectedids, null, null), null)]);
@@ -35,23 +53,6 @@ else if(vars.getString("$param.LinkedObjectId_param") != undefined)
     appointmentSelect.whereIfSet("AB_APPOINTMENTLINK.OBJECT_ROWID", "$param.LinkedObjectId_param")
     result.object(buildEntriesFromUids(appointmentSelect.table()));
 }
-/**
- * Will be used, if the user is operating the calendar.
- */
-else if(vars.exists("$param.Entry_param") && vars.get("$param.Entry_param"))
-{
-    var entry = JSON.parse(vars.getString("$param.Entry_param"));
-
-    var masterEntry = null;
-    if (vars.exists("$param.MasterEntry_param") && vars.get("$param.MasterEntry_param") != "") {
-        masterEntry = JSON.parse(vars.getString("$param.MasterEntry_param"));
-    }
-
-    //@TODO Icon 
-    result.object([
-        buildEntry(entry, masterEntry)
-    ]);
-}
 
 function buildEntriesFromUids(appointmentUids)
 {
diff --git a/entity/Appointment_entity/recordcontainers/jdito/onUpdate.js b/entity/Appointment_entity/recordcontainers/jdito/onUpdate.js
index d9c947a770aed397a837cdea2483289f3d0ef2de..32ea225c34405b2ce25a50d2199e8c1800ae20c6 100644
--- a/entity/Appointment_entity/recordcontainers/jdito/onUpdate.js
+++ b/entity/Appointment_entity/recordcontainers/jdito/onUpdate.js
@@ -56,7 +56,7 @@ if(event)
             event[calendars.REMINDER_DURATION] = fields["REMINDER.value"];
         }
         
-        if(event[calendars.RRULE])
+        if(fields["RRULE.value"])
             event[calendars.RRULE] = [fields["RRULE.value"]];
         
         // Adds the required X-Header for status actions needed by Exchange and Domino
diff --git a/entity/AttributeUsage_entity/entityfields/date_new/valueProcess.js b/entity/AttributeUsage_entity/entityfields/date_new/valueProcess.js
deleted file mode 100644
index 7acb3c80848f54a4c6dfee5efa7a5b8514dd4a71..0000000000000000000000000000000000000000
--- a/entity/AttributeUsage_entity/entityfields/date_new/valueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.vars");
-import("system.result");
-import("system.neon");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-    result.string(vars.getString("$sys.date"));
\ No newline at end of file
diff --git a/entity/AttributeUsage_entity/entityfields/user_new/valueProcess.js b/entity/AttributeUsage_entity/entityfields/user_new/valueProcess.js
deleted file mode 100644
index a8a5e28793c742f8f3e10907976e746faf43c67c..0000000000000000000000000000000000000000
--- a/entity/AttributeUsage_entity/entityfields/user_new/valueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.vars");
-import("system.result");
-import("system.neon");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-    result.string(vars.getString("$sys.user"));
\ No newline at end of file
diff --git a/entity/Attribute_entity/entityfields/attributeactions/children/newchildattribute/stateProcess.js b/entity/Attribute_entity/entityfields/attributeactions/children/newchildattribute/stateProcess.js
index 1d16d29705904d8d5e24c0c3990b0d6b9693bcca..a1ee18e84b4a9407a6334fc9924ef885a41c7176 100644
--- a/entity/Attribute_entity/entityfields/attributeactions/children/newchildattribute/stateProcess.js
+++ b/entity/Attribute_entity/entityfields/attributeactions/children/newchildattribute/stateProcess.js
@@ -3,7 +3,7 @@ import("system.result");
 import("system.vars");
 import("system.neon");
 
-if(vars.get("$sys.selection").length == 1 && (vars.get("$field.ATTRIBUTE_TYPE") == $AttributeTypes.GROUP.toString() || vars.get("$field.ATTRIBUTE_TYPE") == $AttributeTypes.OBJECTSELECTION.toString()))
+if(vars.get("$sys.selection").length == 1 && AttributeTypeUtil.isGroupType(vars.get("$field.ATTRIBUTE_TYPE")))
     result.string(neon.COMPONENTSTATE_EDITABLE);
 else
     result.string(neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
diff --git a/entity/Attribute_entity/entityfields/date_new/valueProcess.js b/entity/Attribute_entity/entityfields/date_new/valueProcess.js
deleted file mode 100644
index 7acb3c80848f54a4c6dfee5efa7a5b8514dd4a71..0000000000000000000000000000000000000000
--- a/entity/Attribute_entity/entityfields/date_new/valueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.vars");
-import("system.result");
-import("system.neon");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-    result.string(vars.getString("$sys.date"));
\ No newline at end of file
diff --git a/entity/Attribute_entity/entityfields/keywordattributetype/children/containername_param/valueProcess.js b/entity/Attribute_entity/entityfields/keywordattributetype/children/containername_param/valueProcess.js
deleted file mode 100644
index dc6dfca332983312b5fc1181f8a357c182ac603f..0000000000000000000000000000000000000000
--- a/entity/Attribute_entity/entityfields/keywordattributetype/children/containername_param/valueProcess.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import("system.result");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
-result.string($KeywordRegistry.attributeType());
\ No newline at end of file
diff --git a/entity/Attribute_entity/entityfields/user_new/valueProcess.js b/entity/Attribute_entity/entityfields/user_new/valueProcess.js
deleted file mode 100644
index a8a5e28793c742f8f3e10907976e746faf43c67c..0000000000000000000000000000000000000000
--- a/entity/Attribute_entity/entityfields/user_new/valueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.vars");
-import("system.result");
-import("system.neon");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-    result.string(vars.getString("$sys.user"));
\ 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 07c57c1e196e3db902ee7f56434ab85cdcda55af..6db4d90300246ab7382bfbcf8db4efe6ec9572e7 100644
--- a/entity/CampaignParticipant_entity/entityfields/campaign_id/onValueChange.js
+++ b/entity/CampaignParticipant_entity/entityfields/campaign_id/onValueChange.js
@@ -4,6 +4,6 @@ import("system.vars");
 
 if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW)
 {
-    var stepId = CampaignUtils.getDefaultCampaignStep(vars.get("local.value"));
+    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/entityfields/participantscommrestiction/children/contactid_param/valueProcess.js b/entity/CampaignParticipant_entity/entityfields/participantscommrestiction/children/contactid_param/valueProcess.js
deleted file mode 100644
index f5825a6c09c99e0530939a270bcd81cfbc0c2d5b..0000000000000000000000000000000000000000
--- a/entity/CampaignParticipant_entity/entityfields/participantscommrestiction/children/contactid_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.result");
-import("system.vars");
-
-result.string(vars.getString("$field.CONTACT_ID"));
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/entityfields/selectedcampaign/onValueChange.js b/entity/CampaignParticipant_entity/entityfields/selectedcampaign/onValueChange.js
deleted file mode 100644
index 2bf64744b6548030c6db0cb825f376192bfdf5e1..0000000000000000000000000000000000000000
--- a/entity/CampaignParticipant_entity/entityfields/selectedcampaign/onValueChange.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.neon");
-
-
-neon.setFieldValue("$field.SYSTEMTEMPLATE", templateId);
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/entityfields/campaign_id/valueProcess.js b/entity/CampaignStep_entity/entityfields/campaign_id/valueProcess.js
index b91c3634ae7fa3229e120ed364433b3f7787b276..04d8b224fd5596fc97753ed1afd61ad16cee5b4c 100644
--- a/entity/CampaignStep_entity/entityfields/campaign_id/valueProcess.js
+++ b/entity/CampaignStep_entity/entityfields/campaign_id/valueProcess.js
@@ -3,5 +3,5 @@ import("system.result");
 import("system.vars");
 
 //For creation of new Step in CampaignMainView
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.campaignId_param") && vars.get("$param.campaignId_param"))
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.campaignId_param") && vars.get("$param.campaignId_param") && !vars.get("$this.value"))
     result.string(vars.get("$param.campaignId_param"));
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/state.displayvalue/expression.js b/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/state.displayvalue/expression.js
deleted file mode 100644
index f0e8a44adee3749dafae8e5cba1b67c52701e01a..0000000000000000000000000000000000000000
--- a/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/state.displayvalue/expression.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.result");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
-var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.campaignStepState(), "CAMPAIGNSTEP.STATUS");
-result.string(sql);
\ No newline at end of file
diff --git a/entity/Campaign_entity/Campaign_entity.aod b/entity/Campaign_entity/Campaign_entity.aod
index a9420fd4fbb060bb56b80f2efa888981a719029e..6f35c476eb9f55b732f36f8bf0a22a9a1cd02921 100644
--- a/entity/Campaign_entity/Campaign_entity.aod
+++ b/entity/Campaign_entity/Campaign_entity.aod
@@ -624,10 +624,6 @@
           <name>CURRENCY.displayValue</name>
           <expression>%aditoprj%/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/currency.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>COUNT.value</name>
-          <expression>%aditoprj%/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/count.value/expression.js</expression>
-        </dbRecordFieldMapping>
         <aggregateFieldDbMapping>
           <name>COUNT_aggregate.value</name>
           <recordfield>CAMPAIGN.CAMPAIGNID</recordfield>
diff --git a/entity/Contact_entity/Contact_entity.aod b/entity/Contact_entity/Contact_entity.aod
index 82c35b3c618ecc933e74b694daa96ad9f97cbfa4..ad05310a9dd5d918ce46a6b17a4ec7564dad10ba 100644
--- a/entity/Contact_entity/Contact_entity.aod
+++ b/entity/Contact_entity/Contact_entity.aod
@@ -8,8 +8,8 @@
   <grantUpdateProcess>%aditoprj%/entity/Contact_entity/grantUpdateProcess.js</grantUpdateProcess>
   <grantDeleteProcess>%aditoprj%/entity/Contact_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/Contact_entity/contentTitleProcess.js</contentTitleProcess>
-  <onInit>%aditoprj%/entity/Contact_entity/onInit.js</onInit>
   <onValidation>%aditoprj%/entity/Contact_entity/onValidation.js</onValidation>
+  <initFilterProcess>%aditoprj%/entity/Contact_entity/initFilterProcess.js</initFilterProcess>
   <iconId>VAADIN:USERS</iconId>
   <titlePlural>Contacts</titlePlural>
   <recordContainer>db</recordContainer>
diff --git a/entity/Contact_entity/entityfields/organisation_id/displayValueProcess.js b/entity/Contact_entity/entityfields/organisation_id/displayValueProcess.js
index 460b39849d5d34bac95e4b987d28a665b732e860..25f85ab3968071cfcfc4df692b11e5b3cc4f168b 100644
--- a/entity/Contact_entity/entityfields/organisation_id/displayValueProcess.js
+++ b/entity/Contact_entity/entityfields/organisation_id/displayValueProcess.js
@@ -3,7 +3,7 @@ import("system.db");
 import("system.vars");
 import("Contact_lib");
 
-var organisationId = vars.get("$field.ORGANISATION_ID");
-var res = OrganisationUtils.getNameByOrganisationId(organisationId);
+var organisationContactId = vars.get("$field.ORGANISATION_CONTACTID");
+var res = OrganisationUtils.getNameByContactId(organisationContactId);
 
 result.string(res);
\ No newline at end of file
diff --git a/entity/Contact_entity/initFilterProcess.js b/entity/Contact_entity/initFilterProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..695577262bdb7ee4519993bcaf130262075e81ca
--- /dev/null
+++ b/entity/Contact_entity/initFilterProcess.js
@@ -0,0 +1,19 @@
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+var statusInactive = $KeywordRegistry.contactStatus$inactive();
+var filter = {
+    type: "group",
+    operator: "AND",
+    childs: [{
+        type: "row",
+        name: "STATUS",
+        operator: "NOT_EQUAL",
+        contenttype: "TEXT",
+        key: statusInactive,
+        value: KeywordUtils.getViewValue($KeywordRegistry.contactStatus(), statusInactive)
+    }]
+};
+
+result.string(JSON.stringify(filter));
\ No newline at end of file
diff --git a/entity/Contact_entity/onInit.js b/entity/Contact_entity/onInit.js
deleted file mode 100644
index ad4324c7682881b8e9ca470e334269ae822ec522..0000000000000000000000000000000000000000
--- a/entity/Contact_entity/onInit.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import("system.neon");
-import("Keyword_lib");
-import("system.vars");
-import("KeywordRegistry_basic");
-
-var statusFilterElement = {
-        "type":"row",
-        "name":"STATUS",
-        "operator":"NOT_EQUAL",
-        "key":$KeywordRegistry.contactStatus$inactive(),
-        "contenttype": vars.get("$property.STATUS.contentType")
-};
-    
-statusFilterElement.value = KeywordUtils.getViewValue($KeywordRegistry.contactStatus(), statusFilterElement.key);
-    
-var filter = {
-        "type":"group",
-        "operator":"AND",
-        "childs": [statusFilterElement]
-};
-    
-filter = JSON.stringify(filter);
-neon.setFilter("#ENTITY", filter);
\ No newline at end of file
diff --git a/entity/Document_entity/Document_entity.aod b/entity/Document_entity/Document_entity.aod
index fa1098dc639a05b340f5fc1a6fda4ca95bb2d521..9e489aa2dd1130329252a759b2ddecca7fc7b297 100644
--- a/entity/Document_entity/Document_entity.aod
+++ b/entity/Document_entity/Document_entity.aod
@@ -118,6 +118,7 @@
       <name>IS_MAIN_DOCUMENT</name>
       <title>Main document</title>
       <contentType>BOOLEAN</contentType>
+      <placeholderProcess>%aditoprj%/entity/Document_entity/entityfields/is_main_document/placeholderProcess.js</placeholderProcess>
       <dropDownProcess>%aditoprj%/entity/Document_entity/entityfields/is_main_document/dropDownProcess.js</dropDownProcess>
       <valueProcess>%aditoprj%/entity/Document_entity/entityfields/is_main_document/valueProcess.js</valueProcess>
       <onValueChange>%aditoprj%/entity/Document_entity/entityfields/is_main_document/onValueChange.js</onValueChange>
diff --git a/entity/Document_entity/entityfields/is_main_document/placeholderProcess.js b/entity/Document_entity/entityfields/is_main_document/placeholderProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8b541d6a62aef80de1307ed68f9344719ec9febb
--- /dev/null
+++ b/entity/Document_entity/entityfields/is_main_document/placeholderProcess.js
@@ -0,0 +1,4 @@
+import("system.translate");
+import("system.result");
+
+result.string(translate.text("Main document"));
\ No newline at end of file
diff --git a/entity/Email_entity/Email_entity.aod b/entity/Email_entity/Email_entity.aod
index fc65d44a8a9fde47fccacef66a19b03e60160dfc..b14e753e4e989ccf0645d68cb7bca2f6cca765c4 100644
--- a/entity/Email_entity/Email_entity.aod
+++ b/entity/Email_entity/Email_entity.aod
@@ -119,7 +119,7 @@
     </entityParameter>
     <entityActionField>
       <name>sendMail</name>
-      <title>send mail</title>
+      <title>{SEND_MAIL}</title>
       <onActionProcess>%aditoprj%/entity/Email_entity/entityfields/sendmail/onActionProcess.js</onActionProcess>
       <iconId>VAADIN:AT</iconId>
       <stateProcess>%aditoprj%/entity/Email_entity/entityfields/sendmail/stateProcess.js</stateProcess>
@@ -128,6 +128,12 @@
       <name>AdditionalPlaceholders_param</name>
       <expose v="true" />
     </entityParameter>
+    <entityParameter>
+      <name>OfferId_param</name>
+      <expose v="true" />
+      <mandatory v="true" />
+      <documentation>%aditoprj%/entity/Email_entity/entityfields/offerid_param/documentation.adoc</documentation>
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <datalessRecordContainer>
diff --git a/entity/Email_entity/entityfields/offerid_param/documentation.adoc b/entity/Email_entity/entityfields/offerid_param/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..cc60a8f815575f3ed65faa6cc6634e6878b173c6
--- /dev/null
+++ b/entity/Email_entity/entityfields/offerid_param/documentation.adoc
@@ -0,0 +1,3 @@
+=OfferId_pram
+
+optional param needed for the offerEmails, to change the status of the offer
\ No newline at end of file
diff --git a/entity/Email_entity/entityfields/sendmail/onActionProcess.js b/entity/Email_entity/entityfields/sendmail/onActionProcess.js
index a7bdf5af9030a2f9352c7f5ccd597d334995fd35..74810743f42a7d88c0dfd8989917e0603864ba98 100644
--- a/entity/Email_entity/entityfields/sendmail/onActionProcess.js
+++ b/entity/Email_entity/entityfields/sendmail/onActionProcess.js
@@ -1,3 +1,5 @@
+import("KeywordRegistry_basic");
+import("Sql_lib");
 import("system.translate");
 import("ActivityTask_lib");
 import("system.neon");
@@ -38,6 +40,11 @@ var eml = EmailWritingUtils.openMailTemplate(
     additionalPlaceholders
 );
 
+if(vars.get("$param.ComingFrom_param") == "Offer")
+{
+    newWhere("OFFER.OFFERID", vars.get("$param.OfferId_param"))
+    .updateData(true, "OFFER", ["STATUS"], null, [$KeywordRegistry.offerStatus$sent()]);
+}
 
 if (notificationMsg)
     question.showMessage(notificationMsg, question.INFORMATION, notificationTitle);
\ No newline at end of file
diff --git a/entity/Employee_entity/entityfields/contact_id/onValueChange.js b/entity/Employee_entity/entityfields/contact_id/onValueChange.js
index d469435d5c78d77ed6371942df1cb330d36389d3..4a1dbe67e5fb2353cd24c297f9ca0c1eb08e9304 100644
--- a/entity/Employee_entity/entityfields/contact_id/onValueChange.js
+++ b/entity/Employee_entity/entityfields/contact_id/onValueChange.js
@@ -22,7 +22,7 @@ if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.r
     neon.setFieldValues({
         "$field.FIRSTNAME" : name[0] || "",
         "$field.LASTNAME" : name[1] || "",
-        "$field.EMAIL_ADDRESS" : name[2] || "",
+        "$field.EMAIL_ADDRESS" : name[2] || vars.get("$field.EMAIL_ADDRESS") || "",
         "$field.TITLE" : username
     });
 }
\ No newline at end of file
diff --git a/entity/Employee_entity/entityfields/email_address/dropDownProcess.js b/entity/Employee_entity/entityfields/email_address/dropDownProcess.js
index 99e97c2dddc0cae705cdc328a215b226a386f227..559a598b48b1f347bf21ee32e097eacc741b1083 100644
--- a/entity/Employee_entity/entityfields/email_address/dropDownProcess.js
+++ b/entity/Employee_entity/entityfields/email_address/dropDownProcess.js
@@ -6,7 +6,7 @@ import("system.result");
 import("Sql_lib");
 
 var contactId = vars.get("$field.CONTACT_ID");
-if (contactId && (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW))
+if (contactId)
 {
     var addresses = newSelect("ADDR, ADDR")
                 .from("COMMUNICATION")
diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
index 2d0edd64d5ba7e6d9b3e6463f32144b574509094..33635f575600381c7558ab9a11193459f32ac1cb 100644
--- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod
+++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
@@ -583,6 +583,12 @@
           <fieldName>CategoryKeyword</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>644a6101-6b11-4998-bd8d-b799c6f376fa</name>
+          <entityName>Notification_entity</entityName>
+          <fieldName>TypeKeywords</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
diff --git a/entity/Language_entity/Language_entity.aod b/entity/Language_entity/Language_entity.aod
index 4511f71a29b7613767ddba5aeddac2e16e5dfb8e..a103f19dab7068536886bfa494e959490bf7ab1b 100644
--- a/entity/Language_entity/Language_entity.aod
+++ b/entity/Language_entity/Language_entity.aod
@@ -121,6 +121,7 @@
     <dbRecordContainer>
       <name>db</name>
       <alias>Data_alias</alias>
+      <isPageable v="false" />
       <conditionProcess>%aditoprj%/entity/Language_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
       <linkInformation>
         <linkInformation>
@@ -143,16 +144,20 @@
         <dbRecordFieldMapping>
           <name>ISO3.value</name>
           <recordfield>AB_LANGUAGE.ISO3</recordfield>
-          <isFilterable v="true" />
-          <isLookupFilter v="true" />
+          <isFilterable v="false" />
+          <isLookupFilter v="false" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>NAME_LATIN.value</name>
           <recordfield>AB_LANGUAGE.NAME_LATIN</recordfield>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>NAME_NATIVE.value</name>
           <recordfield>AB_LANGUAGE.NAME_NATIVE</recordfield>
+          <isFilterable v="false" />
+          <isLookupFilter v="false" />
         </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
diff --git a/entity/Leadimport_entity/entityfields/leadimportreset/onActionProcess.js b/entity/Leadimport_entity/entityfields/leadimportreset/onActionProcess.js
index c7b4f0fdf7661d9430c260c73320cac09a35dec8..e3ab27e0a12c8b09990f1739ec1e11464248d700 100644
--- a/entity/Leadimport_entity/entityfields/leadimportreset/onActionProcess.js
+++ b/entity/Leadimport_entity/entityfields/leadimportreset/onActionProcess.js
@@ -46,7 +46,7 @@ function _deleteData (pTableName, pleadimportId, pdateADayBefor)
 {
     let uTableName = pTableName.charAt(0);
     newWhere(pTableName + "." + pTableName + "ID", 
-        newSelect(pTableName + "." + pTableName + "ID")
+        newSelect(uTableName + "." + pTableName + "ID")
         .from(pTableName, uTableName)
         .join("LEADLOG", "LEADLOG.DATE_NEW = " + uTableName + ".DATE_NEW")
         .where(uTableName + ".USER_NEW = LEADLOG.USER_NEW")
diff --git a/entity/Notification_entity/Notification_entity.aod b/entity/Notification_entity/Notification_entity.aod
index a3dad29fd35c166e1bed11548b79bff253145df2..990b2e77775f315eb4600a2961136a8a962d8efb 100644
--- a/entity/Notification_entity/Notification_entity.aod
+++ b/entity/Notification_entity/Notification_entity.aod
@@ -34,7 +34,7 @@
     </entityField>
     <entityField>
       <name>CAPTION</name>
-      <title>title</title>
+      <title>Title</title>
     </entityField>
     <entityField>
       <name>CREATIONDATE</name>
@@ -45,7 +45,7 @@
     </entityField>
     <entityField>
       <name>DESCRIPTION</name>
-      <title>description</title>
+      <title>Description</title>
     </entityField>
     <entityField>
       <name>FORCEDPRIORITY</name>
@@ -68,6 +68,7 @@
     <entityField>
       <name>TYPECODE</name>
       <title>Type</title>
+      <consumer>TypeKeywords</consumer>
       <groupable v="true" />
       <displayValueProcess>%aditoprj%/entity/Notification_entity/entityfields/typecode/displayValueProcess.js</displayValueProcess>
     </entityField>
@@ -103,7 +104,7 @@
           <title>set Read</title>
           <description></description>
           <onActionProcess>%aditoprj%/entity/Notification_entity/entityfields/setnotificationstate/children/setread/onActionProcess.js</onActionProcess>
-          <isSelectionAction v="true" />
+          <isSelectionAction v="false" />
           <iconId>VAADIN:OPEN_BOOK</iconId>
           <tooltip></tooltip>
           <tooltipProcess>%aditoprj%/entity/Notification_entity/entityfields/setnotificationstate/children/setread/tooltipProcess.js</tooltipProcess>
@@ -126,7 +127,7 @@
     </entityActionField>
     <entityField>
       <name>RESOLVEDPRIORITY</name>
-      <title>priority</title>
+      <title>Priority</title>
       <consumer>PrioKeywords</consumer>
       <textInputAllowed v="false" />
     </entityField>
@@ -158,11 +159,27 @@
         </entityParameter>
       </children>
     </entityConsumer>
+    <entityConsumer>
+      <name>TypeKeywords</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/Notification_entity/entityfields/typekeywords/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
       <name>db</name>
       <alias>_____SYSTEMALIAS</alias>
+      <maximumDbRows v="200" />
+      <isPageable v="false" />
       <fromClauseProcess>%aditoprj%/entity/Notification_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
       <conditionProcess>%aditoprj%/entity/Notification_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
       <orderClauseProcess>%aditoprj%/entity/Notification_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
diff --git a/entity/Notification_entity/entityfields/setnotificationstate/children/setread/onActionProcess.js b/entity/Notification_entity/entityfields/setnotificationstate/children/setread/onActionProcess.js
index 5ee955fd6389e03589d671d10bb0f51aa70a8bb2..d9ff8a7c8fcb193f4d0e526aaa0c517caa3b48b2 100644
--- a/entity/Notification_entity/entityfields/setnotificationstate/children/setread/onActionProcess.js
+++ b/entity/Notification_entity/entityfields/setnotificationstate/children/setread/onActionProcess.js
@@ -1,11 +1,20 @@
+import("Sql_lib");
 import("system.vars");
 import("system.tools");
 import("system.notification");
 import("system.neon");
+import("KeywordRegistry_basic");
 
 var user = tools.getCurrentUser();
 var selectedNotifications = vars.get("$sys.selection");
 
+if (selectedNotifications.length == 0){
+    selectedNotifications = newSelect("ASYS_NOTIFICATIONS.ID")
+    .from("ASYS_NOTIFICATIONS")
+    .where("ASYS_NOTIFICATIONS.STATE", [notification.STATE_SEEN.toString(), notification.STATE_UNSEEN.toString()], SqlBuilder.IN())
+    .arrayColumn();
+}
+
 for(var i = 0; i < selectedNotifications.length; i++)
     notification.updateUserNotificationState(user["name"], selectedNotifications[i], notification.STATE_CONFIRMED);
 
diff --git a/entity/Notification_entity/entityfields/state/displayValueProcess.js b/entity/Notification_entity/entityfields/state/displayValueProcess.js
index fcd088324b80387634096e3d62a49a2e82974495..277c05aab18dbce9a8a0a5f7bc078c8ada84c94d 100644
--- a/entity/Notification_entity/entityfields/state/displayValueProcess.js
+++ b/entity/Notification_entity/entityfields/state/displayValueProcess.js
@@ -1,24 +1,6 @@
-import("system.translate");
+import("Keyword_lib");
 import("system.result");
 import("system.vars");
+import("KeywordRegistry_basic");
 
-var value = vars.get("$field.STATE");
-
-switch(value)
-{
-    case "SEEN":
-        result.string(translate.text("Seen"));
-        break;
-    case "CONFIRMED":
-        result.string(translate.text("Confirmed"));
-        break;
-    case "TODELETE":
-        result.string(translate.text("To Delete"));
-        break;
-    case "ARCHIVE":
-        result.string(translate.text("Archive"));
-        break;
-    default:
-        result.string(translate.text("Unseen"));
-        break;
-}
\ No newline at end of file
+result.string(KeywordUtils.getViewValue($KeywordRegistry.notificationState(), vars.get("$field.STATE")));
\ No newline at end of file
diff --git a/entity/Notification_entity/entityfields/statekeywords/children/containername_param/valueProcess.js b/entity/Notification_entity/entityfields/statekeywords/children/containername_param/valueProcess.js
index a5407effb79841e7d2492e6f27f3ce81bfa33a51..f39ea4075a7d01b5ebcd3b54a316ce20694c3e79 100644
--- a/entity/Notification_entity/entityfields/statekeywords/children/containername_param/valueProcess.js
+++ b/entity/Notification_entity/entityfields/statekeywords/children/containername_param/valueProcess.js
@@ -1,4 +1,5 @@
 import("system.result");
+import("KeywordRegistry_basic");
 
 
-result.string("NotificationState");
\ No newline at end of file
+result.string($KeywordRegistry.notificationState());
\ No newline at end of file
diff --git a/entity/Notification_entity/entityfields/typecode/displayValueProcess.js b/entity/Notification_entity/entityfields/typecode/displayValueProcess.js
index 76e8d769dc2a82a791668c8df8783f1bfee95141..fcf893072cda6e8d5248ec3392af95b9c2feb13c 100644
--- a/entity/Notification_entity/entityfields/typecode/displayValueProcess.js
+++ b/entity/Notification_entity/entityfields/typecode/displayValueProcess.js
@@ -1,28 +1,6 @@
+import("Keyword_lib");
 import("system.result");
-import("system.translate");
 import("system.vars");
+import("KeywordRegistry_basic");
 
-var PREFIX = "_____SYSTEM_";
-var typecode = vars.get("$field.TYPECODE");
-
-switch(typecode)
-{
-    case PREFIX + "NOTIFICATION_PHONECALL":
-        result.string(translate.text("Phonecall"));
-        break;
-        
-    case PREFIX + "NOTIFICATION_EMAIL":
-        result.string(translate.text("Email"));
-        break;
-        
-    case PREFIX + "NOTIFICATION_APPOINTMENT":
-        result.string(translate.text("Appointment"));
-        break;
-        
-    case PREFIX + "NOTIFICATION_TODO":
-        result.string(translate.text("Todo"));
-        break;
-        
-    default: 
-        result.string(typecode);
-}
\ No newline at end of file
+result.string(KeywordUtils.getViewValue($KeywordRegistry.notificationType(), vars.get("$field.TYPECODE")));
\ No newline at end of file
diff --git a/entity/Notification_entity/entityfields/typekeywords/children/containername_param/valueProcess.js b/entity/Notification_entity/entityfields/typekeywords/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8ccc4158b03124fe0be85ad1ffaeeca86efb0fb2
--- /dev/null
+++ b/entity/Notification_entity/entityfields/typekeywords/children/containername_param/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("KeywordRegistry_basic");
+
+
+result.string($KeywordRegistry.notificationType());
\ No newline at end of file
diff --git a/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js b/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js
index 55ac5773b3cb1302c26846d766e066c70d64222f..4ea71164c3cd8f2f93b39be55a3555cbf9b8090a 100644
--- a/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js
@@ -234,7 +234,7 @@ function _getEntryData(pObjectId, pDirection, pRelationType1, pRelationType2, pP
     if (pRelationType1 == undefined || pRelationType2 == undefined) 
         return [];
     
-    var [myNum, otherNum] = pDirection == "normal" ? [2, 1] : [1, 2];
+    var [myNum, otherNum] = pDirection == "normal" ? [1, 2] : [2, 1];
     
     onConditionForRelationTypeJoin = newWhere("AB_OBJECTRELATIONTYPEID = AB_OBJECTRELATIONTYPE" + myNum)
         .and("AB_OBJECTRELATION.AB_OBJECTRELATIONTYPE1", pRelationType1)
diff --git a/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js b/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js
index a5b761ab29d8a43dfb5e9f3aa4a2b19a79bf057c..108e16a1568111f622d71415968423884be95d78 100644
--- a/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js
+++ b/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js
@@ -27,9 +27,5 @@ attachmentArray[0] = offerReport;
 var additionalPlaceholders = [
     new Placeholder("offerCode", Placeholder.types.FIXEDVALUE, vars.get("$field.FullOfferCode"))
 ];
-
-EmailWritingUtils.sendReportAsMail(contactId, attachmentArray, "Offer", notificationMsg, emailFilename, additionalPlaceholders);
-
-newWhere("OFFER.OFFERID", "$field.OFFERID")
-    .updateData(true, "OFFER", ["STATUS"], null, [$KeywordRegistry.offerStatus$sent()]);
-
+var offerId = vars.get("$field.OFFERID")
+EmailWritingUtils.sendReportAsMail(contactId, attachmentArray, "Offer", notificationMsg, emailFilename, additionalPlaceholders, offerId);
\ No newline at end of file
diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod
index 26fe1fdb3d81b895c3116377537320ae54a77d70..cbd7cb44ef5d77d0e3656bfe5867f3c3f68ce8f8 100644
--- a/entity/Organisation_entity/Organisation_entity.aod
+++ b/entity/Organisation_entity/Organisation_entity.aod
@@ -7,8 +7,9 @@
   <title>Company</title>
   <grantDeleteProcess>%aditoprj%/entity/Organisation_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/Organisation_entity/contentTitleProcess.js</contentTitleProcess>
-  <onInit>%aditoprj%/entity/Organisation_entity/onInit.js</onInit>
+  <afterUiInit>%aditoprj%/entity/Organisation_entity/afterUiInit.js</afterUiInit>
   <afterOperatingState>%aditoprj%/entity/Organisation_entity/afterOperatingState.js</afterOperatingState>
+  <initFilterProcess>%aditoprj%/entity/Organisation_entity/initFilterProcess.js</initFilterProcess>
   <iconId>VAADIN:BUILDING</iconId>
   <imageProcess>%aditoprj%/entity/Organisation_entity/imageProcess.js</imageProcess>
   <titlePlural>Companies</titlePlural>
diff --git a/entity/Organisation_entity/afterUiInit.js b/entity/Organisation_entity/afterUiInit.js
new file mode 100644
index 0000000000000000000000000000000000000000..d529418d07b0567a96364d831a8a27194c2eca23
--- /dev/null
+++ b/entity/Organisation_entity/afterUiInit.js
@@ -0,0 +1,7 @@
+import("system.neon");
+import("system.vars");
+import("Context_lib");
+import("Attribute_lib");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    AttributeRelationUtils.presetMandatoryAttributes(ContextUtils.getCurrentContextId(), "Attributes");
\ No newline at end of file
diff --git a/entity/Organisation_entity/initFilterProcess.js b/entity/Organisation_entity/initFilterProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..26ce7fa02bbaeaa2d25db318aa011b67278354cc
--- /dev/null
+++ b/entity/Organisation_entity/initFilterProcess.js
@@ -0,0 +1,19 @@
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+import("system.result");
+
+var statusInactive = $KeywordRegistry.contactStatus$inactive();
+var filter = {
+    type: "group",
+    operator: "AND",
+    childs: [{
+        type: "row",
+        name: "STATUS",
+        operator: "NOT_EQUAL",
+        contenttype: "TEXT",
+        key: statusInactive,
+        value: KeywordUtils.getViewValue($KeywordRegistry.contactStatus(), statusInactive)
+    }]
+};
+    
+result.string(JSON.stringify(filter));
\ No newline at end of file
diff --git a/entity/Organisation_entity/onInit.js b/entity/Organisation_entity/onInit.js
deleted file mode 100644
index b9717583554415c62b48c4ad8304aceb87245938..0000000000000000000000000000000000000000
--- a/entity/Organisation_entity/onInit.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-import("system.neon");
-import("system.vars");
-import("Context_lib");
-import("Attribute_lib");
-
-var statusFilterElement = {
-        "type":"row",
-        "name":"STATUS",
-        "operator":"NOT_EQUAL",
-        "key":$KeywordRegistry.contactStatus$inactive(),
-        "contenttype": "TEXT"
-};
-    
-statusFilterElement.value = KeywordUtils.getViewValue($KeywordRegistry.contactStatus(), statusFilterElement.key);
-    
-var filter = {
-        "type":"group",
-        "operator":"AND",
-        "childs": [statusFilterElement]
-};
-    
-filter = JSON.stringify(filter);
-neon.setFilter("#ENTITY", filter);
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-{
-    AttributeRelationUtils.presetMandatoryAttributes(ContextUtils.getCurrentContextId(), "Attributes");
-}
diff --git a/entity/PermissionCalendar_entity/PermissionCalendar_entity.aod b/entity/PermissionCalendar_entity/PermissionCalendar_entity.aod
index a238832f1d236913854ff9ffa634281c3081d5ec..c2faec477ab09d9a7d1b57c5c8f74b8f4bf4fc19 100644
--- a/entity/PermissionCalendar_entity/PermissionCalendar_entity.aod
+++ b/entity/PermissionCalendar_entity/PermissionCalendar_entity.aod
@@ -96,6 +96,7 @@
           <isMenuAction v="true" />
           <isObjectAction v="false" />
           <isSelectionAction v="false" />
+          <iconId>VAADIN:USER</iconId>
           <state>AUTO</state>
           <tooltip></tooltip>
         </entityActionField>
@@ -104,6 +105,7 @@
           <title>Receive new Department Permission</title>
           <onActionProcess>%aditoprj%/entity/PermissionCalendar_entity/entityfields/addactions/children/receivenewdepartmentpermissiondealteraction/onActionProcess.js</onActionProcess>
           <isObjectAction v="false" />
+          <iconId>VAADIN:GROUP</iconId>
           <state>AUTO</state>
         </entityActionField>
       </children>
diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod
index cbabea32766c97f2a7d1faa4fcc2ede5fd2a3048..907d1408a4c2c5606ddcc61e47249d015939e3e3 100644
--- a/entity/Person_entity/Person_entity.aod
+++ b/entity/Person_entity/Person_entity.aod
@@ -10,9 +10,10 @@
   </siblings>
   <grantDeleteProcess>%aditoprj%/entity/Person_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/Person_entity/contentTitleProcess.js</contentTitleProcess>
-  <onInit>%aditoprj%/entity/Person_entity/onInit.js</onInit>
+  <afterUiInit>%aditoprj%/entity/Person_entity/afterUiInit.js</afterUiInit>
   <onValidation>%aditoprj%/entity/Person_entity/onValidation.js</onValidation>
   <afterOperatingState>%aditoprj%/entity/Person_entity/afterOperatingState.js</afterOperatingState>
+  <initFilterProcess>%aditoprj%/entity/Person_entity/initFilterProcess.js</initFilterProcess>
   <iconId>VAADIN:USERS</iconId>
   <imageProcess>%aditoprj%/entity/Person_entity/imageProcess.js</imageProcess>
   <usePermissions v="false" />
diff --git a/entity/Person_entity/afterUiInit.js b/entity/Person_entity/afterUiInit.js
new file mode 100644
index 0000000000000000000000000000000000000000..d529418d07b0567a96364d831a8a27194c2eca23
--- /dev/null
+++ b/entity/Person_entity/afterUiInit.js
@@ -0,0 +1,7 @@
+import("system.neon");
+import("system.vars");
+import("Context_lib");
+import("Attribute_lib");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    AttributeRelationUtils.presetMandatoryAttributes(ContextUtils.getCurrentContextId(), "Attributes");
\ No newline at end of file
diff --git a/entity/Person_entity/initFilterProcess.js b/entity/Person_entity/initFilterProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..26ce7fa02bbaeaa2d25db318aa011b67278354cc
--- /dev/null
+++ b/entity/Person_entity/initFilterProcess.js
@@ -0,0 +1,19 @@
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+import("system.result");
+
+var statusInactive = $KeywordRegistry.contactStatus$inactive();
+var filter = {
+    type: "group",
+    operator: "AND",
+    childs: [{
+        type: "row",
+        name: "STATUS",
+        operator: "NOT_EQUAL",
+        contenttype: "TEXT",
+        key: statusInactive,
+        value: KeywordUtils.getViewValue($KeywordRegistry.contactStatus(), statusInactive)
+    }]
+};
+    
+result.string(JSON.stringify(filter));
\ No newline at end of file
diff --git a/entity/Person_entity/onInit.js b/entity/Person_entity/onInit.js
deleted file mode 100644
index 1958e327f289481afe51088aa62d5d57af3a782f..0000000000000000000000000000000000000000
--- a/entity/Person_entity/onInit.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-import("system.neon");
-import("system.vars");
-import("Context_lib");
-import("Attribute_lib");
-
-var statusFilterElement = {
-        "type":"row",
-        "name":"STATUS",
-        "operator":"NOT_EQUAL",
-        "key":$KeywordRegistry.contactStatus$inactive(),
-        "contenttype": "TEXT"
-};
-    
-statusFilterElement.value = KeywordUtils.getViewValue($KeywordRegistry.contactStatus(), statusFilterElement.key);
-    
-var filter = {
-        "type":"group",
-        "operator":"AND",
-        "childs": [statusFilterElement]
-};
-    
-filter = JSON.stringify(filter);
-neon.setFilter("#ENTITY", filter);   
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-{
-    AttributeRelationUtils.presetMandatoryAttributes(ContextUtils.getCurrentContextId(), "Attributes");
-}
diff --git a/entity/Salesproject_entity/onValidation.js b/entity/Salesproject_entity/onValidation.js
index e0b1e589a7543108c938f3dbb1d9c75b58908753..c9618796815b4f0e83c28c43a12320cd981a3ed9 100644
--- a/entity/Salesproject_entity/onValidation.js
+++ b/entity/Salesproject_entity/onValidation.js
@@ -1,3 +1,4 @@
+import("system.translate");
 import("system.result");
 import("Date_lib");
 import("system.vars");
@@ -6,4 +7,6 @@ var startDate = vars.get("$field.STARTDATE");
 var endDate = vars.get("$field.ENDDATE");
 
 if (!DateUtils.validateBeginnBeforeEnd(startDate, endDate))
-    result.string(DateUtils.getValidationFailString());
\ No newline at end of file
+    result.string(DateUtils.getValidationFailString());
+else if(!vars.get("$field.PROJECTTITLE") && vars.get("$field.PROJECTTYPE") && vars.exists("$param.PresetTitle_param"))
+    result.string(translate.text("The Sales Project can only be filled when a company has been specified"));
\ No newline at end of file
diff --git a/entity/Task_entity/Task_entity.aod b/entity/Task_entity/Task_entity.aod
index 14cdb18785867088dbb7220fa1bb33afc7b479a3..64f381e93f98b991c2c8502acfc95780050d98c6 100644
--- a/entity/Task_entity/Task_entity.aod
+++ b/entity/Task_entity/Task_entity.aod
@@ -6,8 +6,9 @@
   <title>Task</title>
   <grantDeleteProcess>%aditoprj%/entity/Task_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/Task_entity/contentTitleProcess.js</contentTitleProcess>
-  <onInit>%aditoprj%/entity/Task_entity/onInit.js</onInit>
+  <afterUiInit>%aditoprj%/entity/Task_entity/afterUiInit.js</afterUiInit>
   <onValidation>%aditoprj%/entity/Task_entity/onValidation.js</onValidation>
+  <initFilterProcess>%aditoprj%/entity/Task_entity/initFilterProcess.js</initFilterProcess>
   <iconId>VAADIN:TASKS</iconId>
   <iconIdProcess>%aditoprj%/entity/Task_entity/iconIdProcess.js</iconIdProcess>
   <titlePlural>Tasks</titlePlural>
diff --git a/entity/Task_entity/afterUiInit.js b/entity/Task_entity/afterUiInit.js
new file mode 100644
index 0000000000000000000000000000000000000000..2f108ba446930b67156ba07b5e880b1ff371117a
--- /dev/null
+++ b/entity/Task_entity/afterUiInit.js
@@ -0,0 +1,6 @@
+import("system.neon");
+import("system.vars");
+import("ActivityTask_lib");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    TaskUtils.addLinkRecords("$param.ObjectId_param", "$param.RowId_param", "$param.PresetLinks_param", "$field.PARENT_CONTEXT", "$field.PARENT_ID");
\ No newline at end of file
diff --git a/entity/Task_entity/initFilterProcess.js b/entity/Task_entity/initFilterProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..39b6e0b2e29be0e89c1cf8279ab9c9ae93a74ab9
--- /dev/null
+++ b/entity/Task_entity/initFilterProcess.js
@@ -0,0 +1,19 @@
+import("system.result");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+var statusEnded = $KeywordRegistry.taskStatus$ended();
+var filter = {
+    type: "group",
+    operator: "AND",
+    childs: [{
+        type: "row",
+        name: "STATUS",
+        operator: "NOT_EQUAL",
+        contenttype: "TEXT",
+        key: statusEnded,
+        value: KeywordUtils.getViewValue($KeywordRegistry.taskStatus(), statusEnded)
+    }]
+};
+
+result.string(JSON.stringify(filter));
\ No newline at end of file
diff --git a/entity/Task_entity/onInit.js b/entity/Task_entity/onInit.js
deleted file mode 100644
index 0a610862cbb9ecae7e44e15eabbc31b0b20eceda..0000000000000000000000000000000000000000
--- a/entity/Task_entity/onInit.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import("system.neon");
-import("system.vars");
-import("system.neon");
-import("ActivityTask_lib");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
-var recordState = vars.get("$sys.recordstate");
-if(recordState == neon.OPERATINGSTATE_NEW)
-{
-    TaskUtils.addLinkRecords("$param.ObjectId_param", "$param.RowId_param", "$param.PresetLinks_param", "$field.PARENT_CONTEXT", "$field.PARENT_ID");
-}
-else if (recordState != neon.OPERATINGSTATE_SEARCH)
-{
-    var statusFilterElement = {
-        "type":"row",
-        "name":"STATUS",
-        "operator":"NOT_EQUAL",
-        "key":$KeywordRegistry.taskStatus$ended(),
-        "contenttype": "TEXT"
-    };
-    statusFilterElement.value = KeywordUtils.getViewValue($KeywordRegistry.taskStatus(), statusFilterElement.key);
-    
-    var filter = {
-        "type":"group",
-        "operator":"AND",
-        "childs": [statusFilterElement]
-    };
-    filter = JSON.stringify(filter);
-    neon.setFilter("#ENTITY", filter);
-}
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod
index 46740270752b5207fb8b62d480d5ebf3c57259e9..1af833e9b8e4f3713455bea35ac9402bc3d1e732 100644
--- a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod
+++ b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod
@@ -30,14 +30,14 @@
       <displayValueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/status/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
-      <name>ORGANISATION_ID</name>
-      <documentation>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/organisation_id/documentation.adoc</documentation>
+      <name>ORGANISATION_CONTACT_ID</name>
+      <documentation>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/organisation_contact_id/documentation.adoc</documentation>
       <title>Organisation</title>
       <consumer>Organisations</consumer>
       <mandatory v="true" />
-      <stateProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/organisation_id/stateProcess.js</stateProcess>
-      <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/organisation_id/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/organisation_id/displayValueProcess.js</displayValueProcess>
+      <stateProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/organisation_contact_id/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/organisation_contact_id/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/organisation_contact_id/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
       <name>ENTRYDATE</name>
@@ -247,10 +247,10 @@
           <name>END_TIME.value</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
-          <name>ORGANISATION_ID.value</name>
+          <name>ORGANISATION_CONTACT_ID.value</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
-          <name>ORGANISATION_ID.displayValue</name>
+          <name>ORGANISATION_CONTACT_ID.displayValue</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
           <name>CONTACT_ID.value</name>
diff --git a/entity/VisitPlanEntry_entity/documentation.adoc b/entity/VisitPlanEntry_entity/documentation.adoc
index fe840f04ecae1b740eca60633420ce2d1f362c95..13c58c22da0edc3d1657fcdc58b7043705a181e2 100644
--- a/entity/VisitPlanEntry_entity/documentation.adoc
+++ b/entity/VisitPlanEntry_entity/documentation.adoc
@@ -2,7 +2,8 @@
 
 For storing Visitentries with their information(date, time, contact, and most importantly: it's Status).
 Linked to VisitPlanEmployeeWeek_entity so you only see the entries in the chosen week.
-ORGANISATION_ID is used to store the company that's being visited, CONTACT_ID to Store the Point-of-Contact, 
+ORGANISATION_CONTACT_ID is used to store the company that's being visited, 
+CONTACT_ID to Store the Point-of-Contact, 
 since you are normally visiting one specific person.
 
 Keep in mind, that only the organization is important for the visitRecommendations and not the Point of Contact.
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/contact_id/onValidation.js b/entity/VisitPlanEntry_entity/entityfields/contact_id/onValidation.js
index 03f6b8014252f4c2405882dda74d4955d797c27f..bf3542dc528bf679b61175ff20d1e2cec67e3e60 100644
--- a/entity/VisitPlanEntry_entity/entityfields/contact_id/onValidation.js
+++ b/entity/VisitPlanEntry_entity/entityfields/contact_id/onValidation.js
@@ -3,7 +3,7 @@ import("system.result");
 import("Contact_lib");
 import("system.vars");
 
-var orgId = vars.get("$field.ORGANISATION_ID");
+var orgId = vars.get("$field.ORGANISATION_CONTACT_ID");
 var contactId = vars.get("$field.CONTACT_ID");
 var orgContactId = ContactUtils.getPersOrgIds(contactId)[2];
 
diff --git a/entity/VisitPlanEntry_entity/entityfields/contact_id/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/contact_id/valueProcess.js
index fe203ca7a71f6d00e5a41fc9b1d2447822c43177..0c443c043435687de4551ffd16df721652c159e0 100644
--- a/entity/VisitPlanEntry_entity/entityfields/contact_id/valueProcess.js
+++ b/entity/VisitPlanEntry_entity/entityfields/contact_id/valueProcess.js
@@ -12,6 +12,6 @@ if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.v
                             .from("CONTACT")
                             .where("CONTACT.CONTACTID", contactId)
                             .cell();
-    neon.setFieldValue("$field.ORGANISATION_ID", orgId);
+    neon.setFieldValue("$field.ORGANISATION_CONTACT_ID", orgId);
     result.string(vars.get("$param.ContactId_param"));
 }
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/onActionProcess.js b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/onActionProcess.js
index 0af8e295e63255fb7540147e6904e87cc65eb4fa..5fdb3779fc2b8699a502c17353bbf34ff9a59bb1 100644
--- a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/onActionProcess.js
+++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/onActionProcess.js
@@ -17,7 +17,7 @@ var pointOfContact = newSelect("CONTACT.CONTACTID", db.getCurrentAlias())
                                 .leftJoin("AB_ATTRIBUTE", "AB_ATTRIBUTE.AB_ATTRIBUTEID = AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID")
                                 .leftJoin("ORGANISATION", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
                                 .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", $AttributeRegistry.visitPlanPointOfContact()) 
-                                .and("CONTACT.CONTACTID", vars.get("$field.ORGANISATION_ID"))
+                                .and("CONTACT.CONTACTID", vars.get("$field.ORGANISATION_CONTACT_ID"))
                                 .cell();
 var context;
 
@@ -25,7 +25,7 @@ if(pointOfContact)
     links.push([ContactUtils.getContextByContactId(pointOfContact), pointOfContact]);
 else
 {
-    var contactId = vars.get("$field.ORGANISATION_ID");
+    var contactId = vars.get("$field.ORGANISATION_CONTACT_ID");
     context = ContactUtils.getContextByContactId(contactId);
     if(context == 'Person')
     {
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/onActionProcess.js b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/onActionProcess.js
index e9a7e5846d28fb6ffb8fcd6d7878ff3ea199d5f9..12468e7c64aa2eb7b2f20bf1ea259b0843a594ef 100644
--- a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/onActionProcess.js
+++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/onActionProcess.js
@@ -40,8 +40,8 @@ var entryDateAsLong = selectionRowData[0].ENTRYDATE;
 var entryDate = datetime.toDate(entryDateAsLong, "dd-MM-yyyy");
 var startTime = selectionRowData[0].BEGIN_TIME;
 var endTime = selectionRowData[0].END_TIME;
-var organisation_id = selectionRowData[0].ORGANISATION_ID;
-var organisationName = OrganisationUtils.getNameByOrganisationId(organisation_id);
+var organisationContact_id = selectionRowData[0].ORGANISATION_CONTACT_ID;
+var organisationName = OrganisationUtils.getNameByContactId(organisationContact_id);
 var contact_id = selectionRowData[0].CONTACT_ID;
 var contactName = ContactUtils.getFullTitleByContactId(contact_id);
 var contactMail = CommUtil.getStandardSubSqlMail(contact_id)
@@ -53,9 +53,9 @@ var department = contactData[0];
 var contactRole = contactData[1];
 var addressId = newSelect("CONTACT.ADDRESS_ID")
                             .from("CONTACT")
-                            .where("CONTACT.CONTACTID", organisation_id)
+                            .where("CONTACT.CONTACTID", organisationContact_id)
                             .cell();
-var organisationAddress = new AddrObject(organisation_id);
+var organisationAddress = new AddrObject(organisationContact_id);
 var organisationAddressFormatted = organisationAddress.getFormattedAddress(false, "{salutation_name}\n {street} {buildingno}\n {country_short} - {zip} {city}");
 var contactCommunication = newSelect("COMMUNICATION.MEDIUM_ID, COMMUNICATION.ADDR")
                                         .from("COMMUNICATION")
@@ -105,7 +105,7 @@ columnTypes = db.getColumnTypes("AB_APPOINTMENTLINK", columns, db.getCurrentAlia
 values = [util.getNewUUID(),
           uidAppointment[0],
           "Organisation",
-          organisation_id]
+          organisationContact_id]
 insert = db.insertData("AB_APPOINTMENTLINK", columns, columnTypes, values)
     
 values = [util.getNewUUID(),
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/onActionProcess.js b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/onActionProcess.js
index b926fc89ff6515951fc64f5cec927a60f8434174..dc5b0f07067f9de2b8ea08deebdb04d1940ce157 100644
--- a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/onActionProcess.js
+++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/openroute/onActionProcess.js
@@ -59,7 +59,7 @@ if(vars.exists("$param.Entries_param") && vars.get("$param.Entries_param"))
     var childAddresses = newSelect("ADDRESS, BUILDINGNO, ZIP, CITY, COUNTRY")
                                     .from("ADDRESS")
                                     .leftJoin("VISITPLANENTRY", "ADDRESS.ADDRESSID = (select ADDRESS_ID from CONTACT where CONTACT.CONTACTID \n\
-                                                = VISITPLANENTRY.ORGANISATION_ID)")
+                                                = VISITPLANENTRY.ORGANISATION_CONTACT_ID)")
                                     .where("VISITPLANENTRY.VISITPLANEMPLOYEEWEEK_ID", entryid)
                                     .and("VISITPLANENTRY.ENTRYDATE", entrydateDB)
                                     .table();
diff --git a/entity/VisitPlanEntry_entity/entityfields/organisation_id/displayValueProcess.js b/entity/VisitPlanEntry_entity/entityfields/organisation_contact_id/displayValueProcess.js
similarity index 74%
rename from entity/VisitPlanEntry_entity/entityfields/organisation_id/displayValueProcess.js
rename to entity/VisitPlanEntry_entity/entityfields/organisation_contact_id/displayValueProcess.js
index 4a069cec9dd05ddca04014ff4a5a534e07aff0fc..a5833c922a458e88908fd9b6a1f529d12ed6f498 100644
--- a/entity/VisitPlanEntry_entity/entityfields/organisation_id/displayValueProcess.js
+++ b/entity/VisitPlanEntry_entity/entityfields/organisation_contact_id/displayValueProcess.js
@@ -3,7 +3,7 @@ import("system.db");
 import("system.vars");
 import("Contact_lib");
 
-var contactid = vars.get("$field.ORGANISATION_ID");
+var contactid = vars.get("$field.ORGANISATION_CONTACT_ID");
 var res = ContactUtils.getFullTitleByContactId(contactid);
 
 result.string(res);
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/organisation_id/documentation.adoc b/entity/VisitPlanEntry_entity/entityfields/organisation_contact_id/documentation.adoc
similarity index 100%
rename from entity/VisitPlanEntry_entity/entityfields/organisation_id/documentation.adoc
rename to entity/VisitPlanEntry_entity/entityfields/organisation_contact_id/documentation.adoc
diff --git a/entity/VisitPlanEntry_entity/entityfields/organisation_id/stateProcess.js b/entity/VisitPlanEntry_entity/entityfields/organisation_contact_id/stateProcess.js
similarity index 100%
rename from entity/VisitPlanEntry_entity/entityfields/organisation_id/stateProcess.js
rename to entity/VisitPlanEntry_entity/entityfields/organisation_contact_id/stateProcess.js
diff --git a/entity/VisitPlanEntry_entity/entityfields/organisation_id/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/organisation_contact_id/valueProcess.js
similarity index 100%
rename from entity/VisitPlanEntry_entity/entityfields/organisation_id/valueProcess.js
rename to entity/VisitPlanEntry_entity/entityfields/organisation_contact_id/valueProcess.js
diff --git a/entity/VisitPlanEntry_entity/entityfields/persons/children/excludedcontactids_param/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/persons/children/excludedcontactids_param/valueProcess.js
index ec94b86401b566ada90ac2bd3f2d2c43bf78c950..e6afefc86171adad8a87dcf4e7570253fa9faa66 100644
--- a/entity/VisitPlanEntry_entity/entityfields/persons/children/excludedcontactids_param/valueProcess.js
+++ b/entity/VisitPlanEntry_entity/entityfields/persons/children/excludedcontactids_param/valueProcess.js
@@ -4,6 +4,6 @@ import("Sql_lib");
 
 var contactIdArray = newSelect("CONTACT.CONTACTID")
                                 .from("CONTACT")
-                                .where("CONTACT.ORGANISATION_ID", vars.get("$field.ORGANISATION_ID"), SqlBuilder.NOT_EQUAL())
+                                .where("CONTACT.ORGANISATION_ID", vars.get("$field.ORGANISATION_CONTACT_ID"), SqlBuilder.NOT_EQUAL())
                                 .arrayColumn()
 result.object(contactIdArray)
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/recordcontainers/jdito/contentProcess.js b/entity/VisitPlanEntry_entity/recordcontainers/jdito/contentProcess.js
index 9711f6208cf7dff928ac21b7b0a8cfc89f4b57e1..ce8bb62314fa0a0ae0023f81b31d95a3871bd812 100644
--- a/entity/VisitPlanEntry_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/VisitPlanEntry_entity/recordcontainers/jdito/contentProcess.js
@@ -16,7 +16,7 @@ var items = [];
 var group = [];
 var entryData = "";
 
-var entrySQL = newSelect("ENTRYDATE, VISITPLANENTRYID, BEGIN_TIME, END_TIME, ORGANISATION_ID, CONTACT_ID,STATUS, VISITPLANEMPLOYEEWEEK_ID, APPOINTMENT_ID")
+var entrySQL = newSelect("ENTRYDATE, VISITPLANENTRYID, BEGIN_TIME, END_TIME, ORGANISATION_CONTACT_ID, CONTACT_ID,STATUS, VISITPLANEMPLOYEEWEEK_ID, APPOINTMENT_ID")
                             .from("VISITPLANENTRY");
 
 if (vars.exists("$local.idvalues") && vars.get("$local.idvalues"))
@@ -46,11 +46,11 @@ if(entryData.length > 0)
 {
     for(var i = 0; i < entryData.length; i++)
     {
-        var entryDateRaw, visitPlanEntryId, beginn_time, end_time, organisation_id, contact_id, status, visitplanemployeeweek_id, appointmentid;
-        [entryDateRaw, visitPlanEntryId, beginn_time, end_time, organisation_id, contact_id, status, visitplanemployeeweek_id, appointmentid] = entryData[i]
+        var entryDateRaw, visitPlanEntryId, beginn_time, end_time, organisationContact_id, contact_id, status, visitplanemployeeweek_id, appointmentid;
+        [entryDateRaw, visitPlanEntryId, beginn_time, end_time, organisationContact_id, contact_id, status, visitplanemployeeweek_id, appointmentid] = entryData[i]
         
         var contactname = db.cell(PersUtils.getResolvingDisplaySubSql("'" + contact_id + "'"));
-        var orgname = OrganisationUtils.getNameByOrganisationId(organisation_id);
+        var orgname = OrganisationUtils.getNameByContactId(organisationContact_id);
         var parentName = translate.text(datetime.toDate(entryDateRaw, "EEEE"));
         entryDate = datetime.toDate(entryDateRaw, "dd.MM.yyyy");
 
@@ -58,7 +58,7 @@ if(entryData.length > 0)
         var alias = SqlUtils.getSystemAlias();
 
         items.push([visitPlanEntryId, false, parentName + "#" + entryDate, "",  beginn_time
-            , end_time, organisation_id, orgname, contact_id, contactname, entryDateRaw, status, visitplanemployeeweek_id, appointmentid, statusDisplay]);
+            , end_time, organisationContact_id, orgname, contact_id, contactname, entryDateRaw, status, visitplanemployeeweek_id, appointmentid, statusDisplay]);
 
         if(!vars.get("$local.idvalues"))
         {
diff --git a/entity/VisitPlanEntry_entity/recordcontainers/jdito/onInsert.js b/entity/VisitPlanEntry_entity/recordcontainers/jdito/onInsert.js
index c0f1048f2920e1035145fc0c8ac1dfb49f915cc3..16ad70016e8c50f71299875fd494e3da997b71ec 100644
--- a/entity/VisitPlanEntry_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/VisitPlanEntry_entity/recordcontainers/jdito/onInsert.js
@@ -58,7 +58,7 @@ var valuesEntry = [
     rowData["ENTRYDATE.value"],
     rowData["BEGIN_TIME.value"],
     rowData["END_TIME.value"],
-    rowData["ORGANISATION_ID.value"],
+    rowData["ORGANISATION_CONTACT_ID.value"],
     rowData["CONTACT_ID.value"],
     visitPlanEmployeeWeekID,
     rowData["STATUS.value"]
@@ -69,7 +69,7 @@ var columnsEntry = [
     "ENTRYDATE",
     "BEGIN_TIME",
     "END_TIME",
-    "ORGANISATION_ID",
+    "ORGANISATION_CONTACT_ID",
     "CONTACT_ID",
     "VISITPLANEMPLOYEEWEEK_ID",
     "STATUS"
diff --git a/entity/VisitPlanEntry_entity/recordcontainers/jdito/onUpdate.js b/entity/VisitPlanEntry_entity/recordcontainers/jdito/onUpdate.js
index 412b3644103fb32f8c640a802d03e2c8ef5782da..fd92c0fd0b725e26423a818adff2f2e87f7e66ad 100644
--- a/entity/VisitPlanEntry_entity/recordcontainers/jdito/onUpdate.js
+++ b/entity/VisitPlanEntry_entity/recordcontainers/jdito/onUpdate.js
@@ -10,7 +10,7 @@ var values = [
     rowData["ENTRYDATE.value"],
     rowData["BEGIN_TIME.value"],
     rowData["END_TIME.value"],
-    rowData["ORGANISATION_ID.value"],
+    rowData["ORGANISATION_CONTACT_ID.value"],
     rowData["STATUS"]
 ];
 
@@ -18,7 +18,7 @@ var columns = [
     "ENTRYDATE",
     "BEGIN_TIME",
     "END_TIME",
-    "ORGANISATION_ID",
+    "ORGANISATION_CONTACT_ID",
     "STATUS"
 ];
 
diff --git a/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js b/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js
index 26a88f95717ce53ce1723ca71443089d0e3a1540..4ec4a7d08e7f192053d1446f0a3ed507f8bde9ae 100644
--- a/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js
@@ -47,12 +47,12 @@ if(idValues == false)
                                                         "visitPlanFrequency.ID_VALUE", "'VISITFREQUENCY                      '", activitySubQuery, "CONTACTID",
                                             newSelect("min(ENTRYDATE)")
                                                         .from("VISITPLANENTRY") 
-                                                        .where("CONTACT.CONTACTID", "VISITPLANENTRY.ORGANISATION_ID") 
+                                                        .where("CONTACT.CONTACTID", "VISITPLANENTRY.ORGANISATION_CONTACT_ID") 
                                                         .and(newWhere("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$planned())
                                                             .or("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Appointmentarranged()))
                                                         .and("VISITPLANENTRY.ENTRYDATE", newSelect("min(vp.ENTRYDATE)")
                                                                                                     .from("VISITPLANENTRY", "vp")
-                                                                                                    .where(["VISITPLANENTRY", "ORGANISATION_ID", "vp"], "visitplanentry.ORGANISATION_ID")
+                                                                                                    .where(["VISITPLANENTRY", "ORGANISATION_CONTACT_ID", "vp"], "visitplanentry.ORGANISATION_CONTACT_ID")
                                                                                                     .and(["VISITPLANENTRY", "ENTRYDATE", "vp"], datetime.today())
                                                                                                     .and(newWhere(["VISITPLANENTRY", "STATUS", "vp"], 
                                                                                                     $KeywordRegistry.visitPlanEntryStatus$planned())
@@ -80,7 +80,7 @@ var recommendationSQLData = newSelect(["VISITRECOMMENDATIONID", "VISITRECOMMENDA
                 
     newSelect("min(ENTRYDATE)")
                 .from("VISITPLANENTRY")
-                .where("VISITPLANENTRY.ORGANISATION_ID", "VISITRECOMMENDATION.CONTACT_ID")
+                .where("VISITPLANENTRY.ORGANISATION_CONTACT_ID = VISITRECOMMENDATION.CONTACT_ID")
                 .and("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$planned())
                 .or("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Appointmentarranged())
                 .and("VISITPLANENTRY.entrydate", datetime.today(), SqlBuilder.GREATER())
@@ -89,7 +89,7 @@ var recommendationSQLData = newSelect(["VISITRECOMMENDATIONID", "VISITRECOMMENDA
     newSelect("VISITRECOMMENDATION.CONTACT_ID")
                 .from("VISITPLANEMPLOYEEWEEK, VISITPLANENTRY")
                 .where("VISITPLANENTRY.VISITPLANEMPLOYEEWEEK_ID", "VISITPLANEMPLOYEEWEEKID")
-                .and("VISITRECOMMENDATION.CONTACT_ID", "VISITPLANENTRY.ORGANISATION_ID")
+                .and("VISITRECOMMENDATION.CONTACT_ID = VISITPLANENTRY.ORGANISATION_CONTACT_ID")
                 .and(newWhere("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$planned())
                 .or("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Appointmentarranged()))
                 .and("VISITPLANENTRY.entrydate", newSelect("min(vp.entrydate)")
diff --git a/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod b/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod
index 1cd52f7035f12fffa8d282df67384589bd7c0eb5..db719f1fd0c9f75968b75227ffc77044223ce190 100644
--- a/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod
+++ b/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod
@@ -7,7 +7,6 @@
   <grantCreateProcess>%aditoprj%/entity/WorkflowDefinition_entity/grantCreateProcess.js</grantCreateProcess>
   <grantDelete v="false" />
   <contentTitleProcess>%aditoprj%/entity/WorkflowDefinition_entity/contentTitleProcess.js</contentTitleProcess>
-  <onInit>%aditoprj%/entity/WorkflowDefinition_entity/onInit.js</onInit>
   <iconId>VAADIN:DROP</iconId>
   <titlePlural>Workflow definitions</titlePlural>
   <recordContainer>jdito</recordContainer>
diff --git a/entity/WorkflowDefinition_entity/entityfields/categorykeyword/children/containername_param/valueProcess.js b/entity/WorkflowDefinition_entity/entityfields/categorykeyword/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d79eb290d58d4f19fbd534e91b252388749224ce
--- /dev/null
+++ b/entity/WorkflowDefinition_entity/entityfields/categorykeyword/children/containername_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("KeywordRegistry_basic");
+
+result.string($KeywordRegistry.workflowCategory());
\ No newline at end of file
diff --git a/entity/WorkflowDefinition_entity/onInit.js b/entity/WorkflowDefinition_entity/onInit.js
deleted file mode 100644
index 7199fd35b05e991cb7f35e577f1a7e593a28c60e..0000000000000000000000000000000000000000
--- a/entity/WorkflowDefinition_entity/onInit.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import("system.neon");
-import("system.vars");
-import("system.translate");
-
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW && vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET)
-{
-    var filterOnlyUnfinished = {
-        type : "group",
-        operator : "AND",
-        childs : [{
-            type : "row",
-            name : "ISFINISHED",
-            operator : "EQUAL",
-            value : translate.text("No"),
-            key : "false",
-            contenttype : "BOOLEAN"
-        }]
-    };
-    neon.setFilter("Instances", JSON.stringify(filterOnlyUnfinished));
-}
\ No newline at end of file
diff --git a/entity/WorkflowInstance_entity/WorkflowInstance_entity.aod b/entity/WorkflowInstance_entity/WorkflowInstance_entity.aod
index 37c5a337ba3fef1c5b2d8e9c3574bbea5404ef21..765793b9f379e0c813bca3b508491cf0dcba0421 100644
--- a/entity/WorkflowInstance_entity/WorkflowInstance_entity.aod
+++ b/entity/WorkflowInstance_entity/WorkflowInstance_entity.aod
@@ -5,6 +5,7 @@
   <documentation>%aditoprj%/entity/WorkflowInstance_entity/documentation.adoc</documentation>
   <title>Workflow instance</title>
   <contentTitleProcess>%aditoprj%/entity/WorkflowInstance_entity/contentTitleProcess.js</contentTitleProcess>
+  <initFilterProcess>%aditoprj%/entity/WorkflowInstance_entity/initFilterProcess.js</initFilterProcess>
   <titlePlural>Workflow instances</titlePlural>
   <recordContainer>jdito</recordContainer>
   <entityFields>
diff --git a/entity/WorkflowInstance_entity/initFilterProcess.js b/entity/WorkflowInstance_entity/initFilterProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..80a38560e27c2236fec97c140cbce55462a7c809
--- /dev/null
+++ b/entity/WorkflowInstance_entity/initFilterProcess.js
@@ -0,0 +1,17 @@
+import("system.result");
+import("system.translate");
+
+var filterOnlyUnfinished = {
+    type : "group",
+    operator : "AND",
+    childs : [{
+        type : "row",
+        name : "ISFINISHED",
+        operator : "EQUAL",
+        value : translate.text("No"),
+        key : "false",
+        contenttype : "BOOLEAN"
+    }]
+};
+
+result.string(JSON.stringify(filterOnlyUnfinished));
\ No newline at end of file
diff --git a/entity/WorkflowStartConfig_entity/imageProcess.js b/entity/WorkflowStartConfig_entity/imageProcess.js
index 34147b89bd271ec01be2bb3fa1c6eb055186963f..8b918cbc285c80f90e305b0b2aee6655949db65f 100644
--- a/entity/WorkflowStartConfig_entity/imageProcess.js
+++ b/entity/WorkflowStartConfig_entity/imageProcess.js
@@ -2,5 +2,5 @@ import("system.result");
 import("system.vars");
 import("system.project");
 
-var contextModel = project.getDataModel(project.DATAMODEL_KIND_CONTEXT, vars.get("$field.OBJECT_TYPE"));
+var contextModel = vars.get("$field.OBJECT_TYPE") && 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/entity/WorkflowTask_entity/WorkflowTask_entity.aod b/entity/WorkflowTask_entity/WorkflowTask_entity.aod
index f5bcf9949894d5335e68613b990e62b9066e0208..3ffbe846c77cc3e4d64c7ed734ff2399dc30450a 100644
--- a/entity/WorkflowTask_entity/WorkflowTask_entity.aod
+++ b/entity/WorkflowTask_entity/WorkflowTask_entity.aod
@@ -27,6 +27,7 @@
     </entityField>
     <entityField>
       <name>FORMDEFINITION</name>
+      <valueProcess>%aditoprj%/entity/WorkflowTask_entity/entityfields/formdefinition/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>FORMRESULT</name>
@@ -257,9 +258,6 @@
           <isFilterable v="true" />
           <isLookupFilter v="true" />
         </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>FORMDEFINITION.value</name>
-        </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
           <name>FORMRESULT.value</name>
         </jDitoRecordFieldMapping>
diff --git a/entity/WorkflowTask_entity/entityfields/formdefinition/valueProcess.js b/entity/WorkflowTask_entity/entityfields/formdefinition/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8fc3f05f70c0f41c45cc8b15489f265bfd8695d4
--- /dev/null
+++ b/entity/WorkflowTask_entity/entityfields/formdefinition/valueProcess.js
@@ -0,0 +1,9 @@
+import("system.result");
+import("system.vars");
+import("system.workflow");
+import("system.neon");
+
+//the value of this field can be set by the onValueChange process of FORMRESULT
+
+if (vars.get("$this.value") == null)
+    result.string(workflow.getFormProperties(vars.get("$field.UID")));
\ No newline at end of file
diff --git a/entity/WorkflowTask_entity/recordcontainers/jdito/contentProcess.js b/entity/WorkflowTask_entity/recordcontainers/jdito/contentProcess.js
index de6e83f10c3755c6281daacaedff352aeb93ba55..ed15981f641e6ef0941c2d5298ba177b24c8a080 100644
--- a/entity/WorkflowTask_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/WorkflowTask_entity/recordcontainers/jdito/contentProcess.js
@@ -96,7 +96,6 @@ result.object((function ()
             task.processDefinitionId,
             task.processInstanceId,
             Date.parse(task.createTime).toString(),
-            workflow.getFormProperties(task.id) || "",
             "",
             variables.USER_ID || "",
             task.description || "",
diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
index ed12fc0f39983f65d9e03fa38e9411b86427147a..aac9f1e3a87bf48857bc5cd346144fd1c62abbb1 100644
--- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
+++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
@@ -6807,55 +6807,82 @@
       <key>Settings</key>
     </entry>
     <entry>
-      <key>workflow notification</key>
+      <key>No new recipients found that can be added to the bulk mail.</key>
     </entry>
     <entry>
-      <key>Permission received</key>
+      <key>Add Recipients</key>
     </entry>
     <entry>
-      <key>leadimport notification</key>
+      <key>Add Participants</key>
     </entry>
     <entry>
-      <key>granted permission</key>
+      <key>Download letter and create Activity</key>
     </entry>
     <entry>
-      <key>bulk mail sent</key>
+      <key>and open Report</key>
     </entry>
     <entry>
-      <key>download ready</key>
+      <key>export</key>
     </entry>
     <entry>
-      <key>No new recipients found that can be added to the bulk mail.</key>
+      <key>export using the selected  template</key>
     </entry>
     <entry>
-      <key>Add Recipients</key>
+      <key>No new recipients found that can be added to the serial letter.</key>
     </entry>
     <entry>
-      <key>Add Participants</key>
+      <key>send mail</key>
     </entry>
     <entry>
-      <key>Download letter and create Activity</key>
+      <key>and open modeler</key>
     </entry>
     <entry>
-      <key>and open Report</key>
+      <key>Create model</key>
     </entry>
     <entry>
-      <key>export</key>
+      <key>Edit workflow</key>
     </entry>
     <entry>
-      <key>export using the selected  template</key>
+      <key>Receive new Department Permission</key>
     </entry>
     <entry>
-      <key>No new recipients found that can be added to the serial letter.</key>
+      <key>Receive new User Permission</key>
     </entry>
     <entry>
-      <key>send mail</key>
+      <key>workflow notification</key>
     </entry>
     <entry>
-      <key>Add new Department Permission</key>
+      <key>Permission received</key>
     </entry>
-     <entry>
-      <key>Add new User Permission</key>
+    <entry>
+      <key>leadimport notification</key>
+    </entry>
+    <entry>
+      <key>granted permission</key>
+    </entry>
+    <entry>
+      <key>bulk mail sent</key>
+    </entry>
+    <entry>
+      <key>download ready</key>
+    </entry>
+    <entry>
+      <key>Total in euros</key>
+    </entry>
+    <entry>
+      <key>Workflow Model</key>
+    </entry>
+    <entry>
+      <key>{SENT_MAIL}</key>
+    </entry>
+    <entry>
+      <key>The Sales Project can only be filled when a company has been specified</key>
+    </entry>
+    <entry>
+      <key>The workflow could not be deployed</key>
+    </entry>
+    <entry>
+      <key>Workflow deploy failed</key>
     </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
index a4c956a47885f4d1a8c17b2e4c016cc676c2df32..e5de76bd0bc339751a4b3cd18d4513ca92016220 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -32,6 +32,7 @@
     </entry>
     <entry>
       <key>Finished</key>
+      <value>Abgeschlossen</value>
     </entry>
     <entry>
       <key>Show my organisations</key>
@@ -5062,7 +5063,7 @@
     </entry>
     <entry>
       <key>Read</key>
-      <value>gelesen</value>
+      <value>Gelesen</value>
     </entry>
     <entry>
       <key>Permission Set ID</key>
@@ -6737,7 +6738,7 @@
     </entry>
     <entry>
       <key>archive</key>
-      <value>archivieren</value>
+      <value>Archivieren</value>
     </entry>
     <entry>
       <key>Bangladesh</key>
@@ -8264,6 +8265,10 @@ Bitte Datumseingabe prüfen</value>
       <key>Contactreport</key>
       <value>Kontaktbericht</value>
     </entry>
+    <entry>
+      <key>The Sales Project can only be filled when a company has been specified</key>
+      <value>Das Vertriebsprojekt kann nur ausgefüllt werden, wenn eine Firma angegeben ist</value>
+    </entry>
     <entry>
       <key>Appointment planned</key>
       <value>Termin vereinbart</value>
@@ -8735,23 +8740,28 @@ Bitte Datumseingabe prüfen</value>
     </entry>
     <entry>
       <key>workflow notification</key>
+      <value>Workflow Benachrichtigung</value>
     </entry>
     <entry>
-      <key>Permission received</key>
-      <value>erhaltene Berechtigung</value>
+      <key>leadimport notification</key>
     </entry>
     <entry>
-      <key>leadimport notification</key>
+      <key>bulk mail sent</key>
     </entry>
     <entry>
-      <key>granted permission</key>
-      <value>vergebene Berechtigung</value>
+      <key>download ready</key>
     </entry>
     <entry>
-      <key>bulk mail sent</key>
+      <key>No new recipients found that can be added to the bulk mail.</key>
+      <value>Keine neuen Empfänger, die zur Serienmail hinzugefügt werden können, gefunden.</value>
     </entry>
     <entry>
-      <key>download ready</key>
+      <key>Permission received</key>
+      <value>erhaltene Berechtigung</value>
+    </entry>
+    <entry>
+      <key>granted permission</key>
+      <value>vergebene Berechtigung</value>
     </entry>
     <entry>
       <key>Receive new Department Permission</key>
@@ -8768,10 +8778,6 @@ Bitte Datumseingabe prüfen</value>
       <key>No new recipients found that can be added to the serial letter.</key>
       <value>Keine neuen Empfänger, die zum  Serienbrief werden können, gefunden.</value>
     </entry>
-    <entry>
-      <key>No new recipients found that can be added to the bulk mail.</key>
-      <value>Keine neuen Empfänger, die zur Serienmail hinzugefügt werden können, gefunden.</value>
-    </entry>
     <entry>
       <key>export using the selected  template</key>
       <value>Mit der ausgewählten Vorlage Exportieren</value>
@@ -8781,20 +8787,20 @@ Bitte Datumseingabe prüfen</value>
       <value>E-Mail losschicken</value>
     </entry>
     <entry>
-      <key>Download letter and create Activity</key>
-      <value>Brief herunterladen und Aktivität erstellen</value>
+      <key>Total in euros</key>
+    </entry>
+    <entry>
+      <key>Workflow Model</key>
     </entry>
     <entry>
-      <key>Add Participants</key>
-      <value>Teilnehmer hinzufügen</value>
+      <key>{SEND_MAIL}</key>
+      <value>Email versenden</value>
     </entry>
     <entry>
-      <key>and open Report</key>
-      <value>und Report öffnen</value>
+      <key>The workflow could not be deployed</key>
     </entry>
     <entry>
-      <key>Add Recipients</key>
-      <value>Empfänger hinzufügen</value>
+      <key>Workflow deploy failed</key>
     </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
index f795919fd82d323b6293b5b6ada7effe00920d07..f2827dd55b21fc315f7acc480583a72d5eff0ace 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -6873,55 +6873,84 @@
       <key>Settings</key>
     </entry>
     <entry>
-      <key>workflow notification</key>
+      <key>No new recipients found that can be added to the bulk mail.</key>
     </entry>
     <entry>
-      <key>Permission received</key>
+      <key>Add Recipients</key>
     </entry>
     <entry>
-      <key>leadimport notification</key>
+      <key>Add Participants</key>
     </entry>
     <entry>
-      <key>granted permission</key>
+      <key>Download letter and create Activity</key>
     </entry>
     <entry>
-      <key>bulk mail sent</key>
+      <key>and open Report</key>
     </entry>
     <entry>
-      <key>download ready</key>
+      <key>export</key>
     </entry>
     <entry>
-      <key>No new recipients found that can be added to the bulk mail.</key>
+      <key>export using the selected  template</key>
     </entry>
     <entry>
-      <key>Add Recipients</key>
+      <key>No new recipients found that can be added to the serial letter.</key>
     </entry>
     <entry>
-      <key>Add Participants</key>
+      <key>send mail</key>
     </entry>
     <entry>
-      <key>Download letter and create Activity</key>
+      <key>Receive new Department Permission</key>
     </entry>
     <entry>
-      <key>and open Report</key>
+      <key>Receive new User Permission</key>
     </entry>
     <entry>
-      <key>export</key>
+      <key>and open modeler</key>
     </entry>
     <entry>
-      <key>export using the selected  template</key>
+      <key>Create model</key>
     </entry>
     <entry>
-      <key>No new recipients found that can be added to the serial letter.</key>
+      <key>Edit workflow</key>
     </entry>
     <entry>
-      <key>send mail</key>
+      <key>workflow notification</key>
     </entry>
     <entry>
-      <key>Receive new Department Permission</key>
+      <key>Permission received</key>
     </entry>
     <entry>
-      <key>Receive new User Permission</key>
+      <key>leadimport notification</key>
+    </entry>
+    <entry>
+      <key>granted permission</key>
+    </entry>
+    <entry>
+      <key>bulk mail sent</key>
+    </entry>
+    <entry>
+      <key>download ready</key>
+    </entry>
+    <entry>
+      <key>Total in euros</key>
+    </entry>
+    <entry>
+      <key>Workflow Model</key>
+    </entry>
+    <entry>
+      <key>The Sales Project can only be filled when a company has been specified</key>
+    </entry>
+
+    <entry>
+      <key>{SEND_MAIL}</key>
+      <value>Send mail</value>
+    </entry>
+    <entry>
+      <key>The workflow could not be deployed</key>
+    </entry>
+    <entry>
+      <key>Workflow deploy failed</key>
     </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
diff --git a/neonContext/CampaignStep/CampaignStep.aod b/neonContext/CampaignStep/CampaignStep.aod
index 99969c1dc8f63c8de66e18866f2b7eae6560f02e..6e9810b632fff5969a2b21be2d6dc11816966bb8 100644
--- a/neonContext/CampaignStep/CampaignStep.aod
+++ b/neonContext/CampaignStep/CampaignStep.aod
@@ -45,9 +45,5 @@
       <name>99367402-93e6-49d4-b60c-143b6e71df00</name>
       <view>CampaignStepsGantt_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>f146ea29-77d2-4141-b04a-36c29594e670</name>
-      <view>CampaignStepMembers_view</view>
-    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/Product/Product.aod b/neonContext/Product/Product.aod
index 455bfd342154a96988ccb39462c28d9f9ddee768..7d36aaa10f0f067db17fc1a209b7905efb611917 100644
--- a/neonContext/Product/Product.aod
+++ b/neonContext/Product/Product.aod
@@ -8,7 +8,7 @@
   <filterView>ProductFilter_view</filterView>
   <editView>ProductEdit_view</editView>
   <previewView>ProductPreview_view</previewView>
-  <lookupView>ProductFilter_view</lookupView>
+  <lookupView>ProductLookup_view</lookupView>
   <entity>Product_entity</entity>
   <references>
     <neonViewReference>
@@ -27,5 +27,9 @@
       <name>5580ead4-2257-4cdb-a3ac-5e7067c4c1ab</name>
       <view>ProductPreview_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>ec872778-87d1-4070-a3da-3808da326119</name>
+      <view>ProductLookup_view</view>
+    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonView/AppointmentPreview_view/AppointmentPreview_view.aod b/neonView/AppointmentPreview_view/AppointmentPreview_view.aod
index 23c9de063b24cd94a46c4d2e998832ff9c752798..727a644d89918b72ba8e573978d45cf9f7118157 100644
--- a/neonView/AppointmentPreview_view/AppointmentPreview_view.aod
+++ b/neonView/AppointmentPreview_view/AppointmentPreview_view.aod
@@ -27,6 +27,7 @@
       <organizerField>ORGANIZER</organizerField>
       <ownerField>OWNER</ownerField>
       <categoriesField>CATEGORIES</categoriesField>
+      <recurrenceIdField>RECURRENCEID</recurrenceIdField>
       <favoriteActionGroup1>PartStatActionGroup</favoriteActionGroup1>
       <favoriteActionGroup2>seriesActionGroup</favoriteActionGroup2>
       <entityField>#ENTITY</entityField>
diff --git a/neonView/CampaignParticipantFilter_view/CampaignParticipantFilter_view.aod b/neonView/CampaignParticipantFilter_view/CampaignParticipantFilter_view.aod
index 7d4a4e5d2a84ef5c9f155fc6f2d4b9bd223fc1e8..3dde5d4e26421ec75dbe34bc35a40fdb4fd0d3f2 100644
--- a/neonView/CampaignParticipantFilter_view/CampaignParticipantFilter_view.aod
+++ b/neonView/CampaignParticipantFilter_view/CampaignParticipantFilter_view.aod
@@ -4,7 +4,7 @@
   <title></title>
   <description></description>
   <majorModelMode>DISTRIBUTED</majorModelMode>
-  <filterable v="false" />
+  <filterable v="true" />
   <layout>
     <groupLayout>
       <name>layout</name>
@@ -15,8 +15,8 @@
       <name>ParticipantsTable</name>
       <favoriteActionGroup1>FilterViewActionGroup</favoriteActionGroup1>
       <entityField>#ENTITY</entityField>
-      <isCreatable v="false" />
-      <isEditable v="false" />
+      <isCreatable v="true" />
+      <isEditable v="true" />
       <columns>
         <neonTableColumn>
           <name>1bd3a82e-89c1-4b3b-809b-b9bac7f78e58</name>
diff --git a/neonView/CampaignStepMembers_view/CampaignStepMembers_view.aod b/neonView/CampaignStepMembers_view/CampaignStepMembers_view.aod
deleted file mode 100644
index f66c1629d8103d1a135369cb9f519652a2750500..0000000000000000000000000000000000000000
--- a/neonView/CampaignStepMembers_view/CampaignStepMembers_view.aod
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>CampaignStepMembers_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-</neonView>
diff --git a/neonView/NotificationFilter_view/NotificationFilter_view.aod b/neonView/NotificationFilter_view/NotificationFilter_view.aod
index bb14afb0a269a9c52da65d1333fc78f34be935ee..65c5f94e79b7ca64bc3b52f30166c941c25d7ae7 100644
--- a/neonView/NotificationFilter_view/NotificationFilter_view.aod
+++ b/neonView/NotificationFilter_view/NotificationFilter_view.aod
@@ -28,17 +28,18 @@
   <children>
     <timelineViewTemplate>
       <name>NotificationTimeline</name>
+      <favoriteActionGroup1>setNotificationState</favoriteActionGroup1>
       <dateField>CREATIONDATE</dateField>
       <titleField>CAPTION</titleField>
       <descriptionField>DESCRIPTION</descriptionField>
       <iconIdField>ICON</iconIdField>
       <entityField>#ENTITY</entityField>
+      <isEditable v="false" />
     </timelineViewTemplate>
     <tableViewTemplate>
       <name>NotificationTable</name>
       <favoriteActionGroup1>setNotificationState</favoriteActionGroup1>
       <inlineEdit v="true" />
-      <entryAction>rowClickAction</entryAction>
       <iconField>ICON</iconField>
       <titleField>CAPTION</titleField>
       <subtitleField>RESOLVEDPRIORITY</subtitleField>
@@ -71,7 +72,9 @@
     </tableViewTemplate>
     <treeTableViewTemplate>
       <name>NotificationTreeTable</name>
+      <favoriteActionGroup1>setNotificationState</favoriteActionGroup1>
       <entityField>#ENTITY</entityField>
+      <isEditable v="false" />
       <columns>
         <neonTreeTableColumn>
           <name>c8799a54-569a-4667-9bdd-aa11a2f6e21e</name>
diff --git a/neonView/OrderDetail_view/OrderDetail_view.aod b/neonView/OrderDetail_view/OrderDetail_view.aod
index 44791968d06aec8414a6127cfe7b9db33eb2c2ac..d912f8d7a10ffcbd8e1316878d2792510f6ed73c 100644
--- a/neonView/OrderDetail_view/OrderDetail_view.aod
+++ b/neonView/OrderDetail_view/OrderDetail_view.aod
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
   <name>OrderDetail_view</name>
-  <title>Texts</title>
+  <title>Cover letter</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
     <noneLayout>
diff --git a/neonView/OrderMain_view/OrderMain_view.aod b/neonView/OrderMain_view/OrderMain_view.aod
index b76b54dcaaff68957fa6d0c26f48d5a57a2f9c02..428d0c02e07af523318e7f24d35f87230edab64f 100644
--- a/neonView/OrderMain_view/OrderMain_view.aod
+++ b/neonView/OrderMain_view/OrderMain_view.aod
@@ -29,16 +29,16 @@
       <entityField>#ENTITY</entityField>
       <view>OrderDetail_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>b3014999-da86-45ae-86ae-feb738d62906</name>
-      <entityField>Documents</entityField>
-      <view>DocumentFilter_view</view>
-    </neonViewReference>
     <neonViewReference>
       <name>7ec102f5-fb45-44a7-9bbf-0eba7f1536d7</name>
       <entityField>Activities</entityField>
       <view>ActivityFilter_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>b3014999-da86-45ae-86ae-feb738d62906</name>
+      <entityField>Documents</entityField>
+      <view>DocumentFilter_view</view>
+    </neonViewReference>
     <neonViewReference>
       <name>351a9b5d-a050-4fb9-b3e4-402dcd84b331</name>
       <entityField>Tasks</entityField>
diff --git a/neonView/OrderitemFilter_view/OrderitemFilter_view.aod b/neonView/OrderitemFilter_view/OrderitemFilter_view.aod
index 8955a3924f096afd7f468c468bf51278be480c9c..4c6e8a7eac674bd309fbe4aefe1f9bda7c40bba0 100644
--- a/neonView/OrderitemFilter_view/OrderitemFilter_view.aod
+++ b/neonView/OrderitemFilter_view/OrderitemFilter_view.aod
@@ -31,6 +31,10 @@
           <name>a8dcb2bb-bb09-4a6e-b0f0-1b4d1111eb22</name>
           <entityField>UNIT</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>bfd34c94-1a5f-4caf-ae6e-2c09375c023c</name>
+          <entityField>VAT</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>33ef0703-d4ea-4187-b555-648a1733ee99</name>
           <entityField>PRICE</entityField>
@@ -39,10 +43,6 @@
           <name>61a39c6b-f7dd-487c-bc5f-c2e95376ec37</name>
           <entityField>DISCOUNT</entityField>
         </neonTableColumn>
-        <neonTableColumn>
-          <name>bfd34c94-1a5f-4caf-ae6e-2c09375c023c</name>
-          <entityField>VAT</entityField>
-        </neonTableColumn>
         <neonTableColumn>
           <name>89fd18d0-f6ee-4323-9277-464dee6da625</name>
           <entityField>OPTIONAL</entityField>
@@ -77,6 +77,10 @@
           <name>4998fc65-67b7-465d-9891-808dcf0fe080</name>
           <entityField>UNIT</entityField>
         </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>e545cb87-e4a5-4154-89b1-1f88a6d59fde</name>
+          <entityField>VAT</entityField>
+        </neonTreeTableColumn>
         <neonTreeTableColumn>
           <name>b4470ca6-89e8-421b-bb91-7d32f9c48aa2</name>
           <entityField>PRICE</entityField>
@@ -85,22 +89,18 @@
           <name>0c533079-4b39-4412-8de5-086bf7a08706</name>
           <entityField>DISCOUNT</entityField>
         </neonTreeTableColumn>
-        <neonTreeTableColumn>
-          <name>e545cb87-e4a5-4154-89b1-1f88a6d59fde</name>
-          <entityField>VAT</entityField>
-        </neonTreeTableColumn>
         <neonTreeTableColumn>
           <name>9ac44050-ea77-43d2-b0fe-f7ca411b91e7</name>
           <entityField>OPTIONAL</entityField>
         </neonTreeTableColumn>
-        <neonTreeTableColumn>
-          <name>4d4f204a-1c2b-4587-93b9-df03f31da38e</name>
-          <entityField>INFO</entityField>
-        </neonTreeTableColumn>
         <neonTreeTableColumn>
           <name>c44b5bc2-4283-4dca-bd20-bd048e05fe45</name>
           <entityField>TotalPrice</entityField>
         </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>4d4f204a-1c2b-4587-93b9-df03f31da38e</name>
+          <entityField>INFO</entityField>
+        </neonTreeTableColumn>
       </columns>
     </treeTableViewTemplate>
   </children>
diff --git a/neonView/ProductLookup_view/ProductLookup_view.aod b/neonView/ProductLookup_view/ProductLookup_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..e038ed3765c689f36212619cc246abf2196bd6f9
--- /dev/null
+++ b/neonView/ProductLookup_view/ProductLookup_view.aod
@@ -0,0 +1,52 @@
+<?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>ProductLookup_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/neonView/ProductLookup_view/documentation.adoc</documentation>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>table</name>
+      <titleField>PRODUCTNAME</titleField>
+      <subtitleField>PRODUCTCODE</subtitleField>
+      <entityField>#ENTITY</entityField>
+      <linkedColumns>
+        <element>PRODUCTNAME</element>
+      </linkedColumns>
+      <columns>
+        <neonTableColumn>
+          <name>6d4cafea-bc73-4df1-949e-1aba224780ed</name>
+          <entityField>#IMAGE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>ef5fa8f0-7a72-4201-ad2e-44496490d2b2</name>
+          <entityField>PRODUCTCODE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>35834ce8-cd8b-452f-b558-484d2a3a8f02</name>
+          <entityField>PRODUCTNAME</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>f125dbe5-3f46-46dc-b037-4765b115997f</name>
+          <entityField>GROUPCODEID</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>40b14795-afcb-4ae5-b5df-cd667a5b8219</name>
+          <entityField>STATUS</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>86fce471-6d2e-4066-9bdb-2ed04f940f7d</name>
+          <entityField>CONTACT_ID</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>2a2e74e4-dc45-4133-92d6-f2797fc3dcd7</name>
+          <entityField>UNIT</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/ProductLookup_view/documentation.adoc b/neonView/ProductLookup_view/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..38d4dc8ee1b0f1fd3d772287075d7adb212b09df
--- /dev/null
+++ b/neonView/ProductLookup_view/documentation.adoc
@@ -0,0 +1,3 @@
+== ProductLookup_view
+
+Needed, because using the normal filterview as the lookup would result in the tileTemplate being used as the lookup.
\ No newline at end of file
diff --git a/neonView/WorkflowStartConfigFilter_view/WorkflowStartConfigFilter_view.aod b/neonView/WorkflowStartConfigFilter_view/WorkflowStartConfigFilter_view.aod
index 9c98d1fe51548d2c24a3f1e415cf83a1de05e69d..cdac1faccf7f16acf27044fd57f434dea9502e3c 100644
--- a/neonView/WorkflowStartConfigFilter_view/WorkflowStartConfigFilter_view.aod
+++ b/neonView/WorkflowStartConfigFilter_view/WorkflowStartConfigFilter_view.aod
@@ -3,9 +3,9 @@
   <name>WorkflowStartConfigFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
-    <groupLayout>
+    <boxLayout>
       <name>layout</name>
-    </groupLayout>
+    </boxLayout>
   </layout>
   <children>
     <tableViewTemplate>
@@ -24,19 +24,5 @@
         </neonTableColumn>
       </columns>
     </tableViewTemplate>
-    <treeTableViewTemplate>
-      <name>Treetable</name>
-      <entityField>#ENTITY</entityField>
-      <columns>
-        <neonTreeTableColumn>
-          <name>4874074f-80af-4e99-8449-2a4dc4428360</name>
-          <entityField>OBJECT_TYPE</entityField>
-        </neonTreeTableColumn>
-        <neonTreeTableColumn>
-          <name>d479a082-ea95-40c6-81a2-9318fcf9ce98</name>
-          <entityField>TRIGGER_EVENT</entityField>
-        </neonTreeTableColumn>
-      </columns>
-    </treeTableViewTemplate>
   </children>
 </neonView>
diff --git a/process/AttributeFilter_lib/process.js b/process/AttributeFilter_lib/process.js
index f64477390ffc247d5e6fd9768f2840dae133c1e1..81a5208ba9200da0a4296046c55485446b2f78a5 100644
--- a/process/AttributeFilter_lib/process.js
+++ b/process/AttributeFilter_lib/process.js
@@ -155,7 +155,7 @@ AttributeFilterExtensionMaker.getFilterValues = function(pFilter)
     var attrType = name.type;
     if (attrType == $AttributeTypes.VOID.toString())
         attrType = $AttributeTypes.BOOLEAN.toString();
-    var res = AttributeUtil.getPossibleListValues(attributeId, attrType);
+    var res = AttributeUtil.getPossibleListValues(attributeId, attrType, true);
     if (res == null)
         res = [];
     return res;
diff --git a/process/Attribute_lib/process.js b/process/Attribute_lib/process.js
index 40eed67b874f583649eda1b1369df0ea870e9921..9fd2230221263fd1de7423ef86b50dd8fbdfe473 100644
--- a/process/Attribute_lib/process.js
+++ b/process/Attribute_lib/process.js
@@ -148,7 +148,7 @@ AttributeUtil.getPossibleListValues = function (pAttributeId, pAttributeType, pI
 {
     var attributeId = pAttributeId;
     var attrType = pAttributeType.trim();
-    var onlyActives = (pIncludeInactives == undefined ? false : pIncludeInactives);
+    var onlyActives = !pIncludeInactives;
     if (attrType == $AttributeTypes.COMBO.toString())
     {
         var valuesSelect = newSelect("AB_ATTRIBUTEID, ATTRIBUTE_NAME")
diff --git a/process/Context_lib/process.js b/process/Context_lib/process.js
index 83ad817a1b9487b240e512d26d127e7f2b6a74e8..59bed651862041d08e72db34ad3256cab51d8acc 100644
--- a/process/Context_lib/process.js
+++ b/process/Context_lib/process.js
@@ -593,20 +593,6 @@ 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/DocxTemplater_lib/process.js b/process/DocxTemplater_lib/process.js
index e9cd6c748fa3f8ba17d1c5c13795ee659ab3459d..8306c0421438b2cdc1e8f38940979b25bb0ba41e 100644
--- a/process/DocxTemplater_lib/process.js
+++ b/process/DocxTemplater_lib/process.js
@@ -85,7 +85,7 @@ function _getAutoNewLineModule()
             if (value == null)
                 value = options.nullGetter(part);
             else
-                value = value.replace(/(\r\n)|(\n)|(\r)/g, "\n<w:br/>");
+                value = value.replace(/(\r\n)|(\n)|(\r)/g, "</w:t></w:r><w:r><w:br/></w:r><w:r><w:t xml:space=\"preserve\">");
 
             return {
                 value: value
diff --git a/process/Email_lib/process.js b/process/Email_lib/process.js
index a8645c40d5c729a1546a105048f48020e1369931..34ae40ebfa34a87d89f1a84131521b9220e36b06 100644
--- a/process/Email_lib/process.js
+++ b/process/Email_lib/process.js
@@ -28,6 +28,7 @@ function EmailWritingUtils () {}
  * @param {Array} [pAttachments] attachments in a array (base64 encoded).
  * @param {String} pSubject an optional subject.
  * @param {String} [pEmailFilename] filename of the email.
+ * @param {Placeholder[]} [pAdditionalPlaceholders] additional placeholders
  * @return {Array} the eml document as array with [filename, base64]
  */
 EmailWritingUtils.openMailTemplate = function (pToRecipients, pSenderContactId, pTemplateId, pRecipientContactId, pBindata, pAttachments, pSubject, pEmailFilename, pAdditionalPlaceholders)
@@ -77,8 +78,9 @@ EmailWritingUtils.openMailTemplate = function (pToRecipients, pSenderContactId,
  * @param {String} pComingFrom source from where you started (e.g. "Person", "Organisation" )
  * @param {String} pEmailFilename optional file name of the email.
  * @param {String} [pAdditionalPlaceholders] additional placeholders for the email
+ * @param {String} [pOfferId] optional needed for the offerEmails, to change the status of the offer
  */
-EmailWritingUtils.openNewMail = function (pToContactId, pToEmailAddress, pComingFrom, pAttachmentArray, pNotificationMsg, pEmailFilename, pAdditionalPlaceholders)
+EmailWritingUtils.openNewMail = function (pToContactId, pToEmailAddress, pComingFrom, pAttachmentArray, pNotificationMsg, pEmailFilename, pAdditionalPlaceholders, pOfferId)
 {
     var params = {
         "ContactId_param" : pToContactId,
@@ -86,7 +88,8 @@ EmailWritingUtils.openNewMail = function (pToContactId, pToEmailAddress, pComing
         "ComingFrom_param" : pComingFrom,
         "NotificationMsg_param" : pNotificationMsg,
         "EmailFilename" : pEmailFilename,
-        "AdditionalPlaceholders_param" : JSON.stringify(pAdditionalPlaceholders)
+        "AdditionalPlaceholders_param" : JSON.stringify(pAdditionalPlaceholders),
+        "OfferId_param" : pOfferId
     };
     
     if (pToEmailAddress)
@@ -110,14 +113,15 @@ EmailWritingUtils.getMailbridgeAddress = function ()
  * @param {String} pNotificationMsg message which will be shown after the operation is done.
  * @param {String} pEmailFilename optional file name of the email.
  * @param {String} [pAdditionalPlaceholders] additional placeholders for the email
+ * @param {String} [pOfferId] optional needed for the offerEmails, to change the status of the offer
  * Report have to be a object with these attrs: content (base64 encoded report), contentType (mimeType of the report), filename (complete filename with filending)
  */
-EmailWritingUtils.sendReportAsMail = function (pRecipient, pReportArray, pComingFrom, pNotificationMsg, pEmailFilename, pAdditionalPlaceholders)
+EmailWritingUtils.sendReportAsMail = function (pRecipient, pReportArray, pComingFrom, pNotificationMsg, pEmailFilename, pAdditionalPlaceholders, pOfferId)
 {
     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, pEmailFilename, pAdditionalPlaceholders);
+    EmailWritingUtils.openNewMail(pRecipient, pRecpientEmail, pComingFrom, pReportArray, pNotificationMsg, pEmailFilename, pAdditionalPlaceholders, pOfferId);
 }
 
 /**
@@ -169,6 +173,7 @@ Email.fromRFC = function (pBase64RFC)
  * @param {String} [pTemplateId] UUID of the explicit template which shall used. (optional)
  * @param {String} [pContactId] (required)
  * @param {String} [pBindata] (required)
+ * @param {Placeholder[]} [pAdditionalPlaceholders] additional placeholders
  * @return {Email} a new Email object
  */
 Email.fromTemplate = function (pTemplateId, pContactId, pBindata, pAdditionalPlaceholders)
diff --git a/process/JditoFilter_lib/process.js b/process/JditoFilter_lib/process.js
index 9e6137b3ebbc088ec3a49495ac7a8b138cd5c7bd..d24d07552af5498326763f378b323980a41d0737 100644
--- a/process/JditoFilter_lib/process.js
+++ b/process/JditoFilter_lib/process.js
@@ -1,6 +1,7 @@
 import("system.tools");
 import("system.logging");
 import("Sql_lib");
+import("system.datetime");
 
 /**
  * object for filtering records
@@ -117,6 +118,8 @@ JditoFilter.prototype.checkRecord = function (pRow)
             case "TIMEFRAME_EQUAL":
             case "TIMEFRAME_COMING":
             case "TIMEFRAME_PAST":
+                var [start, end] = datetime.resolveRelativeDateExpression(pFilterValue);
+                return pRowValue >= start && pRowValue <= end;
         }
     }
 }
@@ -211,16 +214,163 @@ JditoFilterUtils.filterRecords = function (pColumns, pRecords, pFilter, pCustomC
  */
 JditoFilterUtils.getSqlCondition = function (pFilter, pTable, pTableAlias, pColumnOrFnMap)
 {
-    var condition = newWhere();
+    var filterTranslator = new FilterSqlTranslator(pFilter)
+        .table(pTable, pTableAlias);
     
-    var ignoreCase = JditoFilterUtils.isUserIgnoreCase();
-    
-    if (!pFilter)
+    if (pColumnOrFnMap)
+    {
+        for (let fieldName in pColumnOrFnMap)
+        {
+            var columnOrFn = pColumnOrFnMap[fieldName];
+            if (typeof columnOrFn === "function")
+                filterTranslator.addSpecialFieldConditionFn(fieldName, columnOrFn);
+            else
+                filterTranslator.addSqlFieldMapping(fieldName, columnOrFn);
+        }
+    }
+    return filterTranslator.getSqlCondition();
+}
+
+/**
+ * @return {boolean} the selectionIgnoreCase property of the current user, defaults to true
+ */
+JditoFilterUtils.isUserIgnoreCase = function ()
+{
+    var user = tools.getCurrentUser();
+    var ignoreCase = user ? user[tools.PARAMS][tools.SELECTION_IGNORECASE] : "";
+    return ignoreCase == "" || /true/i.test(ignoreCase);
+}
+
+/**
+ * Object for translating a filter object to a sql condition.
+ * 
+ * @param {Object} pFilter the filter object that should be used
+ * @param {String} pTable the database table to build the condition for
+ */
+function FilterSqlTranslator (pFilter, pTable)
+{
+    this._filter = null;
+    this.filter(pFilter);
+    this._table = pTable;
+    this._tableAlias = null;
+    this._dbAlias = null;
+    this._sqlFieldMappings = {};
+    this._fieldConditionFns = {};
+    this._ignoreCase = JditoFilterUtils.isUserIgnoreCase();
+}
+
+/**
+ * Sets the filter of the object
+ * 
+ * @param {Object} pFilter the filter object that should be used
+ * @return {FilterSqlTranslator} current object
+ */
+FilterSqlTranslator.prototype.filter = function (pFilter)
+{
+    if (pFilter)
+    {
+        if (typeof pFilter !== "object")
+            throw new TypeError("FilterSqlTranslator: Wrong type for the filter, expected 'object' but got '" + (typeof pFilter) + "'");
+        this._filter = pFilter.filter || pFilter;
+    }
+    return this;
+}
+
+/**
+ * Sets the filter of the object
+ * 
+ * @param {String} pFilter the filter object that should be used as JSON string
+ * @return {FilterSqlTranslator} current object
+ */
+FilterSqlTranslator.prototype.filterJSON = function (pFilter)
+{
+    return this.filter(JSON.parse(pFilter));
+}
+
+/**
+ * Sets the table of the object
+ * 
+ * @param {String} pTable the database table to build the condition for
+ * @param {String} [pTableAlias] the alias of the table
+ * @return {FilterSqlTranslator} current object
+ */
+FilterSqlTranslator.prototype.table = function (pTable, pTableAlias)
+{
+    this._table = pTable;
+    if (pTableAlias)
+        this._tableAlias = pTableAlias;
+    return this;
+}
+
+/**
+ * Adds a special database field mapping for the given field that will be used for the sql condition
+ * 
+ * @param {String} pFieldName the field name
+ * @param {String|String[]} pDBField the database field ("TABLE.COLUMN" or ["TABLE", "COLUMN", "alias"])
+ * @return {FilterSqlTranslator} current object
+ */
+FilterSqlTranslator.prototype.addSqlFieldMapping = function (pFieldName, pDBField)
+{
+    this._sqlFieldMappings[pFieldName] = pDBField;
+    return this;
+}
+
+/**
+ * Adds a special function for building the condition for the given field. The function must return a sql condition (SqlBuilder or String)
+ * 
+ * @param {String} pFieldName the field name
+ * @param {Function} pConditionFn a function that generates the condition
+ * @return {FilterSqlTranslator} current object
+ */
+FilterSqlTranslator.prototype.addSpecialFieldConditionFn = function (pFieldName, pConditionFn)
+{
+    this._fieldConditionFns[pFieldName] = pConditionFn;
+    return this;
+}
+
+/**
+ * Sets the database alias
+ * 
+ * @param {String} pAlias the alias to be used
+ * @return {FilterSqlTranslator} current object
+ */
+FilterSqlTranslator.prototype.dbAlias = function (pAlias)
+{
+    this._dbAlias = pAlias;
+    return this;
+}
+
+/**
+ * Changes whether the condition should be case-insensitive for text
+ * 
+ * @param {boolean} [pIgnoreCase=true] if it should be case-insensitive
+ * @return {FilterSqlTranslator} current object
+ */
+FilterSqlTranslator.prototype.ignoreCase = function (pIgnoreCase)
+{
+    //"", 0 , false -> false, everything else is considered true
+    this._ignoreCase = pIgnoreCase != false;
+    return this;
+}
+
+/**
+ * Builds the sql condition from the filter
+ * 
+ * @return {SqlBuilder} the sql condition
+ */
+FilterSqlTranslator.prototype.getSqlCondition = function ()
+{
+    var condition = new SqlBuilder(this._dbAlias).where();
+    if (!this._filter)
         return condition;
-    if (!pColumnOrFnMap)
-        pColumnOrFnMap = {};
     
-    _addCondition.call(condition, pFilter, pFilter.operator);
+    var table = this._table;
+    var tableAlias = this._tableAlias;
+    var ignoreCase = this._ignoreCase;
+    var sqlFieldMappings = this._sqlFieldMappings;
+    var fieldConditionFns = this._fieldConditionFns;
+    
+    _addCondition.call(condition, this._filter, this._filter.operator);
     
     return condition;
     
@@ -230,47 +380,61 @@ JditoFilterUtils.getSqlCondition = function (pFilter, pTable, pTableAlias, pColu
     {
         if (pFilter.type == "row")
         {
-            if (pFilter.name in pColumnOrFnMap)
+            var sqlField, condition;
+            var filterValue = (pFilter.key || pFilter.value);
+            if (pFilter.name in fieldConditionFns)
             {
-                pFilter.name = pColumnOrFnMap[pFilter.name];
+                var conditionFn = fieldConditionFns[pFilter.name];
+                
+                condition = conditionFn.call(null, filterValue, pFilter.operator);
+                if (pOperator == "AND")
+                    this.andIfSet(condition);
+                else if (pOperator == "OR")
+                    this.orIfSet(condition);
+                
+                return;
+            }
+            
+            if (pFilter.name in sqlFieldMappings)
+            {
+                sqlField = sqlFieldMappings[sqlField];
                 
                 //possibility to explicitly set the value to null/false so that the field is ignored
-                if (pFilter.name === null || pFilter.name === false)
+                if (sqlField === null || sqlField === false)
                     return;
             }
-            else if (pTable && pTableAlias)
-                pFilter.name = [pTable, pFilter.name, pTableAlias];
-            else if (pTable)
-                pFilter.name = pTable + "." + pFilter.name;
-            
-            pFilter.value = (pFilter.key || pFilter.value);
+            else if (table && tableAlias)
+                sqlField = [table, pFilter.name, tableAlias];
+            else if (table)
+                sqlField = table + "." + pFilter.name;
             
-            var condition;
-            if (typeof(pFilter.name) === "function")
+            var generatedCondition = _getCondition(filterValue, pFilter.operator, sqlField);
+            if (generatedCondition instanceof SqlBuilder || typeof generatedCondition === "string")
             {
-                condition = pFilter.name.call(null, pFilter.value, pFilter.operator);
                 if (pOperator == "AND")
-                    this.andIfSet(condition);
+                    this.andIfSet(generatedCondition);
                 else if (pOperator == "OR")
-                    this.orIfSet(condition);
+                    this.orIfSet(generatedCondition);
             }
             else
             {
-                let isStringType, filterValue;
-                [condition, filterValue, isStringType] = _getCondition(pFilter.value, pFilter.operator);
+                var isStringType = pFilter.contenttype != "NUMBER" 
+                    && pFilter.contenttype != "DATE" 
+                    && pFilter.contenttype != "BOOLEAN";
+                [condition, filterValue] = generatedCondition;
                 if (isStringType && ignoreCase)
                     condition = condition.replace("#", "UPPER(#)").replace("?", "UPPER(?)");
-                
+
                 if (pOperator == "AND")
-                    this.andIfSet(pFilter.name, filterValue, condition);
+                    this.andIfSet(sqlField, filterValue, condition);
                 else if (pOperator == "OR")
-                    this.orIfSet(pFilter.name, filterValue, condition);
+                    this.orIfSet(sqlField, filterValue, condition);
             }
         }
         else if (pFilter.type == "group")
         {
-            let subCondition = newWhere();
-            let operator = pFilter.operator;
+            var subCondition = newWhere();
+            var operator = pFilter.operator;
             pFilter.childs.forEach(function (cond)
             {
                 _addCondition.call(subCondition, cond, operator);
@@ -282,45 +446,41 @@ JditoFilterUtils.getSqlCondition = function (pFilter, pTable, pTableAlias, pColu
         }
     }
     
-    //returns [condition, value with wildcards, is a string type] depending on the operator
-    function _getCondition (pValue, pOperator)
+    //returns [condition, value with wildcards] depending on the operator
+    function _getCondition (pValue, pOperator, pField)
     {
         switch (pOperator)
         {
             case "CONTAINS":
-                return [SqlBuilder.LIKE(), "%" + pValue + "%", true];
+                return [SqlBuilder.LIKE(), "%" + pValue + "%"];
             case "CONTAINSNOT":
-                return [SqlBuilder.NOT_LIKE(), "%" + pValue + "%", true];
+                return [SqlBuilder.NOT_LIKE(), "%" + pValue + "%"];
             case "STARTSWITH":
-                return [SqlBuilder.LIKE(), pValue + "%", true];
+                return [SqlBuilder.LIKE(), pValue + "%"];
             case "ENDSWITH":
-                return [SqlBuilder.LIKE(), "%" + pValue, true];
+                return [SqlBuilder.LIKE(), "%" + pValue];
             case "EQUAL":
-                return [SqlBuilder.EQUAL(), pValue, true];
+                return [SqlBuilder.EQUAL(), pValue];
             case "NOT_EQUAL":
-                return [SqlBuilder.NOT_EQUAL(), pValue, true];
+                return [SqlBuilder.NOT_EQUAL(), pValue];
             case "LESS":
-                return [SqlBuilder.LESS(), pValue, false];
+                return [SqlBuilder.LESS(), pValue];
             case "LESS_OR_EQUAL":
-                return [SqlBuilder.LESS_OR_EQUAL(), pValue, false];
+                return [SqlBuilder.LESS_OR_EQUAL(), pValue];
             case "GREATER":
-                return [SqlBuilder.GREATER(), pValue, false];
+                return [SqlBuilder.GREATER(), pValue];
             case "GREATER_OR_EQUAL":
-                return [SqlBuilder.GREATER_OR_EQUAL(), pValue, false];
+                return [SqlBuilder.GREATER_OR_EQUAL(), pValue];
             case "ISNULL":
-                return ["# is null", pValue, false];
+                return pField + " is null";
             case "ISNOTNULL":
-                return ["# is not null", pValue, false];
+                return pField + " is not null";
+            case "TIMEFRAME_EQUAL":
+            case "TIMEFRAME_COMING":
+            case "TIMEFRAME_PAST":
+                var [start, end] = datetime.resolveRelativeDateExpression(pValue);
+                return newWhere(pField, start, SqlBuilder.GREATER_OR_EQUAL())
+                    .and(pField, end, SqlBuilder.LESS_OR_EQUAL());
         }
     }
-}
-
-/**
- * @return {boolean} the selectionIgnoreCase property of the current user, defaults to true
- */
-JditoFilterUtils.isUserIgnoreCase = function ()
-{
-    var user = tools.getCurrentUser();
-    var ignoreCase = user ? user[tools.PARAMS][tools.SELECTION_IGNORECASE] : "";
-    return ignoreCase == "" || /true/i.test(ignoreCase);
-}
+}
\ No newline at end of file
diff --git a/process/KeywordData_lib/process.js b/process/KeywordData_lib/process.js
index 9997efa52934025c8d61e7cd6eb8414737af9fe8..a4fbd6bd4e44b0b1068e110f60e27107bceb47ee 100644
--- a/process/KeywordData_lib/process.js
+++ b/process/KeywordData_lib/process.js
@@ -20,7 +20,7 @@ KeywordData.getSimpleData = function (pKeywordContainer, pLocale, pOnlyActives)
     var identifier = "KeywordSimpleData_" + pKeywordContainer + flags;
     var cache = new CachedData(identifier, true, pLocale);
     return cache.load(function (pTranslationNecessary, pLocale){
-        var keywordEntrySelect = newSelect("AB_KEYWORD_ENTRY.KEYID, AB_KEYWORD_ENTRY.TITLE")
+        var keywordEntrySelect = newSelect("AB_KEYWORD_ENTRY.KEYID, AB_KEYWORD_ENTRY.TITLE", "Data_alias")
                                     .from("AB_KEYWORD_ENTRY")
                                     .orderBy("AB_KEYWORD_ENTRY.SORTING asc, AB_KEYWORD_ENTRY.TITLE asc")
                                     .where("AB_KEYWORD_ENTRY.CONTAINER", pKeywordContainer);
diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js
index 2ae7c40b6e90dc3d207d4441cbeb3abeadfd128c..04e469c42da0bb82885071aec0350704dc6d59bc 100644
--- a/process/KeywordRegistry_basic/process.js
+++ b/process/KeywordRegistry_basic/process.js
@@ -21,6 +21,11 @@ $KeywordRegistry._autoPad = function(pKey){return (pKey + "
 
 $KeywordRegistry.attributeType = function(){return "AttributeType";};
 $KeywordRegistry.keywordAttributeType = function(){return "KeywordAttributeType";};
+$KeywordRegistry.keywordAttributeType$char = function(){return "CHAR";};
+$KeywordRegistry.keywordAttributeType$number = function(){return "NUMBER";};
+$KeywordRegistry.keywordAttributeType$bool = function(){return "BOOLEAN";};
+$KeywordRegistry.keywordAttributeType$longChar = function(){return "LONGCHAR";};
+
 $KeywordRegistry.contractPayment = function(){return "ContractPayment";};
 
 $KeywordRegistry.contractStatus = function(){return "ContractStatus";};
@@ -286,4 +291,7 @@ $KeywordRegistry.visitRecommendationPrioSource = function(){return $KeywordRegis
 $KeywordRegistry.visitRecommendationPrioSource$visitFrequency = function(){return $KeywordRegistry._autoPad("VISITFREQUENCY");};
 $KeywordRegistry.visitRecommendationPrioSource$manual = function(){return $KeywordRegistry._autoPad("MANUAL");};
 
-$KeywordRegistry.workflowCategory = function(){return "WorkflowCategory";};
\ No newline at end of file
+$KeywordRegistry.workflowCategory = function(){return "WorkflowCategory";};
+
+$KeywordRegistry.notificationState = function () { return "NotificationState";};
+$KeywordRegistry.notificationType = function () { return "NotificationType";};
diff --git a/process/Product_lib/process.js b/process/Product_lib/process.js
index d49860b7ac46e5f1f8d093310260d8406de9b0e0..ee03a52bec3a0052633d48aace52aeb834a107da 100644
--- a/process/Product_lib/process.js
+++ b/process/Product_lib/process.js
@@ -283,8 +283,21 @@ ProductUtils.getProductDetails = function(pid, priceListFilter, additionalProduc
                 return priceLists[list];
             }
             //customer deposited price list (defined by Attribute)
-            if (priceListFilter.priceList != "" && priceListFilter.priceList == priceLists[list].priceList) {
-                return priceLists[list];
+            if (priceListFilter.priceList != "") {
+                var res;
+                var escape;
+                 // runs trough the possible pricelists to find the one with the correct pricelist ("-type"). 
+                 // e.g: PRICELISTSERVICE, PRICELISTSPECIAL, PRICELISTKEY, PRICELISTDEFAULT
+                for(var index in priceLists)
+                {
+                    
+                    if (priceLists[index]["priceList"] == priceListFilter.priceList) 
+                    {
+                        res = priceLists[index]; //The first time the condition is true the correct pricelist is found.
+                        break;                   // The object is ordered by fromQuantity descending so we have to stop after the condition is true
+                    }
+                }
+                return res;
             }
             //default price list
             if (priceLists[list].priceList == $KeywordRegistry.productPricelist$standardList()) {
diff --git a/process/ctiServerEvents/process.js b/process/ctiServerEvents/process.js
index ecb4f7e36158f19b8473870b9b5c2f280934b8dd..e0df2b323d8dc904b125b3c44fc12db5a50a5fe2 100644
--- a/process/ctiServerEvents/process.js
+++ b/process/ctiServerEvents/process.js
@@ -62,6 +62,8 @@ var ringingHandlerFn = function()
                 var affectedContext = this.contactsCall[0].PERSON_ID.trim() == "" ? "Organisation" : "Person";
                 notificationConfig.linkInfo(text.encodeMS([affectedContext, affectedContactId]));
             }
+            
+            notificationConfig.initialState(notification.STATE_CONFIRMED);
 
             
             notification.addNotificationWith(notificationConfig);