diff --git a/.liquibase/Data_alias/basic/2021.1.3/Checklist/add_checklist_sort.xml b/.liquibase/Data_alias/basic/2021.1.3/Checklist/add_checklist_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c9148f1f81cb644a697330d8665efb8337242dc5
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.1.3/Checklist/add_checklist_sort.xml
@@ -0,0 +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">
+    <changeSet author="p.neub" id="72c02d33-8107-45b2-8034-c96c10ba4164">
+        <addColumn tableName="CHECKLISTENTRY">
+            <column name="POS" type="INTEGER"/>
+        </addColumn>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.1.3/Checklist/changelog.xml b/.liquibase/Data_alias/basic/2021.1.3/Checklist/changelog.xml
index 143e76fb76bd5e61e08fddd9ad0803ac4e3d08e4..cd27f9ce5d10de7c2842d1818e3eedf0205d3900 100644
--- a/.liquibase/Data_alias/basic/2021.1.3/Checklist/changelog.xml
+++ b/.liquibase/Data_alias/basic/2021.1.3/Checklist/changelog.xml
@@ -3,4 +3,5 @@
     <include relativeToChangelogFile="true" file="alter_Checklist.xml"/>
     <include relativeToChangelogFile="true" file="alter_ChecklistEntry.xml"/>
     <include relativeToChangelogFile="true" file="alter_ChecklistDateDatatypes.xml"/>
+    <include relativeToChangelogFile="true" file="add_checklist_sort.xml"/>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.1.3/Classification/alter_ClassificationStorage.xml b/.liquibase/Data_alias/basic/2021.1.3/Classification/alter_ClassificationStorage.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e22019fb52b91ee6bf4e5efaf76e3c8b46986e51
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.1.3/Classification/alter_ClassificationStorage.xml
@@ -0,0 +1,7 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="b.ulrich" id="7eb72f9e-1d36-4174-97cb-062e40f72bf7">
+        <dropColumn tableName="CLASSIFICATIONSTORAGE" columnName="OUTDATED"/>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2021.1.3/Classification/alter_ClassificationType.xml b/.liquibase/Data_alias/basic/2021.1.3/Classification/alter_ClassificationType.xml
new file mode 100644
index 0000000000000000000000000000000000000000..33d20b01fb410ca837602c229d678149231266a2
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.1.3/Classification/alter_ClassificationType.xml
@@ -0,0 +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">
+    <changeSet author="b.ulrich" id="21094fcf-539e-4514-8986-e681747a33e2">
+        <dropColumn tableName="CLASSIFICATIONTYPE" columnName="OUTDATED"/>
+        <addColumn tableName="CLASSIFICATIONTYPE">
+            <column name="SORTING"  type="SMALLINT" />
+       </addColumn>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2021.1.3/Classification/changelog.xml b/.liquibase/Data_alias/basic/2021.1.3/Classification/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5aec9f0e8f24177d4cce144cc649ce151d3421ac
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.1.3/Classification/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 relativeToChangelogFile="true" file="alter_ClassificationStorage.xml"/>
+    <include relativeToChangelogFile="true" file="alter_ClassificationType.xml"/>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.1.3/District/alter_DistrictContact.xml b/.liquibase/Data_alias/basic/2021.1.3/District/alter_DistrictContact.xml
new file mode 100644
index 0000000000000000000000000000000000000000..651f0a81a1cc061abdddc576a26d5280837c1cb7
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.1.3/District/alter_DistrictContact.xml
@@ -0,0 +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">
+  <changeSet author="b.ulrich" id="cfa405a8-4588-4dab-9e5b-6532e6e6f97f">
+      <addColumn tableName="DISTRICTCONTACT">
+          <column name="DISTRICTRESPONSIBLE_ID" type="CHAR(36)"/>
+      </addColumn>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.1.3/District/changelog.xml b/.liquibase/Data_alias/basic/2021.1.3/District/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7a6eb1e219ff6e5cce01b734a599c9c348c38ce6
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.1.3/District/changelog.xml
@@ -0,0 +1,4 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <include relativeToChangelogFile="true" file="alter_DistrictContact.xml"/>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.1.3/Member/alter_member_addResponsible.xml b/.liquibase/Data_alias/basic/2021.1.3/Member/alter_member_addResponsible.xml
new file mode 100644
index 0000000000000000000000000000000000000000..450bf3e6371395a02cf3a6ff37ab39e3622c1054
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.1.3/Member/alter_member_addResponsible.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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="43e3a4e1-d482-4600-b08f-ca3c48fbb222">
+        <addColumn tableName="OBJECTMEMBER">
+            <column name="RESPONSIBLE" type="TINYINT" defaultValueNumeric="0">
+                <constraints nullable="false"/>
+            </column>
+        </addColumn>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.1.3/Member/changelog.xml b/.liquibase/Data_alias/basic/2021.1.3/Member/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e15ca2c39b915f940f440d93a990b2b9279ff217
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.1.3/Member/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="alter_member_addResponsible.xml"/>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.1.3/Salesproject/alter_salesprojectAddDefaultColumns.xml b/.liquibase/Data_alias/basic/2021.1.3/Salesproject/alter_salesprojectAddDefaultColumns.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1ae4062880e32ff7e968bf40550527b8a33e769c
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.1.3/Salesproject/alter_salesprojectAddDefaultColumns.xml
@@ -0,0 +1,13 @@
+<?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="e6db8a44-8854-4939-8566-456d88ae1c5f">
+        <addColumn tableName="SALESPROJECT">
+            <column name="USER_NEW" type="NVARCHAR(50)"/>
+            <column name="USER_EDIT" type="NVARCHAR(50)"/>
+            <!--DATE_NEW already exists-->
+            <column name="DATE_EDIT" type="DATETIME"/>
+        </addColumn>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.1.3/Salesproject/changelog.xml b/.liquibase/Data_alias/basic/2021.1.3/Salesproject/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7cbc04ef51267bc6dc5f1ef169cc20f3a2f7b949
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.1.3/Salesproject/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="alter_salesprojectAddDefaultColumns.xml"/>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.1.3/UpdateAddrFormats.xml b/.liquibase/Data_alias/basic/2021.1.3/UpdateAddrFormats.xml
new file mode 100644
index 0000000000000000000000000000000000000000..15721750eaa90cb9bc570931886847a83db975f7
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.1.3/UpdateAddrFormats.xml
@@ -0,0 +1,9 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="s.pongratz" id="cb065db3-bf61-4d6f-8887-d71540089a41">
+    <update tableName="AB_COUNTRYINFO">
+      <column name="ADDR_FORMAT" value="〒%Z%n%S%n%B %A%n%O%n%N"/>
+      <where>ISO2 = 'JP'</where>
+    </update>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.1.3/Visitplan/alter_VisitRecommendationAddDefaultColumns.xml b/.liquibase/Data_alias/basic/2021.1.3/Visitplan/alter_VisitRecommendationAddDefaultColumns.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5f5e6e96d53e8365dc633f1c4e3df95d88590a36
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.1.3/Visitplan/alter_VisitRecommendationAddDefaultColumns.xml
@@ -0,0 +1,12 @@
+<?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="ef287a87-646b-48eb-9a42-8518f9b4ab14">
+        <addColumn tableName="VISITRECOMMENDATION">
+            <column name="DATE_NEW" type="DATETIME"/>
+            <column name="DATE_EDIT" type="DATETIME"/>
+            <column name="USER_EDIT" type="NVARCHAR(50)"/>
+        </addColumn>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.1.3/Visitplan/changelog.xml b/.liquibase/Data_alias/basic/2021.1.3/Visitplan/changelog.xml
index 0e6c626969481e883f16504e95b59c870b8f5bcc..fb06d0db5cc271b068076fbba3bb62f79624d3c5 100644
--- a/.liquibase/Data_alias/basic/2021.1.3/Visitplan/changelog.xml
+++ b/.liquibase/Data_alias/basic/2021.1.3/Visitplan/changelog.xml
@@ -3,4 +3,7 @@
     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="alter_VisitplanEntry.xml"/>
+    <include relativeToChangelogFile="true" file="init_PersPointOfContact.xml"/>
+    <include relativeToChangelogFile="true" file="alter_VisitRecommendationAddDefaultColumns.xml"/>
+    <include relativeToChangelogFile="true" file="init_PersPointOfContact.xml"/>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.1.3/Visitplan/init_PersPointOfContact.xml b/.liquibase/Data_alias/basic/2021.1.3/Visitplan/init_PersPointOfContact.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0d19d3d1ab18281672a06ae1b54d061739253296
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.1.3/Visitplan/init_PersPointOfContact.xml
@@ -0,0 +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="de242077-43cd-428b-a2db-89ebfd78ae72">
+        <insert tableName="AB_ATTRIBUTE">
+            <column name="AB_ATTRIBUTEID" value="7d78320a-31c6-4c24-992a-a583f47caeb5"/>
+            <column name="ATTRIBUTE_ACTIVE" valueNumeric="1"/>
+            <column name="ATTRIBUTE_NAME" value="Point of Contact"/>
+            <column name="ATTRIBUTE_PARENT_ID" value="59377864-0745-4a18-8d7b-57a0491a8116"/>
+            <column name="ATTRIBUTE_TYPE" value="BOOLEAN"/>
+        </insert>
+        <insert tableName="AB_ATTRIBUTEUSAGE">
+            <column name="AB_ATTRIBUTEUSAGEID" value="24df9727-85ef-4344-a33d-7ac30218b481"/>
+            <column name="AB_ATTRIBUTE_ID" value="7d78320a-31c6-4c24-992a-a583f47caeb5"/>
+            <column name="MAX_COUNT" valueNumeric="1"/>
+            <column name="OBJECT_TYPE" value="Person"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.1.3/changelog.xml b/.liquibase/Data_alias/basic/2021.1.3/changelog.xml
index 873ee73a18365693f428621f488b2483430f5dd7..e6ef5bf468f382fad3e8bd05c3e8f1befe0dc104 100644
--- a/.liquibase/Data_alias/basic/2021.1.3/changelog.xml
+++ b/.liquibase/Data_alias/basic/2021.1.3/changelog.xml
@@ -4,8 +4,14 @@
     xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
     <include relativeToChangelogFile="true" file="defaultWeblinks/changelog.xml"/>
     <include relativeToChangelogFile="true" file="Checklist/changelog.xml"/>
+    <include relativeToChangelogFile="true" file="Member/changelog.xml"/>
+    <include relativeToChangelogFile="true" file="Salesproject/changelog.xml"/>
     <include relativeToChangelogFile="true" file="Visitplan/changelog.xml"/>
     <include relativeToChangelogFile="true" file="alter_dataTypesToDateTime.xml"/>
+    <include relativeToChangelogFile="true" file="Classification/changelog.xml"/>
     <include relativeToChangelogFile="true" file="Grouptask/changelog.xml"/>
     <include relativeToChangelogFile="true" file="Campaign/changelog.xml"/>
+    <include relativeToChangelogFile="true" file="Visitplan/changelog.xml"/>
+    <include relativeToChangelogFile="true" file="UpdateAddrFormats.xml"/>
+    <include relativeToChangelogFile="true" file="District/changelog.xml"/>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/changelog.xml b/.liquibase/Data_alias/basic/_demoData/changelog.xml
index 5bec7adbff122e299ffb84d732950e48b2905eb5..b10c5049de1483e34e78797241e60a8a5e62cbab 100644
--- a/.liquibase/Data_alias/basic/_demoData/changelog.xml
+++ b/.liquibase/Data_alias/basic/_demoData/changelog.xml
@@ -26,7 +26,6 @@
   <include file="generatedData/checklist.xml" relativeToChangelogFile="true"/>
   <include file="generatedData/checklistentry.xml" relativeToChangelogFile="true"/>
   <include file="generatedData/checklistentryvalue.xml" relativeToChangelogFile="true"/>
-  <include file="generatedData/classification.xml" relativeToChangelogFile="true"/>
   <include file="generatedData/classificationgrading.xml" relativeToChangelogFile="true"/>
   <include file="generatedData/classificationgroup.xml" relativeToChangelogFile="true"/>
   <include file="generatedData/classificationscore.xml" relativeToChangelogFile="true"/>
@@ -93,7 +92,6 @@
   <include file="generatedData/salesorderitem.xml" relativeToChangelogFile="true"/>
   <include file="generatedData/salesorderlink.xml" relativeToChangelogFile="true"/>
   <include file="generatedData/salesproject.xml" relativeToChangelogFile="true"/>
-  <include file="generatedData/salesprojectphasedefinition.xml" relativeToChangelogFile="true"/>
   <include file="generatedData/salesproject_milestone.xml" relativeToChangelogFile="true"/>
   <include file="generatedData/salesproject_touchpoint.xml" relativeToChangelogFile="true"/>
   <include file="generatedData/salutation.xml" relativeToChangelogFile="true"/>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/checklist.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/checklist.xml
index 15af508c9ed2f12a8a79e1361ed51eb80ead4bb7..a5d72703994375238d9c781b46bc85fa247ab406 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/checklist.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/checklist.xml
@@ -1,26 +1,66 @@
 <?xml version="1.1" encoding="UTF-8" standalone="no"?>
 <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
-  <changeSet author="autogenerated" id="8af21e7e-b2fb-4ea8-b610-71ccddac8d95">
-    <delete tableName="checklist"/>
-    <insert tableName="checklist">
+  <changeSet author="autogenerated" id="33a7064a-a79c-4ea3-b2be-630259e39f12">
+    <delete tableName="CHECKLIST"/>
+    <insert tableName="CHECKLIST">
       <column name="CHECKLISTID" value="0f95ce44-3b0d-417b-969f-f84897868558"/>
       <column name="USER_NEW" value="Admin"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DESCRIPTION" value="Checkliste für die Phase &quot;Offer&quot;&#10;"/>
+      <column name="TITLE" value="Offer"/>
+      <column name="AUTOPROBABILITY" valueNumeric="75.00"/>
+      <column name="CONTEXT" value="Salesproject"/>
+      <column name="COND" value="{&quot;entity&quot;:&quot;Salesproject_entity&quot;,&quot;filter&quot;:{&quot;type&quot;:&quot;group&quot;,&quot;operator&quot;:&quot;AND&quot;,&quot;childs&quot;:[{&quot;type&quot;:&quot;row&quot;,&quot;name&quot;:&quot;PHASE&quot;,&quot;operator&quot;:&quot;EQUAL&quot;,&quot;value&quot;:&quot;Offer&quot;,&quot;key&quot;:&quot;SALPROJPHASEOFFER&quot;,&quot;contenttype&quot;:&quot;TEXT&quot;}]}}"/>
+      <column name="DATE_NEW" valueDate="2021-08-19T09:51:23"/>
+      <column name="DATE_EDIT" valueDate="2021-08-19T09:52:26"/>
     </insert>
-    <insert tableName="checklist">
+    <insert tableName="CHECKLIST">
       <column name="CHECKLISTID" value="179dcc0d-e6fa-411d-b5ee-cb25b9735dbe"/>
       <column name="USER_NEW" value="Admin"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DESCRIPTION" value="Checkliste für die Phase &quot;Contact&quot;&#10;"/>
+      <column name="TITLE" value="Contact"/>
+      <column name="AUTOPROBABILITY" valueNumeric="25.00"/>
+      <column name="CONTEXT" value="Salesproject"/>
+      <column name="COND" value="{&quot;entity&quot;:&quot;Salesproject_entity&quot;,&quot;filter&quot;:{&quot;type&quot;:&quot;group&quot;,&quot;operator&quot;:&quot;AND&quot;,&quot;childs&quot;:[{&quot;type&quot;:&quot;row&quot;,&quot;name&quot;:&quot;PHASE&quot;,&quot;operator&quot;:&quot;EQUAL&quot;,&quot;value&quot;:&quot;Contact&quot;,&quot;key&quot;:&quot;SALPROJPHASECONTACT&quot;,&quot;contenttype&quot;:&quot;TEXT&quot;}]}}"/>
+      <column name="DATE_NEW" valueDate="2021-08-19T09:51:24"/>
+      <column name="DATE_EDIT" valueDate="2021-08-19T09:52:26"/>
     </insert>
-    <insert tableName="checklist">
+    <insert tableName="CHECKLIST">
       <column name="CHECKLISTID" value="3d0f1d25-cee8-4b83-a0de-3fded83ff9c4"/>
       <column name="USER_NEW" value="Admin"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DESCRIPTION" value="Checkliste für die Phase &quot;Lead&quot;"/>
+      <column name="TITLE" value="Lead"/>
+      <column name="AUTOPROBABILITY" valueNumeric="25.00"/>
+      <column name="CONTEXT" value="Salesproject"/>
+      <column name="COND" value="{&quot;entity&quot;:&quot;Salesproject_entity&quot;,&quot;filter&quot;:{&quot;type&quot;:&quot;group&quot;,&quot;operator&quot;:&quot;AND&quot;,&quot;childs&quot;:[{&quot;type&quot;:&quot;row&quot;,&quot;name&quot;:&quot;PHASE&quot;,&quot;operator&quot;:&quot;EQUAL&quot;,&quot;value&quot;:&quot;Lead&quot;,&quot;key&quot;:&quot;SALPROJPHASELEAD&quot;,&quot;contenttype&quot;:&quot;TEXT&quot;}]}}"/>
+      <column name="DATE_NEW" valueDate="2021-08-19T09:51:24"/>
+      <column name="DATE_EDIT" valueDate="2021-08-19T09:52:26"/>
     </insert>
-    <insert tableName="checklist">
+    <insert tableName="CHECKLIST">
       <column name="CHECKLISTID" value="cb0357c9-a222-4d78-b2c5-035fffe3bb51"/>
       <column name="USER_NEW" value="Admin"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DESCRIPTION" value="Checkliste für die Phase &quot;Negotiation&quot;"/>
+      <column name="TITLE" value="Negotiation"/>
+      <column name="AUTOPROBABILITY" valueNumeric="75.00"/>
+      <column name="CONTEXT" value="Salesproject"/>
+      <column name="COND" value="{&quot;entity&quot;:&quot;Salesproject_entity&quot;,&quot;filter&quot;:{&quot;type&quot;:&quot;group&quot;,&quot;operator&quot;:&quot;AND&quot;,&quot;childs&quot;:[{&quot;type&quot;:&quot;row&quot;,&quot;name&quot;:&quot;PHASE&quot;,&quot;operator&quot;:&quot;EQUAL&quot;,&quot;value&quot;:&quot;Negotiation&quot;,&quot;key&quot;:&quot;SALPROJPHASENEGO&quot;,&quot;contenttype&quot;:&quot;TEXT&quot;}]}}"/>
+      <column name="DATE_NEW" valueDate="2021-08-19T09:51:25"/>
+      <column name="DATE_EDIT" valueDate="2021-08-19T09:52:26"/>
     </insert>
-    <insert tableName="checklist">
+    <insert tableName="CHECKLIST">
       <column name="CHECKLISTID" value="ecf50252-e0c2-4e7a-8cc6-078b5978d2c5"/>
       <column name="USER_NEW" value="Admin"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DESCRIPTION" value="Checkliste für die Phase &quot;Prospect"/>
+      <column name="TITLE" value="Prospect"/>
+      <column name="AUTOPROBABILITY" valueNumeric="75.00"/>
+      <column name="CONTEXT" value="Salesproject"/>
+      <column name="COND" value="{&quot;entity&quot;:&quot;Salesproject_entity&quot;,&quot;filter&quot;:{&quot;type&quot;:&quot;group&quot;,&quot;operator&quot;:&quot;AND&quot;,&quot;childs&quot;:[{&quot;type&quot;:&quot;row&quot;,&quot;name&quot;:&quot;PHASE&quot;,&quot;operator&quot;:&quot;EQUAL&quot;,&quot;value&quot;:&quot;Prospect&quot;,&quot;key&quot;:&quot;SALPROJPHASEPROS&quot;,&quot;contenttype&quot;:&quot;TEXT&quot;}]}}"/>
+      <column name="DATE_NEW" valueDate="2021-08-19T09:51:26"/>
+      <column name="DATE_EDIT" valueDate="2021-08-19T09:52:26"/>
     </insert>
   </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/classification.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/classification.xml
deleted file mode 100644
index fa66e3b4be083ac48b833efe1d007137cf4d45f9..0000000000000000000000000000000000000000
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/classification.xml
+++ /dev/null
@@ -1,2078 +0,0 @@
-<?xml version="1.1" encoding="UTF-8" standalone="no"?>
-<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
-  <changeSet author="autogenerated" id="bb67ebb0-8a26-42d6-95b8-c4e6a35a36f3">
-    <delete tableName="classification"/>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="25.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="0027e606-7932-4e40-9e20-43717b687a64"/>
-      <column name="VALUE" value="a60aaf2d-88aa-4c72-9606-0eb3ac9493cf"/>
-      <column name="OBJECT_ROWID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="008ac315-31ab-4320-bf29-6681708eda88"/>
-      <column name="VALUE" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
-      <column name="OBJECT_ROWID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="00c30050-c850-46b0-8e1d-d70f889655e3"/>
-      <column name="VALUE" value="4d868dc5-747a-4f22-9134-638198d3084a"/>
-      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
-      <column name="SCOREPOINTS" valueNumeric="30.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="028181fe-5687-4904-b7cb-c4a1befe7eed"/>
-      <column name="VALUE" value="b1c55bcd-16c6-4b2f-8f73-e16397b40e93"/>
-      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
-      <column name="SCOREPOINTS" valueNumeric="30.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="02f2f9a4-0d34-472a-b8b2-461fad057c4e"/>
-      <column name="VALUE" value="ba5d70c3-e77a-45ff-828b-7b3e0a61eec2"/>
-      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="0359b7b8-7526-4165-8b01-e90403b206eb"/>
-      <column name="VALUE" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
-      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="03bb8bbb-0644-4376-99fb-b21fc2807f14"/>
-      <column name="VALUE" value="29134094-66f2-4331-9f14-fc6a27ab111e"/>
-      <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="0423c091-7e65-43eb-9ab3-f5a847350845"/>
-      <column name="VALUE" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
-      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="045365c1-9561-4e4f-ad9b-9ce6ef0d0279"/>
-      <column name="VALUE" value="2fdb4d7e-24d5-4eb1-a130-3a0aaeebd8db"/>
-      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="048a95bd-0a82-494d-b7fd-90f5d750f2c7"/>
-      <column name="VALUE" value="29134094-66f2-4331-9f14-fc6a27ab111e"/>
-      <column name="OBJECT_ROWID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="051e9f0f-fc99-4046-90b9-6cfb403844e9"/>
-      <column name="VALUE" value="22581c2e-bb4d-43cb-b6b3-80244425e209"/>
-      <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="0521dd6e-49ca-4a3a-9906-12e8359e3db9"/>
-      <column name="VALUE" value="2f4fddd2-be83-4190-99c3-6de8a7e328c5"/>
-      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
-      <column name="SCOREPOINTS" valueNumeric="50.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="053f18d1-8fe2-4a79-978d-03cc37454ffe"/>
-      <column name="VALUE" value="3fe9f04b-6a85-4a73-a138-ca90b6d8e61c"/>
-      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="058a9ef7-adca-4278-840a-720665fa3cd3"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="0759e286-007b-4568-b4d6-0542900d7ba1"/>
-      <column name="VALUE" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
-      <column name="OBJECT_ROWID" value="449080f6-b714-4189-a261-37439d0d4010"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="085d5901-9ab4-4747-a758-660d952a7a2c"/>
-      <column name="VALUE" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
-      <column name="OBJECT_ROWID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/>
-      <column name="SCOREPOINTS" valueNumeric="12.50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="0969044c-33eb-41eb-9aec-fa3795d8c49f"/>
-      <column name="VALUE" value="3e1e21b0-c10d-4bcb-882c-ac1b239b9cb2"/>
-      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="0a7ec07b-d429-4b0a-aebb-0a194e76428e"/>
-      <column name="VALUE" value="bf6b1757-11da-49a9-a02c-8340139968ee"/>
-      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="0f77577a-7a45-4c3f-be39-35ec364e8242"/>
-      <column name="VALUE" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
-      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="0fcfa75f-9844-49d7-a088-56e570be4cd0"/>
-      <column name="VALUE" value="f1534026-34cc-4898-8711-41cbe4accb60"/>
-      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
-      <column name="SCOREPOINTS" valueNumeric="50.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="1180d429-0453-4b67-a805-7dc101e6ead2"/>
-      <column name="VALUE" value="3fe9f04b-6a85-4a73-a138-ca90b6d8e61c"/>
-      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="122116f6-e858-4605-af18-6c8b21da6455"/>
-      <column name="VALUE" value="2f4fddd2-be83-4190-99c3-6de8a7e328c5"/>
-      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="12280a78-1bc8-411d-9556-57b6ea12343f"/>
-      <column name="VALUE" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
-      <column name="OBJECT_ROWID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="1249cfe4-d2cd-42c2-9df8-93b8f6c1f272"/>
-      <column name="VALUE" value="5564a330-8c13-424f-a24b-5f97185a9036"/>
-      <column name="OBJECT_ROWID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
-      <column name="SCOREPOINTS" valueNumeric="33.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="13771cd8-3694-4a44-8793-cd0fc3fb4b53"/>
-      <column name="VALUE" value="35d8ae15-8993-4ab2-99f6-e57c2ebf0bb3"/>
-      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="13985a1a-1660-4a85-86c1-612bd62df8d7"/>
-      <column name="VALUE" value="2fdb4d7e-24d5-4eb1-a130-3a0aaeebd8db"/>
-      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="13f634ef-70ba-440b-91af-e6324cdb20bb"/>
-      <column name="VALUE" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
-      <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="14148c9a-8afb-42ad-a4c5-d1102241e9f8"/>
-      <column name="VALUE" value="22581c2e-bb4d-43cb-b6b3-80244425e209"/>
-      <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="14f31249-544a-46f9-a2e4-c3bdcf3e49a3"/>
-      <column name="VALUE" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
-      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="2031525e-6ca3-46b4-91d4-7f90cd31a630"/>
-      <column name="SCOREPOINTS" valueNumeric="12.50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="166f3484-53a8-4c44-aad7-ef47a268ae71"/>
-      <column name="VALUE" value="e70a23b4-f2a9-4438-8ba6-742c6c17e5cc"/>
-      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="1743c169-ef67-42b9-81af-99fc753d7a64"/>
-      <column name="VALUE" value="a0c55ee2-0d15-4779-a5a6-93774d5bc393"/>
-      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="1897cf27-f472-4d25-88fe-64bd08915817"/>
-      <column name="VALUE" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
-      <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="25.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="19cd3898-cb8e-4fa3-ade8-89cacb181b7d"/>
-      <column name="VALUE" value="a60aaf2d-88aa-4c72-9606-0eb3ac9493cf"/>
-      <column name="OBJECT_ROWID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="1a093afe-066e-4bbc-b6c9-b913ab8dfdc0"/>
-      <column name="VALUE" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
-      <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="1ac75382-0af9-42d2-8fe5-22295a93e8b3"/>
-      <column name="VALUE" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
-      <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="1af00ea1-11fe-49d7-8a21-29bee4f31991"/>
-      <column name="VALUE" value="5be4d454-1f3e-4a3d-b8a4-3eb49ce1bc35"/>
-      <column name="OBJECT_ROWID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="1dc7de76-80d9-4240-97ae-cab241301a68"/>
-      <column name="VALUE" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
-      <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="1ec41224-e21c-4adf-8b7c-235eca10801c"/>
-      <column name="VALUE" value="bf6b1757-11da-49a9-a02c-8340139968ee"/>
-      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="20092371-2723-45e2-aae0-3a697b1265fc"/>
-      <column name="VALUE" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
-      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="203fb867-ee2f-4c01-8fb5-8e49da32be64"/>
-      <column name="VALUE" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
-      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="b28846e6-befe-4318-93d8-de54fcae369c"/>
-      <column name="SCOREPOINTS" valueNumeric="4.50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="2051e6f0-d607-4cc9-a705-fb35db9748f6"/>
-      <column name="VALUE" value="cb8bee7a-5a18-421c-8c5d-6650d29e480e"/>
-      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="208c8324-e7f9-41b9-93ec-ac7e7f7262b7"/>
-      <column name="VALUE" value="2fdb4d7e-24d5-4eb1-a130-3a0aaeebd8db"/>
-      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="218f1794-26e6-45f2-a26d-98185a49bf4f"/>
-      <column name="VALUE" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
-      <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="22429945-9c82-493c-a0a6-ff31ecaa4b56"/>
-      <column name="VALUE" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
-      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="2314864a-76f7-4fe9-a01f-c5be6ba0669e"/>
-      <column name="VALUE" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
-      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="25bfa0ce-433a-4bb9-992c-df66b02a76da"/>
-      <column name="VALUE" value="6bd19de4-691b-4e78-84dc-cf6f41231978"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="2800c5de-2174-46fb-a50a-d5ae4a28c28d"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/>
-      <column name="SCOREPOINTS" valueNumeric="30.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="28405f79-a635-4ede-8b11-11284c5e7190"/>
-      <column name="VALUE" value="636af750-fcd3-4480-bfe7-ead42bf85280"/>
-      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="289cea03-2c65-4557-b0f9-0dd29b26cecc"/>
-      <column name="VALUE" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
-      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/>
-      <column name="SCOREPOINTS" valueNumeric="12.50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="297cc1a1-1813-4f30-ad70-b452292c3371"/>
-      <column name="VALUE" value="3e1e21b0-c10d-4bcb-882c-ac1b239b9cb2"/>
-      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="2a447c40-23b0-4e45-b932-067c08515da0"/>
-      <column name="VALUE" value="08764209-9b5e-4893-96d0-e2a347bccf60"/>
-      <column name="OBJECT_ROWID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
-      <column name="SCOREPOINTS" valueNumeric="50.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="2a9353ec-78c3-42ae-836f-dcec0a4cfaad"/>
-      <column name="VALUE" value="3fe9f04b-6a85-4a73-a138-ca90b6d8e61c"/>
-      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="2abfbf1f-8f2c-4713-a61b-13ba593d1055"/>
-      <column name="VALUE" value="2fdb4d7e-24d5-4eb1-a130-3a0aaeebd8db"/>
-      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="2b0e75e0-0a36-4397-988d-2ae60e5d2658"/>
-      <column name="VALUE" value="5564a330-8c13-424f-a24b-5f97185a9036"/>
-      <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="2c644b64-0404-4eac-841c-d8579ff25fa6"/>
-      <column name="VALUE" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
-      <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="2e3d4c1e-24b2-4362-bee9-b11fa9847d42"/>
-      <column name="VALUE" value="618bf0d1-18d4-4a96-900c-80a5a616da9b"/>
-      <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="3056c0b4-5e4b-4580-ab89-75ac80920415"/>
-      <column name="VALUE" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
-      <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="df4aacdc-7e17-484c-a96e-a07550a7220e"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="308fee51-494c-4d2d-a16f-ba01ac89b4f8"/>
-      <column name="VALUE" value="4c769195-7bce-45e7-9176-782ff98de8d4"/>
-      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="319dec0d-5ed5-40f8-8c98-b912582a8817"/>
-      <column name="VALUE" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
-      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="31a22039-ac7d-4bb9-9f36-d1f91c6c4052"/>
-      <column name="VALUE" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
-      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="326d5aff-cb21-4bb6-9c32-7fcac48d175c"/>
-      <column name="VALUE" value="5be4d454-1f3e-4a3d-b8a4-3eb49ce1bc35"/>
-      <column name="OBJECT_ROWID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="32b4f1b2-6cc2-4702-a9e0-0a75184c5698"/>
-      <column name="VALUE" value="5564a330-8c13-424f-a24b-5f97185a9036"/>
-      <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="342c7c38-ca79-4e46-9677-5da074ceb60b"/>
-      <column name="VALUE" value="4d868dc5-747a-4f22-9134-638198d3084a"/>
-      <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="3561883e-bec9-4be7-8f0f-985ca694ff04"/>
-      <column name="VALUE" value="b41e180f-db8c-44c3-9fbb-179ab58d5852"/>
-      <column name="OBJECT_ROWID" value="449080f6-b714-4189-a261-37439d0d4010"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="359fddf8-baae-497f-8ad6-d2cab1438473"/>
-      <column name="VALUE" value="893720f9-3780-4868-af0c-cbef5a564024"/>
-      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="35b79ed1-7002-44f1-af61-891cdf863ac9"/>
-      <column name="VALUE" value="618bf0d1-18d4-4a96-900c-80a5a616da9b"/>
-      <column name="OBJECT_ROWID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
-      <column name="SCOREPOINTS" valueNumeric="19.80"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="3672003e-0624-4a51-bb15-48f93bbd4342"/>
-      <column name="VALUE" value="90361317-d80e-4466-a45b-3021bf02e2f9"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="36b1ed8c-a4d4-4203-aa20-52cf10f8d8a0"/>
-      <column name="VALUE" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
-      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="3807eda2-aa0f-4caf-b3ab-0ff341eb887b"/>
-      <column name="VALUE" value="893720f9-3780-4868-af0c-cbef5a564024"/>
-      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="39dc9940-eb00-4ed5-82ec-521f5cc62239"/>
-      <column name="VALUE" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
-      <column name="OBJECT_ROWID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="3da8549a-762a-438f-9878-271c52943fd2"/>
-      <column name="VALUE" value="7e569319-5885-452e-9331-a507f3365236"/>
-      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/>
-      <column name="SCOREPOINTS" valueNumeric="9.90"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="3e9b7598-39a6-4ebc-aa49-8ec3a20f9eb4"/>
-      <column name="VALUE" value="c328cb9e-5cef-4052-a3c1-98e1898eeb63"/>
-      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
-      <column name="SCOREPOINTS" valueNumeric="7.50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="3f410195-bca5-41ac-a819-a8d29506f9e5"/>
-      <column name="VALUE" value="47ec3dbf-f8f6-4418-8dc2-0062510c1a28"/>
-      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/>
-      <column name="SCOREPOINTS" valueNumeric="9.90"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="4164397b-a129-4e37-9586-af6e6133befd"/>
-      <column name="VALUE" value="c328cb9e-5cef-4052-a3c1-98e1898eeb63"/>
-      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/>
-      <column name="SCOREPOINTS" valueNumeric="12.50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="421cdeeb-a5d6-4612-b47b-49db966de27f"/>
-      <column name="VALUE" value="3e1e21b0-c10d-4bcb-882c-ac1b239b9cb2"/>
-      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="440d25a3-39c1-412e-90c7-c0a6366f0794"/>
-      <column name="VALUE" value="2f4fddd2-be83-4190-99c3-6de8a7e328c5"/>
-      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="4444b22f-02d1-4e8f-9073-82d61eba18e0"/>
-      <column name="VALUE" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
-      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="445ccf23-4d44-489a-8054-b46194e104e7"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="46065d3f-a811-430d-8fa2-e048aee894c7"/>
-      <column name="VALUE" value="4c8cfcec-f183-4d82-8a59-ae743ec772b4"/>
-      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="4a61a0fe-394e-4b2f-897a-092fc2c109b2"/>
-      <column name="VALUE" value="b41e180f-db8c-44c3-9fbb-179ab58d5852"/>
-      <column name="OBJECT_ROWID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="4d67d40e-4656-46b0-b5a0-9c299c1ef9d3"/>
-      <column name="VALUE" value="f1534026-34cc-4898-8711-41cbe4accb60"/>
-      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="4e21e953-7146-43dd-a888-92d9f55f561e"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="4e96b522-209b-48ca-b04d-f328416aacdd"/>
-      <column name="VALUE" value="a0c55ee2-0d15-4779-a5a6-93774d5bc393"/>
-      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="522566b0-6eca-40bb-977c-c9a26f730890"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="52c6bccc-1055-48dc-ad5d-311e80a12d2a"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="df4aacdc-7e17-484c-a96e-a07550a7220e"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="52d997a1-aa11-43e6-9728-7c8b479aac6e"/>
-      <column name="VALUE" value="21697201-96ae-4c52-848e-e3d228e003b8"/>
-      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="df4aacdc-7e17-484c-a96e-a07550a7220e"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="5323d3e3-af2e-454f-b33b-dd7f01c1ce1b"/>
-      <column name="VALUE" value="4c769195-7bce-45e7-9176-782ff98de8d4"/>
-      <column name="OBJECT_ROWID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="25.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="55401dae-a111-4e69-9c26-21fa9badd973"/>
-      <column name="VALUE" value="51575eb6-4005-42d2-96f3-b35dfd06a86b"/>
-      <column name="OBJECT_ROWID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="55569485-c1f8-4bef-9e94-2b64c9b6bd4e"/>
-      <column name="VALUE" value="9ac96400-9c47-4d4f-be5b-e053f92a54ce"/>
-      <column name="OBJECT_ROWID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="555a280b-a2e4-4eb5-bbec-87bca3987395"/>
-      <column name="VALUE" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
-      <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="25.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="568cebf1-2494-44e0-9eb8-91bbcf1189eb"/>
-      <column name="VALUE" value="51575eb6-4005-42d2-96f3-b35dfd06a86b"/>
-      <column name="OBJECT_ROWID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="df4aacdc-7e17-484c-a96e-a07550a7220e"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="5696dd08-4d0b-4807-963b-daa0de06da13"/>
-      <column name="VALUE" value="21697201-96ae-4c52-848e-e3d228e003b8"/>
-      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="57a2e5d3-0aa9-48a1-89f8-2db8967ffed6"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="58642867-f8fc-45c1-a926-06306498a9c8"/>
-      <column name="VALUE" value="d5beb18f-c53e-438d-8b0b-7699aa20fba7"/>
-      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
-      <column name="SCOREPOINTS" valueNumeric="30.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="58671a19-6522-46e6-93ba-8f62bf580048"/>
-      <column name="VALUE" value="3c9ceefa-5c98-4629-9c6d-d46b6cad8b78"/>
-      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="597de33c-b223-4d55-bed7-aeb1d161fc2e"/>
-      <column name="VALUE" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
-      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="5a5e780b-01af-4a0f-bcd6-74c0c588210a"/>
-      <column name="VALUE" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
-      <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="b28846e6-befe-4318-93d8-de54fcae369c"/>
-      <column name="SCOREPOINTS" valueNumeric="9.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="5b4fe44c-bfd5-4de4-a617-c4059f158185"/>
-      <column name="VALUE" value="124fd303-acb0-4e0b-a411-0473577a0da9"/>
-      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="5bb5e000-5bba-4895-a5b8-374c2c5bd3a4"/>
-      <column name="VALUE" value="4c8cfcec-f183-4d82-8a59-ae743ec772b4"/>
-      <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="5bb7b949-cc0b-4724-a5e9-37bfcfe55813"/>
-      <column name="VALUE" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
-      <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="5c1b2604-da33-4268-8400-5fb4b23c436b"/>
-      <column name="VALUE" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
-      <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="5ce0c1b0-c040-462e-bd19-c8e109449b8e"/>
-      <column name="VALUE" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
-      <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="5dd419ab-971f-42fd-9bb6-2247a6b4175b"/>
-      <column name="VALUE" value="22581c2e-bb4d-43cb-b6b3-80244425e209"/>
-      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="5f0cdce4-81b4-4c05-9011-4d76bdc21b65"/>
-      <column name="VALUE" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
-      <column name="OBJECT_ROWID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
-      <column name="SCOREPOINTS" valueNumeric="7.50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="6017fea2-7e31-4220-86f4-cf72123af805"/>
-      <column name="VALUE" value="47ec3dbf-f8f6-4418-8dc2-0062510c1a28"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="25.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="6048f088-dde7-4134-a101-f5e8f8b70cf5"/>
-      <column name="VALUE" value="a60aaf2d-88aa-4c72-9606-0eb3ac9493cf"/>
-      <column name="OBJECT_ROWID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
-      <column name="SCOREPOINTS" valueNumeric="30.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="6111dd76-4786-43bf-b6ce-74b36415ad03"/>
-      <column name="VALUE" value="3c9ceefa-5c98-4629-9c6d-d46b6cad8b78"/>
-      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="b28846e6-befe-4318-93d8-de54fcae369c"/>
-      <column name="SCOREPOINTS" valueNumeric="1.50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="628b6249-9c20-4fc7-9a66-0bce4b1b64d8"/>
-      <column name="VALUE" value="aa5f6e3a-3e0f-42bb-ba12-fc7483410f1e"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="62b9dacc-7d6f-4e05-81f8-6a425e369489"/>
-      <column name="VALUE" value="893720f9-3780-4868-af0c-cbef5a564024"/>
-      <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="62cc115a-f80e-4a0f-899e-8060e9ed575e"/>
-      <column name="VALUE" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
-      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/>
-      <column name="SCOREPOINTS" valueNumeric="12.50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="6382b5d7-06a3-4584-8314-e00abdd8e8e9"/>
-      <column name="VALUE" value="3e1e21b0-c10d-4bcb-882c-ac1b239b9cb2"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="65f45f0d-ab41-4a83-b5f7-795dc21d0fd4"/>
-      <column name="VALUE" value="893720f9-3780-4868-af0c-cbef5a564024"/>
-      <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="6685c781-a87d-4102-8764-27f0fcb0dc60"/>
-      <column name="VALUE" value="5be4d454-1f3e-4a3d-b8a4-3eb49ce1bc35"/>
-      <column name="OBJECT_ROWID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="b28846e6-befe-4318-93d8-de54fcae369c"/>
-      <column name="SCOREPOINTS" valueNumeric="4.50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="671acdd4-d70d-4b73-90a7-4acce3514181"/>
-      <column name="VALUE" value="cb8bee7a-5a18-421c-8c5d-6650d29e480e"/>
-      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="6800e69f-33b1-44ae-b3a2-d7362bfddbf8"/>
-      <column name="VALUE" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
-      <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="688cdc0d-d1a7-46ad-95c3-7503c054ee2c"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="6a6dfe13-6fcc-4ae9-b12b-dced4a55daef"/>
-      <column name="VALUE" value="893720f9-3780-4868-af0c-cbef5a564024"/>
-      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="6bbe5de0-4302-4467-9f3b-a0292485b214"/>
-      <column name="VALUE" value="a0c55ee2-0d15-4779-a5a6-93774d5bc393"/>
-      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="6d3464fa-eadd-4afd-b4e1-3031726770d5"/>
-      <column name="VALUE" value="4d868dc5-747a-4f22-9134-638198d3084a"/>
-      <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="6dadd578-7e24-41cd-ab27-7baa29e4691b"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="6e187a9b-2e57-4da2-8132-9f576a28d6f7"/>
-      <column name="VALUE" value="2f4fddd2-be83-4190-99c3-6de8a7e328c5"/>
-      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="717dfb2c-2e2c-46c8-b72c-8d81e61b94c1"/>
-      <column name="VALUE" value="92708239-fd7f-4699-8aaa-b6290fedaac0"/>
-      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="740bcc4c-b621-458e-874e-034cf70965bc"/>
-      <column name="VALUE" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
-      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="75fd708e-78a9-442f-8ddb-913b8fd29cdf"/>
-      <column name="VALUE" value="5be4d454-1f3e-4a3d-b8a4-3eb49ce1bc35"/>
-      <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="76990230-73ec-4026-8a28-871ac5b4edc6"/>
-      <column name="VALUE" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
-      <column name="OBJECT_ROWID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="77941d3d-e876-44b3-b824-3a075d7dd398"/>
-      <column name="VALUE" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
-      <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="77a11bd3-a521-4701-b564-7f8b07000f0b"/>
-      <column name="VALUE" value="d5beb18f-c53e-438d-8b0b-7699aa20fba7"/>
-      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="77f0f0bd-eaca-44ef-abfa-9156eac6eb7e"/>
-      <column name="VALUE" value="22581c2e-bb4d-43cb-b6b3-80244425e209"/>
-      <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="7884869d-85ab-458f-9078-e2dd7234be91"/>
-      <column name="VALUE" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
-      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="79cc0205-25f8-44a9-b682-a31df2068e3f"/>
-      <column name="VALUE" value="3eb18b76-f51e-4ad2-9080-74b4a603667b"/>
-      <column name="OBJECT_ROWID" value="449080f6-b714-4189-a261-37439d0d4010"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="df4aacdc-7e17-484c-a96e-a07550a7220e"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="7c8baa19-4e39-4432-8ea8-f7be9890dcf6"/>
-      <column name="VALUE" value="21697201-96ae-4c52-848e-e3d228e003b8"/>
-      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="7d131f29-0430-44ad-b4ec-7044a67e0e3b"/>
-      <column name="VALUE" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
-      <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
-      <column name="SCOREPOINTS" valueNumeric="30.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="80beaf88-415d-49da-ae0b-c4d6528747a2"/>
-      <column name="VALUE" value="3c9ceefa-5c98-4629-9c6d-d46b6cad8b78"/>
-      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
-      <column name="SCOREPOINTS" valueNumeric="7.50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="81d75e31-673b-426e-827f-c505b386ce0e"/>
-      <column name="VALUE" value="47ec3dbf-f8f6-4418-8dc2-0062510c1a28"/>
-      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="81deaf11-9f63-4cc8-b83c-8711f5e3f734"/>
-      <column name="VALUE" value="893720f9-3780-4868-af0c-cbef5a564024"/>
-      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="b28846e6-befe-4318-93d8-de54fcae369c"/>
-      <column name="SCOREPOINTS" valueNumeric="4.50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="82fe57c2-b590-4c10-a6df-80a2f23df216"/>
-      <column name="VALUE" value="cb8bee7a-5a18-421c-8c5d-6650d29e480e"/>
-      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="25.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="83537aae-14a3-499f-a94b-9c630745110b"/>
-      <column name="VALUE" value="a60aaf2d-88aa-4c72-9606-0eb3ac9493cf"/>
-      <column name="OBJECT_ROWID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="83d2e0f5-b7f5-4305-8da7-69e27da99f98"/>
-      <column name="VALUE" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
-      <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="84ca4de3-ba44-40b4-8727-c5e23861c2c9"/>
-      <column name="VALUE" value="5be4d454-1f3e-4a3d-b8a4-3eb49ce1bc35"/>
-      <column name="OBJECT_ROWID" value="449080f6-b714-4189-a261-37439d0d4010"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="8502a2c8-fb7e-44f2-91cb-3d44d2d50d98"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="85b54389-50f9-4bd3-838b-d3941bda2cc1"/>
-      <column name="VALUE" value="92708239-fd7f-4699-8aaa-b6290fedaac0"/>
-      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="8c133476-7e1a-4120-8127-b45228bd5403"/>
-      <column name="VALUE" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
-      <column name="OBJECT_ROWID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="8c792586-2d2d-41a3-933b-6f679dd4011e"/>
-      <column name="VALUE" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
-      <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="8d830242-7eb6-4185-b1cc-3e7977e6c340"/>
-      <column name="VALUE" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
-      <column name="OBJECT_ROWID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/>
-      <column name="SCOREPOINTS" valueNumeric="12.50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="8f44739a-7103-4dd3-8f1f-25afbae07cd0"/>
-      <column name="VALUE" value="3e1e21b0-c10d-4bcb-882c-ac1b239b9cb2"/>
-      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="8fbd5ec4-bb9a-4c33-aa8d-73185d4b0746"/>
-      <column name="VALUE" value="5be4d454-1f3e-4a3d-b8a4-3eb49ce1bc35"/>
-      <column name="OBJECT_ROWID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="905cae71-9e4b-48f2-9de3-fcb8607d01a1"/>
-      <column name="VALUE" value="a0c55ee2-0d15-4779-a5a6-93774d5bc393"/>
-      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="91cd0603-ac46-420b-81d4-0e1c72a916bf"/>
-      <column name="VALUE" value="893720f9-3780-4868-af0c-cbef5a564024"/>
-      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="9260ed8f-3b4a-4c5a-9077-0fe59105883b"/>
-      <column name="VALUE" value="4d868dc5-747a-4f22-9134-638198d3084a"/>
-      <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="9286af56-8942-4e30-8ed3-cde6bf2e77d5"/>
-      <column name="VALUE" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
-      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
-      <column name="SCOREPOINTS" valueNumeric="30.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="93f4dfdf-b07b-4dc5-91a3-7db80cc314fc"/>
-      <column name="VALUE" value="3c9ceefa-5c98-4629-9c6d-d46b6cad8b78"/>
-      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="9452b219-64af-4c27-8f35-0ba81210abf3"/>
-      <column name="VALUE" value="d5beb18f-c53e-438d-8b0b-7699aa20fba7"/>
-      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="94a737b7-d4f6-4a13-b06b-05a225d9225b"/>
-      <column name="VALUE" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
-      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
-      <column name="SCOREPOINTS" valueNumeric="30.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="94a83ec1-8e6d-4c1b-90a0-54eeac52277b"/>
-      <column name="VALUE" value="ba5d70c3-e77a-45ff-828b-7b3e0a61eec2"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="94bbfbe5-136f-40f2-af1f-8a47e1414a8c"/>
-      <column name="VALUE" value="29134094-66f2-4331-9f14-fc6a27ab111e"/>
-      <column name="OBJECT_ROWID" value="449080f6-b714-4189-a261-37439d0d4010"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="95f0f027-799b-48fd-b1b5-49f70760a008"/>
-      <column name="VALUE" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
-      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="965bd86a-ad6d-4440-a7a3-e4bcf1b0a505"/>
-      <column name="VALUE" value="4d868dc5-747a-4f22-9134-638198d3084a"/>
-      <column name="OBJECT_ROWID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="971cee9d-9b1f-4b57-9635-9bbfdb792958"/>
-      <column name="VALUE" value="5be4d454-1f3e-4a3d-b8a4-3eb49ce1bc35"/>
-      <column name="OBJECT_ROWID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="25.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="9772b8f6-08c6-40aa-af16-df68bcecb77f"/>
-      <column name="VALUE" value="51575eb6-4005-42d2-96f3-b35dfd06a86b"/>
-      <column name="OBJECT_ROWID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="25.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="98d2e3c1-f308-4a7a-a12f-4d24b45d4db9"/>
-      <column name="VALUE" value="51575eb6-4005-42d2-96f3-b35dfd06a86b"/>
-      <column name="OBJECT_ROWID" value="449080f6-b714-4189-a261-37439d0d4010"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="9aa3789c-bc9d-43cf-a121-2575090c2dc4"/>
-      <column name="VALUE" value="a0c55ee2-0d15-4779-a5a6-93774d5bc393"/>
-      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="9af237aa-daa0-4195-a301-a815497a75b6"/>
-      <column name="VALUE" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
-      <column name="OBJECT_ROWID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="9c457191-c7c7-4a4f-bb91-8a48d27add92"/>
-      <column name="VALUE" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
-      <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
-      <column name="SCOREPOINTS" valueNumeric="50.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="9cc46dc2-f40a-4c3b-aabd-c77858f5d770"/>
-      <column name="VALUE" value="3fe9f04b-6a85-4a73-a138-ca90b6d8e61c"/>
-      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="9ea74c40-7732-4d0a-a489-f50bc60caf8b"/>
-      <column name="VALUE" value="92708239-fd7f-4699-8aaa-b6290fedaac0"/>
-      <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="9ec7bc3e-dc4c-40e4-bcee-bd59ab949d42"/>
-      <column name="VALUE" value="4c8cfcec-f183-4d82-8a59-ae743ec772b4"/>
-      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="9f5975c7-3df6-4fa4-87e4-7a1c0dbd967c"/>
-      <column name="VALUE" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
-      <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="2031525e-6ca3-46b4-91d4-7f90cd31a630"/>
-      <column name="SCOREPOINTS" valueNumeric="25.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="9f85a0f0-6576-4077-99fc-953d8ab53352"/>
-      <column name="VALUE" value="3dc5fc76-d2d5-4911-891a-3aacc5a9c925"/>
-      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="9fcf5382-f070-4698-a011-748c8584733b"/>
-      <column name="VALUE" value="5564a330-8c13-424f-a24b-5f97185a9036"/>
-      <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="a0120295-79d1-429f-aef4-b9cce9c92de2"/>
-      <column name="VALUE" value="893720f9-3780-4868-af0c-cbef5a564024"/>
-      <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="a027bccd-c894-443e-bdde-f32ee0b88285"/>
-      <column name="VALUE" value="1f924d71-c500-4cdd-bc52-4718a6b88e45"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="a03201a8-0858-45e0-a0e2-9b70f5a35061"/>
-      <column name="VALUE" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
-      <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="a1591490-e7c3-46b1-8d7e-843acbe93b41"/>
-      <column name="VALUE" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
-      <column name="OBJECT_ROWID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="a28dd724-cd0b-48f4-afd5-840ddc611026"/>
-      <column name="VALUE" value="a0c55ee2-0d15-4779-a5a6-93774d5bc393"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="a3081728-77d9-4c92-96b5-6fa21659a33f"/>
-      <column name="VALUE" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
-      <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="2031525e-6ca3-46b4-91d4-7f90cd31a630"/>
-      <column name="SCOREPOINTS" valueNumeric="25.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="a3e22367-c33f-4f2c-ad0c-8f9eb6ab572a"/>
-      <column name="VALUE" value="3dc5fc76-d2d5-4911-891a-3aacc5a9c925"/>
-      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="25.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="a3e2d764-bd51-4f06-a0a0-0e5f4b37d41b"/>
-      <column name="VALUE" value="a60aaf2d-88aa-4c72-9606-0eb3ac9493cf"/>
-      <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="df4aacdc-7e17-484c-a96e-a07550a7220e"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="a42c6ab9-2d12-4b5f-92f9-d071061afb90"/>
-      <column name="VALUE" value="21697201-96ae-4c52-848e-e3d228e003b8"/>
-      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="a51c9515-80bc-4902-8d9b-115179ab40df"/>
-      <column name="VALUE" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
-      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="a5ce852a-83e6-4b0e-b3fa-310ea99c7e87"/>
-      <column name="VALUE" value="4d868dc5-747a-4f22-9134-638198d3084a"/>
-      <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="a63b089c-f856-4513-8691-57422e400dc4"/>
-      <column name="VALUE" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
-      <column name="OBJECT_ROWID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="a653069f-927d-425a-8956-aeb15a2c4bc8"/>
-      <column name="VALUE" value="4d868dc5-747a-4f22-9134-638198d3084a"/>
-      <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="a69faa8d-afaa-40cd-97e6-65a851f5dde1"/>
-      <column name="VALUE" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
-      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="a728d498-dd75-4b96-a5e5-cbdccd10b0b2"/>
-      <column name="VALUE" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
-      <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="a76fcafb-a84d-4505-8c68-1b221482e292"/>
-      <column name="VALUE" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
-      <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="a7b9862c-6a25-4bbc-92ec-7bfb25cdb6c0"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="a7d7fd5c-624c-4d64-929b-2b0eb146ab9d"/>
-      <column name="VALUE" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
-      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="a898ffe5-96ec-4eef-9e0c-6a2622fc74fc"/>
-      <column name="VALUE" value="92708239-fd7f-4699-8aaa-b6290fedaac0"/>
-      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="a8c2d3c5-423f-45fa-a8db-cd2ab59c5045"/>
-      <column name="VALUE" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
-      <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="ac0944d2-b184-45f5-983a-6c873aadfb8e"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/>
-      <column name="SCOREPOINTS" valueNumeric="30.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="b06e62a0-53b0-4046-b024-b00293e632f2"/>
-      <column name="VALUE" value="b3792b08-4b07-4ed2-9bee-4673182b7349"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="b1cb759c-f17c-4277-bee1-e50717d8934a"/>
-      <column name="VALUE" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
-      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="b38101bf-3d36-4509-9637-a428beb9999a"/>
-      <column name="VALUE" value="2fdb4d7e-24d5-4eb1-a130-3a0aaeebd8db"/>
-      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="b3846b7c-e70a-43fe-9637-ea74ed1fe0d7"/>
-      <column name="VALUE" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
-      <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="b49911f5-fccc-4dba-a46a-32fd56cf8b8f"/>
-      <column name="VALUE" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
-      <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/>
-      <column name="SCOREPOINTS" valueNumeric="9.90"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="b6d36680-909d-4470-9bf4-0a8b8a7807b1"/>
-      <column name="VALUE" value="c328cb9e-5cef-4052-a3c1-98e1898eeb63"/>
-      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="b6ed4614-ea3d-4b2d-a9c3-44d146724b71"/>
-      <column name="VALUE" value="22581c2e-bb4d-43cb-b6b3-80244425e209"/>
-      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="2031525e-6ca3-46b4-91d4-7f90cd31a630"/>
-      <column name="SCOREPOINTS" valueNumeric="12.50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="b7d6e658-96b3-4664-b7db-139b73add7e3"/>
-      <column name="VALUE" value="e70a23b4-f2a9-4438-8ba6-742c6c17e5cc"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="b828dfb2-943a-4f81-b950-fbe4db3d19b7"/>
-      <column name="VALUE" value="893720f9-3780-4868-af0c-cbef5a564024"/>
-      <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="b923621f-e48e-4a77-9f67-f63f5a0b0fbb"/>
-      <column name="VALUE" value="4d868dc5-747a-4f22-9134-638198d3084a"/>
-      <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="25.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="bb5ee550-320f-491a-a48f-b1ecf41ef90c"/>
-      <column name="VALUE" value="a60aaf2d-88aa-4c72-9606-0eb3ac9493cf"/>
-      <column name="OBJECT_ROWID" value="449080f6-b714-4189-a261-37439d0d4010"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="bc61586b-a63e-4d69-82ad-62b02ea2b28a"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="beb7f0ec-3331-49f9-b440-0099f62205c0"/>
-      <column name="VALUE" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
-      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="c179fe12-4bb0-495d-99d0-0159d0466bc0"/>
-      <column name="VALUE" value="4d868dc5-747a-4f22-9134-638198d3084a"/>
-      <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="2031525e-6ca3-46b4-91d4-7f90cd31a630"/>
-      <column name="SCOREPOINTS" valueNumeric="25.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="c28d914e-ad91-4202-9fe6-0d0d41e53836"/>
-      <column name="VALUE" value="3dc5fc76-d2d5-4911-891a-3aacc5a9c925"/>
-      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="b28846e6-befe-4318-93d8-de54fcae369c"/>
-      <column name="SCOREPOINTS" valueNumeric="9.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="c4b8f787-963e-4bcc-8da0-7d99bb75789a"/>
-      <column name="VALUE" value="124fd303-acb0-4e0b-a411-0473577a0da9"/>
-      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/>
-      <column name="SCOREPOINTS" valueNumeric="12.50"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="c4dc8a62-edc1-4af6-b7c6-f91f6ab700c5"/>
-      <column name="VALUE" value="3e1e21b0-c10d-4bcb-882c-ac1b239b9cb2"/>
-      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="c58b5e5a-b4fe-4dec-a93d-79848e564b87"/>
-      <column name="VALUE" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
-      <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="c5d4a548-7a5a-4695-b746-526ef41f5035"/>
-      <column name="VALUE" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
-      <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="c61069c1-fe41-4585-9d75-cef27d534ceb"/>
-      <column name="VALUE" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
-      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="c7b46dff-956a-47e1-8a7f-7d3f56c81da1"/>
-      <column name="VALUE" value="d5beb18f-c53e-438d-8b0b-7699aa20fba7"/>
-      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="c9208276-8f53-424d-821b-e37f041f864a"/>
-      <column name="VALUE" value="92708239-fd7f-4699-8aaa-b6290fedaac0"/>
-      <column name="OBJECT_ROWID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="caaa6b4e-34e3-4337-b65f-abe761a8c24c"/>
-      <column name="VALUE" value="22581c2e-bb4d-43cb-b6b3-80244425e209"/>
-      <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="cb7df4e3-e15c-4e65-92f4-ecd5cda09f95"/>
-      <column name="VALUE" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
-      <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="df4aacdc-7e17-484c-a96e-a07550a7220e"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="cc878532-031e-4b4e-86a3-d81b15b98a25"/>
-      <column name="VALUE" value="4c769195-7bce-45e7-9176-782ff98de8d4"/>
-      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="ccaea5d2-64c3-4255-9825-c91784ba5f54"/>
-      <column name="VALUE" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
-      <column name="OBJECT_ROWID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="2031525e-6ca3-46b4-91d4-7f90cd31a630"/>
-      <column name="SCOREPOINTS" valueNumeric="25.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="cd531b73-1390-498e-a83d-a50c964c24ea"/>
-      <column name="VALUE" value="3dc5fc76-d2d5-4911-891a-3aacc5a9c925"/>
-      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="cf051c11-5f8e-401c-8e57-aabc55496eb8"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="d03c3aa2-c97f-4bd4-b92f-7e09d594cdb8"/>
-      <column name="VALUE" value="893720f9-3780-4868-af0c-cbef5a564024"/>
-      <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="d18a0dec-5161-488d-958d-3d9ea88f32f3"/>
-      <column name="VALUE" value="4c8cfcec-f183-4d82-8a59-ae743ec772b4"/>
-      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="d33aeb65-0c28-48a1-9a81-105faa882a4c"/>
-      <column name="VALUE" value="c9d4e28d-7935-42c5-9da5-5ce0b51b425a"/>
-      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="d3932d83-8afe-47ff-aff9-7d23bd443669"/>
-      <column name="VALUE" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
-      <column name="OBJECT_ROWID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="d3b5f0ad-1a66-4eee-a40d-36daf317d510"/>
-      <column name="VALUE" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
-      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="d5db188e-4e30-4179-8c3a-339bc16fa2ab"/>
-      <column name="VALUE" value="f02cfd28-5a09-42ca-b805-07b7b38e3363"/>
-      <column name="OBJECT_ROWID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="d6443737-e23b-42fa-81a8-d5e86636fb79"/>
-      <column name="VALUE" value="893720f9-3780-4868-af0c-cbef5a564024"/>
-      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="d6d64590-9299-4348-8e21-0cac9f84f51a"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="d70e23a7-bc3c-43ae-8b2c-44d85fc7a2d3"/>
-      <column name="VALUE" value="3eb18b76-f51e-4ad2-9080-74b4a603667b"/>
-      <column name="OBJECT_ROWID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="d74914a9-05f6-4433-9121-87755b724fb4"/>
-      <column name="VALUE" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
-      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="d9cce938-36d9-4a80-9bc2-9e37e6ed64ce"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="da16c6c0-3bdf-4af5-b810-e85babe83e69"/>
-      <column name="VALUE" value="22581c2e-bb4d-43cb-b6b3-80244425e209"/>
-      <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/>
-      <column name="SCOREPOINTS" valueNumeric="30.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="da44d022-9ea6-4fcb-9491-c5b7236c642f"/>
-      <column name="VALUE" value="b3792b08-4b07-4ed2-9bee-4673182b7349"/>
-      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="dccab9b9-5306-4325-896f-99646139b5ba"/>
-      <column name="VALUE" value="893720f9-3780-4868-af0c-cbef5a564024"/>
-      <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="ddb5083d-9410-4b9c-82a4-496370b868e3"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="dfaec9c0-d9fa-4362-a955-341addc3a76d"/>
-      <column name="VALUE" value="d5beb18f-c53e-438d-8b0b-7699aa20fba7"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/>
-      <column name="SCOREPOINTS" valueNumeric="7.40"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="e10a5ecb-b0f3-4b08-a380-de1a04fbc87f"/>
-      <column name="VALUE" value="a177b155-4665-4af1-b50e-0b59e8ac2752"/>
-      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="e14fd7cc-abca-4296-bbd6-d9605d1e6f00"/>
-      <column name="VALUE" value="3eb18b76-f51e-4ad2-9080-74b4a603667b"/>
-      <column name="OBJECT_ROWID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="e27e1f4b-bca2-4928-9652-950762723531"/>
-      <column name="VALUE" value="4d868dc5-747a-4f22-9134-638198d3084a"/>
-      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="e4d83d98-fcf8-402e-9d81-17f374654df7"/>
-      <column name="VALUE" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
-      <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="e567dc3e-fb98-4b17-b503-499497b691a6"/>
-      <column name="VALUE" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
-      <column name="OBJECT_ROWID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="e7a7da18-7283-4d75-ab9f-06f62972293c"/>
-      <column name="VALUE" value="5564a330-8c13-424f-a24b-5f97185a9036"/>
-      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/>
-      <column name="SCOREPOINTS" valueNumeric="9.90"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="e90c4086-db5f-4099-ba26-67799eb25e44"/>
-      <column name="VALUE" value="c328cb9e-5cef-4052-a3c1-98e1898eeb63"/>
-      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="eba1581a-1235-4139-a33a-687513436777"/>
-      <column name="VALUE" value="4c8cfcec-f183-4d82-8a59-ae743ec772b4"/>
-      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="ed2a3c86-814d-4212-a2da-5875d0d3c598"/>
-      <column name="VALUE" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
-      <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="efe87026-b813-4bb7-a3c8-4ef72e2076b8"/>
-      <column name="VALUE" value="5564a330-8c13-424f-a24b-5f97185a9036"/>
-      <column name="OBJECT_ROWID" value="449080f6-b714-4189-a261-37439d0d4010"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="f11eeaac-645d-416e-a50d-259f6ead0c30"/>
-      <column name="VALUE" value="22581c2e-bb4d-43cb-b6b3-80244425e209"/>
-      <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="f25ef82a-6466-49c7-aa35-1f4d750218ca"/>
-      <column name="VALUE" value="92708239-fd7f-4699-8aaa-b6290fedaac0"/>
-      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="f47c0ea2-3a6d-4d7b-8f89-bb2d9799fd0e"/>
-      <column name="VALUE" value="bf6b1757-11da-49a9-a02c-8340139968ee"/>
-      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="f5dd89ed-f6ae-4676-aa83-906211570a5b"/>
-      <column name="VALUE" value="893720f9-3780-4868-af0c-cbef5a564024"/>
-      <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="f5e4ebc2-e0a7-4ab0-b7e1-dc43c2913135"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
-      <column name="SCOREPOINTS" valueNumeric="5.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="f60f8fe8-5ee9-43b4-a0cd-50b0f354bf79"/>
-      <column name="VALUE" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
-      <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="f7118dce-dac9-4821-a709-bb7e9db8170a"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="449080f6-b714-4189-a261-37439d0d4010"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="f724bcdf-ac46-4296-be41-2febc7747ce1"/>
-      <column name="VALUE" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
-      <column name="OBJECT_ROWID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
-      <column name="SCOREPOINTS" valueNumeric="0.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="f738a3d6-b4e0-491e-8d51-a83ce039fbc8"/>
-      <column name="VALUE" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
-      <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="f7f7022f-57a2-4944-a9d3-e092e1be43b3"/>
-      <column name="VALUE" value="2119cb62-b57c-40be-aff8-ace8e40378d4"/>
-      <column name="OBJECT_ROWID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
-      <column name="SCOREPOINTS" valueNumeric="35.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="fa07168c-6aa5-4b9d-935e-6ece6e1c5bdb"/>
-      <column name="VALUE" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
-      <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
-      <column name="SCOREPOINTS" valueNumeric="15.00"/>
-      <column name="OBJECT_TYPE" value="Salesproject"/>
-      <column name="CLASSIFICATIONID" value="fbc32ea9-8350-463a-846e-71a30851f15a"/>
-      <column name="VALUE" value="bf6b1757-11da-49a9-a02c-8340139968ee"/>
-      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="fc10831b-65ea-4ecb-b52e-98c6f54b2a9a"/>
-      <column name="VALUE" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
-      <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="SCOREPOINTS" valueNumeric="10.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="fcdedb8a-a863-47a8-93af-379c451fedb0"/>
-      <column name="VALUE" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
-      <column name="OBJECT_ROWID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
-    </insert>
-    <insert tableName="classification">
-      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
-      <column name="SCOREPOINTS" valueNumeric="20.00"/>
-      <column name="OBJECT_TYPE" value="Organisation"/>
-      <column name="CLASSIFICATIONID" value="fd0fea13-2322-4664-bf15-8026a91bebd2"/>
-      <column name="VALUE" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
-      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
-    </insert>
-  </changeSet>
-</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationstorage.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationstorage.xml
index 7f325d63ec37f95cd985d44f0b8514ec83cff3a4..665553cfbde037bb0b8dfce856a275cf440c1e6f 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationstorage.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationstorage.xml
@@ -4,245 +4,210 @@
     <delete tableName="classificationstorage"/>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="04b4ac80-a316-437a-b113-e7de14e181a8"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONVALUE" value="AC"/>
       <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="0adb8953-1685-45cf-bcf7-c2c2098aa215"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="BC"/>
       <column name="OBJECT_ROWID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="1251e4b0-195d-4556-a10e-7942f1b0e337"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="CC"/>
       <column name="OBJECT_ROWID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="166e729d-45c6-4dab-bff2-940d2b618f6b"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONVALUE" value="BC"/>
       <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="1aafcbf6-6feb-4916-a4fd-58c138eb8f8f"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONVALUE" value="BC"/>
       <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="25a1b340-538d-4c4f-8b1e-25126286cd53"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="--"/>
       <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="2ab913d3-e1a8-4fe2-904b-77b02f6be689"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="DC"/>
       <column name="OBJECT_ROWID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="2d589e75-b1fe-462e-b9c2-657ec5cf7e0d"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONVALUE" value="CC"/>
       <column name="OBJECT_ROWID" value="cdaa7f90-6e3d-4199-974b-0847b867a419"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="3893da8a-f357-46e0-a0b9-65aa58b0dfa6"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="--"/>
       <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="42cc772e-53c6-4849-be29-ebb4e18ab860"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONVALUE" value="BC"/>
       <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="471aafd5-a348-453f-8b2a-64bb365fd0ee"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONVALUE" value="BC"/>
       <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="4ce62df5-f0ea-4593-a152-6704c61d7cef"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="CC"/>
       <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="4ff44b98-b285-4523-84a0-2ad6beda1921"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="--"/>
       <column name="OBJECT_ROWID" value="c786372f-4e8d-4ed0-b573-1d9993b6ff46"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="63dd36bb-74b8-487b-811f-521438ef9491"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="CC"/>
       <column name="OBJECT_ROWID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="7a4762f5-90a3-4b6c-8a5d-93125381c18a"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="DC"/>
       <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="7b2eb62a-b686-4eaf-bde1-2e1dd1028f65"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="BB"/>
       <column name="OBJECT_ROWID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="7e59d485-01a8-4e43-9655-ba751d5983a4"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="--"/>
       <column name="OBJECT_ROWID" value="449080f6-b714-4189-a261-37439d0d4010"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="7f7dfe1d-cb98-44c8-8106-858d991d2b06"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONVALUE" value="CC"/>
       <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="80eac6e6-f237-455e-96fd-8484722a79d4"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="CC"/>
       <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="821c7eed-7bee-4879-97ec-44d2014a192b"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="--"/>
       <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="84a92c36-88df-4c06-a36a-650ed92d4d0a"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="DC"/>
       <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="8504b629-5e06-4ef0-a5ee-ae502dff96e0"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="--"/>
       <column name="OBJECT_ROWID" value="2a45eaab-3638-42fa-82ec-1b6893cb6a30"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="8db70618-5840-4d4b-90e2-66e1919fc6c1"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="CC"/>
       <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="8db93652-5263-4270-aef4-0ce7d80dbf56"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="--"/>
       <column name="OBJECT_ROWID" value="344f217a-1be3-494f-b3a2-6429f5f1f038"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="8ddf8875-63c1-4513-88a5-366cd7374a7a"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="CD"/>
       <column name="OBJECT_ROWID" value="67187e68-c1c3-4081-89d0-2d752061f7b6"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="b4d2847f-0548-4cc8-b002-7723b5fc9184"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="CC"/>
       <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="ba7b1e93-6c24-4a91-b622-d9f5fbf44a63"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="--"/>
       <column name="OBJECT_ROWID" value="a059aa9d-0463-4dbd-8b54-e85e235e63e0"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="bbc19466-8d76-4f35-be56-8458f677d4a9"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="DB"/>
       <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="bf3b75bc-a4e4-4aed-b6d8-89754fa48e3d"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="DD"/>
       <column name="OBJECT_ROWID" value="abf652a3-5fc8-408a-8094-ebdb8b5feff7"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="c64c9f31-a108-4df9-b515-6e523b1341c1"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="BC"/>
       <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="d773f833-8242-48be-9265-e3d3b18d5cd4"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONVALUE" value="DC"/>
       <column name="OBJECT_ROWID" value="7683f92d-a949-4b76-ba6f-57344d730f40"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="e2142492-eeab-482d-a37e-b1c8fe7b2545"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="DC"/>
       <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="f451479f-97dc-4570-b342-c8d53f04b493"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="BC"/>
       <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="f726df52-aa31-4702-b300-e4178c6c2f07"/>
-      <column name="OUTDATED" valueNumeric="0"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="DC"/>
       <column name="OBJECT_ROWID" value="9c6c42c3-d9f8-4b92-a8c4-9c554e3844cc"/>
     </insert>
     <insert tableName="classificationstorage">
       <column name="CLASSIFICATIONSTORAGEID" value="fc665249-9efc-4d90-839d-cdffb4c3f407"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONVALUE" value="CC"/>
       <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationtype.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationtype.xml
index a1df67fe92fb6c2fe058f36fe8a8eda712d66d23..163a315880bde32824207443f293b574943b7c84 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationtype.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationtype.xml
@@ -6,7 +6,6 @@
       <column name="CLASSIFICATIONGROUP_ID" value="21af2b4d-34f7-4c03-8d4e-0a40bb17faf2"/>
       <column name="SCOREPOINTS" valueNumeric="30"/>
       <column name="INDICATORTYPE" value="entityField"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="FIELD" value="STATUS"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONTYPEID" value="15aa2654-330a-4b4d-9cfb-aa0c49f8df67"/>
@@ -16,7 +15,6 @@
       <column name="CLASSIFICATIONGROUP_ID" value="82be3659-917b-4a7e-bf31-33258af00a16"/>
       <column name="SCOREPOINTS" valueNumeric="40"/>
       <column name="INDICATORTYPE" value="attribute"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="FIELD" value="eyJpZCI6IjdlOTkyN2E0LTQxZTQtNDI2Zi1iZGRkLWMzZTllZTNiMDkzZSIsInR5cGUiOiJDT01CTyJ9"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONTYPEID" value="23c41492-5a65-4a7f-9283-457769f822c1"/>
@@ -26,7 +24,6 @@
       <column name="CLASSIFICATIONGROUP_ID" value="82be3659-917b-4a7e-bf31-33258af00a16"/>
       <column name="SCOREPOINTS" valueNumeric="30"/>
       <column name="INDICATORTYPE" value="attribute"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="FIELD" value="eyJpZCI6ImM3ZDI4Mzc3LThjYjEtNGY5Mi1hOWFjLWVkMDgwNDFhNzgyYiIsInR5cGUiOiJDT01CTyJ9"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONTYPEID" value="2743f5cd-8510-487f-933c-4cdbebc5e449"/>
@@ -36,7 +33,6 @@
       <column name="CLASSIFICATIONGROUP_ID" value="ab733ab7-f9b3-4b8f-9674-19e4340cc31a"/>
       <column name="SCOREPOINTS" valueNumeric="30"/>
       <column name="INDICATORTYPE" value="complex"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="FIELD" value="forecastSum"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONTYPEID" value="2cc9700e-7a51-4a49-a42b-73e9289363b6"/>
@@ -46,7 +42,6 @@
       <column name="CLASSIFICATIONGROUP_ID" value="21af2b4d-34f7-4c03-8d4e-0a40bb17faf2"/>
       <column name="SCOREPOINTS" valueNumeric="25"/>
       <column name="INDICATORTYPE" value="entityField"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="FIELD" value="PROBABILITY"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONTYPEID" value="3402e131-581e-4165-aa2a-a7dba56a4164"/>
@@ -56,7 +51,6 @@
       <column name="CLASSIFICATIONGROUP_ID" value="ab733ab7-f9b3-4b8f-9674-19e4340cc31a"/>
       <column name="SCOREPOINTS" valueNumeric="30"/>
       <column name="INDICATORTYPE" value="complex"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="FIELD" value="salesprojectStart"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONTYPEID" value="38326d5f-ecab-4d96-919c-dbf2d3a15d9f"/>
@@ -66,7 +60,6 @@
       <column name="CLASSIFICATIONGROUP_ID" value="ab733ab7-f9b3-4b8f-9674-19e4340cc31a"/>
       <column name="SCOREPOINTS" valueNumeric="30"/>
       <column name="INDICATORTYPE" value="entityField"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="FIELD" value="PHASE"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONTYPEID" value="3fd84231-20cb-4a85-8fe6-404f3015a134"/>
@@ -76,7 +69,6 @@
       <column name="CLASSIFICATIONGROUP_ID" value="4af7742e-e0dd-484b-a309-942fba546833"/>
       <column name="SCOREPOINTS" valueNumeric="40"/>
       <column name="INDICATORTYPE" value="attribute"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="FIELD" value="eyJpZCI6ImU3M2VkOTI5LTg2MzEtNDZkZS1iMjhmLWViMTQyM2FiYjgwOCIsInR5cGUiOiJDT01CTyJ9"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONTYPEID" value="6f179460-4b93-4bd4-b85d-5771dbad7289"/>
@@ -86,7 +78,6 @@
       <column name="CLASSIFICATIONGROUP_ID" value="4af7742e-e0dd-484b-a309-942fba546833"/>
       <column name="SCOREPOINTS" valueNumeric="30"/>
       <column name="INDICATORTYPE" value="attribute"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="FIELD" value="eyJpZCI6IjY5MTQ1MmVjLTNiOWYtNDNkYy05MWEyLTY0NWE5N2I3NzViMiIsInR5cGUiOiJDT01CTyJ9"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONTYPEID" value="72f8e3d4-b8ce-41c3-a3ea-d5ebca62a7e0"/>
@@ -96,7 +87,6 @@
       <column name="CLASSIFICATIONGROUP_ID" value="4af7742e-e0dd-484b-a309-942fba546833"/>
       <column name="SCOREPOINTS" valueNumeric="30"/>
       <column name="INDICATORTYPE" value="attribute"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="FIELD" value="eyJpZCI6ImYxMWY2NWQwLTQzNTItNGY4MS04NWQwLWJmZDAzNDI3NWUzNCIsInR5cGUiOiJDT01CTyJ9"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONTYPEID" value="8a2c4cf5-c2b7-4588-9a33-3387d784a90b"/>
@@ -106,7 +96,6 @@
       <column name="CLASSIFICATIONGROUP_ID" value="21af2b4d-34f7-4c03-8d4e-0a40bb17faf2"/>
       <column name="SCOREPOINTS" valueNumeric="40"/>
       <column name="INDICATORTYPE" value="entityField"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="FIELD" value="VOLUME"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONTYPEID" value="9936a248-4eba-481c-9f1f-8607f89493bb"/>
@@ -116,7 +105,6 @@
       <column name="CLASSIFICATIONGROUP_ID" value="82be3659-917b-4a7e-bf31-33258af00a16"/>
       <column name="SCOREPOINTS" valueNumeric="30"/>
       <column name="INDICATORTYPE" value="attribute"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="FIELD" value="eyJpZCI6ImRkMDI0ODgzLWM0OWUtNGQwOS04NWM4LTgyOWNmOWM5YzVlOSIsInR5cGUiOiJOVU1CRVIifQ=="/>
       <column name="OBJECT_TYPE" value="Organisation"/>
       <column name="CLASSIFICATIONTYPEID" value="9b9e51d8-c649-41f3-a1fb-660d768c8b5a"/>
@@ -126,7 +114,6 @@
       <column name="CLASSIFICATIONGROUP_ID" value="ab733ab7-f9b3-4b8f-9674-19e4340cc31a"/>
       <column name="SCOREPOINTS" valueNumeric="40"/>
       <column name="INDICATORTYPE" value="attribute"/>
-      <column name="OUTDATED" valueNumeric="1"/>
       <column name="FIELD" value="eyJpZCI6ImZkMzk2M2JjLThlNjAtNDExYS05OTExLWI5N2ViNzNlNWNmNyIsInR5cGUiOiJDT01CTyJ9"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONTYPEID" value="fe91e86e-a0ec-4475-b006-f2b2fef8aabb"/>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/districtcontact.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/districtcontact.xml
index 3ce8cb56c90acb220c392ab26371729d8e3f63fa..b28fb3559f909d8727457cbc2c0d09111a0fbe33 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/districtcontact.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/districtcontact.xml
@@ -9,14 +9,18 @@
       <column name="ADVISER_ROLE" value="ADVISERROLE_AreaManager"/>
       <column name="ADVISER_CONTACT_ID" value="d5a2dc64-e503-4aed-a0c6-d54f49b8db87"/>
       <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
+      <column name="DISTRICT_ID" value="08026817-e05f-469f-9a55-00fee0ec0fac"/>
+      <column name="DISTRICTRESPONSIBLE_ID" value="79423e23-9079-4d60-98ae-efb08c082f32"/>
     </insert>
     <insert tableName="districtcontact">
       <column name="DISTRICTCONTACTID" value="a2b36387-7d03-4d18-8c10-db2c2193ce47"/>
       <column name="ORIGIN" value="DistrictOrigin_manual"/>
-      <column name="CONTACT_ID" value="2a45eaab-3638-42fa-82ec-1b6893cb6a30"/>
+      <column name="CONTACT_ID" value="ef345d11-a40d-59e0-a24c-afcb6095d2cb"/>
       <column name="ADVISER_ROLE" value="ADVISERROLE_OfficeDuty"/>
       <column name="ADVISER_CONTACT_ID" value="ef345d11-a40d-59e0-a24c-afcb6095d2cb"/>
       <column name="STATUS" value="CONTACTSTATACTIVE                   "/>
+      <column name="DISTRICT_ID" value="eef5f9a1-c849-4530-8068-1927d2b0e4d7"/>
+      <column name="DISTRICTRESPONSIBLE_ID" value="83117f7a-b0b2-4cc9-b654-3d4833e9bd34"/>
     </insert>
   </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/districtresponsible.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/districtresponsible.xml
index 11281e6d81c4002ba986933d838f02fce80557e9..b1c2773afaa32a742bd9f7ab3acedcaad01a09a9 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/districtresponsible.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/districtresponsible.xml
@@ -7,28 +7,52 @@
       <column name="DISTRICT_ID" value="08026817-e05f-469f-9a55-00fee0ec0fac"/>
       <column name="USER_NEW" value="Admin"/>
       <column name="EMPLOYEE_CONTACT_ID" value="d5a2dc64-e503-4aed-a0c6-d54f49b8db87"/>
+      <column name="ADVISER_STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="ADVISER_ROLE" value="ADVISERROLE_AccountManager"/>
+      <column name="VISITFREQUENCY" value="VISITFREQUENCYSEMIANNUALLY"/>
       <column name="DATE_NEW" valueDate="2020-09-16T08:31:52"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="VALID_FROM" valueDate="2020-09-16T08:31:52"/>
+      <column name="VALID_UNTIL" valueDate="2022-09-16T08:31:52"/>
     </insert>
     <insert tableName="districtresponsible">
       <column name="DISTRICTRESPONSIBLEID" value="83117f7a-b0b2-4cc9-b654-3d4833e9bd34"/>
       <column name="DISTRICT_ID" value="eef5f9a1-c849-4530-8068-1927d2b0e4d7"/>
       <column name="USER_NEW" value="Admin"/>
       <column name="EMPLOYEE_CONTACT_ID" value="ef345d11-a40d-59e0-a24c-afcb6095d2cb"/>
+      <column name="ADVISER_STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="ADVISER_ROLE" value="ADVISERROLE_AccountManager"/>
+      <column name="VISITFREQUENCY" value="VISITFREQUENCYSEMIANNUALLY"/>
       <column name="DATE_NEW" valueDate="2020-09-16T08:28:58"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="VALID_FROM" valueDate="2020-09-16T08:31:52"/>
+      <column name="VALID_UNTIL" valueDate="2022-09-16T08:31:52"/>
     </insert>
     <insert tableName="districtresponsible">
       <column name="DISTRICTRESPONSIBLEID" value="ddeb50e7-b838-45a7-99ed-75053a0201c9"/>
       <column name="DISTRICT_ID" value="7fc6c55e-f4af-4f77-8c09-b6cc2d95862f"/>
       <column name="USER_NEW" value="Admin"/>
       <column name="EMPLOYEE_CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/>
+      <column name="ADVISER_STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="ADVISER_ROLE" value="ADVISERROLE_AccountManager"/>
+      <column name="VISITFREQUENCY" value="VISITFREQUENCYSEMIANNUALLY"/>
       <column name="DATE_NEW" valueDate="2020-09-16T08:21:13"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="VALID_FROM" valueDate="2020-09-16T08:31:52"/>
+      <column name="VALID_UNTIL" valueDate="2022-09-16T08:31:52"/>
     </insert>
     <insert tableName="districtresponsible">
       <column name="DISTRICTRESPONSIBLEID" value="e4a51357-23dd-4904-b62e-7cccaaa6eb2c"/>
       <column name="DISTRICT_ID" value="502d71dd-a26a-41b9-a762-8c5bde80ca4e"/>
       <column name="USER_NEW" value="Admin"/>
       <column name="EMPLOYEE_CONTACT_ID" value="d105f7f4-afd1-4a98-adc2-13fd6934b7e9"/>
+      <column name="ADVISER_STATUS" value="CONTACTSTATACTIVE"/>
+      <column name="ADVISER_ROLE" value="ADVISERROLE_AccountManager"/>
+      <column name="VISITFREQUENCY" value="VISITFREQUENCYSEMIANNUALLY"/>
       <column name="DATE_NEW" valueDate="2020-09-16T08:30:33"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="VALID_FROM" valueDate="2020-09-16T08:31:52"/>
+      <column name="VALID_UNTIL" valueDate="2022-09-16T08:31:52"/>
     </insert>
   </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/salesorder.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/salesorder.xml
index ed83dfc0b46c2781ec6ad61fce663a1f119a5ace..c891a6eca097c75e4a9a118c5d5b23dee67ca188 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/salesorder.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/salesorder.xml
@@ -45,7 +45,7 @@
     </insert>
     <insert tableName="salesorder">
       <column name="PAYMENTTERMS" value="PAYTERM30"/>
-      <column name="ORDERSTATUS" valueNumeric="1"/>
+      <column name="ORDERSTATUS" valueNumeric="0"/>
       <column name="DELIVERYTERMS" value="DELIVEREX"/>
       <column name="CONTACT_ID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/>
       <column name="SALESORDERCODE" valueNumeric="1001"/>
@@ -348,7 +348,7 @@
     </insert>
     <insert tableName="salesorder">
       <column name="PAYMENTTERMS" value="PAYTERM7"/>
-      <column name="ORDERSTATUS" valueNumeric="1"/>
+      <column name="ORDERSTATUS" valueNumeric="0"/>
       <column name="DELIVERYTERMS" value="FREE"/>
       <column name="CONTACT_ID" value="7a34d9d0-04c7-478c-a8e2-f584fe625c45"/>
       <column name="SALESORDERCODE" valueNumeric="1010"/>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject.xml
index 4d1cf385df2103cef05fc7f1e85c09c0fbe910a0..4d325cefe6e6d3c0a9dfa7609996390a0341f7d7 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject.xml
@@ -9,6 +9,7 @@
       <column name="CONTACT_ID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
       <column name="STARTDATE" valueDate="2020-02-01T11:22:49"/>
       <column name="DATE_NEW" valueDate="2020-01-08T11:22:49"/>
+      <column name="USER_NEW" value="Admin"/>
       <column name="VOLUME" valueNumeric="450000.00"/>
       <column name="ENDDATE" valueDate="2022-05-22T12:00:00"/>
       <column name="SALESPROJECTID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
@@ -22,6 +23,7 @@
       <column name="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
       <column name="STARTDATE" valueDate="2021-10-01T11:22:49"/>
       <column name="DATE_NEW" valueDate="2021-05-03T11:22:49"/>
+      <column name="USER_NEW" value="Admin"/>
       <column name="VOLUME" valueNumeric="200000.00"/>
       <column name="ENDDATE" valueDate="2022-01-31T12:00:00"/>
       <column name="SALESPROJECTID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
@@ -35,6 +37,7 @@
       <column name="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
       <column name="STARTDATE" valueDate="2020-05-15T12:00:00"/>
       <column name="DATE_NEW" valueDate="2020-01-01T11:22:49"/>
+      <column name="USER_NEW" value="Admin"/>
       <column name="VOLUME" valueNumeric="120000.00"/>
       <column name="ENDDATE" valueDate="2021-05-17T12:00:00"/>
       <column name="SALESPROJECTID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
@@ -47,6 +50,7 @@
       <column name="CONTACT_ID" value="2a45eaab-3638-42fa-82ec-1b6893cb6a30"/>
       <column name="STARTDATE" valueDate="2020-08-03T12:00:00"/>
       <column name="DATE_NEW" valueDate="2020-06-28T06:28:24"/>
+      <column name="USER_NEW" value="Admin"/>
       <column name="ENDDATE" valueDate="2022-06-28T12:00:00"/>
       <column name="SALESPROJECTID" value="7683f92d-a949-4b76-ba6f-57344d730f40"/>
       <column name="PROJECTTITLE" value="Meister Messebau/ Umsetzung"/>
@@ -59,6 +63,7 @@
       <column name="CONTACT_ID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
       <column name="STARTDATE" valueDate="2020-05-13T12:00:00"/>
       <column name="DATE_NEW" valueDate="2020-01-01T11:22:49"/>
+      <column name="USER_NEW" value="Admin"/>
       <column name="VOLUME" valueNumeric="350000.00"/>
       <column name="ENDDATE" valueDate="2022-05-22T12:00:00"/>
       <column name="SALESPROJECTID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
@@ -72,6 +77,7 @@
       <column name="CONTACT_ID" value="a059aa9d-0463-4dbd-8b54-e85e235e63e0"/>
       <column name="STARTDATE" valueDate="2020-07-01T12:00:00"/>
       <column name="DATE_NEW" valueDate="2020-06-28T12:33:22"/>
+      <column name="USER_NEW" value="Admin"/>
       <column name="ENDDATE" valueDate="2022-06-28T12:00:00"/>
       <column name="SALESPROJECTID" value="cdaa7f90-6e3d-4199-974b-0847b867a419"/>
       <column name="PROJECTTITLE" value="Meister Messebau "/>
@@ -84,6 +90,7 @@
       <column name="CONTACT_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
       <column name="STARTDATE" valueDate="2020-05-15T12:00:00"/>
       <column name="DATE_NEW" valueDate="2020-01-01T11:22:49"/>
+      <column name="USER_NEW" value="Admin"/>
       <column name="VOLUME" valueNumeric="250000.00"/>
       <column name="ENDDATE" valueDate="2022-05-18T12:00:00"/>
       <column name="SALESPROJECTID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
@@ -96,6 +103,7 @@
       <column name="PROJECTCODE" valueNumeric="1010"/>
       <column name="CONTACT_ID" value="67187e68-c1c3-4081-89d0-2d752061f7b6"/>
       <column name="DATE_NEW" valueDate="2021-06-28T08:08:28"/>
+      <column name="USER_NEW" value="Admin"/>
       <column name="VOLUME" valueNumeric="500000.00"/>
       <column name="ENDDATE" valueDate="2022-06-28T12:00:00"/>
       <column name="SALESPROJECTID" value="e1d29d7a-744b-412d-8b29-11810a592139"/>
@@ -109,6 +117,7 @@
       <column name="CONTACT_ID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/>
       <column name="STARTDATE" valueDate="2020-11-24T12:00:00"/>
       <column name="DATE_NEW" valueDate="2020-01-01T11:22:49"/>
+      <column name="USER_NEW" value="Admin"/>
       <column name="ENDDATE" valueDate="2021-11-26T12:00:00"/>
       <column name="SALESPROJECTID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
       <column name="PROJECTTITLE" value="Projekt 123"/>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject_milestone.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject_milestone.xml
index e42a180026b91fcc5d24e790a24849028b95eade..dc64d0db3f6ac45254efa1bbb26f654b57be7971 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject_milestone.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject_milestone.xml
@@ -109,7 +109,7 @@
       <column name="SALESPROJECT_ID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
       <column name="KIND" value="SalesprojectPhase"/>
       <column name="DATE_END" valueDate="2019-05-10T08:08:07"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASENQC"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASECONTACT"/>
     </insert>
     <insert tableName="salesproject_milestone">
       <column name="SALESPROJECT_MILESTONEID" value="122a232c-0b24-45f1-a55f-d827a3d993de"/>
@@ -118,7 +118,7 @@
       <column name="KIND" value="SalesprojectPhase"/>
       <column name="PARENT_ID" value="063a2c02-4b21-459a-8ae3-558ba67973dd"/>
       <column name="DATE_END" valueDate="2019-06-17T08:08:07"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASEMAL"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASELEAD"/>
     </insert>
     <insert tableName="salesproject_milestone">
       <column name="SALESPROJECT_MILESTONEID" value="36265e49-c676-4370-94ff-f772c087f55b"/>
@@ -148,7 +148,7 @@
       <column name="SALESPROJECT_ID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
       <column name="KIND" value="SalesprojectPhase"/>
       <column name="DATE_END" valueDate="2019-05-23T10:44:48"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASESAL"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASELEAD"/>
     </insert>
     <insert tableName="salesproject_milestone">
       <column name="SALESPROJECT_MILESTONEID" value="5189697c-5dbf-4d10-a163-dfde87e490ab"/>
@@ -194,7 +194,7 @@
       <column name="SALESPROJECT_ID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
       <column name="KIND" value="SalesprojectPhase"/>
       <column name="PARENT_ID" value="122a232c-0b24-45f1-a55f-d827a3d993de"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASESAL"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASELEAD"/>
     </insert>
     <insert tableName="salesproject_milestone">
       <column name="SALESPROJECT_MILESTONEID" value="8a33dafb-4a1b-4ec9-a1cd-37a6c75e3721"/>
@@ -203,7 +203,7 @@
       <column name="KIND" value="SalesprojectPhase"/>
       <column name="PARENT_ID" value="4e764ba9-8f81-4e01-93de-f9769205dd3c"/>
       <column name="DATE_END" valueDate="2019-11-26T12:43:46"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASESQO"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASEOFFER"/>
     </insert>
     <insert tableName="salesproject_milestone">
       <column name="SALESPROJECT_MILESTONEID" value="8fb45194-7ced-475f-be58-7780c359dd0f"/>
@@ -218,7 +218,7 @@
       <column name="DATE_START" valueDate="2019-11-26T12:48:39"/>
       <column name="SALESPROJECT_ID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
       <column name="KIND" value="SalesprojectPhase"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASENQC"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASECONTACT"/>
     </insert>
     <insert tableName="salesproject_milestone">
       <column name="SALESPROJECT_MILESTONEID" value="ba8d15aa-3851-451b-9230-70eb7fb4ed6c"/>
@@ -240,7 +240,7 @@
       <column name="SALESPROJECT_ID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
       <column name="KIND" value="SalesprojectPhase"/>
       <column name="DATE_END" valueDate="2019-05-23T10:44:26"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASESAL"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASELEAD"/>
     </insert>
     <insert tableName="salesproject_milestone">
       <column name="SALESPROJECT_MILESTONEID" value="d77dc2ae-f12d-49ac-9a8f-ee0b5086f6ef"/>
@@ -255,7 +255,7 @@
       <column name="SALESPROJECT_ID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
       <column name="KIND" value="SalesprojectPhase"/>
       <column name="PARENT_ID" value="8a33dafb-4a1b-4ec9-a1cd-37a6c75e3721"/>
-      <column name="MILESTONEVALUE" value="SALPROJPHASESAL"/>
+      <column name="MILESTONEVALUE" value="SALPROJPHASELEAD"/>
     </insert>
     <insert tableName="salesproject_milestone">
       <column name="SALESPROJECT_MILESTONEID" value="e3e20b2b-e91a-4ff9-a421-0e90449bc6c3"/>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/salesprojectphasedefinition.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/salesprojectphasedefinition.xml
deleted file mode 100644
index ed6d78232232cb5eb6485790b66104eb9e9129dc..0000000000000000000000000000000000000000
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/salesprojectphasedefinition.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.1" encoding="UTF-8" standalone="no"?>
-<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
-  <changeSet author="autogenerated" id="5f5acbc3-5fac-4574-b930-777319ab0aec">
-    <delete tableName="salesprojectphasedefinition"/>
-    <insert tableName="salesprojectphasedefinition">
-      <column name="PHASE" value="SALPROJPHASECONTACT"/>
-      <column name="CHECKLIST_ID" value="179dcc0d-e6fa-411d-b5ee-cb25b9735dbe"/>
-      <column name="DESCRIPTION" value="Aufgaben für die Phase: 'Contact'."/>
-      <column name="USER_NEW" value="Admin"/>
-      <column name="SALESPROJECTPHASEDEFINITIONID" value="176e43db-1665-49b9-9c35-5c5c0aa135f3"/>
-    </insert>
-    <insert tableName="salesprojectphasedefinition">
-      <column name="PHASE" value="SALPROJPHASENEGO"/>
-      <column name="CHECKLIST_ID" value="cb0357c9-a222-4d78-b2c5-035fffe3bb51"/>
-      <column name="DESCRIPTION" value="Aufgaben für die Phase: 'Negotiation'."/>
-      <column name="USER_NEW" value="Admin"/>
-      <column name="SALESPROJECTPHASEDEFINITIONID" value="21011181-fe9f-4c6c-910e-344ce10e3fc1"/>
-    </insert>
-    <insert tableName="salesprojectphasedefinition">
-      <column name="PHASE" value="SALPROJPHASELEAD"/>
-      <column name="CHECKLIST_ID" value="3d0f1d25-cee8-4b83-a0de-3fded83ff9c4"/>
-      <column name="DESCRIPTION" value="Aufgaben für die Phase: 'Lead'."/>
-      <column name="USER_NEW" value="Admin"/>
-      <column name="SALESPROJECTPHASEDEFINITIONID" value="d29dcde8-24b4-470a-8189-1e2b0d812daa"/>
-    </insert>
-    <insert tableName="salesprojectphasedefinition">
-      <column name="PHASE" value="SALPROJPHASEPROS"/>
-      <column name="CHECKLIST_ID" value="ecf50252-e0c2-4e7a-8cc6-078b5978d2c5"/>
-      <column name="DESCRIPTION" value="Aufgaben für die Phase: 'Prospect'."/>
-      <column name="USER_NEW" value="Admin"/>
-      <column name="SALESPROJECTPHASEDEFINITIONID" value="d9605427-ba6b-42b2-8376-51e4ef654814"/>
-    </insert>
-    <insert tableName="salesprojectphasedefinition">
-      <column name="PHASE" value="SALPROJPHASEOFFER"/>
-      <column name="CHECKLIST_ID" value="0f95ce44-3b0d-417b-969f-f84897868558"/>
-      <column name="DESCRIPTION" value="Aufgaben für die Phase: 'Offer'."/>
-      <column name="USER_NEW" value="Admin"/>
-      <column name="SALESPROJECTPHASEDEFINITIONID" value="e8ff463f-692c-40a7-bafa-d168886700fd"/>
-    </insert>
-  </changeSet>
-</databaseChangeLog>
\ No newline at end of file
diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod
index 4a8333875ded20750c9c5235a67d3f9ebf956a08..60140ad99b32cef9e6cc0229e882b4b1d478b296 100644
--- a/aliasDefinition/Data_alias/Data_alias.aod
+++ b/aliasDefinition/Data_alias/Data_alias.aod
@@ -3871,6 +3871,48 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -5417,8 +5459,8 @@
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="93" />
-                <size v="29" />
-                <scale v="9" />
+                <size v="19" />
+                <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -5510,7 +5552,7 @@
                 <name>DESCRIPTION</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="2005" />
+                <columnType v="-1" />
                 <size v="2147483647" />
                 <scale v="0" />
                 <notNull v="false" />
@@ -5612,8 +5654,8 @@
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="93" />
-                <size v="29" />
-                <scale v="9" />
+                <size v="19" />
+                <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -5727,8 +5769,8 @@
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="93" />
-                <size v="29" />
-                <scale v="9" />
+                <size v="19" />
+                <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -5755,8 +5797,8 @@
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="93" />
-                <size v="29" />
-                <scale v="9" />
+                <size v="19" />
+                <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -9401,7 +9443,7 @@
                 <columnType v="4" />
                 <size v="10" />
                 <scale v="0" />
-                <notNull v="true" />
+                <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
@@ -9879,7 +9921,7 @@
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="12" />
-                <size v="63" />
+                <size v="36" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -9892,7 +9934,7 @@
                 <name>FILTER</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="-1" />
+                <columnType v="2005" />
                 <size v="2147483647" />
                 <scale v="0" />
                 <notNull v="false" />
@@ -9917,13 +9959,13 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>OUTDATED</name>
+                <name>INDICATORTYPE</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="-6" />
-                <size v="3" />
+                <columnType v="12" />
+                <size v="64" />
                 <scale v="0" />
-                <notNull v="true" />
+                <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
@@ -9931,7 +9973,7 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>INDICATORTYPE</name>
+                <name>FIELDTYPE</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="12" />
@@ -9945,11 +9987,11 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>FIELDTYPE</name>
+                <name>FIELD</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="12" />
-                <size v="64" />
+                <size v="100" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -9959,11 +10001,11 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>FIELD</name>
+                <name>SORTING</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="12" />
-                <size v="100" />
+                <columnType v="5" />
+                <size v="5" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -12338,6 +12380,20 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>RESPONSIBLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="-6" />
+                <size v="3" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -14695,6 +14751,48 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -14824,7 +14922,7 @@
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="92" />
-                <size v="8" />
+                <size v="10" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -14838,7 +14936,7 @@
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="92" />
-                <size v="8" />
+                <size v="10" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -14963,7 +15061,7 @@
                 <name>PREPARATION</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="2005" />
+                <columnType v="-1" />
                 <size v="2147483647" />
                 <scale v="0" />
                 <notNull v="false" />
@@ -15125,20 +15223,6 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
-              <entityFieldDb>
-                <name>OUTDATED</name>
-                <dbName></dbName>
-                <primaryKey v="false" />
-                <columnType v="-6" />
-                <size v="3" />
-                <scale v="0" />
-                <notNull v="false" />
-                <isUnique v="false" />
-                <index v="false" />
-                <documentation></documentation>
-                <title></title>
-                <description></description>
-              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -15713,8 +15797,8 @@
                 <name>VALID_FROM</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="12" />
-                <size v="36" />
+                <columnType v="93" />
+                <size v="19" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -15727,8 +15811,8 @@
                 <name>VALID_UNTIL</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="12" />
-                <size v="36" />
+                <columnType v="93" />
+                <size v="19" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -16002,6 +16086,20 @@
                 <documentation></documentation>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>DISTRICTRESPONSIBLE_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -17747,6 +17845,20 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>POS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -22031,8 +22143,8 @@
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="93" />
-                <size v="29" />
-                <scale v="9" />
+                <size v="19" />
+                <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
@@ -22059,8 +22171,8 @@
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="93" />
-                <size v="29" />
-                <scale v="9" />
+                <size v="19" />
+                <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
diff --git a/aliasDefinition/Data_alias_noAudit/Data_alias_noAudit.aod b/aliasDefinition/Data_alias_noAudit/Data_alias_noAudit.aod
index 1b5078ee993b54ef3f350d1fd5d8440f9113e45c..b176bfca4ed5a0da589782c6351932481ab94639 100644
--- a/aliasDefinition/Data_alias_noAudit/Data_alias_noAudit.aod
+++ b/aliasDefinition/Data_alias_noAudit/Data_alias_noAudit.aod
@@ -785,6 +785,34 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>COND</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="-1" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>FILTER_USED</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="-6" />
+                <size v="3" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -4699,6 +4727,76 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>DESCRIPTION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="500" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AUTOPROBABILITY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="3" />
+                <size v="6" />
+                <scale v="2" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TITLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>COND</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="-1" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTEXT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -5671,6 +5769,20 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>PREPARATION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="-1" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -6019,6 +6131,34 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>VISITFREQUENCY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DISTRICTRESPONSIBLE_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -7657,6 +7797,48 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -8805,6 +8987,62 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="30" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="30" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -9416,7 +9654,7 @@
                 <columnType v="4" />
                 <size v="10" />
                 <scale v="0" />
-                <notNull v="true" />
+                <notNull v="false" />
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
@@ -12475,6 +12713,48 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -12861,8 +13141,8 @@
                 <name>VALID_FROM</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="12" />
-                <size v="36" />
+                <columnType v="93" />
+                <size v="19" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -12875,8 +13155,8 @@
                 <name>VALID_UNTIL</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="12" />
-                <size v="36" />
+                <columnType v="93" />
+                <size v="19" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -12899,6 +13179,20 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>VISITFREQUENCY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -13225,6 +13519,20 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>RESPONSIBLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="-6" />
+                <size v="3" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -17909,6 +18217,20 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>LINKEVALUATIONTYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -19017,6 +19339,138 @@
               </entityFieldDb>
             </entityFields>
           </entityDb>
+          <entityDb>
+            <name>TASKATTENDEES</name>
+            <dbName></dbName>
+            <idColumn>TASKATTENDEESID</idColumn>
+            <idGeneratorType v="0" />
+            <idGeneratorInterval v="1" />
+            <documentation></documentation>
+            <title></title>
+            <description></description>
+            <auditSyncConfig>
+              <name>auditSyncConfig</name>
+              <auditMode v="0" />
+              <syncActive v="false" />
+              <syncComplete v="true" />
+              <syncDirection v="1" />
+              <syncIds></syncIds>
+            </auditSyncConfig>
+            <entityFields>
+              <entityFieldDb>
+                <name>DEPARTMENT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="19" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="30" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TASKATTENDEESID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TASK_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="30" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
         </entities>
       </entityGroup>
     </aliasDefDb>
diff --git a/entity/ActivityLink_entity/ActivityLink_entity.aod b/entity/ActivityLink_entity/ActivityLink_entity.aod
index 72ee3eb1b50ca76d38b92468a913030faae7df0d..44ea0b63d5f5e157d0d3868aff38d1fcde1c7170 100644
--- a/entity/ActivityLink_entity/ActivityLink_entity.aod
+++ b/entity/ActivityLink_entity/ActivityLink_entity.aod
@@ -20,7 +20,6 @@
       <title>{$OBJECTLINK_TYPE}</title>
       <consumer>Context</consumer>
       <mandatory v="true" />
-      <stateProcess>%aditoprj%/entity/ActivityLink_entity/entityfields/object_type/stateProcess.js</stateProcess>
       <displayValueProcess>%aditoprj%/entity/ActivityLink_entity/entityfields/object_type/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
@@ -29,7 +28,6 @@
       <consumer>Objects</consumer>
       <linkedContextProcess>%aditoprj%/entity/ActivityLink_entity/entityfields/object_rowid/linkedContextProcess.js</linkedContextProcess>
       <mandatory v="true" />
-      <stateProcess>%aditoprj%/entity/ActivityLink_entity/entityfields/object_rowid/stateProcess.js</stateProcess>
       <displayValueProcess>%aditoprj%/entity/ActivityLink_entity/entityfields/object_rowid/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
diff --git a/entity/ActivityLink_entity/entityfields/object_rowid/stateProcess.js b/entity/ActivityLink_entity/entityfields/object_rowid/stateProcess.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/ActivityLink_entity/entityfields/object_type/stateProcess.js b/entity/ActivityLink_entity/entityfields/object_type/stateProcess.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/Address_entity/Address_entity.aod b/entity/Address_entity/Address_entity.aod
index 284f3c0e9d79a06d6160ceab76d4e48ad367e9c2..a1e7a64febbfab836cecf1f11b9ee954878c51ec 100644
--- a/entity/Address_entity/Address_entity.aod
+++ b/entity/Address_entity/Address_entity.aod
@@ -355,6 +355,11 @@
     <entityField>
       <name>VALIDATION_RESULT</name>
     </entityField>
+    <entityField>
+      <name>contentTitle</name>
+      <title>Address</title>
+      <valueProcess>%aditoprj%/entity/Address_entity/entityfields/contenttitle/valueProcess.js</valueProcess>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/Address_entity/entityfields/contenttitle/valueProcess.js b/entity/Address_entity/entityfields/contenttitle/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..35c3b3f1fcde9d0b66123e98205ad6522958027d
--- /dev/null
+++ b/entity/Address_entity/entityfields/contenttitle/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("system.vars");
+
+result.string(vars.get("$field.#CONTENTTITLE") + ", " + vars.get("$field.COUNTRY"));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/zip/onValidation.js b/entity/Address_entity/entityfields/zip/onValidation.js
index 31896dfdfa22d31a9d0775a332f4160f6dcffe64..64a52690350fae6e2886cebf35ebcf303b40e0b9 100644
--- a/entity/Address_entity/entityfields/zip/onValidation.js
+++ b/entity/Address_entity/entityfields/zip/onValidation.js
@@ -1,11 +1,5 @@
-import("WsValidation_lib");
-import("system.translate");
 import("system.result");
 import("system.vars");
 import("PostalAddress_lib");
-import("Entity_lib");
 
-if (!WsValidationUtils.isWsEnabled(WsValidationType.get().TYPE_ZIP_NOMINATIM))
-{
-    result.string(AddressValidationUtils.validateZipField(vars.get("$field.COUNTRY"), vars.get("$local.value")));
-}
+result.string(AddressValidationUtils.validateZipField(vars.get("$field.COUNTRY"), vars.get("$local.value")));
diff --git a/entity/Appointment_entity/Appointment_entity.aod b/entity/Appointment_entity/Appointment_entity.aod
index 87ccae159e555fe7fe4c8be557f4cea197952512..f89d1219f36417625e63f1ec88a6faf978b0fcb1 100644
--- a/entity/Appointment_entity/Appointment_entity.aod
+++ b/entity/Appointment_entity/Appointment_entity.aod
@@ -199,15 +199,15 @@
         <fieldName>Links</fieldName>
       </dependency>
       <children>
-        <entityParameter>
-          <name>VisitPlanId_param</name>
-          <valueProcess>%aditoprj%/entity/Appointment_entity/entityfields/appointmentlinks/children/appointmentid_param/valueProcess.js</valueProcess>
-        </entityParameter>
         <entityParameter>
           <name>AppointmentState_param</name>
           <valueProcess>%aditoprj%/entity/Appointment_entity/entityfields/appointmentlinks/children/appointmentstate_param/valueProcess.js</valueProcess>
           <expose v="false" />
         </entityParameter>
+        <entityParameter>
+          <name>AppointmentId_param</name>
+          <valueProcess>%aditoprj%/entity/Appointment_entity/entityfields/appointmentlinks/children/appointmentid_param/valueProcess.js</valueProcess>
+        </entityParameter>
       </children>
     </entityConsumer>
     <entityActionField>
@@ -269,7 +269,7 @@
       <expose v="true" />
     </entityParameter>
     <entityParameter>
-      <name>VisitPlanId_param</name>
+      <name>Visitplanentry_param</name>
       <expose v="true" />
     </entityParameter>
   </entityFields>
diff --git a/entity/Appointment_entity/recordcontainers/jdito/onInsert.js b/entity/Appointment_entity/recordcontainers/jdito/onInsert.js
index f4dc0bbb6a1704ea933d2b4e6eafe75e004a2f0d..bf3287efddafc930688f1634353b11612a62035d 100644
--- a/entity/Appointment_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/Appointment_entity/recordcontainers/jdito/onInsert.js
@@ -1,3 +1,4 @@
+import("KeywordRegistry_basic");
 import("Sql_lib");
 import("system.calendars");
 import("system.question");
@@ -43,9 +44,21 @@ if (fields["REMINDER.value"])
 event[calendars.ID] = calendars.insert([event])[0];
 neon.setFieldValue("$field.UID", event[calendars.ID]);
 
-vars.set("$context.editmode", calendars.MODE_UPDATE);
-
-if(vars.exists("$param.VisitPlanId_param") && vars.get("$param.VisitPlanId_param"))
+if(vars.get("$param.Visitplanentry_param"))
 {
-    newWhere("VISITPLANENTRY.VISITPLANENTRYID", vars.get("$param.VisitPlanId_param")).updateData(true, "VISITPLANENTRY", ["APPOINTMENT_ID"], null, [event[calendars.ID]]);
-}
\ No newline at end of file
+    var statusApp = $KeywordRegistry.visitPlanEntryStatusAppointment$requested();
+    var statusPlan = $KeywordRegistry.visitPlanEntryStatus$planned();
+
+    if(event[calendars.STATUS] == "CONFIRMED")
+    {
+        statusApp = $KeywordRegistry.visitPlanEntryStatusAppointment$confirmed();
+        statusPlan = $KeywordRegistry.visitPlanEntryStatus$Appointmentarranged();
+    }
+    
+    var columns = ["APPOINTMENT_ID", "STATUS_APPOINTMENT", "STATUS"];
+    var values = [event[calendars.ID], statusApp, statusPlan];
+    var updateEntry = newWhere("VISITPLANENTRY.VISITPLANENTRYID", vars.get("$param.Visitplanentry_param"))
+    .updateData(true, "VISITPLANENTRY", columns, null, values);
+}
+
+vars.set("$context.editmode", calendars.MODE_UPDATE);
diff --git a/entity/Appointment_entity/recordcontainers/jdito/onUpdate.js b/entity/Appointment_entity/recordcontainers/jdito/onUpdate.js
index dde683a8929aa922bdb8041662279a61d8e33a1b..6c5162502cac09ceca12e341d241ddec2d6c19e4 100644
--- a/entity/Appointment_entity/recordcontainers/jdito/onUpdate.js
+++ b/entity/Appointment_entity/recordcontainers/jdito/onUpdate.js
@@ -1,3 +1,5 @@
+import("KeywordRegistry_basic");
+import("Sql_lib");
 import("system.neon");
 import("system.calendars");
 import("system.vars");
@@ -66,6 +68,22 @@ if(event)
 }
 
 
+if(vars.get("$param.Visitplanentry_param"))
+{    
+    var statusApp = $KeywordRegistry.visitPlanEntryStatusAppointment$requested();
+    var statusPlan = $KeywordRegistry.visitPlanEntryStatus$planned();
+    
+    if(event[calendars.STATUS] == "CONFIRMED")
+    {
+        statusApp = $KeywordRegistry.visitPlanEntryStatusAppointment$confirmed();
+        statusPlan = $KeywordRegistry.visitPlanEntryStatus$Appointmentarranged();
+    }    
+            
+    var values = [statusPlan, statusApp];
+    var columns = ["STATUS", "STATUS_APPOINTMENT"];
+    var updateEntry = newWhere("VISITPLANENTRY.VISITPLANENTRYID", visitplanentry)
+    .updateData(true, "VISITPLANENTRY", columns, null, values);
+}
 
 /**
 * checks if the entryParam has different values like the current fieldvalues
diff --git a/entity/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod
index fc3aa7f965d1d2313c74cc6b18242a5d5e0c45e9..3b8790d0106cb9fb8b9ddd304e45a1482eb0157a 100644
--- a/entity/BulkMail_entity/BulkMail_entity.aod
+++ b/entity/BulkMail_entity/BulkMail_entity.aod
@@ -84,6 +84,7 @@
       <name>STATUS</name>
       <title>Status</title>
       <consumer>StatusKeyword</consumer>
+      <groupable v="true" />
       <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/status/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/status/displayValueProcess.js</displayValueProcess>
     </entityField>
@@ -339,6 +340,7 @@
       <name>INTEREST_ID</name>
       <title>Interest</title>
       <consumer>Interests</consumer>
+      <groupable v="true" />
       <displayValueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/interest_id/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityConsumer>
@@ -361,6 +363,7 @@
     </entityField>
     <entityField>
       <name>DATE_NEW</name>
+      <title>Created on</title>
       <contentType>DATE</contentType>
       <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/date_new/valueProcess.js</valueProcess>
     </entityField>
@@ -381,6 +384,7 @@
       <name>EMPLOYEE_CONTACT_ID</name>
       <title>Person in charge</title>
       <consumer>Employees</consumer>
+      <groupable v="true" />
       <linkedContext>Person</linkedContext>
       <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/employee_contact_id/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/employee_contact_id/displayValueProcess.js</displayValueProcess>
@@ -540,15 +544,18 @@
     </entityActionField>
     <entityField>
       <name>DATE_EDIT</name>
+      <title>Edited on</title>
       <contentType>DATE</contentType>
       <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/date_edit/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>USER_NEW</name>
+      <title>Creator</title>
       <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/user_new/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>USER_EDIT</name>
+      <title>Editor</title>
       <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/user_edit/valueProcess.js</valueProcess>
     </entityField>
     <entityParameter>
@@ -561,12 +568,18 @@
       <expose v="true" />
       <documentation>%aditoprj%/entity/BulkMail_entity/entityfields/presetrecipientsfilter_param/documentation.adoc</documentation>
     </entityParameter>
+    <entityField>
+      <name>firstSendDate</name>
+      <title>Send Date</title>
+      <contentType>DATE</contentType>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
       <name>db</name>
       <fromClauseProcess>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
       <conditionProcess>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <orderClauseProcess>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
       <onDBInsert>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/onDBInsert.js</onDBInsert>
       <onDBUpdate>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/onDBUpdate.js</onDBUpdate>
       <onDBDelete>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/onDBDelete.js</onDBDelete>
@@ -695,6 +708,11 @@
           <name>USER_NEW.value</name>
           <recordfield>BULKMAIL.USER_NEW</recordfield>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>firstSendDate.value</name>
+          <expression>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/firstsenddate.value/expression.js</expression>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
       </recordFieldMappings>
       <linkInformation>
         <linkInformation>
diff --git a/entity/BulkMail_entity/entityfields/icon/valueProcess.js b/entity/BulkMail_entity/entityfields/icon/valueProcess.js
index 3d5da8ba5f5c8e4be29ccdcb3295de9fd2ecf8b8..be4fb2c06e5a12cf2216279cfc927e6def8161eb 100644
--- a/entity/BulkMail_entity/entityfields/icon/valueProcess.js
+++ b/entity/BulkMail_entity/entityfields/icon/valueProcess.js
@@ -1,10 +1,5 @@
 import("system.vars");
 import("system.result");
-import("system.neon");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
 
-var type = vars.getString("$field.STATUS");
-var keywordAttributes = KeywordUtils.getAttributeRelationsByKey(type, $KeywordRegistry.bulkMailStatus())
 
-result.string(keywordAttributes.bulkMailIcon);
\ No newline at end of file
+result.string("TEXT:" + vars.getString("$field.NAME"));
\ No newline at end of file
diff --git a/entity/BulkMail_entity/recordcontainers/db/orderClauseProcess.js b/entity/BulkMail_entity/recordcontainers/db/orderClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..107405f0f08dfdec247d0b8b8017baca1d9b145c
--- /dev/null
+++ b/entity/BulkMail_entity/recordcontainers/db/orderClauseProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("system.db");
+
+result.object({"BULKMAIL.DATE_EDIT": db.DESCENDING})
\ No newline at end of file
diff --git a/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/firstsenddate.value/expression.js b/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/firstsenddate.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..171ad06380e89ac88ac19c4fc1ce7bfeae21184a
--- /dev/null
+++ b/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/firstsenddate.value/expression.js
@@ -0,0 +1,10 @@
+import("system.result");
+import("Sql_lib");
+
+var cond = newSelect(new SqlMaskingUtils().min("MAIL_RUN.DATE_RUN_START"))
+    .from("MAIL_RUN")
+    .where("MAIL_RUN.OBJECT_TYPE","bulkmail")
+    .and("MAIL_RUN.TESTRUN",0)
+    .and("MAIL_RUN.OBJECT_ROWID=BULKMAIL.BULKMAILID");
+
+result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/recipientcount.value/expression.js b/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/recipientcount.value/expression.js
index c30687bdfd81a47f64e3685d8d1f8679a53fc36b..2d63750976a8dac35b04a9b5177f2f93b5f8cc52 100644
--- a/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/recipientcount.value/expression.js
+++ b/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/recipientcount.value/expression.js
@@ -1,2 +1,8 @@
 import("system.result");
-result.string("select count(BULKMAILRECIPIENT.BULKMAILRECIPIENTID) from BULKMAILRECIPIENT where BULKMAILRECIPIENT.BULKMAIL_ID = BULKMAIL.BULKMAILID");
\ No newline at end of file
+import("Sql_lib");
+
+var cond = new SqlBuilder().selectCount("BULKMAILRECIPIENT.BULKMAILRECIPIENTID")
+    .from("BULKMAILRECIPIENT")
+    .where("BULKMAILRECIPIENT.BULKMAIL_ID = BULKMAIL.BULKMAILID");
+
+ result.string(cond.toString());
diff --git a/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js b/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js
index 847ce5f1042ac939138867f6699f28a9179c6cc0..ad8f689c8d712aa1d1f76b32975cc9f9599357bf 100644
--- a/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js
@@ -1,3 +1,4 @@
+import("system.translate");
 import("system.util");
 import("system.vars");
 import("system.result");
@@ -30,11 +31,13 @@ var data = newSelect([
     .and("CHECKLISTENTRYVALUE.OBJECT_ROWID", vars.get("$param.ObjectRowId_param"))
     .andIfSet("CHECKLISTENTRYVALUE.OBJECT_TYPE", vars.get("$param.ObjectType_param"))
 ).whereIfSet("CHECKLISTENTRY.CHECKLIST_ID", checklistIds, SqlBuilder.IN())
+.orderBy("CHECKLISTENTRY.POS asc")
 .table();
 
 for(let i = 0; i < data.length; i++)
 {
     data[i][0] = data[i][0] || util.getNewUUID();
+    data[i][3] = translate.text(data[i][3]);
     data[i][8] = data[i][8] || "0";
     data[i][9] = data[i][9] || vars.get("$param.ObjectRowId_param");
     data[i][10] = data[i][10] || vars.get("$param.ObjectType_param");
diff --git a/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod b/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod
index f59dc1d71b6ab5177249ea9bd4679d4423265a4f..a22cfcfe0ad4818d6cb2bf7ab1a7c6bf3ac8ca95 100644
--- a/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod
+++ b/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod
@@ -8,10 +8,12 @@
   <entityFields>
     <entityProvider>
       <name>#PROVIDER</name>
+      <sortingField>POS</sortingField>
     </entityProvider>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
+      <sortingField>POS</sortingField>
     </entityProvider>
     <entityField>
       <name>CHECKLISTENTRYID</name>
@@ -52,6 +54,7 @@
     </entityField>
     <entityProvider>
       <name>ChecklistEntries</name>
+      <sortingField>POS</sortingField>
     </entityProvider>
     <entityField>
       <name>CHECKLIST_ID</name>
@@ -92,11 +95,17 @@
         <element>MASK</element>
       </onValueChangeTypes>
     </entityField>
+    <entityField>
+      <name>POS</name>
+      <title>Position</title>
+      <contentType>NUMBER</contentType>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
       <name>db</name>
       <conditionProcess>%aditoprj%/entity/ChecklistEntry_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <orderClauseProcess>%aditoprj%/entity/ChecklistEntry_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
       <alias>Data_alias</alias>
       <recordFieldMappings>
         <dbRecordFieldMapping>
@@ -139,6 +148,10 @@
           <name>FILTER_USED.value</name>
           <recordfield>CHECKLISTENTRY.FILTER_USED</recordfield>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>POS.value</name>
+          <recordfield>CHECKLISTENTRY.POS</recordfield>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
       <linkInformation>
         <linkInformation>
diff --git a/entity/ChecklistEntry_entity/recordcontainers/db/orderClauseProcess.js b/entity/ChecklistEntry_entity/recordcontainers/db/orderClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f8cf837f7c43e98c0f3664d6662098f199f0d4d7
--- /dev/null
+++ b/entity/ChecklistEntry_entity/recordcontainers/db/orderClauseProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.db");
+
+result.object({
+    "CHECKLISTENTRY.POS": db.ASCENDING
+});
diff --git a/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod b/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod
index 6d1f4898e6c51d2ee284a1e1624d14c6e805d868..bd4fbac9fd5e84e9b763383d4f834f8e8141ba57 100644
--- a/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod
+++ b/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod
@@ -92,17 +92,25 @@
       <children>
         <entityActionField>
           <name>UpdateClassifications</name>
-          <title>Recalculate Classifications</title>
+          <title>Recalculate all Classifications</title>
           <onActionProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateclassifications/onActionProcess.js</onActionProcess>
           <iconId>VAADIN:AUTOMATION</iconId>
           <tooltip>Starts the server process manually, which will recalculate all (potentially) outdated classifications. This process should be executed after changes to the classification configuration.</tooltip>
         </entityActionField>
         <entityActionField>
-          <name>UpdateAllClassifications</name>
-          <title>Recalculate all Classifications</title>
-          <onActionProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateallclassifications/onActionProcess.js</onActionProcess>
-          <iconId>VAADIN:AUTOMATION</iconId>
-          <tooltip>Starts the server process manually, which will recalculate all classifications from scratch. This process should only be executed after importing data from elsewhere, where the outdated flag couldn't be set correctly, since this can take some time.</tooltip>
+          <name>moveUp</name>
+          <title>Move up</title>
+          <onActionProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/moveup/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:ANGLE_UP</iconId>
+          <state>AUTO</state>
+          <stateProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/moveup/stateProcess.js</stateProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>moveDown</name>
+          <title>Move down</title>
+          <onActionProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/movedown/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:ANGLE_DOWN</iconId>
+          <stateProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/movedown/stateProcess.js</stateProcess>
         </entityActionField>
       </children>
     </entityActionGroup>
@@ -166,6 +174,9 @@
       <title>Indicator Type</title>
       <state>INVISIBLE</state>
     </entityField>
+    <entityField>
+      <name>CLASSIFICATIONTYPE_SORTING</name>
+    </entityField>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
@@ -231,6 +242,9 @@
         <jDitoRecordFieldMapping>
           <name>FIELD.displayValue</name>
         </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>CLASSIFICATIONTYPE_SORTING.value</name>
+        </jDitoRecordFieldMapping>
       </recordFieldMappings>
     </jDitoRecordContainer>
   </recordContainers>
diff --git a/entity/ClassificationAdmin_entity/documentation.adoc b/entity/ClassificationAdmin_entity/documentation.adoc
index 0618aaafcb61eaacfa26ba7fe675481c2f5f831a..ff723797e31262c18095aee7c04de33cb72d8545 100644
--- a/entity/ClassificationAdmin_entity/documentation.adoc
+++ b/entity/ClassificationAdmin_entity/documentation.adoc
@@ -75,8 +75,6 @@ Adding the classification to other modules:
     -If you are deleting these datasets you always have to also delete the CLASSIFICATIONSTORAGE entry
     so add the these deleteconditions to all actions that delete those datasets:
             newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", uid).deleteData();
-    -Be sure to use WorkflowSignalSender.updated(); in the onUpdateProcess of the module and add the dependency mapping for classificationStorage in 
-    the Dependency_lib so the outdated flag of the classificationStorage dataset can automatically be set everytime an dataset get's modified
 
 
     Now you can either configure your classifications in the client or via liquibase
@@ -88,8 +86,4 @@ Adding the classification to other modules:
     We can now store filter for classificationtype datasets
     We now store the max scorepoints for classificationtype datasets
     we are storing the achieved classifications (e.g. "ACD") in CLASSIFICATIONSTORAGE 
-    we don' persist the classifiaction values anymore
-    We also added an outdated flag to both ClassificationStorage and ClassificationType -> so the updateClassificationsServerprocess knows what it 
-    has to update (see also documentationProperty of said process)
-        - The ClassificationStorage one get's set via the onUpdate of the module (see above)
-        - The ClassificationType get's set for changes in classificationAdmin
\ No newline at end of file
+    we don' persist the classifiaction values anymore
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/movedown/onActionProcess.js b/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/movedown/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e5e85cbbdaccea92fe88ec97db19c5e0fcfd226f
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/movedown/onActionProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("Classification_lib");
+
+var selection = vars.get("$sys.selection");
+
+ClassificationUtils.move(selection, $ClassificationMoveDirections.DOWN());
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/movedown/stateProcess.js b/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/movedown/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..be7afa916ff4d1da9d1bc0711ae1e03b024e1227
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/movedown/stateProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.vars");
+import("Classification_lib");
+
+var selection = vars.get("$sys.selection");
+
+result.string(ClassificationUtils.moveAble(selection, $ClassificationMoveDirections.DOWN()));
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/moveup/onActionProcess.js b/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/moveup/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c14c0ccf7b4a22a71aa278264ce32f0d2a20b95d
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/moveup/onActionProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("Classification_lib");
+
+var selection = vars.get("$sys.selection");
+
+ClassificationUtils.move(selection, $ClassificationMoveDirections.UP());
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/moveup/stateProcess.js b/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/moveup/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..03abb1df19413177c484cde7c4dd22f7e834a8bd
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/moveup/stateProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.vars");
+import("Classification_lib");
+
+var selection = vars.get("$sys.selection");
+
+result.string(ClassificationUtils.moveAble(selection, $ClassificationMoveDirections.UP()));
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateallclassifications/onActionProcess.js b/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateallclassifications/onActionProcess.js
deleted file mode 100644
index 130f76a2297ba13fc73aa83143c85c4fcf8e5bb6..0000000000000000000000000000000000000000
--- a/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateallclassifications/onActionProcess.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import("system.process");
-import("system.question");
-import("system.text");
-import("system.translate");
-import("system.util");
-import("system.vars");
-
-var execute = question.askYesNo(translate.text("Start Serveprocess"), translate.text("Are you sure you want to recalculate all classifications using the current classificationgradings? This can take some time, since ALL classifications will get freshly calculated and updated if needed."), false);
-if(execute)
-{
-    var processConfig = process.createStartAsyncConfig()
-                                                        .setName("updateClassifications_serverProcess")
-                                                        .setUser( vars.get("$sys.user"))
-                                                        .setThreadPriority(process.THREADPRIORITY_LOW)
-                                                        .setTimerType(process.TIMERTYPE_SERVER)
-                                                        .setLocalVariables({"recalculateAll_param" : true});
-                                                        
-
-    process.startAsync(processConfig);
-
-    question.showMessage(translate.text("Serverprocess has been started"), question.INFORMATION, translate.text("Classification"));
-}
diff --git a/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateclassifications/onActionProcess.js b/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateclassifications/onActionProcess.js
index f1a169ba0ebfedb7c8278fc11103f02750888169..1147533fd692ac0baae5b911b8a046fe59931846 100644
--- a/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateclassifications/onActionProcess.js
+++ b/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateclassifications/onActionProcess.js
@@ -5,17 +5,18 @@ import("system.translate");
 import("system.util");
 import("system.vars");
 
-var execute = question.askYesNo(translate.text("Start Serveprocess"), translate.text("Are you sure you want to reload all classifications using the current classificationgradings?"), false);
+var execute = question.askYesNo(translate.text("Start Serveprocess"), translate.text("Are you sure you want to recalculate all classifications using the current classificationgradings? This can take some time, since ALL classifications will get freshly calculated and updated if needed."), false);
 if(execute)
 {
     var processConfig = process.createStartAsyncConfig()
                                                         .setName("updateClassifications_serverProcess")
                                                         .setUser( vars.get("$sys.user"))
                                                         .setThreadPriority(process.THREADPRIORITY_LOW)
-                                                        .setTimerType(process.TIMERTYPE_SERVER);
+                                                        .setTimerType(process.TIMERTYPE_SERVER)
+                                                        .setLocalVariables({"recalculateAll_param" : true});
                                                         
 
     process.startAsync(processConfig);
 
     question.showMessage(translate.text("Serverprocess has been started"), question.INFORMATION, translate.text("Classification"));
-}
+}
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/recordcontainers/jdito/contentProcess.js b/entity/ClassificationAdmin_entity/recordcontainers/jdito/contentProcess.js
index 8a2d00bece631016f8dcb5bffa88ac7024d87b6f..36bde12364bd8c950651bf3884806bc48092ad90 100644
--- a/entity/ClassificationAdmin_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/ClassificationAdmin_entity/recordcontainers/jdito/contentProcess.js
@@ -1,3 +1,4 @@
+import("system.db");
 import("ClassificationComplexIndicatorRegistry_basic");
 import("ClassificationIndicatorFieldRegistry_basic");
 import("Context_lib");
@@ -20,7 +21,7 @@ if (idvalues)
     if (idvalues[0].charAt(0) != ";" && idvalues[0].charAt(idvalues[0].length) != ";")
     {
         res.push([idvalues[0], "", "", "", "", "", idvalues[0], translate.text(idvalues[0]), 
-            "", $ClassificationRecordCategories.CLASSIFICATION_OBJECT_TYPE(), "", "", "", "", "", "", "", ""]);
+            "", $ClassificationRecordCategories.CLASSIFICATION_OBJECT_TYPE(), "", "", "", "", "", "", "", "", ""]);
     }
     else
     {
@@ -33,7 +34,7 @@ if (idvalues)
                                     .cell();
 
             res.push([idvalues[0], decodedIdvalues[0], decodedIdvalues[1], translate.text(groupName), "", "", "", 
-                "", "", $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP(), "", "", "", groupName, "", "", "", ""]);
+                "", "", $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP(), "", "", "", groupName, "", "", "", "", ""]);
         }
         else
         {
@@ -69,7 +70,7 @@ if (idvalues)
             res.push([idvalues[0], decodedIdvalues[0], "", "", decodedIdvalues[1], translate.text(filterDisplay[2]), 
                 "", "","", $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_TYPE(), filter, filterDisplay, maxScore, groupTitle
                 , ClassificationUtils.getFieldDisplayValue(classificationTypeFieldKeysWithDisplayValues, classificationType[4]), "", ""
-                , ClassificationUtils.getFieldDisplayValue(classificationTypeFieldKeysWithDisplayValues, classificationType[4])]);
+                , ClassificationUtils.getFieldDisplayValue(classificationTypeFieldKeysWithDisplayValues, classificationType[4]), ""]);
         }
     }
 }
@@ -77,22 +78,29 @@ else
 {
     var savedData = new Set();
     var fields = {};
+    var sortingUpdate = [];
+    var sortingHelper = {};
     var classificationData = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, \n\
                                             CLASSIFICATIONGROUP.TITLE, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID,  CLASSIFICATIONTYPE.SCORETYPE\n\
                                             , CLASSIFICATIONTYPE.FILTER, CLASSIFICATIONTYPE.SCOREPOINTS, CLASSIFICATIONTYPE.FIELD\n\
-                                            , CLASSIFICATIONTYPE.FIELDTYPE, CLASSIFICATIONTYPE.INDICATORTYPE")
+                                            , CLASSIFICATIONTYPE.FIELDTYPE, CLASSIFICATIONTYPE.INDICATORTYPE, CLASSIFICATIONTYPE.SORTING")
                                             .from("CLASSIFICATIONGROUP")
                                             .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID")
-                                            .orderBy("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.SORTING")
+                                            .orderBy("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.SORTING, CLASSIFICATIONTYPE.SORTING")
                                             .table()                                   
     
     //run trough the data and build the tree
-    classificationData.forEach(function ([objectType, classificationGroupId, classificationGroupName, classificationTypeId, classificationScoreType, classificationTypeFilter, classificationTypeScorePoints, field, fieldType, indicatorType])
+    classificationData.forEach(function ([objectType, classificationGroupId, classificationGroupName, classificationTypeId, classificationScoreType, classificationTypeFilter, classificationTypeScorePoints, field, fieldType, indicatorType, classificationTypeSorting])
     {                
         uidClassificationGroup = text.encodeMS([objectType, classificationGroupId]);
         uidClassificationType = text.encodeMS([uidClassificationGroup, classificationTypeId]);
         uidClassificationTypeFilter = text.encodeMS([uidClassificationType, util.getNewUUID()]);
         
+        if(!sortingHelper.hasOwnProperty(classificationGroupId))
+        {
+            sortingHelper[classificationGroupId] = "1";
+        }
+        
         if (!fields.hasOwnProperty(objectType))
         {
             fields[objectType] = ClassificationUtils.getEntityFields(objectType)
@@ -103,17 +111,25 @@ else
         if (!savedData.has(objectType)) //objectType
         { 
             res.push([objectType, "", "", "", "", "", objectType, translate.text(objectType), 
-                "", $ClassificationRecordCategories.CLASSIFICATION_OBJECT_TYPE(), "", "", "", "", "", "", "", ""]);
+                "", $ClassificationRecordCategories.CLASSIFICATION_OBJECT_TYPE(), "", "", "", "", "", "", "", "", ""]);
             savedData.add(objectType);
         }
         if (!savedData.has(classificationGroupId)) //classificationGroup
         {
             res.push([uidClassificationGroup, objectType, classificationGroupId, translate.text(classificationGroupName), "", "", "",
-                "", "", $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP(), "", "", "", "", "", "", "", ""]);
+                "", "", $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP(), "", "", "", "", "", "", "", "", ""]);
             savedData.add(classificationGroupId);
         }
         if (!savedData.has(classificationTypeId)) //classificationType
         {
+            var sortingValue = classificationTypeSorting;
+            if(!sortingValue || sortingValue == "")
+            {
+                sortingValue = sortingHelper[classificationGroupId];
+                sortingHelper[classificationGroupId] = eMath.addInt(sortingValue, 1);
+                sortingUpdate.push(["CLASSIFICATIONTYPE", ["SORTING"], null, [sortingValue], newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypeId).build()]);
+            
+            }
             var classificationTypeFilterDisplay = translate.text("Filter set"); //ToDo: "resolved" DisplayValue for the Filterstrings #1067160/1067241
             entity = ContextUtils.getEntity(objectType);
             emptyFilter = JditoFilterUtils.getEmptyFilter(entity);
@@ -129,10 +145,14 @@ else
             res.push([uidClassificationType, uidClassificationGroup, "", "", classificationTypeId, translate.text(classificationScoreType), 
                 "", "", "", $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_TYPE(), classificationTypeFilter
                 , classificationTypeFilterDisplay, classificationTypeScorePoints, ""
-                , field, fieldType, indicatorType, ClassificationUtils.getFieldDisplayValue(fields[objectType], field)]);
+                , field, fieldType, indicatorType, ClassificationUtils.getFieldDisplayValue(fields[objectType], field), sortingValue]);
 
             savedData.add(classificationTypeId);
         }
     })
+    if(sortingUpdate && sortingUpdate.length > 0)
+    {
+        db.execute(sortingUpdate);
+    }
 }
 result.object(res);
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/recordcontainers/jdito/onDelete.js b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onDelete.js
index d436e8067ff123529390eed82aa901461716fb47..64d1e557b7b79e7c4c1dfb68d4c09011fe6d0ff8 100644
--- a/entity/ClassificationAdmin_entity/recordcontainers/jdito/onDelete.js
+++ b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onDelete.js
@@ -35,15 +35,6 @@ function _delete()
         newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationType).deleteData(); //deletes the classificationtype
         newWhere("CLASSIFICATION.CLASSIFICATIONTYPE_ID", classificationType).deleteData(); //deletes all the classifications
         
-        //get all the classificationTypes of the group so we can set those as outdated
-        classificationTypes = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID")
-                                                    .from("CLASSIFICATIONTYPE")
-                                                    .where("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", classificationGroup)
-                                                    .and("CLASSIFICATIONTYPE.OUTDATED", 0)
-                                                    .arrayColumn();
-                                                    
-        newWhereIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypes, SqlBuilder.IN()).updateData(true, "CLASSIFICATIONTYPE", ["OUTDATED"], null, [1]);
-        
     }
     else if (recordCategory == $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP()) //the deleted dataset must be an classificationGroup
     {
@@ -97,12 +88,6 @@ function _delete()
             }
         }
         
-        newSelect("CLASSIFICATIONSTORAGE.CLASSIFICATIONSTORAGEID, CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE")
-                .from("CLASSIFICATIONSTORAGE")
-                .where("CLASSIFICATIONSTORAGE.OBJECT_TYPE", objectType)
-                .pageSize(400)
-                .forEachPage(_updateStringLengthFn); //update the storageStrings
-        
         //delete the classificationscores, types and  that are linked to the classificationtypes of te classificationgroup
         newWhere("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID", classificationTypes, SqlBuilder.IN()).deleteData(true, "CLASSIFICATIONSCORE"); 
         newWhere("CLASSIFICATION.CLASSIFICATIONTYPE_ID", classificationTypes, SqlBuilder.IN()).deleteData(true, "CLASSIFICATION"); 
diff --git a/entity/ClassificationAdmin_entity/recordcontainers/jdito/onInsert.js b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onInsert.js
index 63490869f508e748005b4c5a97991bcdded1796f..289ed3e098fd3acf734820a7127119bb0e1e9d9d 100644
--- a/entity/ClassificationAdmin_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onInsert.js
@@ -21,13 +21,24 @@ function _insert()
     var rowData = vars.get("$local.rowdata");
     var groupId;
     var groupValue = rowData["CLASSIFICATIONGROUPDISPLAYVALUE.value"];
+    var sqlHelper = new SqlMaskingUtils();
     if (groupValue.length != 36 && (groupValue.match(/-/g) || []).length != 4) //if groupValue is no Id -> insert new group
     {
+        var classificationGroupSorting = newSelect(SqlBuilder.caseWhen(newWhere(sqlHelper.max("CLASSIFICATIONGROUP.SORTING") + " is null"))
+                                                                        .then("1")
+                                                                        .elseValue(sqlHelper.max("CLASSIFICATIONGROUP.SORTING") + " + 1")
+                                                                        .toString())
+                                                    .from("CLASSIFICATIONGROUP")
+                                                    .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID")
+                                                    .where("CLASSIFICATIONTYPE.OBJECT_TYPE", rowData["OBJECT_TYPE.value"])
+                                                    .cell();
+
+        
         groupId = util.getNewUUID();
         var groupValues = [
             groupValue,
             groupId,
-            rowData["SORTING.value"]
+            classificationGroupSorting
         ];
         
         var groupColumns = [
@@ -67,47 +78,26 @@ function _insert()
                     position = position + 1;
                 }
             }
-        }
-        //helper function to update the stored ClassificationStrings
-        function _updateStringLengthFn(pBatchData, pBatchNum)
-        {
-            var statements = [];
-            for (let i = 0; i < pBatchData.length; i++)
-            {
-                var oldString = pBatchData[i][1];
-                oldString = oldString.split('');
-                oldString.splice(position, 0, "-");
-                var newString = oldString.join('');
-                statements.push(["CLASSIFICATIONSTORAGE", ["CLASSIFICATIONVALUE"], null, [newString], 
-                                newWhere("CLASSIFICATIONSTORAGE.CLASSIFICATIONSTORAGEID", pBatchData[i][0]).build()]);
-            }
-            if (statements.length > 0)
-            {
-                db.execute(statements);
-            }
-        }
-        
-        newSelect("CLASSIFICATIONSTORAGE.CLASSIFICATIONSTORAGEID, CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE")
-                .from("CLASSIFICATIONSTORAGE")
-                .where("CLASSIFICATIONSTORAGE.OBJECT_TYPE", rowData["OBJECT_TYPE.value"])
-                .pageSize(400)
-                .forEachPage(_updateStringLengthFn);
-                
-        
+        }      
     }
     else
     {
         groupId = groupValue; //else the groupValue is the groupId
     }
+    
+    var classificationTypeSorting = newSelect(SqlBuilder.caseWhen(newWhere(sqlHelper.max("SORTING") + " is null")).then("1").elseValue(sqlHelper.max("SORTING") + " + 1").toString())
+                                                .from("CLASSIFICATIONTYPE")
+                                                .where("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", groupId)
+                                                .cell();
     var typeValues = [
         util.getNewUUID(),
         groupId,
         rowData["OBJECT_TYPE.value"],
         rowData["SCOREPOINTS.value"],
-        1,
         rowData["FIELD.value"],
         rowData["FIELDTYPE.value"],
-        rowData["INDICATORTYPE.value"]
+        rowData["INDICATORTYPE.value"],
+        classificationTypeSorting
     ];
     
     var typeColumns = [
@@ -115,10 +105,10 @@ function _insert()
         "CLASSIFICATIONGROUP_ID",
         "OBJECT_TYPE",
         "SCOREPOINTS",
-        "OUTDATED",
         "FIELD", 
         "FIELDTYPE", 
-        "INDICATORTYPE"
+        "INDICATORTYPE", 
+        "SORTING"
     ];
     db.insertData("CLASSIFICATIONTYPE", typeColumns, null, typeValues); // always insert the classificationtype
 }
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/recordcontainers/jdito/onUpdate.js b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onUpdate.js
index f54db92f296acd3faeebb24f29e7d57d964da2b7..5a66e3cc367ca8f0d4396c63e2bd3e2d4b25623b 100644
--- a/entity/ClassificationAdmin_entity/recordcontainers/jdito/onUpdate.js
+++ b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onUpdate.js
@@ -63,13 +63,6 @@ function _update()
 
     if(!isGroupDataSet) //-> update the classification type dataset
     {
-        var groupIds = ClassificationUtils.getAllGroups(rowData["OBJECT_TYPE.value"]); //gets all existing groups of the object_type
-        var newGroupId;
-        var newGroupName;
-        var markOutdated = false;
-        var newId;
-        var condition;
-        
         for (i = 0; i < columns.length; i++) {
             
             if(columns[i] == "CLASSIFICATIONTYPEID")
@@ -86,7 +79,6 @@ function _update()
             }
             else if(columns[i] == "SCOREPOINTS" || columns[i] == "FILTER")
             {
-                markOutdated = true
                 if(columns[i] == "FILTER")
                 {
                     if(JSON.parse(values[i]).filter.childs.length == 0) //insert "" intead of an empty filter
@@ -102,12 +94,6 @@ function _update()
                 i = i-1;
             }
         }
-        
-        if(markOutdated)
-        {
-            columns.push("OUTDATED");
-            values.push(1);
-        }
 
         cond = newWhereIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", text.decodeMS(uid)[1]);
 
@@ -127,10 +113,5 @@ function _update()
         var groupValues = [rowData["SORTING.value"], groupName];
         var groupCond = newWhereIfSet("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID", classificationGroupId);
         groupCond.updateData(true, groupTable, groupColumns, null, groupValues);
-
-        if(columns.includes("SORTING"))//set all classificationtypes of said Object as outdated if sorting changed
-        {
-            newWhere("CLASSIFICATIONTYPE.OBJECT_TYPE", rowData["OBJECT_TYPE.value"]).updateData(true, "CLASSIFICATIONTYPE", ["OUTDATED"], null, [1]);
-        }
     }
 }
\ No newline at end of file
diff --git a/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod b/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod
index bb15b3c717a84f26ac5040b1273ae9dc4cd56e28..e3c3e0cec46e2c869b011ee1b5705b356c81fece 100644
--- a/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod
+++ b/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod
@@ -55,9 +55,6 @@
       <isPageable v="false" />
       <conditionProcess>%aditoprj%/entity/ClassificationGrading_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
       <orderClauseProcess>%aditoprj%/entity/ClassificationGrading_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
-      <onDBInsert>%aditoprj%/entity/ClassificationGrading_entity/recordcontainers/db/onDBInsert.js</onDBInsert>
-      <onDBUpdate>%aditoprj%/entity/ClassificationGrading_entity/recordcontainers/db/onDBUpdate.js</onDBUpdate>
-      <onDBDelete>%aditoprj%/entity/ClassificationGrading_entity/recordcontainers/db/onDBDelete.js</onDBDelete>
       <alias>Data_alias</alias>
       <cacheType>GLOBAL</cacheType>
       <cacheKeyProcess>%aditoprj%/entity/ClassificationGrading_entity/recordcontainers/db/cacheKeyProcess.js</cacheKeyProcess>
diff --git a/entity/ClassificationGrading_entity/documentation.adoc b/entity/ClassificationGrading_entity/documentation.adoc
index 3b060496fbf25e269ddef28594a154c021856a18..9ddd3818cdcc5722a7fb7ed994dd039fc60f763b 100644
--- a/entity/ClassificationGrading_entity/documentation.adoc
+++ b/entity/ClassificationGrading_entity/documentation.adoc
@@ -37,9 +37,6 @@ Particularities:
     and matching it against the the sum of the best possible scores of each relevant classificationType of that group and calculating it via the classificationGrading minPercents
     If none of the classificationTypes of a group is relevant we ignore that group.
 
-    We also have to set the outdated flag of the classificationtype dataset everytime we insert/update/delete
-
-
     The Classification consists of the following entities:
     Classification_entity,
     ClassificationAdmin_entity,
diff --git a/entity/ClassificationGrading_entity/recordcontainers/db/onDBDelete.js b/entity/ClassificationGrading_entity/recordcontainers/db/onDBDelete.js
deleted file mode 100644
index fa7d86fe4e885314eba29f09dc9ecd9651b1fbeb..0000000000000000000000000000000000000000
--- a/entity/ClassificationGrading_entity/recordcontainers/db/onDBDelete.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import("Classification_lib");
-import("Sql_lib");
-import("system.vars");
-
-var classificationGroupId = vars.get("$field.CLASSIFICATIONGROUP_ID") 
-var classificationTypeIds = ClassificationUtils.getClassificationTypesOfGroup(classificationGroupId, null, true)
-
-var cond = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypeIds, SqlBuilder.IN());
-cond.updateData(true, "CLASSIFICATIONTYPE", ["OUTDATED"], null, [1]);
\ No newline at end of file
diff --git a/entity/ClassificationGrading_entity/recordcontainers/db/onDBInsert.js b/entity/ClassificationGrading_entity/recordcontainers/db/onDBInsert.js
deleted file mode 100644
index 02b185c19d97718a367481e467165ab9a3e6934a..0000000000000000000000000000000000000000
--- a/entity/ClassificationGrading_entity/recordcontainers/db/onDBInsert.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import("Classification_lib");
-import("Sql_lib");
-import("system.vars");
-
-var classificationGroupId = vars.get("$field.CLASSIFICATIONGROUP_ID") 
-var classificationTypeIds = ClassificationUtils.getClassificationTypesOfGroup(classificationGroupId, null, true)
-
-var cond = newWhereIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypeIds);
-cond.updateData(true, "CLASSIFICATIONTYPE", ["OUTDATED"], null, [1]);
\ No newline at end of file
diff --git a/entity/ClassificationGrading_entity/recordcontainers/db/onDBUpdate.js b/entity/ClassificationGrading_entity/recordcontainers/db/onDBUpdate.js
deleted file mode 100644
index fa7d86fe4e885314eba29f09dc9ecd9651b1fbeb..0000000000000000000000000000000000000000
--- a/entity/ClassificationGrading_entity/recordcontainers/db/onDBUpdate.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import("Classification_lib");
-import("Sql_lib");
-import("system.vars");
-
-var classificationGroupId = vars.get("$field.CLASSIFICATIONGROUP_ID") 
-var classificationTypeIds = ClassificationUtils.getClassificationTypesOfGroup(classificationGroupId, null, true)
-
-var cond = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypeIds, SqlBuilder.IN());
-cond.updateData(true, "CLASSIFICATIONTYPE", ["OUTDATED"], null, [1]);
\ No newline at end of file
diff --git a/entity/ClassificationScore_entity/ClassificationScore_entity.aod b/entity/ClassificationScore_entity/ClassificationScore_entity.aod
index de2b879dbdc091ebd0f374cd1f13aa1391adfb5b..7e5b6cec683ee79b142ed17064db761ee6ef272d 100644
--- a/entity/ClassificationScore_entity/ClassificationScore_entity.aod
+++ b/entity/ClassificationScore_entity/ClassificationScore_entity.aod
@@ -5,7 +5,6 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/entity/ClassificationScore_entity/documentation.adoc</documentation>
   <contentTitleProcess>%aditoprj%/entity/ClassificationScore_entity/contentTitleProcess.js</contentTitleProcess>
-  <onValidation>%aditoprj%/entity/ClassificationScore_entity/onValidation.js</onValidation>
   <titlePlural>Possible Values</titlePlural>
   <recordContainer>db</recordContainer>
   <entityFields>
@@ -116,7 +115,6 @@
       <state>AUTO</state>
       <stateProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/fieldvalue/stateProcess.js</stateProcess>
       <valueProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/fieldvalue/valueProcess.js</valueProcess>
-      <onValueChange>%aditoprj%/entity/ClassificationScore_entity/entityfields/fieldvalue/onValueChange.js</onValueChange>
       <onValueChangeTypes>
         <element>MASK</element>
         <element>PROCESS</element>
@@ -162,9 +160,6 @@
       <isPageable v="false" />
       <conditionProcess>%aditoprj%/entity/ClassificationScore_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
       <orderClauseProcess>%aditoprj%/entity/ClassificationScore_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
-      <onDBInsert>%aditoprj%/entity/ClassificationScore_entity/recordcontainers/db/onDBInsert.js</onDBInsert>
-      <onDBUpdate>%aditoprj%/entity/ClassificationScore_entity/recordcontainers/db/onDBUpdate.js</onDBUpdate>
-      <onDBDelete>%aditoprj%/entity/ClassificationScore_entity/recordcontainers/db/onDBDelete.js</onDBDelete>
       <alias>Data_alias</alias>
       <cacheType>GLOBAL</cacheType>
       <cacheKeyProcess>%aditoprj%/entity/ClassificationScore_entity/recordcontainers/db/cacheKeyProcess.js</cacheKeyProcess>
diff --git a/entity/ClassificationScore_entity/documentation.adoc b/entity/ClassificationScore_entity/documentation.adoc
index 2610527000dabfb503e620b1ec5d43080396c5d9..8b0c71ab3e8da07a6fbad426b615b0bc4adb3a2b 100644
--- a/entity/ClassificationScore_entity/documentation.adoc
+++ b/entity/ClassificationScore_entity/documentation.adoc
@@ -39,9 +39,6 @@ Particularities:
     The dropDownValues of complex indicators work trough a dropDownProcess.
     The numbers have a simple numberfield so the user can specify how many percent the object get's from that many points.
     
-
-    We also have to set the outdated flag of the classificationtype dataset everytime we insert/update/delete
-    
     The Classification consists of the following entities:
     Classification_entity,
     ClassificationAdmin_entity,
diff --git a/entity/ClassificationScore_entity/entityfields/displayvaluefortitlefield/valueProcess.js b/entity/ClassificationScore_entity/entityfields/displayvaluefortitlefield/valueProcess.js
index 03b0db7617bb790d394435b2fec5518ec070d0da..59c4150b5fb6c6fde0316fa5c4573f3e914d2b66 100644
--- a/entity/ClassificationScore_entity/entityfields/displayvaluefortitlefield/valueProcess.js
+++ b/entity/ClassificationScore_entity/entityfields/displayvaluefortitlefield/valueProcess.js
@@ -1,3 +1,4 @@
+import("system.translate");
 import("system.result");
 import("system.vars");
 
@@ -18,13 +19,13 @@ else if (numberValue)
 }
 else if (textValue)
 {
-    res = vars.get("$property.INDICATORTEXT.dropDown")[textValue];
+    res = translate.text(vars.get("$property.INDICATORTEXT.dropDown")[textValue]);
 }
 else if (filterValue)
 {
     if (JSON.parse(filterValue)["filter"]["childs"]["0"])
     {
-        res = JSON.parse(filterValue)["filter"]["childs"]["0"]["value"]; //always the first child, because we only allow simple filters with one child
+        res = translate.text(JSON.parse(filterValue)["filter"]["childs"]["0"]["value"]); //always the first child, because we only allow simple filters with one child
     }
 }
 
diff --git a/entity/ClassificationScore_entity/entityfields/fieldvalue/onValueChange.js b/entity/ClassificationScore_entity/entityfields/fieldvalue/onValueChange.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/ClassificationScore_entity/onValidation.js b/entity/ClassificationScore_entity/onValidation.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/ClassificationScore_entity/recordcontainers/db/onDBDelete.js b/entity/ClassificationScore_entity/recordcontainers/db/onDBDelete.js
deleted file mode 100644
index c9d29f0a6ed67c07d8974c97aa4318ff6f50cb8a..0000000000000000000000000000000000000000
--- a/entity/ClassificationScore_entity/recordcontainers/db/onDBDelete.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import("Sql_lib");
-import("system.vars");
-
-var classificationTypeId = vars.get("$field.CLASSIFICATIONTYPE_ID");
-
-var cond = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypeId);
-
-cond.updateData(true, "CLASSIFICATIONTYPE", ["OUTDATED"], null, [1]);
\ No newline at end of file
diff --git a/entity/ClassificationScore_entity/recordcontainers/db/onDBInsert.js b/entity/ClassificationScore_entity/recordcontainers/db/onDBInsert.js
deleted file mode 100644
index 1d7a46d81d65023d1f0ce5acf224e6fb6362c040..0000000000000000000000000000000000000000
--- a/entity/ClassificationScore_entity/recordcontainers/db/onDBInsert.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import("Sql_lib");
-import("system.vars");
-
-//we have to set the corresponding classificationType dataset as outdated everytime we insert a new classificationScore or edit an existing one
-//quick reminder: the classifications are not calculated in realtime, so we have to set this flag so the serverprocess knows what has changed and can recalculate accordingly
-var classificationTypeId = vars.get("$field.CLASSIFICATIONTYPE_ID");
-var cond = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypeId);
-cond.updateData(true, "CLASSIFICATIONTYPE", ["OUTDATED"], null, [1]);
\ No newline at end of file
diff --git a/entity/ClassificationScore_entity/recordcontainers/db/onDBUpdate.js b/entity/ClassificationScore_entity/recordcontainers/db/onDBUpdate.js
deleted file mode 100644
index 1d7a46d81d65023d1f0ce5acf224e6fb6362c040..0000000000000000000000000000000000000000
--- a/entity/ClassificationScore_entity/recordcontainers/db/onDBUpdate.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import("Sql_lib");
-import("system.vars");
-
-//we have to set the corresponding classificationType dataset as outdated everytime we insert a new classificationScore or edit an existing one
-//quick reminder: the classifications are not calculated in realtime, so we have to set this flag so the serverprocess knows what has changed and can recalculate accordingly
-var classificationTypeId = vars.get("$field.CLASSIFICATIONTYPE_ID");
-var cond = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypeId);
-cond.updateData(true, "CLASSIFICATIONTYPE", ["OUTDATED"], null, [1]);
\ No newline at end of file
diff --git a/entity/ClassificationType_entity/ClassificationType_entity.aod b/entity/ClassificationType_entity/ClassificationType_entity.aod
index 4aadb51b31db8f6c584d801d50ff1e99aac1eb80..282fab433544252d4ec187fe666250e7f3d25ef7 100644
--- a/entity/ClassificationType_entity/ClassificationType_entity.aod
+++ b/entity/ClassificationType_entity/ClassificationType_entity.aod
@@ -82,9 +82,6 @@
       <name>SCOREPOINTS</name>
       <title>Max Points</title>
     </entityField>
-    <entityField>
-      <name>OUTDATED</name>
-    </entityField>
     <entityField>
       <name>FIELD</name>
     </entityField>
diff --git a/entity/ClassificationType_entity/documentation.adoc b/entity/ClassificationType_entity/documentation.adoc
index e2fa391d6ffc725913910d1dce9c3daf53bb5d20..0d079ba4b8e91e7dd3ee1def4bb14038b533a88b 100644
--- a/entity/ClassificationType_entity/documentation.adoc
+++ b/entity/ClassificationType_entity/documentation.adoc
@@ -31,9 +31,6 @@ Particularities:
 
     The admin is maintaining the scorepoints per classificationType and percentages for the classificationscores
     
-    We also have to set the outdated flag of the classificationtype dataset everytime we insert/update it and set the flag 
-    for all the other classificationtypes of the group if we delete the current classificationType
-    
     We only classificate fields of the entity itself, it's attributes or the complex ones specified by customizing (see also ClassificationComplexIndicatorRegistry_basic)
     At the moment we only allow classificating with drop down values or number/integer values.
     For the dropDownFields of the entity or attributes we use a FILTER_TREE field so the user has all the possible values as the selection and we can easily evaluate them.
diff --git a/entity/Classification_entity/Classification_entity.aod b/entity/Classification_entity/Classification_entity.aod
index 5dfcffcc838eaf10372aab1aba5f4a70a4e3926c..f8293a459cfecc3f0744e2723d7d6c13053b01ce 100644
--- a/entity/Classification_entity/Classification_entity.aod
+++ b/entity/Classification_entity/Classification_entity.aod
@@ -14,7 +14,7 @@
     </entityProvider>
     <entityField>
       <name>VALUE</name>
-      <title>Selection</title>
+      <title>Value</title>
       <consumer>ClassificationScores</consumer>
     </entityField>
     <entityParameter>
@@ -105,7 +105,7 @@
     </entityProvider>
     <entityField>
       <name>SCOREPOINTS</name>
-      <title>Points</title>
+      <title>Valuation</title>
       <contentType>TEXT</contentType>
       <outputFormat>#,##0.00</outputFormat>
       <inputFormat>#,##0.00</inputFormat>
diff --git a/entity/Classification_entity/documentation.adoc b/entity/Classification_entity/documentation.adoc
index 1b1f222e40d994f35f7f49536ffd465bb1853136..a43ecce651bbc88b628d5efc3e1bef0f3da6973e 100644
--- a/entity/Classification_entity/documentation.adoc
+++ b/entity/Classification_entity/documentation.adoc
@@ -26,26 +26,9 @@ Purpose:
                                                 Loyalty                     Low
 
 Particularities:
-
-    The classification datasets get persisted for performance reasons and can be flagged as outdated so they can be updated by the 
-    updateClassifications_serverProcess.
-    For further information how this works see also the documentation property of updateClassifications_serverProcess.
-    
-    The calculated ClassificationStrings (e.g. "ACD") get stored in "CLASSIFICATIONSTORAGE" with their own id, the object_type, object_rowId, 
-    and the 'outdated' flag (datatype Boolean, might be changed to a timestamp in the future).
-    This dataset get's inserted when opening the Classification context of the object for the first time. (otherwise we would have a lot of 
-    useless datasets for object's that are not getting classified in any way, which is also the reason why we are deleting them via the process 
-    if they only consist of '-', since there is no reason for storing those)
-    The 'outdated' flag get's set when editing the current object or a linked object of a dependency of the current object_type 
-    (dependencies have to be configured in the Dependency_lib)
     
-    We also persist the classificationValues themselves (e.g. Industy - Service) with with their own id, the object_type, object_rowId, 
-    classificationtypeId, value(classificationScoreId) and the scorepoints.
-    Reason for that are the filters the admin can set for the classificationtypes which can make some classificationtypes irrelevant for certain objects.
-    If we had to always check those every time we would load the Classification conetext for example, the performance would suffer tremendously.
-    The solution to that Problem is persisting those the same way as the string (they get persisted the first time you open the context, 
-    which only results in poor performance only once)
-    This also means that we have to insert/delete those persisted once in the serverProcess when filters change.
+    The calculated ClassificationStrings (e.g. "ACD") get stored in "CLASSIFICATIONSTORAGE" with their own id, the object_type, object_rowId.
+    This dataset get's inserted when opening the Classification context of the object for the first time. (Or when executing ClassificationUtils.executeUpdating().)
 
     The Classification consists of the following entities:
     Classification_entity,
diff --git a/entity/Communication_entity/Communication_entity.aod b/entity/Communication_entity/Communication_entity.aod
index 80561cb7586e8707602408efd4cce7750d0f3acd..3274666ba2382180e5486a4f5e51d039ef80b263 100644
--- a/entity/Communication_entity/Communication_entity.aod
+++ b/entity/Communication_entity/Communication_entity.aod
@@ -85,6 +85,7 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
     </entityProvider>
     <entityProvider>
       <name>PhoneCommunications</name>
+      <lookupIdfield>COMMUNICATIONID</lookupIdfield>
       <documentation>%aditoprj%/entity/Communication_entity/entityfields/phonecommunications/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
       <children>
@@ -113,6 +114,7 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
     </entityProvider>
     <entityProvider>
       <name>EmailCommunications</name>
+      <lookupIdfield>COMMUNICATIONID</lookupIdfield>
       <documentation>%aditoprj%/entity/Communication_entity/entityfields/emailcommunications/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
       <children>
diff --git a/entity/Communication_entity/recordcontainers/db/conditionProcess.js b/entity/Communication_entity/recordcontainers/db/conditionProcess.js
index 3e0aa7e1ea7a965a4d76ee934b7a0dfde4e58184..0b81dc6f30d680fe3a3ea3c4a8b7c3228aa16a98 100644
--- a/entity/Communication_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Communication_entity/recordcontainers/db/conditionProcess.js
@@ -1,8 +1,8 @@
+import("system.result");
 import("system.vars");
 import("system.db");
-import("system.result");
-import("Sql_lib");
 import("Keyword_lib");
+import("Sql_lib");
 
 var cond = newWhere()
             .andIfSet("COMMUNICATION.OBJECT_ROWID", "$param.ObjectRowId_param")
@@ -14,4 +14,5 @@ if (vars.getString("$param.CommMediumIds_param"))
     var mediumIds = JSON.parse(vars.getString("$param.CommMediumIds_param"));
     cond.andIfSet("COMMUNICATION.MEDIUM_ID", mediumIds, SqlBuilder.IN());
 }
+
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/DistrictChangeValidityDates_entity/DistrictChangeValidityDates_entity.aod b/entity/DistrictChangeValidityDates_entity/DistrictChangeValidityDates_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..637eb09c2a57e23bac87783ef1f1e532db08ce16
--- /dev/null
+++ b/entity/DistrictChangeValidityDates_entity/DistrictChangeValidityDates_entity.aod
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21">
+  <name>DistrictChangeValidityDates_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <recordContainer>jdito</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityField>
+      <name>VALID_FROM</name>
+      <title>Valid from</title>
+      <contentType>DATE</contentType>
+      <state>EDITABLE</state>
+      <stateProcess>%aditoprj%/entity/DistrictChangeValidityDates_entity/entityfields/valid_from/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/DistrictChangeValidityDates_entity/entityfields/valid_from/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>VALID_UNTIL</name>
+      <title>Valid to</title>
+      <contentType>DATE</contentType>
+      <state>EDITABLE</state>
+      <stateProcess>%aditoprj%/entity/DistrictChangeValidityDates_entity/entityfields/valid_until/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/DistrictChangeValidityDates_entity/entityfields/valid_until/valueProcess.js</valueProcess>
+    </entityField>
+    <entityParameter>
+      <name>DistrictContactIds_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityActionField>
+      <name>safeAndUpdate</name>
+      <onActionProcess>%aditoprj%/entity/DistrictChangeValidityDates_entity/entityfields/safeandupdate/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:CHECK</iconId>
+    </entityActionField>
+    <entityField>
+      <name>count</name>
+      <title>Contacts selected</title>
+      <valueProcess>%aditoprj%/entity/DistrictChangeValidityDates_entity/entityfields/count/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>setValid_from</name>
+      <title>change valid from</title>
+      <contentType>BOOLEAN</contentType>
+      <state>EDITABLE</state>
+      <valueProcess>%aditoprj%/entity/DistrictChangeValidityDates_entity/entityfields/setvalid_from/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>setValid_until</name>
+      <title>change valid to</title>
+      <contentType>BOOLEAN</contentType>
+      <state>EDITABLE</state>
+      <valueProcess>%aditoprj%/entity/DistrictChangeValidityDates_entity/entityfields/setvalid_until/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>UID</name>
+    </entityField>
+  </entityFields>
+  <recordContainers>
+    <jDitoRecordContainer>
+      <name>jdito</name>
+      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
+      <contentProcess>%aditoprj%/entity/DistrictChangeValidityDates_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
+      <onInsert>%aditoprj%/entity/DistrictChangeValidityDates_entity/recordcontainers/jdito/onInsert.js</onInsert>
+      <recordFieldMappings>
+        <jDitoRecordFieldMapping>
+          <name>UID.value</name>
+        </jDitoRecordFieldMapping>
+      </recordFieldMappings>
+    </jDitoRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/DistrictChangeValidityDates_entity/entityfields/count/valueProcess.js b/entity/DistrictChangeValidityDates_entity/entityfields/count/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9f4f98e036a12bc8869a4a8d7bf75648a2b31104
--- /dev/null
+++ b/entity/DistrictChangeValidityDates_entity/entityfields/count/valueProcess.js
@@ -0,0 +1,13 @@
+import("system.vars");
+import("system.result");
+
+var districtContactIds = vars.get("$param.DistrictContactIds_param");
+
+if(districtContactIds && Array.isArray(districtContactIds))
+{
+    result.string(JSON.parse(districtContactIds).length);
+}
+else
+{
+    result.string(0);
+}
diff --git a/entity/DistrictChangeValidityDates_entity/entityfields/valid_from/stateProcess.js b/entity/DistrictChangeValidityDates_entity/entityfields/valid_from/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..28dc61548eb721a9e33433134e44e20168a17f72
--- /dev/null
+++ b/entity/DistrictChangeValidityDates_entity/entityfields/valid_from/stateProcess.js
@@ -0,0 +1,11 @@
+import("system.result");
+import("system.neon");
+import("Util_lib");
+import("system.vars");
+
+var state = neon.COMPONENTSTATE_INVISIBLE;
+if(Utils.toBoolean(vars.get("$field.setValid_from")))
+{
+    state = neon.COMPONENTSTATE_EDITABLE;
+}
+result.string(state);
\ No newline at end of file
diff --git a/entity/DistrictChangeValidityDates_entity/entityfields/valid_from/valueProcess.js b/entity/DistrictChangeValidityDates_entity/entityfields/valid_from/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8a2a5c1838cd220835b89369c584cba861307eba
--- /dev/null
+++ b/entity/DistrictChangeValidityDates_entity/entityfields/valid_from/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.neon");
+import("system.result");
+
+if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+{
+    result.string(vars.get("$sys.date"));
+}
\ No newline at end of file
diff --git a/entity/DistrictChangeValidityDates_entity/entityfields/valid_until/stateProcess.js b/entity/DistrictChangeValidityDates_entity/entityfields/valid_until/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..5606b7ab0da771abcebee31a6cdb5a8309917763
--- /dev/null
+++ b/entity/DistrictChangeValidityDates_entity/entityfields/valid_until/stateProcess.js
@@ -0,0 +1,11 @@
+import("system.result");
+import("system.neon");
+import("Util_lib");
+import("system.vars");
+
+var state = neon.COMPONENTSTATE_INVISIBLE;
+if(Utils.toBoolean(vars.get("$field.setValid_until")))
+{
+    state = neon.COMPONENTSTATE_EDITABLE;
+}
+result.string(state);
\ No newline at end of file
diff --git a/entity/DistrictChangeValidityDates_entity/entityfields/valid_until/valueProcess.js b/entity/DistrictChangeValidityDates_entity/entityfields/valid_until/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8a2a5c1838cd220835b89369c584cba861307eba
--- /dev/null
+++ b/entity/DistrictChangeValidityDates_entity/entityfields/valid_until/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.neon");
+import("system.result");
+
+if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+{
+    result.string(vars.get("$sys.date"));
+}
\ No newline at end of file
diff --git a/entity/DistrictChangeValidityDates_entity/recordcontainers/jdito/contentProcess.js b/entity/DistrictChangeValidityDates_entity/recordcontainers/jdito/contentProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8a8b23ca6e41d5f262b6e6e9d5d47ddb8f0d2c56
--- /dev/null
+++ b/entity/DistrictChangeValidityDates_entity/recordcontainers/jdito/contentProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.vars");
+
+if(vars.get("$local.idvalues"))
+{
+    result.object([vars.get("$local.idvalues")]);
+}
\ No newline at end of file
diff --git a/entity/DistrictChangeValidityDates_entity/recordcontainers/jdito/onInsert.js b/entity/DistrictChangeValidityDates_entity/recordcontainers/jdito/onInsert.js
new file mode 100644
index 0000000000000000000000000000000000000000..c7398e7e2450acce6e49bde75269262a0bc38750
--- /dev/null
+++ b/entity/DistrictChangeValidityDates_entity/recordcontainers/jdito/onInsert.js
@@ -0,0 +1,55 @@
+import("system.entities");
+import("Util_lib");
+import("Sql_lib");
+import("system.vars");
+
+var districtContactIds = vars.get("$param.DistrictContactIds_param");
+
+if(districtContactIds)
+{
+    districtContactIds = JSON.parse(districtContactIds);
+    var validFrom = vars.get("$field.VALID_FROM");
+    var validUntil = vars.get("$field.VALID_UNTIL");
+    var setValidFrom = Utils.toBoolean(vars.get("$field.setValid_from"));
+    var setValidUntil = Utils.toBoolean(vars.get("$field.setValid_until"));
+    
+    //it is possible to 
+    //- change one or both of the date values to another date
+    //- and "clear" one or both of them by clearing said field
+    //--> to make it possible to enable the user to change one of the dates without setting/clearing the other date we have to use the helper fields "setValidFrom" and "setValiduntil"
+    //to know when to update said value.
+    if(setValidFrom || setValiduntil)
+    {
+        var fieldValues = {};
+        if(setValidFrom)
+        {
+            if(validFrom)
+            {
+                fieldValues["VALID_FROM"] = validFrom;
+            }
+            else
+            {
+                fieldValues["VALID_FROM"] = "";
+            }
+        }
+        if(setValidUntil)
+        {
+            if(validUntil)
+            {
+                fieldValues["VALID_UNTIL"] = validUntil;
+            }
+            else
+            {
+                fieldValues["VALID_UNTIL"] = "";
+            }
+        }
+        var config = entities.createConfigForUpdatingRows();
+        config.entity("DistrictContact_entity");
+        config.fieldValues(fieldValues);
+
+        for each(let idToUpdate in districtContactIds) {
+            config.uid(idToUpdate);
+            entities.updateRow(config);
+        }
+    }
+}
\ No newline at end of file
diff --git a/entity/DistrictContact_entity/DistrictContact_entity.aod b/entity/DistrictContact_entity/DistrictContact_entity.aod
index 2f45b2002f4ce2881bf43adf481d2d825cb9d648..971dd492af837ca19fa42fa90a1e4a6ffd894cb5 100644
--- a/entity/DistrictContact_entity/DistrictContact_entity.aod
+++ b/entity/DistrictContact_entity/DistrictContact_entity.aod
@@ -66,6 +66,7 @@
       <contentType>DATE</contentType>
       <resolution>DAY</resolution>
       <groupable v="true" />
+      <valueProcess>%aditoprj%/entity/DistrictContact_entity/entityfields/valid_from/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>VALID_UNTIL</name>
@@ -181,27 +182,6 @@
       <name>RowId_param</name>
       <expose v="true" />
     </entityParameter>
-    <entityActionGroup>
-      <name>setStatus</name>
-      <children>
-        <entityActionField>
-          <name>setActive</name>
-          <title>Set active</title>
-          <onActionProcess>%aditoprj%/entity/DistrictContact_entity/entityfields/setstatus/children/setactive/onActionProcess.js</onActionProcess>
-          <selectionType>MULTI</selectionType>
-          <iconId>VAADIN:THUMBS_UP</iconId>
-          <tooltip>Set status to active</tooltip>
-        </entityActionField>
-        <entityActionField>
-          <name>setInactive</name>
-          <title>Set inactive</title>
-          <onActionProcess>%aditoprj%/entity/DistrictContact_entity/entityfields/setstatus/children/setinactive/onActionProcess.js</onActionProcess>
-          <selectionType>MULTI</selectionType>
-          <iconId>VAADIN:THUMBS_DOWN</iconId>
-          <tooltip>Set status to inactive</tooltip>
-        </entityActionField>
-      </children>
-    </entityActionGroup>
     <entityParameter>
       <name>isDashletView_param</name>
       <expose v="true" />
@@ -234,6 +214,33 @@
       <name>ContactId_param</name>
       <expose v="true" />
     </entityParameter>
+    <entityActionGroup>
+      <name>filterViewActionGroup</name>
+      <children>
+        <entityActionField>
+          <name>setActive</name>
+          <title>Set active</title>
+          <onActionProcess>%aditoprj%/entity/DistrictContact_entity/entityfields/filterviewactiongroup/children/setactive/onActionProcess.js</onActionProcess>
+          <selectionType>MULTI</selectionType>
+          <iconId>VAADIN:THUMBS_UP</iconId>
+          <tooltip>Set status to active</tooltip>
+        </entityActionField>
+        <entityActionField>
+          <name>setInactive</name>
+          <title>Set inactive</title>
+          <onActionProcess>%aditoprj%/entity/DistrictContact_entity/entityfields/filterviewactiongroup/children/setinactive/onActionProcess.js</onActionProcess>
+          <selectionType>MULTI</selectionType>
+          <iconId>VAADIN:THUMBS_DOWN</iconId>
+          <tooltip>Set status to inactive</tooltip>
+        </entityActionField>
+        <entityActionField>
+          <name>changeValidity</name>
+          <title>Change Validity Dates</title>
+          <onActionProcess>%aditoprj%/entity/DistrictContact_entity/entityfields/filterviewactiongroup/children/changevalidity/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:CALENDAR</iconId>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/DistrictContact_entity/entityfields/filterviewactiongroup/children/changevalidity/onActionProcess.js b/entity/DistrictContact_entity/entityfields/filterviewactiongroup/children/changevalidity/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2c9ee12df9c8241caeeed76b2301de4bc88b1635
--- /dev/null
+++ b/entity/DistrictContact_entity/entityfields/filterviewactiongroup/children/changevalidity/onActionProcess.js
@@ -0,0 +1,27 @@
+import("system.translate");
+import("system.neon");
+import("Context_lib");
+import("FilterViewAction_lib");
+import("system.vars");
+
+var districtContactIds;
+var currentContext = ContextUtils.getCurrentContextId();
+
+if (vars.get("$sys.selection").length > 0)
+{
+    districtContactIds = vars.get("$sys.selection");
+}
+else
+{
+    districtContactIds = FilterViewActionUtils.getUidsByEntityFilter(
+                                                            currentContext
+                                                            , vars.get("$sys.filter")
+                                                            , {"currentOrganisationId_param": vars.get("$param.currentOrganisationId_param") 
+                                                                , "DistrictId_param": vars.get("$param.DistrictId_param")});
+}
+
+var params = {
+    "DistrictContactIds_param": JSON.stringify(districtContactIds)
+}
+
+neon.openContext("DistrictChangeValidityDates", "DistrictChangeValidityDatesEdit_view", null, neon.OPERATINGSTATE_NEW, params, null);
\ No newline at end of file
diff --git a/entity/DistrictContact_entity/entityfields/setstatus/children/setactive/onActionProcess.js b/entity/DistrictContact_entity/entityfields/filterviewactiongroup/children/setactive/onActionProcess.js
similarity index 100%
rename from entity/DistrictContact_entity/entityfields/setstatus/children/setactive/onActionProcess.js
rename to entity/DistrictContact_entity/entityfields/filterviewactiongroup/children/setactive/onActionProcess.js
diff --git a/entity/DistrictContact_entity/entityfields/setstatus/children/setinactive/onActionProcess.js b/entity/DistrictContact_entity/entityfields/filterviewactiongroup/children/setinactive/onActionProcess.js
similarity index 100%
rename from entity/DistrictContact_entity/entityfields/setstatus/children/setinactive/onActionProcess.js
rename to entity/DistrictContact_entity/entityfields/filterviewactiongroup/children/setinactive/onActionProcess.js
diff --git a/entity/DistrictContact_entity/entityfields/valid_from/valueProcess.js b/entity/DistrictContact_entity/entityfields/valid_from/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8a2a5c1838cd220835b89369c584cba861307eba
--- /dev/null
+++ b/entity/DistrictContact_entity/entityfields/valid_from/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.neon");
+import("system.result");
+
+if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+{
+    result.string(vars.get("$sys.date"));
+}
\ No newline at end of file
diff --git a/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod b/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod
index d62d7f9dc75d01b7e9904a330e9e5c40c51f4291..223729e2f85289aa4b3ff94c5d619532ab3841c7 100644
--- a/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod
+++ b/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod
@@ -158,7 +158,6 @@
       <children>
         <entityParameter>
           <name>ExcludedContactIds_param</name>
-          <valueProcess>%aditoprj%/entity/DistrictResponsible_entity/entityfields/persons/children/excludedcontactids_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
     </entityConsumer>
@@ -205,6 +204,7 @@
       <contentType>DATE</contentType>
       <resolution>DAY</resolution>
       <mandatory v="true" />
+      <valueProcess>%aditoprj%/entity/DistrictResponsible_entity/entityfields/valid_from/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>VALID_UNTIL</name>
@@ -262,6 +262,7 @@
       <contentType>DATE</contentType>
       <resolution>DAY</resolution>
       <stateProcess>%aditoprj%/entity/DistrictResponsible_entity/entityfields/valid_untilselectionfield/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/DistrictResponsible_entity/entityfields/valid_untilselectionfield/valueProcess.js</valueProcess>
       <onValueChange>%aditoprj%/entity/DistrictResponsible_entity/entityfields/valid_untilselectionfield/onValueChange.js</onValueChange>
     </entityField>
   </entityFields>
diff --git a/entity/DistrictResponsible_entity/entityfields/persons/children/excludedcontactids_param/valueProcess.js b/entity/DistrictResponsible_entity/entityfields/persons/children/excludedcontactids_param/valueProcess.js
deleted file mode 100644
index 7cd92d81da369c1b7eae71a9e7bbec9f27666f7e..0000000000000000000000000000000000000000
--- a/entity/DistrictResponsible_entity/entityfields/persons/children/excludedcontactids_param/valueProcess.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import("system.result");
-import("system.db");
-import("Sql_lib");
-
-result.string(JSON.stringify(newSelect("EMPLOYEE_CONTACT_ID")
-    .from("DISTRICTRESPONSIBLE")
-    .where("DISTRICTRESPONSIBLE.DISTRICT_ID", "$param.DistrictId_param")
-    .arrayColumn())
-);
\ No newline at end of file
diff --git a/entity/DistrictResponsible_entity/entityfields/valid_from/valueProcess.js b/entity/DistrictResponsible_entity/entityfields/valid_from/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8a2a5c1838cd220835b89369c584cba861307eba
--- /dev/null
+++ b/entity/DistrictResponsible_entity/entityfields/valid_from/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.neon");
+import("system.result");
+
+if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+{
+    result.string(vars.get("$sys.date"));
+}
\ No newline at end of file
diff --git a/entity/DistrictResponsible_entity/entityfields/valid_untilselectionfield/valueProcess.js b/entity/DistrictResponsible_entity/entityfields/valid_untilselectionfield/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..845bce9819c31812c69dc35a2e3e0a132e0116b0
--- /dev/null
+++ b/entity/DistrictResponsible_entity/entityfields/valid_untilselectionfield/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.result");
+
+var thisValue = vars.get("$this.value");
+if(!vars.get("$this.value"))
+{
+    result.string(vars.get("$field.VALID_UNTIL"));
+}
\ No newline at end of file
diff --git a/entity/EmailFilterHandling_entity/EmailFilterHandling_entity.aod b/entity/EmailFilterHandling_entity/EmailFilterHandling_entity.aod
index edce71162116b3faaa55a8a53724aab0c7783bca..70b44897470ba23574cd9997952f2e187ba2fefa 100644
--- a/entity/EmailFilterHandling_entity/EmailFilterHandling_entity.aod
+++ b/entity/EmailFilterHandling_entity/EmailFilterHandling_entity.aod
@@ -35,7 +35,6 @@
       <name>WORKFLOWDEFINITION_KEY</name>
       <title>Workflow</title>
       <consumer>Workflows</consumer>
-      <stateProcess>%aditoprj%/entity/EmailFilterHandling_entity/entityfields/workflowdefinition_key/stateProcess.js</stateProcess>
     </entityField>
     <entityConsumer>
       <name>FilterTypeKeyword</name>
diff --git a/entity/EmailFilterHandling_entity/entityfields/workflowdefinition_key/stateProcess.js b/entity/EmailFilterHandling_entity/entityfields/workflowdefinition_key/stateProcess.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/entity/Email_entity/entityfields/documenttemplates/children/documenttemplatetypeclassification_param/valueProcess.js b/entity/Email_entity/entityfields/documenttemplates/children/documenttemplatetypeclassification_param/valueProcess.js
index 1ee6655bbafe8bd5e3b1bf5f575de8d793b947cc..70e703a7f3b161a4bcbdfaf0efac2df5a9f70b89 100644
--- a/entity/Email_entity/entityfields/documenttemplates/children/documenttemplatetypeclassification_param/valueProcess.js
+++ b/entity/Email_entity/entityfields/documenttemplates/children/documenttemplatetypeclassification_param/valueProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$field.documenttemplatetypeclassification"));
\ No newline at end of file
+result.string(vars.get("$param.DocumentTemplateTypeClassification_param"));
\ No newline at end of file
diff --git a/entity/Favorite_entity/recordcontainers/jditorecordcontainer/contentProcess.js b/entity/Favorite_entity/recordcontainers/jditorecordcontainer/contentProcess.js
index 629c63d289deb9d5eb582b4d08b432d4ef08fa57..d56cb3894f86ae4685f92c30e4c0b8fc960bab69 100644
--- a/entity/Favorite_entity/recordcontainers/jditorecordcontainer/contentProcess.js
+++ b/entity/Favorite_entity/recordcontainers/jditorecordcontainer/contentProcess.js
@@ -233,6 +233,7 @@ function buildFavoritesForDeletion(favos)
         var image = "";
         var rowid = favos[i]["rowid"];
         var title = "";
+        var description = "";
         var id = favos[i]["id"];
         var user = favos[i]["group"]["groupuser"];
     
@@ -244,6 +245,7 @@ function buildFavoritesForDeletion(favos)
             image,
             rowid,
             title,
+            description,
             id,
             user
         ]);
diff --git a/entity/LetterRecipient_entity/LetterRecipient_entity.aod b/entity/LetterRecipient_entity/LetterRecipient_entity.aod
index fa499a6fcbc90f8ac742026755d0f45a5d105e18..4ee79449c0c3f04cbff56308d31781746af87b9a 100644
--- a/entity/LetterRecipient_entity/LetterRecipient_entity.aod
+++ b/entity/LetterRecipient_entity/LetterRecipient_entity.aod
@@ -135,7 +135,6 @@
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>HASCOMMRESTRICTION.value</name>
-          <expression>%aditoprj%/entity/LetterRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js</expression>
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>TARGETCONTEXT.value</name>
diff --git a/entity/Member_entity/Member_entity.aod b/entity/Member_entity/Member_entity.aod
index 528283b768cd3d2b0360d44e9f96d5d4a981b391..d133bc87d362653635c1a52a41876c75fac7168f 100644
--- a/entity/Member_entity/Member_entity.aod
+++ b/entity/Member_entity/Member_entity.aod
@@ -207,6 +207,8 @@
     </entityProvider>
     <entityProvider>
       <name>WithDistrictResponsibles</name>
+      <targetContextField>TARGETCONTEXT</targetContextField>
+      <targetIdField>TARGET_ID</targetIdField>
     </entityProvider>
     <entityField>
       <name>UID</name>
@@ -314,12 +316,36 @@
       <groupable v="true" />
       <displayValueProcess>%aditoprj%/entity/Member_entity/entityfields/person_attr_loyalty/displayValueProcess.js</displayValueProcess>
     </entityField>
+    <entityField>
+      <name>RESPONSIBLE</name>
+      <title>Responsible</title>
+      <contentType>BOOLEAN</contentType>
+    </entityField>
+    <entityField>
+      <name>ORGANISATION_CONTACT_ID</name>
+      <title>Company</title>
+      <consumer>Organisations</consumer>
+      <linkedContextProcess>%aditoprj%/entity/Member_entity/entityfields/organisation_contact_id/linkedContextProcess.js</linkedContextProcess>
+    </entityField>
+    <entityField>
+      <name>TARGET_ID</name>
+    </entityField>
+    <entityConsumer>
+      <name>Organisations</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Organisation_entity</entityName>
+        <fieldName>Organisations</fieldName>
+      </dependency>
+    </entityConsumer>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
       <name>db</name>
       <fromClauseProcess>%aditoprj%/entity/Member_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
       <conditionProcess>%aditoprj%/entity/Member_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <onDBInsert>%aditoprj%/entity/Member_entity/recordcontainers/db/onDBInsert.js</onDBInsert>
+      <onDBUpdate>%aditoprj%/entity/Member_entity/recordcontainers/db/onDBUpdate.js</onDBUpdate>
       <alias>Data_alias</alias>
       <recordFieldMappings>
         <dbRecordFieldMapping>
@@ -417,6 +443,22 @@
           <name>PERSON_ATTR_LOYALTY.value</name>
           <expression>%aditoprj%/entity/Member_entity/recordcontainers/db/recordfieldmappings/person_attr_loyalty.value/expression.js</expression>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>RESPONSIBLE.value</name>
+          <recordfield>OBJECTMEMBER.RESPONSIBLE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ORGANISATION_CONTACT_ID.value</name>
+          <expression>%aditoprj%/entity/Member_entity/recordcontainers/db/recordfieldmappings/organisation_contact_id.value/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ORGANISATION_CONTACT_ID.displayValue</name>
+          <expression>%aditoprj%/entity/Member_entity/recordcontainers/db/recordfieldmappings/organisation_id.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TARGET_ID.value</name>
+          <recordfield>CONTACT.CONTACTID</recordfield>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
       <linkInformation>
         <linkInformation>
diff --git a/entity/Member_entity/entityfields/organisation_contact_id/linkedContextProcess.js b/entity/Member_entity/entityfields/organisation_contact_id/linkedContextProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..360b51c402926cb6650acf12fd138032549fe3bb
--- /dev/null
+++ b/entity/Member_entity/entityfields/organisation_contact_id/linkedContextProcess.js
@@ -0,0 +1,8 @@
+import("Organisation_lib");
+import("system.result");
+import("system.vars");
+
+if(!OrgUtils.isPrivateOrganisationId(vars.get("$field.ORGANISATION_CONTACT_ID")))
+{
+    result.string("Organisation");
+}
\ No newline at end of file
diff --git a/entity/Member_entity/recordcontainers/db/onDBInsert.js b/entity/Member_entity/recordcontainers/db/onDBInsert.js
new file mode 100644
index 0000000000000000000000000000000000000000..eff68b3992d91c39d85639c10ce070e475cdad2b
--- /dev/null
+++ b/entity/Member_entity/recordcontainers/db/onDBInsert.js
@@ -0,0 +1,20 @@
+import("Sql_lib");
+import("Util_lib");
+import("system.vars");
+
+//salesprojects should only have a maximum of one responsible member, -> update if needed
+var responsible = vars.get("$field.RESPONSIBLE");
+if(Utils.toBoolean(responsible))
+{
+    var objectType = vars.get("$field.OBJECT_TYPE");
+    if(objectType == "Salesproject")
+    {
+        var objectId = vars.get("$field.OBJECT_ROWID");
+        var memberId = vars.get("$field.OBJECTMEMBERID");
+        newWhere("OBJECTMEMBER.OBJECTMEMBERID", memberId, SqlBuilder.NOT_EQUAL())
+            .and("OBJECTMEMBER.RESPONSIBLE", 1)
+            .and("OBJECTMEMBER.OBJECT_TYPE", "Salesproject")
+            .and("OBJECTMEMBER.OBJECT_ROWID", objectId)
+        .updateData(true, "OBJECTMEMBER", ["RESPONSIBLE"], null, [0]);
+    }
+}
\ No newline at end of file
diff --git a/entity/Member_entity/recordcontainers/db/onDBUpdate.js b/entity/Member_entity/recordcontainers/db/onDBUpdate.js
new file mode 100644
index 0000000000000000000000000000000000000000..eff68b3992d91c39d85639c10ce070e475cdad2b
--- /dev/null
+++ b/entity/Member_entity/recordcontainers/db/onDBUpdate.js
@@ -0,0 +1,20 @@
+import("Sql_lib");
+import("Util_lib");
+import("system.vars");
+
+//salesprojects should only have a maximum of one responsible member, -> update if needed
+var responsible = vars.get("$field.RESPONSIBLE");
+if(Utils.toBoolean(responsible))
+{
+    var objectType = vars.get("$field.OBJECT_TYPE");
+    if(objectType == "Salesproject")
+    {
+        var objectId = vars.get("$field.OBJECT_ROWID");
+        var memberId = vars.get("$field.OBJECTMEMBERID");
+        newWhere("OBJECTMEMBER.OBJECTMEMBERID", memberId, SqlBuilder.NOT_EQUAL())
+            .and("OBJECTMEMBER.RESPONSIBLE", 1)
+            .and("OBJECTMEMBER.OBJECT_TYPE", "Salesproject")
+            .and("OBJECTMEMBER.OBJECT_ROWID", objectId)
+        .updateData(true, "OBJECTMEMBER", ["RESPONSIBLE"], null, [0]);
+    }
+}
\ No newline at end of file
diff --git a/entity/Member_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js b/entity/Member_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js
index 418c211fe3d6f213831fc5ab04518e71c1fc8910..9a7e7b2e7814da415d3ec0d5f73ed00e85ccfc62 100644
--- a/entity/Member_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js
+++ b/entity/Member_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js
@@ -1,4 +1,4 @@
 import("system.result");
 import("Person_lib");
 
-result.string(PersUtils.getResolvingDisplaySubSql("CONTACT_ID"))
\ No newline at end of file
+result.string(PersUtils.getResolvingDisplaySubSql("CONTACT_ID", true))
\ No newline at end of file
diff --git a/entity/Member_entity/recordcontainers/db/recordfieldmappings/organisation_contact_id.value/expression.js b/entity/Member_entity/recordcontainers/db/recordfieldmappings/organisation_contact_id.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..0e62e1b81eeae4f98f847c4ba99aec94b41747ab
--- /dev/null
+++ b/entity/Member_entity/recordcontainers/db/recordfieldmappings/organisation_contact_id.value/expression.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("select CONTACT.CONTACTID from CONTACT where CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID and CONTACT.PERSON_ID is null")
\ No newline at end of file
diff --git a/entity/Member_entity/recordcontainers/db/recordfieldmappings/organisation_id.displayvalue/expression.js b/entity/Member_entity/recordcontainers/db/recordfieldmappings/organisation_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..e372096370500c54d41c308657e1e0d72f6d1937
--- /dev/null
+++ b/entity/Member_entity/recordcontainers/db/recordfieldmappings/organisation_id.displayvalue/expression.js
@@ -0,0 +1,4 @@
+import("Organisation_lib");
+import("system.result");
+
+result.string("ORGANISATION.NAME")
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/approveoffer/stateProcess.js b/entity/Offer_entity/entityfields/approveoffer/stateProcess.js
index d44aa31f28dd690404411cad54970e6be7b82690..0f54fef44369787b1f5e168310932b24b4e531a4 100644
--- a/entity/Offer_entity/entityfields/approveoffer/stateProcess.js
+++ b/entity/Offer_entity/entityfields/approveoffer/stateProcess.js
@@ -5,16 +5,24 @@ import("system.result");
 import("Context_lib");
 import("system.vars");
 
-var offerId = vars.get("$field.OFFERID");
-var taskId = WorkflowUtils.getTaskId(offerId, ContextUtils.getCurrentContextId());
-var roleIf = tools.currentUserHasAnyRole(["PROJECT_Inspector1", "PROJECT_Inspector2"]);
+var state = neon.COMPONENTSTATE_INVISIBLE;
+if(WorkflowUtils.engineIsEnabled())
+{
+    var offerId = vars.get("$field.OFFERID");
+    var taskId = WorkflowUtils.getTaskId(offerId, ContextUtils.getCurrentContextId());
+    var roleIf = tools.currentUserHasAnyRole(["PROJECT_Inspector1", "PROJECT_Inspector2"]);
 
-if (vars.get("$field.APPROVAL") == 2){
-    roleIf = tools.currentUserHasRole("PROJECT_Inspector2");
-}
+    if (vars.get("$field.APPROVAL") == 2){
+        roleIf = tools.currentUserHasRole("PROJECT_Inspector2");
+    }
 
-if (taskId != "" && roleIf) {
-    result.string(neon.COMPONENTSTATE_EDITABLE);
-} else {
-    result.string(neon.COMPONENTSTATE_INVISIBLE);
+    if (taskId != "" && roleIf)
+    {
+        state = neon.COMPONENTSTATE_EDITABLE;
+    }
+    else
+    {
+        state = neon.COMPONENTSTATE_INVISIBLE;
+    }
 }
+result.string(state);
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/checkoffer/stateProcess.js b/entity/Offer_entity/entityfields/checkoffer/stateProcess.js
index 3c0c76db0955ffed4c5365720365158dbac3b25c..c2fff5a52d71fb694f39ba0f86ee8b6f4d0b4e1c 100644
--- a/entity/Offer_entity/entityfields/checkoffer/stateProcess.js
+++ b/entity/Offer_entity/entityfields/checkoffer/stateProcess.js
@@ -6,24 +6,28 @@ import("system.neon");
 import("system.result");
 import("system.vars");
 
-var offerId = vars.get("$field.OFFERID");
-var offerStatus = vars.get("$field.STATUS");
-var taskId = WorkflowUtils.getTaskId(offerId, ContextUtils.getCurrentContextId());
-var itemcount = newSelect("count(*)")
-                    .from("OFFERITEM")
-                    .whereIfSet("OFFERITEM.OFFER_ID", "$field.OFFERID")
-                    .cell(true, "0");
-
-if (taskId != "") 
-{
-    result.string(neon.COMPONENTSTATE_INVISIBLE);
-} 
-else if (offerStatus == $KeywordRegistry.offerStatus$sent() || offerStatus == $KeywordRegistry.offerStatus$approved() || itemcount == "0")
-{
-    result.string(neon.COMPONENTSTATE_DISABLED);
-}
-else
+var state = neon.COMPONENTSTATE_INVISIBLE;
+if(WorkflowUtils.engineIsEnabled())
 {
-    result.string(neon.COMPONENTSTATE_EDITABLE);
-}
+    var offerId = vars.get("$field.OFFERID");
+    var offerStatus = vars.get("$field.STATUS");
+    var taskId = WorkflowUtils.getTaskId(offerId, ContextUtils.getCurrentContextId());
+    var itemcount = newSelect("count(*)")
+                        .from("OFFERITEM")
+                        .whereIfSet("OFFERITEM.OFFER_ID", "$field.OFFERID")
+                        .cell(true, "0");
 
+    if (taskId != "") 
+    {
+        state = neon.COMPONENTSTATE_INVISIBLE;
+    } 
+    else if (offerStatus == $KeywordRegistry.offerStatus$sent() || offerStatus == $KeywordRegistry.offerStatus$approved() || itemcount == "0")
+    {
+        state = neon.COMPONENTSTATE_DISABLED;
+    }
+    else
+    {
+        state = neon.COMPONENTSTATE_EDITABLE;
+    }
+}
+result.string(state);
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/transferdeliverynote/onActionProcess.js b/entity/Order_entity/entityfields/transferdeliverynote/onActionProcess.js
index 0c7ef774bc2702191d0c03b0e691cde1daa2c437..f61918ffc215724c1fe727ed4d97783f8f61adac 100644
--- a/entity/Order_entity/entityfields/transferdeliverynote/onActionProcess.js
+++ b/entity/Order_entity/entityfields/transferdeliverynote/onActionProcess.js
@@ -23,7 +23,6 @@ var fieldValues = {
     dunningLevel: vars.getString("$field.DUNNINGLEVEL"),
     orderType: $KeywordRegistry.orderType$deliverynote(),
     cancellation: vars.getString("$field.CANCELLATION"),
-    orderStatus:vars.getString("$field.ORDERSTATUS"),
     discount:vars.getString("$field.DISCOUNT")
 };
 
diff --git a/entity/Order_entity/entityfields/transferinvoice/onActionProcess.js b/entity/Order_entity/entityfields/transferinvoice/onActionProcess.js
index 205006717f92f7ad7edc039cb3efa634bcf0932a..b6e2432b8f61a73d8cdc2c4a9d8cedb3d6e1f032 100644
--- a/entity/Order_entity/entityfields/transferinvoice/onActionProcess.js
+++ b/entity/Order_entity/entityfields/transferinvoice/onActionProcess.js
@@ -23,7 +23,6 @@ var fieldValues = {
     dunningLevel: vars.getString("$field.DUNNINGLEVEL"),
     orderType: $KeywordRegistry.orderType$invoice(),
     cancellation: vars.getString("$field.CANCELLATION"),
-    orderStatus:vars.getString("$field.ORDERSTATUS"),
     discount:vars.getString("$field.DISCOUNT")
 };
 
diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod
index 645167af39422a122c9a3174a332593168dbf077..0dd2601540a2b5f0e411f540ae187f57f8bae247 100644
--- a/entity/Organisation_entity/Organisation_entity.aod
+++ b/entity/Organisation_entity/Organisation_entity.aod
@@ -1407,6 +1407,10 @@
         </entityParameter>
       </children>
     </entityConsumer>
+    <entityParameter>
+      <name>IgnoreOrderBy_param</name>
+      <expose v="true" />
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -1761,6 +1765,15 @@
           <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/classification_filter/filterConditionProcess.js</filterConditionProcess>
           <filtertype>BASIC</filtertype>
         </filterExtension>
+        <filterExtension>
+          <name>VisitRecommendation_filter</name>
+          <title>Open Visitrecommendation</title>
+          <contentType>BOOLEAN</contentType>
+          <filterValuesProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/visitrecommendation_filter/filterValuesProcess.js</filterValuesProcess>
+          <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/visitrecommendation_filter/filterConditionProcess.js</filterConditionProcess>
+          <documentation>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/visitrecommendation_filter/documentation.adoc</documentation>
+          <filtertype>BASIC</filtertype>
+        </filterExtension>
       </filterExtensions>
     </dbRecordContainer>
     <indexRecordContainer>
diff --git a/entity/Organisation_entity/afterUiInit.js b/entity/Organisation_entity/afterUiInit.js
index 02fda64bc9192b6709fae947090a87c36dc6c139..6201797960450582b2635822688f0194e4f598e4 100644
--- a/entity/Organisation_entity/afterUiInit.js
+++ b/entity/Organisation_entity/afterUiInit.js
@@ -3,8 +3,7 @@ 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/entityfields/commrestrictions_active/valueProcess.js b/entity/Organisation_entity/entityfields/commrestrictions_active/valueProcess.js
index cec39d51e514c2159c988d626eeae0fecf149f88..16e7f5639825b8557556d1fd03efb311fd82d569 100644
--- a/entity/Organisation_entity/entityfields/commrestrictions_active/valueProcess.js
+++ b/entity/Organisation_entity/entityfields/commrestrictions_active/valueProcess.js
@@ -12,7 +12,8 @@ if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET)
     var commRestrictionString = ContactUtils.getCommunicationRejectionSummary(vars.get("$field.CONTACTID"));
     
     //has to be checked for exists because otherwise there will be a exception on the quickEntry_entity
-    var firstAddress = vars.exists("$field.Addresses.insertedRows") && vars.get("$field.Addresses.insertedRows") ? vars.get("$field.Addresses.insertedRows")[0] : null;
+    var firstAddress = vars.exists("$field.Addresses.insertedRows") && vars.get("$field.Addresses.insertedRows") 
+                            ? vars.get("$field.Addresses.insertedRows")[0] : null;
 
     var dataObject = DuplicateScannerUtils.getDataForDuplicateCheck(EntityUtils.getCurrentEntitytId(), {
         CONTACTID: vars.get("$field.CONTACTID"),
diff --git a/entity/Organisation_entity/entityfields/openclassificationoverview/onActionProcess.js b/entity/Organisation_entity/entityfields/openclassificationoverview/onActionProcess.js
index 20382b740f4628039b481ff7bd875e0a205cab33..ab5c5f8ccac2f400281da32a970302c480db07b5 100644
--- a/entity/Organisation_entity/entityfields/openclassificationoverview/onActionProcess.js
+++ b/entity/Organisation_entity/entityfields/openclassificationoverview/onActionProcess.js
@@ -2,6 +2,6 @@ import("system.neon");
 import("ClassificationUpdate_lib");
 import("system.vars");
 
-var classificationData = ClassificationUtils.executeUpdating(false, vars.get("$field.CONTACTID"), "Organisation");
+var classificationData = ClassificationUtils.executeUpdating(vars.get("$field.CONTACTID"), "Organisation");
 
 neon.openContext("Classification", "ClassificationTree_view", null, neon.OPERATINGSTATE_SEARCH, {"ClassificationContent_param": classificationData}, null);
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/openeditdefaultsview/onActionProcess.js b/entity/Organisation_entity/entityfields/openeditdefaultsview/onActionProcess.js
index 04a1fb47e6aead4d8bb263a355f2cd8ee372d193..9e73af5ae77c715d5914cf5e7d3fd00bcfbc9f94 100644
--- a/entity/Organisation_entity/entityfields/openeditdefaultsview/onActionProcess.js
+++ b/entity/Organisation_entity/entityfields/openeditdefaultsview/onActionProcess.js
@@ -1,3 +1,4 @@
 import("system.vars");
 import("system.neon");
+
 neon.openContext("Organisation", "OrganisationEditDefaults_view", [vars.get("$sys.uid")], neon.OPERATINGSTATE_EDIT, null); 
diff --git a/entity/Organisation_entity/entityfields/standard_email_communication/onValueChange.js b/entity/Organisation_entity/entityfields/standard_email_communication/onValueChange.js
index b6ca79693c7baa2c3d294f57c25967f8df7db53e..8d5f2763028802873d5cff981c2c7139dc4c4983 100644
--- a/entity/Organisation_entity/entityfields/standard_email_communication/onValueChange.js
+++ b/entity/Organisation_entity/entityfields/standard_email_communication/onValueChange.js
@@ -2,4 +2,7 @@ import("system.vars");
 import("Entity_lib");
 
 // TODO: also there is currently no good way to do updates with fields not connected to the record container. Workaround: imagevariable and update in onDBUpdate Process #1030023
-FieldChanges.setChange("$field.STANDARD_EMAIL_COMMUNICATION", vars.get("$local.value"));
\ No newline at end of file
+if (vars.get("$field.STANDARD_EMAIL_COMMUNICATION") != vars.get("$local.value")) 
+{
+    FieldChanges.setChange("$field.STANDARD_EMAIL_COMMUNICATION", vars.get("$local.value"));
+}
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/standard_phone_communication/onValueChange.js b/entity/Organisation_entity/entityfields/standard_phone_communication/onValueChange.js
index d814a8e65ad4dff521e6a9c7bae9b28d8763838e..2c7f3ce6381c845cc0252c11c0a5c8f2b6517c44 100644
--- a/entity/Organisation_entity/entityfields/standard_phone_communication/onValueChange.js
+++ b/entity/Organisation_entity/entityfields/standard_phone_communication/onValueChange.js
@@ -2,4 +2,7 @@ import("system.vars");
 import("Entity_lib");
 
 // TODO: also there is currently no good way to do updates with fields not connected to the record container. Workaround: imagevariable and update in onDBUpdate Process #1030023
-FieldChanges.setChange("$field.STANDARD_PHONE_COMMUNICATION", vars.get("$local.value"));
\ No newline at end of file
+if (vars.get("$field.STANDARD_PHONE_COMMUNICATION") != vars.get("$local.value"))
+{
+    FieldChanges.setChange("$field.STANDARD_PHONE_COMMUNICATION", vars.get("$local.value"));
+}
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/visitrecommendation_filter/documentation.adoc b/entity/Organisation_entity/recordcontainers/db/filterextensions/visitrecommendation_filter/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..ed4bf286cdb38a871eb17c86b684ed0f983ef229
--- /dev/null
+++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/visitrecommendation_filter/documentation.adoc
@@ -0,0 +1,3 @@
+== VisitRecommendation_filter
+
+enables filtering for whether or not the organisation has open visitrecommendations (including the ones generated from the district).
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/visitrecommendation_filter/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/visitrecommendation_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..58e9e1b41a62d7f3d54c0f61f741903c57b253f0
--- /dev/null
+++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/visitrecommendation_filter/filterConditionProcess.js
@@ -0,0 +1,4 @@
+import("VisitPlanning_lib");
+import("system.result");
+
+result.string(VisitPlanningUtils.filterConditionProcess());
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/visitrecommendation_filter/filterValuesProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/visitrecommendation_filter/filterValuesProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4462144da5638267f7c76cce0c779305ae80c089
--- /dev/null
+++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/visitrecommendation_filter/filterValuesProcess.js
@@ -0,0 +1,4 @@
+import("system.translate");
+import("system.result");
+
+result.object([["true", translate.text("Yes")], ["false", translate.text("No")]]);
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/onDBDelete.js b/entity/Organisation_entity/recordcontainers/db/onDBDelete.js
index df7ebcfc65ce91ebe3df47be55e4f6d59813c916..cb4a6f482b82a7f0c2b321145999397dd7dfd9d2 100644
--- a/entity/Organisation_entity/recordcontainers/db/onDBDelete.js
+++ b/entity/Organisation_entity/recordcontainers/db/onDBDelete.js
@@ -12,7 +12,8 @@ DuplicateScannerUtils.deleteHasDuplicateEntries(EntityUtils.getCurrentEntitytId(
 new AttributeRelationQuery(contactId, null, ContextUtils.getCurrentContextId())
     .deleteAllAttributes();
 
-newWhere("COMMUNICATION.CONTACT_ID", contactId).deleteData();
+newWhere("COMMUNICATION.OBJECT_ROWID", contactId)
+.and("COMMUNICATION.OBJECT_TYPE", "Contact").deleteData();
 newWhere("ADDRESS.CONTACT_ID", contactId).deleteData();
 newWhere("COMMUNICATIONSETTINGS.CONTACT_ID", contactId).deleteData();
 newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", contactId).deleteData();
diff --git a/entity/Organisation_entity/recordcontainers/db/onDBUpdate.js b/entity/Organisation_entity/recordcontainers/db/onDBUpdate.js
index d5a9930e3524f4672e60fc045acf0981c2f8ed5c..5cedb4b976232bc0cee1c539adbf7c5b055c96cc 100644
--- a/entity/Organisation_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/Organisation_entity/recordcontainers/db/onDBUpdate.js
@@ -1,10 +1,10 @@
-import("Employee_lib");
-import("Sql_lib");
 import("system.vars");
-import("Organisation_lib");
-import("Communication_lib");
+import("Sql_lib");
 import("Entity_lib");
 import("Workflow_lib");
+import("Employee_lib");
+import("Organisation_lib");
+import("Communication_lib");
 import("KeywordRegistry_basic");
 import("DuplicateScanner_lib");
 
@@ -13,24 +13,27 @@ DuplicateScannerUtils.updateHasDuplicateEntry(EntityUtils.getCurrentEntitytId())
 // TODO: this is a workaround for missing possibility to react on changes of fields not connected to record Contqainer #1030023
 var rowdata =  vars.get("$local.rowdata");
 var changedRows = vars.get("$local.changed");
-var uid = rowdata["CONTACT.CONTACTID"];
+var contactId = rowdata["CONTACT.CONTACTID"];
 
-FieldChanges.assimilateChangeAndDispose("$field.STANDARD_EMAIL_COMMUNICATION", function(state, value){
-    CommUtil.setStandardMail(uid, value);
+FieldChanges.assimilateChangeAndDispose("$field.STANDARD_EMAIL_COMMUNICATION", function(pState, pValue){
+    CommUtil.setStandardMail(contactId, pValue);
 });
 
-FieldChanges.assimilateChangeAndDispose("$field.STANDARD_PHONE_COMMUNICATION", function(state, value){
-    CommUtil.setStandardPhone(uid, value);
+FieldChanges.assimilateChangeAndDispose("$field.STANDARD_PHONE_COMMUNICATION", function(pState, pValue){
+    CommUtil.setStandardPhone(contactId, pValue);
 });
 
 if (changedRows.indexOf("CONTACT.STATUS") > -1 
-    && rowdata["CONTACT.STATUS"] && rowdata["CONTACT.STATUS"] == $KeywordRegistry.contactStatus$inactive())
+    && rowdata["CONTACT.STATUS"] 
+    && rowdata["CONTACT.STATUS"] == $KeywordRegistry.contactStatus$inactive())
 {
     var orgId = rowdata["ORGANISATION.ORGANISATIONID"];
     
     newWhere("CONTACT.ORGANISATION_ID", orgId)
         .and("CONTACT.PERSON_ID is not null")
-        .updateFields({"STATUS" : $KeywordRegistry.contactStatus$inactive()}, "CONTACT");
+        .updateFields({
+            "STATUS" : $KeywordRegistry.contactStatus$inactive()
+            }, "CONTACT");
 }
 
 WorkflowSignalSender.updated();
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/orderClauseProcess.js b/entity/Organisation_entity/recordcontainers/db/orderClauseProcess.js
index 16ee318626b4c3b98953a0696ef9e2f083a6e492..d8a1355302d0f68fbc3a7a5e1fc963adf3ff7f8c 100644
--- a/entity/Organisation_entity/recordcontainers/db/orderClauseProcess.js
+++ b/entity/Organisation_entity/recordcontainers/db/orderClauseProcess.js
@@ -1,6 +1,10 @@
+import("system.vars");
 import("system.result");
 import("system.db");
 
-result.object({
-    "ORGANISATION.NAME": db.ASCENDING
-    });
\ No newline at end of file
+if(!vars.get("$param.IgnoreOrderBy_param"))
+{
+    result.object({
+        "ORGANISATION.NAME": db.ASCENDING
+        });
+}
\ No newline at end of file
diff --git a/entity/PermissionAction_entity/entityfields/action/dropDownProcess.js b/entity/PermissionAction_entity/entityfields/action/dropDownProcess.js
index c958e5020b2a616f9e298e015218843effc2f145..31bd6fd8f579cab40270e433a92839a1e2023c4b 100644
--- a/entity/PermissionAction_entity/entityfields/action/dropDownProcess.js
+++ b/entity/PermissionAction_entity/entityfields/action/dropDownProcess.js
@@ -22,14 +22,7 @@ switch (accesstype) {
     case "F":
         actions = [["view", "view"]];
         var entityStructure = project.getEntityStructure(vars.get("$param.EntityTitle_param"));
-        var selectedField = "";
-        
-        for (var field in entityStructure.fields) {
-            if (field == vars.get("$param.Field_param")) {
-                selectedField = entityStructure.fields[field];
-                break;
-            }
-        }
+        var selectedField = vars.get("$param.Field_param") ? entityStructure.fields[vars.get("$param.Field_param")] : "";
         
         // show 'update' if selected field is not an action
         if (selectedField.fieldType != "ACTION") {
diff --git a/entity/PermissionDetail_entity/PermissionDetail_entity.aod b/entity/PermissionDetail_entity/PermissionDetail_entity.aod
index 37e1d2cb8c9de829dd024f85d82c3f4177da9763..0b31a6b61a836879474464f3dffa297fba5d0e03 100644
--- a/entity/PermissionDetail_entity/PermissionDetail_entity.aod
+++ b/entity/PermissionDetail_entity/PermissionDetail_entity.aod
@@ -176,6 +176,7 @@
         </entityParameter>
         <entityParameter>
           <name>Field_param</name>
+          <valueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/permissionactions/children/field_param/valueProcess.js</valueProcess>
         </entityParameter>
         <entityParameter>
           <name>EntityTitle_param</name>
diff --git a/entity/PermissionDetail_entity/entityfields/permissionactions/children/field_param/valueProcess.js b/entity/PermissionDetail_entity/entityfields/permissionactions/children/field_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..52bd0deb2169ccfd1f5d531869b4e2fe4304d298
--- /dev/null
+++ b/entity/PermissionDetail_entity/entityfields/permissionactions/children/field_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.FIELD"));
\ No newline at end of file
diff --git a/entity/PermissionOverview_entity/recordcontainers/jdito/contentProcess.js b/entity/PermissionOverview_entity/recordcontainers/jdito/contentProcess.js
index 36adb5c827780dce7dae65303feb51769ea217a9..3046fae22e66262330c329219d0062d0497a6051 100644
--- a/entity/PermissionOverview_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/PermissionOverview_entity/recordcontainers/jdito/contentProcess.js
@@ -46,36 +46,18 @@ rolesOrEntities = rolesOrEntitiesSelect
 
 var entityPermSetId = "";
 for each (var element in rolesOrEntities)
-{ // entry contains either a role or an entity, depending on which param exists
-    var overviewElement;
-    if (roleName)
-    {
-        overviewElement = {
-            uid: util.getNewUUID(), 
-            entity: element,
-            role: roleName,
-            view: PermissionEnums.FORBIDDEN_ACTION_ICON(), 
-            create: PermissionEnums.FORBIDDEN_ACTION_ICON(), 
-            read: PermissionEnums.FORBIDDEN_ACTION_ICON(), 
-            update: PermissionEnums.FORBIDDEN_ACTION_ICON(), 
-            "delete": PermissionEnums.FORBIDDEN_ACTION_ICON(),
-            parent: null
-        };
-    }
-    else if (entityName)
-    {
-        overviewElement = {
-            uid: util.getNewUUID(), 
-            entity: entityName,
-            role: element,
-            view: PermissionEnums.FORBIDDEN_ACTION_ICON(), 
-            create: PermissionEnums.FORBIDDEN_ACTION_ICON(), 
-            read: PermissionEnums.FORBIDDEN_ACTION_ICON(), 
-            update: PermissionEnums.FORBIDDEN_ACTION_ICON(), 
-            "delete": PermissionEnums.FORBIDDEN_ACTION_ICON(),
-            parent: null
-        }; 
-    }
+{
+    var overviewElement = {
+        uid: util.getNewUUID(), 
+        entity: entityName ? entityName : element,
+        role: roleName ? roleName : element,
+        view: PermissionEnums.FORBIDDEN_ACTION_ICON(), 
+        create: PermissionEnums.FORBIDDEN_ACTION_ICON(), 
+        read: PermissionEnums.FORBIDDEN_ACTION_ICON(), 
+        update: PermissionEnums.FORBIDDEN_ACTION_ICON(), 
+        "delete": PermissionEnums.FORBIDDEN_ACTION_ICON(),
+        parent: null
+    };
 
     entityPermSetId = PermissionUtil.getSetRoot(overviewElement.role, overviewElement.entity);
     
@@ -117,10 +99,14 @@ if (roleName && roleName.startsWith("CUSTOM_"))
                 update: PermissionEnums.FORBIDDEN_ACTION_ICON(), 
                 "delete": PermissionEnums.FORBIDDEN_ACTION_ICON(),
                 parent: null
-            }; 
+            };
             
-            overviewElement = prepareOverviewElement(set.setid, overviewElement);
-            overview = mergeElementIntoOverviewByEntity(overview, overviewElement);
+            // don't add this element if the entity is not in the list of entities with usePermission set
+            if (entitiesUsePermFlagSet.indexOf(overviewElement.entity) != -1)
+            {
+                overviewElement = prepareOverviewElement(set.setid, overviewElement);
+                overview = mergeElementIntoOverviewByEntity(overview, overviewElement);
+            }
         }  
     }
     
diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod
index da6c3e6b02dc694a9f3f6765c7edbe3f031bcc0e..b700f6bd1eaee1041a0deb3aee895d25442b8f82 100644
--- a/entity/Person_entity/Person_entity.aod
+++ b/entity/Person_entity/Person_entity.aod
@@ -399,6 +399,7 @@
       <name>STANDARD_PHONE_COMMUNICATION</name>
       <title>Phone</title>
       <consumer>PhoneCommunications</consumer>
+      <displayValueProcess>%aditoprj%/entity/Person_entity/entityfields/standard_phone_communication/displayValueProcess.js</displayValueProcess>
       <onValueChange>%aditoprj%/entity/Person_entity/entityfields/standard_phone_communication/onValueChange.js</onValueChange>
     </entityField>
     <entityConsumer>
@@ -1804,6 +1805,15 @@
           <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/role_filter/filterConditionProcess.js</filterConditionProcess>
           <filtertype>BASIC</filtertype>
         </filterExtension>
+        <filterExtension>
+          <name>SalesprojectResponsible_filter</name>
+          <title>Salesproject: Responsible</title>
+          <contentType>TEXT</contentType>
+          <consumer>Salutations</consumer>
+          <filterValuesProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/salesprojectresponsible_filter/filterValuesProcess.js</filterValuesProcess>
+          <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/salesprojectresponsible_filter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtension>
       </filterExtensions>
     </dbRecordContainer>
     <indexRecordContainer>
diff --git a/entity/Person_entity/entityfields/commrestrictions_active/valueProcess.js b/entity/Person_entity/entityfields/commrestrictions_active/valueProcess.js
index bcd2f1fe3f1c91768106e49fdfb0a7e6019699cb..f1175c5b12c428fb576edb788089a1eac12f5d07 100644
--- a/entity/Person_entity/entityfields/commrestrictions_active/valueProcess.js
+++ b/entity/Person_entity/entityfields/commrestrictions_active/valueProcess.js
@@ -10,14 +10,18 @@ import("system.vars");
 
 if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET)
 {
+    var communications = null, email = null;
     var commRestrictionString = ContactUtils.getCommunicationRejectionSummary(vars.get("$field.CONTACTID"));
     
-    var communications = vars.get("$field.Communications.insertedRows");
-
-    var email = communications.filter(function(object)
+    //has to be checked for exists because otherwise there will be a exception while triggering action openEditDefaultsView
+    if (vars.exists("$field.Communications.insertedRows") && !Utils.isNullOrEmpty(vars.get("$field.Communications.insertedRows")))
     {
-        return object["MEDIUM_ID"] == $KeywordRegistry.communicationMedium$mail();
-    })[0];
+        communications = vars.get("$field.Communications.insertedRows");
+        email = communications.filter(function(object)
+        {
+            return object["MEDIUM_ID"] == $KeywordRegistry.communicationMedium$mail();
+        })[0];
+    }
 
     var dataObject = DuplicateScannerUtils.getDataForDuplicateCheck(EntityUtils.getCurrentEntitytId(), {
         PERSON_ID: vars.get("$field.PERSON_ID"),
diff --git a/entity/Person_entity/entityfields/openeditdefaultsview/onActionProcess.js b/entity/Person_entity/entityfields/openeditdefaultsview/onActionProcess.js
index f8e59e680f629617e444c405a8e6e42c2997c901..cc435ca0111d467edb0366262b8c29b82f504f7b 100644
--- a/entity/Person_entity/entityfields/openeditdefaultsview/onActionProcess.js
+++ b/entity/Person_entity/entityfields/openeditdefaultsview/onActionProcess.js
@@ -1,3 +1,4 @@
 import("system.vars");
 import("system.neon");
+
 neon.openContext("Person", "PersonEditDefaults_view", [vars.get("$field.CONTACTID")], neon.OPERATINGSTATE_EDIT, null);
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/standard_email_communication/onValueChange.js b/entity/Person_entity/entityfields/standard_email_communication/onValueChange.js
index b6ca79693c7baa2c3d294f57c25967f8df7db53e..a820cf6be3166a7481f306139cea897f3b9752b0 100644
--- a/entity/Person_entity/entityfields/standard_email_communication/onValueChange.js
+++ b/entity/Person_entity/entityfields/standard_email_communication/onValueChange.js
@@ -1,5 +1,9 @@
+import("system.logging");
 import("system.vars");
 import("Entity_lib");
 
 // TODO: also there is currently no good way to do updates with fields not connected to the record container. Workaround: imagevariable and update in onDBUpdate Process #1030023
-FieldChanges.setChange("$field.STANDARD_EMAIL_COMMUNICATION", vars.get("$local.value"));
\ No newline at end of file
+if (vars.get("$field.STANDARD_EMAIL_COMMUNICATION") != vars.get("$local.value"))
+{
+    FieldChanges.setChange("$field.STANDARD_EMAIL_COMMUNICATION", vars.get("$local.value"));
+}
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/standard_phone_communication/onValueChange.js b/entity/Person_entity/entityfields/standard_phone_communication/onValueChange.js
index d814a8e65ad4dff521e6a9c7bae9b28d8763838e..5ba71cce2110bd392449f73860814559c1df7017 100644
--- a/entity/Person_entity/entityfields/standard_phone_communication/onValueChange.js
+++ b/entity/Person_entity/entityfields/standard_phone_communication/onValueChange.js
@@ -1,5 +1,9 @@
+import("system.logging");
 import("system.vars");
 import("Entity_lib");
 
 // TODO: also there is currently no good way to do updates with fields not connected to the record container. Workaround: imagevariable and update in onDBUpdate Process #1030023
-FieldChanges.setChange("$field.STANDARD_PHONE_COMMUNICATION", vars.get("$local.value"));
\ No newline at end of file
+if (vars.get("$field.STANDARD_PHONE_COMMUNICATION") != vars.get("$local.value"))
+{    
+    FieldChanges.setChange("$field.STANDARD_PHONE_COMMUNICATION", vars.get("$local.value"));
+}
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/salesprojectresponsible_filter/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/salesprojectresponsible_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9982deb39670de2223e37b203c065537f2392556
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/filterextensions/salesprojectresponsible_filter/filterConditionProcess.js
@@ -0,0 +1,34 @@
+import("Sql_lib");
+import("system.result");
+import("system.vars");
+
+var rawValue = vars.get("$local.rawvalue");
+var operator = vars.get("$local.comparison");
+
+var responsibleSql = newSelect("OBJECTMEMBERID")
+                            .from("OBJECTMEMBER")
+                            .where("OBJECTMEMBER.CONTACT_ID = CONTACT.CONTACTID")
+                            .and("OBJECTMEMBER.OBJECT_TYPE", "Salesproject")
+                            .and("OBJECTMEMBER.RESPONSIBLE", 1);
+
+if(operator == "ISNOTNULL")
+{
+    responsibleSql = newSelect("OBJECTMEMBERID")
+                            .from("OBJECTMEMBER")
+                            .where("OBJECTMEMBER.CONTACT_ID != CONTACT.CONTACTID")
+                            .and("OBJECTMEMBER.OBJECT_TYPE", "Salesproject")
+                            .and("OBJECTMEMBER.RESPONSIBLE", 1);
+}
+else if(operator != "ISNULL")
+{
+    responsibleSql = responsibleSql.and("OBJECTMEMBER.OBJECT_ROWID", rawValue);
+}
+    
+var condType = SqlBuilder.EXISTS();
+
+if (operator != "EQUAL")
+{
+    condType = SqlBuilder.NOT_EXISTS();
+}
+
+result.string(newWhere(null, responsibleSql, condType));
diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/salesprojectresponsible_filter/filterValuesProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/salesprojectresponsible_filter/filterValuesProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1503f51f280df28f32b5914743bd43070fa3d6d3
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/filterextensions/salesprojectresponsible_filter/filterValuesProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("Sql_lib");
+
+var salesProjects = newSelect("SALESPROJECT.SALESPROJECTID, SALESPROJECT.PROJECTTITLE")
+                                .from("SALESPROJECT")
+                                .table();
+
+result.object(salesProjects);
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/onDBUpdate.js b/entity/Person_entity/recordcontainers/db/onDBUpdate.js
index 4e38dce71a3b241f9e38318e911ed28ceb82e51b..44134f32889d625804ea0faede118befd388a0d3 100644
--- a/entity/Person_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/Person_entity/recordcontainers/db/onDBUpdate.js
@@ -1,12 +1,14 @@
-import("Sql_lib");
-import("Workflow_lib");
-import("DataPrivacy_lib");
+import("system.logging");
+import("KeywordRegistry_basic");
 import("system.tools");
 import("system.neon");
 import("system.vars");
+import("Sql_lib");
 import("Person_lib");
-import("Communication_lib");
 import("Entity_lib");
+import("Workflow_lib");
+import("DataPrivacy_lib");
+import("Communication_lib");
 import("StandardObject_lib");
 import("DuplicateScanner_lib");
 
@@ -14,7 +16,12 @@ DuplicateScannerUtils.updateHasDuplicateEntry(EntityUtils.getCurrentEntitytId())
 
 var localChanged = vars.get("$local.changed");
 var orgChanged = false;
-for (var i = 0; i < localChanged.length; i++) {
+var commId = null;
+var rowdata =  vars.get("$local.rowdata");
+var contactId = rowdata["CONTACT.CONTACTID"];
+
+for (var i = 0; i < localChanged.length; i++) 
+{
     if(localChanged[i] == "CONTACT.ORGANISATION_ID")
     {
         orgChanged = true;
@@ -25,24 +32,25 @@ for (var i = 0; i < localChanged.length; i++) {
 if(orgChanged)
 {
     var standardAddressId = new StandardObject("Address", null, "Person", vars.get("$field.PERSONID"))
-            .onPersonValueChange(vars.get("$field.ORGANISATION_ID"));
+                                    .onPersonValueChange(vars.get("$field.ORGANISATION_ID"));
 
-    newWhere("CONTACT.CONTACTID", vars.get("$field.CONTACTID")).updateData(true, "CONTACT", ["ADDRESS_ID"], null, [standardAddressId])
+    newWhere("CONTACT.CONTACTID", vars.get("$field.CONTACTID"))
+        .updateData(true, "CONTACT", ["ADDRESS_ID"], null, [standardAddressId])
 }
 
-var rowdata =  vars.get("$local.rowdata");
+
 // TODO: this is a workaround for missing possibility to react on changes of fields not connected to record Contqainer #1030023
-var uid = rowdata["CONTACT.CONTACTID"];
-FieldChanges.assimilateChangeAndDispose("$field.STANDARD_EMAIL_COMMUNICATION", function(state, value){
-    CommUtil.setStandardMail(uid, value);
-});
 
-FieldChanges.assimilateChangeAndDispose("$field.STANDARD_PHONE_COMMUNICATION", function(state, value){
-    CommUtil.setStandardPhone(uid, value);
+FieldChanges.assimilateChangeAndDispose("$field.STANDARD_EMAIL_COMMUNICATION", function(pState, pValue){
+    CommUtil.setStandardMail(contactId, pValue);
+});
+                
+FieldChanges.assimilateChangeAndDispose("$field.STANDARD_PHONE_COMMUNICATION", function(pState, pValue){
+    CommUtil.setStandardPhone(contactId, pValue);
 });
 
-new StandardObject("Address", rowdata["CONTACT.ADDRESS_ID"], "Person", uid)
-    .onPersonUpdate(rowdata["CONTACT.ORGANISATION_ID"]);
+new StandardObject("Address", rowdata["CONTACT.ADDRESS_ID"], "Person", contactId)
+                    .onPersonUpdate(rowdata["CONTACT.ORGANISATION_ID"]);
 
 var updates = [];
     
@@ -54,7 +62,7 @@ localChanged.forEach(function(fieldName)
         case "PERSON.FIRSTNAME":
             nameProp = tools.FIRSTNAME;
         case "PERSON.LASTNAME":
-            var user = tools.getUserByAttribute(tools.CONTACTID, [uid], tools.PROFILE_FULL);
+            var user = tools.getUserByAttribute(tools.CONTACTID, [contactId], tools.PROFILE_FULL);
             if (user)
             {
                 user[tools.PARAMS][nameProp] = rowdata[fieldName];
@@ -64,6 +72,6 @@ localChanged.forEach(function(fieldName)
     }
 })
 
-DataPrivacyUtils.notifyNeedDataPrivacyUpdate(uid);
+DataPrivacyUtils.notifyNeedDataPrivacyUpdate(contactId);
 
 WorkflowSignalSender.updated();
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/index/affectedIds.js b/entity/Person_entity/recordcontainers/index/affectedIds.js
index 2c6b1a2e4ac6fd91a132906b2b3ba5a7a69ad80b..24d86887247c81d2a48a5b189c80b61384483c19 100644
--- a/entity/Person_entity/recordcontainers/index/affectedIds.js
+++ b/entity/Person_entity/recordcontainers/index/affectedIds.js
@@ -61,7 +61,7 @@ switch (tableName)
             return newSelect("COMMUNICATION.OBJECT_ROWID")
                     .from("COMMUNICATION")
                     .where("COMMUNICATION.COMMUNICATIONID", id)
-                    .where("COMMUNICATION.OBJECT_TYPE", "Contact")
+                    .and("COMMUNICATION.OBJECT_TYPE", "Contact")
                     .arrayColumn();
         });
         break;
diff --git a/entity/QuickEntry_entity/QuickEntry_entity.aod b/entity/QuickEntry_entity/QuickEntry_entity.aod
index e8a48e789d3483a95a073ea93994a3ef497e1e23..945ccca62dcf278787dc9e7650e445926f89d74e 100644
--- a/entity/QuickEntry_entity/QuickEntry_entity.aod
+++ b/entity/QuickEntry_entity/QuickEntry_entity.aod
@@ -179,6 +179,19 @@
       <state>INVISIBLE</state>
       <stateProcess>%aditoprj%/entity/QuickEntry_entity/entityfields/businesscardlanguage/stateProcess.js</stateProcess>
     </entityField>
+    <entityField>
+      <name>businessCardErrMsg</name>
+      <contentType>NONE</contentType>
+      <htmlEditorFeatures>BASIC</htmlEditorFeatures>
+      <state>INVISIBLE</state>
+      <onValueChangeTypes>
+        <element>PROCESS</element>
+      </onValueChangeTypes>
+      <onValidation>%aditoprj%/entity/QuickEntry_entity/entityfields/businesscarderrmsg/onValidation.js</onValidation>
+    </entityField>
+    <entityParameter>
+      <name>isBusinessCardRecognitionErr_param</name>
+    </entityParameter>
     <entityConsumer>
       <name>Duplicates</name>
       <dependency>
diff --git a/entity/QuickEntry_entity/entityfields/businesscarderrmsg/onValidation.js b/entity/QuickEntry_entity/entityfields/businesscarderrmsg/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..ab4dec5bdbad2bc25ae690809990beaf889f3a2f
--- /dev/null
+++ b/entity/QuickEntry_entity/entityfields/businesscarderrmsg/onValidation.js
@@ -0,0 +1,11 @@
+import("system.result");
+import("system.vars");
+import("Util_lib");
+
+var errMsg = vars.get("$this.value");
+errMsg = JSON.parse(errMsg);
+
+if (!Utils.isNullOrEmptyString(errMsg))
+{
+    result.string(errMsg.msg);
+}
\ No newline at end of file
diff --git a/entity/QuickEntry_entity/entityfields/leadquickacquisition/onValueChange.js b/entity/QuickEntry_entity/entityfields/leadquickacquisition/onValueChange.js
index 3d17822155cd8234b60047bfc4c8c2ec651aee7b..0059d111f4480593c6a51d24d44cde276ca15e42 100644
--- a/entity/QuickEntry_entity/entityfields/leadquickacquisition/onValueChange.js
+++ b/entity/QuickEntry_entity/entityfields/leadquickacquisition/onValueChange.js
@@ -1,10 +1,14 @@
+import("system.logging");
+import("system.translate");
+import("system.question");
 import("system.neon");
 import("system.vars");
-import("Entity_lib");
 import("system.entities");
+import("Sql_lib");
+import("Util_lib");
+import("Entity_lib");
 import("KeywordRegistry_basic");
 import("LeadQuickAcquisition_lib");
-import("Sql_lib");
 
 
 if(vars.get("$local.value"))
@@ -18,7 +22,7 @@ if(vars.get("$local.value"))
                     .cell();
     response = LeadQuickAcquisition.callWebService(upload, lang);
     
-    if (response != null)
+    if (Utils.isNotNullOrEmptyString(response))
     {
         EntityConsumerUtils.rmInsertedConsumerRows("OrgAddresses");
         EntityConsumerUtils.rmInsertedConsumerRows("Communications");
@@ -87,6 +91,13 @@ if(vars.get("$local.value"))
             });
         }
     }
+    else
+    {
+        //question.showMessage("Test", question.ERROR, "Title")
+        neon.setFieldValue("$field.businessCardErrMsg", JSON.stringify({
+            msg: translate.text("An error occured while processing the business card.\nPlease contact an administrator.")
+        }));
+    }
 }
 
 /**
@@ -102,4 +113,4 @@ function _formatLinkaddress (pAddr)
         return ("https://" + pAddr).toString();
     }
     return pAddr.toString();
-}
\ No newline at end of file
+}
diff --git a/entity/Role_entity/entityfields/uid/valueProcess.js b/entity/Role_entity/entityfields/uid/valueProcess.js
index 4a9b27cc967acf29eaaca8df845716ef50c06a33..08a5eb0e28e3adb0656a9ccedeb3ec12cacbe42c 100644
--- a/entity/Role_entity/entityfields/uid/valueProcess.js
+++ b/entity/Role_entity/entityfields/uid/valueProcess.js
@@ -1,4 +1,11 @@
+import("system.neon");
 import("system.vars");
 import("system.result");
 
-result.string("CUSTOM_" + vars.get("$field.ROLENAME"));
\ No newline at end of file
+var prefix = "CUSTOM_";
+var uid = vars.get("$field.ROLENAME");
+
+if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW)
+    uid = prefix + uid;
+
+result.string(uid);
\ No newline at end of file
diff --git a/entity/SalesprojectConversionRate_entity/SalesprojectConversionRate_entity.aod b/entity/SalesprojectConversionRate_entity/SalesprojectConversionRate_entity.aod
index d0803f1b7a1ea699f13e9e2a66b74fca3f0dcd0b..59b54b5d5f7c214ade653c68a6163cc7dbf3fda1 100644
--- a/entity/SalesprojectConversionRate_entity/SalesprojectConversionRate_entity.aod
+++ b/entity/SalesprojectConversionRate_entity/SalesprojectConversionRate_entity.aod
@@ -4,12 +4,15 @@
   <title>Conversion Rate</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/entity/SalesprojectConversionRate_entity/documentation.adoc</documentation>
+  <contentTitleProcess>%aditoprj%/entity/SalesprojectConversionRate_entity/contentTitleProcess.js</contentTitleProcess>
   <initFilterProcess>%aditoprj%/entity/SalesprojectConversionRate_entity/initFilterProcess.js</initFilterProcess>
   <iconId>VAADIN:PIE_CHART</iconId>
   <recordContainer>jdito</recordContainer>
   <entityFields>
     <entityProvider>
       <name>#PROVIDER</name>
+      <targetContextField>targetContext</targetContextField>
+      <targetIdField>AB_KEYWORD_ENTRYID_KEYID</targetIdField>
     </entityProvider>
     <entityField>
       <name>UID</name>
@@ -57,8 +60,14 @@
     </entityField>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
+      <targetContextField>targetContext</targetContextField>
+      <targetIdField>AB_KEYWORD_ENTRYID_KEYID</targetIdField>
       <useAggregates v="true" />
     </entityProvider>
+    <entityField>
+      <name>targetContext</name>
+      <valueProcess>%aditoprj%/entity/SalesprojectConversionRate_entity/entityfields/targetcontext/valueProcess.js</valueProcess>
+    </entityField>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
@@ -79,6 +88,9 @@
         <jDitoRecordFieldMapping>
           <name>AB_KEYWORD_ENTRYID_TITLE.value</name>
         </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>conversionRate.value</name>
+        </jDitoRecordFieldMapping>
       </recordFieldMappings>
       <aggregateFieldMappings>
         <jDitoRecordFieldMapping>
diff --git a/entity/SalesprojectConversionRate_entity/contentTitleProcess.js b/entity/SalesprojectConversionRate_entity/contentTitleProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..6bcf8bff6af77485f00c6dc1dee45a2fb8345793
--- /dev/null
+++ b/entity/SalesprojectConversionRate_entity/contentTitleProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("system.vars");
+
+result.string(vars.get("$field.AB_KEYWORD_ENTRYID_TITLE"));
diff --git a/entity/SalesprojectConversionRate_entity/entityfields/targetcontext/valueProcess.js b/entity/SalesprojectConversionRate_entity/entityfields/targetcontext/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ba94758ecc5228995f1440018eef65d6deffdfc4
--- /dev/null
+++ b/entity/SalesprojectConversionRate_entity/entityfields/targetcontext/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("Salesproject");
diff --git a/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/contentProcess.js b/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/contentProcess.js
index d089bda4986c95444506a3c9a76a783579a71d9e..b2d38b21ee434ea153c608f03406fd114093af8d 100644
--- a/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/contentProcess.js
@@ -6,60 +6,73 @@ import("KeywordRegistry_basic");
 import("Salesproject_lib");
 import("system.vars");
 
-let filter = vars.get("$local.filters");
-let gruppingFields = SalesprojectConversionRate.groupMapping(false);
-var filterPhasenIDs = [];
+var idvalues = vars.get("$local.idvalues")
+if(idvalues && idvalues.length)
+{
+    result.object(
+        newSelect(["SALESPROJECT_MILESTONE.SALESPROJECT_MILESTONEID", "SALESPROJECT.SALESPROJECTID", "SALESPROJECT.PROJECTTITLE", "1"])
+        .from("SALESPROJECT_MILESTONE").join("SALESPROJECT", "SALESPROJECT.SALESPROJECTID = SALESPROJECT_MILESTONE.SALESPROJECT_ID")
+        .where("SALESPROJECT_MILESTONE.SALESPROJECT_MILESTONEID", idvalues, SqlBuilder.IN()).table()
+    );
+}
+else
+{
+    var filter = vars.get("$local.filters");
+    var gruppingFields = SalesprojectConversionRate.groupMapping(false);
+    var filterPhasenIDs = [];
 
-var phasenManager = new SalesprojectConversionRate();
+    var phasenManager = new SalesprojectConversionRate();
 
-var sql = new SqlBuilder()
-.from("AB_KEYWORD_ENTRY")
-.where("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", KeywordUtils.getCategoryIdByName($KeywordRegistry.salesprojectPhase()));
+    var sql = new SqlBuilder()
+    .from("AB_KEYWORD_ENTRY")
+    .where("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", KeywordUtils.getCategoryIdByName($KeywordRegistry.salesprojectPhase()))
+    .join("SALESPROJECT_MILESTONE", newWhere("SALESPROJECT_MILESTONE.MILESTONEVALUE = AB_KEYWORD_ENTRY.KEYID"));
 
-if (filter != null)
-{
-    if (JSON.stringify(filter).indexOf("AB_KEYWORD_ENTRYID_KEYID") > -1 && vars.exists("$local.grouped"))
+    if (filter != null)
     {
-        var phasenFilter = filter.childs.filter(function (child) {
-            return (child.childs.filter(function (child) {
-                return child.name == "AB_KEYWORD_ENTRYID_KEYID";
-            })).length > 0
-        });
+        if (JSON.stringify(filter).indexOf("AB_KEYWORD_ENTRYID_KEYID") > -1 && vars.exists("$local.grouped"))
+        {
+            var phasenFilter = filter.childs.filter(function (child) {
+                return (child.childs.filter(function (child) {
+                    return child.name == "AB_KEYWORD_ENTRYID_KEYID";
+                })).length > 0
+            });
         
-        phasenFilter.forEach(function (pFilter) {
-            filterPhasenIDs = filterPhasenIDs.concat(pFilter.childs.map(function (child) { return child.key;}));
-            pFilter.childs = [];
-        });
-    }
-    else 
-        filterPhasenIDs = null;
+            phasenFilter.forEach(function (pFilter) {
+                filterPhasenIDs = filterPhasenIDs.concat(pFilter.childs.map(function (child) { return child.key;}));
+                pFilter.childs = [];
+            });
+        }
+        else 
+            filterPhasenIDs = null;
     
-    let filterCondition = JditoFilterUtils.getSqlCondition(filter, "AB_KEYWORD_ENTRY", null, SalesprojectConversionRate.filterMapping(null));
-    sql.andIfSet(filterCondition);
-}
+        var filterCondition = JditoFilterUtils.getSqlCondition(filter, "AB_KEYWORD_ENTRY", null, SalesprojectConversionRate.filterMapping(null));
+        sql.andIfSet(filterCondition);
+    }
 
-if (vars.exists("$local.grouped"))
-{
-    let groupedfield = vars.get("$local.grouped");
-    sql.join("SALESPROJECT_MILESTONE", newWhere("SALESPROJECT_MILESTONE.MILESTONEVALUE = AB_KEYWORD_ENTRY.KEYID"))
+    if (vars.exists("$local.grouped"))
+    {
+        var groupedfield = vars.get("$local.grouped");
         // COUNT, ID, TITLE
-        .select(["SALESPROJECT_MILESTONE.SALESPROJECT_ID", "SALESPROJECT_MILESTONE.MILESTONEVALUE", gruppingFields[groupedfield][0]]);
+        sql.select(["SALESPROJECT_MILESTONE.SALESPROJECT_ID", "SALESPROJECT_MILESTONE.MILESTONEVALUE", gruppingFields[groupedfield][0]]);
         
-    if (filter != null)
-    {
-        filterCondition = JditoFilterUtils.getSqlCondition(filter, "SALESPROJECT_MILESTONE", null, SalesprojectConversionRate.filterMapping("SALESPROJECT_MILESTONE.DATE_START", false, "SALESPROJECT_MILESTONE"));
-        sql.andIfSet(filterCondition);
-    }
+        if (filter != null)
+        {
+            filterCondition = JditoFilterUtils.getSqlCondition(filter, "SALESPROJECT_MILESTONE", null, SalesprojectConversionRate.filterMapping("SALESPROJECT_MILESTONE.DATE_START", false, "SALESPROJECT_MILESTONE"));
+            sql.andIfSet(filterCondition);
+        }
     
-    sql.table().forEach(function (row) {
-        phasenManager.insertMilestone(row[0], row[1],groupedfield == "AB_KEYWORD_ENTRYID_KEYID" ? null :row[2] ); // TODO: Gruppingfield 
-    });
+        sql.table().forEach(function (row) {
+            phasenManager.insertMilestone(row[0], row[1],groupedfield == "AB_KEYWORD_ENTRYID_KEYID" ? null :row[2] ); // TODO: Gruppingfield 
+        });
 
-    result.object(phasenManager.getConversionRates(filterPhasenIDs));
-} 
-else 
-{
-    sql.select(["AB_KEYWORD_ENTRY.AB_KEYWORD_ENTRYID", "AB_KEYWORD_ENTRY.KEYID", "AB_KEYWORD_ENTRY.TITLE"])
-        .orderBy("AB_KEYWORD_ENTRY.SORTING");
-    result.object(sql.table());
+        result.object(phasenManager.getConversionRates(filterPhasenIDs));
+    } 
+    else 
+    {
+        sql.join("SALESPROJECT", "SALESPROJECT.SALESPROJECTID = SALESPROJECT_MILESTONE.SALESPROJECT_ID");
+        sql.select(["SALESPROJECT_MILESTONE.SALESPROJECT_MILESTONEID", "SALESPROJECT.SALESPROJECTID", "SALESPROJECT.PROJECTTITLE", "1"])
+            .orderBy("AB_KEYWORD_ENTRY.SORTING");
+        result.object(sql.table());
+    }
 }
diff --git a/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/rowCountProcess.js b/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/rowCountProcess.js
index b118d35605a04e93448f89038190d574a59a8b58..756a462c1a20b303b448ccdf25291ffb0b26d4e7 100644
--- a/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/rowCountProcess.js
+++ b/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/rowCountProcess.js
@@ -1,4 +1,3 @@
-import("Observation_lib");
 import("Keyword_lib");
 import("system.result");
 import("JditoFilter_lib");
@@ -7,60 +6,73 @@ import("KeywordRegistry_basic");
 import("Salesproject_lib");
 import("system.vars");
 
-let filter = vars.get("$local.filters");
-let gruppingFields = SalesprojectConversionRate.groupMapping(false);
-var filterPhasenIDs = [];
+var idvalues = vars.get("$local.idvalues")
+if(idvalues && idvalues.length)
+{
+    result.object(
+        newSelect(["SALESPROJECT_MILESTONE.SALESPROJECT_MILESTONEID", "SALESPROJECT.SALESPROJECTID", "SALESPROJECT.PROJECTTITLE", "1"])
+        .from("SALESPROJECT_MILESTONE").join("SALESPROJECT", "SALESPROJECT.SALESPROJECTID = SALESPROJECT_MILESTONE.SALESPROJECT_ID")
+        .where("SALESPROJECT_MILESTONE.SALESPROJECT_MILESTONEID", idvalues, SqlBuilder.IN()).table().length
+    );
+}
+else
+{
+    var filter = vars.get("$local.filters");
+    var gruppingFields = SalesprojectConversionRate.groupMapping(false);
+    var filterPhasenIDs = [];
 
-var phasenManager = new SalesprojectConversionRate();
+    var phasenManager = new SalesprojectConversionRate();
 
-var sql = new SqlBuilder()
-.from("AB_KEYWORD_ENTRY")
-.where("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", KeywordUtils.getCategoryIdByName($KeywordRegistry.salesprojectPhase()));
+    var sql = new SqlBuilder()
+    .from("AB_KEYWORD_ENTRY")
+    .where("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", KeywordUtils.getCategoryIdByName($KeywordRegistry.salesprojectPhase()))
+    .join("SALESPROJECT_MILESTONE", newWhere("SALESPROJECT_MILESTONE.MILESTONEVALUE = AB_KEYWORD_ENTRY.KEYID"));
 
-if (filter != null)
-{
-    if (JSON.stringify(filter).indexOf("AB_KEYWORD_ENTRYID_KEYID") > -1 && vars.exists("$local.grouped"))
+    if (filter != null)
     {
-        var phasenFilter = filter.childs.filter(function (child) {
-            return (child.childs.filter(function (child) {
-                return child.name == "AB_KEYWORD_ENTRYID_KEYID";
-            })).length > 0
-        });
+        if (JSON.stringify(filter).indexOf("AB_KEYWORD_ENTRYID_KEYID") > -1 && vars.exists("$local.grouped"))
+        {
+            var phasenFilter = filter.childs.filter(function (child) {
+                return (child.childs.filter(function (child) {
+                    return child.name == "AB_KEYWORD_ENTRYID_KEYID";
+                })).length > 0
+            });
         
-        phasenFilter.forEach(function (pFilter) {
-            filterPhasenIDs = filterPhasenIDs.concat(pFilter.childs.map(function (child) { return child.key;}));
-            pFilter.childs = [];
-        });
-    }
-    else 
-        filterPhasenIDs = null;
+            phasenFilter.forEach(function (pFilter) {
+                filterPhasenIDs = filterPhasenIDs.concat(pFilter.childs.map(function (child) { return child.key;}));
+                pFilter.childs = [];
+            });
+        }
+        else 
+            filterPhasenIDs = null;
     
-    let filterCondition = JditoFilterUtils.getSqlCondition(filter, "AB_KEYWORD_ENTRY", null, SalesprojectConversionRate.filterMapping(null));
-    sql.andIfSet(filterCondition);
-}
+        var filterCondition = JditoFilterUtils.getSqlCondition(filter, "AB_KEYWORD_ENTRY", null, SalesprojectConversionRate.filterMapping(null));
+        sql.andIfSet(filterCondition);
+    }
 
-if (vars.exists("$local.grouped"))
-{
-    let groupedfield = vars.get("$local.grouped");
-    sql.join("SALESPROJECT_MILESTONE", newWhere("SALESPROJECT_MILESTONE.MILESTONEVALUE = AB_KEYWORD_ENTRY.KEYID"))
+    if (vars.exists("$local.grouped"))
+    {
+        var groupedfield = vars.get("$local.grouped");
         // COUNT, ID, TITLE
-        .select(["SALESPROJECT_MILESTONE.SALESPROJECT_ID", "SALESPROJECT_MILESTONE.MILESTONEVALUE", gruppingFields[groupedfield][0]]);
+        sql.select(["SALESPROJECT_MILESTONE.SALESPROJECT_ID", "SALESPROJECT_MILESTONE.MILESTONEVALUE", gruppingFields[groupedfield][0]]);
         
-    if (filter != null)
-    {
-        filterCondition = JditoFilterUtils.getSqlCondition(filter, "SALESPROJECT_MILESTONE", null, SalesprojectConversionRate.filterMapping("SALESPROJECT_MILESTONE.DATE_START", false, "SALESPROJECT_MILESTONE"));
-        sql.andIfSet(filterCondition);
-    }
+        if (filter != null)
+        {
+            filterCondition = JditoFilterUtils.getSqlCondition(filter, "SALESPROJECT_MILESTONE", null, SalesprojectConversionRate.filterMapping("SALESPROJECT_MILESTONE.DATE_START", false, "SALESPROJECT_MILESTONE"));
+            sql.andIfSet(filterCondition);
+        }
     
-    sql.table().forEach(function (row) {
-        phasenManager.insertMilestone(row[0], row[1],groupedfield == "AB_KEYWORD_ENTRYID_KEYID" ? null :row[2] ); // TODO: Gruppingfield 
-    });
+        sql.table().forEach(function (row) {
+            phasenManager.insertMilestone(row[0], row[1],groupedfield == "AB_KEYWORD_ENTRYID_KEYID" ? null :row[2] ); // TODO: Gruppingfield 
+        });
 
-    result.object(phasenManager.getConversionRates(filterPhasenIDs).length);
-} 
-else 
-{
-    sql.select(["AB_KEYWORD_ENTRY.AB_KEYWORD_ENTRYID", "AB_KEYWORD_ENTRY.KEYID", "AB_KEYWORD_ENTRY.TITLE"])
-        .orderBy("AB_KEYWORD_ENTRY.SORTING");
-    result.object(sql.table().length);
-}
\ No newline at end of file
+        result.object(phasenManager.getConversionRates(filterPhasenIDs).length);
+    } 
+    else 
+    {
+        sql.join("SALESPROJECT", "SALESPROJECT.SALESPROJECTID = SALESPROJECT_MILESTONE.SALESPROJECT_ID");
+        sql.select(["SALESPROJECT_MILESTONE.SALESPROJECT_MILESTONEID", "SALESPROJECT.SALESPROJECTID", "SALESPROJECT.PROJECTTITLE", "1"])
+            .orderBy("AB_KEYWORD_ENTRY.SORTING");
+        result.object(sql.table().length);
+    }
+}
diff --git a/entity/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod
index 69eec0a06a6194198189a225637f0ec74c2bb2e3..cb8830eabf03ce44753b6cb3e6fe099e044ba2c6 100644
--- a/entity/Salesproject_entity/Salesproject_entity.aod
+++ b/entity/Salesproject_entity/Salesproject_entity.aod
@@ -43,7 +43,7 @@
       <name>PHASE</name>
       <title>Phase</title>
       <consumer>SalesprojectPhaseStepper</consumer>
-      <groupable v="false" />
+      <groupable v="true" />
       <mandatory v="true" />
       <state>EDITABLE</state>
       <displayValueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/phase/displayValueProcess.js</displayValueProcess>
@@ -874,6 +874,22 @@
       <name>volumeWeighted_aggregate</name>
       <parentField>volumeWeighted</parentField>
     </entityAggregateField>
+    <entityField>
+      <name>USER_NEW</name>
+      <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/user_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>USER_EDIT</name>
+      <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/user_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_EDIT</name>
+      <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/date_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityParameter>
+      <name>IgnoreOrderBy_param</name>
+      <expose v="true" />
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -1031,7 +1047,20 @@
         <aggregateFieldDbMapping>
           <name>volumeWeighted_aggregate.value</name>
           <expression>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/volumeweighted_aggregate.value/expression.js</expression>
+          <aggregateType>AVG</aggregateType>
         </aggregateFieldDbMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_EDIT.value</name>
+          <recordfield>SALESPROJECT.DATE_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_EDIT.value</name>
+          <recordfield>SALESPROJECT.USER_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_NEW.value</name>
+          <recordfield>SALESPROJECT.USER_NEW</recordfield>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
       <linkInformation>
         <linkInformation>
@@ -1089,16 +1118,6 @@
           <groupQueryProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationgroup_filter/groupQueryProcess.js</groupQueryProcess>
           <filtertype>BASIC</filtertype>
         </filterExtensionSet>
-        <filterExtension>
-          <name>Phase_filterExtention</name>
-          <title>Phase</title>
-          <contentType>TEXT</contentType>
-          <filterConditionProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/phase_filterextention/filterConditionProcess.js</filterConditionProcess>
-          <groupedRecordField>Phase</groupedRecordField>
-          <titleRecordField>SALESPROJECT.PHASE</titleRecordField>
-          <isGroupable v="true" />
-          <groupQueryProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/phase_filterextention/groupQueryProcess.js</groupQueryProcess>
-        </filterExtension>
         <filterExtension>
           <name>Favorite_filter</name>
           <title>Favoritegroup</title>
@@ -1130,6 +1149,14 @@
           <filterConditionProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/member_filter/filterConditionProcess.js</filterConditionProcess>
           <filtertype>BASIC</filtertype>
         </filterExtensionSet>
+        <filterExtension>
+          <name>Responsible_filter</name>
+          <title>Responsible</title>
+          <contentType>BOOLEAN</contentType>
+          <filterValuesProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/responsible_filter/filterValuesProcess.js</filterValuesProcess>
+          <filterConditionProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/responsible_filter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtension>
       </filterExtensions>
     </dbRecordContainer>
     <indexRecordContainer>
diff --git a/entity/Salesproject_entity/afterUiInit.js b/entity/Salesproject_entity/afterUiInit.js
index e30b0b283b229b405cc9ac5bcedcecbfd38128d9..d35bad03102ca48c3f73e651c43e1e1bb01f725a 100644
--- a/entity/Salesproject_entity/afterUiInit.js
+++ b/entity/Salesproject_entity/afterUiInit.js
@@ -6,4 +6,4 @@ 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/Salesproject_entity/entityfields/date_edit/valueProcess.js b/entity/Salesproject_entity/entityfields/date_edit/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2af46a8e46789056c6c341a8e4e087f8e1edc0c4
--- /dev/null
+++ b/entity/Salesproject_entity/entityfields/date_edit/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+{
+    result.string(vars.get("$sys.date"));
+}
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/openclassificationoverview/onActionProcess.js b/entity/Salesproject_entity/entityfields/openclassificationoverview/onActionProcess.js
index 409ae146ee56ad2bd7f74d1450e90f1dea097905..ab0320216058661142f965367f42a5f671726ea5 100644
--- a/entity/Salesproject_entity/entityfields/openclassificationoverview/onActionProcess.js
+++ b/entity/Salesproject_entity/entityfields/openclassificationoverview/onActionProcess.js
@@ -2,6 +2,6 @@ import("system.neon");
 import("ClassificationUpdate_lib");
 import("system.vars");
 
-var classificationData = ClassificationUtils.executeUpdating(false, vars.get("$field.SALESPROJECTID"), "Salesproject");
+var classificationData = ClassificationUtils.executeUpdating(vars.get("$field.SALESPROJECTID"), "Salesproject");
 
 neon.openContext("Classification", "ClassificationTree_view", null, neon.OPERATINGSTATE_SEARCH, {"ClassificationContent_param": classificationData}, null);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/user_edit/valueProcess.js b/entity/Salesproject_entity/entityfields/user_edit/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b874a7ac426b8e99383ac949299b9753e4951f2b
--- /dev/null
+++ b/entity/Salesproject_entity/entityfields/user_edit/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+{
+    result.string(vars.get("$sys.user"));
+}
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/user_new/valueProcess.js b/entity/Salesproject_entity/entityfields/user_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3f8db68b950a0505d6179cb67c14dde624c45070
--- /dev/null
+++ b/entity/Salesproject_entity/entityfields/user_new/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+{
+    result.string(vars.get("$sys.user"));
+}
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/phase_filterextention/filterConditionProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/phase_filterextention/filterConditionProcess.js
deleted file mode 100644
index 89417141617570df1b3f8086d49d8a17beabc0ee..0000000000000000000000000000000000000000
--- a/entity/Salesproject_entity/recordcontainers/db/filterextensions/phase_filterextention/filterConditionProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("Salesproject_lib");
-import("system.result");
-
-result.string(SalesprojectPhaseFilterUtils.makeFilterCondition());
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/phase_filterextention/groupQueryProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/phase_filterextention/groupQueryProcess.js
deleted file mode 100644
index feb925020ad0b58a6ca2fb7d379302cc00545cea..0000000000000000000000000000000000000000
--- a/entity/Salesproject_entity/recordcontainers/db/filterextensions/phase_filterextention/groupQueryProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("Salesproject_lib");
-import("system.result");
-
-result.string(SalesprojectPhaseFilterUtils.makeGroupQueryProcess());
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/responsible_filter/filterConditionProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/responsible_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..858d81adb104def5917cb9ef3c162706c9ad04da
--- /dev/null
+++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/responsible_filter/filterConditionProcess.js
@@ -0,0 +1,21 @@
+import("Sql_lib");
+import("system.result");
+import("system.vars");
+
+var rawValue = vars.get("$local.rawvalue");
+var operator = vars.get("$local.comparison");
+
+var responsibleSql =  newSelect("OBJECTMEMBER.CONTACT_ID")
+                                .from("OBJECTMEMBER")
+                                .where("OBJECTMEMBER.OBJECT_TYPE", "Salesproject")
+                                .and("OBJECTMEMBER.OBJECT_ROWID = SALESPROJECT.SALESPROJECTID")
+                                .and("OBJECTMEMBER.RESPONSIBLE", 1);
+
+var condType = SqlBuilder.EXISTS();
+
+if((operator == "EQUAL" && rawValue == "false") || operator == "ISNULL" || (operator == "NOT_EQUAL" && rawValue == "true"))
+{
+    condType = SqlBuilder.NOT_EXISTS();
+}
+
+result.string(newWhere(null, responsibleSql, condType));
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/responsible_filter/filterValuesProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/responsible_filter/filterValuesProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4462144da5638267f7c76cce0c779305ae80c089
--- /dev/null
+++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/responsible_filter/filterValuesProcess.js
@@ -0,0 +1,4 @@
+import("system.translate");
+import("system.result");
+
+result.object([["true", translate.text("Yes")], ["false", translate.text("No")]]);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/onDBInsert.js b/entity/Salesproject_entity/recordcontainers/db/onDBInsert.js
index a5817120a1907251101b2e439dd152b70f2cd066..df2bf1c18375c03aa745a1fb7b5044aca7d97296 100644
--- a/entity/Salesproject_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/Salesproject_entity/recordcontainers/db/onDBInsert.js
@@ -1,3 +1,8 @@
+import("system.tools");
+import("system.db");
+import("KeywordRegistry_basic");
+import("system.util");
+import("system.entities");
 import("Workflow_lib");
 import("Context_lib");
 import("Attribute_lib");
@@ -23,6 +28,20 @@ if (vars.get("$field.PROJECTTYPE"))
         .insertAttribute(vars.get("$field.PROJECTTYPE"), true);
 }
 
+var columns = ["OBJECTMEMBERID"
+                , "CONTACT_ID"
+                , "OBJECT_ROWID"
+                , "OBJECT_TYPE"
+                , "RESPONSIBLE"];
+
+var values = [util.getNewUUID()
+                , tools.getUserByAttribute(tools.TITLE, vars.get("$field.USER_NEW"), tools.PROFILE_FULL)[tools.PARAMS][tools.CONTACTID]
+                , vars.get("$field.SALESPROJECTID")
+                , ContextUtils.getCurrentContextId()
+                , 1];
+
+db.insertData("OBJECTMEMBER", columns, null, values);
+
 //start the execution in afterOperatingState, because here the dataset is not yet inserted
 vars.set("$context.workflowQueue", {});
 WorkflowSignalSender.inserted();
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js b/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js
index ad790b87680c57809b0a0eea2e71f54b7e9f0ed5..98e485c0fb60aafa9e3cf2e6abad127399eb2898 100644
--- a/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js
@@ -1,4 +1,8 @@
+import("ActivityTask_lib");
+import("system.tools");
 import("system.datetime");
+import("system.eMath");
+import("system.util");
 import("Workflow_lib");
 import("Context_lib");
 import("system.neon");
@@ -56,6 +60,39 @@ vars.get("$local.changed").forEach(function(fieldName) {
             // Postponed
             else if (state == $KeywordRegistry.salesprojectState$postponed())
             {
+                //create Task using the responsible
+                var contactId = newSelect("OBJECTMEMBER.CONTACT_ID")
+                                            .from("OBJECTMEMBER")
+                                            .where("OBJECTMEMBER.OBJECT_TYPE", ContextUtils.getCurrentContextId())
+                                            .and("OBJECTMEMBER.OBJECT_ROWID", vars.getString("$local.uid"))
+                                            .and("OBJECTMEMBER.RESPONSIBLE", "1")
+                                            .cell();
+                
+                if(!contactId)//if no one is responsible: use the contact that created this salesproject
+                {
+                    contactId = tools.getUserByAttribute(tools.TITLE, vars.get("$field.USER_NEW"), tools.PROFILE_FULL)[tools.PARAMS][tools.CONTACTID];
+                    
+                    if(!contactId || contactId == "")//user_new could be empty since this column got added later -> user_edit as fallback (always filled)
+                    {
+                        contactId = tools.getUserByAttribute(tools.TITLE, vars.get("$field.USER_EDIT"), tools.PROFILE_FULL)[tools.PARAMS][tools.CONTACTID];
+                    }
+                }
+                
+                var inSixMonths = new Date();
+                inSixMonths = JSON.stringify(inSixMonths.setMonth(inSixMonths.getMonth() +  6));
+
+                TaskUtils.createNewTaskSilent({"requestorContactId": contactId
+                                                , "editorContactId": contactId
+                                                , "startDate": vars.get("$sys.date")
+                                                , "marturityDate": inSixMonths
+                                                , "subject": translate.withArguments("${CHECK SALESPROJECT \"%0\"}", [vars.get("$field.PROJECTTITLE")])
+                                                , "priority": $KeywordRegistry.taskPriority$medium()
+                                                , "progress": $KeywordRegistry.taskProgress$0()
+                                                , "status": $KeywordRegistry.taskStatus$assigned()
+                                                , "protectionlevel": "0"
+                                                }, [["Salesproject", vars.getString("$local.uid")]]);
+
+     
                 // ask if forecast should be cleared. Else reset to old value.
                 var stateName = KeywordUtils.getViewValue($KeywordRegistry.salesprojectState(), state);
                 var clearForecast = question.askYesNo(translate.withArguments("Clear forecast and set state to '%0'?", [stateName]), translate.withArguments("Would you really like to clear the forecast and set the state to '%0'?", [stateName]) + "\n" + translate.text("This cannot be undone!"), false);
diff --git a/entity/Salesproject_entity/recordcontainers/db/orderClauseProcess.js b/entity/Salesproject_entity/recordcontainers/db/orderClauseProcess.js
index 319594ed7e2cd8b1860d7426852261155c9cf13b..21e879cda3f37384d7352a55d579b9d97b3851d1 100644
--- a/entity/Salesproject_entity/recordcontainers/db/orderClauseProcess.js
+++ b/entity/Salesproject_entity/recordcontainers/db/orderClauseProcess.js
@@ -1,6 +1,10 @@
+import("system.vars");
 import("system.result");
 import("system.db");
 
-result.object({
+if(!vars.get("$param.IgnoreOrderBy_param"))
+{
+    result.object({
     "SALESPROJECT.PROJECTTITLE": db.ASCENDING
-});
\ No newline at end of file
+        });
+}
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/entityfields/downloadletter/onActionProcess.js b/entity/SerialLetter_entity/entityfields/downloadletter/onActionProcess.js
index 11b5418889d70f613b3ffeea95ed7005f67bdc10..567c05b192792aaf4574954ee19486bfb5ce9145 100644
--- a/entity/SerialLetter_entity/entityfields/downloadletter/onActionProcess.js
+++ b/entity/SerialLetter_entity/entityfields/downloadletter/onActionProcess.js
@@ -1,19 +1,20 @@
-import("Binary_lib");
+import("system.vars");
 import("system.util");
-import("DocumentTemplate_lib");
 import("system.neon");
+import("Binary_lib");
+import("Employee_lib");
 import("Bulkmail_lib");
-import("system.vars");
+import("DocumentTemplate_lib");
 import("system.notification");
-import("Employee_lib");
 
 var letterId = vars.get("$field.SERIALLETTERID");
+
 if (vars.get("$field.generated"))
 {
-    var metadata = SingleBinaryUtils.getMetadata("SERIALLETTER", "SERIALLETTERFILE", letterId);
+    var metadata = SingleBinaryUtils.getMetadata("SERIALLETTER", "SERIALLETTERFILE", letterId, null, null, "SERIALLETTER_BUILDED");
     if (metadata)
     {
-        var document = SingleBinaryUtils.get("SERIALLETTER", "SERIALLETTERFILE", letterId);
+        var document = SingleBinaryUtils.get("SERIALLETTER", "SERIALLETTERFILE", letterId, null, "SERIALLETTER_BUILDED");
         neon.download(document, metadata.filename);
     }
 }
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/entityfields/generated/valueProcess.js b/entity/SerialLetter_entity/entityfields/generated/valueProcess.js
index 72d106321d52d6ce96a44bb81b48c8d0b1a08d6b..90cfd48bd3023645465d705e959ad1b2ad38930c 100644
--- a/entity/SerialLetter_entity/entityfields/generated/valueProcess.js
+++ b/entity/SerialLetter_entity/entityfields/generated/valueProcess.js
@@ -3,5 +3,5 @@ import("system.neon");
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET && SingleBinaryUtils.checkExistsOneTime("SERIALLETTER", "SERIALLETTERFILE", vars.get("$field.SERIALLETTERID"))
-    ? "true" : "");
\ No newline at end of file
+result.string(vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET && 
+                SingleBinaryUtils.checkExistsOneTime("SERIALLETTER", "SERIALLETTERFILE", vars.get("$field.SERIALLETTERID"), null, "SERIALLETTER_BUILDED") ? "true" : "");
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/recordcontainers/db/onDBInsert.js b/entity/SerialLetter_entity/recordcontainers/db/onDBInsert.js
index 408cbf0666bb3d07a28c4eaacb87d9872a6332f7..683f7df026e987761da1e9e65f961e27f0636324 100644
--- a/entity/SerialLetter_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/SerialLetter_entity/recordcontainers/db/onDBInsert.js
@@ -1,3 +1,4 @@
+import("system.logging");
 import("Workflow_lib");
 import("Binary_lib");
 import("Sql_lib");
@@ -15,7 +16,8 @@ var template = DocumentTemplate.fromUpload(bindata);
 
 if (template.content)
 {
-    SingleBinaryUtils.insert("SERIALLETTER", "SERIALLETTERFILE", letterId, template.content, template.filename, "");
+    logging.log("inside");
+    SingleBinaryUtils.insert("SERIALLETTER", "SERIALLETTERFILE", letterId, template.content, template.filename, "", "SERIALLETTER_BUILDED");
 }
 
 WorkflowSignalSender.inserted();
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/recordcontainers/db/onDBUpdate.js b/entity/SerialLetter_entity/recordcontainers/db/onDBUpdate.js
index 20c7fc0a0ddd70bb3075f0f5c90bd95d19e01233..8e2cd7814cde414b535183b90ac3e3245e2d838a 100644
--- a/entity/SerialLetter_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/SerialLetter_entity/recordcontainers/db/onDBUpdate.js
@@ -17,7 +17,7 @@ var template = DocumentTemplate.fromUpload(bindata);
 
 if (template.content)
 {
-    SingleBinaryUtils.set("SERIALLETTER", "DOCUMENT", letterId, template.content, template.filename, "");
+    SingleBinaryUtils.set("SERIALLETTER", "SERIALLETTERFILE", letterId, template.content, template.filename, "", undefined, "SERIALLETTER_BUILDED");
 }
 
 WorkflowSignalSender.updated();
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod
index eb8f3cd9ad4e6ec22ef76b8acad086106ddd74b3..aeb16ce13ea8ade3db6e1e00f5b0eb7995bf0a88 100644
--- a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod
+++ b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod
@@ -173,7 +173,11 @@
     <entityField>
       <name>APPOINTMENT_ID</name>
       <documentation>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/appointment_id/documentation.adoc</documentation>
+      <title>Appointment</title>
+      <consumer>Appointments</consumer>
       <linkedContext>Appointment</linkedContext>
+      <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/appointment_id/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/appointment_id/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityParameter>
       <name>VisitPlanEmployeeWeek_param</name>
@@ -362,17 +366,83 @@
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityActionField>
-      <name>NewActivity</name>
-      <documentation>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/newactivity/documentation.adoc</documentation>
-      <title>Create Visitreport</title>
-      <onActionProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/newactivity/onActionProcess.js</onActionProcess>
-      <isMenuAction v="true" />
-      <iconId>VAADIN:HOURGLASS_END</iconId>
-      <stateProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/newactivity/stateProcess.js</stateProcess>
-      <tooltip>Create Visitreport</tooltip>
-      <tooltipProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/newactivity/tooltipProcess.js</tooltipProcess>
-    </entityActionField>
+    <entityConsumer>
+      <name>Appointments</name>
+      <isOneToOneRelationship v="true" />
+      <dependency>
+        <name>dependency</name>
+        <entityName>Appointment_entity</entityName>
+        <fieldName>LinkedAppointments</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>LinkedObjectId_param</name>
+          <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/appointments/children/linkedobjectid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>Visitplanentry_param</name>
+          <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/appointments/children/visitplanentry_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityField>
+      <name>APPOINTMENT_BEGIN_TIME</name>
+      <title>Appointment Start</title>
+      <contentType>DATE</contentType>
+      <outputFormat>dd.MM.yyyy HH:mm</outputFormat>
+      <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/appointment_begin_time/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>APPOINTMENT_END_TIME</name>
+      <title>Appointment End</title>
+      <contentType>DATE</contentType>
+      <outputFormat>dd.MM.yyyy HH:mm</outputFormat>
+      <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/appointment_end_time/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>APPOINTMENT_STATUS</name>
+      <title>Appointment Status</title>
+      <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/appointment_status/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/appointment_status/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>APPOINTMENT_SUBJECT</name>
+      <title>Appointment Subject</title>
+      <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/appointment_subject/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>syncIcon</name>
+      <colorProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/syncicon/colorProcess.js</colorProcess>
+      <contentType>IMAGE</contentType>
+      <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/syncicon/valueProcess.js</valueProcess>
+    </entityField>
+    <entityActionGroup>
+      <name>entityActionGroup</name>
+      <iconId>VAADIN:CALENDAR</iconId>
+      <children>
+        <entityActionField>
+          <name>NewActivity</name>
+          <documentation>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/documentation.adoc</documentation>
+          <title>Create Visitreport</title>
+          <onActionProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/onActionProcess.js</onActionProcess>
+          <isMenuAction v="true" />
+          <iconId>VAADIN:HOURGLASS_END</iconId>
+          <stateProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/stateProcess.js</stateProcess>
+          <tooltip>Create Visitreport</tooltip>
+          <tooltipProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/tooltipProcess.js</tooltipProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>NewAppointment</name>
+          <documentation>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/documentation.adoc</documentation>
+          <title>New Appointment</title>
+          <onActionProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:CALENDAR</iconId>
+          <state>EDITABLE</state>
+          <tooltip>Create new Appointment</tooltip>
+          <tooltipProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/tooltipProcess.js</tooltipProcess>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
     <entityActionField>
       <name>OpenRoute</name>
       <documentation>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/openroute/documentation.adoc</documentation>
@@ -382,33 +452,45 @@
       <iconId>VAADIN:MAP_MARKER</iconId>
       <stateProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/openroute/stateProcess.js</stateProcess>
     </entityActionField>
-    <entityActionField>
-      <name>NewAppointment</name>
-      <documentation>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/newappointment/documentation.adoc</documentation>
-      <title>New Appointment</title>
-      <onActionProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/newappointment/onActionProcess.js</onActionProcess>
-      <isMenuAction v="true" />
-      <iconId>VAADIN:CALENDAR</iconId>
+    <entityActionGroup>
+      <name>sync</name>
+      <title>synchronize</title>
+      <iconId>VAADIN:REFRESH</iconId>
       <state>EDITABLE</state>
-      <stateProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/newappointment/stateProcess.js</stateProcess>
-      <tooltip>Create new Appointment</tooltip>
-      <tooltipProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/newappointment/tooltipProcess.js</tooltipProcess>
-    </entityActionField>
+      <stateProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/sync/stateProcess.js</stateProcess>
+      <children>
+        <entityActionField>
+          <name>syncPlanToAppointment</name>
+          <title>synchronize Plan to Appointment</title>
+          <onActionProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/sync/children/syncplantoappointment/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+          <selectionType>MULTI</selectionType>
+          <iconId>VAADIN:ARROW_CIRCLE_RIGHT</iconId>
+        </entityActionField>
+        <entityActionField>
+          <name>syncAppointmentToPlan</name>
+          <title>synchronize Appointment to Plan</title>
+          <onActionProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/sync/children/syncappointmenttoplan/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+          <selectionType>MULTI</selectionType>
+          <iconId>VAADIN:ARROW_CIRCLE_LEFT</iconId>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
     <entityActionGroup>
-      <name>entityActionGroup</name>
-      <iconId>VAADIN:CALENDAR</iconId>
+      <name>ActionGroupOpenDayRoute</name>
       <children>
         <entityActionField>
           <name>OpenDayRoute</name>
-          <documentation>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/opendayroute/documentation.adoc</documentation>
+          <documentation>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/actiongroupopendayroute/children/opendayroute/documentation.adoc</documentation>
           <title>Open Route of the day</title>
-          <onActionProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/opendayroute/onActionProcess.js</onActionProcess>
+          <onActionProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/actiongroupopendayroute/children/opendayroute/onActionProcess.js</onActionProcess>
           <isObjectAction v="false" />
           <selectionType>MULTI</selectionType>
           <iconId>VAADIN:MAP_MARKER</iconId>
-          <stateProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/opendayroute/stateProcess.js</stateProcess>
+          <stateProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/actiongroupopendayroute/children/opendayroute/stateProcess.js</stateProcess>
           <tooltip>Open route</tooltip>
-          <tooltipProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/opendayroute/tooltipProcess.js</tooltipProcess>
+          <tooltipProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/actiongroupopendayroute/children/opendayroute/tooltipProcess.js</tooltipProcess>
         </entityActionField>
       </children>
     </entityActionGroup>
diff --git a/entity/VisitPlanEntry_entity/afterSave.js b/entity/VisitPlanEntry_entity/afterSave.js
index efbd0a8d980a3b5182471dc011c26edf04156766..9e85b96d1366ba784b411fbf4f6aa020c27b12d3 100644
--- a/entity/VisitPlanEntry_entity/afterSave.js
+++ b/entity/VisitPlanEntry_entity/afterSave.js
@@ -1,3 +1,4 @@
+import("Util_lib");
 import("Calendar_lib");
 import("Communication_lib");
 import("KeywordRegistry_basic");
@@ -18,38 +19,48 @@ if(vars.get("$param.CurrentContext_param") != null)
         newWhere("VISITRECOMMENDATION.VISITRECOMMENDATIONID", savedData["VISITRECOMMENDATION_ID"])
             .updateData(true, "VISITRECOMMENDATION", ["STATUS"], null, ["PLANNED"]);
     }
-    if(savedData["STATUS_APPOINTMENT"] == $KeywordRegistry.visitPlanEntryStatusAppointment$confirmed())
+    if(savedData["STATUS_APPOINTMENT"] == $KeywordRegistry.visitPlanEntryStatusAppointment$confirmed()
+        && !savedData["APPOINTMENT_ID"])
     {
         var summary = translate.text("Site visit") + " | " + savedData["CONTACT_ID.displayValue"];
         var description = savedData["CONTACT_ID.displayValue"];
         var standardMail = CommUtil.getStandardMail(savedData["CONTACT_ID"]); 
     
-        var entryDate = datetime.toLocaleDate(savedData["ENTRYDATE"], "dd-MM-yyyy");
-        var startTime = entryDate + " " + datetime.toLocaleDate(savedData["BEGIN_TIME"], "HH:mm:ss.S");
-        startTime = datetime.toLong(startTime, "dd-MM-yyyy HH:mm:ss.S", "UTC"); // #1076044 set tz to prevent time gaps.
-        var endTime = savedData["END_TIME"];
-        var duration = eMath.subInt(endTime, startTime);
+        //creates an js date object with the current utc time and adds the appointment begin/end time.
+        //necessary for CalendarUtil.createEntry() 
+        var entrydate = Number(datetime.toLong(datetime.toDate(Number(savedData["ENTRYDATE"]), "dd.MM.yyyy"), "dd.MM.yyyy"))
+        var start = new Date(entrydate + Number(savedData["BEGIN_TIME"]));
+        var end = new Date(entrydate + Number(savedData["END_TIME"]));
 
-        var start = new Date(datetime.clearTime(startTime, vars.get("$sys.timezone")) + Number(savedData["BEGIN_TIME"]));
-        var end = new Date(datetime.today(vars.get("$sys.timezone")) + Number(savedData["END_TIME"]));
-     
         var links = [
+            {
+                "OBJECT_ID": savedData["ORGANISATION_CONTACT_ID"],
+                "OBJECT_TYPE": "Organisation"
+            },
+            {
+                "OBJECT_ID": savedData["CONTACT_ID"],
+                "OBJECT_TYPE": "Person"
+            },
+            {
+                "OBJECT_ID" : savedData["VISITPLANENTRYID"],
+                "OBJECT_TYPE" : "Visitplanentry"
+            }
+        ]
+        
+        var mailArray = [];
+        if(!Utils.isNotNullOrEmptyString(standardMail))
         {
-            "OBJECT_ID": savedData["ORGANISATION_CONTACT_ID"],
-            "OBJECT_TYPE": "Organisation"
-        },
-        {
-            "OBJECT_ID": savedData["CONTACT_ID"],
-            "OBJECT_TYPE": "Person"
+            mailArray.push(standardMail);
         }
-        ]
-    
-        var params = {
-            "Entry_param" : JSON.stringify(CalendarUtil.createEntry(summary, description, links, undefined, undefined, 
-                            start, end, undefined, undefined, undefined, [standardMail], undefined, undefined, undefined))
+        
+        params = {
+        "Entry_param": JSON.stringify(CalendarUtil.createEntry(summary, description, links, undefined, undefined, start,
+                                                                    end, undefined, undefined, undefined, mailArray, 
+                                                                    undefined, undefined, undefined))
+        , "Visitplanentry_param": vars.get("$field.VISITPLANENTRYID")
         };
     
-        neon.openContext("Appointment", "AppointmentEdit_view", [vars.get("$field.VISITPLANENTRYID")], neon.OPERATINGSTATE_NEW, params, null);
+        neon.openContext("Appointment", "AppointmentEdit_view", [savedData["VISITPLANENTRYID"]], neon.OPERATINGSTATE_NEW, params, null);
         result.string(true);
     }
 }
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/opendayroute/documentation.adoc b/entity/VisitPlanEntry_entity/entityfields/actiongroupopendayroute/children/opendayroute/documentation.adoc
similarity index 100%
rename from entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/opendayroute/documentation.adoc
rename to entity/VisitPlanEntry_entity/entityfields/actiongroupopendayroute/children/opendayroute/documentation.adoc
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/opendayroute/onActionProcess.js b/entity/VisitPlanEntry_entity/entityfields/actiongroupopendayroute/children/opendayroute/onActionProcess.js
similarity index 100%
rename from entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/opendayroute/onActionProcess.js
rename to entity/VisitPlanEntry_entity/entityfields/actiongroupopendayroute/children/opendayroute/onActionProcess.js
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/opendayroute/stateProcess.js b/entity/VisitPlanEntry_entity/entityfields/actiongroupopendayroute/children/opendayroute/stateProcess.js
similarity index 100%
rename from entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/opendayroute/stateProcess.js
rename to entity/VisitPlanEntry_entity/entityfields/actiongroupopendayroute/children/opendayroute/stateProcess.js
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/opendayroute/tooltipProcess.js b/entity/VisitPlanEntry_entity/entityfields/actiongroupopendayroute/children/opendayroute/tooltipProcess.js
similarity index 100%
rename from entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/opendayroute/tooltipProcess.js
rename to entity/VisitPlanEntry_entity/entityfields/actiongroupopendayroute/children/opendayroute/tooltipProcess.js
diff --git a/entity/VisitPlanEntry_entity/entityfields/appointment_begin_time/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/appointment_begin_time/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..59376cfc89ef3da86ac092eefd1ddb6446a373c1
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/appointment_begin_time/valueProcess.js
@@ -0,0 +1,17 @@
+import("system.result");
+import("system.calendars");
+import("system.vars");
+
+var appointmentId = vars.get("$field.APPOINTMENT_ID");
+var entryBegin = "";
+
+if(appointmentId)
+{
+    var entry = calendars.getEntry(appointmentId, null, null);
+    if(entry)
+    {
+        entryBegin = entry[calendars.DTSTART];
+    }
+}
+
+result.string(entryBegin);
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/appointment_end_time/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/appointment_end_time/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..0adc62813e86573e758178ef3bb2a5a06346233d
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/appointment_end_time/valueProcess.js
@@ -0,0 +1,17 @@
+import("system.vars");
+import("system.result");
+import("system.calendars");
+
+var appointmentId = vars.get("$field.APPOINTMENT_ID");
+var entryEnd = "";
+
+if(appointmentId)
+{
+    var entry = calendars.getEntry(appointmentId, null, null);
+    if(entry)
+    {
+        entryEnd = entry[calendars.DTEND];
+    }
+}
+
+result.string(entryEnd);
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/appointment_id/displayValueProcess.js b/entity/VisitPlanEntry_entity/entityfields/appointment_id/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4b55485e955cdf543f5925d0d8d9bdd78033d946
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/appointment_id/displayValueProcess.js
@@ -0,0 +1,17 @@
+import("system.vars");
+import("system.result");
+import("system.calendars");
+
+var appointmentId = vars.get("$field.APPOINTMENT_ID");
+var entrySubject = "";
+
+if(appointmentId)
+{
+    var entry = calendars.getEntry(appointmentId, null, null);
+    if(entry)
+    {
+        entrySubject = entry[calendars.SUMMARY];
+    }    
+}
+
+result.string(entrySubject);
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/appointment_status/displayValueProcess.js b/entity/VisitPlanEntry_entity/entityfields/appointment_status/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..501e8c287a593ed44ade2e50fb86aacebf257848
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/appointment_status/displayValueProcess.js
@@ -0,0 +1,5 @@
+import("Appointment_lib");
+import("system.vars");
+import("system.result");
+
+result.string(AppointmentUtils.getAppointmentStatusDisplayValue(vars.get("$field.APPOINTMENT_STATUS")));
diff --git a/entity/VisitPlanEntry_entity/entityfields/appointment_status/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/appointment_status/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1eab30e3e7cada0bc32ee62392037a5318003bc0
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/appointment_status/valueProcess.js
@@ -0,0 +1,17 @@
+import("system.vars");
+import("system.result");
+import("system.calendars");
+
+var appointmentId = vars.get("$field.APPOINTMENT_ID");
+var entryStatus = "";
+
+if(appointmentId)
+{
+    var entry = calendars.getEntry(appointmentId, null, null);
+    if(entry)
+    {
+        entryStatus = entry[calendars.STATUS];
+    }
+}
+
+result.string(entryStatus);
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/appointment_subject/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/appointment_subject/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9f6073cee42e92282b6ff436f7faadc973dfa34e
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/appointment_subject/valueProcess.js
@@ -0,0 +1,17 @@
+import("system.vars");
+import("system.result");
+import("system.calendars");
+
+var appointmentId = vars.get("$field.APPOINTMENT_ID");
+var entrySubject = "";
+
+if(appointmentId)
+{
+    var entry = calendars.getEntry(appointmentId, null, null);
+    if(entry)
+    {
+        entrySubject = entry[calendars.SUMMARY]
+    }
+}
+
+result.string(entrySubject);
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/appointments/children/linkedobjectid_param/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/appointments/children/linkedobjectid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..58dc9fe9269f10ddc49c176ed1cb66640c4d1652
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/appointments/children/linkedobjectid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("system.vars");
+
+result.string(vars.get("$field.VISITPLANENTRYID"));
diff --git a/entity/VisitPlanEntry_entity/entityfields/appointments/children/visitplanentry_param/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/appointments/children/visitplanentry_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..599bfc35195077f2fb171156ddaf1faddd9b3254
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/appointments/children/visitplanentry_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(true)
\ 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
new file mode 100644
index 0000000000000000000000000000000000000000..c60ce530547d56cd0fa884f242ea5e70072aa096
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/onActionProcess.js
@@ -0,0 +1,31 @@
+import("Sql_lib");
+import("AttributeRegistry_basic");
+import("system.db");
+import("KeywordRegistry_basic");
+import("Contact_lib");
+import("Employee_lib");
+import("system.vars");
+import("ActivityTask_lib");
+
+var links = [];
+
+var pointOfContact = newSelect("CONTACT.CONTACTID", db.getCurrentAlias())
+                                .from("CONTACT")
+                                .leftJoin("AB_ATTRIBUTERELATION", "CONTACT.CONTACTID = AB_ATTRIBUTERELATION.OBJECT_ROWID")
+                                .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_CONTACT_ID"))
+                                .cell();
+
+if(pointOfContact)
+{
+    links.push([ContactUtils.getContextByContactId(pointOfContact), pointOfContact]);
+}
+else
+{
+    links.push(["Organisation", vars.get("$field.ORGANISATION_CONTACT_ID")]);
+    links.push(["Person", vars.get("$field.CONTACT_ID")]);
+}
+
+ActivityUtils.createNewActivity(null, links, null, null, null, null, $KeywordRegistry.activityDirection$outgoing(), null, $KeywordRegistry.activityCategory$visit(), vars.get("$field.ENTRYDATE"), vars.get("$field.VISITPLANENTRYID"));
diff --git a/entity/VisitPlanEntry_entity/entityfields/newappointment/stateProcess.js b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/stateProcess.js
similarity index 63%
rename from entity/VisitPlanEntry_entity/entityfields/newappointment/stateProcess.js
rename to entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/stateProcess.js
index 5a2727774f69cea4ca520a5813e9502a4869de5c..8581fdf93ca064ac768d8113e9c8c766e8daea69 100644
--- a/entity/VisitPlanEntry_entity/entityfields/newappointment/stateProcess.js
+++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newactivity/stateProcess.js
@@ -1,9 +1,12 @@
+import("system.datetime");
 import("system.result");
 import("system.vars");
 import("system.neon");
 
 var state = neon.COMPONENTSTATE_DISABLED;
-if (vars.get("$sys.selectionRows") != "" && vars.get("$sys.selectionRows") != undefined)
+var today = vars.get("$sys.date")
+
+if (vars.get("$field.ENTRYDATE") <= today)
 {
     state = neon.COMPONENTSTATE_EDITABLE;
 }
diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/onActionProcess.js b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..74be6d74eb7c8498d52842ef89eafe4ad20efd27
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/onActionProcess.js
@@ -0,0 +1,63 @@
+import("Util_lib");
+import("system.result");
+import("system.neon");
+import("Calendar_lib");
+import("system.datetime");
+import("Communication_lib");
+import("system.translate");
+import("Contact_lib");
+import("Sql_lib");
+import("system.vars");
+
+var selectionRowData = vars.get("$sys.selectionRows");
+
+if(vars.get("$field.VISITRECOMMENDATION_ID"))
+{
+    newWhere("VISITRECOMMENDATION.VISITRECOMMENDATIONID", vars.get("$field.VISITRECOMMENDATION_ID"))
+            .updateData(true, "VISITRECOMMENDATION", ["STATUS"], null, ["PLANNED"]);
+}
+
+var fullName = ContactUtils.getFullTitleByContactId(vars.get("$field.CONTACT_ID"), true)
+var summary = translate.text("Site visit") + " || " + fullName;
+var description = fullName;
+var standardMail = CommUtil.getStandardMail(vars.get("$field.CONTACT_ID")); 
+
+//creates an js date object with the current utc time and adds the appointment begin/end time.
+//necessary for CalendarUtil.createEntry() 
+var entrydate = Number(datetime.toLong(datetime.toDate(Number(vars.get("$field.ENTRYDATE")), "dd.MM.yyyy"), "dd.MM.yyyy"))
+var start = new Date(entrydate + Number(vars.get("$field.BEGIN_TIME")));
+var end = new Date(entrydate + Number(vars.get("$field.END_TIME")));
+
+var links = [
+                {
+                    "OBJECT_ID" : vars.get("$field.ORGANISATION_CONTACT_ID"),
+                    "OBJECT_TYPE" : "Organisation"
+                },
+                {
+                    "OBJECT_ID" : vars.get("$field.CONTACT_ID"),
+                    "OBJECT_TYPE" : "Person"
+                },
+                {
+                    "OBJECT_ID" : vars.get("$field.VISITPLANENTRYID"),
+                    "OBJECT_TYPE" : "Visitplanentry"
+                }
+                
+];
+
+var params;
+var mailArray = [];
+if(!Utils.isNullOrEmptyString(standardMail))
+{
+    mailArray.push(standardMail);
+}
+
+params = {
+"Entry_param": JSON.stringify(CalendarUtil.createEntry(summary, description, links, undefined, undefined, start,
+                                                            end, undefined, undefined, undefined, mailArray, 
+                                                            undefined, undefined, undefined))
+, "Visitplanentry_param": vars.get("$field.VISITPLANENTRYID")
+};
+
+
+neon.openContext("Appointment", "AppointmentEdit_view", [vars.get("$field.VISITPLANENTRYID")], neon.OPERATINGSTATE_NEW, params, null);
+result.string(true);
diff --git a/entity/VisitPlanEntry_entity/entityfields/newappointment/documentation.adoc b/entity/VisitPlanEntry_entity/entityfields/newappointment/documentation.adoc
deleted file mode 100644
index 51e093f5d14cc0e2bf39de625536c213e16e22e8..0000000000000000000000000000000000000000
--- a/entity/VisitPlanEntry_entity/entityfields/newappointment/documentation.adoc
+++ /dev/null
@@ -1 +0,0 @@
-creates the Appointment-editview
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/newappointment/onActionProcess.js b/entity/VisitPlanEntry_entity/entityfields/newappointment/onActionProcess.js
deleted file mode 100644
index 7bf8461c01ec469ee6d667c1211272b8aa4bf7f7..0000000000000000000000000000000000000000
--- a/entity/VisitPlanEntry_entity/entityfields/newappointment/onActionProcess.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import("system.translate");
-import("system.datetime");
-import("system.calendars");
-import("system.eMath");
-import("system.util");
-import("system.db");
-import("system.vars");
-import("system.neon");
-import("system.result");
-import("Communication_lib");
-import("Calendar_lib");
-import("Contact_lib")
-import("Sql_lib");
-
-var selectionRowData = vars.get("$sys.selectionRows");
-
-if(selectionRowData[0].VISITRECOMMENDATION_ID)
-{
-    newWhere("VISITRECOMMENDATION.VISITRECOMMENDATIONID", selectionRowData[0].VISITRECOMMENDATION_ID)
-            .updateData(true, "VISITRECOMMENDATION", ["STATUS"], null, ["PLANNED"]);
-}
-
-var fullName = ContactUtils.getFullTitleByContactId(selectionRowData[0].CONTACT_ID, true)
-var summary = translate.text("Site visit") + " || " + fullName;
-var description = fullName;
-var standardMail = CommUtil.getStandardMail(selectionRowData[0].CONTACT_ID); 
-
-//creates an js date object with the current utc time and adds the appointment begin/end time.
-//necessary for CalendarUtil.createEntry() 
-var entryDate = Number(datetime.toLong(datetime.toDate(Number(selectionRowData[0].ENTRYDATE), "dd.MM.yyyy"), "dd.MM.yyyy"));
-var start = new Date(entryDate + Number(selectionRowData[0].BEGIN_TIME));
-var end = new Date(entryDate + Number(selectionRowData[0].END_TIME));
-
-var links = [
-                {
-                    "OBJECT_ID" : selectionRowData[0]["ORGANISATION_CONTACT_ID"],
-                    "OBJECT_TYPE" : "Organisation"
-                },
-                {
-                    "OBJECT_ID" : selectionRowData[0]["CONTACT_ID"],
-                    "OBJECT_TYPE" : "Person"
-                }
-];
-
-var params = {
-    "Entry_param": JSON.stringify(CalendarUtil.createEntry(summary, description, links, undefined, undefined, start,
-                                                                end, undefined, undefined, undefined, [standardMail], 
-                                                                undefined, undefined, undefined))
-};
-
-neon.openContext("Appointment", "AppointmentEdit_view", [vars.get("$field.VISITPLANENTRYID")], neon.OPERATINGSTATE_NEW, params, null);
-result.string(true);
diff --git a/entity/VisitPlanEntry_entity/entityfields/newappointment/tooltipProcess.js b/entity/VisitPlanEntry_entity/entityfields/newappointment/tooltipProcess.js
deleted file mode 100644
index ea083fcb476a7c75a6494b1b17d913cc5a62ad90..0000000000000000000000000000000000000000
--- a/entity/VisitPlanEntry_entity/entityfields/newappointment/tooltipProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.translate");
-import("system.result");
-
-result.string(translate.text("Create new Appointment"));
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/parentname/displayValueProcess.js b/entity/VisitPlanEntry_entity/entityfields/parentname/displayValueProcess.js
index d5ffbf8f0791a2aaaa1df431e7705130ae619b28..401a54fd70f9fac4c625082828732905ecd4e7f6 100644
--- a/entity/VisitPlanEntry_entity/entityfields/parentname/displayValueProcess.js
+++ b/entity/VisitPlanEntry_entity/entityfields/parentname/displayValueProcess.js
@@ -3,9 +3,9 @@ import("system.vars");
 import("system.datetime");
 import("system.translate");
 
+var parentName = datetime.toDate(vars.get("$field.ENTRYDATE"), "EEEE", null, vars.get("$sys.clientlocale"));
 
-var parentName = translate.text(datetime.toDate(vars.get("$field.ENTRYDATE"), "EEEE"));
-
-var entryDate = datetime.toDate(vars.get("$field.ENTRYDATE"), "dd.MM.yyyy");
+var entryDate = datetime.toDate(vars.get("$field.ENTRYDATE"), translate.text("dd.MM.yyyy"));
 
+//e.g: Monday 08/30/2021
 result.string(parentName + " " + entryDate);
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/sync/children/syncappointmenttoplan/onActionProcess.js b/entity/VisitPlanEntry_entity/entityfields/sync/children/syncappointmenttoplan/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e0bcb2bde5fa180b19cd0a58080caef44d0983ea
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/sync/children/syncappointmenttoplan/onActionProcess.js
@@ -0,0 +1,74 @@
+import("system.neon");
+import("system.db");
+import("system.util");
+import("Sql_lib");
+import("Employee_lib");
+import("system.datetime");
+import("system.vars");
+
+var selectionRowData = vars.get("$sys.selectionRows");
+
+var planId = selectionRowData[0].VISITPLANENTRYID
+var appId = selectionRowData[0].APPOINTMENT_ID
+
+var appEntryDate = datetime.toLong(datetime.toDate(selectionRowData[0].APPOINTMENT_BEGIN_TIME, "yyyy-MM-dd"), "yyyy-MM-dd", "UTC");
+var appBeginTime = datetime.toDate(selectionRowData[0].APPOINTMENT_BEGIN_TIME, "HH:mm:ss.S"); // #1076044 set tz to prevent time gaps.
+appBeginTime = datetime.toLong(appBeginTime, "HH:mm:ss.S", "UTC");
+var appEndTime = datetime.toDate(selectionRowData[0].APPOINTMENT_END_TIME, "HH:mm:ss.S"); // #1076044 set tz to prevent time gaps.
+appEndTime = datetime.toLong(appEndTime, "HH:mm:ss.S", "UTC");
+    
+var user = EmployeeUtils.getCurrentContactId()
+var calendarWeek = datetime.toLocaleDate(appEntryDate, "w");
+var calendarYear = datetime.toLocaleDate(appEntryDate, "yyyy");
+var weekId = newSelect("VISITPLANEMPLOYEEWEEKID")
+.from("VISITPLANEMPLOYEEWEEK") 
+.where("VISITPLANEMPLOYEEWEEK.VISITPLAN_WEEK", calendarWeek)
+.and("VISITPLANEMPLOYEEWEEK.VISITPLAN_YEAR", calendarYear)
+.and("VISITPLANEMPLOYEEWEEK.CONTACT_ID", user)
+.cell();
+
+if(weekId)
+{
+    visitPlanEmployeeWeekID = weekId;
+}
+else
+{
+    var newWeekId = util.getNewUUID();
+
+    var valuesWeek = [
+    newWeekId,
+    calendarWeek,
+    calendarYear,
+    user
+    ];
+
+    var columnsWeek = [
+    "VISITPLANEMPLOYEEWEEKID",
+    "VISITPLAN_WEEK",
+    "VISITPLAN_YEAR",
+    "CONTACT_ID",
+    ];
+
+    db.insertData("VISITPLANEMPLOYEEWEEK", columnsWeek, null, valuesWeek);
+
+    visitPlanEmployeeWeekID = newWeekId;
+}    
+
+var values = [
+appEntryDate,
+appBeginTime,
+appEndTime,
+visitPlanEmployeeWeekID
+];
+
+var columns = [
+"ENTRYDATE",
+"BEGIN_TIME",
+"END_TIME",
+"VISITPLANEMPLOYEEWEEK_ID"
+];
+
+var cond = newWhere("VISITPLANENTRY.VISITPLANENTRYID", planId).toString();
+db.updateData("VISITPLANENTRY", columns, null, values, cond);
+ 
+neon.refreshAll();
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/sync/children/syncplantoappointment/onActionProcess.js b/entity/VisitPlanEntry_entity/entityfields/sync/children/syncplantoappointment/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4cab1fb757d71ca0e38ba31699535bb6107bc41b
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/sync/children/syncplantoappointment/onActionProcess.js
@@ -0,0 +1,20 @@
+import("system.neon");
+import("system.datetime");
+import("system.calendars");
+import("system.vars");
+
+var selectionRowData = vars.get("$sys.selectionRows")[0];
+
+var entry = calendars.getEntry(selectionRowData.APPOINTMENT_ID, null, null, calendars.VEVENT);
+
+var planEntryDate = datetime.toDate(selectionRowData.ENTRYDATE, "dd-MM-yyyy");
+var planBeginTime = planEntryDate + " " + datetime.toDate(selectionRowData.BEGIN_TIME, "HH:mm:ss.S", "UTC");
+    planBeginTime = datetime.toLong(planBeginTime, "dd-MM-yyyy HH:mm:ss.S"); // #1076044 set tz to prevent time gaps.
+var planEndTime = planEntryDate + " " + datetime.toDate(selectionRowData.END_TIME, "HH:mm:ss.S", "UTC");
+    planEndTime = datetime.toLong(planEndTime, "dd-MM-yyyy HH:mm:ss.S"); // #1076044 set tz to prevent time gaps.
+
+entry[calendars.DTSTART] = planBeginTime;
+entry[calendars.DTEND] = planEndTime;
+
+calendars.updateEntry(entry);
+neon.refreshAll();
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/sync/stateProcess.js b/entity/VisitPlanEntry_entity/entityfields/sync/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3eb0bebce5c04df5f7cab33409c0b763d847db66
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/sync/stateProcess.js
@@ -0,0 +1,23 @@
+import("system.result");
+import("Sql_lib");
+import("system.vars");
+import("Employee_lib");
+import("system.neon");
+
+var state = neon.COMPONENTSTATE_DISABLED;
+var contactId = EmployeeUtils.getCurrentContactId();
+var weekplanUser = newSelect("CONTACT_ID").from("VISITPLANEMPLOYEEWEEK")
+              .where("VISITPLANEMPLOYEEWEEK.VISITPLANEMPLOYEEWEEKID", vars.get("$field.VISITPLANEMPLOYEEWEEK_ID"))
+              .cell();
+              
+var selection = vars.get("$sys.selectionRows")[0]
+
+if(selection && selection.APPOINTMENT_ID)
+{
+    if(selection.ISGROUP != "true" && weekplanUser == contactId)
+    {
+        state = neon.COMPONENTSTATE_EDITABLE;
+    }    
+}
+
+result.string(state)
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/syncicon/colorProcess.js b/entity/VisitPlanEntry_entity/entityfields/syncicon/colorProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b8b288b7090935877e745466616cc4e3b17acd6c
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/syncicon/colorProcess.js
@@ -0,0 +1,12 @@
+import("system.vars");
+import("system.result");
+import("system.neon")
+
+if(vars.get("$field.syncIcon") == "VAADIN:CLOSE_CIRCLE_O")
+{
+    result.string(neon.PRIORITY_HIGH_COLOR);
+}
+else
+{
+    result.string(neon.PRIORITY_LOW_COLOR);
+}
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/entityfields/syncicon/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/syncicon/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8fee46bc43943a3c25e7d9e3a417a5ff355f049
--- /dev/null
+++ b/entity/VisitPlanEntry_entity/entityfields/syncicon/valueProcess.js
@@ -0,0 +1,26 @@
+import("system.datetime");
+import("system.result");
+import("system.vars");
+
+var appEntryDate = datetime.toLong(datetime.toDate(vars.get("$field.APPOINTMENT_BEGIN_TIME"), "yyyy-MM-dd"), "yyyy-MM-dd", "UTC");
+var appBeginTime = datetime.toDate(vars.get("$field.APPOINTMENT_BEGIN_TIME"), "HH:mm:ss.S"); // #1076044 set tz to prevent time gaps.
+    appBeginTime = datetime.toLong(appBeginTime, "HH:mm:ss.S", "UTC");
+var appEndTime = datetime.toDate(vars.get("$field.APPOINTMENT_END_TIME"), "HH:mm:ss.S"); // #1076044 set tz to prevent time gaps.
+    appEndTime = datetime.toLong(appEndTime, "HH:mm:ss.S", "UTC");
+
+var planEntryDate = vars.get("$field.ENTRYDATE");
+var planBeginTime = vars.get("$field.BEGIN_TIME");
+var planEndTime = vars.get("$field.END_TIME");
+
+if(vars.get("$field.ISGROUP") == "true")
+{
+    result.string("");
+}
+else if(planEntryDate != appEntryDate || appBeginTime != planBeginTime || appEndTime != planEndTime)
+{
+    result.string("VAADIN:CLOSE_CIRCLE_O");
+}
+else if(planEntryDate == appEntryDate || appBeginTime == planBeginTime || appEndTime == planEndTime)
+{
+    result.string("VAADIN:CHECK_CIRCLE_O");
+}
diff --git a/entity/VisitPlanEntry_entity/recordcontainers/db/conditionProcess.js b/entity/VisitPlanEntry_entity/recordcontainers/db/conditionProcess.js
index 1486e70fa27bba4ae09131f01fb1a9a916d09cfa..575116755be95e8e727c2aac2aa5a41a39161808 100644
--- a/entity/VisitPlanEntry_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/VisitPlanEntry_entity/recordcontainers/db/conditionProcess.js
@@ -21,10 +21,14 @@ else if(vars.exists("$param.EntriesofCurrentWeek_param") && Utils.toBoolean(vars
     var currentYear = datetime.toLocaleDate(vars.get("$sys.date"), "yyyy");
     var currentUser = EmployeeUtils.getCurrentContactId();
     
-    cond.join("VISITPLANEMPLOYEEWEEK", "VISITPLANENTRY.VISITPLANEMPLOYEEWEEK_ID = VISITPLANEMPLOYEEWEEK.VISITPLANEMPLOYEEWEEKID")
-            .where("VISITPLANEMPLOYEEWEEK.VISITPLAN_WEEK", currentWeek)
-            .and("VISITPLANEMPLOYEEWEEK.VISITPLAN_YEAR", currentYear)
-            .and("VISITPLANEMPLOYEEWEEK.CONTACT_ID", currentUser);    
+    var visitPlanEmployeeWeekid = newSelect("VISITPLANEMPLOYEEWEEK.VISITPLANEMPLOYEEWEEKID")
+                                            .from("VISITPLANEMPLOYEEWEEK")
+                                            .where("VISITPLANEMPLOYEEWEEK.VISITPLAN_YEAR", currentYear)
+                                            .and("VISITPLANEMPLOYEEWEEK.VISITPLAN_WEEK", currentWeek)
+                                            .and("VISITPLANEMPLOYEEWEEK.CONTACT_ID", currentUser)
+                                            .arrayColumn();
+    
+    cond.and("VISITPLANENTRY.VISITPLANEMPLOYEEWEEK_ID", visitPlanEmployeeWeekid, SqlBuilder.IN());
 }
 
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/VisitPlanEntry_entity/recordcontainers/db/onDBInsert.js b/entity/VisitPlanEntry_entity/recordcontainers/db/onDBInsert.js
index d8f73c57c0fef0051eabac2e39753abf67b548b8..da512da8a8f734095375d68d9a18d75dca29a9a0 100644
--- a/entity/VisitPlanEntry_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/VisitPlanEntry_entity/recordcontainers/db/onDBInsert.js
@@ -8,9 +8,11 @@ import("system.util");
 
 var visitPlanEmployeeWeekID = "";
 var insertData = [];
-var user = EmployeeUtils.getCurrentContactId();
+var contactId = EmployeeUtils.getCurrentContactId();
 if(vars.get("$param.Entries_param") != null)
+{
     visitPlanEmployeeWeekID = vars.get("$param.Entries_param");
+}
 else
 {
     var calendarWeek = datetime.toLocaleDate(vars.get("$field.ENTRYDATE"), "w");
@@ -19,11 +21,13 @@ else
     .from("VISITPLANEMPLOYEEWEEK") 
     .where("VISITPLANEMPLOYEEWEEK.VISITPLAN_WEEK", calendarWeek)
     .and("VISITPLANEMPLOYEEWEEK.VISITPLAN_YEAR", calendarYear)
-    .and("VISITPLANEMPLOYEEWEEK.CONTACT_ID", user)
+    .and("VISITPLANEMPLOYEEWEEK.CONTACT_ID", contactId)
     .cell();
 
     if(weekId)
+    {
         visitPlanEmployeeWeekID = weekId;
+    }
     else
     {
         var newWeekId = util.getNewUUID();
@@ -32,7 +36,7 @@ else
         newWeekId,
         calendarWeek,
         calendarYear,
-        user
+        contactId
         ];
 
         var columnsWeek = [
@@ -46,34 +50,8 @@ else
 
         visitPlanEmployeeWeekID = newWeekId;
     }    
-}
-
-if(vars.get("$param.NoVisitPlanEmployeeWeek_param")){
-    var valuesEntry = [
-    util.getNewUUID(),
-    vars.get("$field.ENTRYDATE"),
-    vars.get("$field.BEGIN_TIME"),
-    vars.get("$field.END_TIME"),
-    vars.get("$field.ORGANISATION_CONTACT_ID"),
-    vars.get("$field.CONTACT_ID"),
-    visitPlanEmployeeWeekID,
-    vars.get("$field.STATUS"),
-    vars.get("$field.STATUS_APPOINTMENT"),
-    vars.get("$field.VISITRECOMMENDATION_ID"),
-    ];
-
-    var columnsEntry = [
-    "VISITPLANENTRYID",
-    "ENTRYDATE",
-    "BEGIN_TIME",
-    "END_TIME",
-    "ORGANISATION_CONTACT_ID",
-    "CONTACT_ID",
-    "VISITPLANEMPLOYEEWEEK_ID",
-    "STATUS",
-    "STATUS_APPOINTMENT",
-    "VISITRECOMMENDATION_ID"
-    ];
-
-    db.insertData("VISITPLANENTRY", columnsEntry, null, valuesEntry);
+    
+    var updateEntry = newWhere("VISITPLANENTRY.VISITPLANENTRYID", vars.get("$local.uid"))
+    .updateData(true, "VISITPLANENTRY", ["VISITPLANEMPLOYEEWEEK_ID"], null, [visitPlanEmployeeWeekID]);
+    
 }
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod b/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod
index 857530448d025e25a1d0d25024fb1876ddacbea7..2dd7f0f71327e6fceb57287174f17c51434cced3 100644
--- a/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod
+++ b/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod
@@ -304,6 +304,26 @@
       <name>PrioritySource_param</name>
       <expose v="true" />
     </entityParameter>
+    <entityField>
+      <name>DATE_EDIT</name>
+      <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/date_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_NEW</name>
+      <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/date_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>USER_EDIT</name>
+      <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/user_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DISTRICT_ID</name>
+      <title>District</title>
+    </entityField>
+    <entityField>
+      <name>ADVISERROLE</name>
+      <title>Role</title>
+    </entityField>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
@@ -405,6 +425,21 @@
         <jDitoRecordFieldMapping>
           <name>ADDRESS_ID.displayValue</name>
         </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ICON.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ADVISERROLE.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ADVISERROLE.displayValue</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>DISTRICT_ID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>DISTRICT_ID.displayValue</name>
+        </jDitoRecordFieldMapping>
       </recordFieldMappings>
       <filterExtensions>
         <filterExtensionSet>
diff --git a/entity/VisitRecommendation_entity/contentTitleProcess.js b/entity/VisitRecommendation_entity/contentTitleProcess.js
index fa1bf29c072e1efa7bf8443f79d92ae79295ba95..038b0aa88afd252960b13b5f4ea161d309c09405 100644
--- a/entity/VisitRecommendation_entity/contentTitleProcess.js
+++ b/entity/VisitRecommendation_entity/contentTitleProcess.js
@@ -3,6 +3,6 @@ import("system.datetime");
 import("system.translate");
 import("system.vars");
 
-title = vars.get("$field.ORGANISATION_NAME") + " - " + translate.text("Due") + ": " + datetime.toDate(vars.get("$field.DUE_DATE"), "dd.MM.yyyy")
+title = vars.get("$field.ORGANISATION_NAME") + " - " + translate.text("Due") + ": " + vars.get("$field.DUE_DATE")
 
 result.string(title);
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/entityfields/date_edit/valueProcess.js b/entity/VisitRecommendation_entity/entityfields/date_edit/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..22da50b9b081530a1883611e70269a9fe2d38904
--- /dev/null
+++ b/entity/VisitRecommendation_entity/entityfields/date_edit/valueProcess.js
@@ -0,0 +1,9 @@
+import("system.util");
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+{
+    result.string(vars.get("$sys.date"));
+}
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/entityfields/date_new/valueProcess.js b/entity/VisitRecommendation_entity/entityfields/date_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..358adf46ccdbe302865ce8815f028bd57a4c22e2
--- /dev/null
+++ b/entity/VisitRecommendation_entity/entityfields/date_new/valueProcess.js
@@ -0,0 +1,9 @@
+import("system.util");
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+{
+    result.string(vars.get("$sys.date"));
+}
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/onActionProcess.js b/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/onActionProcess.js
index 373517b099005b28f7a2c375313397defada0f8b..cf79e9774522847b458a6ef8fd04e2ee74d9ad15 100644
--- a/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/onActionProcess.js
+++ b/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/onActionProcess.js
@@ -12,4 +12,4 @@ params["Entrydate_param"] = vars.get("$field.DUE_DATE");
 params["PrioritySource_param"] = vars.get("$field.PRIORITY_SOURCE");
 params["VisitrecommendationId_param"] = vars.get("$field.UID");
 
-neon.openContext("VisitPlanEntry", null, null, neon.OPERATINGSTATE_NEW, params);
\ No newline at end of file
+neon.openContext("VisitPlanEntry", "VisitPlanEntryEdit_view", null, neon.OPERATINGSTATE_NEW, params);
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/entityfields/user_edit/valueProcess.js b/entity/VisitRecommendation_entity/entityfields/user_edit/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8ce6b9bd703ac2ba5630b0c2bdd4997569766fc4
--- /dev/null
+++ b/entity/VisitRecommendation_entity/entityfields/user_edit/valueProcess.js
@@ -0,0 +1,9 @@
+import("system.util");
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+{
+    result.string(vars.get("$sys.user"));
+}
\ No newline at end of file
diff --git a/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js b/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js
index 19858910ea9c252784d9c696e9aa637ea54c3c5b..fa78b9a964fd636e631c0823266e492a701af72b 100644
--- a/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js
@@ -1,3 +1,5 @@
+import("Employee_lib");
+import("VisitPlanning_lib");
 import("JditoFilter_lib");
 import("system.eMath");
 import("system.tools");
@@ -5,7 +7,6 @@ import("PostalAddress_lib");
 import("system.translate");
 import("Contact_lib");
 import("KeywordRegistry_basic");
-import("system.logging");
 import("system.datetime");
 import("system.util");
 import("system.result");
@@ -21,6 +22,8 @@ import("Address_lib");
 var recommendationData = [];
 var tmpData = [];
 var activitySubQuery = "";
+var currentContactId = EmployeeUtils.getCurrentContactId();
+var helperObj = {};
 var recommendationSQLData = newSelect(
                             [
                                 "VISITRECOMMENDATIONID",                //0
@@ -46,7 +49,6 @@ var recommendationSQLData = newSelect(
                             .leftJoin("ADDRESS", "CONTACT.ADDRESS_ID = ADDRESS.ADDRESSID")
                             .where("VISITRECOMMENDATION.STATUS is null")
 
-
 var idValues = false;
 if (vars.exists("$local.idvalues") && vars.get("$local.idvalues"))
 {
@@ -64,8 +66,17 @@ else if(vars.get("$param.VisitrecommendationId_param"))
     
 recommendationSQLData = recommendationSQLData.table();
 
-for( let i = 0; i < recommendationSQLData.length; i++)
+for (let i = 0; i < recommendationSQLData.length; i++)
 {
+    if(!helperObj.hasOwnProperty(recommendationSQLData[i][11]))
+    {
+        helperObj[recommendationSQLData[i][11]] = {};
+    }
+    if(!helperObj[recommendationSQLData[i][11]].hasOwnProperty(recommendationSQLData[i][1]))
+    {
+        helperObj[recommendationSQLData[i][11]][recommendationSQLData[i][1]] = "";
+    }
+    
     var prio = ""
     if(recommendationSQLData[i][2])
     {
@@ -73,7 +84,7 @@ for( let i = 0; i < recommendationSQLData.length; i++)
     }    
     else if(recommendationSQLData[i][3])
     {
-        prio = getPrioByDueDate(recommendationSQLData[i][3]);
+        prio = VisitPlanningUtils.getPrioByDueDate(recommendationSQLData[i][3]);
     }    
     else
     {
@@ -103,7 +114,12 @@ for( let i = 0; i < recommendationSQLData.length; i++)
         recommendationSQLData[i][13], //LON.value
         recommendationSQLData[i][14], //LAT.value
         recommendationSQLData[i][15],  //ADDRESS_ID.value
-        AddressUtils.getFormattedOnlineAddressById(recommendationSQLData[i][15]) //ADDRESS_ID.displayValue
+        AddressUtils.getFormattedOnlineAddressById(recommendationSQLData[i][15]), //ADDRESS_ID.displayValue
+        "NEON:CONVERSATION_PLANNING_MANUAL"
+        , ""
+        , ""
+        , ""
+        , ""
         
     ];
 
@@ -111,6 +127,7 @@ for( let i = 0; i < recommendationSQLData.length; i++)
 }
 
 //===========Visitfrequency============
+var weekly = parseInt(datetime.ONE_DAY * 7);
 var monthly = parseInt(datetime.ONE_DAY * 31);
 var semiannually = parseInt(datetime.ONE_DAY * 183);
 var quarterly = parseInt(datetime.ONE_DAY * 93);
@@ -120,28 +137,48 @@ var yearly = parseInt(datetime.ONE_DAY * 365);
 //recommended Organisations containing the attribute Visit Frequency
 if(idValues == false)
 {
+    var sqlHelper = new SqlMaskingUtils();
+    var contactPointSubSelect = "(" + newSelect("CONTACT.CONTACTID")
+                                                .from("CONTACT")
+                                                .leftJoin("AB_ATTRIBUTERELATION", "CONTACT.CONTACTID = AB_ATTRIBUTERELATION.OBJECT_ROWID")
+                                                .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.ORGANISATION_ID", newSelect("CONTACT.ORGANISATION_ID")
+                                                                                        .from("CONTACT")
+                                                                                        .where("CONTACT.CONTACTID = DISTRICTCONTACT.CONTACT_ID"))
+                                                + " " + sqlHelper.limit(1) + ")";
     
-    activitySubQuery = newSelect("max(ENTRYDATE)")
+    activitySubQuery = "(" + newSelect("max(ENTRYDATE)")
                         .from("ACTIVITY")
                         .join("ACTIVITYLINK", "ACTIVITYID = ACTIVITY_ID")
                         .where("ACTIVITYLINK.OBJECT_ROWID = CONTACT.CONTACTID")
-                        .and("ACTIVITY.CATEGORY", "VISIT")
-
+                        .and("ACTIVITY.CATEGORY", "VISIT") + ")";
+    
+    var organisationIdSubSelect = "(" + newSelect("CONTACT.ORGANISATION_ID")
+                                                .from("CONTACT")
+                                                .where("CONTACT.CONTACTID = DISTRICTCONTACT.CONTACT_ID") + ")";
+    
+    var recommendationEntryCountSubSelect = "(" + newSelect("count(VISITPLANENTRYID)")
+                                                    .from("VISITPLANENTRY")
+                                                    .where(newWhere("VISITPLANENTRY.CONTACT_ID = DISTRICTCONTACT.ADVISER_CONTACT_ID ")
+                                                                .or("VISITPLANENTRY.ORGANISATION_CONTACT_ID = DISTRICTCONTACT.ADVISER_CONTACT_ID "))
+                                                    .and(newWhere("VISITPLANENTRY.ENTRYDATE", eMath.subInt(vars.get("$sys.today"), datetime.ONE_DAY * 7), SqlBuilder.LESS_OR_EQUAL())
+                                                    .and("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Visitreportcreated(), SqlBuilder.NOT_EQUAL()))
+                                                    .or("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Visitreportcreated(), SqlBuilder.EQUAL())
+                                            + ") + (" + newSelect("count(VISITRECOMMENDATIONID)")
+                                                    .from("VISITRECOMMENDATION")
+                                                    .where("VISITRECOMMENDATION.RESPONSIBLE = CONTACT.CONTACTID")
+                                                    .or("VISITRECOMMENDATION.CONTACT_ID = CONTACT.CONTACTID") + ")"
+    
     var visitFrequencyData = newSelect(["''"    //0
                                         , "CONTACT.CONTACTID" //1
-                                        , "(" + newSelect("CONTACT.CONTACTID")
-                                                .from("CONTACT")
-                                                .leftJoin("AB_ATTRIBUTERELATION", "CONTACT.CONTACTID = AB_ATTRIBUTERELATION.OBJECT_ROWID")
-                                                .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())
-                                                + 
-                                            ")"            //2
+                                       , contactPointSubSelect
                                         ,"ADDRESS.ADDRESS" //3
                                         ,"ADDRESS.COUNTRY" //4
                                         ,"ADDRESS.ZIP"     //5
                                         ,"ADDRESS.CITY"    //6
-                                        , "visitPlanFrequency.ID_VALUE"//7
+                                        , "DISTRICTCONTACT.VISITFREQUENCY" //7 frequencyIdValue
                                         , activitySubQuery //8
                                         , "org.NAME" //9
                                         , "PERSON.PERSONID" //10
@@ -149,110 +186,110 @@ if(idValues == false)
                                         , "ADDRESS.LON"//11
                                         , "ADDRESS.LAT"//12
                                         , "ADDRESS.ADDRESSID"//13
-                                ])
-                            .from("CONTACT")
+                                        , "DISTRICTCONTACT.ADVISER_CONTACT_ID"//14
+                                        , organisationIdSubSelect//15
+                                        , recommendationEntryCountSubSelect //16
+                                , "DISTRICTCONTACT.ADVISER_ROLE"//17
+                                , KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.adviserRole(), "DISTRICTCONTACT.ADVISER_ROLE")//18
+                                , "DISTRICTCONTACT.DISTRICT_ID"//19
+                                , "DISTRICT.DISTRICT_NAME"])//20
+                            .from("DISTRICTCONTACT")
+                            .join("CONTACT", "DISTRICTCONTACT.CONTACT_ID = CONTACT.CONTACTID")
                             .join("ORGANISATION", "CONTACT.ORGANISATION_ID = org.ORGANISATIONID", "org")
+                            .leftJoin("DISTRICT", "DISTRICTCONTACT.DISTRICT_ID = DISTRICT.DISTRICTID")
                             .leftJoin("PERSON", "PERSON.PERSONID = CONTACT.PERSON_ID")
                             .leftJoin("ADDRESS", "ADDRESS_ID = ADDRESSID")
-                            .join("AB_ATTRIBUTERELATION", "visitPlanFrequency.OBJECT_ROWID = CONTACT.CONTACTID", "visitPlanFrequency")
-                            .where(["AB_ATTRIBUTERELATION", "AB_ATTRIBUTE_ID", "visitPlanFrequency"], $AttributeRegistry.visitPlanFrequency())
-                            .table()
-     
-    for (var i = 0; i < visitFrequencyData.length; i++)
-    {
-        var isPersonContact = visitFrequencyData[i][10] != ""
-        var dueDate = "";
-        var lastVisitDate = "";
-        var today = datetime.date();
-        if((visitFrequencyData[i][8]).length == 0)
-        {
-            dueDate = today;
-        }
-        else
+                            .where("DISTRICTCONTACT.STATUS", $KeywordRegistry.contactStatus$active())
+                            .and("DISTRICTCONTACT.VISITFREQUENCY is not null")
+                            .and("DISTRICTCONTACT.VALID_FROM", vars.get("$sys.date"), SqlBuilder.LESS_OR_EQUAL())
+                            .and(newWhere("DISTRICTCONTACT.VALID_UNTIL", vars.get("$sys.date"), SqlBuilder.GREATER_OR_EQUAL())
+                                    .or("DISTRICTCONTACT.VALID_UNTIL is null"))
+                            .orderBy("(" + newSelect("AB_KEYWORD_ENTRY.SORTING").from("AB_KEYWORD_ENTRY").where("AB_KEYWORD_ENTRY.KEYID = DISTRICTCONTACT.VISITFREQUENCY") + ") desc")
+                            .table();
+        
+        
+        var alreadyRecommended = {}; //orgContactId+contactId
+        for (var i = 0; i < visitFrequencyData.length; i++)
         {
-            lastVisitDate = visitFrequencyData[i][8];
-            switch(visitFrequencyData[i][7])
+            if(!alreadyRecommended.hasOwnProperty(visitFrequencyData[i][1] + visitFrequencyData[i][14]))//orgContactId+contactId
             {
-                case $AttributeRegistry.visitPlanFrequency$monthly():
-                    dueDate = eMath.addInt(lastVisitDate, monthly);
-                    break;
-                case $AttributeRegistry.visitPlanFrequency$quarterly():
-                    dueDate = eMath.addInt(lastVisitDate, quarterly);
-                    break;
-                case $AttributeRegistry.visitPlanFrequency$semiannually():
-                    dueDate = eMath.addInt(lastVisitDate, semiannually);
-                    break;
-                case $AttributeRegistry.visitPlanFrequency$yearly():
-                    dueDate = eMath.addInt(lastVisitDate, yearly);
-                    break;
-                default:
-                    break;
-            }
-        }
-        
-        tmpData = [
-            visitFrequencyData[i][1], //UID.value
-            visitFrequencyData[i][9], //ORGANISATION_NAME.value
-            visitFrequencyData[i][3], //STREET.value
-            visitFrequencyData[i][4], //COUNTRY.value
-            visitFrequencyData[i][5], //ZIP.value
-            visitFrequencyData[i][6], //CITY.value
-            getPrioByDueDate(dueDate), //PRIORITY.value
-            $KeywordRegistry.visitRecommendationPrioSource$visitFrequency(), //PRIORITY_SOURCE.value
-            KeywordUtils.getViewValue($KeywordRegistry.visitRecommendationPriority(), getPrioByDueDate(dueDate)), //PRIORITY.displayValue
-            dueDate, //DUE_DATE.value
-            "", //INFO.value
-            visitFrequencyData[i][1], //CONTACT_ID.value
-            KeywordUtils.getViewValue($KeywordRegistry.visitRecommendationPrioSource(), $KeywordRegistry.visitRecommendationPrioSource$visitFrequency()), //PRIORITY_SOURCE.displayValue
-            "", //USER_NEW.displayValue
-            "", //USER_NEW.value
-            ContactUtils.getFullTitleByContactId(visitFrequencyData[i][1], false), //CONTACT_PERSON_ID.displayValue
-            isPersonContact ? visitFrequencyData[i][1]: "", //CONTACT_PERSON_ID.value
-            "", //RESPONSIBLE.displayValue
-            "", //RESPONSIBLE.value
-            visitFrequencyData[i][11], //LON.value
-            visitFrequencyData[i][12], //LAT.value
-            visitFrequencyData[i][13], //ADDRESS_ID.value
-            AddressUtils.getFormattedOnlineAddressById(visitFrequencyData[i][13]) //ADDRESS_ID.displayValue
+                alreadyRecommended[visitFrequencyData[i][1] + visitFrequencyData[i][14]] = "";//orgContactId+contactId
+                var isPersonContact = visitFrequencyData[i][10] != "";
+                var dueDate = "";
+                var lastVisitDate = "";
+                var today = datetime.date();
+                if((visitFrequencyData[i][8]).length == 0)
+                {
+                    dueDate = today;
+                }
+                else
+                {
+                    lastVisitDate = visitFrequencyData[i][8];
+                    switch(visitFrequencyData[i][7])
+                    {
+                        case $KeywordRegistry.visitFrequency$weekly():
+                            dueDate = eMath.addInt(lastVisitDate, weekly);
+                            break;
+                        case $KeywordRegistry.visitFrequency$monthly():
+                            dueDate = eMath.addInt(lastVisitDate, monthly);
+                            break;
+                        case $KeywordRegistry.visitFrequency$quarterly():
+                            dueDate = eMath.addInt(lastVisitDate, quarterly);
+                            break;
+                        case $KeywordRegistry.visitFrequency$semiannualy():
+                            dueDate = eMath.addInt(lastVisitDate, semiannually);
+                            break;
+                        case $KeywordRegistry.visitFrequency$yearly():
+                            dueDate = eMath.addInt(lastVisitDate, yearly);
+                            break;
+                        default:
+                            break;
+                    }
+                }
 
-        ];
-        
-        
-        var manualRec = newSelect("VISITRECOMMENDATION.VISITRECOMMENDATIONID")
-        .from("VISITRECOMMENDATION")
-        .where("VISITRECOMMENDATION.CONTACT_ID", tmpData[0])
-        .or("VISITRECOMMENDATION.CONTACT_PERSON_ID", tmpData[0])
-        .cell()
-        
-        var visitEntry = newSelect("VISITPLANENTRY.VISITPLANENTRYID")
-        .from("VISITPLANENTRY")
-        .where(newWhere("VISITPLANENTRY.CONTACT_ID", tmpData[0])
-            .or("VISITPLANENTRY.ORGANISATION_CONTACT_ID", tmpData[0]))
-        
-       var visitEntryExists = visitEntry.cell();
-       
-       visitEntry = visitEntry.and(newWhere("VISITPLANENTRY.ENTRYDATE", eMath.subInt(vars.get("$sys.today"), datetime.ONE_DAY * 7), SqlBuilder.LESS_OR_EQUAL())
-            .and("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Visitreportcreated(), SqlBuilder.NOT_EQUAL()))
-            .or("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Visitreportcreated(), SqlBuilder.EQUAL())
-            .cell()
+            tmpData = [
+                util.getNewUUID(), //UID.value
+                visitFrequencyData[i][9], //ORGANISATION_NAME.value
+                visitFrequencyData[i][3], //STREET.value
+                visitFrequencyData[i][4], //COUNTRY.value
+                visitFrequencyData[i][5], //ZIP.value
+                visitFrequencyData[i][6], //CITY.value
+                VisitPlanningUtils.getPrioByDueDate(dueDate), //PRIORITY.value
+                $KeywordRegistry.visitRecommendationPrioSource$visitFrequency(), //PRIORITY_SOURCE.value
+                KeywordUtils.getViewValue($KeywordRegistry.visitRecommendationPriority(), VisitPlanningUtils.getPrioByDueDate(dueDate)), //PRIORITY.displayValue
+                dueDate, //DUE_DATE.value
+                "", //INFO.value
+                visitFrequencyData[i][1], //CONTACT_ID.value
+                KeywordUtils.getViewValue($KeywordRegistry.visitRecommendationPrioSource(), $KeywordRegistry.visitRecommendationPrioSource$visitFrequency()), //PRIORITY_SOURCE.displayValue
+                "", //USER_NEW.displayValue
+                "", //USER_NEW.value
+                ContactUtils.getFullTitleByContactId(visitFrequencyData[i][2], false), //CONTACT_PERSON_ID.displayValue
+                visitFrequencyData[i][2], //CONTACT_PERSON_ID.value
+                ContactUtils.getTitleByContactId(visitFrequencyData[i][14]), //RESPONSIBLE.displayValue
+                visitFrequencyData[i][14], //RESPONSIBLE.value
+                visitFrequencyData[i][11], //LON.value
+                visitFrequencyData[i][12], //LAT.value
+                visitFrequencyData[i][13], //ADDRESS_ID.value
+                AddressUtils.getFormattedOnlineAddressById(visitFrequencyData[i][13]), //ADDRESS_ID.displayValue
+                "NEON:CONVERSATION_PLANNING_FREQUENCY",
+                visitFrequencyData[i][17], //ADVISERROLE.value
+                visitFrequencyData[i][18], //ADVISERROLE.displayvalue
+                visitFrequencyData[i][19],  //district_id.value
+                visitFrequencyData[i][20]  //district_id.value
+            ];
             
-       var prioritySource = vars.get("$param.PrioritySource_param");
-       
-       if(prioritySource != $KeywordRegistry.visitRecommendationPrioSource$manual() && !manualRec) //if manual Record was created, visitfrequency is not relevant
-       {
-           //!visitEntryExists - if no visitplanentry for the organisation/person from recommendation was created -> show recommendation so it can be planned
-           if(!visitEntryExists || visitEntry)
-           {    
+            if(visitFrequencyData[i][16] == 0 && (!helperObj.hasOwnProperty(visitFrequencyData[i][1]) || !helperObj[visitFrequencyData[i][1]].hasOwnProperty(visitFrequencyData[i][14])))
+            {
                recommendationData.push(tmpData);
-           }
-       }
+            }
+        }
     }
 }
 
 var filter = vars.get("$local.filter"); 
 //TODO: this is a workaround that filters the records manually, it should be possible to filter the users with a tools.* method
 var filterFields = ["", "ORGANISATION_NAME", "STREET", "COUNTRY" , "ZIP", "CITY", "PRIORITY", "PRIORITY_SOURCE", "", "DUE_DATE", "INFO", "CONTACT_ID"
-    , "", "", "USER_NEW", "", "CONTACT_PERSON_ID", "", "RESPONSIBLE", "LON", "LAT", "", ""];
+    , "", "", "USER_NEW", "", "CONTACT_PERSON_ID", "", "RESPONSIBLE", "LON", "LAT", "", "", ""];
 var filterFns = {
     "$$$LOOKUPFIELD$$$" : function (pRecordValue, pFilterValue, pOperator, pRow)
     {
@@ -306,38 +343,4 @@ if (!sortOrder.length)
 }    
 
 ArrayUtils.sortMulti(recommendationData, sortOrder);
-result.object(recommendationData);
-
-function getPrioByDueDate(pDueDate)
-{
-    var prio = "";
-    var currentDate = datetime.date();
-    
-    if(pDueDate != "")
-    {
-        var dateDifference = pDueDate - currentDate;
-
-        if(dateDifference < 0)
-        {
-            prio = $KeywordRegistry.visitRecommendationPriority$critical();
-        }    
-        else if(dateDifference < datetime.ONE_DAY * 3)
-        {
-            prio = $KeywordRegistry.visitRecommendationPriority$veryHigh();
-        }    
-        else if(dateDifference < datetime.ONE_DAY * 7)
-        {
-            prio = $KeywordRegistry.visitRecommendationPriority$high();
-        }    
-        else if(dateDifference < datetime.ONE_DAY * 14)
-        {
-            prio = $KeywordRegistry.visitRecommendationPriority$medium();
-        }    
-        else
-        {
-            prio = $KeywordRegistry.visitRecommendationPriority$low();
-        }    
-    }
-    
-    return prio;
-}
\ No newline at end of file
+result.object(recommendationData);
\ No newline at end of file
diff --git a/entity/WorkflowLauncher_entity/entityfields/launchworkflows/stateProcess.js b/entity/WorkflowLauncher_entity/entityfields/launchworkflows/stateProcess.js
index 568ebbfeb58ea45a42785dc853f78056a06201c7..0148a2b2710ef62560f8ba352c19902172137dc5 100644
--- a/entity/WorkflowLauncher_entity/entityfields/launchworkflows/stateProcess.js
+++ b/entity/WorkflowLauncher_entity/entityfields/launchworkflows/stateProcess.js
@@ -1,8 +1,11 @@
 import("system.vars");
 import("system.result");
 import("system.neon");
+import("Util_lib");
 
-result.string(vars.get("$sys.validationerrors") || vars.get("$param.Validationerrors_param") 
+let areEmptyFields = Utils.isNullOrEmpty(vars.get("$field.NAME")) || Utils.isNullOrEmpty(vars.get("$field.KEY"));
+
+result.string(vars.get("$sys.validationerrors") || vars.get("$param.Validationerrors_param") || areEmptyFields
     ? neon.COMPONENTSTATE_DISABLED 
     : neon.COMPONENTSTATE_EDITABLE
 );
\ No newline at end of file
diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
index d90f07cdbf9d3429a81be929767b18e005b5a027..3dd4f20d00985579c0008fef8a46a6c39394c5b8 100644
--- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
+++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
@@ -8731,6 +8731,21 @@
     <entry>
       <key>Exclude existing workflows</key>
     </entry>
+    <entry>
+      <key>Contigent exhausted, please buy some new one to continue</key>
+    </entry>
+    <entry>
+      <key>Processing of the given business card failed.\n Reason: %0</key>
+    </entry>
+    <entry>
+      <key>During processing the given business card an error occured</key>
+    </entry>
+    <entry>
+      <key>Requested business card were already deleted</key>
+    </entry>
+    <entry>
+      <key>Business card recognization</key>
+    </entry>
     <entry>
       <key>Advertising received</key>
     </entry>
@@ -9496,6 +9511,9 @@
     <entry>
       <key>TrueType Font</key>
     </entry>
+    <entry>
+      <key>An error occured while processing the business card.\nPlease contact an administrator.</key>
+    </entry>
     <entry>
       <key>No recipient is marked for test run replacement.</key>
     </entry>
@@ -9604,6 +9622,81 @@
     <entry>
       <key>Unique click rate (in \%)</key>
     </entry>
+    <entry>
+      <key>synchronize Appointment to Plan</key>
+    </entry>
+    <entry>
+      <key>Contacts selected</key>
+    </entry>
+    <entry>
+      <key>%0 companies were newley assigned. \n%1 companies are no longer assigned (these assignments got the status 'review'). \n%4 companies were updated. \n%2 valid assignments were unchanged.\nThe Process took %3 seconds.</key>
+    </entry>
+    <entry>
+      <key>synchronize</key>
+    </entry>
+    <entry>
+      <key>${CHECK SALESPROJECT \"%0\"}</key>
+    </entry>
+    <entry>
+      <key>synchronize Plan to Appointment</key>
+    </entry>
+    <entry>
+      <key>Sunday</key>
+    </entry>
+    <entry>
+      <key>Tuesday</key>
+    </entry>
+    <entry>
+      <key>Thursday</key>
+    </entry>
+    <entry>
+      <key>Friday</key>
+    </entry>
+    <entry>
+      <key>change valid from</key>
+    </entry>
+    <entry>
+      <key>Salesproject: Responsible</key>
+    </entry>
+    <entry>
+      <key>Monday</key>
+    </entry>
+    <entry>
+      <key>change valid to</key>
+    </entry>
+    <entry>
+      <key>Preparation</key>
+    </entry>
+    <entry>
+      <key>Change Validity Dates</key>
+    </entry>
+    <entry>
+      <key>Wednesday</key>
+    </entry>
+    <entry>
+      <key>Saturday</key>
+    </entry>
+    <entry>
+      <key>Processing of the given business card failed.\nReason: %0</key>
+    </entry>
+    <entry>
+      <key>Requested business card were already deleted.</key>
+    </entry>
+    <entry>
+      <key>Appointment Start</key>
+    </entry>
+    <entry>
+      <key>Appointment End</key>
+    </entry>
+    <entry>
+      <key>Contigent exhausted, please buy some new one to continue.</key>
+    </entry>
+    <entry>
+      <key>Appointment Subject</key>
+    </entry>
+    <entry>
+      <key>Open Visitrecommendation</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
   <sqlModels>
diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
index f51889cabccc3a00910c6d81037f546c52be99fe..2f7abb62990cab48f6c91a0fdec3459aada2171c 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -30,6 +30,10 @@
       <key>Event End</key>
       <value>Veranstaltungs Ende</value>
     </entry>
+    <entry>
+      <key>Open Visitrecommendation</key>
+      <value>Offener Besuchsvorschlag</value>
+    </entry>
     <entry>
       <key>Number of openers</key>
       <value>Anzahl Openers</value>
@@ -46,6 +50,10 @@
       <key>Default phone</key>
       <value>Standard Telefon</value>
     </entry>
+    <entry>
+      <key>Preparation</key>
+      <value>Vorbereitung</value>
+    </entry>
     <entry>
       <key>Open Turnover</key>
       <value>Umsatzprognose öffnen</value>
@@ -211,6 +219,22 @@
       <key>Rejected</key>
       <value>Abgelehnt</value>
     </entry>
+    <entry>
+      <key>Change Validity Dates</key>
+      <value>Gültigkeit ändern</value>
+    </entry>
+    <entry>
+      <key>change valid from</key>
+      <value>Gültig ab ändern</value>
+    </entry>
+    <entry>
+      <key>Contacts selected</key>
+      <value>Kontakte ausgewählt</value>
+    </entry>
+    <entry>
+      <key>change valid to</key>
+      <value>Gültig bis ändern</value>
+    </entry>
     <entry>
       <key>Channel type</key>
       <value>Kanalart</value>
@@ -306,6 +330,10 @@
       <key>Checklist entries</key>
       <value>Checklisteneinträge</value>
     </entry>
+    <entry>
+      <key>Monday</key>
+      <value>Montag</value>
+    </entry>
     <entry>
       <key>Organisation: Classification</key>
       <value>Firma: Klassifizierung</value>
@@ -790,6 +818,10 @@
       <key>Bulk mail</key>
       <value>Serienmail</value>
     </entry>
+    <entry>
+      <key>${CHECK SALESPROJECT \"%0\"}</key>
+      <value>Status Vertriebsprojekt \"%0\" prüfen</value>
+    </entry>
     <entry>
       <key>Deletion</key>
       <value>Löschung</value>
@@ -982,6 +1014,10 @@
       <key>Open tasks</key>
       <value>Offene Aufgaben</value>
     </entry>
+    <entry>
+      <key>synchronize Appointment to Plan</key>
+      <value>Daten aus Termin in Planung übernehmen</value>
+    </entry>
     <entry>
       <key>My Forecast</key>
       <value>Mein Forecast</value>
@@ -1697,7 +1733,7 @@
     </entry>
     <entry>
       <key>District</key>
-      <value>Kreis</value>
+      <value>Gebiet</value>
     </entry>
     <entry>
       <key>On Site</key>
@@ -2411,7 +2447,7 @@
     </entry>
     <entry>
       <key>responsible</key>
-      <value>verantwortlich</value>
+      <value>Verantwortlich</value>
     </entry>
     <entry>
       <key>Main document</key>
@@ -3732,10 +3768,6 @@
       <key>Andorra</key>
       <value>Andorra</value>
     </entry>
-    <entry>
-      <key>Last synchronized Reset</key>
-      <value>LastSync zurücksetzen</value>
-    </entry>
     <entry>
       <key>Poland</key>
       <value>Polen</value>
@@ -3744,10 +3776,6 @@
       <key>Event Type</key>
       <value>Veranstaltungs Art</value>
     </entry>
-    <entry>
-      <key>Device ID Reset</key>
-      <value>DeviceID zurücksetzen</value>
-    </entry>
     <entry>
       <key>Tunisia</key>
       <value>Tunesien</value>
@@ -4959,7 +4987,7 @@
     </entry>
     <entry>
       <key>Clear forecast and set state to '%0'?</key>
-      <value>Forecast löschen und status auf '%0' setzen?</value>
+      <value>Prognose löschen und status auf '%0' setzen?</value>
     </entry>
     <entry>
       <key>Would you really like to clear the forecast and set the state to '%0'?</key>
@@ -5017,6 +5045,10 @@
       <key>Completed</key>
       <value>Abgeschlossen</value>
     </entry>
+    <entry>
+      <key>Saturday</key>
+      <value>Samstag</value>
+    </entry>
     <entry>
       <key>In planning</key>
       <value>In Planung</value>
@@ -5757,10 +5789,6 @@
       <key>100 to 199T</key>
       <value>100 bis 199T</value>
     </entry>
-    <entry>
-      <key>AsysAudit Clean Up</key>
-      <value>AsysAudit Aufräumen</value>
-    </entry>
     <entry>
       <key>101 to 250</key>
       <value>101 bis 250</value>
@@ -5789,10 +5817,6 @@
       <key>No date yet</key>
       <value>Noch kein Termin</value>
     </entry>
-    <entry>
-      <key>Device ID</key>
-      <value>Device ID</value>
-    </entry>
     <entry>
       <key>Classifications</key>
       <value>Klassifizierungen</value>
@@ -6159,10 +6183,6 @@
       <key>Interest already assigned to contact</key>
       <value>Interesse bereits mit Kontakt verknüpft</value>
     </entry>
-    <entry>
-      <key>Intervall</key>
-      <value>Intervall</value>
-    </entry>
     <entry>
       <key>Newsfeed (Preview)</key>
       <value>Newsfeed (Vorschau)</value>
@@ -6171,10 +6191,6 @@
       <key>Commodity group A</key>
       <value>Warengruppe A</value>
     </entry>
-    <entry>
-      <key>Intervall Set</key>
-      <value>Intervall setzen</value>
-    </entry>
     <entry>
       <key>Product A1</key>
       <value>Produkt A1</value>
@@ -6931,6 +6947,10 @@
       <key>ORGANISATION_ID</key>
       <value>Firmen ID</value>
     </entry>
+    <entry>
+      <key>Tuesday</key>
+      <value>Dienstag</value>
+    </entry>
     <entry>
       <key>CONTRACTID (UID)</key>
       <value>CONTRACTID (UID)</value>
@@ -9900,6 +9920,10 @@ Bitte Datumseingabe prüfen</value>
       <key>Valid from (as </key>
       <value>gültig ab (in </value>
     </entry>
+    <entry>
+      <key>Sunday</key>
+      <value>Sonntag</value>
+    </entry>
     <entry>
       <key>yellow</key>
       <value>gelb</value>
@@ -10592,10 +10616,6 @@ Bitte Datumseingabe prüfen</value>
       <key>Conversion Rate</key>
       <value>Conversion Rate</value>
     </entry>
-    <entry>
-      <key>Last synchronized</key>
-      <value>zulezt synchronisiert</value>
-    </entry>
     <entry>
       <key>AB_KEYWORD_ENTRYID</key>
       <value>AB_KEYWORD_ENTRYID</value>
@@ -10891,7 +10911,6 @@ Bitte Datumseingabe prüfen</value>
     </entry>
     <entry>
       <key>[TEST] .All</key>
-      <value></value>
     </entry>
     <entry>
       <key>Newsfeed (Complete Article)</key>
@@ -11022,6 +11041,10 @@ Bitte Datumseingabe prüfen</value>
       <key>Salesproject phase</key>
       <value>Vertriebsprojektphase</value>
     </entry>
+    <entry>
+      <key>synchronize</key>
+      <value>Synchronisieren</value>
+    </entry>
     <entry>
       <key>Kontext</key>
     </entry>
@@ -11029,6 +11052,10 @@ Bitte Datumseingabe prüfen</value>
       <key>There are no test recipients.</key>
       <value>Es sind keine Testempfänger eingestellt.</value>
     </entry>
+    <entry>
+      <key>synchronize Plan to Appointment</key>
+      <value>Daten aus Planung in Termin übernehmen</value>
+    </entry>
     <entry>
       <key>Trait</key>
       <value>Merkmal</value>
@@ -11222,8 +11249,8 @@ Bitte Datumseingabe prüfen</value>
       <value>Zuordnung des Gebietes \"%0\" ist abgeschlossen!</value>
     </entry>
     <entry>
-      <key>%0 companies were newley assigned. \n%1 companies are no longer assigned (these assignments got the status 'review'). \n%2 valid assignments were unchanged.\nThe Process took %3 seconds.</key>
-      <value>%0 Firmen wurden neu hinzugefügt. \n %1 Firmen sind nicht länger zugeordnet (diese Zuordnungen wurden auf den Status 'zur Prüfung' gesetzt). \n %2 gültige Zuordnungen blieben unverändert. \n Der Prozess dauert %3 Sekunden. </value>
+      <key>%0 companies were newley assigned. \n%1 companies are no longer assigned (these assignments got the status 'review'). \n%4 companies were updated. \n%2 valid assignments were unchanged.\nThe Process took %3 seconds.</key>
+      <value>%0 Firmen wurden neu hinzugefügt. \n %1 Firmen sind nicht länger zugeordnet (diese Zuordnungen wurden auf den Status 'zur Prüfung' gesetzt). \n %4 Firmen wurden geupdated. \n" %2 gültige Zuordnungen blieben unverändert. \n Der Prozess dauert %3 Sekunden. </value>
     </entry>
     <entry>
       <key>District assignment status</key>
@@ -11261,6 +11288,10 @@ Bitte Datumseingabe prüfen</value>
       <key>My district assignments to check</key>
       <value>Meine zu prüfenden Gebietszuweisungen</value>
     </entry>
+    <entry>
+      <key>Salesproject: Responsible</key>
+      <value>Vertriebsprojekt: Verantwortlich</value>
+    </entry>
     <entry>
       <key>Checklist</key>
       <value>Checkliste</value>
@@ -11331,6 +11362,7 @@ Bitte Datumseingabe prüfen</value>
     </entry>
     <entry>
       <key>Site visit</key>
+      <value>Besuch vor Ort</value>
     </entry>
     <entry>
       <key>Marketing Workflow</key>
@@ -11383,7 +11415,19 @@ Bitte Datumseingabe prüfen</value>
     </entry>
     <entry>
       <key>Status Appointment</key>
-      <value>Status Notification</value>
+      <value>Status Termin</value>
+    </entry>
+    <entry>
+      <key>Appointment Subject</key>
+      <value>Termin Betreff</value>
+    </entry>
+    <entry>
+      <key>Appointment Start</key>
+      <value>Terminbeginn</value>
+    </entry>
+    <entry>
+      <key>Appointment End</key>
+      <value>Terminende</value>
     </entry>
     <entry>
       <key>add  contact to ewssync</key>
@@ -11569,6 +11613,10 @@ Bitte Datumseingabe prüfen</value>
       <key>Add Manual Delete Flag</key>
       <value>Füge manuelles Löschkennzeichen hinzu</value>
     </entry>
+    <entry>
+      <key>Friday</key>
+      <value>Freitag</value>
+    </entry>
     <entry>
       <key>DSGVO Configuration</key>
       <value>DSGVO Konfiguration</value>
@@ -11766,6 +11814,10 @@ Bitte Datumseingabe prüfen</value>
     <entry>
       <key>Redirect</key>
     </entry>
+    <entry>
+      <key>Wednesday</key>
+      <value>Mittwoch</value>
+    </entry>
     <entry>
       <key>Maillog</key>
     </entry>
@@ -11911,8 +11963,12 @@ Bitte Datumseingabe prüfen</value>
       <value>Innerh. des letzten Monats</value>
     </entry>
     <entry>
-      <key>within the next Month</key>
-      <value>Innerh. des nächsten Monats</value>
+      <key>within one Month</key>
+      <value>Innerh. eines Monats</value>
+    </entry>
+    <entry>
+      <key>Valuation</key>
+      <value>Bewertung</value>
     </entry>
     <entry>
       <key>within the next six Months</key>
@@ -11936,7 +11992,7 @@ Bitte Datumseingabe prüfen</value>
     </entry>
     <entry>
       <key>Total of Forecasts</key>
-      <value>Summe der Forecasts</value>
+      <value>Summe der Prognosen</value>
     </entry>
     <entry>
       <key>from Percent</key>
@@ -12245,12 +12301,38 @@ Bitte Datumseingabe prüfen</value>
       <key>increase Priority</key>
       <value>Priorität erhöhen</value>
     </entry>
+    <entry>
+      <key>An error occured while processing the business card.\nPlease contact an administrator.</key>
+      <value>Während der Verarbeitung der Visitenkarte ist ein Fehler aufgetreten.\nBitte kontaktieren Sie einen Administrator.</value>
+    </entry>
+    <entry>
+      <key>Business card recognization</key>
+      <value>Visitenkartenscan</value>
+    </entry>
+    <entry>
+      <key>Processing of the given business card failed.\nReason: %0</key>
+      <value>Verarbeitung der Visitenkarte schlug fehl.\nGrund: %0</value>
+    </entry>
+    <entry>
+      <key>Requested business card were already deleted.</key>
+      <value>Die angefragte Visitenkarte wurde bereits gelöscht.</value>
+    </entry>
+    <entry>
+      <key>Contigent exhausted, please buy some new one to continue.</key>
+      <value>Das Kontigent ist aufgebraucht, bitte laden sie jenes auf um fortzufahren.</value>
+    </entry>
     <entry>
       <key>DSGVO-Anonymisierung</key>
     </entry>
     <entry>
       <key>privat</key>
     </entry>
+    <entry>
+      <key>within the next Month</key>
+    </entry>
+    <entry>
+      <key>DSGVO-Anonymisierung</key>
+    </entry>
     <entry>
       <key>During processing the e-mail an error has occurred.\n Please contact an administrator</key>
     </entry>
@@ -12294,6 +12376,10 @@ Bitte Datumseingabe prüfen</value>
       <key>Bzip2 Archive</key>
       <value>Bzip2 Archiv</value>
     </entry>
+    <entry>
+      <key>Thursday</key>
+      <value>Donnerstag</value>
+    </entry>
     <entry>
       <key>C Shell Script</key>
       <value>C Shell Skript</value>
@@ -12578,6 +12664,26 @@ Bitte Datumseingabe prüfen</value>
     <entry>
       <key>Remove recipients with communication rejection</key>
     </entry>
+    <entry>
+      <key>%0 companies were newley assigned. \n%1 companies are no longer assigned (these assignments got the status 'review'). \n%2 valid assignments were unchanged.\nThe Process took %3 seconds.</key>
+      <value>%0 Firmen wurden neu zugewiesen. \n%1 Firmen sind nicht länger zugewiesen (diese Zuweisungen haben den Status 'in Prüfung' erhalten). \n%2 gültige Zuweisungen blieben unverändert.\nDer Prozess brauchte %3 seconds.</value>
+    </entry>
+    <entry>
+      <key>Contigent exhausted, please buy some new one to continue</key>
+    </entry>
+    <entry>
+      <key>Processing of the given business card failed.\n Reason: %0</key>
+    </entry>
+    <entry>
+      <key>During processing the given business card an error occured</key>
+    </entry>
+    <entry>
+      <key>Requested business card were already deleted</key>
+    </entry>
+    <entry>
+      <key>Calling the abbyy webservice failed</key>
+      <value>Das Aufrufen des Abbyy Webservices schlug fehl</value>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
index bcd239647a5472e2c26a46200e8efb00e596650d..22c9e61ed915116f0d4882cb5f1637b02db302e9 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -31,6 +31,10 @@
       <key>${DISPLAY_AND_OPEN_ONE_HIT}</key>
       <value>One result is displayed and will be opened.</value>
     </entry>
+    <entry>
+      <key>${CHECK SALESPROJECT \"%0\"}</key>
+      <value>check status sales project \"%0\</value>
+    </entry>
     <entry>
       <key>Male</key>
     </entry>
@@ -8849,6 +8853,21 @@
     <entry>
       <key>Exclude existing workflows</key>
     </entry>
+    <entry>
+      <key>Contigent exhausted, please buy some new one to continue</key>
+    </entry>
+    <entry>
+      <key>Processing of the given business card failed.\n Reason: %0</key>
+    </entry>
+    <entry>
+      <key>During processing the given business card an error occured</key>
+    </entry>
+    <entry>
+      <key>Requested business card were already deleted</key>
+    </entry>
+    <entry>
+      <key>Business card recognization</key>
+    </entry>
     <entry>
       <key>Target Amount</key>
     </entry>
@@ -9377,6 +9396,9 @@
     <entry>
       <key>Set workflow for selected e-mail filter</key>
     </entry>
+    <entry>
+      <key>An error occured while processing the business card.\nPlease contact an administrator.</key>
+    </entry>
     <entry>
       <key>GDPR-anonymization</key>
     </entry>
@@ -9392,6 +9414,12 @@
     <entry>
       <key>C Shell Script</key>
     </entry>
+    <entry>
+      <key>within one Month</key>
+    </entry>
+    <entry>
+      <key>Valuation</key>
+    </entry>
     <entry>
       <key>CMX Image</key>
     </entry>
@@ -9692,6 +9720,78 @@
     <entry>
       <key>Unique click rate (in \%)</key>
     </entry>
+    <entry>
+      <key>synchronize Appointment to Plan</key>
+    </entry>
+    <entry>
+      <key>Contacts selected</key>
+    </entry>
+    <entry>
+      <key>%0 companies were newley assigned. \n%1 companies are no longer assigned (these assignments got the status 'review'). \n%4 companies were updated. \n%2 valid assignments were unchanged.\nThe Process took %3 seconds.</key>
+    </entry>
+    <entry>
+      <key>synchronize</key>
+    </entry>
+    <entry>
+      <key>synchronize Plan to Appointment</key>
+    </entry>
+    <entry>
+      <key>Sunday</key>
+    </entry>
+    <entry>
+      <key>Tuesday</key>
+    </entry>
+    <entry>
+      <key>Thursday</key>
+    </entry>
+    <entry>
+      <key>Friday</key>
+    </entry>
+    <entry>
+      <key>change valid from</key>
+    </entry>
+    <entry>
+      <key>Salesproject: Responsible</key>
+    </entry>
+    <entry>
+      <key>Monday</key>
+    </entry>
+    <entry>
+      <key>change valid to</key>
+    </entry>
+    <entry>
+      <key>Preparation</key>
+    </entry>
+    <entry>
+      <key>Change Validity Dates</key>
+    </entry>
+    <entry>
+      <key>Wednesday</key>
+    </entry>
+    <entry>
+      <key>Saturday</key>
+    </entry>
+    <entry>
+      <key>Processing of the given business card failed.\nReason: %0</key>
+    </entry>
+    <entry>
+      <key>Requested business card were already deleted.</key>
+    </entry>
+    <entry>
+      <key>Appointment Start</key>
+    </entry>
+    <entry>
+      <key>Appointment End</key>
+    </entry>
+    <entry>
+      <key>Contigent exhausted, please buy some new one to continue.</key>
+    </entry>
+    <entry>
+      <key>Appointment Subject</key>
+    </entry>
+    <entry>
+      <key>Open Visitrecommendation</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/neonContext/DistrictChangeValidityDates/DistrictChangeValidityDates.aod b/neonContext/DistrictChangeValidityDates/DistrictChangeValidityDates.aod
new file mode 100644
index 0000000000000000000000000000000000000000..66ffda8fd3e09d641876b415f971776b69ef15c2
--- /dev/null
+++ b/neonContext/DistrictChangeValidityDates/DistrictChangeValidityDates.aod
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>DistrictChangeValidityDates</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <editView>DistrictChangeValidityDatesEdit_view</editView>
+  <entity>DistrictChangeValidityDates_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>dfd06082-1915-493f-9786-00b39ac8b3a0</name>
+      <view>DistrictChangeValidityDatesEdit_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonView/AddressLookup_view/AddressLookup_view.aod b/neonView/AddressLookup_view/AddressLookup_view.aod
index dc7bde3fd3d4439ea589e6f003a24c0852c3bf76..73512f5a9f1c720a78bad28ed8f7dc1cd20147a9 100644
--- a/neonView/AddressLookup_view/AddressLookup_view.aod
+++ b/neonView/AddressLookup_view/AddressLookup_view.aod
@@ -21,40 +21,8 @@
           <entityField>ADDR_TYPE</entityField>
         </neonTableColumn>
         <neonTableColumn>
-          <name>570039fc-c27a-4b06-a93e-16cc712a3d0c</name>
-          <entityField>ADDRESS</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>26ca52ce-91e7-4e76-a37e-6db28b967beb</name>
-          <entityField>BUILDINGNO</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>a54d6306-e9be-41db-9d1c-abeebe5ce77b</name>
-          <entityField>ZIP</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>6a07479c-b4d3-4946-993e-e6ce7dd825ba</name>
-          <entityField>CITY</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>e6d9ced9-eea3-4cdf-9751-74c8f206282f</name>
-          <entityField>COUNTRY</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>820b6ffc-7e56-4982-8f39-4443b0ada876</name>
-          <entityField>STATE</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>9651a718-ab01-4c97-8da0-6e7133f26466</name>
-          <entityField>REGION</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>9a5b1c97-c2b5-4f3a-b845-7cf56c0cb4eb</name>
-          <entityField>ADDRESSADDITION</entityField>
-        </neonTableColumn>
-        <neonTableColumn>
-          <name>24f73ac8-ac90-4beb-83fe-bdaa2d0806b6</name>
-          <entityField>ADDRIDENTIFIER</entityField>
+          <name>dbe3adfa-a299-423d-a006-336fb24556ae</name>
+          <entityField>contentTitle</entityField>
         </neonTableColumn>
       </columns>
     </tableViewTemplate>
diff --git a/neonView/BulkMailFilter_view/BulkMailFilter_view.aod b/neonView/BulkMailFilter_view/BulkMailFilter_view.aod
index 236b5f911b1fa5e028ac277da32adccd104a4160..46a912f4f9043d72cf4f618ca5a4dcb87ef47b58 100644
--- a/neonView/BulkMailFilter_view/BulkMailFilter_view.aod
+++ b/neonView/BulkMailFilter_view/BulkMailFilter_view.aod
@@ -28,21 +28,28 @@
     </neonDashletConfiguration>
   </dashletConfigurations>
   <layout>
-    <boxLayout>
+    <groupLayout>
       <name>layout</name>
-    </boxLayout>
+    </groupLayout>
   </layout>
   <children>
     <tableViewTemplate>
       <name>Table</name>
       <iconField>ICON</iconField>
       <titleField>NAME</titleField>
-      <subtitleField>SUBJECT</subtitleField>
+      <subtitleField>STATUS</subtitleField>
       <descriptionField>DESCRIPTION</descriptionField>
       <entityField>#ENTITY</entityField>
+      <favoriteActionGroup1>observeActionoGroup</favoriteActionGroup1>
       <linkedColumns>
         <element>NAME</element>
       </linkedColumns>
+      <devices>
+        <element>MOBILE</element>
+        <element>TABLET</element>
+        <element>DESKTOP</element>
+      </devices>
+      <informationField>DESCRIPTION</informationField>
       <columns>
         <neonTableColumn>
           <name>55e87c01-8848-494c-9fa6-e6fa401023d1</name>
@@ -60,6 +67,10 @@
           <name>735b4d0d-3730-4bd4-bf29-a3651b5e1e3c</name>
           <entityField>STATUS</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>b3ecda59-3ca2-426e-9a31-f94b60848fe2</name>
+          <entityField>INTEREST_ID</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>6bb9e1df-af54-45a5-a9b5-69bfe45e3491</name>
           <entityField>DOCUMENTTEMPLATE_ID</entityField>
@@ -68,7 +79,93 @@
           <name>d8f9dce6-8c10-4235-b3c3-2d15d01586bc</name>
           <entityField>DESCRIPTION</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>f8f3ad38-e353-4d25-876d-f4500235c9ac</name>
+          <entityField>DATE_EDIT</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>39ec7935-15d5-4105-a528-b6a592a34272</name>
+          <entityField>USER_EDIT</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>f15736a2-cead-48b1-ba5f-6b59960e8602</name>
+          <entityField>firstSendDate</entityField>
+        </neonTableColumn>
       </columns>
     </tableViewTemplate>
+    <treeTableViewTemplate>
+      <name>TreeTable</name>
+      <favoriteActionGroup1>observeActionoGroup</favoriteActionGroup1>
+      <linkedColumns>
+        <element>NAME</element>
+      </linkedColumns>
+      <devices>
+        <element>TABLET</element>
+        <element>DESKTOP</element>
+      </devices>
+      <columns>
+        <neonTreeTableColumn>
+          <name>8b4355ec-b4f1-4224-b21c-2fc279294306</name>
+          <entityField>ICON</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>d12b84ca-f59e-4f84-be6d-643e3eacd1b1</name>
+          <entityField>NAME</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>cbe4e32a-8376-4463-906a-b3735858e0b0</name>
+          <entityField>SUBJECT</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>082ad0f3-3471-4621-941d-27e2974d1fd0</name>
+          <entityField>STATUS</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>6d5b98a5-f466-48a9-b1ef-5a7374154d1d</name>
+          <entityField>INTEREST_ID</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>7ad055c2-2adf-4ea1-b2bb-b4f4cbdc643f</name>
+          <entityField>DOCUMENTTEMPLATE_ID</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>820a8174-e95f-4394-b62a-299ac9c7eddf</name>
+          <entityField>DESCRIPTION</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>761af530-f8c5-4465-93a1-c584b4d5cfcb</name>
+          <entityField>DATE_EDIT</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>72074419-3f7c-476b-90d4-93e1f48c5a2d</name>
+          <entityField>USER_EDIT</entityField>
+        </neonTreeTableColumn>
+      </columns>
+    </treeTableViewTemplate>
+    <dynamicMultiDataChartViewTemplate>
+      <name>DynamicMultiDataChart</name>
+      <chartType>COLUMN</chartType>
+      <yAxisLabel>Count</yAxisLabel>
+      <informationField>DESCRIPTION</informationField>
+      <devices>
+        <element>MOBILE</element>
+        <element>TABLET</element>
+        <element>DESKTOP</element>
+      </devices>
+      <columns>
+        <neonDynamicMultiDataChartColumn>
+          <name>08c4988a-0d2e-4f46-81f3-8cb472ec5a77</name>
+          <entityField>recipientCount</entityField>
+        </neonDynamicMultiDataChartColumn>
+        <neonDynamicMultiDataChartColumn>
+          <name>75b4645a-2494-4558-b7cb-21693c871918</name>
+          <entityField>deliveredMailCount</entityField>
+        </neonDynamicMultiDataChartColumn>
+        <neonDynamicMultiDataChartColumn>
+          <name>bf2e8e1b-3628-454a-8250-307455efa755</name>
+          <entityField>bounceCount</entityField>
+        </neonDynamicMultiDataChartColumn>
+      </columns>
+    </dynamicMultiDataChartViewTemplate>
   </children>
 </neonView>
diff --git a/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod b/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod
index 9a437afea6c159960b042acf5d95f5d049b1928c..ed0e84a4567243cf502bd67ae9cb749a3fd78e95 100644
--- a/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod
+++ b/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod
@@ -30,10 +30,6 @@
           <name>a3b4429d-9d40-4057-9df3-7bcbb1664853</name>
           <entityField>CLASSIFICATIONGROUPDISPLAYVALUE</entityField>
         </entityFieldLink>
-        <entityFieldLink>
-          <name>5493520c-27d9-4333-a804-02c07b0b0747</name>
-          <entityField>SORTING</entityField>
-        </entityFieldLink>
         <entityFieldLink>
           <name>502ba6a6-f3bd-4c10-80a5-d6c779b9adb1</name>
           <entityField>CLASSIFICATIONTYPEID</entityField>
diff --git a/neonView/DistrictChangeValidityDatesEdit_view/DistrictChangeValidityDatesEdit_view.aod b/neonView/DistrictChangeValidityDatesEdit_view/DistrictChangeValidityDatesEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..44c7f38f6bbd84eafd3e1e2c0d79d051e96ac52a
--- /dev/null
+++ b/neonView/DistrictChangeValidityDatesEdit_view/DistrictChangeValidityDatesEdit_view.aod
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>DistrictChangeValidityDatesEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+      <header>ChangeValidityInfoScore</header>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <scoreCardViewTemplate>
+      <name>ChangeValidityInfoScore</name>
+      <fields>
+        <entityFieldLink>
+          <name>ee6e7ab0-4d00-43b8-9211-0b0ce5f0b4f5</name>
+          <entityField>count</entityField>
+        </entityFieldLink>
+      </fields>
+    </scoreCardViewTemplate>
+    <genericViewTemplate>
+      <name>generic</name>
+      <editMode v="true" />
+      <hideEmptyFields v="false" />
+      <fields>
+        <entityFieldLink>
+          <name>e544cc0c-7406-4636-8a55-880cde5946e5</name>
+          <entityField>setValid_from</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>6b44563f-4a3e-4e0f-b5b2-6fd8b34901b8</name>
+          <entityField>VALID_FROM</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>f5b78f2a-f330-4b3b-83c1-848958b26498</name>
+          <entityField>setValid_until</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>2e656c8e-25f9-4193-a50f-71d937764c0a</name>
+          <entityField>VALID_UNTIL</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/DistrictContactFilter_view/DistrictContactFilter_view.aod b/neonView/DistrictContactFilter_view/DistrictContactFilter_view.aod
index 895e75a331e52310b29f0dda25077e587ee026a3..f56053234861171130b1b185e633fabdaf8018af 100644
--- a/neonView/DistrictContactFilter_view/DistrictContactFilter_view.aod
+++ b/neonView/DistrictContactFilter_view/DistrictContactFilter_view.aod
@@ -33,7 +33,7 @@
     <tableViewTemplate>
       <name>districtContacts</name>
       <entityField>#ENTITY</entityField>
-      <favoriteActionGroup1>setStatus</favoriteActionGroup1>
+      <favoriteActionGroup1>filterViewActionGroup</favoriteActionGroup1>
       <linkedColumns />
       <fixedFilterFields />
       <columns>
@@ -81,7 +81,7 @@
     </tableViewTemplate>
     <treeTableViewTemplate>
       <name>treeTable</name>
-      <favoriteActionGroup1>setStatus</favoriteActionGroup1>
+      <favoriteActionGroup1>filterViewActionGroup</favoriteActionGroup1>
       <columns>
         <neonTreeTableColumn>
           <name>ec17e766-8d06-46dd-a09f-7e5ce5a379e9</name>
diff --git a/neonView/MemberEdit_view/MemberEdit_view.aod b/neonView/MemberEdit_view/MemberEdit_view.aod
index 43d3a631e3921c84af80260fe02b09d2d5282660..316e91b9b300c9bbac0cd91d95b848334d04bba4 100644
--- a/neonView/MemberEdit_view/MemberEdit_view.aod
+++ b/neonView/MemberEdit_view/MemberEdit_view.aod
@@ -28,6 +28,10 @@
           <name>d0a21896-bc64-479b-a6f4-5696a90279ca</name>
           <entityField>ONSITE</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>721b06e2-cf1f-4356-a2b9-5640aded923f</name>
+          <entityField>RESPONSIBLE</entityField>
+        </entityFieldLink>
       </fields>
     </genericViewTemplate>
   </children>
diff --git a/neonView/MemberFilter_view/MemberFilter_view.aod b/neonView/MemberFilter_view/MemberFilter_view.aod
index 52aed59f96eaef6f02026543abece55c8d686cf1..7ff52f9d51263e970b138522dc2327b62453023e 100644
--- a/neonView/MemberFilter_view/MemberFilter_view.aod
+++ b/neonView/MemberFilter_view/MemberFilter_view.aod
@@ -14,7 +14,7 @@
       <iconField>IMAGE</iconField>
       <titleField>PERSON_FULL_NAME</titleField>
       <subtitleField>CONTACTROLE</subtitleField>
-      <descriptionField>ORGANISATION_NAME</descriptionField>
+      <descriptionField>ORGANISATION_CONTACT_ID</descriptionField>
       <entityField>#ENTITY</entityField>
       <favoriteActionGroup1></favoriteActionGroup1>
       <favoriteActionGroup2>MSTeamsActionGroup</favoriteActionGroup2>
@@ -30,8 +30,8 @@
           <entityField>CONTACT_ID</entityField>
         </neonTableColumn>
         <neonTableColumn>
-          <name>27e658bc-c134-4fef-a3a5-b172852d606e</name>
-          <entityField>ORGANISATION_NAME</entityField>
+          <name>944ef388-6d8d-4f2a-a88d-20fa5ed87c32</name>
+          <entityField>ORGANISATION_CONTACT_ID</entityField>
         </neonTableColumn>
         <neonTableColumn>
           <name>a30a083a-be66-4690-a7b6-19860a9bc72e</name>
@@ -76,8 +76,8 @@
           <entityField>CONTACT_ID</entityField>
         </neonTreeTableColumn>
         <neonTreeTableColumn>
-          <name>22eb0efc-61b3-48fe-989d-2dd4e70ea780</name>
-          <entityField>ORGANISATION_NAME</entityField>
+          <name>1f84e2aa-ffd7-4254-81b2-6eaf14770650</name>
+          <entityField>ORGANISATION_CONTACT_ID</entityField>
         </neonTreeTableColumn>
         <neonTreeTableColumn>
           <name>7d5b671c-af93-416c-b774-bd2bc671f048</name>
diff --git a/neonView/QuickEntryEdit_view/QuickEntryEdit_view.aod b/neonView/QuickEntryEdit_view/QuickEntryEdit_view.aod
index 972bd61c3ea5cdba8aca50db6d37206bb554935c..3ea17cd91d92f9f7d1aed11001128d24bff4a091 100644
--- a/neonView/QuickEntryEdit_view/QuickEntryEdit_view.aod
+++ b/neonView/QuickEntryEdit_view/QuickEntryEdit_view.aod
@@ -40,6 +40,10 @@
           <name>fcacb261-618e-4b82-9b14-8080b0271955</name>
           <entityField>ORGANISATION_NAME</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>467dc8ce-deeb-4b8c-9300-5e14f04d89ef</name>
+          <entityField>businessCardErrMsg</entityField>
+        </entityFieldLink>
         <entityFieldLink>
           <name>f9fa7ed7-0cb5-45b8-a7ab-baa486685e5e</name>
           <entityField>ISOLANGUAGE</entityField>
diff --git a/neonView/VisitPlanEntryFilter_view/VisitPlanEntryFilter_view.aod b/neonView/VisitPlanEntryFilter_view/VisitPlanEntryFilter_view.aod
index b2d9755026985e22cdd2d98d72430e9654559461..f1cdbf89af4b840ecba70eeba522100e7f9f39eb 100644
--- a/neonView/VisitPlanEntryFilter_view/VisitPlanEntryFilter_view.aod
+++ b/neonView/VisitPlanEntryFilter_view/VisitPlanEntryFilter_view.aod
@@ -38,7 +38,9 @@
       <name>TreeTable</name>
       <parentField>PARENT_ID</parentField>
       <entityField>#ENTITY</entityField>
-      <favoriteActionGroup1>entityActionGroup</favoriteActionGroup1>
+      <favoriteActionGroup1>ActionGroupOpenDayRoute</favoriteActionGroup1>
+      <favoriteActionGroup2></favoriteActionGroup2>
+      <favoriteActionGroup3>sync</favoriteActionGroup3>
       <defaultGroupFields>
         <element>ENTRYDATE</element>
       </defaultGroupFields>
@@ -47,6 +49,10 @@
           <name>d728f2d9-c223-47fd-9372-6f49203f68fd</name>
           <entityField>PARENTNAME</entityField>
         </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>d793ed79-daeb-43ad-813e-a0a33fb5cab0</name>
+          <entityField>syncIcon</entityField>
+        </neonTreeTableColumn>
         <neonTreeTableColumn>
           <name>860f55a7-8153-4744-b664-73016719cbe1</name>
           <entityField>BEGIN_TIME</entityField>
@@ -71,6 +77,22 @@
           <name>c3110972-795b-4293-b082-8f8bee1aa2ec</name>
           <entityField>STATUS_APPOINTMENT</entityField>
         </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>4dce0e15-4980-45fd-8783-a40a29c8370e</name>
+          <entityField>APPOINTMENT_BEGIN_TIME</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>1c2a3db8-370f-4dfe-84cf-c7a2282ad977</name>
+          <entityField>APPOINTMENT_END_TIME</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>6592f911-c5b0-4e83-8c13-9ede740c1ede</name>
+          <entityField>APPOINTMENT_STATUS</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>7b83c44e-631b-4b7b-aca1-70f24911f74d</name>
+          <entityField>APPOINTMENT_SUBJECT</entityField>
+        </neonTreeTableColumn>
       </columns>
     </treeTableViewTemplate>
   </children>
diff --git a/neonView/VisitPlanEntryPreview_view/VisitPlanEntryPreview_view.aod b/neonView/VisitPlanEntryPreview_view/VisitPlanEntryPreview_view.aod
index e2fd831a5b92ff7d9618b2b301dada6c12056bd9..0b2a8cbf5abc1af5306a0ca7d03a5dc2518e7a94 100644
--- a/neonView/VisitPlanEntryPreview_view/VisitPlanEntryPreview_view.aod
+++ b/neonView/VisitPlanEntryPreview_view/VisitPlanEntryPreview_view.aod
@@ -25,6 +25,10 @@
           <name>e8950f3a-edbc-4e30-8c01-aa546195317d</name>
           <entityField>CONTACT_ID</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>ea7d538f-9758-4f02-9e39-1b18c6d69cf1</name>
+          <entityField>APPOINTMENT_ID</entityField>
+        </entityFieldLink>
         <entityFieldLink>
           <name>535ebb8b-20d5-43c0-84dd-c4494e6edad9</name>
           <entityField>ENTRYDATE</entityField>
diff --git a/neonView/VisitRecommendationFilter_view/VisitRecommendationFilter_view.aod b/neonView/VisitRecommendationFilter_view/VisitRecommendationFilter_view.aod
index eb87ad0eee7e0d73546dfcc4bcf0f8047cc73458..7d56aaf9f5977da2efd9630433e3983964411e3e 100644
--- a/neonView/VisitRecommendationFilter_view/VisitRecommendationFilter_view.aod
+++ b/neonView/VisitRecommendationFilter_view/VisitRecommendationFilter_view.aod
@@ -69,6 +69,14 @@
           <name>e11dc9c2-73fe-4b21-96cb-01bbe69f6bd7</name>
           <entityField>INFO</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>d653dbda-480f-4343-96c6-9d4135ef8af7</name>
+          <entityField>DISTRICT_ID</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>67950325-b451-4b6c-858e-8ef335c515ae</name>
+          <entityField>ADVISERROLE</entityField>
+        </neonTableColumn>
       </columns>
     </tableViewTemplate>
     <treeTableViewTemplate>
@@ -128,6 +136,14 @@
           <name>2fa2eb56-28ec-4bdc-a1ff-1ca0e26ab407</name>
           <entityField>INFO</entityField>
         </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>1c928a99-8524-4f30-b932-6d7e9626f5fd</name>
+          <entityField>DISTRICT_ID</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>a1cc1e2f-79fa-4919-83fe-354033c12b32</name>
+          <entityField>ADVISERROLE</entityField>
+        </neonTreeTableColumn>
       </columns>
     </treeTableViewTemplate>
     <mapViewTemplate>
diff --git a/process/ActivityTask_lib/process.js b/process/ActivityTask_lib/process.js
index 2dccb611f41eb09a98eadc248c586feb100d2b50..722d202ca01ad29224b88d4917f703b5b0a03065 100644
--- a/process/ActivityTask_lib/process.js
+++ b/process/ActivityTask_lib/process.js
@@ -831,6 +831,109 @@ TaskUtils.getEndedStatuses = function()
     return [$KeywordRegistry.taskStatus$ended(), $KeywordRegistry.taskStatus$endedDone(), $KeywordRegistry.taskStatus$endedAbandoned()]
 }
 
+/**
+ * Create a new activity within the database-scope.
+ * This funciton will insert a complete new activity into the database.
+ * 
+ * @param {Object} pDataPreset={} (optional)    <p>
+ *                                              An object that contains the data for the activity, you <br>
+ *                                              do not need to specify any preset data at all, <br>
+ *                                              but some have presetValues that get filled)while others will be left empty if you don't specify define the properties yourself:<br>
+ *                                              (Preset values in Brackets)<br> 
+ *                                              <ul>
+ *                                              <li>taskId(newUUId)</li>
+ *                                              <li>requestorContactId(currentUserContactId)</li>
+ *                                              <li>editorContactId(currentUserContactId)</li>
+ *                                              <li>startDate(today)</li>
+ *                                              <li>marturityDate(startDate)</li>
+ *                                              <li>subject("ToDo")</li>
+ *                                              <li>priority($KeywordRegistry.taskPriority$medium())</li>
+ *                                              <li>progress($KeywordRegistry.taskProgress$0())</li>
+ *                                              <li>status($KeywordRegistry.taskStatus$assigned())</li>
+ *                                              <li>protectionlevel(0)</li>
+ *                                              <li>parentContext</li>
+ *                                              <li>parentId</li>
+ *                                              <li>description</li>
+ *                                              </ul>
+ * @param {Array} pTaskLinks (optional)     <p>
+ *                                              2D array where each element is an array of<br>
+ *                                              context name and objectid, for example:
+ *                                              <br><pre>[["Organisation", 
+ *                                              "2d1e505c-a75a-4fa6-826b-7224a97d5b51"]]</pre>
+ * @param {String} pDbAlias (optional)          <p>
+ *                                              Database alias where the task shall be inserted.<br>
+ *                                              If no one is explicit given, it takes the current one.
+ * @return {Object}                             <p>
+ *                                              Object where the following are filled:
+ *                                              <ul>
+ *                                              <li>activityId</li>
+ *                                              </ul>
+ */
+TaskUtils.createNewTaskSilent = function(pDataPreset, pTaskLinks, pDbAlias)
+{
+    var dataPreset = pDataPreset || {};
+    var dbAlias = pDbAlias || db.getCurrentAlias();
+    var insertStatements = [];
+    
+    var requestorContactId = dataPreset.requestorContactId || vars.get("$sys.user");
+    var editorContactId = dataPreset.editorContactId || vars.get("$sys.user");
+    var subject = dataPreset.subject || "ToDo";
+    var progress = dataPreset.progress || $KeywordRegistry.taskProgress$0();
+    var status = dataPreset.status || $KeywordRegistry.taskStatus$assigned();
+    var priority = dataPreset.priority || $KeywordRegistry.taskPriority$medium();
+    var protectionlevel = dataPreset.protectionlevel || 0;
+    var taskId = dataPreset.taskId || util.getNewUUID();
+    var startDate = dataPreset.startDate || datetime.date();
+    var marturityDate = dataPreset.marturityDate || marturityDate;
+    
+    var fieldValues = {
+        "TASKID": taskId
+        , "REQUESTOR_CONTACT_ID": requestorContactId
+        , "EDITOR_CONTACT_ID": editorContactId
+        ,  "START_DATE": startDate
+        ,  "SUBJECT": subject
+        , "PROGRESS": progress
+        , "STATUS": status
+        , "KIND": "TASK"
+        , "PRIORITY": priority
+        , "MATURITY_DATE": marturityDate
+        , "PROTECTIONLEVEL": "" + protectionlevel}
+
+    if(dataPreset.parentContext)
+    {
+        taskValues["PARENT_CONTEXT"] = dataPreset.parentContext
+    }
+    if(dataPreset.parentId)
+    {
+        taskValues["PARENT_ID"] = dataPreset.parentId
+    }
+    if(dataPreset.description)
+    {
+        taskValues["DESCRIPTION"] = dataPreset.description
+    }
+    
+    
+    insertStatements.push(new SqlBuilder().buildInsertStatement(fieldValues, "TASK"));
+    
+    if (pTaskLinks)
+    {
+        for (var i = 0, l = pTaskLinks.length; i < l; i++)
+        {
+            insertStatements.push(new SqlBuilder().buildInsertStatement({"TASKLINKID": util.getNewUUID()
+                                                                        , "TASK_ID": taskId
+                                                                        , "OBJECT_TYPE": pTaskLinks[i][0]
+                                                                        , "OBJECT_ROWID": pTaskLinks[i][1]}, "TASKLINK"));
+        }
+    }
+    
+    db.execute(insertStatements, dbAlias);
+
+    return {
+        taskId: taskId
+    };
+};
+
+
 /**
  * Methods used by for tasks.
  * <b><u>Do not create an instance of this!</u></b>
diff --git a/process/Appointment_lib/process.js b/process/Appointment_lib/process.js
index db2af54d0851e8c93d6d63881f8b8310b336feac..309d0782cbe074611e4c1365caa043e2b9f5909e 100644
--- a/process/Appointment_lib/process.js
+++ b/process/Appointment_lib/process.js
@@ -1,3 +1,4 @@
+import("system.translate");
 import("system.vars");
 import("system.tools");
 import("Calendar_lib");
@@ -167,4 +168,39 @@ AppointmentUtils.setAppointmentLinkComponentState = function(pSysRecordstate, pA
         return neon.COMPONENTSTATE_EDITABLE
     else
         return neon.COMPONENTSTATE_DISABLED;
+}
+
+/*
+ * returns displayvalue from appointmentstatus
+ * 
+ * @param {String} pStatus statusvalue (CONFIRMED, BUSY, CANCELLED, OOF, FREE)
+ * 
+ * @return {String} status displayvalue 
+ **/
+AppointmentUtils.getAppointmentStatusDisplayValue = function(pStatus)
+{
+    var res = "";
+    
+    switch(pStatus)
+    {
+        case "CONFIRMED":
+        case "BUSY":
+            res = translate.text("Confirmed")
+            break;
+        case "CANCELLED":
+            res = translate.text("Cancelled")
+            break;
+        case "TENTATIVE":
+            res = translate.text("Tentative")
+            break;
+        case "OOF":
+            res = translate.text("OutOfOffice")
+            break;
+        case "FREE":
+            res = translate.text("Free")
+            break;
+        default:
+            break;
+    }
+    return res;
 }
\ No newline at end of file
diff --git a/process/Attribute_lib/process.js b/process/Attribute_lib/process.js
index ebdf501b1f03cd3bc11bdc5452de959587bb2222..9fc76049aec9ea97fe2f384d88a3f9affb16cb9f 100644
--- a/process/Attribute_lib/process.js
+++ b/process/Attribute_lib/process.js
@@ -1,3 +1,4 @@
+import("Entity_lib");
 import("Contact_lib");
 import("Util_lib");
 import("Employee_lib");
diff --git a/process/Binary_lib/process.js b/process/Binary_lib/process.js
index 64a4248d912b75af1cc439a0229441112876ad7c..42b5c995df062c2a7b73c1debe868ce148ff2d5b 100644
--- a/process/Binary_lib/process.js
+++ b/process/Binary_lib/process.js
@@ -69,23 +69,25 @@ function SingleBinaryUtils() {}
  * @param {String} pAssignmentRowId                         <p>
  *                                                          The row id.<br>
  *                                                          (e.g.: UUID of the record)<br>
- * @param {String} pAlias=SqlUtils.getBinariesAlias()       <p>
+ * @param {String} [pAlias=SqlUtils.getBinariesAlias()]     <p>
  *                                                          The database alias.<br>
- *                                                          (e.g.: _____SYSTEMALIAS)  
+ *                                                          (e.g.: _____SYSTEMALIAS)<br>
+ * @param {String} [pKeyword]                               <p>
+ *                                                          The binary keyword.<br>
+ *                                                          (e.g.: "SERIALLETTER_BUILDED")<br>
  * @throws {Error}                                          <p>
  *                                                          If more than one binary exists.<br>
  *                                                          This shouldn't happen, if this lib is used.<br>
  * @return {String | Boolean}                               <p>
  *                                                          The binary data or false if no data exists.<br>
  */
-SingleBinaryUtils.get = function(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias)
+SingleBinaryUtils.get = function(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias, pKeyword)
 {
-    if (pAlias == undefined) 
-        pAlias = SqlUtils.getBinariesAlias();
+    pAlias = pAlias || SqlUtils.getBinariesAlias();
     
-    if (this.checkExistsOneTime(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias))
+    if (this.checkExistsOneTime(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias, pKeyword))
     {
-        var binaryMetadata = db.getBinaryMetadata(pAssignmentTable, pAssignmentName, pAssignmentRowId, false, pAlias)[0];
+        var binaryMetadata = db.getBinaryMetadata(pAssignmentTable, pAssignmentName, pAssignmentRowId, false, pAlias, pKeyword)[0];
         return db.getBinaryContent(binaryMetadata.id, pAlias);
     }
 
@@ -104,11 +106,14 @@ SingleBinaryUtils.get = function(pAssignmentTable, pAssignmentName, pAssignmentR
  * @param {String} pAssignmentRowId                                 <p>
  *                                                                  The row id.<br>
  *                                                                  (e.g.: UUID of the record)<br>
- * @param {Boolean} pIncludePreview=false (optional)                <p>
+ * @param {Boolean} [pIncludePreview=false]                         <p>
  *                                                                  Case if its true, a preview will also be retrieved.<br>
- * @param {String} pAlias=SqlUtils.getBinariesAlias() (optional)    <p>
+ * @param {String} [pAlias=SqlUtils.getBinariesAlias()]             <p>
  *                                                                  The database alias.<br>
  *                                                                  (e.g.: _____SYSTEMALIAS)<br> 
+ * @param {String} [pKeyword]                                       <p>
+ *                                                                  The binary keyword.<br>
+ *                                                                  (e.g.: "SERIALLETTER_BUILDED")<br> 
  * @throws {Error}                                                  <p>
  *                                                                  If more than one binary exists.<br>
  *                                                                  This shouldn't happen, if this lib is used.<br>
@@ -117,14 +122,13 @@ SingleBinaryUtils.get = function(pAssignmentTable, pAssignmentName, pAssignmentR
  *                                                                  filename, edit, keyword, description, size, mimetype) <br>
  *                                                                  or false if no data exists.<br>
  */
-SingleBinaryUtils.getMetadata = function(pAssignmentTable, pAssignmentName, pAssignmentRowId, pIncludePreview, pAlias)
+SingleBinaryUtils.getMetadata = function(pAssignmentTable, pAssignmentName, pAssignmentRowId, pIncludePreview, pAlias, pKeyword)
 {
-    if (pAlias == undefined) 
-        pAlias = SqlUtils.getBinariesAlias();
+    pAlias = pAlias || SqlUtils.getBinariesAlias();
     
-    if (this.checkExistsOneTime(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias))
+    if (this.checkExistsOneTime(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias, pKeyword))
     {
-        return db.getBinaryMetadata(pAssignmentTable, pAssignmentName, pAssignmentRowId, pIncludePreview || false, pAlias)[0];
+        return db.getBinaryMetadata(pAssignmentTable, pAssignmentName, pAssignmentRowId, pIncludePreview || false, pAlias, pKeyword)[0];
     }
 
     return false;
@@ -142,9 +146,12 @@ SingleBinaryUtils.getMetadata = function(pAssignmentTable, pAssignmentName, pAss
  * @param {String} pAssignmentRowId                                 <p>
  *                                                                  The row id.<br>
  *                                                                  (e.g.: UUID of the record)<br>
- * @param {String} pAlias=SqlUtils.getBinariesAlias() (optional)    <p>
+ * @param {String} [pAlias=SqlUtils.getBinariesAlias()]             <p>
  *                                                                  The database alias.<br>
  *                                                                  (e.g.: _____SYSTEMALIAS)<br>
+ * @param {String} [pKeyword]                                       <p>
+ *                                                                  The binary keyword.<br>
+ *                                                                  (e.g.: "SERIALLETTER_BUILDED")<br>
  * @throws {Error}                                                  <p>
  *                                                                  If more than one binary exists. <br>
  *                                                                  This shouldn't happen, if this lib is used.<br>
@@ -152,12 +159,10 @@ SingleBinaryUtils.getMetadata = function(pAssignmentTable, pAssignmentName, pAss
  *                                                                  Result of the check. If yes, it returns true.<br>
  *                                                                  If it doesn't exist, it returns false.<br>
  */
-SingleBinaryUtils.checkExistsOneTime = function(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias)
+SingleBinaryUtils.checkExistsOneTime = function(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias, pKeyword)
 {   
-    if (pAlias == undefined) 
-        pAlias = SqlUtils.getBinariesAlias();
-    
-    var countBinary = db.getBinaryCount(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias);
+    pAlias = pAlias || SqlUtils.getBinariesAlias();
+    var countBinary = db.getBinaryCount(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias, pKeyword || null);
     
     if (countBinary == 0)
     {
@@ -189,11 +194,12 @@ SingleBinaryUtils.checkExistsOneTime = function(pAssignmentTable, pAssignmentNam
  *                                                                  The name of the file.<br>
  * @param {String} pDescription                                     <p>
  *                                                                  The file description.<br>
- * @param {String} pKeyword                                         <p>
- *                                                                  The keyword.<br>
- * @param {String} pAlias=SqlUtils.getBinariesAlias() (optional)    <p>
+ * @param {String} [pAlias=SqlUtils.getBinariesAlias()]             <p>
  *                                                                  The database alias.<br>
  *                                                                  (e.g.: _____SYSTEMALIAS)<br>
+ * @param {String} [pKeyword]                                       <p>
+ *                                                                  The binary keyword.<br>
+ *                                                                  (e.g.: "SERIALLETTER_BUILDED")<br>
  * @throws {Error}                                                  <p>
  *                                                                  If more than one binary exists.<br>
  *                                                                  This shouldn't happen, if this lib is used.<br>
@@ -203,10 +209,9 @@ SingleBinaryUtils.checkExistsOneTime = function(pAssignmentTable, pAssignmentNam
  */
 SingleBinaryUtils.insert = function(pAssignmentTable, pAssignmentName, pAssignmentRowId, pBase64, pFileName, pDescription, pKeyword, pAlias)
 {
-    if (pAlias == undefined) 
-        pAlias = SqlUtils.getBinariesAlias();
+    pAlias = pAlias || SqlUtils.getBinariesAlias();
     
-    if (!this.checkExistsOneTime(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias))
+    if (!this.checkExistsOneTime(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias, pKeyword))
     {
         return db.insertBinary(pAssignmentTable, pAssignmentName, pAssignmentRowId, "", pBase64, pFileName, (pDescription || ""), pKeyword, pAlias);
     }
@@ -233,7 +238,7 @@ SingleBinaryUtils.insert = function(pAssignmentTable, pAssignmentName, pAssignme
  *                                                                      The name of the file.<br>
  * @param {String} pDescription                                         <p>
  *                                                                      The file description.<br>
- * @param {String} pAlias=SqlUtils.getBinariesAlias() (optional)        <p>
+ * @param {String} [pAlias=SqlUtils.getBinariesAlias()]                 <p>
  *                                                                      The database alias.<br>
  *                                                                      (e.g.: _____SYSTEMALIAS)<br>
  * @throws {Error}                                                      <p>
@@ -266,9 +271,12 @@ SingleBinaryUtils.insertMainDocument = function(pAssignmentTable, pAssignmentNam
  *                                                                  The name of the file.<br>
  * @param {String} pDescription                                     <p>
  *                                                                  The file description.<br> 
- * @param {String} pAlias=SqlUtils.getBinariesAlias() (optional)    <p>
+ * @param {String} [pAlias=SqlUtils.getBinariesAlias()]             <p>
  *                                                                  The database alias.<br>
  *                                                                  (e.g.: _____SYSTEMALIAS)<br> 
+ * @param {String} [pKeyword]                                       <p>
+ *                                                                  The binary keyword.<br>
+ *                                                                  (e.g.: "SERIALLETTER_BUILDED")<br>
  * @throws {Error}                                                  <p>
  *                                                                  If more than one binary exists.<br>
  *                                                                  This shouldn't happen, if this lib is used.<br>
@@ -276,16 +284,16 @@ SingleBinaryUtils.insertMainDocument = function(pAssignmentTable, pAssignmentNam
  *                                                                  True if inserted, false if the binary <br>
  *                                                                  was not found.<br>
  */
-SingleBinaryUtils.update = function(pAssignmentTable, pAssignmentName, pAssignmentRowId, pBase64, pFileName, pDescription, pAlias)
+SingleBinaryUtils.update = function(pAssignmentTable, pAssignmentName, pAssignmentRowId, pBase64, pFileName, pDescription, pAlias, pKeyword)
 {
     if (pAlias == undefined) 
         pAlias = SqlUtils.getBinariesAlias();
     
-    if (this.checkExistsOneTime(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias))
+    if (this.checkExistsOneTime(pAssignmentTable, pAssignmentName, pAssignmentRowId, pAlias, pKeyword))
     {
-        var binaryMetadata = db.getBinaryMetadata(pAssignmentTable, pAssignmentName, pAssignmentRowId, false, pAlias)[0];
+        var binaryMetadata = db.getBinaryMetadata(pAssignmentTable, pAssignmentName, pAssignmentRowId, false, pAlias, pKeyword)[0];
         
-        db.updateBinary(binaryMetadata.id, "", pBase64, pFileName, pDescription, "", pAlias);
+        db.updateBinary(binaryMetadata.id, "", pBase64, pFileName, pDescription, pKeyword, pAlias);
         return true;
     }
     
@@ -346,9 +354,12 @@ SingleBinaryUtils.remove = function(pAssignmentTable, pAssignmentName, pAssignme
  *                                                                  The name of the file.<br>
  * @param {String} pDescription                                     <p>
  *                                                                  The file description.<br>
- * @param {String} pAlias=SqlUtils.getBinariesAlias() (optional)    <p>
+ * @param {String} [pAlias=SqlUtils.getBinariesAlias()]             <p>
  *                                                                  The database alias.<br>
- *                                                                  (e.g.: _____SYSTEMALIAS)<br>
+ *                                                                  (e.g.: _____SYSTEMALIAS)<br> 
+ * @param {String} [pKeyword]                                       <p>
+ *                                                                  The binary keyword.<br>
+ *                                                                  (e.g.: "SERIALLETTER_BUILDED")<br>
  * @throws {Error}                                                  <p>
  *                                                                  If more than one binary exists.<br>
  *                                                                  This shouldn't happen, if this lib is used.<br>
@@ -357,12 +368,12 @@ SingleBinaryUtils.remove = function(pAssignmentTable, pAssignmentName, pAssignme
  *                                                                  the binary id if it was inserted, <br>
  *                                                                  false if it failed.<br>
  */
-SingleBinaryUtils.set = function(pAssignmentTable, pAssignmentName, pAssignmentRowId, pBase64, pFileName, pDescription, pAlias)
+SingleBinaryUtils.set = function(pAssignmentTable, pAssignmentName, pAssignmentRowId, pBase64, pFileName, pDescription, pAlias, pKeyword)
 {
     //try to update, if not possible, insert
-    var wasSet = SingleBinaryUtils.update(pAssignmentTable, pAssignmentName, pAssignmentRowId, pBase64, pFileName, pDescription, pAlias)
+    var wasSet = SingleBinaryUtils.update(pAssignmentTable, pAssignmentName, pAssignmentRowId, pBase64, pFileName, pDescription, pAlias, pKeyword);
     if (!wasSet)
-        wasSet = SingleBinaryUtils.insert(pAssignmentTable, pAssignmentName, pAssignmentRowId, pBase64, pFileName, pDescription, "", pAlias);
+        wasSet = SingleBinaryUtils.insert(pAssignmentTable, pAssignmentName, pAssignmentRowId, pBase64, pFileName, pDescription, pKeyword, pAlias);
     
     return wasSet;
 }
diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js
index 2b2ccd267253a68b450b2326d25972f8738b8117..75e83e1cbc915388df6142e5cdd2531f0ac2a785 100644
--- a/process/Bulkmail_lib/process.js
+++ b/process/Bulkmail_lib/process.js
@@ -201,7 +201,7 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun, pUser)
             let email = mails[contactId];
             let mailLogId = mailLogIds.get(contactId);
             let recipientStatus = $KeywordRegistry.bulkMailRecipientStatus$failed();
-            if (email !== undefined && emailAddress)
+            if (email !== undefined && emailAddress && !blacklist.hasContactId(contactId))
             {
                 try
                 {
@@ -943,36 +943,41 @@ SerialLetterUtils.buildSerialLetterOnServer = function (pSerialLetterId, pRecipi
 SerialLetterUtils.buildSerialLetter = function (pSerialLetterId, pRecipientIds)
 {
     var [templateId, title] = newSelect("DOCUMENTTEMPLATE_ID, TITLE")
-                        .from("SERIALLETTER")
-                        .where("SERIALLETTER.SERIALLETTERID", pSerialLetterId)
-                        .arrayRow(true);
+                                .from("SERIALLETTER")
+                                .where("SERIALLETTER.SERIALLETTERID", pSerialLetterId)
+                                .arrayRow(true);
 
     var template = SerialLetterUtils.getSerialLetterTemplate(pSerialLetterId, templateId);
     var contactIdsSelect = newSelect("CONTACT_ID")
-                        .from("LETTERRECIPIENT")
-                        .join("CONTACT", newWhere("LETTERRECIPIENT.CONTACT_ID = CONTACT.CONTACTID"))
-                        .where("LETTERRECIPIENT.SERIALLETTER_ID", pSerialLetterId)
-                        .andIfSet(new CommunicationSettingsCondition()
-                            .postalAddress("LETTERRECIPIENT.ADDRESS_ID")
-                            .rejected()
-                            .existNoSettings()
-                            .buildCondition());
+                            .from("LETTERRECIPIENT")
+                            .join("CONTACT", newWhere("LETTERRECIPIENT.CONTACT_ID = CONTACT.CONTACTID"))
+                            .where("LETTERRECIPIENT.SERIALLETTER_ID", pSerialLetterId)
+                            .andIfSet(new CommunicationSettingsCondition()
+                                .address("CONTACT.ADDRESS_ID")
+                                .rejected()
+                                .existNoSettings()
+                                .buildCondition());
 
     if (pRecipientIds && pRecipientIds.length > 0)
+    {    
         contactIdsSelect.and("LETTERRECIPIENT.LETTERRECIPIENTID", pRecipientIds, SqlBuilder.IN());
+    }
 
     var contactIds = contactIdsSelect.table();
-    if(template != null){
-    return {
-        content : template.getSerialLetterByContactIds(contactIds),
-        filename : template.filename,
-        title : title
-    };}
-    else{
+    
+    if(template != null)
+    {
+        return {
+            content : template.getSerialLetterByContactIds(contactIds),
+            filename : template.filename,
+            title : title
+        };
+    }
+    else
+    {
         return{
             title : title
-}
-
+        }
     }
 }
 
diff --git a/process/ChecklistEntryRegistry_basic/process.js b/process/ChecklistEntryRegistry_basic/process.js
index 90bf55caef470e92cf655ffbb9c4a4916826359c..a46c85d7efea3dd9849ed9880b6f002a4bf36ae9 100644
--- a/process/ChecklistEntryRegistry_basic/process.js
+++ b/process/ChecklistEntryRegistry_basic/process.js
@@ -655,4 +655,20 @@ $ChecklistEntryRegistry.filter = function(){
             return false;
         }
     };
+}
+/*
+ * Checks whether a responsible member has been set<br>
+ * For the given salesproject.
+ * 
+ */
+$ChecklistEntryRegistry.salesprojectResponsible = function(){
+    return{
+        title: translate.text("Sales project responibility set"),
+        verifierFn: function(pSalesprojectId){
+            var memberRows = $ChecklistEntryRegistry._getRows(null, "Member_entity", ["RESPONSIBLE"], [["EnableMSTeams_param", ""], 
+                                                                    ["ObjectRowId_param", pSalesprojectId]], "WithDistrictResponsibles");
+            
+            memberRows.some(function (row) { return row["RESPONSIBLE"] == 1; });
+        }
+    };
 }
\ No newline at end of file
diff --git a/process/ClassificationComplexIndicatorRegistry_basic/process.js b/process/ClassificationComplexIndicatorRegistry_basic/process.js
index 80f5cf3cf1530eeb1f26c59823e1e9fb672204d2..f85468069dd1614ac82c105acf884f7fa3f8f381 100644
--- a/process/ClassificationComplexIndicatorRegistry_basic/process.js
+++ b/process/ClassificationComplexIndicatorRegistry_basic/process.js
@@ -62,7 +62,12 @@ $ClassificationComplexIndicatorRegistry.forecastSum = function(){
         type: $ClassificationFieldTypes.NUMBER(),
         getDisplayValueFn: function(pValue)
         {
-            return pValue;
+            var res = pValue;
+            if(pValue)
+            {
+                res = pValue/1000 + "T\u20ac";
+            }
+            return res;
         },
         objectType: "Salesproject"
     };
@@ -217,11 +222,11 @@ ClassificationComplexIndicatorRegistryUtils.defaultDateValueObject = function()
     resObject["lastMonth"] = [];
     resObject["lastMonth"].push(lastMonth, translate.text("within the last Month"));
     resObject["nextMonth"] = [];
-    resObject["nextMonth"].push(nextMonth, translate.text("within the next Month"));
+    resObject["nextMonth"].push(today, translate.text("within one Month"));
     resObject["inSixMonths"] = [];
-    resObject["inSixMonths"].push(inSixMonths, translate.text("within the next six Months"));
+    resObject["inSixMonths"].push(nextMonth, translate.text("within the next six Months"));
     resObject["inOneYear"] = [];
-    resObject["inOneYear"].push(inOneYear, translate.text("within the next year"));
+    resObject["inOneYear"].push(inSixMonths, translate.text("within the next year"));
 
     return resObject;
 };
diff --git a/process/ClassificationUpdate_lib/process.js b/process/ClassificationUpdate_lib/process.js
index b66a2c1650b2335071768ceb7bbceccdf65683ac..0e90d02c2a10dbbffc0d9729f0eb2354fef8f0ee 100644
--- a/process/ClassificationUpdate_lib/process.js
+++ b/process/ClassificationUpdate_lib/process.js
@@ -1,3 +1,4 @@
+import("system.project");
 import("AttributeFilter_lib");
 import("ClassificationComplexIndicatorRegistry_basic");
 import("ClassificationIndicatorFieldRegistry_basic");
@@ -22,17 +23,32 @@ import("system.util");
  */
 function ClassificationUpdateUtils() {}
 
+/**
+* Provides a central place to set the pagingSize. you can increase/decrease it however your db can handle it<p><br>
+* 
+* @return {integer}                                         <p> pagingSize (400)<br>
+*/
+ClassificationUtils.pagingSize = function()
+{
+    return 400;
+}
+
+/**
+* Provides a central place to set the pagingSize used by the loadEntity calls. You can increase/decrease it however your db can handle it<p><br>
+* Be aware, that his number should never be higher than 400! That's because that's the standard paging Size from the core and going above that can lead to unforseen side effects
+* 
+* @return {integer}                                         <p> pagingSize (400)<br>
+*/
+ClassificationUtils.pagingSizeLoadEntity = function()
+{
+    return 400;
+}
 /**
  * Refresh function that get's used by the updateClassifications_serverProcess and the openClassificationOverView Actions at Organisation and Salesproject.<br>
- * There are three ways to run this: only recalculating the outdated data (and updating if needed), only for a specific object and returning it's classification (and updating it's stored classification) or recalculating ALL the classifications (and updating if needed).<br>
- * ClassificationTypes are being flagged as Outdated accordingly, everytime someone configures something in ClassificationAdmin.<br>
- * The classificationStorageDatasets are being flagged as outdated as soon as you update anything regarding the corresponding object or insert/update 
- * anything with a dependency set to said object.<br>
- * 
- * Calling this function without any params leads to it updating only for the datasets that have been flagged as outdated.
+ * There are two ways to run this: recalculating only for a specific object and returning it's classification (and updating it's stored classification) or recalculating ALL the classifications (and inserting a storage dataset if needed and updating if needed).<br>
+ * <br>
  * <p>
- * First it checks whether outdated classificationStorages and outdated classificationTypes exist
- * and always updates the classificationStorages first before updating the for the outdated classificationTypes.
+ * First it checks whether outdated classificationStorage datasets exist and creates them if needed.
  * 
  * -In the classificationStorage runtrough it calculates the complete classification for every outdated classificationStorage, entirely 
  * from scratch and updates the classificationStorage
@@ -43,9 +59,6 @@ function ClassificationUpdateUtils() {}
  *  When recalculateAll_param is set to true: now the outdated flag is being ignored and all classificationtypes as outdated (only one runtrough needed)
  *  <p>
  *  When pSingleRefreshRowId we only update said object and return the achieved classifications (the stored classificationStorage string is also being updated if needed)
- * 
- * @param {Boolean}[pRefreshAll]                            <p>
- *                                                          Whether or not to recalculate and refresh all classifications<br>
  *                                                          
  * @param {String}[pSingleRefreshRowId]                    <p>
  *                                                          object row id of the dataset you want the classification for (also returns the 
@@ -61,62 +74,32 @@ function ClassificationUpdateUtils() {}
  *                                                           is also being updated if needed)<br>
  *                                                           Else: Output in log how many Datasets have and have not been updated.
  */
-ClassificationUtils.executeUpdating = function(pRefreshAll, pSingleRefreshRowId, pObjectType) 
+ClassificationUtils.executeUpdating = function(pSingleRefreshRowId, pObjectType) 
 {
     var outputInfo = "updateClassifications_serverProcess output is:\n";//information how much data has been modified
-    var singleRefreshRowId = false;
-    var recalculateAll = false;
-    var objectType_param;
-
-    if (pSingleRefreshRowId)
-    {
-        singleRefreshRowId = pSingleRefreshRowId;
-        objectType_param = pObjectType;
-    }
-    else if (pRefreshAll)
-    {
-        recalculateAll = pRefreshAll;
-    }
 
-    var buildClassificationObjects = ClassificationUpdateHelper._buildClassificationFilterObjects(recalculateAll, singleRefreshRowId);
-    var stopper = false;
-    var buildOutdatedStoredClassificationObjects = ClassificationUpdateHelper._buildOutdatedStoredClassificationObject(recalculateAll, singleRefreshRowId, pObjectType);
+    var buildClassificationObjects = ClassificationUpdateHelper._buildClassificationFilterObjects(pSingleRefreshRowId);
+    var buildOutdatedStoredClassificationObjects = ClassificationUpdateHelper._buildOutdatedStoredClassificationObject(pSingleRefreshRowId, pObjectType);
 
     if (buildOutdatedStoredClassificationObjects && buildOutdatedStoredClassificationObjects["objectTypes"]
-            && buildOutdatedStoredClassificationObjects["objectTypes"].length > 0)
+            && buildOutdatedStoredClassificationObjects["objectTypes"].length > 0)//single refresh
     {
-        while(buildOutdatedStoredClassificationObjects["objectTypes"].length > 0 && !stopper)
+        var returnAfterUpdate = ClassificationUpdateHelper._updateOutdatedDatasets(null, buildOutdatedStoredClassificationObjects, pSingleRefreshRowId, outputInfo);//run updating for this set of Datasets
+        if(returnAfterUpdate["wrongConfiguration"])
         {
-            if (singleRefreshRowId)
-            {
-                stopper = true;
-            }
-            var returnAfterUpdate = ClassificationUpdateHelper._updateOutdatedDatasets(null, buildOutdatedStoredClassificationObjects, singleRefreshRowId, outputInfo);//run updating for this set of Datasets
-            if(returnAfterUpdate && returnAfterUpdate["outputInfo"])
-            {
-                outputInfo = returnAfterUpdate["outputInfo"];
-            }
-            if (buildOutdatedStoredClassificationObjects["objectTypes"].length > 0 && !stopper)
-            {
-                buildOutdatedStoredClassificationObjects = ClassificationUpdateHelper._buildOutdatedStoredClassificationObject(recalculateAll, singleRefreshRowId, objectType_param);
-            }
+            return returnAfterUpdate;
+        }
+        if (!returnAfterUpdate["outputInfo"])
+        {
+            return ClassificationUpdateHelper._formatOutputForDisplayingValues(returnAfterUpdate, pSingleRefreshRowId);
         }
-        
     }
-    if (buildClassificationObjects["objectTypesThatNeedUpdate"] && buildClassificationObjects["objectTypesThatNeedUpdate"].length > 0 && !singleRefreshRowId)
+    else if (buildClassificationObjects["objectTypesThatNeedUpdate"] && buildClassificationObjects["objectTypesThatNeedUpdate"].length > 0 && !pSingleRefreshRowId)//refresh all
     {
         var update = ClassificationUpdateHelper._updateOutdatedDatasets(buildClassificationObjects, null, null, outputInfo);//run updating for this set of Datasets
         outputInfo = update["outputInfo"];
     }
-    else if(!returnAfterUpdate || !returnAfterUpdate["outputInfo"])
-    {
-        outputInfo = outputInfo  + "No Data has been updated, everything already up-to-date";
-    }
 
-    if (returnAfterUpdate && !returnAfterUpdate["outputInfo"])
-    {
-        return ClassificationUpdateHelper._formatOutputForDisplayingValues(returnAfterUpdate, singleRefreshRowId);
-    }
     logging.log(outputInfo); //return outputInformation in log instead of returning
 
     return null;
@@ -228,6 +211,7 @@ ClassificationUpdateHelper._formatOutputForDisplayingValues = function(pReturn,
     var indicatorObj = pReturn["indicatorObj"];
     var achievedScoresObject = pReturn["achievedScoresObject"][pUid];
     var orderedGroups = pReturn["orderedGroups"];
+    var orderedTypesPerGroup = pReturn["orderedTypesPerGroup"];
     var classificationString = pReturn["newGradingString"];
     var groupNameObj = {};
     var contentProcessArray = [];
@@ -247,34 +231,60 @@ ClassificationUpdateHelper._formatOutputForDisplayingValues = function(pReturn,
         groupResultObj[groupId]["points"] = 0;
         groupResultObj[groupId]["maxPoints"] = 0;
         contentProcessArray.push([util.getNewUUID(), groupId, translate.text(groupNameObj[groupId]), "", "", "", "", ""]);
-        for (var typeId in achievedScoresObject[groupId])
+        for (var typeId in orderedTypesPerGroup[groupId])
         {
-            var typeInfo = ClassificationUpdateHelper._searchIndicatorObj(typeId, indicatorObj);
-
-            if (achievedScoresObject[groupId][typeId]["key"] || achievedScoresObject[groupId][typeId]["key"] == "0")
-            {
-                contentProcessArray.push([util.getNewUUID(), groupId, "", typeId, achievedScoresObject[groupId][typeId]["fieldDisplay"], achievedScoresObject[groupId][typeId]["key"]
-                        , achievedScoresObject[groupId][typeId]["value"], achievedScoresObject[groupId][typeId]["points"] + "/" + achievedScoresObject[groupId][typeId]["maxPoints"] + " " + translate.text("Points")]);
-                groupResultObj[groupId]["points"] = eMath.addInt(parseInt(groupResultObj[groupId]["points"]), parseInt(achievedScoresObject[groupId][typeId]["points"]));
-                groupResultObj[groupId]["maxPoints"] = eMath.addInt(parseInt(groupResultObj[groupId]["maxPoints"]), parseInt(achievedScoresObject[groupId][typeId]["maxPoints"]));
-            }
-            else
+            if(achievedScoresObject != undefined && achievedScoresObject[groupId] != undefined && achievedScoresObject[groupId][typeId] != undefined)//loop trough orderedTypesPerGroup so we have the correct order btu check wheter or not the type is acually relevant
             {
-                contentProcessArray.push([util.getNewUUID(), groupId, "", typeId, achievedScoresObject[groupId][typeId]["fieldDisplay"], "-"
-                        , "-", "0" + "/" + typeInfo["points"] * typeInfo["maxPercent"] / 100 + " " + translate.text("Points")]);
-                groupResultObj[groupId]["points"] = eMath.addInt(parseInt(groupResultObj[groupId]["points"]), parseInt(0));
-                groupResultObj[groupId]["maxPoints"] = eMath.addInt(parseInt(groupResultObj[groupId]["maxPoints"]), parseInt(typeInfo["points"] * typeInfo["maxPercent"] / 100));
+                var achievedValue = achievedScoresObject[groupId][typeId];
+                var typeInfo = ClassificationUpdateHelper._searchIndicatorObj(typeId, indicatorObj);
+
+                if (achievedValue["key"] || achievedValue["key"] == "0")
+                {
+                    contentProcessArray.push([util.getNewUUID()
+                                            , groupId
+                                            , ""
+                                            , typeId
+                                            , achievedValue["fieldDisplay"]
+                                            , achievedValue["key"]
+                                            , achievedValue["value"]
+                                            , achievedValue["points"] + "/" + achievedValue["maxPoints"] + " " + translate.text("Points")]);
+
+                    groupResultObj[groupId]["points"] = eMath.addInt(parseInt(groupResultObj[groupId]["points"]), parseInt(achievedValue["points"]));
+                    groupResultObj[groupId]["maxPoints"] = eMath.addInt(parseInt(groupResultObj[groupId]["maxPoints"]), parseInt(achievedValue["maxPoints"]));
+                }
+                else
+                {
+                    contentProcessArray.push([util.getNewUUID()
+                                            , groupId
+                                            , ""
+                                            , typeId
+                                            , achievedValue["fieldDisplay"]
+                                            , "-"
+                                            , "-"
+                                            , "0" + "/" + typeInfo["points"] * typeInfo["maxPercent"] / 100 + " " + translate.text("Points")]);
+                    
+                    groupResultObj[groupId]["points"] = eMath.addInt(parseInt(groupResultObj[groupId]["points"]), parseInt(0));
+                    groupResultObj[groupId]["maxPoints"] = eMath.addInt(parseInt(groupResultObj[groupId]["maxPoints"]), parseInt(typeInfo["points"] * typeInfo["maxPercent"] / 100));
+                }
             }
         }
     }
+    
+    var groupDisplayObj = {};//helperObj to store the group display value
     var position = 0;
     for (let i = 0; i < contentProcessArray.length; i++)
     {
-        if (contentProcessArray[i][2] && contentProcessArray[i][2] != "")
+        if (contentProcessArray[i][2] && contentProcessArray[i][2] != "")//group
         {
-            contentProcessArray[i][2] = ClassificationUtils.formatDisplaySummaryForGroup(groupResultObj[contentProcessArray[i][1]]["points"], groupResultObj[contentProcessArray[i][1]]["maxPoints"], contentProcessArray[i][2], classificationString.substring(position, position + 1))
+            groupDisplayObj[contentProcessArray[i][1]] = ClassificationUtils.formatDisplaySummaryForGroup(groupResultObj[contentProcessArray[i][1]]["points"], groupResultObj[contentProcessArray[i][1]]["maxPoints"], contentProcessArray[i][2], classificationString.substring(position, position + 1))
+            contentProcessArray.splice(i, 1);//remove group from array
+            i = i-1; // fix i, since we just removed one element
             position++;
-        } 
+        }
+        else
+        {
+            contentProcessArray[i][2] = groupDisplayObj[contentProcessArray[i][1]];//set the gclassification roup displayvalue for the classification types
+        }
     }
 
     return JSON.stringify(contentProcessArray);
@@ -403,36 +413,38 @@ ClassificationUpdateHelper._buildUpdateClassificationValueStatements = function(
     for(var position in pOrderedGroups)
     {
         var groupId = pOrderedGroups[position][0];
-        for(var type in pAchievedScores[groupId])
+        if(pAchievedScores && pAchievedScores[groupId])
         {
-            if (pAchievedScores[groupId][type]["points"] || pAchievedScores[groupId][type]["points"] == 0)
+            for(var type in pAchievedScores[groupId])
             {
-                if (!pointsPerGroupObj.hasOwnProperty(groupId))
+                if (pAchievedScores[groupId][type]["points"] || pAchievedScores[groupId][type]["points"] == 0)
                 {
-                    pointsPerGroupObj[groupId] = {};
-                    pointsPerGroupObj[groupId]["points"] = 0;
-                    pointsPerGroupObj[groupId]["maxPoints"] = 0;
+                    if (!pointsPerGroupObj.hasOwnProperty(groupId))
+                    {
+                        pointsPerGroupObj[groupId] = {};
+                        pointsPerGroupObj[groupId]["points"] = 0;
+                        pointsPerGroupObj[groupId]["maxPoints"] = 0;
+                    }
+                    pointsPerGroupObj[groupId]["points"] = eMath.addInt(parseInt(pointsPerGroupObj[groupId]["points"]), parseInt(pAchievedScores[groupId][type]["points"]));
+                    pointsPerGroupObj[groupId]["maxPoints"] = eMath.addInt(parseInt(pointsPerGroupObj[groupId]["maxPoints"]), parseInt(pAchievedScores[groupId][type]["maxPoints"]));
                 }
-                pointsPerGroupObj[groupId]["points"] = eMath.addInt(parseInt(pointsPerGroupObj[groupId]["points"]), parseInt(pAchievedScores[groupId][type]["points"]));
-                pointsPerGroupObj[groupId]["maxPoints"] = eMath.addInt(parseInt(pointsPerGroupObj[groupId]["maxPoints"]), parseInt(pAchievedScores[groupId][type]["maxPoints"]));
             }
         }
         if (pointsPerGroupObj && pointsPerGroupObj[groupId])
         {
-            newGradingString = StringUtils.replaceAt(newGradingString, position, ClassificationUtils.getGradingFromObject(pGradingObject, groupId, pointsPerGroupObj[groupId]["points"], pointsPerGroupObj[groupId]["maxPoints"]));
+            newGradingString = StringUtils.replaceAt(newGradingString, position, ClassificationUtils.getGradingFromObject(pGradingObject, groupId, pointsPerGroupObj[groupId]["points"], pointsPerGroupObj[groupId]["maxPoints"]), "-");
+        }
+        else
+        {
+            newGradingString = StringUtils.replaceAt(newGradingString, position, "-", "-");
         }
     }
 
     if (pCurrentValue != newGradingString)
     {
-        pUpdateStatements.push(["CLASSIFICATIONSTORAGE", ["CLASSIFICATIONVALUE", "OUTDATED"], null, [newGradingString, "0"], newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", pRowId).build()]);
+        pUpdateStatements.push(["CLASSIFICATIONSTORAGE", ["CLASSIFICATIONVALUE"], null, [newGradingString], newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", pRowId).build()]);
         pOutputInformation[pRowType].updatedElements += 1;
     }
-    else
-    {
-        pUpdateStatements.push(["CLASSIFICATIONSTORAGE", ["OUTDATED"], null, ["0"], newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", pRowId).build()]);
-        pOutputInformation[pRowType].nonChangedElements++;
-    }
 
     return {"updateStatements": pUpdateStatements
             , "outputInformation": pOutputInformation
@@ -661,46 +673,41 @@ ClassificationUpdateHelper._getEntityFields = function(pCurrentObjectType)
 
                  for (var value in achievedValueArray)
                  {
-                     if (pClassificationTypes[type]["fieldType"] == $ClassificationFieldTypes.NUMBER() || pClassificationTypes[type]["fieldType"] == $ClassificationFieldTypes.INTEGER()
-                         || pClassificationTypes[type]["fieldType"] == $ClassificationFieldTypes.DATE())
-                     {
-                         var numberValue;
-                         if (pClassificationTypes[type]["fieldType"] == $ClassificationFieldTypes.DATE())
-                         {
-                             numberValue = ClassificationUpdateHelper._getCorrectNumberValue(false, pClassificationTypes[type], false, null, parseInt(achievedValueArray), true);
-                         }
-                         else
-                         {
-                             numberValue = ClassificationUpdateHelper._getCorrectNumberValue(false, pClassificationTypes[type], false, null, parseInt(achievedValueArray));
-                         }
+                    if (pClassificationTypes[type]["fieldType"] == $ClassificationFieldTypes.NUMBER() || pClassificationTypes[type]["fieldType"] == $ClassificationFieldTypes.INTEGER()
+                        || pClassificationTypes[type]["fieldType"] == $ClassificationFieldTypes.DATE())
+                    {
+                        var numberValue;
+                        if (pClassificationTypes[type]["fieldType"] == $ClassificationFieldTypes.DATE())
+                        {
+                            numberValue = ClassificationUpdateHelper._getCorrectNumberValue(false, pClassificationTypes[type], false, null, parseInt(achievedValueArray), true);
+                        }
+                        else
+                        {
+                            numberValue = ClassificationUpdateHelper._getCorrectNumberValue(false, pClassificationTypes[type], false, null, parseInt(achievedValueArray));
+                        }
 
-                         pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["key"] = numberValue["key"];
-                         if (pClassificationTypes[type]["fieldType"] == $ClassificationFieldTypes.DATE())
-                         {
-                             pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["value"] = $ClassificationComplexIndicatorRegistry[pClassificationTypes[type]["field"]]().getDisplayValueFn(numberValue["key"].toString());
-                         }
-                         else
-                         {
-                             pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["value"] = numberValue["value"];
-                         }
-                         pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["maxPoints"] = numberValue["maxPoints"];
-                         pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["points"] = numberValue["points"];
-                     }
-                     else
-                     {
-                         if (achievedValueArray[value] == valueScore)
-                         {
-                             pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["maxPoints"] = pClassificationTypes[type]["maxPercent"] / 100 * pClassificationTypes[type]["points"];
-                             //replace if the value is greater than the one we already have
-                             if (parseInt(pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["points"]) < parseInt(pClassificationTypes[type]["values"][valueScore])*parseInt(pClassificationTypes[type]["points"]) / 100)
-                             {                                
-                                 pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["points"] = parseInt(pClassificationTypes[type]["values"][valueScore]) * parseInt(pClassificationTypes[type]["points"]) / 100;
-                                 pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["key"] = valueScore;
-                                 pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["value"] = $ClassificationComplexIndicatorRegistry[pClassificationTypes[type]["field"]]().getDisplayValueFn(valueScore);
-
-                             }
-                         }
-                     }
+                        pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["key"] = numberValue["key"];
+
+                        pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["value"] = $ClassificationComplexIndicatorRegistry[pClassificationTypes[type]["field"]]().getDisplayValueFn(numberValue["key"].toString());
+
+                        pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["maxPoints"] = numberValue["maxPoints"];
+                        pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["points"] = numberValue["points"];
+                    }
+                    else
+                    {
+                        if (achievedValueArray[value] == valueScore)
+                        {
+                            pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["maxPoints"] = pClassificationTypes[type]["maxPercent"] / 100 * pClassificationTypes[type]["points"];
+                            //replace if the value is greater than the one we already have
+                            if (parseInt(pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["points"]) < parseInt(pClassificationTypes[type]["values"][valueScore])*parseInt(pClassificationTypes[type]["points"]) / 100)
+                            {                                
+                                pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["points"] = parseInt(pClassificationTypes[type]["values"][valueScore]) * parseInt(pClassificationTypes[type]["points"]) / 100;
+                                pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["key"] = valueScore;
+                                pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["value"] = $ClassificationComplexIndicatorRegistry[pClassificationTypes[type]["field"]]().getDisplayValueFn(valueScore);
+
+                            }
+                        }
+                    }
                  }
              }
          }
@@ -909,7 +916,7 @@ ClassificationUpdateHelper._handleAttributes = function(pClassificationTypes, at
  };
  
 /**
-* builds the indicatorObject, which stores all the classificationTypes we need with all their information like value, displayvalue, indicatortype, fieldType, maxpoints, max percents and their possible values and their percent  <p><br>
+* builds the indicatorObject, which stores all the classificationTypes we need with all their information liie value, displayvalue, indicatortype, fieldType, maxpoints, max percents and their possible values and their percent  <p><br>
 * 
 *                                                         
 * @param {Object}pCurrentObjectType                       <p>
@@ -974,7 +981,7 @@ ClassificationUpdateHelper._buildindicatorObj = function(pCurrentObjectType)
             }
             else
             {
-                indicatorObj[classificationTypeScorePoints[i][7]][typeId]["values"][classificationTypeScorePoints[i][3]] = classificationTypeScorePoints[i][8];
+                indicatorObj[classificationTypeScorePoints[i][7]][typeId]["values"][classificationTypeScorePoints[i][3]] = translate.text(classificationTypeScorePoints[i][8]);
             }
             if (parseFloat(indicatorObj[classificationTypeScorePoints[i][7]][typeId]["maxPercent"]) < parseFloat(classificationTypeScorePoints[i][8]))
             {
@@ -989,7 +996,7 @@ ClassificationUpdateHelper._buildindicatorObj = function(pCurrentObjectType)
  * Builds filteredRecsObj Object which stores all the included Datasets to the specific filter.
  * (loops trough classificationTypesFilterObj and uses either entites.getRow or an select for every different filter)
  */
-ClassificationUpdateHelper._buildFilteredRecsObject = function(pClassificationTypesFilterObj, pCurrentObjectType, pFilterFields)
+ClassificationUpdateHelper._buildFilteredRecsObject = function(pClassificationTypesFilterObj, pCurrentObjectType, pFilterFields, pSingleRefreshRowId)
 {
     var currentObjectType = pCurrentObjectType;
     var filteredRecsObj = {}; //reset for every objectType
@@ -1012,11 +1019,40 @@ ClassificationUpdateHelper._buildFilteredRecsObject = function(pClassificationTy
                     {
                         if (executeGetRows) //only do this once for every object type, since the rows don't change depending on the filter
                         {
-                            var loadConfig = entities.createConfigForLoadingRows()
+                            var startRow = 0;
+                            var startRowIncreased; // once we are higher than the pageSize of the core (400!) getRows() doesn't actually start with the specified startrow as offset, but instead 100 rows earlier, so we have to increase the startRow by 100 once we are over 400
+                            var stop = false;
+                            var config = entities.createConfigForLoadingRows()
                             .entity(ContextUtils.getEntity(currentObjectType))
-                            .fields(pFilterFields);
-
-                            var rows = entities.getRows(loadConfig);
+                            .fields(pFilterFields)
+                            .addParameter("IgnoreOrderBy_param", true);
+                            
+                            var rows = [];
+                            if(pSingleRefreshRowId)
+                            {
+                                config.uid(pSingleRefreshRowId)
+                            }
+                            while(!stop)
+                            {
+                                var rowsOfThisPage = [];
+                                startRowIncreased = startRow >= 400 ? startRow+100 : startRow;
+                                config = config
+                                            .startrow(startRowIncreased)
+                                            .count(ClassificationUtils.pagingSizeLoadEntity());
+                                                    
+                                rowsOfThisPage = entities.getRows(config);
+                                
+                                if (rowsOfThisPage.length == ClassificationUtils.pagingSizeLoadEntity())
+                                {
+                                    startRow = eMath.addInt(startRow, ClassificationUtils.pagingSizeLoadEntity());
+                                }
+                                else
+                                {
+                                    stop = true;
+                                }
+                                rows = rows.concat(rowsOfThisPage);
+                            }
+                            
                             var value;
                             var filterableRows = [];
                             for (let ii = 0; ii < rows.length; ii++) {
@@ -1216,9 +1252,6 @@ ClassificationUpdateHelper._buildFilterAndNoFilterObj = function(pCorrectConditi
  *      objectTypesThatNeedUpdate: array, <p>
  *   groupsThatNeedUpdate: array, <p><br>
  * 
- * @param {Boolean}[pRecalculateAll]                       <p>
- *                                                          If set: handles all the classificationTypes as outdated -> returns all groups, objectTypes and classificationTypes<br>
- *                                                          
  * @param {Boolean}[pSingleRefreshRowId]                    <p>
  *                                                          object row id of the dataset you want the classification for.<br>
  *                                                          If set: returns null for all the objects. We don't need any classificationTypes, instead we are getting the classification
@@ -1232,7 +1265,7 @@ ClassificationUpdateHelper._buildFilterAndNoFilterObj = function(pCorrectConditi
  *                                                          objectTypesThatNeedUpdate: array, <p>
  *                                                          groupsThatNeedUpdate: array, }
  */
-ClassificationUpdateHelper._buildClassificationFilterObjects = function(pRecalculateAll, pSingleRefreshRowId)
+ClassificationUpdateHelper._buildClassificationFilterObjects = function(pSingleRefreshRowId)
 {
     let outdatedGroupsAndObjectTypes;
     if (pSingleRefreshRowId)
@@ -1242,19 +1275,10 @@ ClassificationUpdateHelper._buildClassificationFilterObjects = function(pRecalcu
                    ,"objectTypesThatNeedUpdate": null
                    , "groupsThatNeedUpdate": null};
     }
-    else if (pRecalculateAll)
-    {
-        outdatedGroupsAndObjectTypes = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.FILTER, CLASSIFICATIONTYPE.FIELD, CLASSIFICATIONTYPE.FIELDTYPE, CLASSIFICATIONTYPE.INDICATORTYPE")
-                                            .from("CLASSIFICATIONTYPE")
-                                            .table();
-    }
-    else //all classificationgroups and their objectType that have atleast one classificationtype with the outdated flag set
-    {
-        outdatedGroupsAndObjectTypes = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.FILTER, CLASSIFICATIONTYPE.FIELD, CLASSIFICATIONTYPE.FIELDTYPE, CLASSIFICATIONTYPE.INDICATORTYPE")
-                                            .from("CLASSIFICATIONTYPE")
-                                            .where("CLASSIFICATIONTYPE.OUTDATED", 1)
-                                            .table();
-    }
+
+    outdatedGroupsAndObjectTypes = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.FILTER, CLASSIFICATIONTYPE.FIELD, CLASSIFICATIONTYPE.FIELDTYPE, CLASSIFICATIONTYPE.INDICATORTYPE")
+                                        .from("CLASSIFICATIONTYPE")
+                                        .table();
 
     let objectTypesThatNeedUpdate = [];
     let outdatedClassificationTypeObj = {};
@@ -1320,11 +1344,9 @@ ClassificationUpdateHelper._buildClassificationFilterObjects = function(pRecalcu
 /**
  *  Builds and returns the following Objects/Arrays and retuns them in an Object with their names as keys: <p>
  *      objectRowIdArray: array of ObjectRowIds <p>
- *      objectTypes: array of objectTypes<p>
- *      doneSelecting: boolean used to know when to stop (This function is used in a loop because it's only selecting a set amount of data (paging)<p><br>
- * 
- * @param {Boolean}[pRecalculateAll]                       <p>
- *                                                          If set: returns null for all the objects (instead we are getting all the classificationtypes 
+ *      objectTypes: array of objectTypes<p><br>
+ *      
+ * If pSingleRefreshRowId is not set : Inserts classificationStorage datasets if needed but returns null for all the objects (instead we are getting all the classificationtypes 
  *                                                          using "ClassificationUpdateHelper._buildClassificationFilterObjects" as outdated so we are already updating all the 
  *                                                          classificationStorage datasets that exist)<br>
  *                                                          
@@ -1338,33 +1360,122 @@ ClassificationUpdateHelper._buildClassificationFilterObjects = function(pRecalcu
  *                                                          
  * @return {Object}                                          <p>
  *                                                           {objectRowIdArray: array, <p>
- *                                                          objectTypes: array, <p>
- *                                                          doneSelecting: boolean}
+ *                                                          objectTypes: array}
  */
-ClassificationUpdateHelper._buildOutdatedStoredClassificationObject = function(pRecalculateAll, pSingleRefreshRowId, pObjectType)
+ClassificationUpdateHelper._buildOutdatedStoredClassificationObject = function(pSingleRefreshRowId, pObjectType)
 {
-    var doneSelecting = false;
-    if (pRecalculateAll)
+    if (!pSingleRefreshRowId)
     {
+        var pageStart = 0;
+        var storageDatasetObj = {};
+        let stop = false
+        while(stop == false)//paging because of potentially huge amounts of data
+        {
+            var storageDatasets = newSelect("CLASSIFICATIONSTORAGE.OBJECT_TYPE, CLASSIFICATIONSTORAGE.OBJECT_ROWID")
+                                                .from("CLASSIFICATIONSTORAGE")
+                                                .startRow(pageStart)
+                                                .pageSize(ClassificationUtils.pagingSize())
+                                                .orderBy("CLASSIFICATIONSTORAGE.OBJECT_TYPE, CLASSIFICATIONSTORAGE.OBJECT_ROWID")
+                                                .nextTablePage();
+            var objectType, objectRowId;
+            for (var idk = 0; idk < storageDatasets.length; idk++)
+            {
+                [objectType, objectRowId] = storageDatasets[idk];
+                if(!storageDatasetObj.hasOwnProperty(objectType))
+                {
+                    storageDatasetObj[objectType] = {};
+                }
+                storageDatasetObj[objectType][objectRowId] = "";
+            }
+            if(storageDatasets.length != ClassificationUtils.pagingSize())
+            {
+                stop = true;
+            }
+            else
+            {
+                pageStart = eMath.addInt(pageStart, ClassificationUtils.pagingSize());
+            }
+        }
+        var objectTypesClassified = newSelect("distinct(CLASSIFICATIONTYPE.OBJECT_TYPE)")
+                                    .from("CLASSIFICATIONTYPE")
+                                    .arrayColumn();
+        
+        var storageInsertStatements = [];
+        for (let i = 0; i < objectTypesClassified.length; i++)
+        {
+            var objectidk = objectTypesClassified[i];
+            var table = objectidk.toUpperCase();
+            var idColumn = table + "." + table + "ID";
+            var cond = newWhere("1 = 1");
+            if(objectidk == "Organisation")
+            {
+                table = "CONTACT";
+                idColumn = "CONTACT.CONTACTID";
+                cond = cond.and("CONTACT.PERSON_ID is null")
+                            .and("CONTACT.CONTACTID", OrgUtils.getDSGVOAnonymisierungsOrganisationId(), SqlBuilder.NOT_EQUAL())
+                            .and("CONTACT.CONTACTID", OrgUtils.getPrivateOrganisationId(), SqlBuilder.NOT_EQUAL())
+                            .and("ORGANISATION.ORGANISATIONID", "0", SqlBuilder.NOT_EQUAL())
+            }
+            let stop2 = false
+            while(stop2 == false)//paging because of potentially huge amounts of data
+            {
+                var objectsSelect = newSelect(idColumn)
+                                            .from(table);
+                if(objectidk == "Organisation")
+                {
+                    objectsSelect = objectsSelect.join("ORGANISATION", "CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID");
+                }
+                objectsSelect = objectsSelect
+                                    .where(cond)
+                                    .startRow(pageStart)
+                                    .pageSize(ClassificationUtils.pagingSize())
+                                    .orderBy(idColumn)
+                                    .nextTablePage();
+                var objectRowId2;
+                for (let ii = 0; ii < objectsSelect.length; ii++)
+                {
+                    objectRowId2 = objectsSelect[ii];
+                    if(!storageDatasetObj.hasOwnProperty(objectidk) || !storageDatasetObj[objectidk].hasOwnProperty(objectRowId2))
+                    {
+                        storageInsertStatements.push(new SqlBuilder().buildInsertStatement({
+                                                        "CLASSIFICATIONVALUE": "-",
+                                                        "OBJECT_ROWID": objectRowId2,
+                                                        "OBJECT_TYPE": objectidk
+                                                    }, "CLASSIFICATIONSTORAGE", "CLASSIFICATIONSTORAGEID"));
+                    }
+                }
+                if(objectsSelect.length != ClassificationUtils.pagingSize())
+                {
+                    stop2 = true;
+                }
+                else
+                {
+                    pageStart = eMath.addInt(pageStart, ClassificationUtils.pagingSize());
+                }
+            }
+        }
+        if(storageInsertStatements.length > 0)
+        {
+            db.inserts(storageInsertStatements);
+        }
+        
         return {"objectRowIdArray": null
-                , "objectTypes": null
-                , "doneSelecting": false};
+                , "objectTypes": null};
     }
-    else
+    else 
     {
         var outdatedStoredClassifications = [];
         var objectTypes = [];
         var objectRowIdArray = [];
 
-        if (pSingleRefreshRowId)
-        {
+
             outdatedStoredClassifications = newSelect("CLASSIFICATIONSTORAGE.OBJECT_TYPE, CLASSIFICATIONSTORAGE.OBJECT_ROWID")
                                                     .from("CLASSIFICATIONSTORAGE")
                                                     .where("CLASSIFICATIONSTORAGE.OBJECT_ROWID", pSingleRefreshRowId)
                                                     .orderBy("CLASSIFICATIONSTORAGE.OBJECT_TYPE, CLASSIFICATIONSTORAGE.OBJECT_ROWID")
                                                     .table();
 
-            if (outdatedStoredClassifications.length == 0) //insert the classificationString if none exists
+            if (outdatedStoredClassifications.length == 0) //insert the classificationString if it doesn't exists
             {
                 let amountOfGroups = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID")
                                             .from("CLASSIFICATIONTYPE")
@@ -1380,31 +1491,11 @@ ClassificationUpdateHelper._buildOutdatedStoredClassificationObject = function(p
                                                         , "CLASSIFICATIONVALUE"
                                                         , "OBJECT_ROWID"
                                                         , "OBJECT_TYPE"
-                                                        , "OUTDATED"
                                                         ], null, [util.getNewUUID()
                                                                     , newString
                                                                     , pSingleRefreshRowId
-                                                                    , pObjectType
-                                                                    , 1
-                                                                    ]);
+                                                                    , pObjectType]);
             }
-
-        }
-        else
-        {
-            outdatedStoredClassifications = newSelect("CLASSIFICATIONSTORAGE.OBJECT_TYPE, CLASSIFICATIONSTORAGE.OBJECT_ROWID")
-                                                        .from("CLASSIFICATIONSTORAGE")
-                                                        .where("CLASSIFICATIONSTORAGE.OUTDATED", 1)
-                                                        .pageSize(400)
-                                                        .orderBy("CLASSIFICATIONSTORAGE.OBJECT_TYPE, CLASSIFICATIONSTORAGE.OBJECT_ROWID")
-                                                        .nextTablePage();
-        }
-
-        if (outdatedStoredClassifications.length != 5)
-        {
-            doneSelecting = true;
-        }
-
         let helperObject = {};                                      
         if (outdatedStoredClassifications)
         {
@@ -1427,8 +1518,7 @@ ClassificationUpdateHelper._buildOutdatedStoredClassificationObject = function(p
             }
         }
         return {"objectRowIdArray": objectRowIdArray
-                , "objectTypes": objectTypes
-                , "doneSelecting": doneSelecting};
+                , "objectTypes": objectTypes};
     }
 };
 
@@ -1481,7 +1571,7 @@ ClassificationUpdateHelper._isRelevantFilter = function(pUid, pFilter, pClassifi
     var recs = pClassificationTypesFilter[pFilter];
     if (recs != undefined)
     {
-        include = recs.some(function (rec) {return rec[0] == pUid});
+        include = recs.some(function (rec) {return rec[0] == pUid}); //uuid HAS to to be at position 0
     }
     return include;
 }
@@ -1559,6 +1649,7 @@ ClassificationUpdateHelper._isRelevant = function(pTypeId, pUid, pFilter, pClass
 *                                                           {"achievedScoresObject": object
 *                                                            , "indicatorObj": object
 *                                                            , "orderedGroups": array
+*                                                            , "orderedTypesPerGroup": object
 *                                                            , "newGradingString": String}<br>
 *                                                           else:
 *                                                           {"outputInfo": object}
@@ -1632,16 +1723,39 @@ ClassificationUpdateHelper._updateOutdatedDatasets = function(pClassificationObj
         var filterFields = [];
         if (isOrganisation)
         {
-            filterFields = ["CONTACTID", "CUSTOMERCODE", "INFO", "LANGUAGE", "NAME", "STANDARD_CITY", "STANDARD_EMAIL_COMMUNICATION", "STANDARD_PHONE_COMMUNICATION", "STATUS", "TYPE"];
+            filterFields.push("CONTACTID");//UUID at first position (important for _isRelevantFilter())
         }
         else if (currentObjectTable == "Salesproject")
         {
-            filterFields = ["SALESPROJECTID", "CONTACT_ID", "ENDDATE", "INFO", "PHASE", "PROBABILITY", "PROJECTCODE", "PROJECTTITLE", "REASONS", "STARTDATE", "STATUS", "VOLUME"];
+            filterFields.push("SALESPROJECTID");//UUID at first position (important)
         }
         else
         {
             throw new Error("updateClassifications_serverProcess: objectType doesn't exist or is not implemented correctly, contact an administrator.");
         }
+        
+        //get all filters of the current object
+        var setFilters = newSelect("CLASSIFICATIONTYPE.FILTER")
+                                    .from("CLASSIFICATIONTYPE")
+                                    .where("CLASSIFICATIONTYPE.OBJECT_TYPE", objectTypes[currentObjectType])
+                                    .arrayColumn();
+        
+        //loop trough them and add their fields to our array
+        for (var i = 0; i < setFilters.length; i++)
+        {
+            if(setFilters[i] != "")
+            {
+                var filter = JSON.parse(setFilters[i]);
+                if(filter && filter["filter"] && Object.keys(filter["filter"]).length > 0 && filter["filter"]["childs"] && filter["filter"]["childs"].length == 1)
+                {
+                    if(!filterFields.includes(filter["filter"]["childs"][0]["name"]))//no duplicates
+                    {
+                        filterFields.push(filter["filter"]["childs"][0]["name"]);
+                    }
+                }
+            }
+            
+        }
 
         //get an two dimensional array with all the values and displayvalues and store it in fieldDisplayObject with the objectType as key:
         //e.g: {"Organisation":[["STATUS","Status"],["TYPE","Typ"],["eyJpZCI6IjU0N2I4YjlkLTg4YmEtNDU5MC05ZTAxLTM0ZDJhNTgxMTZjYyIsInR5cGUiOiJDT01CTyJ9","Besuchsplanung / Besuchsfrequenz"]...]}
@@ -1650,16 +1764,43 @@ ClassificationUpdateHelper._updateOutdatedDatasets = function(pClassificationObj
                     .concat(ClassificationComplexIndicatorRegistryUtils.getComplexIndicatorArray(objectTypes[currentObjectType]));
 
         //private function for code readability (get's called once for every objectType)
-        var filteredRecsObj = ClassificationUpdateHelper._buildFilteredRecsObject(classificationTypesFilterObj, objectTypes[currentObjectType], filterFields);
+        var filteredRecsObj = ClassificationUpdateHelper._buildFilteredRecsObject(classificationTypesFilterObj, objectTypes[currentObjectType], filterFields, pSingleRefreshRowId);
 
 
         //all groups of the objectType in the correct order, needed later to also add the "-" gradings if no classificationType has been set under that group
-        orderedGroups = newSelect("distinct CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, CLASSIFICATIONGROUP.SORTING")
+        var orderedGroups = newSelect("distinct CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, CLASSIFICATIONGROUP.SORTING")
                                     .from("CLASSIFICATIONGROUP")
                                     .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID")
                                     .where("CLASSIFICATIONTYPE.OBJECT_TYPE", objectTypes[currentObjectType])
                                     .orderBy("CLASSIFICATIONGROUP.SORTING")
                                     .table();
+        
+        var orderedTypesArray = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.SORTING")
+                                    .from("CLASSIFICATIONTYPE")
+                                    .where("CLASSIFICATIONTYPE.OBJECT_TYPE", objectTypes[currentObjectType])
+                                    .orderBy("CLASSIFICATIONTYPE.SORTING")
+                                    .table();
+                                    
+        var helperObject = {};
+        var orderedTypesPerGroup = {}
+        let groupId, typeId, sorting;
+        for (let element in orderedTypesArray)
+        {
+            [groupId, typeId, sorting] = orderedTypesArray[element];
+            if (!helperObject.hasOwnProperty(groupId))
+            {
+                orderedTypesPerGroup[groupId] = {};
+                helperObject[groupId] = "";
+
+            }
+            if (!helperObject.hasOwnProperty(typeId))
+            {
+                orderedTypesPerGroup[groupId][typeId] = "";//same logic as before
+                helperObject[typeId] = "";
+            }
+        }
+
+
 
         if (pSingleRefreshRowId)
         {
@@ -1690,25 +1831,18 @@ ClassificationUpdateHelper._updateOutdatedDatasets = function(pClassificationObj
         var indicatorObj = ClassificationUpdateHelper._buildindicatorObj(objectTypes[currentObjectType]);
 
         var startRow = 0;
+        var startRowIncreased; // once we are higher than the pageSize of the core (400!) getRows() doesn't actually start with the specified startrow as offset, but instead 100 rows earlier, so we have to increase the startRow by 100 once we are over 400
         var stop = false;
         var entityFields = ClassificationUpdateHelper._getEntityFields(objectTypes[currentObjectType]);
 
-        var orderedGroups = newSelect("distinct CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, CLASSIFICATIONGROUP.SORTING")
-                                    .from("CLASSIFICATIONGROUP")
-                                    .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID")
-                                    .where("CLASSIFICATIONTYPE.OBJECT_TYPE", objectTypes[currentObjectType])
-                                    .orderBy("CLASSIFICATIONGROUP.SORTING")
-                                    .table();
-
         var achievedScoresObject = {};
-        var pagingSize = 400;//in variable so there is only one place to edit
-        //page entities.getRows instead of getting all at once
         while(!stop)
         {
             var objectValuesLoadConfig = entities.createConfigForLoadingRows()
                                                     .fields(entityFields)
                                                     .ignorePermissions(true)
-                                                    .entity(ContextUtils.getEntity(objectTypes[currentObjectType]));
+                                                    .entity(ContextUtils.getEntity(objectTypes[currentObjectType]))
+                                                    .addParameter("IgnoreOrderBy_param", true);
             if (objectRowIdArray && !pSingleRefreshRowId)//objectRowIdArray is already paged
             {
                 objectValuesLoadConfig = objectValuesLoadConfig.uids(objectRowIdArray);
@@ -1716,9 +1850,10 @@ ClassificationUpdateHelper._updateOutdatedDatasets = function(pClassificationObj
             }
             else
             {
+                startRowIncreased = startRow >= 400 ? startRow+100 : startRow;
                 objectValuesLoadConfig = objectValuesLoadConfig
-                                                    .startrow(startRow)
-                                                    .count(pagingSize);
+                                                    .startrow(startRowIncreased)
+                                                    .count(ClassificationUtils.pagingSizeLoadEntity());
 
                 if (pSingleRefreshRowId)
                 {
@@ -1727,9 +1862,9 @@ ClassificationUpdateHelper._updateOutdatedDatasets = function(pClassificationObj
             }
             var rows = entities.getRows(objectValuesLoadConfig);
 
-            if (rows.length == pagingSize)
+            if (rows.length == ClassificationUtils.pagingSizeLoadEntity())
             {
-                startRow = eMath.addInt(startRow, pagingSize);
+                startRow = eMath.addInt(startRow, ClassificationUtils.pagingSizeLoadEntity());
             }
             else
             {
@@ -1745,6 +1880,7 @@ ClassificationUpdateHelper._updateOutdatedDatasets = function(pClassificationObj
                 return {"achievedScoresObject": achievedScoresObject
                         , "indicatorObj": indicatorObj
                         , "orderedGroups": orderedGroups
+                        , "orderedTypesPerGroup": orderedTypesPerGroup
                         , "newGradingString": processValues["newGradingString"]};
             }
         }
@@ -1752,10 +1888,5 @@ ClassificationUpdateHelper._updateOutdatedDatasets = function(pClassificationObj
 
     var outputInfo = pOutputInfo  + JSON.stringify(outputInformation) + "\n";
 
-    if (groupsThatNeedUpdate)
-    {
-        var cond = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", groupsThatNeedUpdate, SqlBuilder.IN());
-        cond.updateData(true, "CLASSIFICATIONTYPE", ["OUTDATED"], null, [0]);
-    }
     return {"outputInfo": outputInfo};
 };
\ No newline at end of file
diff --git a/process/Classification_lib/process.js b/process/Classification_lib/process.js
index ea0618f6251d642476c7a7d4fcc4256a41a4d781..24e7b954dd11e76f37dde6deabbaf80077a419fc 100644
--- a/process/Classification_lib/process.js
+++ b/process/Classification_lib/process.js
@@ -1,3 +1,4 @@
+import("system.eMath");
 import("ClassificationIndicatorFieldRegistry_basic");
 import("AttributeFilter_lib");
 import("Attribute_lib");
@@ -60,29 +61,6 @@ ClassificationUtils.getAllGroups = function(pObjectType)
     return sql.table();
 }
 
-
-/**
- * Set a value for a classification type
- * 
- * @param {String} pObjectType 
- * @param {String} pObjectId
- * @param {String} pClassificationTypeId
- * @param {String} pClassificationScoreId 
- */
-ClassificationUtils.setClassificationValue = function(pObjectType, pObjectId, pClassificationTypeId, pClassificationScoreId)
-{   
-    var newId = util.getNewUUID();
-    db.insertData("CLASSIFICATION", ["CLASSIFICATIONID", "OBJECT_TYPE", "OBJECT_ROWID", "CLASSIFICATIONTYPE_ID", "VALUE"], null, [
-        newId,
-        pObjectType,
-        pObjectId,
-        pClassificationTypeId,
-        pClassificationScoreId,
-    ]);
-    newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", pObjectId).updateData(true, "CLASSIFICATIONSTORAGE", ["OUTDATED"], null, 1)
-}
-
-
 /**
  * Gets the classificationGradingTable for a classificationGroup as Array.<br>
  * ordered by the MinPercent       descending              <br>
@@ -204,66 +182,6 @@ ClassificationUtils.getGradingFromObject = function(pGradingObject, pGroupId, pS
     return grading;
 }
 
-/**
- * This function is used in the workflowExtention_serverProcess.
- * It checks whether or not the change has any influence on stored classificationStorage datasets
- * by checking if the entity itself is classificationRelevant or the entity has an relation with an classificationRelevant entity
- * <p/>
- * For further context behind why we use this outdated flag see also the documentation properties of "updateClassifications_serverProcess" and the classification_entities
- * 
- * 
- * @param {Array} pTargetIds                    <p/> TargetIds
- * @param {String} pEntityName                  <p/> Entity name
- * @param {Object} pRowData                     <p/> row data
- * @param {Object} pChangedRows                 <p/> changed rows
- *                                      
- * @return {void}
- * @static 
- */
-ClassificationUtils.setClassificationStorageDatasetsOutdated = function (pTargetIds, pEntityName, pRowData, pChangedRows)
-{
-    var relevantForClassification = false;
-    var classificationStorageIds = [];
-    var entityName = pEntityName;
-
-    if (entityName == "Organisation_entity" || entityName == "Salesproject_entity")
-    {
-        relevantForClassification = true;
-        classificationStorageIds.push(pTargetIds);
-    }
-    if (Dependency.getDependency(entityName).includes("Organisation_entity"))
-    {
-        relevantForClassification = true;
-        classificationStorageIds.push(Dependency.mapping()[entityName]["Organisation_entity"].getUIDsfn(pRowData, pChangedRows));
-    }
-    if (Dependency.getDependency(entityName).includes("Salesproject_entity"))
-    {
-        relevantForClassification = true;
-        classificationStorageIds.push(Dependency.mapping()[entityName]["Salesproject_entity"].getUIDsfn(pRowData, pChangedRows));
-    }
-
-//we have to remove empty arrays, since otherwise it would lead to an error when trying to use the condition for updating
-//empty arrays occur when e.g. inserting something that doesn't have any classificationStorageIds even though it is classificationrelevant
-    for (let i = 0; i < classificationStorageIds.length; i++)
-    {
-        if (classificationStorageIds[i][0] == undefined)
-        {
-            classificationStorageIds.splice(i, 1);
-            i--;
-        }
-    }
-
-    //set outdated flag for the classificationStorage datasets
-    if (relevantForClassification && classificationStorageIds.length > 0) // also check for the classificationStorageIds.length since it could be empty
-    {
-        for (let i = 0; i < classificationStorageIds.length; i++) 
-        {
-            var cond = newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", classificationStorageIds[i], SqlBuilder.IN());
-            cond.updateData(true, "CLASSIFICATIONSTORAGE", ["OUTDATED"], null, [1]);
-        }
-    }
-};
-
 /**
  * This function is used in the FIELD.dropDownProcess in ClassificationAdmin.
  * Concats and reruns the entityfields specified in $ClassificationIndicatorRegistry.getEntityNumberFields(), $ClassificationIndicatorRegistry.getEntityDropDownFields()
@@ -393,6 +311,164 @@ ClassificationUtils.getClassificationScoreStateProcess = function (pRecordState,
     return state;
 };
 
+/**
+ * Helper function used by two actions in classification admin to make it possible to move the classification groups and classification types arround
+ * <p/>
+ * @param {String} pSelection                 <p/> the selection (result of vars.get("$sys.selection))
+ * 
+ * @param {String} pDirection                 <p/> direction ("up" or "down)
+ *                                      
+ * @return {boolean} true if successfull<br/>
+ */
+ClassificationUtils.move = function (pSelection, pDirection)
+{
+    var selection = pSelection;
+    var itemsToMove = {};
+    var id, sorting;
+    var moveInt = 0;
+    if(pDirection == $ClassificationMoveDirections.DOWN())
+    {
+        moveInt = -1;
+    }
+    else if(pDirection == $ClassificationMoveDirections.UP())
+    {
+        moveInt = 1;
+    }
+    else
+    {
+        return false;
+    }
+        
+    if ((!selection || selection == "" || selection == []) || (selection[0].charAt(0) != ";" && selection[0].charAt(selection[0].length) != ";"))// no selection or object_type selected
+    {
+        return false;
+    }
+    else//classification_group
+    {
+        var decodedSelection = text.decodeMS(selection[0]);
+        var data = [];
+        if (decodedSelection[0].charAt(0) != ";" && decodedSelection[0].charAt(decodedSelection[0].length) != ";")
+        {
+            itemsToMove["whatToMove"] = "CLASSIFICATIONGROUP";
+            data = newSelect("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, max(CLASSIFICATIONGROUP.SORTING)")
+                                    .from("CLASSIFICATIONGROUP")
+                                    .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID")
+                                    .where("CLASSIFICATIONTYPE.OBJECT_TYPE",  decodedSelection[0])
+                                    .groupBy("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID")
+                                    .orderBy("max(CLASSIFICATIONGROUP.SORTING)")
+                                    .table();
+
+        }
+        else//classification_type
+        {
+            itemsToMove["whatToMove"] = "CLASSIFICATIONTYPE";
+            var classificationGroupId = text.decodeMS(decodedSelection[0])[1];
+            data = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.SORTING")
+                                                .from("CLASSIFICATIONTYPE")
+                                                .where("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", classificationGroupId)
+                                                .orderBy("CLASSIFICATIONTYPE.SORTING")
+                                                .table();
+        }
+        
+        for (let i = 0; i < data.length; i++)
+        {
+            [id, sorting] = data[i];
+
+            if(id == decodedSelection[1])
+            {
+                itemsToMove["up"] = {};
+                itemsToMove["up"]["id"] = id;
+                itemsToMove["up"]["sorting"] = sorting;
+                itemsToMove["down"] = {};
+                itemsToMove["down"]["id"] = data[eMath.subInt(i, moveInt)][0];
+                itemsToMove["down"]["sorting"] = data[eMath.subInt(i, moveInt)][1];
+                break;
+            }
+        }
+            
+        var updateStatements = [];
+        updateStatements.push([itemsToMove["whatToMove"], ["SORTING"], null, [eMath.subInt(itemsToMove["up"]["sorting"], moveInt)], newWhere(itemsToMove["whatToMove"] + "." + itemsToMove["whatToMove"] + "ID", itemsToMove["up"]["id"]).build()])
+        updateStatements.push([itemsToMove["whatToMove"], ["SORTING"], null, [eMath.addInt(itemsToMove["down"]["sorting"], moveInt)], newWhere(itemsToMove["whatToMove"] + "." + itemsToMove["whatToMove"] + "ID", itemsToMove["down"]["id"]).build()])
+        db.execute(updateStatements)
+        neon.refreshAll();
+        return true;
+    }
+};
+
+/**
+ * Helper function used by two actions in classification admin to set the componentstate according to the selection adn direction
+ * <p/>
+ * @param {String} pSelection                 <p/> the selection (result of vars.get("$sys.selection))
+ * 
+ * @param {String} pDirection                 <p/> direction ("up" or "down)
+ *                                      
+ * @return {String} state<br/>
+ */
+ClassificationUtils.moveAble = function (pSelection, pDirection)
+{
+    var selection = pSelection;
+    var itemsToMove = {};
+    var moveInt = 0;
+    var state = neon.COMPONENTSTATE_DISABLED;
+    if(!((!selection || selection == "" || selection == []) || (selection[0].charAt(0) != ";" && selection[0].charAt(selection[0].length) != ";")))// no selection or object_type selected
+    {
+        
+        if(pDirection == "down")
+        {
+            moveInt = -1;
+        }
+        else if(pDirection == "up")
+        {
+            moveInt = 1;
+        }
+        else
+        {
+            return state;
+        }
+
+        var decodedSelection = text.decodeMS(selection[0]);
+        var data = [];
+        var id;
+        if (decodedSelection[0].charAt(0) != ";" && decodedSelection[0].charAt(decodedSelection[0].length) != ";")
+        {
+            itemsToMove["whatToMove"] = "CLASSIFICATIONGROUP";
+            data = newSelect("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, max(CLASSIFICATIONGROUP.SORTING)")
+                                    .from("CLASSIFICATIONGROUP")
+                                    .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID")
+                                    .where("CLASSIFICATIONTYPE.OBJECT_TYPE",  decodedSelection[0])
+                                    .groupBy("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID")
+                                    .orderBy("max(CLASSIFICATIONGROUP.SORTING)")
+                                    .table();
+
+        }
+        else//classification_type
+        {
+            itemsToMove["whatToMove"] = "CLASSIFICATIONTYPE";
+            var classificationGroupId = text.decodeMS(decodedSelection[0])[1];
+            data = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.SORTING")
+                                                .from("CLASSIFICATIONTYPE")
+                                                .where("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", classificationGroupId)
+                                                .orderBy("CLASSIFICATIONTYPE.SORTING")
+                                                .table();
+        }
+        state = neon.COMPONENTSTATE_EDITABLE;
+        for (let i = 0; i < data.length; i++)
+        {
+            id = data[i][0];
+
+            if(id == decodedSelection[1])
+            {
+                if(data[eMath.subInt(i, moveInt)] == "" ||data[eMath.subInt(i, moveInt)] == undefined)
+                {
+                    state = neon.COMPONENTSTATE_DISABLED;
+                    break;
+                }
+            }
+        }
+    }
+        return state;
+};
+
 /*this is right now (2020-08-15) the only way to get something like a constant with 
  - a prober name
  - autocomplete support within the ADITO Designer
@@ -417,4 +493,8 @@ $ClassificationFieldTypes.DATE =                                         functio
 function $ClassificationIndicatorTypes(){}
 $ClassificationIndicatorTypes.ENTITYFIELD =                              function(){return "entityField"};
 $ClassificationIndicatorTypes.ATTRIBUTE =                                function(){return "attribute"};
-$ClassificationIndicatorTypes.COMPLEX =                                  function(){return "complex"};
\ No newline at end of file
+$ClassificationIndicatorTypes.COMPLEX =                                  function(){return "complex"};
+
+function $ClassificationMoveDirections(){}
+$ClassificationMoveDirections.UP =                              function(){return "up"};
+$ClassificationMoveDirections.DOWN =                                function(){return "down"};
\ No newline at end of file
diff --git a/process/CommunicationBlacklist_lib/process.js b/process/CommunicationBlacklist_lib/process.js
index 92670ea96669e2b74a90c1f1fb5bb8086e2eeffb..880cec7d0e86d000377611c801bdbc354cc6806d 100644
--- a/process/CommunicationBlacklist_lib/process.js
+++ b/process/CommunicationBlacklist_lib/process.js
@@ -56,6 +56,7 @@ CommunicationBlacklist.prototype.loadBlacklistRecipients = function (pBulkMailId
     {
         this.blacklistContactIds.add(recipient["CONTACT_ID"]);
     }, this);
+    return this;
 }
 
 CommunicationBlacklist.prototype.hasContactId = function (pContactId)
diff --git a/process/Contact_lib/process.js b/process/Contact_lib/process.js
index 44f60495091428eed2ec7b7b023cff93f24183d7..0c931e6f6b4477cbb0490512d9f1fa287c764264 100644
--- a/process/Contact_lib/process.js
+++ b/process/Contact_lib/process.js
@@ -768,7 +768,7 @@ ContactUtils.getContactIdByEmail = function(pEmail)
     var email = EmailUtils.extractAddress(pEmail).toUpperCase();
     var contactId = newSelect("CONTACT.CONTACTID")
                             .from("COMMUNICATION")
-                            .join("CONTACT", "COMMUNICATION.CONTACT_ID = CONTACT.CONTACTID")
+                            .join("CONTACT", newWhere("COMMUNICATION.OBEJCT_ROWID = CONTACT.CONTACTID").and("COMMUNICATION.OBJECT_TYPE", "Contact"))
                             .where("COMMUNICATION.ADDR", email, "upper(#) = ?")
                             .cell();
     return contactId;
diff --git a/process/CreateSalesproject_workflowService/process.js b/process/CreateSalesproject_workflowService/process.js
index 03e704f2ea6149d061a4434efeac3dc349e8aa81..ec9aed2e2479e75c26495cf8facf42b1b861bde9 100644
--- a/process/CreateSalesproject_workflowService/process.js
+++ b/process/CreateSalesproject_workflowService/process.js
@@ -14,21 +14,6 @@ var business = variables.attributeName;
 
 var id = Salesproject.createNewSalesprojectFromOrg(objectRowId, salesprojectName);
 
-//Set the business as a classification for the salesproject
-var classificationTypeId =  newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID")
-                    .from("CLASSIFICATIONTYPE")
-                    .where("CLASSIFICATIONTYPE.SCORETYPE", "ScoreBranch")
-                    .cell();
-                    
-var classificationScoreId =  newSelect("CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID")
-                    .from("CLASSIFICATIONSCORE")
-                    .where("CLASSIFICATIONSCORE.TITLE", business)
-                    .cell();
-                    
-if(classificationTypeId && classificationScoreId) {
-    ClassificationUtils.setClassificationValue("Salesproject", id, classificationTypeId, classificationScoreId);
-}
-
 //change the linked dataset from organisation to the new salesproject
 var processVariables = {
         "targetId": id,
diff --git a/process/District_lib/process.js b/process/District_lib/process.js
index 269de63eb452827612583af3dc37d21c19b64aff..c98fce798d52807cfeda116b727832bd03a5e86f 100644
--- a/process/District_lib/process.js
+++ b/process/District_lib/process.js
@@ -125,45 +125,83 @@ DistrictUtils.assignDistrict = function (pDistrictId, pAppliedFilter, pContactId
     var newAssigned = 0;
     var unchanged = 0;
     var invalid = 0;
+    var updated = 0;
     
-    //Einlesen von allen bereits existierenden automatischen Zuordnungen,
-    //die nicht auf Status 'zur Prüfung' stehen
-    //Nur notwendig, wenn pContactId leer ist. Ansonsten soll ja gezielt ein neuer Datensatz angelegt werden
+    var updateArray = [];
+    //Einlesen von allen bereits existierenden automatischen Zuordnungen
     var arrExistingIds = [];
     if (!pContactId)
     {
-        arrExistingIds = new SqlBuilder()
-                .select("DISTRICTCONTACT.DISTRICTCONTACTID, DISTRICTCONTACT.CONTACT_ID, DISTRICTCONTACT.ADVISER_CONTACT_ID")
+        arrExistingIds = newSelect(["DISTRICTCONTACT.DISTRICTCONTACTID", "DISTRICTCONTACT.CONTACT_ID", "DISTRICTCONTACT.ADVISER_CONTACT_ID"
+                                    , "DISTRICTCONTACT.ADVISER_ROLE", "DISTRICTCONTACT.ORIGIN", "DISTRICTCONTACT.DISTRICTRESPONSIBLE_ID"
+                                    , "DISTRICTCONTACT.STATUS", "DISTRICTCONTACT.VALID_FROM", "DISTRICTCONTACT.VALID_UNTIL, DISTRICTCONTACT.VISITFREQUENCY"])
                 .from("DISTRICTCONTACT")    
                 .where("DISTRICTCONTACT.DISTRICT_ID", pDistrictId)
                 .and ("DISTRICTCONTACT.ORIGIN", $KeywordRegistry.districtOrigin$auto())
-                .and ("DISTRICTCONTACT.STATUS", $KeywordRegistry.contactStatus$inReview(), SqlBuilder.NOT_EQUAL())
                 .table();    
+        
+        var districtContactObj = {};//object to store values of all auto contacts
+        for (let element in arrExistingIds)
+        {
+            let[districtContactId, contact_id, adviser_contact_id, adviserRole, origin, responsible_id, status, visitFrequency] = arrExistingIds[element];
+            if(origin == $KeywordRegistry.districtOrigin$auto())
+            {
+                if (!districtContactObj.hasOwnProperty(responsible_id))
+                {
+                    districtContactObj[responsible_id] = {};
+                }
+                districtContactObj[responsible_id][districtContactId] = {}
+
+                districtContactObj[responsible_id][districtContactId]["adviserRole"] = adviserRole;
+                districtContactObj[responsible_id][districtContactId]["districtContactId"] = [districtContactId];
+                districtContactObj[responsible_id][districtContactId]["status"] = status;
+                districtContactObj[responsible_id][districtContactId]["valid_from"] = valid_from;
+                districtContactObj[responsible_id][districtContactId]["valid_until"] = valid_until;
+                districtContactObj[responsible_id][districtContactId]["visitFrequency"] = visitFrequency;
+            }
+        }
     }
     
     //Einlesen aller Betreuer, die dem übergebenen Gebiet zugeordnet sind
-    var arrResponsibleIds = new SqlBuilder()
-            .select("DISTRICTRESPONSIBLE.EMPLOYEE_CONTACT_ID, DISTRICTRESPONSIBLE.ADVISER_ROLE, " +
-                    "DISTRICTRESPONSIBLE.ADVISER_STATUS, DISTRICTRESPONSIBLE.VALID_FROM, DISTRICTRESPONSIBLE.VALID_UNTIL, DISTRICTRESPONSIBLE.VISITFREQUENCY")
+    var arrResponsibleIds = newSelect(["DISTRICTRESPONSIBLE.EMPLOYEE_CONTACT_ID", "DISTRICTRESPONSIBLE.ADVISER_ROLE",
+                                        "DISTRICTRESPONSIBLE.ADVISER_STATUS", "DISTRICTRESPONSIBLE.VALID_FROM", "DISTRICTRESPONSIBLE.VALID_UNTIL", 
+                                        "DISTRICTRESPONSIBLE.VISITFREQUENCY", "DISTRICTRESPONSIBLE.DISTRICTRESPONSIBLEID", "DISTRICTRESPONSIBLE.VISITFREQUENCY"])
             .from("DISTRICTRESPONSIBLE")    
             .where("DISTRICTRESPONSIBLE.DISTRICT_ID", pDistrictId)
             .table();
-
+   
+    
     //Aufbereiten des im JSON-Format übergebenen Filters in eine SQL-Condition
     var appliedFilterCondition = JSON.parse(pAppliedFilter).filter;
     appliedFilterCondition = JSON.stringify(appliedFilterCondition);   
     var sqlCondition = db.toFilterCondition(appliedFilterCondition, "Organisation_entity");       
     
-    //Einlesen der Contact-IDs zu den Firmen, die gemäß Filter diesem Gebiet zugeordnet sind
-    var arrOrgContactIds = new SqlBuilder()
-            .selectDistinct("CONTACT.CONTACTID")
+    //Get contactIds of this district using it's filter in the condition
+    var orgContactIdAndStatus = newSelect("CONTACT.CONTACTID, CONTACT.STATUS")
             .from("ORGANISATION")
             .join("CONTACT", newWhere("ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID").and("CONTACT.PERSON_ID is null"))
             .leftJoin("ADDRESS", "ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID")
             .leftJoin("CLASSIFICATIONSTORAGE", "CLASSIFICATIONSTORAGE.OBJECT_ROWID = CONTACT.CONTACTID")
             .whereIfSet(sqlCondition)
             .andIfSet("CONTACT.CONTACTID", pContactId)
-            .arrayColumn();               
+            .table();               
+    var arrOrgContactIds = [];
+    
+    //we want to set the status of the inactive ones to "in Review" and continue with the other ones
+    for (i = 0; i < orgContactIdAndStatus.length; i++)
+    {
+            let contactId, status;
+            [contactId, status] = orgContactIdAndStatus[i];
+            if(status == $KeywordRegistry.contactStatus$inactive())
+            {
+                newWhere("CONTACT.CONTACTID", contactId).updateData(true, "CONTACT", ["STATUS"], null, [$KeywordRegistry.contactStatus$inReview()]);
+            }
+            else
+            {
+                arrOrgContactIds.push(contactId);
+            }
+    }
+         
                  
     var insertArray = [];
     var colsInsert = [
@@ -178,14 +216,15 @@ DistrictUtils.assignDistrict = function (pDistrictId, pAppliedFilter, pContactId
             "ORIGIN",
             "USER_NEW",
             "DATE_NEW",
-            "VISITFREQUENCY"
+            "VISITFREQUENCY",
+            "DISTRICTRESPONSIBLE_ID"
         ];
-    var updateArray = [];
+        
     var colsUpdate = [
-            "STATUS",
-            "USER_EDIT",
-            "DATE_EDIT"
-        ];        
+                    "STATUS",
+                    "USER_EDIT",
+                    "DATE_EDIT", 
+                    "VALID_UNTIL"];         
 
     //Anlegen der Firmen-Betreuer-Datensätze in der Tabelle DISTRICTCONTACT
     for (var i=0; i<arrOrgContactIds.length; i++)
@@ -193,13 +232,51 @@ DistrictUtils.assignDistrict = function (pDistrictId, pAppliedFilter, pContactId
         for (var j=0; j<arrResponsibleIds.length; j++)
         {
             //Existiert der Firmen-Betreuer-Datensatz bereits?
-            var found = 'N';
+            var found = false;
             for (var k=0; k<arrExistingIds.length; k++)
             {
                 if (arrExistingIds[k][1] == arrOrgContactIds[i] && arrExistingIds[k][2] == arrResponsibleIds[j][0])
                 {
                     unchanged++;
-                    found = 'Y';
+                    found = true;
+                    var fieldValues = {};
+                    var changed = false;
+
+                    if(arrResponsibleIds[j][1] != arrExistingIds[k][3])//role
+                    {
+                        fieldValues["ADVISER_ROLE"] = arrResponsibleIds[j][1];
+                        changed = true;
+                    }
+                    if(arrResponsibleIds[j][2] != arrExistingIds[k][6])//status
+                    {
+                        fieldValues["STATUS"] = arrResponsibleIds[j][2];
+                        changed = true;
+                    }
+                    if(arrResponsibleIds[j][5] != arrExistingIds[k][9])//visitFrequency
+                    {
+                        fieldValues["VISITFREQUENCY"] = arrResponsibleIds[j][5];
+                        changed = true;
+                    }
+                    if(arrResponsibleIds[j][3] != arrExistingIds[k][7])//valid_from
+                    {
+                        fieldValues["VALID_FROM"] = arrResponsibleIds[j][3];
+                        changed = true;
+                    }
+                    if(arrResponsibleIds[j][4] != arrExistingIds[k][6])//valid_until
+                    {
+                        fieldValues["VALID_UNTIL"] = arrResponsibleIds[j][4];
+                        changed = true;
+                    }
+                    if(changed) 
+                    {
+                        unchanged++;
+                    }
+                    
+                    if(Object.keys(fieldValues).length > 0)
+                    {
+                        updateArray.push(newWhere("DISTRICTCONTACT.DISTRICTCONTACTID", arrExistingIds[k][0]).buildUpdateStatement(fieldValues, "DISTRICTCONTACT"));
+                    }
+                    
                     //Gefundenen Eintrag aus dem Array entfernen 
                     //-> Am Schluss bleiben in dem Array alle ungültigen Datensätze übrig. Bei diesen wird weiter unten der Status geändert 
                     arrExistingIds.splice(k, 1);
@@ -207,7 +284,7 @@ DistrictUtils.assignDistrict = function (pDistrictId, pAppliedFilter, pContactId
                 }
             }
             //Firmen-Betreuer-Datensatz existiert noch nicht -> Insert
-            if (found == 'N')
+            if (found == false)
             {
                 //Falls Status null, dann auf active setzen
                 if (Utils.isNullOrEmpty(arrResponsibleIds[j][2])) 
@@ -227,14 +304,16 @@ DistrictUtils.assignDistrict = function (pDistrictId, pAppliedFilter, pContactId
                     $KeywordRegistry.districtOrigin$auto(),
                     vars.get("$sys.user"),
                     vars.get("$sys.date"),
-                    arrResponsibleIds[j][5]
+                    arrResponsibleIds[j][5],
+                    arrResponsibleIds[j][6]
                 ]; 
                 insertArray.push(["DISTRICTCONTACT", colsInsert, null, valsInsert]);
             }            
         }        
     }
     newAssigned = insertArray.length;
-    db.inserts(insertArray);    
+    db.inserts(insertArray);
+    db.updates(updateArray);
     
     //Gibt es noch ungültige Zuordnungen, dann bei diesen den Status auf "zur Prüfung setzen"
     if (arrExistingIds.length > 0)
@@ -242,14 +321,18 @@ DistrictUtils.assignDistrict = function (pDistrictId, pAppliedFilter, pContactId
         invalid = arrExistingIds.length;
                                 
         //die erste Spalte enthält die Ids der zu aktualisierenden Datensätze
-        var arrIds = arrExistingIds.map(function(value) { return value[0]; });
+        var arrIds = arrExistingIds.map(function(value)
+        {
+            return value[0];
+        });
         DistrictUtils.setDistrictContactStatus (arrIds, $KeywordRegistry.contactStatus$inReview());
     }
         
     return {
         newAssigned : newAssigned,
         invalid : invalid,
-        unchanged : unchanged
+        unchanged : unchanged, 
+        updated: updated
     };    
 }
 
diff --git a/process/DocumentTemplate_lib/process.js b/process/DocumentTemplate_lib/process.js
index 9fdd37832b66679a34fb7a4b7304e22a7b959ab1..74f19214f10db8259cc8e314878a63ba5b2b6fec 100644
--- a/process/DocumentTemplate_lib/process.js
+++ b/process/DocumentTemplate_lib/process.js
@@ -306,12 +306,16 @@ DocumentTemplate.loadTemplate = function (pAssignmentRowId, pAssignmentTable, pR
 {   
     var alias = SqlUtils.getBinariesAlias();
     if (!pAssignmentTable)
+    {    
         pAssignmentTable = "DOCUMENTTEMPLATE";
+    }
     
     // if the templateId is accessable, use it, to enable the templateto load attachments
     var templateId;
     if (pAssignmentTable == "DOCUMENTTEMPLATE")
-        templateId = pAssignmentRowId;
+    {
+        templateId = pAssignmentRowId;    
+    }
     
     if (templateId)
     {
@@ -319,17 +323,21 @@ DocumentTemplate.loadTemplate = function (pAssignmentRowId, pAssignmentTable, pR
         if (template == null)
         {
             if(vars.getString("$sys.isserver") == "true")
+            {
                 throw new Error("loadTemplate: File from this template could not be found anymore. "
-                                + "Please go to the template and upload a new file. TemplateID: '" + templateId + "'")
+                                + "Please go to the template and upload a new file. TemplateID: '" + templateId + "'");    
+            }
             else
+            {    
                 question.showMessage(translate.text("File from this template could not be found anymore. "
                                 + "Please go to the template and upload a new file."), question.ERROR, translate.text("Error"));
+            }
             
             return null;
         }
     }
     var templateDocument;
-    if(pAssignmentTable == "SERIALLETTER")
+    if(pAssignmentTable == "SERIALLETTER" && db.getBinaryCount(pAssignmentTable, "SERIALLETTERFILE", pAssignmentRowId, alias, null) > 0)
     {
         templateDocument = db.getBinaryMetadata(pAssignmentTable, "SERIALLETTERFILE", pAssignmentRowId, false, alias, null);
     }
@@ -338,14 +346,18 @@ DocumentTemplate.loadTemplate = function (pAssignmentRowId, pAssignmentTable, pR
         templateDocument = db.getBinaryMetadata(pAssignmentTable, "DOCUMENT", pAssignmentRowId, false, alias, null);
     }
     if (!templateDocument[0])
+    {    
         return new DocumentTemplate(undefined, undefined, undefined, undefined, templateId);
+    }
     var binaryId = templateDocument[0][db.BINARY_ID];
     var filename = templateDocument[0][db.BINARY_FILENAME];
     var mimeType = templateDocument[0][db.BINARY_MIMETYPE];
     var type = DocumentTemplate.types.fromBinaryMetadata(templateDocument[0]);
     
     if (pResolveSubtemplates == undefined)
+    {    
         pResolveSubtemplates = true;
+    }
     
     return new DocumentTemplate(db.getBinaryContent(binaryId, alias), type, filename, pResolveSubtemplates, templateId, mimeType);
 }
@@ -542,9 +554,9 @@ DocumentTemplate.prototype.getSerialLetterByContactIds = function (pContactIds,
         {
             return replacements[contactId];
         });
+        
         return this._getReplacedODT(replaceArray, pTableData);
     }
-    
     question.showMessage(DocumentTemplate.getSerialLetterODTOnlyMessage(), question.INFORMATION, translate.text("Action not supported"))
     return null;
 }
@@ -714,24 +726,28 @@ DocumentTemplate.prototype.getReplacementsByContactIds = function (pContactIds,
 DocumentTemplate.prototype._getReplacedODT = function (pReplacements, pTableData)
 {
     var filename =  this.filename;
-    if (!filename)
-        filename = "dummyname.odt";
+    var replacedFileData = null;
     
-    var that = this;
+    if (!filename)
+    {
+        filename = "Replaced-Document-Template.odt";    
+    }
     
     //save the file on the server so it can be unzipped via pack.getFromZip
-    var serverFilePath = vars.get("$sys.servertemp") + "/clientid_" + (vars.exists("$sys.clientid") ? vars.get("$sys.clientid") : 0)
-        + "/" + util.getNewUUID() + "/" + filename.replace(/\\/g, "/");
+    var tmpFolder = vars.get("$sys.servertemp");
+    var clientId = vars.exists("$sys.clientid") ? vars.get("$sys.clientid") : 0;
+    var serverFilePath = tmpFolder + "/clientid_" + clientId + "/" + util.getNewUUID() + "/" + filename.replace(/\\/g, "/");
     
     fileIO.storeData(serverFilePath, this.content, util.DATA_BINARY, false);
-    var replacedFileData = null;
+    
     try 
     {
-        if (!_replaceODTFile(pReplacements, serverFilePath, pTableData))
+        if (!_replaceODTFile(pReplacements, serverFilePath, pTableData, this))
+        {    
             return null;
+        }
 
-        replacedFileData = fileIO.getData(serverFilePath, util.DATA_BINARY);
-        
+        replacedFileData = fileIO.getData(serverFilePath, util.DATA_BINARY);    
     }
     finally 
     {
@@ -744,28 +760,42 @@ DocumentTemplate.prototype._getReplacedODT = function (pReplacements, pTableData
     * replaces placeholders in a odt file
     *
     * @param {Object} pReplacements replacement object
-    * @param {String} pODTFileName filename of the odt
+    * @param {String} pODTFileName filename of the odt  
     * @param {Array} pTableData
+    * @param {Array} pCurrentTemplate the Object of the DocumentTemplate
     * 
     * @return {Boolean}
     */
-    function _replaceODTFile (pReplacements, pODTFileName, pTableData)
+    function _replaceODTFile (pReplacements, pODTFileName, pTableData, pCurrentTemplate)
     {
+        var tablePlaceholders = [];
         var senderRelId = EmployeeUtils.getCurrentContactId();
+        
         if (senderRelId == null)
+        {    
             return false;
+        }
+        
         if (!Array.isArray(pReplacements))
+        {    
             pReplacements = [pReplacements];
+        }
+        
         if (!pTableData)
+        {    
             pTableData = [];
-        var tablePlaceholders = [];
+        }
+        
         if (pTableData.length > 0)
         {
             //pTableData[0] = first document
             tablePlaceholders = pTableData[0].map(function (tblData)
             {
                 if (tblData && tblData.length > 0)
+                {    
                     return new Set(Object.keys(tblData[0])); //tblData[0] = first row
+                }
+                
                 return new Set();
             });
         }
@@ -774,6 +804,7 @@ DocumentTemplate.prototype._getReplacedODT = function (pReplacements, pTableData
         {
             //replace placeholders in content.xml
             var contentXml = util.decodeBase64String(pack.getFromZip(pODTFileName, "content.xml"));
+            
             var bodybegin = contentXml.indexOf("<office:body>");
             var bodyend =  contentXml.indexOf("</office:body>") + 14;
             
@@ -794,19 +825,20 @@ DocumentTemplate.prototype._getReplacedODT = function (pReplacements, pTableData
                 for (let placeholder in replacements)
                 {
                     currentBody = StringUtils.replaceAll(currentBody, placeholder, 
-                        replacements[placeholder].replace(/\n/ig, "<text:line-break/>").replace(/&/ig, "&amp;"), "ig");
+                                        replacements[placeholder].replace(/\n/ig, "<text:line-break/>").replace(/&/ig, "&amp;"), "ig");
                 }
                 
-                
-                let tables = pTableData[i] || [];
-                let tableEnd = 0;
+                var tableEnd = 0;
+                var tables = pTableData[i] || [];
                 //for (let tblIndex = 0; tblIndex < tables.length; tblIndex++) //iterate over all tables in the document
                 if (tables.length > 0)
                 {
-                    let hasMoreTables = currentBody.includes("</table:table>");
-                    for (let tblI = 0; tblI < 10 && hasMoreTables; tblI++)
+                    var hasMoreTables = currentBody.includes("</table:table>");
+                    
+                    for (var tblI = 0; tblI < 10 && hasMoreTables; tblI++)
                     {
                         tableEnd = currentBody.indexOf("</table:table>", tableEnd);
+                        
                         if (tableEnd !== -1) //stop if there is no table
                         {
                             tableEnd += 14;
@@ -833,7 +865,7 @@ DocumentTemplate.prototype._getReplacedODT = function (pReplacements, pTableData
                                 for (let rowIndex = 0; rowIndex < tableData.length; rowIndex++)
                                 {
                                     let tableRowData = tableData[rowIndex];
-                                    let replacedRow = that._replaceText(tableRow, tableRowData);
+                                    let replacedRow = pCurrentTemplate._replaceText(tableRow, tableRowData);
                                     currentBody += replacedRow;
                                     tableEnd += replacedRow.length;
                                 }
@@ -841,7 +873,9 @@ DocumentTemplate.prototype._getReplacedODT = function (pReplacements, pTableData
                             }
                         }
                         else
+                        {    
                             hasMoreTables = false;
+                        }
                     }
                 }
                 fullBody += currentBody;
diff --git a/process/EmailFilterHandling_lib/process.js b/process/EmailFilterHandling_lib/process.js
index 156337cb248ad8e26698309f16ad387d86c62fd1..afbc40f1ac400c2da386905d844624b1fca55f34 100644
--- a/process/EmailFilterHandling_lib/process.js
+++ b/process/EmailFilterHandling_lib/process.js
@@ -124,9 +124,10 @@ IncomingEmailFilterProcessor.prototype.checkBodyForIds = function (pEmail)
         //if no maillog was found at least match the mailaddress to a contact
         if(!mailLogId && mailAddress)
         {
-            contactId = newSelect("COMMUNICATION.CONTACT_ID")
+            contactId = newSelect("COMMUNICATION.OBJECT_ROWID")
                         .from("COMMUNICATION")
                         .where("COMMUNICATION.ADDR",mailAddress)
+                        .and("COMMUNICATION.OBJECT_TYPE", "Contact")
                         .cell()
         }
 
diff --git a/process/Email_lib/process.js b/process/Email_lib/process.js
index 71cabd93f638f07c00e3c88c5f690197db5581cd..7e2adcf0baba3a0f3e5bdf943f8bb490c259b238 100644
--- a/process/Email_lib/process.js
+++ b/process/Email_lib/process.js
@@ -92,10 +92,10 @@ EmailWritingUtils.openMailTemplate = function (pToRecipients, pSenderContactId,
  * @param {String} pEmailFilename optional file name of the email.
  * @param {String} [pAdditionalPlaceholders] additional placeholders for the email
  * @param {Array[]} [pUpdateStatements] an array with update statements which will be executed after email is downloaded/sent.
- * @param {String} pDocumentTemplateType The document template type (single or serial - <b><u><i>use keyword!</i></u></b>).
+ * @param {String} pDocumentTemplateTypeClassification The document template type classification.
  */
 EmailWritingUtils.openNewMail = function (pToContactId, pToEmailAddress, pComingFrom, pAttachmentArray, pNotificationMsg, pEmailFilename, 
-                                                pAdditionalPlaceholders, pUpdateStatements, pDocumentTemplateType)
+                                                pAdditionalPlaceholders, pUpdateStatements, pDocumentTemplateTypeClassification)
 {
     var params = {
         "ContactId_param" : pToContactId,
@@ -105,7 +105,7 @@ EmailWritingUtils.openNewMail = function (pToContactId, pToEmailAddress, pComing
         "EmailFilename" : pEmailFilename,
         "AdditionalPlaceholders_param" : JSON.stringify(pAdditionalPlaceholders),
         "UpdateStatements_param" : JSON.stringify(pUpdateStatements),
-        "DocumentTemplateTypeClassification_param" : pDocumentTemplateType
+        "DocumentTemplateTypeClassification_param" : pDocumentTemplateTypeClassification
     };
     
     if (pToEmailAddress)
diff --git a/process/Entity_lib/process.js b/process/Entity_lib/process.js
index a6167c801a0b80c4a9cc90d2856b66994e0dce3b..b85c87aaab9ed86357bb101c3ba2f1056e4920ae 100644
--- a/process/Entity_lib/process.js
+++ b/process/Entity_lib/process.js
@@ -199,17 +199,21 @@ FieldChanges.STATE_DELETED = function (){
  */
 FieldChanges.assimilateChangeAndDispose = function (pFieldName, pAssimilatorFn)
 {
+    var res = null;
     var allChanges = FieldChanges._getStorage();
+    
     if (allChanges[pFieldName] == undefined)
+    {    
         return null;
+    }
 
-    var res = null;
     if (allChanges[pFieldName].state != FieldChanges.STATE_NO_CHANGE())
     {
         res = pAssimilatorFn.call(this, allChanges[pFieldName].state, vars.get(pFieldName));
         allChanges[pFieldName].state = FieldChanges.STATE_NO_CHANGE();
         FieldChanges._setStorage(allChanges);
     }
+    
     return res;
 };
 
diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js
index b210ecbe0bb565ff10712fc44ea616ca6fe5b6d5..37f2bf897f749b02a82d551c5f4497a5ecafb192 100644
--- a/process/KeywordRegistry_basic/process.js
+++ b/process/KeywordRegistry_basic/process.js
@@ -98,6 +98,12 @@ $KeywordRegistry.memberRoleAdvise = function(){return "MEMROLEADVISE";};
 $KeywordRegistry.memberRoleProjAssist = function(){return "MEMROLEPROJASSIST";};
 $KeywordRegistry.memberRoleExSalemang = function(){return "MEMROLEEXSALEMANAG";};
 $KeywordRegistry.memberRoleIntenDistrib = function(){return "MEMROLINSALEMANAG";};
+$KeywordRegistry.memberRoleIntenDistribResp = function(){return "MEMROLEDISTRICTRESPONSIBLE";};
+$KeywordRegistry.memberRoleInitiator = function(){return "MEMROLEINITIATOR";};
+$KeywordRegistry.memberRoleDecisionMaker = function(){return "MEMROLEDECISIONMAKER";};
+$KeywordRegistry.memberRoleUser = function(){return "MEMROLEUSER";};
+$KeywordRegistry.memberRoleIntSales = function(){return "MEMROLEINTSALES";};
+$KeywordRegistry.memberRoleIntResp = function(){return "MEMROLEINTRESPONSIBLE";};
 
 $KeywordRegistry.salesprojectSource = function(){return "SalesprojectSource";};
 
diff --git a/process/LeadQuickAcquisition_lib/process.js b/process/LeadQuickAcquisition_lib/process.js
index 80cf36921cd4df63f84f0c659fd5b4cfbfe51c72..5b0e3236139a059e623b1c61a59ecc24b5394b02 100644
--- a/process/LeadQuickAcquisition_lib/process.js
+++ b/process/LeadQuickAcquisition_lib/process.js
@@ -10,6 +10,7 @@ import("system.auth");
 import("system.util");
 import("system.fileIO");
 import("system.swing");
+import("system.translate");
 import("KeywordRegistry_basic");
 import("Sql_lib");
 import("Email_lib");
@@ -81,9 +82,30 @@ LeadQuickAcquisition.callWebService = function(pFile, pLang)
 
 /**
  * Method which is especially for handling business cards.
+ * 
  * @param pFile the file which will send to the webservice.
  * @param pLang The language which will be used to recognize the business card.
- * @return {Object} the reply from the web service.
+ * 
+ * @return {Object|String} The recognized business card wrapped in a object with the following attrs:
+ *                          <ul>
+ *                              <li>firstName</li>
+ *                              <li>lastName</li>
+ *                              <li>emailAddress</li>
+ *                              <li>phoneNumber</li>
+ *                              <li>mobilePhone</li>
+ *                              <li>address</li>
+ *                              <li>street</li>
+ *                              <li>buildingNo</li>
+ *                              <li>city</li>
+ *                              <li>state</li>
+ *                              <li>postalCode</li>
+ *                              <li>country</li>
+ *                              <li>title</li>
+ *                              <li>companyName</li>
+ *                              <li>website</li>
+ *                              <li>linkedInUrl</li>
+ *                         </ul>
+ *                         Or empty string when an error has occured.
  */
 LeadQuickAcquisition.handleBusinessCard = function(pFile, pLang)
 {
@@ -92,6 +114,13 @@ LeadQuickAcquisition.handleBusinessCard = function(pFile, pLang)
     
     if (isEnabled) 
     {
+        response = LeadQuickAcquisitionBusinessCardUtils._callWebServiceBusinessCard(pFile, pLang);
+        
+        if (Utils.isNullOrEmptyString(response))
+        {
+            return response;
+        }
+        
         response = LeadQuickAcquisitionBusinessCardUtils._callWebServiceBusinessCard(pFile, pLang);
         response = LeadQuickAcquisitionBusinessCardUtils._transformToResponse(response);
     }
@@ -138,67 +167,164 @@ LeadQuickAcquisitionBusinessCardUtils.isEnabled = function()
 
 /**
  * Method which calls the webservice for business card.
+ * 
  * @param pFile the file which will send to the webservice.
  * @param pLang The language which will be used to recognize the business card.
- * @return {Array} Result array (0: recognized business card, 1: language which was used for recognition).
+ * 
+ * @return {String} And string which represents the recognized business card or and empty string when an error during processing occurs.
  */
 LeadQuickAcquisitionBusinessCardUtils._callWebServiceBusinessCard = function(pFile, pLang)
 {
-    var appId = project.getInstanceConfigValue("custom.abbyy.ocr.appId", "");
-    var pwd = project.getInstanceConfigValue("custom.abbyy.ocr.password", "");
-    var authConf = auth.createConfigForBasicAuth()
-                            .userName(appId)
-                            .password(pwd);
-    var conf = net.createConfigForRestWebserviceCall()
+    var taskId, conf, taskStatus, parsed;
+    var logMsgTitel = translate.text("Business card recognization");
+    var response = false;
+    
+    conf = net.createConfigForRestWebserviceCall()
                         .url("https://cloud.ocrsdk.com/processBusinessCard")
                         .actionType("POST")
                         .addQueryParameter("language", pLang)
                         .addQueryParameter("exportFormat", "xml")
                         .addQueryParameter("xml:WriteFieldComponents", "true")
                         .requestEntity(pFile);
+                        
+    try 
+    {            
+        response = util.decodeBase64String(net.callRestWebservice(conf, _getBasicAuth()));
+        response = response.substring(response.indexOf("<response>"), response.length);
+        taskStatus = _getStatus(response, null);
+        parsed = new XML(response);
+        taskId = parsed.task.@id.toString();
+        taskStatus = _checkProcessingProgress(taskId);
+    } 
+    catch (pException) 
+    { 
+        logging.log(translate.text("Calling the abbyy webservice failed"), logging.ERROR, logMsgTitel);
+    }
+
+    
+    if (Utils.isNullOrEmptyString(parsed))
+    {
+        return "";
+    }    
     
-    var response = util.decodeBase64String(net.callRestWebservice(conf, authConf));
-    var responseXml = response.substring(response.indexOf("<response>"), response.length);
-    var taskId = new XML(responseXml).task.@id;
-    var getStatus = function(pTaskId){
+    switch(taskStatus)
+    {
+        case "Completed":
+            return _getBusinessCard(taskId);
+            break;
+        case "ProcessingFailed":
+            logging.log(translate.withArguments("Processing of the given business card failed. \n" + 
+                                                    "Reason: %0", ((parsed.task.@error).toString())), logging.ERROR, logMsgTitel);
+            break;
+        case "Deleted":
+            logging.log(translate.text("Requested business card were already deleted."), logging.ERROR, logMsgTitel);
+            break;
+        case "NotEnoughCredits":
+            logging.log(translate.text("Contigent exhausted, please buy some new one to continue."), logging.ERROR, logMsgTitel);
+            break;
+    }
+    
+    /**
+     * Returns the recognized business card.
+     * 
+     * @param pTaskId {String}                  <p>
+     *                                          The task id of the job, which will be used for requesting the completly recognized business card.
+     * @return {String}                         <p>
+     *                                          The recognized and as xml parsed business card.
+     */
+    function _getBusinessCard(pTaskId)
+    {
+        var conf, response, resultUrl;
+        
         conf = net.createConfigForRestWebserviceCall()
                         .url("https://cloud.ocrsdk.com/getTaskStatus")
                         .addQueryParameter("taskId", pTaskId);
-        response = util.decodeBase64String(net.callRestWebservice(conf, authConf));
-        responseXml = response.substring(response.indexOf("<response>"));
-        return [new XML(responseXml).task.@resultUrl, new XML(responseXml).task.@status];
-    };
+        response = util.decodeBase64String(net.callRestWebservice(conf, _getBasicAuth()));
+        resultUrl = new XML(response.substring(response.indexOf("<response"), response.length)).task.@resultUrl;
+
+        conf = net.createConfigForRestWebserviceCall()
+                                .url(resultUrl)
+                                .actionType("GET");
+        response = util.decodeBase64String(net.callRestWebservice(conf, auth.createConfigForNoAuth()));
+        
+        return new XML(response.substring(response.indexOf("<businessCard"), response.indexOf("</document>")));
+    }
     
-    if (taskId)
+    /**
+    * Returns the current task status (and id).
+    * 
+    * @param [pRes] {null|String}               <p>
+    *                                           If given, the provided response will be parsed, to extract the task status and the id.
+    * @param [pTaskId] {null|String}            <p>
+    *                                           If given, the param pRes will be ignored and the task id will be used to determine the status.
+    * @return {null|Object}                     <p>
+    *                                           An result object with the following content: taskId, taskStatus.<br>
+    *                                           In case no task status, could be determined: null.
+    */
+    function _getStatus(pRes, pTaskId)
     {
-        var resultUrl = "";
-        var taskStatus = getStatus(taskId)[1];
+        var taskStatus, taskId, conf, response, parsed;
         
-        while(taskStatus != "Completed" && taskStatus != "ProcessingFailed" && taskStatus != "Deleted" && taskStatus != "NotEnoughCredits")
+        if (pRes && pRes.indexOf("status=") != -1)
         {
-            [resultUrl, taskStatus] = getStatus(taskId);
+            parsed = new XML(pRes);
+            taskId = parsed.task.@id;
+            taskStatus = parsed.task.@status;
+            return {taskStatus: taskStatus.toString(), taskId: taskId};
+        }
+        else if(pTaskId)
+        {
+            conf = net.createConfigForRestWebserviceCall()
+                        .url("https://cloud.ocrsdk.com/getTaskStatus")
+                        .addQueryParameter("taskId", pTaskId);
+            response = util.decodeBase64String(net.callRestWebservice(conf, _getBasicAuth()));
+            
+            if (response && response.indexOf("status=") != -1) 
+            {
+                parsed = new XML((response.substring(response.indexOf("<response"), response.length)));
+                taskStatus = parsed.task.@status;   
+                return {taskStatus: taskStatus.toString(), taskId: pTaskId};
+            }
         }
         
-        switch(taskStatus.toString()){
-            case "Completed":
-                conf = net.createConfigForRestWebserviceCall()
-                                .url(resultUrl)
-                                .actionType("GET");
-                response = util.decodeBase64String(net.callRestWebservice(conf, auth.createConfigForNoAuth()));
-                response = new XML(response.substring(response.indexOf("<businessCard"), response.indexOf("</document>")));
-                break;
-            case "ProcessingFailed":
-                throw new Error("Abbyy: Processing of the business card failed!")
-                break;
-            case "Deleted":
-                throw new Error("Abbyy: The requested, recognized business card was deleted.")
-                break;
-            case "NotEnoughCredits":
-                throw new Error("Abbyy: Not enough credits!")
-                break;
+        return null;
+    }
+    
+    /**
+    * Checks the current processing progress.
+    * 
+    * @return {String}                  <p>
+    *                                   The task status or empty string, in case no task status could be determined.
+    */
+    function _checkProcessingProgress(pTaskId)
+    {
+        var taskStatus;
+        taskStatus = _getStatus(null, pTaskId).taskStatus;
+
+        do
+        {
+            taskStatus = _getStatus(null, pTaskId).taskStatus;
         }
+        while(taskStatus == "InProgress" || taskStatus == "Submitted" || taskStatus == "Queued");
+        
+        return taskStatus;
     }
-    return [response, pLang];
+    
+    /**
+    * Returns the basic auth, for the Abbyy ws-call.
+    * 
+    * @return {Object}                  <p>
+    *                                   The basic-auth object, with the appId & pwd fetched from the instance config.
+    */
+    function _getBasicAuth()
+    {
+        var authConf = auth.createConfigForBasicAuth()
+                            .userName(project.getInstanceConfigValue("custom.abbyy.ocr.appId", ""))
+                            .password(project.getInstanceConfigValue("custom.abbyy.ocr.password", ""));
+        return authConf;
+    }
+    
+    return "";
 }
 
 /**
@@ -209,8 +335,7 @@ LeadQuickAcquisitionBusinessCardUtils._callWebServiceBusinessCard = function(pFi
 LeadQuickAcquisitionBusinessCardUtils._transformToResponse = function(pReply)
 {
     var response = new WebserviceResponse();
-    var lang = pReply[1];
-    pReply = pReply[0];
+    //pReply = pReply[0];
     
     logging.log("Abbyy reponse: " + pReply.toString());
     
@@ -320,4 +445,4 @@ LeadQuickAcquisitionMailSigUtils._transformToResponse = function(pReply)
     }
     
     return response;
-}
\ No newline at end of file
+}
diff --git a/process/MarketingCondition_test/MarketingCondition_test.aod b/process/MarketingCondition_test/MarketingCondition_test.aod
index e1fabb654e0c28f0747afcbf030302c26d996392..3f8e07edff10bc88d1a83877df45e54da223a1be 100644
--- a/process/MarketingCondition_test/MarketingCondition_test.aod
+++ b/process/MarketingCondition_test/MarketingCondition_test.aod
@@ -2,7 +2,6 @@
 <process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
   <name>MarketingCondition_test</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
-  <process>%aditoprj%/process/MarketingCondition_test/process.js</process>
   <variants>
     <element>EXECUTABLE</element>
   </variants>
diff --git a/process/MarketingCondition_test/process.js b/process/MarketingCondition_test/process.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/process/Person_lib/process.js b/process/Person_lib/process.js
index 4537b57af5ccffb4642c96eac520d723ba780558..1b32bd44ec0ebc5ceab3ab8843d51a253e64c8e0 100644
--- a/process/Person_lib/process.js
+++ b/process/Person_lib/process.js
@@ -52,12 +52,19 @@ PersUtils.removeImage = function(pPersId)
  * does not validate if pRelationIdField exists or is a valid or harmful value
  * 
  * @param {String} pRelationIdField fieldname for the CONTACTID-condition as TABLEALIAS.COLUMNALIAS; e.g. TASK.EDITOR_CONTACT_ID
+ * @param {boolean} [pResponsible] optional param which adds a " *" if the contact has the RESPONSIBLE tag set to true (used by SalesProjectMember_entity)
  * @return {String} a subsql (without bracets) that can be placed within an SQL
  */
-PersUtils.getResolvingDisplaySubSql = function(pRelationIdField)
+PersUtils.getResolvingDisplaySubSql = function(pRelationIdField, pResponsible)
 {
     var selectExpression = PersUtils.getDisplaySqlExpression();
 
+    if(pResponsible)
+    {
+        let sqlMasking = new SqlMaskingUtils();
+        selectExpression = sqlMasking.concatenate([selectExpression, SqlBuilder.caseWhen(newWhere("OBJECTMEMBER.RESPONSIBLE = 1")).thenString(" *").elseString("").toString()]);
+    }
+    
     //TODO: verify if there is a better solution for the usage of this as a displayValueExpression --> automatic use of #TITLE | waiting for implementation
     return "select " + selectExpression + "from PERSON \n\
         join CONTACT on (PERSON.PERSONID = CONTACT.PERSON_ID) \n\
diff --git a/process/Salesproject_lib/process.js b/process/Salesproject_lib/process.js
index b0622cece15c0a7318de2fd454f17b4d1ec898ce..bb5701de7b642217b3eb212d70f51c0ea0f77aba 100644
--- a/process/Salesproject_lib/process.js
+++ b/process/Salesproject_lib/process.js
@@ -410,59 +410,4 @@ SalesprojectConversionRate.prototype._getTitleOfKey = function (pKey, pIsGroupin
         return KeywordUtils.getViewValue($KeywordRegistry.salesprojectPhase(),pKey);
         
     return pKey;
-}
-
-/**
- * Methods used by the Salesproject.
- * Do not create an instance of this!
- * 
- * @class
- */
-function SalesprojectPhaseFilterUtils() {}
-
-/**
- * Builds a Sql-condition for a salesproject filter extension. This allows to filter via the salesproject phase whilst havin them in the correct Order
- * 
- * @return {String} condition
- */
-SalesprojectPhaseFilterUtils.makeFilterCondition = function()
-{
-    return newWhereIfSet( "SALESPROJECT.PHASE", vars.get("$local.rawvalue"));
-}
-
-/**
- * Builds a Sql-condition for a salesproject filter extension. This allows to filter via the salesproject phase whilst havin them in the correct Order
- * 
- * @return {String} condition
- */
-SalesprojectPhaseFilterUtils.makeGroupQueryProcess = function()
-{
-    var order = vars.get("$local.order");
-    var sqlHelper = new SqlMaskingUtils();
-    var groupedList = "SALESPROJECT.PHASE"
-    var condition = vars.get("$local.condition");
-    var stmt = new SqlBuilder().from("SALESPROJECT").join("AB_KEYWORD_ENTRY", newWhere("AB_KEYWORD_ENTRY.KEYID = SALESPROJECT.PHASE").and("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", KeywordUtils.getCategoryIdByName($KeywordRegistry.salesprojectPhase()))).groupBy(groupedList + ", AB_KEYWORD_ENTRY.SORTING, AB_KEYWORD_ENTRY.KEYID");
-
-    if (!Utils.isNullOrEmptyString(condition.trim()))
-    {
-        stmt.where(condition);
-    }
-
-    if (vars.get("$local.count")) // TRUE if the count of the records is needed
-    {
-        stmt.select(["1 COUNT", groupedList]) //from ACTIVITY where " + condition + " group by "+groupedList+") X";
-        stmt = newSelect("STMT.COUNT")
-        .from(stmt, "STMT")
-
-    } 
-    else 
-    {
-        stmt.select([groupedList , KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.salesprojectPhase(),"AB_KEYWORD_ENTRY.KEYID"), "count(*)", "count(*)"])
-        if (order != null)
-        {
-            stmt.orderBy("AB_KEYWORD_ENTRY.SORTING, " + order);
-        }
-    }
-
-        return stmt.toString();
-}
+}
\ No newline at end of file
diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js
index d9b31b1bd715e86a109b37acfdf9aaa4054cd563..5d9e1ce138a32abd36fb6ef12ce58a3fa33ddb28 100644
--- a/process/Sql_lib/process.js
+++ b/process/Sql_lib/process.js
@@ -4141,6 +4141,27 @@ SqlMaskingUtils.prototype.currentDate = function()
     }
 }
 
+/**
+ * Returns the database equivalent of the fetch first row only function as String depending on the database type
+ * 
+ */
+SqlMaskingUtils.prototype.limit = function(pRowAmount)
+{
+    switch(this.dbType)
+    {
+        case db.DBTYPE_POSTGRESQL8:
+        case db.DBTYPE_ORACLE10_CLUSTER:
+        case db.DBTYPE_ORACLE10_THIN:
+        case db.DBTYPE_ORACLE10_OCI:
+        case db.DBTYPE_MARIADB10:
+        case db.DBTYPE_MYSQL4:
+        case db.DBTYPE_SQLSERVER2000:
+            return "LIMIT " + pRowAmount;
+        case db.DBTYPE_DERBY10:
+            return "fetch first " + pRowAmount + " rows only";
+    }
+}
+
 /**
  * functions for various Sql-actions
  * Do not create an instance of this!
diff --git a/process/TransferSalesprojectPhaseDefinitionToChecklist_serverProcess/process.js b/process/TransferSalesprojectPhaseDefinitionToChecklist_serverProcess/process.js
index 4b33154216789153d8770778403321428b06b6b1..d72afb56a28257d80c15017746460e0b4325c472 100644
--- a/process/TransferSalesprojectPhaseDefinitionToChecklist_serverProcess/process.js
+++ b/process/TransferSalesprojectPhaseDefinitionToChecklist_serverProcess/process.js
@@ -1,3 +1,4 @@
+import("system.translate");
 import("system.db");
 import("KeywordRegistry_basic");
 import("Keyword_lib");
diff --git a/process/Util_lib/process.js b/process/Util_lib/process.js
index 1e1d73087c3e42f264e23aa9d285031564abfcbd..92abee276eb2691defa0338a9639b7f5bb56ff7e 100644
--- a/process/Util_lib/process.js
+++ b/process/Util_lib/process.js
@@ -650,14 +650,33 @@ StringUtils.concat = function(pSeparator, pElements)
  * @param {String} pPlainInputStr           <p/>String where you want something to be replaced
  * @param {String} pIndex                   <p/>Position of the char you want to replace
  * @param {String} pReplacement             <p/>A string as the replacement-value
+ * @param {String} pAddIfNeeded             <p/>IF set: Adds pAddIfNeeded to the string till the length its long enough for the index if needed
  *
- * @return {String}                         <p/>ReplacedString (or pPlainInputStr if pIndex >= pPlainInputStr.length)
+ * @return {String}                         <p/>ReplacedString (or pPlainInputStr if pIndex >= pPlainInputStr.length and !pAddIfNeeded)
  */
-StringUtils.replaceAt = function(pPlainInputStr, pIndex, pReplacement) 
+StringUtils.replaceAt = function(pPlainInputStr, pIndex, pReplacement, pAddIfNeeded) 
 {
     if (pIndex >= pPlainInputStr.length) //return the original string if the index is too high
     {
-        return pPlainInputStr.valueOf();
+        if(pAddIfNeeded)
+        {
+            stopper = false;
+            while(stopper == false)
+            {
+                if(pPlainInputStr.length > pIndex)
+                {
+                    return pPlainInputStr.substring(0, pIndex) + pReplacement + pPlainInputStr.substring(eMath.addInt(pIndex, 1));
+                }
+                else
+                {
+                    pPlainInputStr = pPlainInputStr + pAddIfNeeded;
+                }
+            }
+        }
+        else
+        {
+            return pPlainInputStr.valueOf();
+        }
     }
  
     return pPlainInputStr.substring(0, pIndex) + pReplacement + pPlainInputStr.substring(eMath.addInt(pIndex, 1));
diff --git a/process/VisitPlanning_lib/process.js b/process/VisitPlanning_lib/process.js
index 80ae9c5f42690d369575fbbc467eb1757f39dc29..d4619f0c366d2cb34c0406f2cad49a4e98f45236 100644
--- a/process/VisitPlanning_lib/process.js
+++ b/process/VisitPlanning_lib/process.js
@@ -1,3 +1,9 @@
+import("system.entities");
+import("AttributeRegistry_basic");
+import("Util_lib");
+import("KeywordRegistry_basic");
+import("system.eMath");
+import("system.translate");
 import("Sql_lib");
 import("Employee_lib");
 import("system.datetime");
@@ -20,83 +26,163 @@ function VisitPlanningUtils() {}
  * 
  * @param {String} [pIsDayRoute] Opens the route only for one address, otherwise all of selected week and it's date
  * 
- * @return {void} {content:   base64-encoded CSV; 
- *                   filename:  filename}
+ * @return {void}
  * 
  */
 VisitPlanningUtils.openRoute = function (pIsDayRoute)
 {
-
     var visitAddresses = [];
-    var addressIdStart;
-    var address;
-    var user = EmployeeUtils.getCurrentContactId();
-
-    //start homeaddress
-    addressIdStart = newSelect("ADDRESSID")
-                .from("ADDRESS")
-                .where("ADDRESS.ADDR_TYPE", "HOMEADDR")
-                .and("ADDRESS.CONTACT_ID", user)
-                .cell();
-
-    if(!addressIdStart)
+    var weekId = vars.get("$param.Entries_param")
+
+    var addressStart = newSelect(["ADDRESS", "BUILDINGNO", "ZIP", "CITY", "COUNTRY"])
+                        .from("VISITPLANEMPLOYEEWEEK")
+                        .join("CONTACT", "CONTACT.CONTACTID = VISITPLANEMPLOYEEWEEK.CONTACT_ID")
+                        .join("ADDRESS", "ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID")
+                        .where("VISITPLANEMPLOYEEWEEK.VISITPLANEMPLOYEEWEEKID", weekId)
+                        .arrayRow();
+    if(addressStart)
     {
-        //start orgaddress
-        var orgID = newSelect("ORGANISATION_ID")
-                .from("CONTACT")
-                .where("CONTACT.CONTACTID", user)
-                .cell();
-
-        addressIdStart = newSelect("ADDRESS_ID")
-                                    .from("CONTACT")
-                                    .where("CONTACT.ORGANISATION_ID", orgID)
-                                    .and("CONTACT.PERSON_ID is null")
-                                    .cell();
+        var addressStartString = "";
+        for (let i = 0; i < addressStart.length; i++)
+        {
+            addressStartString = addressStartString + StringUtils.replaceAll(addressStart[i], "/", "%2F") + " ";
+        }
+        visitAddresses.push(addressStartString);
     }
 
-    var addressStart = "";
-    if(addressIdStart)
+    //address to visit
+    var selectionRowData = vars.get("$sys.selectionRows");
+    var entrydate = selectionRowData[0]["ENTRYDATE"]
+    var entryid = selectionRowData[0]["VISITPLANENTRYID"];
+    
+    var cond = newWhere("VISITPLANENTRY.VISITPLANEMPLOYEEWEEK_ID", weekId).and("VISITPLANENTRY.ENTRYDATE", entrydate)
+    
+    if(!pIsDayRoute)
+    {
+        cond = newWhere("VISITPLANENTRY.VISITPLANENTRYID", entryid);
+    }
+    
+    var childAddresses = newSelect(["ADDRESS", "BUILDINGNO", "ZIP", "CITY", "COUNTRY"])
+                        .from("ADDRESS")
+                        .leftJoin("VISITPLANENTRY", newWhere("ADDRESS.ADDRESSID", newSelect("ADDRESS_ID")
+                                                                                    .from("CONTACT")
+                                                                                    .where("CONTACT.CONTACTID = VISITPLANENTRY.ORGANISATION_CONTACT_ID")))
+                        .where(cond)
+                        .orderBy("VISITPLANENTRY.BEGIN_TIME ASC")
+                        .table();
+
+    for(var i = 0; i < childAddresses.length; i++)
     {
-        addressStart = newSelect("ADDRESS, BUILDINGNO, ZIP, CITY, COUNTRY")
-                                    .from("ADDRESS")
-                                    .where("ADDRESS.ADDRESSID", addressIdStart)
-                                    .arrayRow();
+        var childAddressString = "";
+        for (var j = 0; j < childAddresses[i].length; j++)
+        {
+                        
+            childAddressString = childAddressString + StringUtils.replaceAll(childAddresses[i][j], "/", "%2F") + " ";
+        }
+        visitAddresses.push(childAddressString);
+    }
 
+    if(addressStart)
+    {
         visitAddresses.push(addressStart.join("+"));
     }
 
-    //address to visit
-    var selectionRowData = vars.get("$sys.selectionRows");
-    var isGroup = selectionRowData[0].ISGROUP; //not Bool
+    var address = "https://www.google.com/maps/dir/" + visitAddresses.join("/");
 
-    var entrydate = selectionRowData[0]["ENTRYDATE"]
+    neon.openUrl(address, true);
+};
 
-    var entryid = vars.get("$param.Entries_param");
-    
-    var cond = newWhere("VISITPLANENTRY.VISITPLANEMPLOYEEWEEK_ID", entryid).and("VISITPLANENTRY.ENTRYDATE", entrydate)
+/*
+ * returns the priority from visitrecommendation based on the due date
+ * 
+ * @param {Date} [pDueDate] Due date from Visitrecommendation
+ * 
+ * @return {String} Priority
+ * 
+ */
+VisitPlanningUtils.getPrioByDueDate = function(pDueDate)
+{
+    var prio = "";
+    var currentDate = datetime.date();
     
-    if(!pIsDayRoute)
+    if(pDueDate != "")
     {
-        cond = cond.and("VISITPLANENTRY.VISITPLANENTRYID", selectionRowData[0]["VISITPLANENTRYID"]);
+        var dateDifference = pDueDate - currentDate;
+
+        if(dateDifference < 0)
+        {
+            prio = $KeywordRegistry.visitRecommendationPriority$critical();
+        }
+        else if(dateDifference < datetime.ONE_DAY * 3)
+        {
+            prio = $KeywordRegistry.visitRecommendationPriority$veryHigh();
+        }
+        else if(dateDifference < datetime.ONE_DAY * 7)
+        {
+            prio = $KeywordRegistry.visitRecommendationPriority$high();
+        }
+        else if(dateDifference < datetime.ONE_DAY * 14)
+        {
+            prio = $KeywordRegistry.visitRecommendationPriority$medium();
+        }
+        else
+        {
+            prio = $KeywordRegistry.visitRecommendationPriority$low();
+        }
     }
-    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_CONTACT_ID)")
-                                    .where(cond)
-                                    .and("VISITPLANENTRY.ENTRYDATE", entrydate)
-                                    .table();
+    
+    return prio;
+}
+
+/*
+ * Used by the filterValuesProcess of VisitRecommendation_filter of Organisation_entity.
+  * 
+ * @return {String} SqlCond as string, as needed by filterValuesProcesses
+ * 
+ */
+VisitPlanningUtils.filterConditionProcess = function()
+{
+    var operator = vars.get("$local.operator");
+    var rawvalue = vars.get("$local.rawvalue");
+    var operator2 = vars.get("$local.operator2");
+    var sqlCond = SqlBuilder.NORESULT_CONDITION();
 
+    rawvalue = (rawvalue == "true");
 
-    for(let i = 0; i < childAddresses.length; i++)
+    if(operator == "1" && rawvalue ||  operator == "2" && !rawvalue )
     {
-        visitAddresses.push(childAddresses[i].join("+"));
+        operator2 = SqlBuilder.IN();
+    }
+    else if(operator == "1" && !rawvalue ||  operator == "2" && rawvalue)
+    {
+        operator2 = SqlBuilder.NOT_IN();
+    }
+    else 
+    {
+        sqlCond = "1=1";
     }
 
-    visitAddresses.push(addressStart.join("+"));
-
+    var contactids = [];
+    
+    var config = entities.createConfigForLoadingRows()
+                        .entity("VisitRecommendation_entity")
+                        .fields(["CONTACT_ID"]);
+    
+    var rows = entities.getRows(config);
 
-    address = "https://www.google.com/maps/dir/" + visitAddresses.join("/");
+    for (let i = 0; i < rows.length; i++)
+    {
+          contactids.push(rows[i]["CONTACT_ID"]);  
+    }
 
-    neon.openUrl(address, true);
-};
+    if (contactids.length > 0)
+    {
+        sqlCond = new SqlBuilder().whereIfSet("CONTACT.CONTACTID", contactids , operator2).toString();
+    }
+    else if(operator2 == SqlBuilder.NOT_IN())
+    {
+        sqlCond = "1=1";
+    }
+    
+    return sqlCond;
+}
diff --git a/process/assignDistrict_serverProcess/process.js b/process/assignDistrict_serverProcess/process.js
index f3434cef31913e4ff8323905783bdf0a3f9710eb..1b2ad1470722bbd63dd00a9de3596f0feb130c6d 100644
--- a/process/assignDistrict_serverProcess/process.js
+++ b/process/assignDistrict_serverProcess/process.js
@@ -22,9 +22,8 @@ if (vars.get("$local.arrDistrictIds").length > 0 && arrDistrictIds.length > 0)
     var message;
     var description;
 
-    var newAssigned = 0;
-    var unchanged = 0;
-    var invalid = 0;
+    var newAssigned, unchanged, invalid, updated;
+    newAssigned = unchanged = invalid = updated = 0;
 
     var startTime = datetime.date();
 
@@ -54,9 +53,10 @@ if (vars.get("$local.arrDistrictIds").length > 0 && arrDistrictIds.length > 0)
     // Notification at the end of the assignment                        
     description = translate.withArguments("%0 companies were newley assigned. \n" +
                       "%1 companies are no longer assigned (these assignments got the status 'review'). \n" +
+                      "%4 companies were updated. \n" +
                       "%2 valid assignments were unchanged.\n" +
                       "The Process took %3 seconds.",
-                      [newAssigned, invalid, unchanged, Math.round((datetime.date() - startTime) / datetime.ONE_SECOND)]);
+                      [newAssigned, invalid, unchanged, Math.round((datetime.date() - startTime) / datetime.ONE_SECOND), updated]);
     notification.addNotification(util.getNewUUID(), null, null, null, "DistrictAssigned", notification.PRIO_NORMAL, 2, notification.STATE_UNSEEN, [user], message, description);    
 }
 
diff --git a/process/blobHandler/process.js b/process/blobHandler/process.js
index 6092c676875883a3f54019b98a27bca2c61f86da..2f1900a43a0ef9d8db21c3958030e1864a3e6b50 100644
--- a/process/blobHandler/process.js
+++ b/process/blobHandler/process.js
@@ -11,7 +11,7 @@ import("system.vars");
  * This process uses the id of the dataset as filename.
  */
 
-var path = vars.get("$sys.serverdata") + "/binaryfiles/"
+var path = vars.get("$sys.serverdata") + "/binaryfiles/";
 var operation = null;
 
 switch (vars.get("$local.operation"))
@@ -27,9 +27,6 @@ switch (vars.get("$local.operation"))
         break;
     case "READ":
         operation = readBlob;
-        break;
-    default:
-        break;
 }
 
 if (operation) 
@@ -45,7 +42,7 @@ if (operation)
  */
 function createBlob (path, filename) 
 {
-    _writeBlob(path + filename )
+    _writeBlob(path + filename);
 }
 
 /*
@@ -56,7 +53,7 @@ function createBlob (path, filename)
  */
 function deleteBlob (path, filename) 
 {
-    fileIO.remove(path + filename );
+    fileIO.remove(path + filename);
 }
 
 /*
@@ -67,7 +64,7 @@ function deleteBlob (path, filename)
  */
 function updateBlob (path, filename) 
 {
-    _writeBlob(path + filename );
+    _writeBlob(path + filename);
 }
 
 /*
@@ -83,7 +80,7 @@ function readBlob (path, filename)
     var fullPath = path + filename;
     var fromWhereCond = new SqlBuilder(SqlUtils.getBinariesAlias()).from("ASYS_BINARIES").where("ASYS_BINARIES.ID", filename);
     
-    sqlHelper = new SqlMaskingUtils();
+    var sqlHelper = new SqlMaskingUtils();
     
     if (fileIO.exists(fullPath) && fileIO.canRead(fullPath))
     {
@@ -91,7 +88,7 @@ function readBlob (path, filename)
         result.string(blob);
     }
     //                      copy to reuse it inside of the if with other select field
-    else if (fromWhereCond.copy().select(sqlHelper.bindataLength("BINDATA")).cell() > 0)
+    else if (fromWhereCond.copy().select(sqlHelper.binDataLength("BINDATA")).cell() > 0)
     {
         blob = fromWhereCond.select("BINDATA").cell();
         result.string(blob);
diff --git a/process/buildSerialLetter_serverProcess/process.js b/process/buildSerialLetter_serverProcess/process.js
index 7be5de72cd71f6c4dee9d1fab003af0582d4afcd..0ade536ba455e86c5396b756f2234e018b64aafe 100644
--- a/process/buildSerialLetter_serverProcess/process.js
+++ b/process/buildSerialLetter_serverProcess/process.js
@@ -17,19 +17,19 @@ var document = SerialLetterUtils.buildSerialLetter(letterId, recipientIds)
 
 var filename = document.title + "." + DocumentUtil.getFileExtensionFromUpload(document.filename);
 
-SingleBinaryUtils.set("SERIALLETTER", "SERIALLETTERFILE", letterId, document.content, filename, "");
+SingleBinaryUtils.set("SERIALLETTER", "SERIALLETTERFILE", letterId, document.content, filename, "", undefined, "SERIALLETTER_BUILDED");
 
 var message = translate.text("Download ready");
 var description = translate.withArguments("Serial letter \"%0\" can now be downloaded", [document.title]);
 
 var notificationConfig = notification.createConfig()
-.initialState(notification.STATE_UNSEEN)
-.forcedPriority(notification.PRIO_NORMAL)
-    .linkInfo(text.encodeMS(["SerialLetter", letterId]))
-    .daysToLive(2)
-    .addUserWithId(user)
-    .notificationType("DownloadReady")
-    .caption(message)
-    .description(description);
+                                        .initialState(notification.STATE_UNSEEN)
+                                        .forcedPriority(notification.PRIO_NORMAL)
+                                        .linkInfo(text.encodeMS(["SerialLetter", letterId]))
+                                        .daysToLive(2)
+                                        .addUserWithId(user)
+                                        .notificationType("DownloadReady")
+                                        .caption(message)
+                                        .description(description);
     
 notification.addNotificationWith(notificationConfig);
\ No newline at end of file
diff --git a/process/migrateDistrictContacts_serverProcess/documentation.adoc b/process/migrateDistrictContacts_serverProcess/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..cea443c8eb3f3242d5394be42cbc9b720f5931dd
--- /dev/null
+++ b/process/migrateDistrictContacts_serverProcess/documentation.adoc
@@ -0,0 +1,7 @@
+== migrateDistrictContacts_serverProcess
+
+This process migrates the automatic DISTRICTCONTACT datasets.
+It used to only be possible to add each contact as district responsible once. Now we allow adding the same one multiple times. 
+But we also want to update values of the automatic generated ones when assigning the district according to the values of it's responsible dataset.
+So now we have to store the DISTRICTRESPONSIBLE_ID in DISTRICTCONTACT.
+This process get's all automatic DISTRICTCONTACT datasets and sets their DISTRICTRESPONSIBLE_IDs accordingly (this is possible, since till now it has always been a 1:1 dependency)
\ No newline at end of file
diff --git a/process/migrateDistrictContacts_serverProcess/migrateDistrictContacts_serverProcess.aod b/process/migrateDistrictContacts_serverProcess/migrateDistrictContacts_serverProcess.aod
new file mode 100644
index 0000000000000000000000000000000000000000..70f9bdf18a456049e10d481f68ccca0402e69f37
--- /dev/null
+++ b/process/migrateDistrictContacts_serverProcess/migrateDistrictContacts_serverProcess.aod
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
+  <name>migrateDistrictContacts_serverProcess</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/process/migrateDistrictContacts_serverProcess/documentation.adoc</documentation>
+  <process>%aditoprj%/process/migrateDistrictContacts_serverProcess/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>
diff --git a/process/migrateDistrictContacts_serverProcess/process.js b/process/migrateDistrictContacts_serverProcess/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..98cc9b3dc079d6f68662495b851625663b98fb02
--- /dev/null
+++ b/process/migrateDistrictContacts_serverProcess/process.js
@@ -0,0 +1,57 @@
+import("KeywordRegistry_basic");
+import("Sql_lib");
+
+var districtContacts = newSelect("DISTRICTCONTACT.DISTRICTCONTACTID, DISTRICTCONTACT.ADVISER_CONTACT_ID, DISTRICTCONTACT.DISTRICTRESPONSIBLE_ID, DISTRICTCONTACT.DISTRICT_ID")
+                                .from("DISTRICTCONTACT")
+                                .where("DISTRICTCONTACT.DISTRICTRESPONSIBLE_ID is null")
+                                .where("DISTRICTCONTACT.ORIGIN", $KeywordRegistry.districtOrigin$auto())
+                                .table();
+
+var dcDistrictContactId, dContactId, dcDistrictResponsibleId, dcDistrictId;
+var districtIds = [];
+var contactIds = [];
+var districtObj = {};
+
+for (var i = 0; i < districtContacts.length; i++)
+{
+    [dcDistrictContactId, dContactId, dcDistrictResponsibleId, dcDistrictId] = districtContacts[i];
+    
+    if(!districtIds.includes(dcDistrictId))
+    {
+        districtIds.push(dcDistrictId);
+    }
+    if(!contactIds.includes(dContactId))
+    {
+        contactIds.push(dContactId);
+    }
+    if(!districtObj.hasOwnProperty(dcDistrictId))
+    {
+        districtObj[dcDistrictId] = {};
+    }
+    if(!districtObj[dcDistrictId].hasOwnProperty(dContactId))
+    {
+        districtObj[dcDistrictId][dContactId] = [];
+    }
+    districtObj[dcDistrictId][dContactId].push(dcDistrictContactId);
+}
+
+var districtResponsibleObj = {};
+var districtResponsible = newSelect("DISTRICTRESPONSIBLE.DISTRICTRESPONSIBLEID, DISTRICTRESPONSIBLE.DISTRICT_ID, DISTRICTRESPONSIBLE.EMPLOYEE_CONTACT_ID")
+                                .from("DISTRICTRESPONSIBLE")
+                                .where("DISTRICTRESPONSIBLE.DISTRICT_ID", districtIds, SqlBuilder.IN())
+                                .and("DISTRICTRESPONSIBLE.EMPLOYEE_CONTACT_ID", contactIds, SqlBuilder.IN())
+                                .table();
+
+var drResponsibleId, drDistrictId, drContactId
+for (i = 0; i < districtResponsible.length; i++)
+{
+    [drResponsibleId, drDistrictId, drContactId] = districtResponsible[i];
+    
+    if(districtObj && districtObj[drDistrictId] && districtObj[drDistrictId][drContactId] && districtObj[drDistrictId][drContactId].length > 0)
+    {
+        for (j = 0; j < districtObj[drDistrictId][drContactId].length; j++)
+        {
+            newWhere("DISTRICTCONTACT.DISTRICTCONTACTID", districtObj[drDistrictId][drContactId][j]).updateData(true, "DISTRICTCONTACT", ["DISTRICTRESPONSIBLE_ID"], null, [drResponsibleId]);
+        }
+    }
+}
diff --git a/process/register_rest/process.js b/process/register_rest/process.js
index 9c9ae2bebdba0da5d71ba0cc4792b3ebcff016f6..ecc5f3f8f04262f8921e5327b1ef969cbe8afc6d 100644
--- a/process/register_rest/process.js
+++ b/process/register_rest/process.js
@@ -48,7 +48,7 @@ function _findPerson(pFirstname, pLastname, pMailAddress)
     var contactId = newSelect("CONTACT.CONTACTID")
     .from("CONTACT")
     .join("PERSON","CONTACT.PERSON_ID = PERSON.PERSONID")
-    .join("COMMUNICATION","COMMUNICATION.CONTACT_ID = CONTACT.CONTACTID")
+    .join("COMMUNICATION",newWhere("COMMUNICATION.OBJECT_ROWID = CONTACT.CONTACTID").and("COMMUNICATION.OBJECT_TYPE", "Contact"))
     .whereIfSet("PERSON.FIRSTNAME",pFirstname)
     .andIfSet("PERSON.LASTNAME",pLastname)
     .and("COMMUNICATION.MEDIUM_ID",$KeywordRegistry.communicationMedium$mail())
@@ -58,7 +58,7 @@ function _findPerson(pFirstname, pLastname, pMailAddress)
     if (!contactId){
         contactId = newSelect("CONTACT.CONTACTID")
         .from("CONTACT")
-        .join("COMMUNICATION","COMMUNICATION.CONTACT_ID = CONTACT.CONTACTID")
+        .join("COMMUNICATION",newWhere("COMMUNICATION.OBJECT_ROWID = CONTACT.CONTACTID").and("COMMUNICATION.OBJECT_TYPE", "Contact"))
         .where("COMMUNICATION.MEDIUM_ID",$KeywordRegistry.communicationMedium$mail())
         .and("COMMUNICATION.ADDR",pMailAddress)
         .and("CONTACT.PERSON_ID is not null")
@@ -109,12 +109,13 @@ function _insertPerson(pFirstname, pLastname, pMailAddress, pSalutation)
         .tableName("COMMUNICATION")
         .insertFields({
             "COMMUNICATIONID": util.getNewUUID(),
-            "CONTACT_ID" : contactId,
+            "OBJECT_ROWID" : contactId,
             "MEDIUM_ID": $KeywordRegistry.communicationMedium$mail(),
             "ADDR": pMailAddress,
             "ISSTANDARD" : "1",
             "USER_NEW": "register_rest",
-            "DATE_NEW": vars.get("$sys.date")
+            "DATE_NEW": vars.get("$sys.date"),
+            "OBJECT_TYPE" : "Contact"
         });
         
         return contactId;
diff --git a/process/updateClassifications_serverProcess/documentation.adoc b/process/updateClassifications_serverProcess/documentation.adoc
index 67d5c667ce67aa86e74466822229273c7865d8b2..bd2ef9e0cb0d19e50296fb68f195d617c0adb9cb 100644
--- a/process/updateClassifications_serverProcess/documentation.adoc
+++ b/process/updateClassifications_serverProcess/documentation.adoc
@@ -4,23 +4,11 @@ see also(ClassificationUtils.executeUpdating)
 
 For updating  the values of CLASSIFICATIONSTORAGE.
 Should probably  run in intervals (like once a week) to update all outdated data, 
-but the user can also start it manually via two actions at the Classification Admin Context.
+but the user can also start it manually via the action at the Classification Admin Context.
 
 We are storing the strings of the achieved classifications (e.g. "ACD") in ClassificationStorage.
-Every time we change something for of an classification relevant object (which has an ClassificationStorage dataset) or an linked object with an 
-dependency to the entity (dependencies have to be configured in the Dependency_lib), 
-we set the outdated flag of it's ClassificationStorage dataset to true.
 
-The classificationType datasets also have an outdated flag get set for changes in classificationAdmin.
+This Process now inserts ClassificationStorage datasets if needed, calculates their valeus nad updates them if needed
 
-This Process now updates both of these:
-First it checks whether outdated classificationStorages and outdated classificationTypes exist
-and always updates the classificationStorages first before updating the for the outdated classificationTypes.
-
--In the classificationStorage runtrough it calculates the complete classification for every outdated classificationStorage, entirely 
-    from scratch and updates the classificationStorage
--In the classificationType runtrough it also updates the classificationStorage dataset
-    -for every object of said object_type
-    -only recalculates the flagged ones and relies on the already stored values of the not flagged classificationTypes if they are from another classificationGroup
-
-There is also another action that starts this process with the recalculateAll_param set to true: now the outdated flag is being ignored and all classificationtypes as outdated (only one runtrough needed)
+-it inserts storage datasets that don't already exist, calculates the complete classification for every outdated classificationStorage, entirely 
+    from scratch and updates the classificationStorage
\ No newline at end of file
diff --git a/process/updateClassifications_serverProcess/process.js b/process/updateClassifications_serverProcess/process.js
index 237a3c92b9ee0454a3744247f209f5b192ae2275..103cffa7b595f0cb97121c9840ed2984c056d5f8 100644
--- a/process/updateClassifications_serverProcess/process.js
+++ b/process/updateClassifications_serverProcess/process.js
@@ -14,4 +14,4 @@ else if(vars.exists("$local.recalculateAll_param") && vars.get("$local.recalcula
 {
     recalculateAll = vars.get("$local.recalculateAll_param");
 }
-ClassificationUtils.executeUpdating(recalculateAll, singleRefresh, objectType_param); 
\ No newline at end of file
+ClassificationUtils.executeUpdating(singleRefresh, objectType_param); 
\ No newline at end of file
diff --git a/process/workflowExtension_serverProcess/process.js b/process/workflowExtension_serverProcess/process.js
index 4da7b83aaed8ace0f35a9ea7ec7353d7c3697b7f..cefa282cfe727f3f2fe1ce8613b4bd8597331c7f 100644
--- a/process/workflowExtension_serverProcess/process.js
+++ b/process/workflowExtension_serverProcess/process.js
@@ -1,6 +1,5 @@
 import("system.project");
 import("Context_lib");
-import("Classification_lib");
 import("Workflow_lib");
 import("system.vars");
 import("Observation_lib")
@@ -14,6 +13,4 @@ var changedRows = JSON.parse(localVariables[WorkflowVariables.CHANGED_ROWS()]);
 if (project.getPreferenceValue("custom.observation.isEnabled", false) == "true")
 {
     new Observation(localVariables).checkObservation();
-}
-
-ClassificationUtils.setClassificationStorageDatasetsOutdated([targetId], entityName, rowData, changedRows); 
+}
\ No newline at end of file