diff --git a/.liquibase/Data_alias/basic/2020.1.1/Notification/changelog.xml b/.liquibase/Data_alias/basic/2020.1.1/Notification/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1c9de620455f1a0e782540d3ca7e86c1181d8dbb
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.1/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.1/Notification/init_NotificationType.xml b/.liquibase/Data_alias/basic/2020.1.1/Notification/init_NotificationType.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3d8f901c79b2216826873ea4664e1f1a401652fc
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.1/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.1/Notification/insert_NotificationState.xml b/.liquibase/Data_alias/basic/2020.1.1/Notification/insert_NotificationState.xml
new file mode 100644
index 0000000000000000000000000000000000000000..35501bf1692b76aa533e32e47930c612f0d97ef2
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.1/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.1/changelog.xml b/.liquibase/Data_alias/basic/2020.1.1/changelog.xml
index f5686ce22ccea6e17c577957774efd2009a0dd7f..7070cb88cfdc67dbb126680500fad85499f40887 100644
--- a/.liquibase/Data_alias/basic/2020.1.1/changelog.xml
+++ b/.liquibase/Data_alias/basic/2020.1.1/changelog.xml
@@ -2,4 +2,5 @@
 <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="AlterTablesToDatetime.xml"/>
+    <include relativeToChangelogFile="true" file="Notification/changelog.xml"/>
 </databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.1.2/AlterButtonlabelTitles/AlterButtonLabelTitles.xml b/.liquibase/Data_alias/basic/2020.1.2/AlterButtonlabelTitles/AlterButtonLabelTitles.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5bc4d387a4d7bc4cdcc662a0fa1a30bce6ed7580
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.2/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.2/AlterDatatypeOfKeyColumnsToChar/alter_DocumentTemplatePlaceOfUseDatatype.xml b/.liquibase/Data_alias/basic/2020.1.2/AlterDatatypeOfKeyColumnsToChar/alter_DocumentTemplatePlaceOfUseDatatype.xml
index ec607aa9383d71b3ad3c4d1bd8b785c16d489981..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
@@ -2,11 +2,14 @@
 <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 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>
     
diff --git a/.liquibase/Data_alias/basic/2020.1.2/VisitPlanEntry/rename_VisitPlanEntry_ORGANISATION_ID.xml b/.liquibase/Data_alias/basic/2020.1.2/VisitPlanEntry/rename_VisitPlanEntry_ORGANISATION_ID.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0603638910cfef98114adef301c6cffd487b4260
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.1.2/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.2/changelog.xml b/.liquibase/Data_alias/basic/2020.1.2/changelog.xml
index 8a20273d6173815a1334b2430ada5f6d86b2a997..7696526b5b01d5485e47a5a69bbade95aa0c6317 100644
--- a/.liquibase/Data_alias/basic/2020.1.2/changelog.xml
+++ b/.liquibase/Data_alias/basic/2020.1.2/changelog.xml
@@ -2,5 +2,7 @@
 <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="AlterDatatypeOfKeyColumnsToChar/changelog.xml" relativeToChangelogFile="true"/>
+    <include file="VisitPlanEntry/rename_VisitPlanEntry_ORGANISATION_ID.xml" relativeToChangelogFile="true"/>
     <include file="AddNullableToDateNew.xml" relativeToChangelogFile="true" />
+    <include file="AlterButtonLabelTitles/AlterButtonLabelTitles.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/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod
index dbe878d7be0c6e3f4b7dd8c645fcb4547262337b..6e685b98b76ffee42644c33a1e7fe269291ca42a 100644
--- a/aliasDefinition/Data_alias/Data_alias.aod
+++ b/aliasDefinition/Data_alias/Data_alias.aod
@@ -8237,9 +8237,9 @@
                 <name>DATE_EDIT</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="91" />
-                <size v="10" />
-                <scale v="0" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
                 <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -8272,9 +8272,9 @@
                 <name>DATE_NEW</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="91" />
-                <size v="10" />
-                <scale v="0" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
                 <notNull v="true" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -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>
@@ -8529,9 +8529,9 @@
                 <name>DATE_EDIT</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="91" />
-                <size v="10" />
-                <scale v="0" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
                 <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -8557,9 +8557,9 @@
                 <name>DATE_NEW</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="91" />
-                <size v="10" />
-                <scale v="0" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
                 <notNull v="true" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -8647,9 +8647,9 @@
                 <name>DATE_EDIT</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="91" />
-                <size v="10" />
-                <scale v="0" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
                 <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -8696,9 +8696,9 @@
                 <name>DATE_NEW</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="91" />
-                <size v="10" />
-                <scale v="0" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
                 <notNull v="true" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -8835,9 +8835,9 @@
                 <name>DATE_EDIT</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="91" />
-                <size v="10" />
-                <scale v="0" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
                 <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -8954,9 +8954,9 @@
                 <name>DATE_NEW</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="91" />
-                <size v="10" />
-                <scale v="0" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
                 <notNull v="true" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -9267,9 +9267,9 @@
                 <name>DATE_EDIT</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="91" />
-                <size v="10" />
-                <scale v="0" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
                 <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -9309,9 +9309,9 @@
                 <name>DATE_NEW</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="91" />
-                <size v="10" />
-                <scale v="0" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
                 <notNull v="true" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -11573,9 +11573,9 @@
                 <name>DATE_EDIT</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="91" />
-                <size v="10" />
-                <scale v="0" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
                 <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -11601,9 +11601,9 @@
                 <name>DATE_NEW</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="91" />
-                <size v="10" />
-                <scale v="0" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
                 <notNull v="true" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -11885,9 +11885,9 @@
                 <name>DATE_EDIT</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="91" />
-                <size v="10" />
-                <scale v="0" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
                 <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -11920,9 +11920,9 @@
                 <name>DATE_NEW</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="91" />
-                <size v="10" />
-                <scale v="0" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
                 <notNull v="true" />
                 <isUnique v="false" />
                 <index v="false" />
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/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/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/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..f3a15f3c8ad189a57e5dd9c9b3167d59a5043bed 100644
--- a/entity/Email_entity/Email_entity.aod
+++ b/entity/Email_entity/Email_entity.aod
@@ -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/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/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 05ab81cea74020a8b9ef2aa3bfa4266073bcda10..5214df23fa228a5a555d168fb8e67beacb2659e9 100644
--- a/entity/Notification_entity/Notification_entity.aod
+++ b/entity/Notification_entity/Notification_entity.aod
@@ -69,6 +69,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>
@@ -104,7 +105,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>
@@ -155,6 +156,20 @@
         </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>
diff --git a/entity/Notification_entity/entityfields/setnotificationstate/children/setread/onActionProcess.js b/entity/Notification_entity/entityfields/setnotificationstate/children/setread/onActionProcess.js
index 608c454e87cb33460b61a4999fb77372ccaab864..b852c1b08913071a50ffe07144d41b38bb75d0d7 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/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/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/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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
index 42409fc7a7206d17e71a75a697b5e057b54e8b27..d339195f21f074660303e10b1a80ce278c3bb123 100644
--- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
+++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
@@ -6867,10 +6867,13 @@
       <key>download ready</key>
     </entry>
     <entry>
-      <key>Add new Department Permission</key>
+      <key>Total in euros</key>
     </entry>
-     <entry>
-      <key>Add new User Permission</key>
+    <entry>
+      <key>Workflow Model</key>
+    </entry>
+    <entry>
+      <key>The Sales Project can only be filled when a company has been specified</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 04af5e1dd1baffca319dfe48bee1e53aa44effb6..a132152c5028d6e84f533b84d53bb64e431762fa 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -5062,7 +5062,7 @@
     </entry>
     <entry>
       <key>Read</key>
-      <value>gelesen</value>
+      <value>Gelesen</value>
     </entry>
     <entry>
       <key>Permission Set ID</key>
@@ -6737,7 +6737,7 @@
     </entry>
     <entry>
       <key>archive</key>
-      <value>archivieren</value>
+      <value>Archivieren</value>
     </entry>
     <entry>
       <key>Bangladesh</key>
@@ -8187,7 +8187,6 @@ Bitte Datumseingabe prüfen</value>
     </entry>
     <entry>
       <key>Send email</key>
-      <value>E-Mail losschicken</value>
     </entry>
     <entry>
       <key>Activites</key>
@@ -8265,6 +8264,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>
@@ -8579,7 +8582,6 @@ Bitte Datumseingabe prüfen</value>
     </entry>
     <entry>
       <key>Zip</key>
-      <value>PLZ</value>
     </entry>
     <entry>
       <key>type</key>
@@ -8736,79 +8738,74 @@ Bitte Datumseingabe prüfen</value>
       <value>gültig ab (in </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>Add Recipients</key>
-      <value>Empfänger hinzufügen</value>
-    </entry>
-    <entry>
-      <key>Add Participants</key>
-      <value>Teilnehmer hinzufügen</value>
+      <key>workflow notification</key>
+      <value>Workflow Benachrichtigung</value>
     </entry>
     <entry>
-      <key>Download letter and create Activity</key>
-      <value>Brief herunterladen und Aktivität erstellen</value>
+      <key>leadimport notification</key>
+      <value>Leadimport Benachrichtigung</value>
     </entry>
     <entry>
-      <key>and open Report</key>
-      <value>und Report öffnen</value>
+      <key>bulk mail sent</key>
+      <value>Serienmail versendet</value>
     </entry>
     <entry>
-      <key>export</key>
+      <key>download ready</key>
+      <value>Download bereit</value>
     </entry>
     <entry>
-      <key>export using the selected  template</key>
-      <value>Mit der ausgewählten Vorlage Exportieren</value>
+      <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>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>
+      <key>Permission received</key>
+      <value>erhaltene Berechtigung</value>
     </entry>
     <entry>
-      <key>send mail</key>
-      <value>E-Mail losschicken</value>
+      <key>leadimport notification</key>
     </entry>
     <entry>
-      <key>Receive new Department Permission</key>
+      <key>granted permission</key>
+      <value>vergebene Berechtigung</value>
     </entry>
     <entry>
-      <key>Receive new User Permission</key>
+      <key>bulk mail sent</key>
     </entry>
     <entry>
-      <key>workflow notification</key>
+      <key>download ready</key>
     </entry>
     <entry>
-      <key>Permission received</key>
+      <key>Receive new Department Permission</key>
+      <value>Neue Abteilungs-Berechtigung erhalten</value>
     </entry>
     <entry>
-      <key>leadimport notification</key>
+      <key>Receive new User Permission</key>
+      <value>Neue Benutzer-Berechtigung erhalten</value>
     </entry>
     <entry>
-      <key>granted permission</key>
+      <key>export</key>
     </entry>
     <entry>
-      <key>bulk mail sent</key>
+      <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>download ready</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 letter and create Activity</key>
-      <value>Brief herunterladen und Aktivität erstellen</value>
+      <key>export using the selected  template</key>
+      <value>Mit der ausgewählten Vorlage Exportieren</value>
     </entry>
     <entry>
-      <key>Add Participants</key>
-      <value>Teilnehmer hinzufügen</value>
+      <key>send mail</key>
+      <value>E-Mail losschicken</value>
     </entry>
     <entry>
-      <key>and open Report</key>
-      <value>und Report öffnen</value>
+      <key>Total in euros</key>
     </entry>
     <entry>
-      <key>Add Recipients</key>
-      <value>Empfänger hinzufügen</value>
+      <key>Workflow Model</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 831943f96a2daf3227add9b100e904dda275b764..dd32b2a7b3caf16d762271d43e41d228628bf79d 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -6932,6 +6932,15 @@
     <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>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
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/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 cc12313a6470ee4aa7d9a2a6ac1a905f942ab28f..ad8f7064c22fdcd7b6a025dda196786f126ed985 100644
--- a/neonView/NotificationFilter_view/NotificationFilter_view.aod
+++ b/neonView/NotificationFilter_view/NotificationFilter_view.aod
@@ -28,11 +28,13 @@
   <children>
     <timelineViewTemplate>
       <name>NotificationTimeline</name>
-      <dateField>CREATEDATE</dateField>
+      <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>
@@ -71,7 +73,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/OrderitemFilter_view/OrderitemFilter_view.aod b/neonView/OrderitemFilter_view/OrderitemFilter_view.aod
index e6eaeeb9f9ee7a2ca057202848bb3b97657f9382..5879614ec37bdf2d2ec54e12e0dbf57a17d05042 100644
--- a/neonView/OrderitemFilter_view/OrderitemFilter_view.aod
+++ b/neonView/OrderitemFilter_view/OrderitemFilter_view.aod
@@ -11,7 +11,7 @@
   <children>
     <tableViewTemplate>
       <name>Orderitems</name>
-      <inlineEdit v="true" />
+      <inlineEdit v="false" />
       <entityField>#ENTITY</entityField>
       <autoNewRow v="true" />
       <columns>
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/process/Email_lib/process.js b/process/Email_lib/process.js
index 94a4ab8ba9daa08c1021663cb1d6435a661e94c7..34ae40ebfa34a87d89f1a84131521b9220e36b06 100644
--- a/process/Email_lib/process.js
+++ b/process/Email_lib/process.js
@@ -78,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,
@@ -87,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)
@@ -111,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);
 }
 
 /**
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..b4d74a2a8f0cb51a439f5c8991d3d1e54a77602b 100644
--- a/process/KeywordRegistry_basic/process.js
+++ b/process/KeywordRegistry_basic/process.js
@@ -286,4 +286,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);