diff --git a/.liquibase/Data_alias/basic/2020.2.0/Classification/changelog.xml b/.liquibase/Data_alias/basic/2020.2.0/Classification/changelog.xml
index 1fe0427646f1ce44ab3c7f9285b3591a0cfd7c16..be74e7af353709892982cd0f24e7bcde5a848e36 100644
--- a/.liquibase/Data_alias/basic/2020.2.0/Classification/changelog.xml
+++ b/.liquibase/Data_alias/basic/2020.2.0/Classification/changelog.xml
@@ -2,5 +2,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">
                    <include relativeToChangelogFile="true" file="update_keywordClassificationOrganisation.xml"/>
-                   <include relativeToChangelogFile="true" file="add_classificationGrading.xml"/>
+                   <include relativeToChangelogFile="true" file="create_classificationGrading.xml"/>
+                   <include relativeToChangelogFile="true" file="create_classificationGroup.xml"/>
+                   <include relativeToChangelogFile="true" file="create_classificationStorage.xml"/>
+                   <include relativeToChangelogFile="true" file="rename_ClassificationTypeToObjectType.xml"/>
 </databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.2.0/Classification/create_classificationGrading.xml b/.liquibase/Data_alias/basic/2020.2.0/Classification/create_classificationGrading.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ee954ba55816f5683a8ac27b33cd4c6f162ddc61
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.0/Classification/create_classificationGrading.xml
@@ -0,0 +1,17 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="b.ulrich" id="094af11f-c308-42bf-a78e-99d55883900a">
+        <createTable tableName="CLASSIFICATIONGRADING">
+            <column name="CLASSIFICATIONGRADINGID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_CLASSIFICATIONGRADING_CLASSIFICATIONGRADINGID"/>
+            </column>
+            <column name="GRADING" type="NVARCHAR(1)"/>
+            <column name="MAXGRADEFORSCORE" type="INTEGER"/>
+            <column name="CLASSIFICATIONGROUP_ID" type="CHAR(36)"/>
+        </createTable>
+        <createIndex indexName="IDX_CLASSIFICATION_GRADING" tableName="CLASSIFICATIONGRADING">
+            <column name="CLASSIFICATIONGROUP_ID"/>
+        </createIndex>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.2.0/Classification/create_classificationGroup.xml b/.liquibase/Data_alias/basic/2020.2.0/Classification/create_classificationGroup.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2072d1c79a09263757dcef3fa2c51710ca3a5945
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.0/Classification/create_classificationGroup.xml
@@ -0,0 +1,20 @@
+<?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="7d965008-8161-45bd-bb5c-a2d4e623324d">
+        <createTable tableName="CLASSIFICATIONGROUP">
+            <column name="CLASSIFICATIONGROUPID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_CLASSIFICATIONGROUP_CLASSIFICATIONGROUPID"/>
+            </column>
+            <column name="TITLE" type="VARCHAR(36)"/>
+            <column name="SORTING" type="SMALLINT"/>
+        </createTable>
+        <addColumn tableName="CLASSIFICATIONTYPE">
+            <column name="CLASSIFICATIONGROUP_ID" type="CHAR(36)"/>
+	</addColumn> 
+        <dropColumn tableName="CLASSIFICATIONTYPE" columnName="CLASSIFICATIONGROUP"/>
+        <createIndex indexName="IDX_CLASSIFICATION_TYPE" tableName="CLASSIFICATIONTYPE">
+            <column name="CLASSIFICATIONGROUP_ID"/>
+        </createIndex>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.2.0/Classification/create_classificationStorage.xml b/.liquibase/Data_alias/basic/2020.2.0/Classification/create_classificationStorage.xml
new file mode 100644
index 0000000000000000000000000000000000000000..33fe07cd6a5a9a104081b1ca0d4452450a6edd6c
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.0/Classification/create_classificationStorage.xml
@@ -0,0 +1,22 @@
+<?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="7d965008-8161-45bd-bb5c-a2d4e623324d">
+        <createTable tableName="CLASSIFICATIONSTORAGE">
+            <column name="CLASSIFICATIONSTORAGEID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_CLASSIFICATIONSTORAGE_CLASSIFICATIONSTORAGEID"/>
+            </column>
+            <column name="CLASSIFICATIONVALUE" type="VARCHAR(20)"/>
+            <column name="OBJECT_ROWID" type="CHAR(36)"/>
+            <column name="OBJECT_TYPE" type="VARCHAR(63)"/>
+        </createTable>
+        <addUniqueConstraint  
+            columnNames="OBJECT_ROWID, OBJECT_TYPE"  
+            constraintName="const_classificationstrage"  
+            tableName="CLASSIFICATIONSTORAGE"  
+            validate="true"/>  
+        <createIndex indexName="IDX_CLASSIFICATION_STORAGE" tableName="CLASSIFICATIONSTORAGE">
+            <column name="OBJECT_ROWID"/>
+        </createIndex>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.2.0/Classification/rename_ClassificationTypeToObjectType.xml b/.liquibase/Data_alias/basic/2020.2.0/Classification/rename_ClassificationTypeToObjectType.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d0e3475b1c899ac66901c9745179180f9cdf6cef
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.0/Classification/rename_ClassificationTypeToObjectType.xml
@@ -0,0 +1,11 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="b.ulrich" id="b693a8ff-3267-4813-9a89-e17120e1346a">
+        <renameColumn
+            columnDataType="VARCHAR(63)"  
+            newColumnName="OBJECT_TYPE"  
+            oldColumnName="CLASSIFICATIONTYPE"  
+            tableName="CLASSIFICATIONTYPE"/>  
+    </changeSet>
+</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 f1d01f3712f99836e9d61885132ae52d6423b4a1..22fe51ac97046f0037d1bbe244ce1d5b2751ca28 100644
--- a/.liquibase/Data_alias/basic/_demoData/changelog.xml
+++ b/.liquibase/Data_alias/basic/_demoData/changelog.xml
@@ -52,4 +52,6 @@
   <include file="generatedData/documenttemplateplaceofuse.xml" relativeToChangelogFile="true"/>
   <include file="generatedData/visitplan.xml" relativeToChangelogFile="true"/>
   <include file="generatedData/classificationgrading.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/classificationgroup.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/classificationstorage.xml" relativeToChangelogFile="true"/>
 </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
index be1edc314be39595844d14e1b85e91bf8e0f86d5..a083c7e957cff30050be004082832eeaf65e4886 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/classification.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/classification.xml
@@ -4,60 +4,471 @@
     <delete tableName="classification"/>
     <insert tableName="classification">
       <column name="CLASSIFICATIONID" value="028181fe-5687-4904-b7cb-c4a1befe7eed"/>
-      <column name="CLASSIFICATIONSCORE_ID" value="a0c55ee2-0d15-4779-a5a6-93774d5bc393"/>
-      <column name="CLASSIFICATIONTYPE_ID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="90361317-d80e-4466-a45b-3021bf02e2f9"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
       <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
     </insert>
     <insert tableName="classification">
       <column name="CLASSIFICATIONID" value="13771cd8-3694-4a44-8793-cd0fc3fb4b53"/>
-      <column name="CLASSIFICATIONSCORE_ID" value="636af750-fcd3-4480-bfe7-ead42bf85280"/>
-      <column name="CLASSIFICATIONTYPE_ID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="35d8ae15-8993-4ab2-99f6-e57c2ebf0bb3"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
       <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
     </insert>
     <insert tableName="classification">
       <column name="CLASSIFICATIONID" value="13985a1a-1660-4a85-86c1-612bd62df8d7"/>
-      <column name="CLASSIFICATIONSCORE_ID" value="ed6a38f7-97bf-4e3d-a34c-4a1e636fa6a7"/>
-      <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="2fdb4d7e-24d5-4eb1-a130-3a0aaeebd8db"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/>
       <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
     </insert>
     <insert tableName="classification">
       <column name="CLASSIFICATIONID" value="166f3484-53a8-4c44-aad7-ef47a268ae71"/>
-      <column name="CLASSIFICATIONSCORE_ID" value="61fe4e4f-e64d-4195-87b5-658f36ce1736"/>
-      <column name="CLASSIFICATIONTYPE_ID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="3dc5fc76-d2d5-4911-891a-3aacc5a9c925"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="2031525e-6ca3-46b4-91d4-7f90cd31a630"/>
       <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
     </insert>
     <insert tableName="classification">
       <column name="CLASSIFICATIONID" value="421cdeeb-a5d6-4612-b47b-49db966de27f"/>
-      <column name="CLASSIFICATIONSCORE_ID" value="7e569319-5885-452e-9331-a507f3365236"/>
-      <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="3e1e21b0-c10d-4bcb-882c-ac1b239b9cb2"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/>
       <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
     </insert>
     <insert tableName="classification">
       <column name="CLASSIFICATIONID" value="440d25a3-39c1-412e-90c7-c0a6366f0794"/>
-      <column name="CLASSIFICATIONSCORE_ID" value="2fdb4d7e-24d5-4eb1-a130-3a0aaeebd8db"/>
-      <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="ba5d70c3-e77a-45ff-828b-7b3e0a61eec2"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
       <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
     </insert>
     <insert tableName="classification">
       <column name="CLASSIFICATIONID" value="81d75e31-673b-426e-827f-c505b386ce0e"/>
-      <column name="CLASSIFICATIONSCORE_ID" value="ec51d975-bda6-415e-9b91-32f0e981ecd8"/>
-      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="47ec3dbf-f8f6-4418-8dc2-0062510c1a28"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
       <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
     </insert>
     <insert tableName="classification">
       <column name="CLASSIFICATIONID" value="c7b46dff-956a-47e1-8a7f-7d3f56c81da1"/>
-      <column name="CLASSIFICATIONSCORE_ID" value="b1c55bcd-16c6-4b2f-8f73-e16397b40e93"/>
-      <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="d5beb18f-c53e-438d-8b0b-7699aa20fba7"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/>
+      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="1743c169-ef67-42b9-81af-99fc753d7a64"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="a0c55ee2-0d15-4779-a5a6-93774d5bc393"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/>
+      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="0a7ec07b-d429-4b0a-aebb-0a194e76428e"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="bf6b1757-11da-49a9-a02c-8340139968ee"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
+      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="b6d36680-909d-4470-9bf4-0a8b8a7807b1"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="c328cb9e-5cef-4052-a3c1-98e1898eeb63"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/>
       <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
       <column name="OBJECT_TYPE" value="Salesproject"/>
     </insert>
+    
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="93f4dfdf-b07b-4dc5-91a3-7db80cc314fc"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="3c9ceefa-5c98-4629-9c6d-d46b6cad8b78"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
+      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="1180d429-0453-4b67-a805-7dc101e6ead2"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="3fe9f04b-6a85-4a73-a138-ca90b6d8e61c"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="b38101bf-3d36-4509-9637-a428beb9999a"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="2fdb4d7e-24d5-4eb1-a130-3a0aaeebd8db"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/>
+      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="c28d914e-ad91-4202-9fe6-0d0d41e53836"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="3dc5fc76-d2d5-4911-891a-3aacc5a9c925"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="2031525e-6ca3-46b4-91d4-7f90cd31a630"/>
+      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="0969044c-33eb-41eb-9aec-fa3795d8c49f"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="3e1e21b0-c10d-4bcb-882c-ac1b239b9cb2"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/>
+      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="6e187a9b-2e57-4da2-8132-9f576a28d6f7"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="2f4fddd2-be83-4190-99c3-6de8a7e328c5"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
+      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="4d67d40e-4656-46b0-b5a0-9c299c1ef9d3"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="f1534026-34cc-4898-8711-41cbe4accb60"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
+      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="58642867-f8fc-45c1-a926-06306498a9c8"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="d5beb18f-c53e-438d-8b0b-7699aa20fba7"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/>
+      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="6bbe5de0-4302-4467-9f3b-a0292485b214"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="a0c55ee2-0d15-4779-a5a6-93774d5bc393"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/>
+      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="1ec41224-e21c-4adf-8b7c-235eca10801c"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="bf6b1757-11da-49a9-a02c-8340139968ee"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
+      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="4164397b-a129-4e37-9586-af6e6133befd"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="c328cb9e-5cef-4052-a3c1-98e1898eeb63"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/>
+      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="6111dd76-4786-43bf-b6ce-74b36415ad03"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="3c9ceefa-5c98-4629-9c6d-d46b6cad8b78"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
+      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="9cc46dc2-f40a-4c3b-aabd-c77858f5d770"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="3fe9f04b-6a85-4a73-a138-ca90b6d8e61c"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="045365c1-9561-4e4f-ad9b-9ce6ef0d0279"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="2fdb4d7e-24d5-4eb1-a130-3a0aaeebd8db"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/>
+      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="cd531b73-1390-498e-a83d-a50c964c24ea"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="3dc5fc76-d2d5-4911-891a-3aacc5a9c925"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="2031525e-6ca3-46b4-91d4-7f90cd31a630"/>
+      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="8f44739a-7103-4dd3-8f1f-25afbae07cd0"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="3e1e21b0-c10d-4bcb-882c-ac1b239b9cb2"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/>
+      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="02f2f9a4-0d34-472a-b8b2-461fad057c4e"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="ba5d70c3-e77a-45ff-828b-7b3e0a61eec2"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
+      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="3f410195-bca5-41ac-a819-a8d29506f9e5"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="47ec3dbf-f8f6-4418-8dc2-0062510c1a28"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
+      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="77a11bd3-a521-4701-b564-7f8b07000f0b"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="d5beb18f-c53e-438d-8b0b-7699aa20fba7"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/>
+      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="9aa3789c-bc9d-43cf-a121-2575090c2dc4"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="a0c55ee2-0d15-4779-a5a6-93774d5bc393"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/>
+      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="fbc32ea9-8350-463a-846e-71a30851f15a"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="bf6b1757-11da-49a9-a02c-8340139968ee"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
+      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="3e9b7598-39a6-4ebc-aa49-8ec3a20f9eb4"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="c328cb9e-5cef-4052-a3c1-98e1898eeb63"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/>
+      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="80beaf88-415d-49da-ae0b-c4d6528747a2"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="3c9ceefa-5c98-4629-9c6d-d46b6cad8b78"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
+      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="053f18d1-8fe2-4a79-978d-03cc37454ffe"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="3fe9f04b-6a85-4a73-a138-ca90b6d8e61c"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="208c8324-e7f9-41b9-93ec-ac7e7f7262b7"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="2fdb4d7e-24d5-4eb1-a130-3a0aaeebd8db"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/>
+      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="9f85a0f0-6576-4077-99fc-953d8ab53352"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="3dc5fc76-d2d5-4911-891a-3aacc5a9c925"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="2031525e-6ca3-46b4-91d4-7f90cd31a630"/>
+      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="c4dc8a62-edc1-4af6-b7c6-f91f6ab700c5"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="3e1e21b0-c10d-4bcb-882c-ac1b239b9cb2"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/>
+      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="122116f6-e858-4605-af18-6c8b21da6455"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="2f4fddd2-be83-4190-99c3-6de8a7e328c5"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
+      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="3da8549a-762a-438f-9878-271c52943fd2"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="7e569319-5885-452e-9331-a507f3365236"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
+      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="28405f79-a635-4ede-8b11-11284c5e7190"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="636af750-fcd3-4480-bfe7-ead42bf85280"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/>
+      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="905cae71-9e4b-48f2-9de3-fcb8607d01a1"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="a0c55ee2-0d15-4779-a5a6-93774d5bc393"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/>
+      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="d33aeb65-0c28-48a1-9a81-105faa882a4c"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="c9d4e28d-7935-42c5-9da5-5ce0b51b425a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
+      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="da44d022-9ea6-4fcb-9491-c5b7236c642f"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="b3792b08-4b07-4ed2-9bee-4673182b7349"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/>
+      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="3672003e-0624-4a51-bb15-48f93bbd4342"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="39547328-ccc6-47ad-b31a-d6a149081c44"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="a027bccd-c894-443e-bdde-f32ee0b88285"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="1f924d71-c500-4cdd-bc52-4718a6b88e45"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="e10a5ecb-b0f3-4b08-a380-de1a04fbc87f"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="a177b155-4665-4af1-b50e-0b59e8ac2752"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="b7d6e658-96b3-4664-b7db-139b73add7e3"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="e70a23b4-f2a9-4438-8ba6-742c6c17e5cc"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="2031525e-6ca3-46b4-91d4-7f90cd31a630"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="6382b5d7-06a3-4584-8314-e00abdd8e8e9"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="3e1e21b0-c10d-4bcb-882c-ac1b239b9cb2"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="94a83ec1-8e6d-4c1b-90a0-54eeac52277b"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="ba5d70c3-e77a-45ff-828b-7b3e0a61eec2"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="6017fea2-7e31-4220-86f4-cf72123af805"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="47ec3dbf-f8f6-4418-8dc2-0062510c1a28"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="dfaec9c0-d9fa-4362-a955-341addc3a76d"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="d5beb18f-c53e-438d-8b0b-7699aa20fba7"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="a28dd724-cd0b-48f4-afd5-840ddc611026"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="a0c55ee2-0d15-4779-a5a6-93774d5bc393"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="25bfa0ce-433a-4bb9-992c-df66b02a76da"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="6bd19de4-691b-4e78-84dc-cf6f41231978"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="b06e62a0-53b0-4046-b024-b00293e632f2"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="b3792b08-4b07-4ed2-9bee-4673182b7349"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="58671a19-6522-46e6-93ba-8f62bf580048"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="3c9ceefa-5c98-4629-9c6d-d46b6cad8b78"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
+      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="2a9353ec-78c3-42ae-836f-dcec0a4cfaad"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="3fe9f04b-6a85-4a73-a138-ca90b6d8e61c"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
+      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="2abfbf1f-8f2c-4713-a61b-13ba593d1055"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="2fdb4d7e-24d5-4eb1-a130-3a0aaeebd8db"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/>
+      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="a3e22367-c33f-4f2c-ad0c-8f9eb6ab572a"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="3dc5fc76-d2d5-4911-891a-3aacc5a9c925"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="2031525e-6ca3-46b4-91d4-7f90cd31a630"/>
+      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="297cc1a1-1813-4f30-ad70-b452292c3371"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="3e1e21b0-c10d-4bcb-882c-ac1b239b9cb2"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/>
+      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="0521dd6e-49ca-4a3a-9906-12e8359e3db9"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="2f4fddd2-be83-4190-99c3-6de8a7e328c5"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
+      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="0fcfa75f-9844-49d7-a088-56e570be4cd0"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="f1534026-34cc-4898-8711-41cbe4accb60"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
+      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="9452b219-64af-4c27-8f35-0ba81210abf3"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="d5beb18f-c53e-438d-8b0b-7699aa20fba7"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/>
+      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="4e96b522-209b-48ca-b04d-f328416aacdd"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="a0c55ee2-0d15-4779-a5a6-93774d5bc393"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/>
+      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="f47c0ea2-3a6d-4d7b-8f89-bb2d9799fd0e"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="bf6b1757-11da-49a9-a02c-8340139968ee"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
+      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="e90c4086-db5f-4099-ba26-67799eb25e44"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="c328cb9e-5cef-4052-a3c1-98e1898eeb63"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/>
+      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
 
   <insert tableName="classification">
       <column name="CLASSIFICATIONID" value="35b79ed1-7002-44f1-af61-891cdf863ac9"/>
@@ -189,7 +600,7 @@
     
   <insert tableName="classification">
       <column name="CLASSIFICATIONID" value="f7f7022f-57a2-4944-a9d3-e092e1be43b3"/>
-      <column name="CLASSIFICATIONSCORE_ID" value="3eb18b76-f51e-4ad2-9080-74b4a603667b"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="2119cb62-b57c-40be-aff8-ace8e40378d4"/>
       <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
       <column name="OBJECT_ROWID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
@@ -203,7 +614,7 @@
     </insert>
     <insert tableName="classification">
       <column name="CLASSIFICATIONID" value="008ac315-31ab-4320-bf29-6681708eda88"/>
-      <column name="CLASSIFICATIONSCORE_ID" value="b41e180f-db8c-44c3-9fbb-179ab58d5852"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
       <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
       <column name="OBJECT_ROWID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
@@ -233,7 +644,7 @@
       <column name="CLASSIFICATIONID" value="5f0cdce4-81b4-4c05-9011-4d76bdc21b65"/>
       <column name="CLASSIFICATIONSCORE_ID" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
       <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
-      <column name="OBJECT_ROWID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
+      <column name="OBJECT_ROWID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
     </insert>
   <insert tableName="classification">
@@ -442,6 +853,70 @@
       <column name="OBJECT_TYPE" value="Organisation"/>
     </insert>
     
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="3cc8a674-7934-4b8f-b200-bd19ddcb4689"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="618bf0d1-18d4-4a96-900c-80a5a616da9b"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
+      <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="57a2e5d3-0aa9-48a1-89f8-2db8967ffed6"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
+      <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="a3081728-77d9-4c92-96b5-6fa21659a33f"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
+      <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="342c7c38-ca79-4e46-9677-5da074ceb60b"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4d868dc5-747a-4f22-9134-638198d3084a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
+      <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="a3e2d764-bd51-4f06-a0a0-0e5f4b37d41b"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="a60aaf2d-88aa-4c72-9606-0eb3ac9493cf"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
+      <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="f7504a50-2748-434a-ae08-cff2f4f8035a"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
+      <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+  <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="cea579d4-35fa-4376-b791-8b91cbe05d3a"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
+      <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+  <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="c6fe5361-777d-4047-99dd-e8495ebb8c73"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="5be4d454-1f3e-4a3d-b8a4-3eb49ce1bc35"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
+      <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+  <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="aa291e2a-646d-4b73-b826-85bd357fd5c0"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
+      <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    
     <insert tableName="classification">
       <column name="CLASSIFICATIONID" value="d70e23a7-bc3c-43ae-8b2c-44d85fc7a2d3"/>
       <column name="CLASSIFICATIONSCORE_ID" value="3eb18b76-f51e-4ad2-9080-74b4a603667b"/>
@@ -458,9 +933,9 @@
     </insert>
     <insert tableName="classification">
       <column name="CLASSIFICATIONID" value="a63b089c-f856-4513-8691-57422e400dc4"/>
-      <column name="CLASSIFICATIONSCORE_ID" value="b41e180f-db8c-44c3-9fbb-179ab58d5852"/>
-      <column name="CLASSIFICATIONTYPE_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
-      <column name="OBJECT_ROWID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
+      <column name="OBJECT_ROWID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
       <column name="OBJECT_TYPE" value="Organisation"/>
     </insert>
     <insert tableName="classification">
@@ -506,7 +981,836 @@
       <column name="OBJECT_TYPE" value="Organisation"/>
     </insert>
     
+  <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="a5ce852a-83e6-4b0e-b3fa-310ea99c7e87"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4d868dc5-747a-4f22-9134-638198d3084a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
+      <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="fc10831b-65ea-4ecb-b52e-98c6f54b2a9a"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
+      <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="058a9ef7-adca-4278-840a-720665fa3cd3"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
+      <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="f11eeaac-645d-416e-a50d-259f6ead0c30"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="22581c2e-bb4d-43cb-b6b3-80244425e209"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
+      <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="cb7df4e3-e15c-4e65-92f4-ecd5cda09f95"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
+      <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="dccab9b9-5306-4325-896f-99646139b5ba"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="893720f9-3780-4868-af0c-cbef5a564024"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
+      <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="03bb8bbb-0644-4376-99fb-b21fc2807f14"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="29134094-66f2-4331-9f14-fc6a27ab111e"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
+      <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="5ce0c1b0-c040-462e-bd19-c8e109449b8e"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
+      <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="a728d498-dd75-4b96-a5e5-cbdccd10b0b2"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
+      <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="b923621f-e48e-4a77-9f67-f63f5a0b0fbb"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4d868dc5-747a-4f22-9134-638198d3084a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
+      <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="9c457191-c7c7-4a4f-bb91-8a48d27add92"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
+      <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="d6d64590-9299-4348-8e21-0cac9f84f51a"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
+      <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="da16c6c0-3bdf-4af5-b810-e85babe83e69"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="22581c2e-bb4d-43cb-b6b3-80244425e209"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
+      <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="9fcf5382-f070-4698-a011-748c8584733b"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="5564a330-8c13-424f-a24b-5f97185a9036"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
+      <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="a0120295-79d1-429f-aef4-b9cce9c92de2"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="893720f9-3780-4868-af0c-cbef5a564024"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
+      <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="8c792586-2d2d-41a3-933b-6f679dd4011e"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
+      <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="7d131f29-0430-44ad-b4ec-7044a67e0e3b"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
+      <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="5c1b2604-da33-4268-8400-5fb4b23c436b"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
+      <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="f25ef82a-6466-49c7-aa35-1f4d750218ca"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="92708239-fd7f-4699-8aaa-b6290fedaac0"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
+      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="fd0fea13-2322-4664-bf15-8026a91bebd2"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
+      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="a7b9862c-6a25-4bbc-92ec-7bfb25cdb6c0"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
+      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="eba1581a-1235-4139-a33a-687513436777"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4c8cfcec-f183-4d82-8a59-ae743ec772b4"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
+      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="c61069c1-fe41-4585-9d75-cef27d534ceb"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
+      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="81deaf11-9f63-4cc8-b83c-8711f5e3f734"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="893720f9-3780-4868-af0c-cbef5a564024"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
+      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="a7d7fd5c-624c-4d64-929b-2b0eb146ab9d"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
+      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="d3b5f0ad-1a66-4eee-a40d-36daf317d510"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
+      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="597de33c-b223-4d55-bed7-aeb1d161fc2e"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
+      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
     
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="6d3464fa-eadd-4afd-b4e1-3031726770d5"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4d868dc5-747a-4f22-9134-638198d3084a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
+      <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="1ac75382-0af9-42d2-8fe5-22295a93e8b3"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
+      <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="522566b0-6eca-40bb-977c-c9a26f730890"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
+      <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="caaa6b4e-34e3-4337-b65f-abe761a8c24c"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="22581c2e-bb4d-43cb-b6b3-80244425e209"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
+      <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="e4d83d98-fcf8-402e-9d81-17f374654df7"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
+      <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="62b9dacc-7d6f-4e05-81f8-6a425e369489"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="893720f9-3780-4868-af0c-cbef5a564024"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
+      <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="77941d3d-e876-44b3-b824-3a075d7dd398"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
+      <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="a03201a8-0858-45e0-a0e2-9b70f5a35061"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
+      <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="3056c0b4-5e4b-4580-ab89-75ac80920415"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
+      <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
     
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="00c30050-c850-46b0-8e1d-d70f889655e3"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4d868dc5-747a-4f22-9134-638198d3084a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
+      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="4444b22f-02d1-4e8f-9073-82d61eba18e0"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
+      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="f5e4ebc2-e0a7-4ab0-b7e1-dc43c2913135"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
+      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="b6ed4614-ea3d-4b2d-a9c3-44d146724b71"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="22581c2e-bb4d-43cb-b6b3-80244425e209"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
+      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="e7a7da18-7283-4d75-ab9f-06f62972293c"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="5564a330-8c13-424f-a24b-5f97185a9036"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
+      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="d6443737-e23b-42fa-81a8-d5e86636fb79"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="893720f9-3780-4868-af0c-cbef5a564024"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
+      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="94a737b7-d4f6-4a13-b06b-05a225d9225b"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
+      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="319dec0d-5ed5-40f8-8c98-b912582a8817"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
+      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="22429945-9c82-493c-a0a6-ff31ecaa4b56"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
+      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="a898ffe5-96ec-4eef-9e0c-6a2622fc74fc"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="92708239-fd7f-4699-8aaa-b6290fedaac0"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
+      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="0f77577a-7a45-4c3f-be39-35ec364e8242"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
+      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="cf051c11-5f8e-401c-8e57-aabc55496eb8"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
+      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="d18a0dec-5161-488d-958d-3d9ea88f32f3"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4c8cfcec-f183-4d82-8a59-ae743ec772b4"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
+      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="0359b7b8-7526-4165-8b01-e90403b206eb"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
+      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="91cd0603-ac46-420b-81d4-0e1c72a916bf"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="893720f9-3780-4868-af0c-cbef5a564024"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
+      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="62cc115a-f80e-4a0f-899e-8060e9ed575e"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
+      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="31a22039-ac7d-4bb9-9f36-d1f91c6c4052"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
+      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="289cea03-2c65-4557-b0f9-0dd29b26cecc"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
+      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="e27e1f4b-bca2-4928-9652-950762723531"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4d868dc5-747a-4f22-9134-638198d3084a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
+      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="95f0f027-799b-48fd-b1b5-49f70760a008"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
+      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="52c6bccc-1055-48dc-ad5d-311e80a12d2a"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
+      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="5dd419ab-971f-42fd-9bb6-2247a6b4175b"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="22581c2e-bb4d-43cb-b6b3-80244425e209"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
+      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="beb7f0ec-3331-49f9-b440-0099f62205c0"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
+      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="359fddf8-baae-497f-8ad6-d2cab1438473"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="893720f9-3780-4868-af0c-cbef5a564024"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
+      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="2314864a-76f7-4fe9-a01f-c5be6ba0669e"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
+      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="203fb867-ee2f-4c01-8fb5-8e49da32be64"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
+      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="a51c9515-80bc-4902-8d9b-115179ab40df"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
+      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="9260ed8f-3b4a-4c5a-9077-0fe59105883b"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4d868dc5-747a-4f22-9134-638198d3084a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
+      <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="1a093afe-066e-4bbc-b6c9-b913ab8dfdc0"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
+      <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="bc61586b-a63e-4d69-82ad-62b02ea2b28a"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
+      <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="051e9f0f-fc99-4046-90b9-6cfb403844e9"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="22581c2e-bb4d-43cb-b6b3-80244425e209"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
+      <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="32b4f1b2-6cc2-4702-a9e0-0a75184c5698"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="5564a330-8c13-424f-a24b-5f97185a9036"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
+      <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="f5dd89ed-f6ae-4676-aa83-906211570a5b"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="893720f9-3780-4868-af0c-cbef5a564024"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
+      <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="b3846b7c-e70a-43fe-9637-ea74ed1fe0d7"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
+      <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="f60f8fe8-5ee9-43b4-a0cd-50b0f354bf79"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
+      <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="83d2e0f5-b7f5-4305-8da7-69e27da99f98"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
+      <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="717dfb2c-2e2c-46c8-b72c-8d81e61b94c1"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="92708239-fd7f-4699-8aaa-b6290fedaac0"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
+      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="0423c091-7e65-43eb-9ab3-f5a847350845"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
+      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="d9cce938-36d9-4a80-9bc2-9e37e6ed64ce"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
+      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="9ec7bc3e-dc4c-40e4-bcee-bd59ab949d42"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4c8cfcec-f183-4d82-8a59-ae743ec772b4"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
+      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="14f31249-544a-46f9-a2e4-c3bdcf3e49a3"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
+      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="3807eda2-aa0f-4caf-b3ab-0ff341eb887b"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="893720f9-3780-4868-af0c-cbef5a564024"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
+      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="36b1ed8c-a4d4-4203-aa20-52cf10f8d8a0"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
+      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="d74914a9-05f6-4433-9121-87755b724fb4"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
+      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="a69faa8d-afaa-40cd-97e6-65a851f5dde1"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
+      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="c179fe12-4bb0-495d-99d0-0159d0466bc0"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4d868dc5-747a-4f22-9134-638198d3084a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
+      <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="ed2a3c86-814d-4212-a2da-5875d0d3c598"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
+      <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="688cdc0d-d1a7-46ad-95c3-7503c054ee2c"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
+      <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="77f0f0bd-eaca-44ef-abfa-9156eac6eb7e"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="22581c2e-bb4d-43cb-b6b3-80244425e209"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
+      <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="9f5975c7-3df6-4fa4-87e4-7a1c0dbd967c"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
+      <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="d03c3aa2-c97f-4bd4-b92f-7e09d594cdb8"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="893720f9-3780-4868-af0c-cbef5a564024"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
+      <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="6800e69f-33b1-44ae-b3a2-d7362bfddbf8"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
+      <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="218f1794-26e6-45f2-a26d-98185a49bf4f"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
+      <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="f738a3d6-b4e0-491e-8d51-a83ce039fbc8"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
+      <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="a653069f-927d-425a-8956-aeb15a2c4bc8"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4d868dc5-747a-4f22-9134-638198d3084a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
+      <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="a8c2d3c5-423f-45fa-a8db-cd2ab59c5045"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
+      <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="fa07168c-6aa5-4b9d-935e-6ece6e1c5bdb"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
+      <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="14148c9a-8afb-42ad-a4c5-d1102241e9f8"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="22581c2e-bb4d-43cb-b6b3-80244425e209"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
+      <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="2b0e75e0-0a36-4397-988d-2ae60e5d2658"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="5564a330-8c13-424f-a24b-5f97185a9036"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
+      <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="b828dfb2-943a-4f81-b950-fbe4db3d19b7"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="893720f9-3780-4868-af0c-cbef5a564024"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
+      <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="5a5e780b-01af-4a0f-bcd6-74c0c588210a"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
+      <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="1dc7de76-80d9-4240-97ae-cab241301a68"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
+      <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="a76fcafb-a84d-4505-8c68-1b221482e292"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
+      <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="9ea74c40-7732-4d0a-a489-f50bc60caf8b"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="92708239-fd7f-4699-8aaa-b6290fedaac0"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
+      <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="2c644b64-0404-4eac-841c-d8579ff25fa6"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
+      <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="ac0944d2-b184-45f5-983a-6c873aadfb8e"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
+      <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="5bb5e000-5bba-4895-a5b8-374c2c5bd3a4"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4c8cfcec-f183-4d82-8a59-ae743ec772b4"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
+      <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="b49911f5-fccc-4dba-a46a-32fd56cf8b8f"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
+      <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="65f45f0d-ab41-4a83-b5f7-795dc21d0fd4"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="893720f9-3780-4868-af0c-cbef5a564024"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
+      <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="13f634ef-70ba-440b-91af-e6324cdb20bb"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
+      <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="555a280b-a2e4-4eb5-bbec-87bca3987395"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
+      <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="c58b5e5a-b4fe-4dec-a93d-79848e564b87"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
+      <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="85b54389-50f9-4bd3-838b-d3941bda2cc1"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="92708239-fd7f-4699-8aaa-b6290fedaac0"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
+      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="9286af56-8942-4e30-8ed3-cde6bf2e77d5"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
+      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="445ccf23-4d44-489a-8054-b46194e104e7"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
+      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="46065d3f-a811-430d-8fa2-e048aee894c7"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4c8cfcec-f183-4d82-8a59-ae743ec772b4"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
+      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="7884869d-85ab-458f-9078-e2dd7234be91"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4285d598-06c0-435d-bb5e-28dec5f31521"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
+      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="6a6dfe13-6fcc-4ae9-b12b-dced4a55daef"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="893720f9-3780-4868-af0c-cbef5a564024"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
+      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="740bcc4c-b621-458e-874e-034cf70965bc"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
+      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="20092371-2723-45e2-aae0-3a697b1265fc"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
+      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="classification">
+      <column name="CLASSIFICATIONID" value="b1cb759c-f17c-4277-bee1-e50717d8934a"/>
+      <column name="CLASSIFICATIONSCORE_ID" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/>
+      <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
+      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
   </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationgrading.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationgrading.xml
index 43958c7b369419319b20c4e13c0023d936972a11..ad66344241be6327710070a36e7995a24f0e6ca2 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationgrading.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationgrading.xml
@@ -6,122 +6,122 @@
       <column name="CLASSIFICATIONGRADINGID" value="68dd4d91-d472-477d-935c-70cbe5606c51"/>
       <column name="GRADING" value="A"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="100"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="1. Classification"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/>
     </insert>
     <insert tableName="classificationgrading">
       <column name="CLASSIFICATIONGRADINGID" value="9437f368-bea1-47f4-b76e-d6a391af438d"/>
       <column name="GRADING" value="B"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="75"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="1. Classification"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/>
     </insert>
     <insert tableName="classificationgrading">
       <column name="CLASSIFICATIONGRADINGID" value="348a2af8-ec01-4a58-8ff6-5e3a837852a4"/>
       <column name="GRADING" value="C"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="50"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="1. Classification"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/>
     </insert>
     <insert tableName="classificationgrading">
       <column name="CLASSIFICATIONGRADINGID" value="9a823957-0ca9-4972-95df-d894d4e4fc25"/>
       <column name="GRADING" value="D"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="25"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="1. Classification"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/>
     </insert>
     <insert tableName="classificationgrading">
       <column name="CLASSIFICATIONGRADINGID" value="4ef54a02-ddf8-4238-b9fd-f5a043032b7d"/>
       <column name="GRADING" value="A"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="100"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="2. Classification"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="b2126d9d-8d18-46d4-a48f-1a03fc456ddd"/>
     </insert>
     <insert tableName="classificationgrading">
       <column name="CLASSIFICATIONGRADINGID" value="748ef65c-af41-42d8-8ac4-480bc9390591"/>
       <column name="GRADING" value="B"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="75"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="2. Classification"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="b2126d9d-8d18-46d4-a48f-1a03fc456ddd"/>
     </insert>
     <insert tableName="classificationgrading">
       <column name="CLASSIFICATIONGRADINGID" value="8e73dd97-4428-4316-882d-7b2af56330ef"/>
       <column name="GRADING" value="C"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="50"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="2. Classification"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="b2126d9d-8d18-46d4-a48f-1a03fc456ddd"/>
     </insert>
     <insert tableName="classificationgrading">
       <column name="CLASSIFICATIONGRADINGID" value="76af9750-a714-4a35-bfd2-6eab3c316e5b"/>
       <column name="GRADING" value="D"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="25"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="2. Classification"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="b2126d9d-8d18-46d4-a48f-1a03fc456ddd"/>
     </insert>
     <insert tableName="classificationgrading">
       <column name="CLASSIFICATIONGRADINGID" value="c021718f-b6ca-4d4d-87f7-e4450d103fe2"/>
       <column name="GRADING" value="A"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="100"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="3. Classification"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/>
     </insert>
     <insert tableName="classificationgrading">
       <column name="CLASSIFICATIONGRADINGID" value="8f702450-83fc-4085-92c2-ac09f96dcd6b"/>
       <column name="GRADING" value="B"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="75"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="3. Classification"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/>
     </insert>
     <insert tableName="classificationgrading">
       <column name="CLASSIFICATIONGRADINGID" value="14da2618-88be-425c-92c3-68d8584aa0bf"/>
       <column name="GRADING" value="C"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="50"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="3. Classification"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/>
     </insert>
     <insert tableName="classificationgrading">
       <column name="CLASSIFICATIONGRADINGID" value="5e5c3ffe-3fa6-41e3-8659-1b03e7e1a1cd"/>
       <column name="GRADING" value="D"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="25"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="3. Classification"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/>
     </insert>
     
     <insert tableName="classificationgrading">
       <column name="CLASSIFICATIONGRADINGID" value="5e46e499-00c2-4cc2-9f4c-952290484623"/>
       <column name="GRADING" value="D"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="25"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="1. Target group"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="e3b0a84f-d2a7-4d7c-b734-82ab4b262e84"/>
     </insert>
     <insert tableName="classificationgrading">
       <column name="CLASSIFICATIONGRADINGID" value="8c982beb-bc53-4bcf-8b76-7ee919bbf653"/>
       <column name="GRADING" value="C"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="50"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="1. Target group"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="e3b0a84f-d2a7-4d7c-b734-82ab4b262e84"/>
     </insert>
     <insert tableName="classificationgrading">
       <column name="CLASSIFICATIONGRADINGID" value="a89c81df-9380-41b1-9c7c-52d3a1862ac7"/>
       <column name="GRADING" value="B"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="75"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="1. Target group"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="e3b0a84f-d2a7-4d7c-b734-82ab4b262e84"/>
     </insert>
     <insert tableName="classificationgrading">
       <column name="CLASSIFICATIONGRADINGID" value="7afd58ad-6eae-4d6b-8d4b-2ca4bdd177e6"/>
       <column name="GRADING" value="A"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="100"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="1. Target group"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="e3b0a84f-d2a7-4d7c-b734-82ab4b262e84"/>
     </insert>
     <insert tableName="classificationgrading">
       <column name="CLASSIFICATIONGRADINGID" value="8408ca43-a4dc-4767-8127-e52c08276815"/>
       <column name="GRADING" value="D"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="25"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="2. Customer value"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/>
     </insert>
     <insert tableName="classificationgrading">
       <column name="CLASSIFICATIONGRADINGID" value="03aa277d-873b-4913-9051-d44aa4f77627"/>
       <column name="GRADING" value="C"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="50"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="2. Customer value"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/>
     </insert>
     <insert tableName="classificationgrading">
       <column name="CLASSIFICATIONGRADINGID" value="29226adf-eb79-4696-a4b8-7be73c9488e6"/>
       <column name="GRADING" value="B"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="75"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="2. Customer value"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/>
     </insert>
     <insert tableName="classificationgrading">
       <column name="CLASSIFICATIONGRADINGID" value="f8e1c5a4-b0d0-4b73-9700-11ff916adfdd"/>
       <column name="GRADING" value="A"/>
       <column name="MAXGRADEFORSCORE" valueNumeric="100"/>
-      <column name="CLASSIFICATIONTYPE_GROUP" value="2. Customer value"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/>
     </insert>
   </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationgroup.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationgroup.xml
new file mode 100644
index 0000000000000000000000000000000000000000..73d7c48a4deb1285b92370ea121501217089f2d6
--- /dev/null
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationgroup.xml
@@ -0,0 +1,31 @@
+<?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="c71ca120-5de6-4a44-a795-1127653c25df">
+    <delete tableName="classificationgroup"/>
+    <insert tableName="classificationgroup">
+      <column name="CLASSIFICATIONGROUPID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/>
+      <column name="TITLE" value="1. Classification"/>
+      <column name="SORTING" valueNumeric="1"/>
+    </insert>
+    <insert tableName="classificationgroup">
+      <column name="CLASSIFICATIONGROUPID" value="b2126d9d-8d18-46d4-a48f-1a03fc456ddd"/>
+      <column name="TITLE" value="2. Classification"/>
+      <column name="SORTING" valueNumeric="2"/>
+    </insert>
+    <insert tableName="classificationgroup">
+      <column name="CLASSIFICATIONGROUPID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/>
+      <column name="TITLE" value="3. Classification"/>
+      <column name="SORTING" valueNumeric="3"/>
+    </insert>
+    <insert tableName="classificationgroup">
+      <column name="CLASSIFICATIONGROUPID" value="e3b0a84f-d2a7-4d7c-b734-82ab4b262e84"/>
+      <column name="TITLE" value="1. Target group"/>
+      <column name="SORTING" valueNumeric="1"/>
+    </insert>
+    <insert tableName="classificationgroup">
+      <column name="CLASSIFICATIONGROUPID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/>
+      <column name="TITLE" value="2. Customer value"/>
+      <column name="SORTING" valueNumeric="2"/>
+    </insert> 
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationscore.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationscore.xml
index 7e855d0f6b7fb44938100cba91fdc499d0f74874..69ade9eca1dc3ec054bef0ae3121314a9c234b2e 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationscore.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationscore.xml
@@ -646,35 +646,35 @@
       <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
       <column name="SCORE" valueNumeric="0.00"/>
       <column name="SORT" valueNumeric="10"/>
-      <column name="TITLE" value="0-49 T€"/>
+      <column name="TITLE" value="0-49 D€"/>
     </insert>
     <insert tableName="CLASSIFICATIONSCORE">
       <column name="CLASSIFICATIONSCOREID" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/>
       <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
       <column name="SCORE" valueNumeric="10.00"/>
       <column name="SORT" valueNumeric="30"/>
-      <column name="TITLE" value="100-199 T€"/>
+      <column name="TITLE" value="100-199 D€"/>
     </insert>
     <insert tableName="CLASSIFICATIONSCORE">
       <column name="CLASSIFICATIONSCOREID" value="733323d6-ff3d-4ccb-b179-ad1fea05dfe8"/>
       <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
       <column name="SCORE" valueNumeric="15.00"/>
       <column name="SORT" valueNumeric="40"/>
-      <column name="TITLE" value="200-349 T€"/>
+      <column name="TITLE" value="200-349 D€"/>
     </insert>
     <insert tableName="CLASSIFICATIONSCORE">
       <column name="CLASSIFICATIONSCOREID" value="839cd672-5981-4207-8a82-caddd00107e4"/>
       <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
       <column name="SCORE" valueNumeric="5.00"/>
       <column name="SORT" valueNumeric="20"/>
-      <column name="TITLE" value="50-99 T€"/>
+      <column name="TITLE" value="50-99 D€"/>
     </insert>
     <insert tableName="CLASSIFICATIONSCORE">
       <column name="CLASSIFICATIONSCOREID" value="f02cfd28-5a09-42ca-b805-07b7b38e3363"/>
       <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
       <column name="SCORE" valueNumeric="20.00"/>
       <column name="SORT" valueNumeric="50"/>
-      <column name="TITLE" value="ab 350 T€"/>
+      <column name="TITLE" value="ab 350 D€"/>
     </insert>
     <insert tableName="CLASSIFICATIONSCORE">
       <column name="CLASSIFICATIONSCOREID" value="4982ab85-0961-4d85-8fee-2b55887add96"/>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationstorage.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationstorage.xml
new file mode 100644
index 0000000000000000000000000000000000000000..aa7419f65cf9a1919623b21eee01fbba8a344b18
--- /dev/null
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationstorage.xml
@@ -0,0 +1,162 @@
+<?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="c71ca120-5de6-4a44-a795-1127653c25df">
+    <delete tableName="CLASSIFICATIONSTORAGE"/>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="166e729d-45c6-4dab-bff2-940d2b618f6b"/>
+      <column name="CLASSIFICATIONVALUE" value="BBB"/>
+      <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="1aafcbf6-6feb-4916-a4fd-58c138eb8f8f"/>
+      <column name="CLASSIFICATIONVALUE" value="DBA"/>
+      <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="04b4ac80-a316-437a-b113-e7de14e181a8"/>
+      <column name="CLASSIFICATIONVALUE" value="ABB"/>
+      <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="42cc772e-53c6-4849-be29-ebb4e18ab860"/>
+      <column name="CLASSIFICATIONVALUE" value="ACB"/>
+      <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="7f7dfe1d-cb98-44c8-8106-858d991d2b06"/>
+      <column name="CLASSIFICATIONVALUE" value="ACA"/>
+      <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="471aafd5-a348-453f-8b2a-64bb365fd0ee"/>
+      <column name="CLASSIFICATIONVALUE" value="ACB"/>
+      <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="63dd36bb-74b8-487b-811f-521438ef9491"/>
+      <column name="CLASSIFICATIONVALUE" value="AC"/>
+      <column name="OBJECT_ROWID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="4ce62df5-f0ea-4593-a152-6704c61d7cef"/>
+      <column name="CLASSIFICATIONVALUE" value="BD"/>
+      <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="821c7eed-7bee-4879-97ec-44d2014a192b"/>
+      <column name="CLASSIFICATIONVALUE" value="BD"/>
+      <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="7e59d485-01a8-4e43-9655-ba751d5983a4"/>
+      <column name="CLASSIFICATIONVALUE" value="BC"/>
+      <column name="OBJECT_ROWID" value="449080f6-b714-4189-a261-37439d0d4010"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="c64c9f31-a108-4df9-b515-6e523b1341c1"/>
+      <column name="CLASSIFICATIONVALUE" value="AC"/>
+      <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="1251e4b0-195d-4556-a10e-7942f1b0e337"/>
+      <column name="CLASSIFICATIONVALUE" value="AB"/>
+      <column name="OBJECT_ROWID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="3893da8a-f357-46e0-a0b9-65aa58b0dfa6"/>
+      <column name="CLASSIFICATIONVALUE" value="BC"/>
+      <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="84a92c36-88df-4c06-a36a-650ed92d4d0a"/>
+      <column name="CLASSIFICATIONVALUE" value="BD"/>
+      <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="f451479f-97dc-4570-b342-c8d53f04b493"/>
+      <column name="CLASSIFICATIONVALUE" value="AC"/>
+      <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="80eac6e6-f237-455e-96fd-8484722a79d4"/>
+      <column name="CLASSIFICATIONVALUE" value="BD"/>
+      <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="25a1b340-538d-4c4f-8b1e-25126286cd53"/>
+      <column name="CLASSIFICATIONVALUE" value="BB"/>
+      <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="bbc19466-8d76-4f35-be56-8458f677d4a9"/>
+      <column name="CLASSIFICATIONVALUE" value="BC"/>
+      <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="0adb8953-1685-45cf-bcf7-c2c2098aa215"/>
+      <column name="CLASSIFICATIONVALUE" value="BB"/>
+      <column name="OBJECT_ROWID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="b4d2847f-0548-4cc8-b002-7723b5fc9184"/>
+      <column name="CLASSIFICATIONVALUE" value="BD"/>
+      <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="e2142492-eeab-482d-a37e-b1c8fe7b2545"/>
+      <column name="CLASSIFICATIONVALUE" value="BC"/>
+      <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="7a4762f5-90a3-4b6c-8a5d-93125381c18a"/>
+      <column name="CLASSIFICATIONVALUE" value="AC"/>
+      <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="fc665249-9efc-4d90-839d-cdffb4c3f407"/>
+      <column name="CLASSIFICATIONVALUE" value="AC"/>
+      <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="7b2eb62a-b686-4eaf-bde1-2e1dd1028f65"/>
+      <column name="CLASSIFICATIONVALUE" value="BC"/>
+      <column name="OBJECT_ROWID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="2ab913d3-e1a8-4fe2-904b-77b02f6be689"/>
+      <column name="CLASSIFICATIONVALUE" value="BB"/>
+      <column name="OBJECT_ROWID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+    <insert tableName="CLASSIFICATIONSTORAGE">
+      <column name="CLASSIFICATIONSTORAGEID" value="8db70618-5840-4d4b-90e2-66e1919fc6c1"/>
+      <column name="CLASSIFICATIONVALUE" value="AC"/>
+      <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/>
+      <column name="OBJECT_TYPE" value="Organisation"/>
+    </insert>
+  </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationtype.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationtype.xml
index 9b58008a928bf4c00f64805ed0bdf678df616d1c..f758025469ed08e0bb3af66cdd6e83883584e8fd 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationtype.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationtype.xml
@@ -3,126 +3,125 @@
   <changeSet author="autogenerated" id="de26cf22-891e-4584-97cd-fe877ebc790c">
     <delete tableName="classificationtype"/>
     <insert tableName="classificationtype">
-      <column name="CLASSIFICATIONGROUP" value="2. Classification"/>
-      <column name="CLASSIFICATIONTYPE" value="SALESPROJ"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="b2126d9d-8d18-46d4-a48f-1a03fc456ddd"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONTYPEID" value="2031525e-6ca3-46b4-91d4-7f90cd31a630"/>
       <column name="SCORETYPE" value="ScoreCustomizing"/>
     </insert>
     <insert tableName="classificationtype">
-      <column name="CLASSIFICATIONGROUP" value="2. Classification"/>
-      <column name="CLASSIFICATIONTYPE" value="SALESPROJ"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="b2126d9d-8d18-46d4-a48f-1a03fc456ddd"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONTYPEID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/>
       <column name="SCORETYPE" value="ScoreStandard"/>
     </insert>
     <insert tableName="classificationtype">
-      <column name="CLASSIFICATIONGROUP" value="3. Classification"/>
-      <column name="CLASSIFICATIONTYPE" value="SALESPROJ"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONTYPEID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/>
       <column name="SCORETYPE" value="ScoreDepartment"/>
     </insert>
     <insert tableName="classificationtype">
-      <column name="CLASSIFICATIONGROUP" value="1. Classification"/>
-      <column name="CLASSIFICATIONTYPE" value="SALESPROJ"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONTYPEID" value="382b311e-b2b2-49da-b6e1-339afae92657"/>
       <column name="SCORETYPE" value="ScoreUsers"/>
     </insert>
     <insert tableName="classificationtype">
-      <column name="CLASSIFICATIONGROUP" value="1. Classification"/>
-      <column name="CLASSIFICATIONTYPE" value="SALESPROJ"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONTYPEID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/>
       <column name="SCORETYPE" value="ScoreBranch"/>
     </insert>
     <insert tableName="classificationtype">
-      <column name="CLASSIFICATIONGROUP" value="1. Classification"/>
-      <column name="CLASSIFICATIONTYPE" value="SALESPROJ"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONTYPEID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/>
       <column name="SCORETYPE" value="ScoreBased"/>
     </insert>
     <insert tableName="classificationtype">
-      <column name="CLASSIFICATIONGROUP" value="3. Classification"/>
-      <column name="CLASSIFICATIONTYPE" value="SALESPROJ"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONTYPEID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/>
       <column name="SCORETYPE" value="ScoreDecisionPhase"/>
     </insert>
     <insert tableName="classificationtype">
-      <column name="CLASSIFICATIONGROUP" value="3. Classification"/>
-      <column name="CLASSIFICATIONTYPE" value="SALESPROJ"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONTYPEID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/>
       <column name="SCORETYPE" value="ScoreCloud"/>
     </insert>
     <insert tableName="classificationtype">
-      <column name="CLASSIFICATIONGROUP" value="3. Classification"/>
-      <column name="CLASSIFICATIONTYPE" value="SALESPROJ"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONTYPEID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/>
       <column name="SCORETYPE" value="ScorePosition"/>
     </insert>
     <insert tableName="classificationtype">
-      <column name="CLASSIFICATIONGROUP" value="2. Classification"/>
-      <column name="CLASSIFICATIONTYPE" value="SALESPROJ"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="b2126d9d-8d18-46d4-a48f-1a03fc456ddd"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONTYPEID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/>
       <column name="SCORETYPE" value="ScoreBudget"/>
     </insert>
     <insert tableName="classificationtype">
-      <column name="CLASSIFICATIONGROUP" value="3. Classification"/>
-      <column name="CLASSIFICATIONTYPE" value="SALESPROJ"/>
+      <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/>
+      <column name="OBJECT_TYPE" value="Salesproject"/>
       <column name="CLASSIFICATIONTYPEID" value="f4d3791e-1717-4473-987b-0cd751805387"/>
       <column name="SCORETYPE" value="ScoreProjectStart"/>
     </insert>
     
     <insert tableName="CLASSIFICATIONTYPE">
-        <column name="CLASSIFICATIONGROUP" value="1. Target group"/>
-        <column name="CLASSIFICATIONTYPE" value="ORGANISATION"/>
+        <column name="CLASSIFICATIONGROUP_ID" value="e3b0a84f-d2a7-4d7c-b734-82ab4b262e84"/>
+        <column name="OBJECT_TYPE" value="Organisation"/>
         <column name="CLASSIFICATIONTYPEID" value="4b72857e-863d-4254-accf-25281bb7bb64"/>
         <column name="SCORETYPE" value="Number of employees"/>
         </insert>
         <insert tableName="CLASSIFICATIONTYPE">
-        <column name="CLASSIFICATIONGROUP" value="1. Target group"/>
-        <column name="CLASSIFICATIONTYPE" value="ORGANISATION"/>
+        <column name="CLASSIFICATIONGROUP_ID" value="e3b0a84f-d2a7-4d7c-b734-82ab4b262e84"/>
+        <column name="OBJECT_TYPE" value="Organisation"/>
         <column name="CLASSIFICATIONTYPEID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/>
         <column name="SCORETYPE" value="Product preference"/>
         </insert>
         <insert tableName="CLASSIFICATIONTYPE">
-        <column name="CLASSIFICATIONGROUP" value="1. Target group"/>
-        <column name="CLASSIFICATIONTYPE" value="ORGANISATION"/>
+        <column name="CLASSIFICATIONGROUP_ID" value="e3b0a84f-d2a7-4d7c-b734-82ab4b262e84"/>
+        <column name="OBJECT_TYPE" value="Organisation"/>
         <column name="CLASSIFICATIONTYPEID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/>
         <column name="SCORETYPE" value="Headquarters"/>
         </insert>
         <insert tableName="CLASSIFICATIONTYPE">
-        <column name="CLASSIFICATIONGROUP" value="1. Target group"/>
-        <column name="CLASSIFICATIONTYPE" value="ORGANISATION"/>
+        <column name="CLASSIFICATIONGROUP_ID" value="e3b0a84f-d2a7-4d7c-b734-82ab4b262e84"/>
+        <column name="OBJECT_TYPE" value="Organisation"/>
         <column name="CLASSIFICATIONTYPEID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/>
         <column name="SCORETYPE" value="Industry"/>
         </insert>
         <insert tableName="CLASSIFICATIONTYPE">
-        <column name="CLASSIFICATIONGROUP" value="2. Customer value"/>
-        <column name="CLASSIFICATIONTYPE" value="ORGANISATION"/>
+        <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/>
+        <column name="OBJECT_TYPE" value="Organisation"/>
         <column name="CLASSIFICATIONTYPEID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/>
         <column name="SCORETYPE" value="Creditworthiness"/>
         </insert>
         <insert tableName="CLASSIFICATIONTYPE">
-        <column name="CLASSIFICATIONGROUP" value="2. Customer value"/>
-        <column name="CLASSIFICATIONTYPE" value="ORGANISATION"/>
+        <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/>
+        <column name="OBJECT_TYPE" value="Organisation"/>
         <column name="CLASSIFICATIONTYPEID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/>
         <column name="SCORETYPE" value="Loyalty"/>
         </insert>
         <insert tableName="CLASSIFICATIONTYPE">
-        <column name="CLASSIFICATIONGROUP" value="2. Customer value"/>
-        <column name="CLASSIFICATIONTYPE" value="ORGANISATION"/>
+        <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/>
+        <column name="OBJECT_TYPE" value="Organisation"/>
         <column name="CLASSIFICATIONTYPEID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/>
         <column name="SCORETYPE" value="Purchasing potential p. a."/>
         </insert>
         <insert tableName="CLASSIFICATIONTYPE">
-        <column name="CLASSIFICATIONGROUP" value="2. Customer value"/>
-        <column name="CLASSIFICATIONTYPE" value="ORGANISATION"/>
+        <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/>
+        <column name="OBJECT_TYPE" value="Organisation"/>
         <column name="CLASSIFICATIONTYPEID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/>
         <column name="SCORETYPE" value="Current supply share"/>
         </insert>
         <insert tableName="CLASSIFICATIONTYPE">
-        <column name="CLASSIFICATIONGROUP" value="2. Customer value"/>
-        <column name="CLASSIFICATIONTYPE" value="ORGANISATION"/>
+        <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/>
+        <column name="OBJECT_TYPE" value="Organisation"/>
         <column name="CLASSIFICATIONTYPEID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/>
         <column name="SCORETYPE" value="Business development"/>
         </insert>
-        
   </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/visitplan.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/visitplan.xml
index 88789b1a243c8597ec5c325cb989656794d7d19f..5c29131bd08edb8207a519d7a5ca4b9d2f930ee4 100644
--- a/.liquibase/Data_alias/basic/_demoData/generatedData/visitplan.xml
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/visitplan.xml
@@ -1,7 +1,7 @@
 <?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="62ad16a9-7312-4dda-9e4b-460673b9af82">
-        
+        <!--
         <insert tableName="VISITPLANEMPLOYEEWEEK">
           <column name="VISITPLANEMPLOYEEWEEKID" value="821b3424-b6d2-41f8-b0b2-6a7c2c050214"/>
           <column name="VISITPLAN_YEAR" valueNumeric="2020"/>
@@ -96,6 +96,6 @@
           <column name="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/>
           <column name="INFO" value="Kontrolltermin"/>
         </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 34e089b535a8e2450dda8818ee8c04589a2b7271..4bb598459a46fe027558f6c3c5da8c4e3d392366 100644
--- a/aliasDefinition/Data_alias/Data_alias.aod
+++ b/aliasDefinition/Data_alias/Data_alias.aod
@@ -9424,25 +9424,25 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>CLASSIFICATIONTYPE</name>
+                <name>CLASSIFICATIONGROUP_ID</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="12" />
+                <columnType v="1" />
                 <size v="36" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="false" />
+                <index v="true" />
                 <documentation></documentation>
                 <title></title>
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>CLASSIFICATIONGROUP</name>
+                <name>OBJECT_TYPE</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="12" />
-                <size v="80" />
+                <size v="36" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -14987,25 +14987,163 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>CLASSIFICATIONTYPE_GROUP</name>
+                <name>GRADING</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="1" />
+                <size v="1" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MAXGRADEFORSCORE</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>
+              <entityFieldDb>
+                <name>CLASSIFICATIONGROUP_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>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>CLASSIFICATIONSTORAGE</name>
+            <dbName></dbName>
+            <idColumn>CLASSIFICATIONSTORAGEID</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>OBJECT_ROWID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
                 <size v="36" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CLASSIFICATIONVALUE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="20" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
                 <title></title>
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>GRADING</name>
+                <name>CLASSIFICATIONSTORAGEID</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>OBJECT_TYPE</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>
+            <name>CLASSIFICATIONGROUP</name>
+            <dbName></dbName>
+            <idColumn>CLASSIFICATIONGROUPID</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>CLASSIFICATIONGROUPID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
                 <columnType v="1" />
-                <size 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>SORTING</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -15015,11 +15153,11 @@
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
-                <name>MAXGRADEFORSCORE</name>
+                <name>TITLE</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="4" />
-                <size v="10" />
+                <columnType v="12" />
+                <size v="36" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
diff --git a/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod b/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod
index b974517f78bbbf2b848fb0c49c12dec9b0e0c9b4..2ceed05d81c4a6e9e8c9a6c4e5376d38b040f6eb 100644
--- a/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod
+++ b/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod
@@ -5,14 +5,16 @@
   <documentation>%aditoprj%/entity/ClassificationAdmin_entity/documentation.adoc</documentation>
   <icon>VAADIN:LIST_OL</icon>
   <title>Classification</title>
+  <grantUpdateProcess>%aditoprj%/entity/ClassificationAdmin_entity/grantUpdateProcess.js</grantUpdateProcess>
   <grantDeleteProcess>%aditoprj%/entity/ClassificationAdmin_entity/grantDeleteProcess.js</grantDeleteProcess>
-  <contentTitleProcess>%aditoprj%/entity/ClassificationAdmin_entity/contentTitleProcess.js</contentTitleProcess>
   <iconId>VAADIN:LIST_OL</iconId>
   <titlePlural>Classifications</titlePlural>
-  <recordContainer>db</recordContainer>
+  <recordContainer>jDito</recordContainer>
   <entityFields>
     <entityProvider>
       <name>#PROVIDER</name>
+      <targetContextField>TARGET_CONTEXT</targetContextField>
+      <targetIdField>TARGET_ID</targetIdField>
     </entityProvider>
     <entityParameter>
       <name>ClassificationType_param</name>
@@ -34,128 +36,130 @@
     </entityParameter>
     <entityField>
       <name>CLASSIFICATIONTYPEID</name>
+      <title>Indicator</title>
+      <mandatory v="true" />
+      <stateProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationtypeid/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationtypeid/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationtypeid/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
       <name>CLASSIFICATIONGROUP</name>
-      <title>Group</title>
+      <title>Classification</title>
       <contentType>TEXT</contentType>
       <groupable v="true" />
-      <mandatoryProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationgroup/mandatoryProcess.js</mandatoryProcess>
+      <mandatory v="true" />
       <dropDownProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationgroup/dropDownProcess.js</dropDownProcess>
       <textInputAllowed v="true" />
-      <titleProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationgroup/titleProcess.js</titleProcess>
       <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationgroup/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationgroup/displayValueProcess.js</displayValueProcess>
-      <onValidation>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationgroup/onValidation.js</onValidation>
     </entityField>
-    <entityConsumer>
-      <name>KeywordClassificationTypes</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>ContainerName_param</name>
-          <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/keywordclassificationtypes/children/containername_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>ClassificationScores</name>
-      <state>EDITABLE</state>
-      <dependency>
-        <name>dependency</name>
-        <entityName>ClassificationScore_entity</entityName>
-        <fieldName>ClassificationScores</fieldName>
-      </dependency>
+    <entityParameter>
+      <name>group_param</name>
+      <expose v="true" />
+      <mandatory v="true" />
+    </entityParameter>
+    <entityField>
+      <name>CLASSIFICATION_PARENT_ID</name>
+    </entityField>
+    <entityField>
+      <name>UID</name>
+      <linkedContextProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/uid/linkedContextProcess.js</linkedContextProcess>
+    </entityField>
+    <entityField>
+      <name>OBJECT_TYPE</name>
+      <title>Place Of Use</title>
+      <mandatory v="true" />
+      <dropDownProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/object_type/dropDownProcess.js</dropDownProcess>
+      <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/object_type/valueProcess.js</valueProcess>
+      <onValueChange>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/object_type/onValueChange.js</onValueChange>
+      <onValueChangeTypes>
+        <element>MASK</element>
+      </onValueChangeTypes>
+    </entityField>
+    <entityField>
+      <name>TARGET_CONTEXT</name>
+      <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/target_context/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>TARGET_ID</name>
+      <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/target_id/valueProcess.js</valueProcess>
+    </entityField>
+    <entityActionGroup>
+      <name>FilterviewActionGroup</name>
       <children>
-        <entityParameter>
-          <name>ClassificationGroup_param</name>
-          <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationscores/children/classificationgroup_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>ClassificationTypeId_param</name>
-          <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationscores/children/classificationtypeid_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>ClassificationType_param</name>
-          <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationscores/children/classificationtype_param/valueProcess.js</valueProcess>
-        </entityParameter>
+        <entityActionField>
+          <name>UpdateClassification</name>
+          <title>Recalculate all Classifications</title>
+          <onActionProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateclassification/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:AUTOMATION</iconId>
+        </entityActionField>
       </children>
-    </entityConsumer>
+    </entityActionGroup>
     <entityField>
-      <name>CLASSIFICATIONTYPE</name>
-      <title>Usage</title>
-      <consumer>KeywordClassificationTypes</consumer>
-      <groupable v="true" />
+      <name>SORTING</name>
+      <title>Sorting</title>
+      <contentType>NUMBER</contentType>
       <mandatory v="true" />
-      <stateProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationtype/stateProcess.js</stateProcess>
-      <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationtype/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationtype/displayValueProcess.js</displayValueProcess>
+      <stateProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/sorting/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/sorting/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
-      <name>SCORETYPE</name>
-      <title>Scoretype</title>
+      <name>CLASSIFICATIONTYPEIDDISPLAYVALUE</name>
+      <title>Indicator</title>
       <mandatory v="true" />
-      <displayValueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/scoretype/displayValueProcess.js</displayValueProcess>
+      <stateProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationtypeiddisplayvalue/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationtypeiddisplayvalue/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>recordCategory</name>
+      <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/recordcategory/valueProcess.js</valueProcess>
     </entityField>
-    <entityConsumer>
-      <name>ClassificationGradings</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>ClassificationGrading_entity</entityName>
-        <fieldName>ClassificationGradings</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>ClassificationTypeId_param</name>
-          <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationgradings/children/classificationtypeid_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
-    <entityParameter>
-      <name>group_param</name>
-      <expose v="true" />
-    </entityParameter>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
     </entityProvider>
   </entityFields>
   <recordContainers>
-    <dbRecordContainer>
-      <name>db</name>
-      <alias>Data_alias</alias>
-      <orderClauseProcess>%aditoprj%/entity/ClassificationAdmin_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
-      <linkInformation>
-        <linkInformation>
-          <name>2f70bf47-42e3-40a2-b076-0da34cfb80d9</name>
-          <tableName>CLASSIFICATIONTYPE</tableName>
-          <primaryKey>CLASSIFICATIONTYPEID</primaryKey>
-          <isUIDTable v="true" />
-          <readonly v="false" />
-        </linkInformation>
-      </linkInformation>
+    <jDitoRecordContainer>
+      <name>jDito</name>
+      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
+      <contentProcess>%aditoprj%/entity/ClassificationAdmin_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
+      <hasDependentRecords v="false" />
+      <onInsert>%aditoprj%/entity/ClassificationAdmin_entity/recordcontainers/jdito/onInsert.js</onInsert>
+      <onUpdate>%aditoprj%/entity/ClassificationAdmin_entity/recordcontainers/jdito/onUpdate.js</onUpdate>
+      <onDelete>%aditoprj%/entity/ClassificationAdmin_entity/recordcontainers/jdito/onDelete.js</onDelete>
       <recordFieldMappings>
-        <dbRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>UID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>CLASSIFICATION_PARENT_ID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
           <name>CLASSIFICATIONGROUP.value</name>
-          <recordfield>CLASSIFICATIONTYPE.CLASSIFICATIONGROUP</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>SCORETYPE.value</name>
-          <recordfield>CLASSIFICATIONTYPE.SCORETYPE</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>CLASSIFICATIONTYPE.value</name>
-          <recordfield>CLASSIFICATIONTYPE.CLASSIFICATIONTYPE</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>CLASSIFICATIONGROUP.displayValue</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
           <name>CLASSIFICATIONTYPEID.value</name>
-          <recordfield>CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID</recordfield>
-        </dbRecordFieldMapping>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>CLASSIFICATIONTYPEID.displayValue</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>OBJECT_TYPE.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>OBJECT_TYPE.displayValue</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>SORTING.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>recordCategory.value</name>
+        </jDitoRecordFieldMapping>
       </recordFieldMappings>
-    </dbRecordContainer>
+    </jDitoRecordContainer>
   </recordContainers>
 </entity>
diff --git a/entity/ClassificationAdmin_entity/contentTitleProcess.js b/entity/ClassificationAdmin_entity/contentTitleProcess.js
deleted file mode 100644
index 2031cfeaec00a131c455e4152bb6917b74d6e85f..0000000000000000000000000000000000000000
--- a/entity/ClassificationAdmin_entity/contentTitleProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.vars");
-import("system.result");
-
-result.string(vars.get("$field.CLASSIFICATIONTYPE.displayValue"))
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/documentation.adoc b/entity/ClassificationAdmin_entity/documentation.adoc
index f54fafb3971823af90b05751146b05b0840ba92e..390fb4c5dca8e222225334788788753279bc5d4b 100644
--- a/entity/ClassificationAdmin_entity/documentation.adoc
+++ b/entity/ClassificationAdmin_entity/documentation.adoc
@@ -1,3 +1,75 @@
 = ClassificationAdmin_entity
 
-The administrative representation of the classification which is used among other things in the sales project (see also Classification_entity)
\ No newline at end of file
+Definition:
+
+    The administrative representation of the classification which is used among other things in the sales project and organisation (see also Classification_entity)
+    The classification can be dynamically configured at runtime.
+
+Purpose:
+
+    This Entity gives the administrators an easy way to change the classification.
+    Classifications get stored in the Classification table with their own uid, the ids of the classification type, classification score, object_rowId and object_type.
+
+    This entity displays the classifications (classificationGroup) and indicators (classificationType) grouped with the usage (object_type) in an treetable.
+    with the usage (object_type) as the first group, followed by the classifications (classificationgroup) of that group and it's indicators.
+    The grading of the classification can be changed in the preview of an classification.
+    The possible values of an indicator can be changed when opening the preview of the indicator.
+
+    TreeTable Example: 
+
+        USAGE           CLASSIFICATION      INDICATOR
+        Organisation
+                        1. Target Group     
+                                            Industry
+                                            Headquarters
+                                            Product preference
+                        2. Customer value   
+        Salesproject    
+                        1. Classification
+                        2. Classification
+                        3. Classification
+
+Particularities:
+    
+    The classification gets updated via the "updateClassifications_serverProcess", which runs periodically, 
+    you can also start it manually using the action of this entity (currently invisible).
+
+    The Classification consists of the following entities:
+    Classification_entity,
+    ClassificationAdmin_entity,
+    ClassificationGrading_entity,
+    ClassificationGroup_entity,
+    ClassificationScore_entity,
+    ClassificationType_entity
+
+    Our terms in the db and entity structure differ from the technical terms the user gets to see, to make it easier to understand 
+    for the developer that doesn't have the technical know-how:
+
+    Our term:               Technical term:                 Example:
+    Object_Type             Usage                           Organisation
+    ClassificationGroup     Classification                  1. Target Group
+    ClassificationType      Indicator                       Industry
+    ClassificationScore     (Possible-)Value/Selection      Service
+
+Adding the classification to other modules:
+
+    The Classification is only implemented for Organisation and Salesproject at the moment but can easily be used in other modules aswell by doing the following:
+
+    Add the Consumers "Classifications" and "ClassificationGroups" to the module you want to add the classification functionality 
+    and configure them the same way as in organisation and salesproject.
+    If you want to also have the classification in the preview and Filterview you also have to add the field "CLASSIFICATIONSTORAGE_ID" 
+    and configure the following things:
+        -add CLASSIFICATIONSTORAGE at the Linkinformation of the recordContainer (Primary key: CLASSIFICATIONSTORAGEID, UID Table: false, Read only: true)
+        -add the left join in the fromClauseProcess to CLASSIFICATIONSTORAGE using CLASSIFICATIONSTORAGE.OBJECT_ROWID = TableName.TableUid 
+        -add the recordfieldmapping to the field (CLASSIFICATIONSTORAGE.CLASSIFICATIONSTORAGEID)
+        -add the CLASSIFICATIONSTORAGE_ID to the Filterview and Preview
+    Add the reference to the ClassificationView to the Mainview Context (see als organsiation and salesproject) 
+
+    Extend the Keywordregistry and the classificationTypes in AB_KEYWORD_ENTRY by the new Module you are implementing the classification for.
+    Also extend the CLASSIFICATIONADMIN_entity.CLASSIFICATIONTYPEPLACEOFUSE DropDownProcess.
+    Add ClassificationUtils.insertEmptyClassification() with the Uid und vars.get("$sys.currentcontextname") to the onInsert of the Module 
+    and also add the delete conditon to the onDelete (newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", eigeneUid).deleteData();)
+    !Important: if you are adding or deleting these datasets you always have to also insert/delete the dataset into CLASSIFICATIONSTORAGE entry,
+     so add the above mentioned delete condition and onInsertFunction to all actions that delete/create those datasets.!
+
+    Now you can either configure your classifications in the client or via liquibase
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationgradings/children/classificationtypeid_param/valueProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationgradings/children/classificationtypeid_param/valueProcess.js
deleted file mode 100644
index 199c2e918d4673239e59167d4b95f64bbe9a3331..0000000000000000000000000000000000000000
--- a/entity/ClassificationAdmin_entity/entityfields/classificationgradings/children/classificationtypeid_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.vars");
-import("system.result");
-
-result.string(vars.get("$field.CLASSIFICATIONGROUP"));
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationgroup/displayValueProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationgroup/displayValueProcess.js
index 4fb0aeb79a76fae66af37083cc83e38fc26d051e..ebda1413e2f9de5fcc2e42e7d505fe0ac1a1d786 100644
--- a/entity/ClassificationAdmin_entity/entityfields/classificationgroup/displayValueProcess.js
+++ b/entity/ClassificationAdmin_entity/entityfields/classificationgroup/displayValueProcess.js
@@ -1,5 +1,9 @@
 import("system.vars");
-import("system.translate");
+import("Context_lib");
 import("system.result");
 
-result.string(translate.text(vars.get("$field.CLASSIFICATIONGROUP")));
\ No newline at end of file
+var groupId = vars.get("$field.CLASSIFICATIONGROUP");
+if(groupId != "" && groupId != undefined)
+    result.string(ContextUtils.loadContentTitle("ClassificationGroup_entity", groupId));
+else
+    result.string("")
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationgroup/dropDownProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationgroup/dropDownProcess.js
index 6c4ff0ba3d89251bc6d64bbce56aed7d53932d33..917fbdf4fd535892b9a297d66d82bd0e16e21c92 100644
--- a/entity/ClassificationAdmin_entity/entityfields/classificationgroup/dropDownProcess.js
+++ b/entity/ClassificationAdmin_entity/entityfields/classificationgroup/dropDownProcess.js
@@ -1,13 +1,16 @@
-import("system.logging");
 import("Classification_lib");
 import("system.neon");
 import("system.vars");
-import("system.db");
 import("system.result");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+//no Translation since the same logic as in the Keywords applies (Admin User is able to change the title)
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
 {
-    var classificationType = vars.get("$field.CLASSIFICATIONTYPE")
-    if (classificationType)
-        result.object(ClassificationUtils.getAllGroups(classificationType, true));
+    var objectType = vars.get("$field.OBJECT_TYPE")
+    if (objectType)
+    {
+        var obj = ClassificationUtils.getAllGroups(objectType);
+        
+        result.object(obj);
+    }
 }
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationgroup/mandatoryProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationgroup/mandatoryProcess.js
deleted file mode 100644
index 7bbc5aa02d8beaf00c4458e4297646209f00ad91..0000000000000000000000000000000000000000
--- a/entity/ClassificationAdmin_entity/entityfields/classificationgroup/mandatoryProcess.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import("system.neon");
-import("system.result");
-import("system.vars");
-
-result.object(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT);
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationgroup/onValidation.js b/entity/ClassificationAdmin_entity/entityfields/classificationgroup/onValidation.js
deleted file mode 100644
index 52077bf9d455c013960c8ec4d139b1fb1be0861b..0000000000000000000000000000000000000000
--- a/entity/ClassificationAdmin_entity/entityfields/classificationgroup/onValidation.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import("system.neon");
-import("system.translate");
-import("system.result");
-import("system.vars");
-import("Classification_lib");
-import("Entity_lib");
-
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
-{
-    var newGroup = vars.get("local.value");
-    
-    // use param if available or current selectionRows
-    var classificationType = ClassificationUtils.getUsageType("$param.ClassificationType_param", "$sys.selectionRows");
-
-    if (classificationType)
-    {    
-        var groups = ClassificationUtils.getAllGroups(classificationType, false)
-
-        if (groups.indexOf(newGroup, 0) != -1 && ClassificationUtils.getGroupFromDb(vars.get("$field.CLASSIFICATIONTYPEID")) != newGroup)
-        {
-            //result.string(translate.text("The new Classification name already exists."));
-        }
-    }
-    else
-    {
-        result.string(translate.text("Could not determine the current Classification type (usage)."));
-    }
-}
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationgroup/titleProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationgroup/titleProcess.js
deleted file mode 100644
index de080516afe4fe1620bf99bbd2dd36fe97d7e62a..0000000000000000000000000000000000000000
--- a/entity/ClassificationAdmin_entity/entityfields/classificationgroup/titleProcess.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import("system.neon");
-import("system.translate");
-import("system.vars");
-import("system.result");
-
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) 
-{
-    result.string(translate.text("Group"));
-}
-else
-{
-    result.string(translate.text("Group name"));
-}
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationgroup/valueProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationgroup/valueProcess.js
index dbfd2f7ec70efe4af8fe07026907e734dec515ae..cffd6f2044378635903b26620a407559cbe19f58 100644
--- a/entity/ClassificationAdmin_entity/entityfields/classificationgroup/valueProcess.js
+++ b/entity/ClassificationAdmin_entity/entityfields/classificationgroup/valueProcess.js
@@ -1,5 +1,34 @@
+import("system.neon");
 import("system.vars");
 import("system.result");
+import("system.text");
+import("Sql_lib");
 
-if(vars.get("$param.group_param"))
-    result.string(vars.get("$param.group_param"));
+if(!vars.get("$this.value") && vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT)
+{
+    var sysSelection = vars.get("$sys.selection");
+    var uid = vars.get("$field.UID");
+    var id;
+    if(sysSelection.length > 0)
+    {
+        var res;
+        var value = vars.get("$field.CLASSIFICATION_PARENT_ID");
+        if(value)
+        {
+            if(value.charAt(0) != ";" && value.charAt(value.length) != ";")
+                id = text.decodeMS(uid)[1];
+            else
+            {
+                decodedIdvalues = text.decodeMS(value);
+                if(decodedIdvalues[0].charAt(0) != ";" && decodedIdvalues[0].charAt(decodedIdvalues[0].length) != ";")
+                    id = text.decodeMS(text.decodeMS(uid)[0])[1];
+            }
+            var classificationGroupId = newSelect("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID")
+                                            .from("CLASSIFICATIONGROUP")
+                                            .where("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID", id)
+                                            .cell();
+
+            result.string(classificationGroupId);
+        }
+    }
+}
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationscores/children/classificationgroup_param/valueProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationscores/children/classificationgroup_param/valueProcess.js
deleted file mode 100644
index 199c2e918d4673239e59167d4b95f64bbe9a3331..0000000000000000000000000000000000000000
--- a/entity/ClassificationAdmin_entity/entityfields/classificationscores/children/classificationgroup_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.vars");
-import("system.result");
-
-result.string(vars.get("$field.CLASSIFICATIONGROUP"));
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationscores/children/classificationtype_param/valueProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationscores/children/classificationtype_param/valueProcess.js
deleted file mode 100644
index d3275a8eaa916bbbb9604617cb2fb5385bc01cfe..0000000000000000000000000000000000000000
--- a/entity/ClassificationAdmin_entity/entityfields/classificationscores/children/classificationtype_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.vars");
-import("system.result");
-
-result.string(vars.get("$field.CLASSIFICATIONTYPE"))
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationtype/displayValueProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationtype/displayValueProcess.js
deleted file mode 100644
index 9a93d9382887643fcc081de68214ba526ed930ac..0000000000000000000000000000000000000000
--- a/entity/ClassificationAdmin_entity/entityfields/classificationtype/displayValueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.result");
-import("system.vars");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
-result.string(KeywordUtils.getViewValue($KeywordRegistry.classificationType(), vars.get("$field.CLASSIFICATIONTYPE")));
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationtype/stateProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationtype/stateProcess.js
deleted file mode 100644
index bcc88cc57c128d8971d6880133fb2584129a802e..0000000000000000000000000000000000000000
--- a/entity/ClassificationAdmin_entity/entityfields/classificationtype/stateProcess.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import("system.result");
-import("system.neon");
-import("system.vars");
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-{
-    result.string(neon.COMPONENTSTATE_EDITABLE);
-}
-else
-{
-    result.string(neon.COMPONENTSTATE_READONLY);
-}
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationtypeid/displayValueProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationtypeid/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b340e81667db36f7dffb5a63892cd49786faba16
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/entityfields/classificationtypeid/displayValueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("Context_lib");
+import("system.result");
+
+result.string(ContextUtils.loadContentTitle("ClassificationType_entity", vars.get("$this.value")));
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationtypeid/stateProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationtypeid/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..04d6ba3c02af036fc51b33769653aaf8c06e1088
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/entityfields/classificationtypeid/stateProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+if(vars.get("$sys.operatingstate") != neon.OPERATINGSTATE_EDIT && vars.get("$sys.operatingstate") != neon.OPERATINGSTATE_NEW)
+    result.string(neon.COMPONENTSTATE_EDITABLE)
+else
+    result.string(neon.COMPONENTSTATE_INVISIBLE)
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationtypeid/valueProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationtypeid/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..97abbd14640708a9dd1004bded626fbd89c6a7d5
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/entityfields/classificationtypeid/valueProcess.js
@@ -0,0 +1,10 @@
+import("system.util");
+import("system.result");
+import("system.neon");
+import("system.vars");
+import("Classification_lib");
+
+if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+    result.string(util.getNewUUID());
+else if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT && !vars.get("$this.value"))
+    result.string($ClassificationPlaceholder.TOPSECRETPLACEHOLDER());
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationtypeiddisplayvalue/stateProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationtypeiddisplayvalue/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9366c2e0e8a8d10e0f2e70beb8f3c82662b588a1
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/entityfields/classificationtypeiddisplayvalue/stateProcess.js
@@ -0,0 +1,12 @@
+import("Classification_lib");
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+if((vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT || vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) 
+        && vars.get("$this.value") != $ClassificationPlaceholder.TOPSECRETPLACEHOLDER())
+{
+    result.string(neon.COMPONENTSTATE_EDITABLE)
+}
+else
+    result.string(neon.COMPONENTSTATE_INVISIBLE)
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationtypeiddisplayvalue/valueProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationtypeiddisplayvalue/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..85208cfbe4e8e978e2a67702710029f6fbb49a71
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/entityfields/classificationtypeiddisplayvalue/valueProcess.js
@@ -0,0 +1,21 @@
+import("system.result");
+import("system.vars");
+import("system.translate");
+import("Sql_lib");
+import("Classification_lib");
+
+var res = vars.get("$this.value");
+if(!res)
+{
+    var classificationTypeId = vars.get("$field.CLASSIFICATIONTYPEID");
+    if(classificationTypeId != $ClassificationPlaceholder.TOPSECRETPLACEHOLDER())
+    {
+        res = newSelect("CLASSIFICATIONTYPE.SCORETYPE")
+                            .from("CLASSIFICATIONTYPE")
+                            .where("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypeId)
+                            .cell();
+    }
+    else
+        res = $ClassificationPlaceholder.TOPSECRETPLACEHOLDER();
+}
+result.string(res);
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateclassification/onActionProcess.js b/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateclassification/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f1a169ba0ebfedb7c8278fc11103f02750888169
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateclassification/onActionProcess.js
@@ -0,0 +1,21 @@
+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 reload all classifications using the current classificationgradings?"), false);
+if(execute)
+{
+    var processConfig = process.createStartAsyncConfig()
+                                                        .setName("updateClassifications_serverProcess")
+                                                        .setUser( vars.get("$sys.user"))
+                                                        .setThreadPriority(process.THREADPRIORITY_LOW)
+                                                        .setTimerType(process.TIMERTYPE_SERVER);
+                                                        
+
+    process.startAsync(processConfig);
+
+    question.showMessage(translate.text("Serverprocess has been started"), question.INFORMATION, translate.text("Classification"));
+}
diff --git a/entity/ClassificationAdmin_entity/entityfields/keywordclassificationtypes/children/containername_param/valueProcess.js b/entity/ClassificationAdmin_entity/entityfields/keywordclassificationtypes/children/containername_param/valueProcess.js
deleted file mode 100644
index b5e82ac38396ff9ccda20b257c1d0820f5294683..0000000000000000000000000000000000000000
--- a/entity/ClassificationAdmin_entity/entityfields/keywordclassificationtypes/children/containername_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.result");
-import("KeywordRegistry_basic")
-
-result.string($KeywordRegistry.classificationType())
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/object_type/dropDownProcess.js b/entity/ClassificationAdmin_entity/entityfields/object_type/dropDownProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..560b0480a1fe6f4ed45d7a8e68a6f4387f1f2178
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/entityfields/object_type/dropDownProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.translate");
+import("Context_lib");
+
+result.object([["Salesproject", ContextUtils.getTitle("Salesproject", true)], 
+                ["Organisation", ContextUtils.getTitle("Organisation", true)]]);
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/object_type/onValueChange.js b/entity/ClassificationAdmin_entity/entityfields/object_type/onValueChange.js
new file mode 100644
index 0000000000000000000000000000000000000000..a2973102df1e5d7e7eb825ed08e9fb82890ef992
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/entityfields/object_type/onValueChange.js
@@ -0,0 +1,4 @@
+import("system.neon");
+
+neon.setFieldValue("$field.CLASSIFICATIONGROUP", "");
+neon.refresh("$field.CLASSIFICATIONGROUP")
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/object_type/valueProcess.js b/entity/ClassificationAdmin_entity/entityfields/object_type/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..66c794c838207d952cf4cbd9bd2a07461762d83e
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/entityfields/object_type/valueProcess.js
@@ -0,0 +1,27 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+import("system.text");
+import("Sql_lib");
+
+if(!vars.get("$this.value") && vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT)
+{
+    var sysSelection = vars.get("$sys.selection");
+    var uid = vars.get("$field.UID");
+    var id;
+    if(sysSelection.length > 0)
+    {
+        var res;
+        var value = vars.get("$field.CLASSIFICATION_PARENT_ID");
+        if(value.charAt(0) != ";" && value.charAt(value.length) != ";")
+            res = text.decodeMS(uid)[0];
+        else
+        {
+            decodedIdvalues = text.decodeMS(value);
+            if(decodedIdvalues[0].charAt(0) != ";" && decodedIdvalues[0].charAt(decodedIdvalues[0].length) != ";")
+                res = text.decodeMS(text.decodeMS(uid)[0])[0];
+        }
+
+        result.string(res);
+    }
+}
diff --git a/entity/ClassificationAdmin_entity/entityfields/recordcategory/valueProcess.js b/entity/ClassificationAdmin_entity/entityfields/recordcategory/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ec5e2a1a830a6627d578f34e9759d0bfd7df9a55
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/entityfields/recordcategory/valueProcess.js
@@ -0,0 +1,34 @@
+import("Classification_lib");
+import("system.util");
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+var res;
+
+if(vars.get("$sys.operatingstate") != neon.OPERATINGSTATE_NEW)
+{
+    if(vars.get("$field.CLASSIFICATIONTYPEID") && vars.get("$field.CLASSIFICATIONTYPEID") != $ClassificationPlaceholder.TOPSECRETPLACEHOLDER())
+    {
+        res = $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_TYPE();
+    }
+    else if(vars.get("$field.CLASSIFICATIONGROUP"))
+    {
+        res = $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP();
+    }
+    else
+    {
+        res = $ClassificationRecordCategories.CLASSIFICATION_OBJECT_TYPE();
+    }
+}
+else if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW)
+{
+    var classificationGroup = vars.get("$field.CLASSIFICATIONGROUP");
+    if(classificationGroup.length == 36 && ((classificationGroup.match(/-/g) || []).length == 4))
+        res = $ClassificationRecordCategories.CLASSIFICATION_GROUP_EXISTS();
+    else
+        res = $ClassificationRecordCategories.CLASSIFICATION_GROUP_EXISTS();
+}
+
+if(res)
+    result.string(res);
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/sorting/stateProcess.js b/entity/ClassificationAdmin_entity/entityfields/sorting/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2cd13f04b8ed1f8cd3f762168f0b3208ada7cf1e
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/entityfields/sorting/stateProcess.js
@@ -0,0 +1,16 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+import("Classification_lib");
+
+var state;
+var recordCategory = vars.get("$field.recordCategory");
+
+if(recordCategory == $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_TYPE())
+    state = neon.COMPONENTSTATE_INVISIBLE;
+else if(recordCategory == $ClassificationRecordCategories.CLASSIFICATION_GROUP_EXISTS())
+    state = neon.COMPONENTSTATE_DISABLED;
+else
+    state = neon.COMPONENTSTATE_EDITABLE;
+    
+result.string(state);
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/sorting/valueProcess.js b/entity/ClassificationAdmin_entity/entityfields/sorting/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..6eaad20db1e0a95b1bfa4842971a4e69a037b151
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/entityfields/sorting/valueProcess.js
@@ -0,0 +1,43 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+import("system.text");
+import("Sql_lib");
+
+if(!vars.get("$this.value"))
+{
+    var sysSelection = vars.get("$sys.selection");
+    var uid = vars.get("$field.UID");
+    var id;
+    if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT )
+    {
+        if(sysSelection.length > 0)
+        {
+            var res;
+            var value = vars.get("$field.CLASSIFICATION_PARENT_ID");
+            if(value)
+            {
+                if(value.charAt(0) != ";" && value.charAt(value.length) != ";")
+                    id = text.decodeMS(uid)[1];
+                else
+                {
+                    decodedIdvalues = text.decodeMS(value);
+                    if(decodedIdvalues[0].charAt(0) != ";" && decodedIdvalues[0].charAt(decodedIdvalues[0].length) != ";")
+                        id = text.decodeMS(text.decodeMS(uid)[0])[1];
+                }
+            }
+        }
+    }
+    else if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW)
+        id = vars.get("$field.CLASSIFICATIONGROUP");
+        
+    var sorting = newSelect("CLASSIFICATIONGROUP.SORTING")
+                                .from("CLASSIFICATIONGROUP")
+                                .where("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID", id)
+                                .cell();
+    if(sorting)
+        result.string(sorting);
+    else
+        result.string("1");
+}
+
diff --git a/entity/ClassificationAdmin_entity/entityfields/target_context/valueProcess.js b/entity/ClassificationAdmin_entity/entityfields/target_context/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..163b952b7230f5054874557333c9639947c0a158
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/entityfields/target_context/valueProcess.js
@@ -0,0 +1,16 @@
+import("system.neon");
+import("Classification_lib");
+import("system.result");
+import("system.vars");
+
+var sysSelection = vars.get("$sys.selection");
+
+if(sysSelection.length > 0)
+{
+    var value = vars.get("$field.CLASSIFICATION_PARENT_ID");
+    
+    res = ClassificationUtils.decode(value)
+    if(res)
+        result.string(res);
+}
+
diff --git a/entity/ClassificationAdmin_entity/entityfields/target_id/valueProcess.js b/entity/ClassificationAdmin_entity/entityfields/target_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b6727d8fca61a92e76b5c7332d494e2ad00797ba
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/entityfields/target_id/valueProcess.js
@@ -0,0 +1,28 @@
+import("system.neon");
+import("system.result");
+import("system.text");
+import("system.vars");
+import("Classification_lib");
+
+if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_VIEW)
+{
+    var recordCategory = vars.get("$field.recordCategory");
+    var sysSelection = vars.get("$sys.selection");
+    if(sysSelection.length > 0)
+    {
+        var res;
+        switch(recordCategory) 
+        {
+            case $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP():
+              res = vars.get("$field.CLASSIFICATIONGROUP");
+              break;
+            case $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_TYPE():
+              res = vars.get("$field.CLASSIFICATIONTYPEID");
+              break;
+            default:
+              break;
+        }
+        if(res)
+            result.string(res);
+    }
+}
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/uid/linkedContextProcess.js b/entity/ClassificationAdmin_entity/entityfields/uid/linkedContextProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7f329d1a50578f9ffb0d21a71b95493888ca0e9f
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/entityfields/uid/linkedContextProcess.js
@@ -0,0 +1,24 @@
+//import("system.neon");
+//import("system.text");
+//import("system.vars");
+//import("system.result");
+//import("system.logging");
+//
+//var value = vars.get("$this.value");
+//
+//if(value)
+//{
+//    var res;
+//    if(value.charAt(0) != ";" && value.charAt(value.length) != ";")
+//        res = "ClassificationGroup";
+//    else
+//    {
+//        decodedIdvalues = text.decodeMS(value);
+//        if(decodedIdvalues[0].charAt(0) != ";" && decodedIdvalues[0].charAt(decodedIdvalues[0].length) != ";")
+//            res = "ClassificationGrading";
+//        else
+//            res = "ClassificationScore";
+//    }
+//    neon.setFieldValue("$field.TARGET_CONTEXT" , res)
+//    logging.log(res)
+//}
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/grantDeleteProcess.js b/entity/ClassificationAdmin_entity/grantDeleteProcess.js
index 4e17fa5f17ffabc50c3fdc60bf6e268c36233869..8cec1516432afced32ec5a217377b69e2507f93e 100644
--- a/entity/ClassificationAdmin_entity/grantDeleteProcess.js
+++ b/entity/ClassificationAdmin_entity/grantDeleteProcess.js
@@ -1,11 +1,9 @@
 import("system.result");
-import("system.db");
 import("system.vars");
-import("Sql_lib");
+import("Classification_lib");
 
-var count = newSelect("count(*)")
-                .from("CLASSIFICATION")
-                .whereIfSet("CLASSIFICATION.CLASSIFICATIONTYPE_ID", "$field.CLASSIFICATIONTYPEID")
-                .cell(true, "0");
-
-result.object(parseInt(count) <= 0);
\ No newline at end of file
+var recordCategory = vars.get("$field.recordCategory");
+if(recordCategory != $ClassificationRecordCategories.CLASSIFICATION_OBJECT_TYPE())
+    result.string(true);
+else
+    result.string(false);
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/grantUpdateProcess.js b/entity/ClassificationAdmin_entity/grantUpdateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8cec1516432afced32ec5a217377b69e2507f93e
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/grantUpdateProcess.js
@@ -0,0 +1,9 @@
+import("system.result");
+import("system.vars");
+import("Classification_lib");
+
+var recordCategory = vars.get("$field.recordCategory");
+if(recordCategory != $ClassificationRecordCategories.CLASSIFICATION_OBJECT_TYPE())
+    result.string(true);
+else
+    result.string(false);
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/recordcontainers/db/orderClauseProcess.js b/entity/ClassificationAdmin_entity/recordcontainers/db/orderClauseProcess.js
deleted file mode 100644
index 519d6f1ab431849ac7f43915cf1e4a5756e1f193..0000000000000000000000000000000000000000
--- a/entity/ClassificationAdmin_entity/recordcontainers/db/orderClauseProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.result");
-import("system.db");
-
-result.object({
-    "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP": db.ASCENDING
-})
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/recordcontainers/jdito/contentProcess.js b/entity/ClassificationAdmin_entity/recordcontainers/jdito/contentProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..62e3899f1be13fb9086e3539720f58b0a177adc3
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/recordcontainers/jdito/contentProcess.js
@@ -0,0 +1,81 @@
+import("Classification_lib");
+import("Sql_lib");
+import("system.result");
+import("system.text");
+import("system.translate");
+import("system.util");
+import("system.vars");
+
+var idvalues = vars.get("$local.idvalues");
+var decodedIdvalues;
+var res = [];
+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()])
+    else
+    {
+        decodedIdvalues = text.decodeMS(idvalues[0]);
+        if(decodedIdvalues[0].charAt(0) != ";" && decodedIdvalues[0].charAt(decodedIdvalues[0].length) != ";")
+        {
+            var groupName = newSelect("CLASSIFICATIONGROUP.TITLE")
+                                    .from("CLASSIFICATIONGROUP")
+                                    .where("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID", decodedIdvalues[1])
+                                    .cell();
+            res.push([idvalues[0], decodedIdvalues[0], decodedIdvalues[1], translate.text(groupName), "", "", "", 
+                "", "", $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP()]);
+        }
+        
+        else
+        {
+            var scoreType = newSelect("CLASSIFICATIONTYPE.SCORETYPE")
+                                    .from("CLASSIFICATIONTYPE")
+                                    .where("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", decodedIdvalues[1])
+                                    .orderBy("CLASSIFICATIONTYPE.SCORETYPE")
+                                    .cell();
+            res.push([idvalues[0], decodedIdvalues[0], "", "",decodedIdvalues[1], translate.text(scoreType), 
+                "", "","", $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_TYPE()]);
+        }
+    }
+}
+else
+{
+    var savedData = {};
+    var classificationData = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, \n\
+                                            CLASSIFICATIONGROUP.TITLE, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID,  CLASSIFICATIONTYPE.SCORETYPE")
+                                            .from("CLASSIFICATIONGROUP")
+                                            .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID")
+                                            .orderBy("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.SORTING")
+                                            .table()
+                                            
+    var objectType, classificationGroupId, classificationGroupName, classificationTypeId, classificationScoreType, uidClassificationGroup, uidClassificationType;
+    for (let  i = 0; i < classificationData.length; i++) 
+        {
+        [objectType, classificationGroupId, classificationGroupName, classificationTypeId, classificationScoreType] = classificationData[i];
+                
+        uidClassificationGroup = text.encodeMS([objectType, classificationGroupId]);
+        uidClassificationType = text.encodeMS([uidClassificationGroup, classificationTypeId]);
+        
+        
+        if(!savedData.hasOwnProperty(classificationData[i][0])) //objectType
+        { 
+            res.push([objectType, "", "", "", "", "", objectType, translate.text(objectType), 
+                "", $ClassificationRecordCategories.CLASSIFICATION_OBJECT_TYPE()]);
+            savedData[classificationData[i][0]] = "";
+        }
+        if(!savedData.hasOwnProperty(classificationData[i][1])) //classificationGroup
+        {
+            res.push([uidClassificationGroup, objectType, classificationGroupId, translate.text(classificationGroupName), "", "", "",
+                "", "", $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP()]);
+            savedData[classificationData[i][1]] = "";
+        }
+        if(!savedData.hasOwnProperty(classificationData[i][3])) //classificationType
+        {
+            res.push([uidClassificationType, uidClassificationGroup, "", "", classificationTypeId, translate.text(classificationScoreType), 
+                "", "", "", $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_TYPE()]);
+            savedData[classificationData[i][3]] = "";
+        }
+    }
+}
+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
new file mode 100644
index 0000000000000000000000000000000000000000..b0b953dde1e57131c6c8c5eade9b4d7d9fdada09
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onDelete.js
@@ -0,0 +1,78 @@
+import("system.entities");
+import("Classification_lib");
+import("Sql_lib");
+import("system.util");
+import("system.db");
+import("system.vars");
+
+try
+{
+    _delete();
+}
+finally //always make sure that the cache is as valid as possible
+{
+    //ClassificationType_entity accesses the CLASSIFICATIONSCORE (max value of scores) so we need to update the cache to prevent inconsesty
+    entities.invalidateCache("ClassificationType_entity", "db");
+    //dependecies are deleted so the cache needs to be updated
+    entities.invalidateCache("ClassificationGrading_entity", "db");
+    entities.invalidateCache("ClassificationGroup_entity", "db");
+    entities.invalidateCache("ClassificationScore_entity", "db");
+}
+
+//private helper function for better code readability
+function _delete()
+{
+    var rowData = vars.get("$local.rowdata");
+    var groupID;
+    var groupValue = rowData["CLASSIFICATIONGROUP.value"];
+    var classificationType = rowData["CLASSIFICATIONTYPEID.value"];
+    var objectType = rowData["OBJECT_TYPE.value"];
+    var table;
+    var columns;
+    var values;
+    var classificationGroup = rowData["CLASSIFICATIONGROUP.value"];
+    var recordCategory = rowData["recordCategory.value"];
+
+
+    if(recordCategory == $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_TYPE()) // the deleted dataset must be an classificationType
+    {
+        classificationGroup = ClassificationUtils.getClassificationGroup(classificationType); //get the group before deleting the classificationtype dataset
+        newWhere("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID", classificationType).deleteData(); //deletes the classificationscores that are linked to the classificationtype
+        newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationType).deleteData(); //deletes the classificationtype
+        newWhere("CLASSIFICATION.CLASSIFICATIONTYPE_ID", classificationType).deleteData(); //deletes all the classifications
+    
+        var gradingTable = ClassificationUtils.getGradingTableByGroupId(classificationGroup); 
+
+        var maxScore = ClassificationUtils.getMaxScore(classificationGroup) //important to do this AFTER deleting the classificationscores to get the new value
+
+        if(gradingTable[0][1] != maxScore)
+        {
+            var column = ["MAXGRADEFORSCORE"];
+            table = ["CLASSIFICATIONGRADING"];
+            var multiplicand = maxScore/gradingTable[0][1];
+            var update = newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID", gradingTable[0][0])
+            .updateData(true, table, column,  db.getColumnTypes("CLASSIFICATIONGRADING", column, db.getCurrentAlias()), [maxScore]);
+
+            for (let i = 1; i < gradingTable.length; i++) 
+            {
+                update = newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID", gradingTable[i][0])
+                .updateData(true, table, column,  db.getColumnTypes("CLASSIFICATIONGRADING", column, db.getCurrentAlias()), [parseInt(gradingTable[i][1] * multiplicand)]);
+            }
+        }
+    }
+
+    else if(recordCategory == $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP()) //the deleted dataset must be an classificationGroup
+    {
+        var classificationTypes = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID")
+        .from("CLASSIFICATIONTYPE")
+        .where("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", classificationGroup)
+                                            
+        //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"); 
+        classificationTypes.deleteData(true, "CLASSIFICATIONTYPE"); 
+    
+        newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGROUP_ID", classificationGroup).deleteData(); 
+        newWhere("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID", classificationGroup).deleteData(); 
+    }
+}
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/recordcontainers/jdito/onInsert.js b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onInsert.js
new file mode 100644
index 0000000000000000000000000000000000000000..62d83bc0564f53c4c851555ceaf91d428fe5a234
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onInsert.js
@@ -0,0 +1,78 @@
+import("system.entities");
+import("system.util");
+import("system.db");
+import("system.vars");
+
+try
+{
+    _insert();
+}
+finally //always make sure that the cache is as valid as possible
+{
+    //ClassificationType_entity accesses the CLASSIFICATIONSCORE (max value of scores) so we need to update the cache to prevent inconsesty
+    entities.invalidateCache("ClassificationType_entity", "db");
+    //Grading-values are dependent since they are inserted within this process (maxgrade)
+    entities.invalidateCache("ClassificationGrading_entity", "db");
+    //groups are dependent since they are inserted within this process
+    entities.invalidateCache("ClassificationGroup_entity", "db");
+}
+
+//private helper function for better code readability
+function _insert()
+{
+    var rowData = vars.get("$local.rowdata");
+    var groupID;
+    var groupValue = rowData["CLASSIFICATIONGROUP.value"];
+    if(groupValue.length != 36 && (groupValue.match(/-/g) || []).length != 4) //if classificationGroup is no Id -> insert new group
+    {
+        groupID = util.getNewUUID();
+        var groupValues = [
+            groupValue,
+            groupID,
+            rowData["SORTING.value"]
+        ];
+        
+        var groupColumns = [
+            "TITLE",
+            "CLASSIFICATIONGROUPID",
+            "SORTING"
+        ];
+        
+        db.insertData("CLASSIFICATIONGROUP", groupColumns, null, groupValues);
+        
+        var gradingColumns = [
+            "CLASSIFICATIONGRADINGID",
+            "GRADING",
+            "MAXGRADEFORSCORE",
+            "CLASSIFICATIONGROUP_ID"
+        ];
+        
+        var gradingValues = [
+            util.getNewUUID(),
+            "A",
+            0,
+            groupID
+        ];
+        
+        db.insertData("CLASSIFICATIONGRADING", gradingColumns, null, gradingValues); // insert a "dummy" classificationGradingValue
+    }
+    else{
+        groupID = groupValue; //else the groupValue is the groupId
+    }
+    
+    var typeValues = [
+        vars.get("$field.CLASSIFICATIONTYPEIDDISPLAYVALUE"),
+        util.getNewUUID(),
+        groupID,
+        rowData["OBJECT_TYPE.value"]
+    ]
+    
+    var typeColumns = [
+        "SCORETYPE",
+        "CLASSIFICATIONTYPEID",
+        "CLASSIFICATIONGROUP_ID",
+        "OBJECT_TYPE"
+    ];
+    
+    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
new file mode 100644
index 0000000000000000000000000000000000000000..b5eae575a499261c58669f1e479afebed20e73e4
--- /dev/null
+++ b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onUpdate.js
@@ -0,0 +1,203 @@
+import("system.entities");
+import("system.util");
+import("system.text");
+import("system.neon");
+import("system.db");
+import("Sql_lib");
+import("system.vars");
+import("Classification_lib");
+import("system.eMath");
+
+try
+{
+    _update();
+}
+finally //always make sure that the cache is as valid as possible
+{
+    //ClassificationType_entity accesses the CLASSIFICATIONSCORE (max value of scores) so we need to update the cache to prevent inconsesty
+    entities.invalidateCache("ClassificationType_entity", "db");
+    //Grading-values are dependent since they are modified within this process (maxgrade)
+    entities.invalidateCache("ClassificationGrading_entity", "db");
+    //groups are dependent since they are modified within this process
+    entities.invalidateCache("ClassificationGroup_entity", "db");
+}
+
+//private helper function for better code readability
+function _update()
+{
+    var rowdata = vars.get("$local.rowdata");
+    var uid = vars.get("$field.UID");
+
+    //for changes of the place of use (object_type), group, and title of an scoretpye dataset
+    var dbFields = {
+        "OBJECT_TYPE.value": "OBJECT_TYPE",
+        "CLASSIFICATIONTYPEID.value" : "CLASSIFICATIONTYPEID",
+        "CLASSIFICATIONGROUP.value": "CLASSIFICATIONGROUP_ID",
+        "CLASSIFICATIONTYPEID.displayValue": "SCORETYPE",
+        "SORTING.value": "SORTING",
+        "CLASSIFICATIONTYPEIDDISPLAYVALUE.value": "CLASSIFICATIONTYPEID"
+    };
+
+    var table = "CLASSIFICATIONTYPE";
+    var cond;
+    var values = [];
+    var columns = [];
+
+    var i;
+    var isGroupDataSet = false;
+    if(rowdata["CLASSIFICATIONTYPEID.value"] == $ClassificationPlaceholder.TOPSECRETPLACEHOLDER())
+        isGroupDataSet = true;
+
+
+
+    vars.get("$local.changed").forEach(function (field, i)
+    {
+        var dbField = dbFields[field];
+        if (dbField)
+        {
+            columns[i] = dbField;
+            values[i] = rowdata[field] || "";
+        }
+    });
+
+
+    if(!isGroupDataSet) //-> update the classification type dataset
+    {
+        var groupIds = ClassificationUtils.getAllGroups(vars.get("$field.OBJECT_TYPE"));
+        var newGroupId;
+        var newGroupName;
+        var insertGroup = false;
+        var groupchange = true;
+        var newId;
+        for (i = 0; i < columns.length; i++) {
+            if(columns[i] == "CLASSIFICATIONGROUP_ID")
+            {
+                if(!groupIds.toString().includes(values[i]))
+                {
+                    newGroupName = values[i];
+                    newGroupId = util.getNewUUID();
+                    values[i] = newGroupId;
+                    insertGroup = true;
+                    groupchange = true;
+                }
+                else if(values[i] == text.decodeMS(text.decodeMS(uid)[0])[1])
+                {
+                    groupchange = false;
+                    insertGroup = true;
+                    break;
+                }
+            }
+            else if(columns[i] == "CLASSIFICATIONTYPEID")
+                {
+                    columns.splice(i, 1);
+                    values.splice(i, 1);
+                    i = i-1
+                }
+            else if(columns[i] == "SORTING")
+                {
+                    columns.splice(i, 1);
+                    values.splice(i, 1);
+                    i = i-1
+                }
+        }
+
+
+        if(groupchange == true)
+        {
+            var gradeColumn, gradeTable, multiplicand, update, gradingTable;
+            var oldGroup = ClassificationUtils.getClassificationGroup(text.decodeMS(uid)[1]);
+            var newMax = ClassificationUtils.getMaxScoreExcludeType(oldGroup, text.decodeMS(uid)[1]);
+            gradingTable = ClassificationUtils.getGradingTableByGroupId(oldGroup); 
+            var lostScore = parseInt(newSelect("max(SCORE)").from("CLASSIFICATIONSCORE").where("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID", text.decodeMS(uid)[1]).cell());
+            if(insertGroup)
+            {
+                var maxSorting = newSelect("distinct CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, CLASSIFICATIONGROUP.SORTING")
+                                            .from("CLASSIFICATIONGROUP")
+                                            .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID")
+                                            .where("CLASSIFICATIONTYPE.OBJECT_TYPE", vars.get("$field.OBJECT_TYPE"))
+                                            .orderBy("CLASSIFICATIONGROUP.SORTING desc")
+                                            .table()[0][1];
+                db.insertData("CLASSIFICATIONGROUP", ["CLASSIFICATIONGROUPID", "TITLE", "SORTING"], null, [newGroupId, newGroupName, eMath.addInt(maxSorting, 1)]) //insert the new group
+
+                var gradingColumns = [
+                "CLASSIFICATIONGRADINGID",
+                "GRADING",
+                "MAXGRADEFORSCORE",
+                "CLASSIFICATIONGROUP_ID"
+                ];
+
+                var gradingValues = [
+                util.getNewUUID(),
+                "A",
+                lostScore,
+                newGroupId
+                ];
+
+                db.insertData("CLASSIFICATIONGRADING", gradingColumns, null, gradingValues); // insert a "dummy" classificationGradingValue
+            }
+            else
+            {
+                newId = vars.get("$field.CLASSIFICATIONGROUP");
+                newGradingTable = ClassificationUtils.getGradingTableByGroupId(newId); 
+                newNewMax = eMath.addInt(newMax, lostScore)
+                if(newGradingTable[0][1] != newNewMax) //update existing classificationGrading if the maxValue has changed
+                {
+                    gradeColumn = ["MAXGRADEFORSCORE"];
+                    gradeTable = "CLASSIFICATIONGRADING";
+                    multiplicand = newNewMax/newGradingTable[0][1];
+                    update = newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID", newGradingTable[0][0])
+                                            .updateData(true, gradeTable, gradeColumn,  null, [parseInt(newGradingTable[0][1] * multiplicand)]);
+
+                    for (i = 1; i < newGradingTable.length; i++) 
+                    {
+                        update = newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID", newGradingTable[i][0])
+                                        .updateData(true, gradeTable, gradeColumn,  null, [parseInt(newGradingTable[i][1] * multiplicand)]);
+                    }
+                }
+
+            }
+
+            if(gradingTable[0][1] != newMax) //update old classificationGrading if the maxValue has changed
+            {
+                gradeColumn = ["MAXGRADEFORSCORE"];
+                gradeTable = "CLASSIFICATIONGRADING";
+                multiplicand = newMax/gradingTable[0][1];
+                update = newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID", gradingTable[0][0])
+                                        .updateData(true, gradeTable, gradeColumn,  null, [newMax]);
+
+                for (i = 0; i < gradingTable.length; i++) 
+                {
+                    update = newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID", gradingTable[i][0])
+                                    .updateData(true, gradeTable, gradeColumn,  null, [parseInt(gradingTable[i][1] * multiplicand)]);
+                }
+            }
+        }
+
+
+        cond = newWhereIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID = '" + text.decodeMS(uid)[1] + "'");
+        columns.push("SCORETYPE");
+        values.push(vars.get("$field.CLASSIFICATIONTYPEIDDISPLAYVALUE"));
+        cond.updateData(true, table, columns, null, values);
+    }
+    else //-> update the classification group dataset
+    {
+        var value = vars.get("$field.CLASSIFICATION_PARENT_ID");
+
+        if(value.charAt(0) != ";" && value.charAt(value.length) != ";")
+            id = text.decodeMS(uid)[1];
+
+        var classificationGroupId = newSelect("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID")
+                                                .from("CLASSIFICATIONGROUP")
+                                                .where("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID", id)
+                                                .cell();
+
+        cond = newWhereIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = '" + classificationGroupId + "'");
+
+        var groupTable = "CLASSIFICATIONGROUP";
+        var groupColumns = ["SORTING", "TITLE"];
+        var groupName = rowdata["CLASSIFICATIONGROUP.value"] == classificationGroupId ? rowdata["CLASSIFICATIONGROUP.displayValue"] : rowdata["CLASSIFICATIONGROUP.value"];
+        var groupValues = [vars.get("$field.SORTING"), groupName];
+        var groupCond = newWhereIfSet("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID = '" + classificationGroupId + "'");
+        groupCond.updateData(true, groupTable, groupColumns, null, groupValues);
+    }
+}
\ No newline at end of file
diff --git a/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod b/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod
index 891ee3d61304929d1c65bf1b23eb5ca25c916d43..e82162ec53830890f0318084f9f519df8e11eb08 100644
--- a/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod
+++ b/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod
@@ -20,8 +20,7 @@
     </entityField>
     <entityField>
       <name>MAXGRADEFORSCORE</name>
-      <documentation>%aditoprj%/entity/ClassificationGrading_entity/entityfields/maxgradeforscore/documentation.adoc</documentation>
-      <title>Till Score</title>
+      <title>Max Value</title>
       <contentType>NUMBER</contentType>
       <outputFormat>#####</outputFormat>
       <inputFormat>#####</inputFormat>
@@ -29,9 +28,9 @@
       <onValidation>%aditoprj%/entity/ClassificationGrading_entity/entityfields/maxgradeforscore/onValidation.js</onValidation>
     </entityField>
     <entityField>
-      <name>CLASSIFICATIONTYPE_GROUP</name>
-      <title>Group</title>
-      <valueProcess>%aditoprj%/entity/ClassificationGrading_entity/entityfields/classificationtype_group/valueProcess.js</valueProcess>
+      <name>CLASSIFICATIONGROUP_ID</name>
+      <title>Classification</title>
+      <valueProcess>%aditoprj%/entity/ClassificationGrading_entity/entityfields/classificationgroup_id/valueProcess.js</valueProcess>
     </entityField>
     <entityParameter>
       <name>ClassificationTypeId_param</name>
@@ -42,8 +41,8 @@
       <documentation>%aditoprj%/entity/ClassificationGrading_entity/entityfields/classificationgradings/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
-          <name>31a0ee6d-b6e3-4a7c-82a7-598c9a12c4aa</name>
-          <entityName>ClassificationAdmin_entity</entityName>
+          <name>e0c6b86e-dcc1-43e1-9581-2b10c5c3d0cd</name>
+          <entityName>ClassificationGroup_entity</entityName>
           <fieldName>ClassificationGradings</fieldName>
           <isConsumer v="false" />
         </entityDependency>
@@ -65,8 +64,11 @@
     <dbRecordContainer>
       <name>db</name>
       <alias>Data_alias</alias>
+      <isPageable v="false" />
       <conditionProcess>%aditoprj%/entity/ClassificationGrading_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
       <orderClauseProcess>%aditoprj%/entity/ClassificationGrading_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
+      <cacheType>GLOBAL</cacheType>
+      <cacheKeyProcess>%aditoprj%/entity/ClassificationGrading_entity/recordcontainers/db/cacheKeyProcess.js</cacheKeyProcess>
       <linkInformation>
         <linkInformation>
           <name>9a9482d5-005a-4dc5-8b58-e07c44420b64</name>
@@ -77,22 +79,22 @@
         </linkInformation>
       </linkInformation>
       <recordFieldMappings>
-        <dbRecordFieldMapping>
-          <name>CLASSIFICATIONTYPE_GROUP.value</name>
-          <recordfield>CLASSIFICATIONGRADING.CLASSIFICATIONTYPE_GROUP</recordfield>
-        </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>MAXGRADEFORSCORE.value</name>
           <recordfield>CLASSIFICATIONGRADING.MAXGRADEFORSCORE</recordfield>
         </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>CLASSIFICATIONGRADINGID.value</name>
-          <recordfield>CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID</recordfield>
-        </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>GRADING.value</name>
           <recordfield>CLASSIFICATIONGRADING.GRADING</recordfield>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CLASSIFICATIONGROUP_ID.value</name>
+          <recordfield>CLASSIFICATIONGRADING.CLASSIFICATIONGROUP_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CLASSIFICATIONGRADINGID.value</name>
+          <recordfield>CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID</recordfield>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
   </recordContainers>
diff --git a/entity/ClassificationGrading_entity/documentation.adoc b/entity/ClassificationGrading_entity/documentation.adoc
index f87c483ab85d928cb87bfc5c3f24aafcadf0376d..faa566900db907439f90781456e63e894d2ccf2d 100644
--- a/entity/ClassificationGrading_entity/documentation.adoc
+++ b/entity/ClassificationGrading_entity/documentation.adoc
@@ -1,3 +1,56 @@
 = ClassificationGrading_entity
 
-This entity is used for storing the classification grading and making it possible for the admin to change the grading of the classification scores.
\ No newline at end of file
+Definition:
+
+    This entity is used for storing the classification grading and making it possible for the admin to change the grading of the clasification (classificationGroup).
+    The classification can be dynamically configured at runtime.
+    (For more information about the classification see also Classification_entity)
+
+Purpose:
+
+    This Entity gives the administrators an easy way to change the classification grading in the preview of classificationAdmin 
+    when selecting a classification (classificationGroup).
+    The classificationgrading gets stored in the table classificationgrading with it's own classificationgradingId, the classificationGroup_id, 
+    the grading (e.g. "A", "B", "C") and the max score you this grade for.
+
+    This entity only has one view: the ClassificationGradingMultipleEdit_view which has both the MaxGradeForScore and the grading column.
+    making it possible for the admin to configure something like this:
+
+    ClassificationAdminPreviewOfClassification Example: 
+
+        USAGE:          Organisation
+        CLASSIFICATION: 1. Target Group
+        SORTING:        1
+         A               100
+         B               75
+         C               50
+         D               25
+
+    --> The Score "72" would lead to the grade "B" (<<<not included in the preview, just for easier understanding of how this works)
+
+Particularities:
+    
+    The MaxGradeForScore of the best possible score (in our example for "A") has to always be the largest possibly achievable value, 
+    otherwise it would lead to errors, which is why this field always get's the maximum value set as default 
+    and it's not possible to save something greater than that (validationProcess).
+    
+    Also, since the indicators under the classification and the possible values of those indicators can be changed:
+    The grading get's updated automatically after changes to the maximum possible value, 
+    using the rule of three (see onInsert-, onUpdate- and onDelete- processes of classificationScore).
+
+    The Classification consists of the following entities:
+    Classification_entity,
+    ClassificationAdmin_entity,
+    ClassificationGrading_entity,
+    ClassificationGroup_entity,
+    ClassificationScore_entity,
+    ClassificationType_entity
+
+    Our terms in the db and entity structure differ from the technical terms the user gets to see, to make it easier to understand 
+    for the developer that doesn't have the technical know-how:
+
+    Our term:               Technical term:                 Example:
+    Object_Type             Usage                           Organisation
+    ClassificationGroup     Classification                  1. Target Group
+    ClassificationType      Indicator                       Industry
+    ClassificationScore     (Possible-)Value/Selection      Service
\ No newline at end of file
diff --git a/entity/ClassificationGrading_entity/entityfields/classificationtype_group/valueProcess.js b/entity/ClassificationGrading_entity/entityfields/classificationgroup_id/valueProcess.js
similarity index 100%
rename from entity/ClassificationGrading_entity/entityfields/classificationtype_group/valueProcess.js
rename to entity/ClassificationGrading_entity/entityfields/classificationgroup_id/valueProcess.js
diff --git a/entity/ClassificationGrading_entity/entityfields/maxgradeforscore/onValidation.js b/entity/ClassificationGrading_entity/entityfields/maxgradeforscore/onValidation.js
index 7d3a67af6347a759f66eac4e9580980747c5bad5..1e60bc18fdb2d3ec65ba10aa47ce63f7e225e579 100644
--- a/entity/ClassificationGrading_entity/entityfields/maxgradeforscore/onValidation.js
+++ b/entity/ClassificationGrading_entity/entityfields/maxgradeforscore/onValidation.js
@@ -1,12 +1,13 @@
 import("Classification_lib");
-import("Entity_lib");
-import("system.translate");
 import("system.result");
+import("system.translate");
 import("system.vars");
 
-var classificationTypeGroup = vars.get("$field.CLASSIFICATIONTYPE_GROUP");
+var classificationTypeGroup = vars.get("$field.CLASSIFICATIONGROUP_ID");
 var maxValue = ClassificationUtils.getMaxScore(classificationTypeGroup);
+
 if (maxValue == "")
     maxValue = 100;
         
-if (parseFloat(vars.get("local.value")) > maxValue)
\ No newline at end of file
+if (parseFloat(vars.get("local.value")) > maxValue)
+    result.string(translate.withArguments("${HIGHER_THAN_MAX} max: %0", [maxValue]));
\ No newline at end of file
diff --git a/entity/ClassificationGrading_entity/entityfields/maxgradeforscore/valueProcess.js b/entity/ClassificationGrading_entity/entityfields/maxgradeforscore/valueProcess.js
index 6e8504b68f6b20ff2bbad5873cd5bdbcb5acdd33..24571535a888b634c3f4381ed280eda6321a0555 100644
--- a/entity/ClassificationGrading_entity/entityfields/maxgradeforscore/valueProcess.js
+++ b/entity/ClassificationGrading_entity/entityfields/maxgradeforscore/valueProcess.js
@@ -6,6 +6,6 @@ import("system.result");
 if(((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) && 
     (vars.get("$this.value") == null || vars.get("$this.value") == undefined)))
 {
-    var group = vars.getString("$param.ClassificationTypeId_param")
+    var group = vars.getString("$param.ClassificationTypeId_param");
     result.string(ClassificationUtils.getMaxScore(group));
 }
\ No newline at end of file
diff --git a/entity/ClassificationGrading_entity/recordcontainers/db/cacheKeyProcess.js b/entity/ClassificationGrading_entity/recordcontainers/db/cacheKeyProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2bf96b8a4fe5e3cbd59023cdb58325511d518059
--- /dev/null
+++ b/entity/ClassificationGrading_entity/recordcontainers/db/cacheKeyProcess.js
@@ -0,0 +1,5 @@
+import("CachedRecordContainer_lib");
+import("system.result")
+
+var res = CachedRecordContainerUtils.getCommonKey("$param.ClassificationTypeId_param");
+result.string(res);
diff --git a/entity/ClassificationGrading_entity/recordcontainers/db/conditionProcess.js b/entity/ClassificationGrading_entity/recordcontainers/db/conditionProcess.js
index 8739d3dce8c466d11d8a1c185f2a327b2ae60ca9..83116f272303015e6b9d02504d4adb0a326ca3be 100644
--- a/entity/ClassificationGrading_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/ClassificationGrading_entity/recordcontainers/db/conditionProcess.js
@@ -2,6 +2,6 @@ import("system.vars");
 import("system.result");
 import("Sql_lib");
 
-var cond = newWhereIfSet("CLASSIFICATIONGRADING.CLASSIFICATIONTYPE_GROUP", "$param.ClassificationTypeId_param");
+var cond = newWhereIfSet("CLASSIFICATIONGRADING.CLASSIFICATIONGROUP_ID", "$param.ClassificationTypeId_param");
 result.string(cond.toString());
 
diff --git a/entity/ClassificationGroupAnalyses_entity/ClassificationGroupAnalyses_entity.aod b/entity/ClassificationGroupAnalyses_entity/ClassificationGroupAnalyses_entity.aod
deleted file mode 100644
index c43b27125f6a85fa8c98c64f86188fe3e6c43668..0000000000000000000000000000000000000000
--- a/entity/ClassificationGroupAnalyses_entity/ClassificationGroupAnalyses_entity.aod
+++ /dev/null
@@ -1,83 +0,0 @@
-<?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.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
-  <name>ClassificationGroupAnalyses_entity</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <documentation>%aditoprj%/entity/ClassificationGroupAnalyses_entity/documentation.adoc</documentation>
-  <contentTitleProcess>%aditoprj%/entity/ClassificationGroupAnalyses_entity/contentTitleProcess.js</contentTitleProcess>
-  <recordContainer>jdito</recordContainer>
-  <entityFields>
-    <entityProvider>
-      <name>#PROVIDER</name>
-    </entityProvider>
-    <entityField>
-      <name>UID</name>
-    </entityField>
-    <entityParameter>
-      <name>ClassificationType_param</name>
-      <expose v="true" />
-      <mandatory v="true" />
-      <description>PARAMETER</description>
-    </entityParameter>
-    <entityParameter>
-      <name>ObjectType_param</name>
-      <expose v="true" />
-      <mandatory v="true" />
-      <description>PARAMETER</description>
-    </entityParameter>
-    <entityParameter>
-      <name>ObjectRowid_param</name>
-      <expose v="true" />
-      <mandatory v="true" />
-      <description>PARAMETER</description>
-    </entityParameter>
-    <entityProvider>
-      <name>GroupAnalyses</name>
-      <documentation>%aditoprj%/entity/ClassificationGroupAnalyses_entity/entityfields/groupanalyses/documentation.adoc</documentation>
-      <dependencies>
-        <entityDependency>
-          <name>8dfbe502-aa7a-4514-aaed-a1decf2b4344</name>
-          <entityName>Salesproject_entity</entityName>
-          <fieldName>ClassificationGroups</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-        <entityDependency>
-          <name>ccd9d58a-6175-4f67-a80a-88aeac1cad3a</name>
-          <entityName>Organisation_entity</entityName>
-          <fieldName>ClassificationGroups</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
-    </entityProvider>
-    <entityField>
-      <name>SCORE</name>
-    </entityField>
-    <entityField>
-      <name>GROUP</name>
-    </entityField>
-    <entityProvider>
-      <name>#PROVIDER_AGGREGATES</name>
-      <useAggregates v="true" />
-    </entityProvider>
-  </entityFields>
-  <recordContainers>
-    <jDitoRecordContainer>
-      <name>jdito</name>
-      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
-      <contentProcess>%aditoprj%/entity/ClassificationGroupAnalyses_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
-      <recordFieldMappings>
-        <jDitoRecordFieldMapping>
-          <name>UID.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>GROUP.value</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>GROUP.displayValue</name>
-        </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>SCORE.value</name>
-        </jDitoRecordFieldMapping>
-      </recordFieldMappings>
-    </jDitoRecordContainer>
-  </recordContainers>
-</entity>
diff --git a/entity/ClassificationGroupAnalyses_entity/contentTitleProcess.js b/entity/ClassificationGroupAnalyses_entity/contentTitleProcess.js
deleted file mode 100644
index ce766e6646d01313ec7914dd4c9a2d110db92ef1..0000000000000000000000000000000000000000
--- a/entity/ClassificationGroupAnalyses_entity/contentTitleProcess.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import("system.vars");
-import("system.result");
-result.string(vars.get("$field.UID"))
\ No newline at end of file
diff --git a/entity/ClassificationGroupAnalyses_entity/documentation.adoc b/entity/ClassificationGroupAnalyses_entity/documentation.adoc
deleted file mode 100644
index ba6c7d1f310c1eb7fd791cd0bc612c80d4aa8a66..0000000000000000000000000000000000000000
--- a/entity/ClassificationGroupAnalyses_entity/documentation.adoc
+++ /dev/null
@@ -1,3 +0,0 @@
-= ClassificationGroupAnalyses_entity
-
-This entity is there for grouping the information in the classification_entity
\ No newline at end of file
diff --git a/entity/ClassificationGroupAnalyses_entity/entityfields/groupanalyses/documentation.adoc b/entity/ClassificationGroupAnalyses_entity/entityfields/groupanalyses/documentation.adoc
deleted file mode 100644
index f5014870cb87669b987f575b44ecc6c0c15638ad..0000000000000000000000000000000000000000
--- a/entity/ClassificationGroupAnalyses_entity/entityfields/groupanalyses/documentation.adoc
+++ /dev/null
@@ -1,3 +0,0 @@
-= ClassificationGroupAnalyses_entity - GroupAnalyses
-
-Provides the information to display them in the Classification
\ No newline at end of file
diff --git a/entity/ClassificationGroupAnalyses_entity/recordcontainers/jdito/contentProcess.js b/entity/ClassificationGroupAnalyses_entity/recordcontainers/jdito/contentProcess.js
deleted file mode 100644
index 160dc5a4c4f3af969ac2f92a7ef649f9a2442ab4..0000000000000000000000000000000000000000
--- a/entity/ClassificationGroupAnalyses_entity/recordcontainers/jdito/contentProcess.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import("system.translate");
-import("system.result");
-import("system.vars");
-import("Classification_lib");
-
-var scores = ClassificationUtils.getScore(vars.get("$param.ClassificationType_param"), vars.get("$param.ObjectType_param"), vars.get("$param.ObjectRowid_param"));
-var data = [];
-
-for (var i = 0; i < scores.length; i++) {
-    data.push([scores[i][1], scores[i][1], translate.text(scores[i][1]), scores[i][0]]);
-}
-
-result.object(data);
\ No newline at end of file
diff --git a/entity/ClassificationGroup_entity/ClassificationGroup_entity.aod b/entity/ClassificationGroup_entity/ClassificationGroup_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..546a64d948001e538ed6a971478016d6ae568b0f
--- /dev/null
+++ b/entity/ClassificationGroup_entity/ClassificationGroup_entity.aod
@@ -0,0 +1,112 @@
+<?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.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
+  <name>ClassificationGroup_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/ClassificationGroup_entity/documentation.adoc</documentation>
+  <title>Classification</title>
+  <contentTitleProcess>%aditoprj%/entity/ClassificationGroup_entity/contentTitleProcess.js</contentTitleProcess>
+  <titlePlural>Classifications</titlePlural>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>CLASSIFICATIONGROUPID</name>
+      <valueProcess>%aditoprj%/entity/ClassificationGroup_entity/entityfields/classificationgroupid/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>TITLE</name>
+      <title>Classification</title>
+      <displayValueProcess>%aditoprj%/entity/ClassificationGroup_entity/entityfields/title/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityConsumer>
+      <name>ClassificationGroups</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>ClassificationType_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>ClassificationGradings</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>ClassificationGrading_entity</entityName>
+        <fieldName>ClassificationGradings</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ClassificationTypeId_param</name>
+          <valueProcess>%aditoprj%/entity/ClassificationGroup_entity/entityfields/classificationgradings/children/classificationtypeid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityField>
+      <name>SORTING</name>
+      <title>Sorting</title>
+    </entityField>
+    <entityField>
+      <name>object_type</name>
+      <title>Place Of Use</title>
+      <valueProcess>%aditoprj%/entity/ClassificationGroup_entity/entityfields/object_type/valueProcess.js</valueProcess>
+    </entityField>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityParameter>
+      <name>ObjectType_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityProvider>
+      <name>SpecificObjectTypeGroups</name>
+      <documentation>%aditoprj%/entity/ClassificationGroup_entity/entityfields/specificobjecttypegroups/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>ObjectType_param</name>
+          <expose v="true" />
+          <mandatory v="true" />
+        </entityParameter>
+      </children>
+    </entityProvider>
+    <entityField>
+      <name>translatedTitle</name>
+      <valueProcess>%aditoprj%/entity/ClassificationGroup_entity/entityfields/translatedtitle/valueProcess.js</valueProcess>
+    </entityField>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <alias>Data_alias</alias>
+      <isPageable v="false" />
+      <conditionProcess>%aditoprj%/entity/ClassificationGroup_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <orderClauseProcess>%aditoprj%/entity/ClassificationGroup_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
+      <cacheType>GLOBAL</cacheType>
+      <cacheKeyProcess>%aditoprj%/entity/ClassificationGroup_entity/recordcontainers/db/cacheKeyProcess.js</cacheKeyProcess>
+      <linkInformation>
+        <linkInformation>
+          <name>b0606861-e080-4441-94ac-fce33bbf7747</name>
+          <tableName>CLASSIFICATIONGROUP</tableName>
+          <primaryKey>CLASSIFICATIONGROUPID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+      </linkInformation>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>TITLE.value</name>
+          <recordfield>CLASSIFICATIONGROUP.TITLE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>SORTING.value</name>
+          <recordfield>CLASSIFICATIONGROUP.SORTING</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CLASSIFICATIONGROUPID.value</name>
+          <recordfield>CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID</recordfield>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/ClassificationGroup_entity/contentTitleProcess.js b/entity/ClassificationGroup_entity/contentTitleProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1f578714f795a0c4eefd533ba9c4b9b11e43d470
--- /dev/null
+++ b/entity/ClassificationGroup_entity/contentTitleProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.translatedTitle"));
\ No newline at end of file
diff --git a/entity/ClassificationGroup_entity/documentation.adoc b/entity/ClassificationGroup_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..457450a735bf0dbd9e574703697e18a531d46c67
--- /dev/null
+++ b/entity/ClassificationGroup_entity/documentation.adoc
@@ -0,0 +1,49 @@
+= ClassificationGroup_entity
+
+Definition:
+
+    Used to make it possible to store the classification groups in their own table with their own UUID instead of using the title as the key.
+    The classification can be dynamically configured at runtime.
+    (For more information about the classification see also Classification_entity)
+
+Purpose:
+
+    This entity is used for storing the classification groups and making it possible for the admin to change 
+    the details of the clasification (classificationGroup) like the name, sorting or it's usage 
+    or to change the classification of an indicator without affecting the classification itself.
+    In the past the classificationgroup was only a name, which limited the functionality, which is why it got changed.
+
+    This entity only has one view: the ClassificationGroupPreview which has the usage (object_type), title, and sorting fields
+    and the ClassificationGradingMultipleEdit_view.
+    making it possible for the admin to configure something like this:
+
+    ClassificationAdminPreviewOfClassification Example: 
+
+        USAGE:          Organisation
+        CLASSIFICATION: 1. Target Group
+        SORTING:        1
+         A               100
+         B               75
+         C               50
+         D               25
+
+   (For more information about the grading see also ClassifiactionGrading_entity)
+
+Particularities:
+
+    The Classification consists of the following entities:
+    Classification_entity,
+    ClassificationAdmin_entity,
+    ClassificationGrading_entity,
+    ClassificationGroup_entity,
+    ClassificationScore_entity,
+    ClassificationType_entity
+
+    Our terms in the db and entity structure differ from the technical terms the user gets to see, to make it easier to understand 
+    for the developer that doesn't have the technical know-how:
+
+    Our term:               Technical term:                 Example:
+    Object_Type             Usage                           Organisation
+    ClassificationGroup     Classification                  1. Target Group
+    ClassificationType      Indicator                       Industry
+    ClassificationScore     (Possible-)Value/Selection      Service
\ No newline at end of file
diff --git a/entity/ClassificationGroup_entity/entityfields/classificationgradings/children/classificationtypeid_param/valueProcess.js b/entity/ClassificationGroup_entity/entityfields/classificationgradings/children/classificationtypeid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..955830d8a9b4611e081d03a118f0dfa0b3427682
--- /dev/null
+++ b/entity/ClassificationGroup_entity/entityfields/classificationgradings/children/classificationtypeid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("system.vars");
+
+result.string(vars.get("$field.CLASSIFICATIONGROUPID"));
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationtype/valueProcess.js b/entity/ClassificationGroup_entity/entityfields/classificationgroupid/valueProcess.js
similarity index 61%
rename from entity/ClassificationAdmin_entity/entityfields/classificationtype/valueProcess.js
rename to entity/ClassificationGroup_entity/entityfields/classificationgroupid/valueProcess.js
index 2bccd5eb7fbb2311971da0e6ae2ed3b56ed21268..16c47d8b58490ac63829673a531ffce4e6896745 100644
--- a/entity/ClassificationAdmin_entity/entityfields/classificationtype/valueProcess.js
+++ b/entity/ClassificationGroup_entity/entityfields/classificationgroupid/valueProcess.js
@@ -1,8 +1,10 @@
+import("system.util");
 import("system.result");
 import("system.neon");
 import("system.vars");
 
 if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
 {
-    result.string(vars.get("$param.ClassificationType_param"));
+    var newId = util.getNewUUID();
+    result.string(newId);
 }
\ No newline at end of file
diff --git a/entity/ClassificationGroup_entity/entityfields/object_type/valueProcess.js b/entity/ClassificationGroup_entity/entityfields/object_type/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d24b532449fc6ef9f0f016d27e0d277bb202d0c2
--- /dev/null
+++ b/entity/ClassificationGroup_entity/entityfields/object_type/valueProcess.js
@@ -0,0 +1,14 @@
+import("Sql_lib");
+import("system.result");
+import("system.vars");
+
+var groupId = vars.get("$field.CLASSIFICATIONGROUPID")
+
+if(groupId)
+{
+    var res = newSelect("distinct CLASSIFICATIONTYPE.OBJECT_TYPE")
+                            .from("CLASSIFICATIONTYPE")
+                            .where("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", vars.get("$field.CLASSIFICATIONGROUPID"))
+                            .cell();
+    result.string(res);
+}
\ No newline at end of file
diff --git a/entity/ClassificationGroup_entity/entityfields/specificobjecttypegroups/documentation.adoc b/entity/ClassificationGroup_entity/entityfields/specificobjecttypegroups/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..69ef4700107cb6e201bec2c78d205421cf124623
--- /dev/null
+++ b/entity/ClassificationGroup_entity/entityfields/specificobjecttypegroups/documentation.adoc
@@ -0,0 +1,2 @@
+Provider that returns ClassificationGroups of one given Object_type (e.g. `Organisation`)
+This may be used for `entities.getRows`.
\ No newline at end of file
diff --git a/entity/ClassificationGroup_entity/entityfields/title/displayValueProcess.js b/entity/ClassificationGroup_entity/entityfields/title/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1bd5882b79ef1bdc97ba4ed6d408b4401eeb35a2
--- /dev/null
+++ b/entity/ClassificationGroup_entity/entityfields/title/displayValueProcess.js
@@ -0,0 +1,4 @@
+import("system.result")
+import("system.vars")
+
+result.string(vars.get("$this.value"));
\ No newline at end of file
diff --git a/entity/ClassificationGroup_entity/entityfields/translatedtitle/valueProcess.js b/entity/ClassificationGroup_entity/entityfields/translatedtitle/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c7ea27ae7a5b7b3be6958633bda20ec4b71c2f57
--- /dev/null
+++ b/entity/ClassificationGroup_entity/entityfields/translatedtitle/valueProcess.js
@@ -0,0 +1,11 @@
+import("system.vars");
+import("system.result");
+import("system.translate");
+
+var res;
+var title = vars.get("$field.TITLE");
+if (title)
+    res = translate.text(title);
+else
+    res = "";
+result.string(res);
\ No newline at end of file
diff --git a/entity/ClassificationGroup_entity/recordcontainers/db/cacheKeyProcess.js b/entity/ClassificationGroup_entity/recordcontainers/db/cacheKeyProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..944498d6bd81fef429957cc685756728ced7dbee
--- /dev/null
+++ b/entity/ClassificationGroup_entity/recordcontainers/db/cacheKeyProcess.js
@@ -0,0 +1,5 @@
+import("CachedRecordContainer_lib");
+import("system.result")
+
+var res = CachedRecordContainerUtils.getCommonKey("$param.ObjectType_param");
+result.string(res);
diff --git a/entity/ClassificationGroup_entity/recordcontainers/db/conditionProcess.js b/entity/ClassificationGroup_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2d43dba815cd2dea8e2a5eeb8335aa36c8e3746c
--- /dev/null
+++ b/entity/ClassificationGroup_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,20 @@
+import("Employee_lib");
+import("AttributeRegistry_basic");
+import("Attribute_lib");
+import("system.logging");
+import("system.vars");
+import("system.db");
+import("system.result");
+import("Sql_lib");
+import("Context_lib");
+
+var cond = newWhere();
+
+var objectType = vars.get("$param.ObjectType_param");
+if (objectType)
+    cond.and("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID", newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID")
+                                                            .from("CLASSIFICATIONTYPE")
+                                                            .where("CLASSIFICATIONTYPE.OBJECT_TYPE", objectType), SqlBuilder.IN());
+
+//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
+result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/ClassificationGroup_entity/recordcontainers/db/orderClauseProcess.js b/entity/ClassificationGroup_entity/recordcontainers/db/orderClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d4100626b34a30ef46be15f8132398218b1ec81e
--- /dev/null
+++ b/entity/ClassificationGroup_entity/recordcontainers/db/orderClauseProcess.js
@@ -0,0 +1,7 @@
+import("system.db");
+import("system.result");
+
+var res = {
+    "CLASSIFICATIONGROUP.TITLE": db.ASCENDING
+};
+result.object(res);
\ No newline at end of file
diff --git a/entity/ClassificationScore_entity/ClassificationScore_entity.aod b/entity/ClassificationScore_entity/ClassificationScore_entity.aod
index 4d930ad8b01cbdac43c27a484009f726f1fab68c..51332fbd2ec4c92c2c75f876709dd9275bc39931 100644
--- a/entity/ClassificationScore_entity/ClassificationScore_entity.aod
+++ b/entity/ClassificationScore_entity/ClassificationScore_entity.aod
@@ -33,11 +33,12 @@
     </entityField>
     <entityField>
       <name>SCORE</name>
-      <title>Score</title>
+      <title>Points</title>
       <contentType>NUMBER</contentType>
       <outputFormat>#,##0.00</outputFormat>
       <inputFormat>#,##0.00</inputFormat>
       <mandatory v="true" />
+      <onValidation>%aditoprj%/entity/ClassificationScore_entity/entityfields/score/onValidation.js</onValidation>
     </entityField>
     <entityProvider>
       <name>ClassificationScores</name>
@@ -51,6 +52,7 @@
         </entityParameter>
         <entityParameter>
           <name>ClassificationTypeId_param</name>
+          <valueProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/classificationscores/children/classificationtypeid_param/valueProcess.js</valueProcess>
           <expose v="true" />
           <mandatory v="true" />
         </entityParameter>
@@ -66,10 +68,6 @@
       <expose v="true" />
       <description>PARAMETER</description>
     </entityParameter>
-    <entityField>
-      <name>MaxValue</name>
-      <valueProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/maxvalue/valueProcess.js</valueProcess>
-    </entityField>
     <entityParameter>
       <name>ClassificationGroup_param</name>
       <expose v="true" />
@@ -84,16 +82,28 @@
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
     </entityProvider>
+    <entityField>
+      <name>classificationgroup_id</name>
+      <valueProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/classificationgroup_id/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/classificationgroup_id/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>translatedTitle</name>
+      <valueProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/translatedtitle/valueProcess.js</valueProcess>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
       <name>db</name>
       <alias>Data_alias</alias>
+      <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>
+      <cacheType>GLOBAL</cacheType>
+      <cacheKeyProcess>%aditoprj%/entity/ClassificationScore_entity/recordcontainers/db/cacheKeyProcess.js</cacheKeyProcess>
       <linkInformation>
         <linkInformation>
           <name>e2fecaf8-bc95-4a4d-bd96-88731568b1a4</name>
diff --git a/entity/ClassificationScore_entity/documentation.adoc b/entity/ClassificationScore_entity/documentation.adoc
index 89c3ea4f996f8537873b516195a6e80cdb00fe15..b726994060331781c42824c0019eb30c1f2df4b6 100644
--- a/entity/ClassificationScore_entity/documentation.adoc
+++ b/entity/ClassificationScore_entity/documentation.adoc
@@ -1,3 +1,47 @@
 = ClassificationScore_entity
 
-Presentation of the grouping via ScoreCard
\ No newline at end of file
+Definition:
+
+    Stores the possible Values of Classification score types and their score and the sorting value.
+    (For more information about the classification see also Classification_entity)
+
+Purpose:
+
+    This Entity gives the administrators an easy way to edit the possible values, their scoring and sorting in the preview of classificationAdmin 
+    when selecting a indicator (classificationType).
+    The values gets stored in the table classificationscore with their own classificationScoreId, the classificationType_Id, title, score und sort.
+
+    This entity only has one view: the ClassificationScoreMultipleEdit_view which has title as the title field and score and sort as columns
+    making it possible for the admin to configure something like this:
+
+    ClassificationAdminPreviewOfIndicator Example: 
+
+        USAGE:          Organisation
+        CLASSIFICATION: 1. Target Group
+        INDICATOR:      Headquarters
+         Germany         35,00, 10
+         Austria         35,00 20
+         Switzerland     25,00, 30
+         Other            0,00, 40
+
+Particularities:
+
+    The biggest possible score is being used by classificationGrading to calculate the value for the best possible grade, 
+    if this value is changed the grading get's updated using the rule of three (see onInsert-, onUpdate- and onDelete- processes).
+    
+    The Classification consists of the following entities:
+    Classification_entity,
+    ClassificationAdmin_entity,
+    ClassificationGrading_entity,
+    ClassificationGroup_entity,
+    ClassificationScore_entity,
+    ClassificationType_entity
+
+    Our terms in the db and entity structure differ from the technical terms the user gets to see, to make it easier to understand 
+    for the developer that doesn't have the technical know-how:
+
+    Our term:               Technical term:                 Example:
+    Object_Type             Usage                           Organisation
+    ClassificationGroup     Classification                  1. Target Group
+    ClassificationType      Indicator                       Industry
+    ClassificationScore     (Possible-)Value/Selection      Service
\ No newline at end of file
diff --git a/entity/ClassificationScore_entity/entityfields/classificationgroup_id/displayValueProcess.js b/entity/ClassificationScore_entity/entityfields/classificationgroup_id/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..98e4c5bc2b43a98addc28f2a80374c3e81721c5c
--- /dev/null
+++ b/entity/ClassificationScore_entity/entityfields/classificationgroup_id/displayValueProcess.js
@@ -0,0 +1,9 @@
+import("system.vars");
+import("Context_lib");
+import("system.result");
+
+var groupId = vars.get("$field.classificationgroup_id");
+if(groupId != "" && groupId != undefined)
+    result.string(ContextUtils.loadContentTitle("ClassificationGroup_entity", groupId));
+else
+    result.string("")
\ No newline at end of file
diff --git a/entity/ClassificationScore_entity/entityfields/classificationgroup_id/valueProcess.js b/entity/ClassificationScore_entity/entityfields/classificationgroup_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..65f65e71046bb7d45bb66d599db775f3e4274b4a
--- /dev/null
+++ b/entity/ClassificationScore_entity/entityfields/classificationgroup_id/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("Sql_lib");
+import("system.result");
+
+var groupId = vars.get("$param.ClassificationGroup_param");
+if(groupId)
+    result.string(groupId);
\ No newline at end of file
diff --git a/entity/ClassificationScore_entity/entityfields/classificationscoreid/valueProcess.js b/entity/ClassificationScore_entity/entityfields/classificationscoreid/valueProcess.js
index 2e1eadc780ee959ee845885c8bca4d35d4eece3d..394e2a4a036323a90283bed48ca7ee378dd6200c 100644
--- a/entity/ClassificationScore_entity/entityfields/classificationscoreid/valueProcess.js
+++ b/entity/ClassificationScore_entity/entityfields/classificationscoreid/valueProcess.js
@@ -3,7 +3,5 @@ import("system.util");
 import("system.result");
 import("system.vars");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-{
-    result.string(util.getNewUUID());
-}
\ No newline at end of file
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+    result.string(util.getNewUUID());
\ No newline at end of file
diff --git a/entity/ClassificationScore_entity/entityfields/classificationscores/children/classificationtypeid_param/valueProcess.js b/entity/ClassificationScore_entity/entityfields/classificationscores/children/classificationtypeid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f87c7071f1ad16f7349cb6c114f0b32548c75b00
--- /dev/null
+++ b/entity/ClassificationScore_entity/entityfields/classificationscores/children/classificationtypeid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.CLASSIFICATIONTYPE_ID"));
\ No newline at end of file
diff --git a/entity/ClassificationScore_entity/entityfields/classificationtype_id/valueProcess.js b/entity/ClassificationScore_entity/entityfields/classificationtype_id/valueProcess.js
index 419fe78a30db83fdeda7d426e0f4083b914a555e..8806f470d922646ce6c4127ee42e945e86119076 100644
--- a/entity/ClassificationScore_entity/entityfields/classificationtype_id/valueProcess.js
+++ b/entity/ClassificationScore_entity/entityfields/classificationtype_id/valueProcess.js
@@ -3,6 +3,4 @@ import("system.neon");
 import("system.vars");
 
 if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-{
-    result.string(vars.get("$param.ClassificationTypeId_param"));
-}
\ No newline at end of file
+    result.string(vars.get("$param.ClassificationTypeId_param"));
\ No newline at end of file
diff --git a/entity/ClassificationScore_entity/entityfields/maxvalue/valueProcess.js b/entity/ClassificationScore_entity/entityfields/maxvalue/valueProcess.js
deleted file mode 100644
index d46b81f5b8e7d48b7aa69224399a0a67feb5502d..0000000000000000000000000000000000000000
--- a/entity/ClassificationScore_entity/entityfields/maxvalue/valueProcess.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import("system.vars");
-import("system.result");
-import("system.db");
-import("Sql_lib");
-
-if (!vars.get("$this.value"))
-{    
-    var classificationTypeId = vars.get("$param.ClassificationTypeId_param");
-    var maxValue = newSelect("100.0 - sum(maxScore)")
-                        .from(newSelect("max(SCORE) maxScore")
-                                .from("CLASSIFICATIONTYPE")
-                                .join("CLASSIFICATIONSCORE", "CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID = CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID")
-                                .whereIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypeId, SqlBuilder.NOT_EQUAL())
-                                .andIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP", "$param.ClassificationGroup_param")
-                                .andIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONTYPE", "$param.ClassificationType_param")
-                                .groupBy("CLASSIFICATIONTYPE.SCORETYPE"), "maxScores")
-                        .cell();
-    if (maxValue == "")
-        maxValue = 100;
-    
-    result.string(maxValue);
-}
\ No newline at end of file
diff --git a/entity/ClassificationScore_entity/entityfields/score/onValidation.js b/entity/ClassificationScore_entity/entityfields/score/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/entity/ClassificationScore_entity/entityfields/translatedtitle/valueProcess.js b/entity/ClassificationScore_entity/entityfields/translatedtitle/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c6340e758de70df1385e315040916acaded94e84
--- /dev/null
+++ b/entity/ClassificationScore_entity/entityfields/translatedtitle/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("system.translate");
+import("system.vars");
+
+result.string(translate.text(vars.get("$field.TITLE")));
\ No newline at end of file
diff --git a/entity/ClassificationScore_entity/recordcontainers/db/cacheKeyProcess.js b/entity/ClassificationScore_entity/recordcontainers/db/cacheKeyProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1edaa2e881b707c23ac3baf2d780bf5d77fd795f
--- /dev/null
+++ b/entity/ClassificationScore_entity/recordcontainers/db/cacheKeyProcess.js
@@ -0,0 +1,5 @@
+import("CachedRecordContainer_lib");
+import("system.result")
+
+var res = CachedRecordContainerUtils.getCommonKey("$param.ClassificationGroup_param", "$param.ClassificationTypeId_param", "$param.ClassificationType_param");
+result.string(res);
diff --git a/entity/ClassificationScore_entity/recordcontainers/db/onDBDelete.js b/entity/ClassificationScore_entity/recordcontainers/db/onDBDelete.js
index 6f34bda69d967ac170131ef53e8f55f093fc51a0..4feb1dc30761452716df0f169ffef60f0945c21a 100644
--- a/entity/ClassificationScore_entity/recordcontainers/db/onDBDelete.js
+++ b/entity/ClassificationScore_entity/recordcontainers/db/onDBDelete.js
@@ -3,27 +3,37 @@ import("system.db");
 import("system.vars");
 import("Classification_lib");
 import("system.eMath");
+import("system.entities");
 
-newWhere("CLASSIFICATION.CLASSIFICATIONSCORE_ID", "$field.CLASSIFICATIONSCOREID").deleteData();
-
-var classificationScoreId = vars.get("$field.CLASSIFICATIONSCOREID");
+try
+{
+    newWhere("CLASSIFICATION.CLASSIFICATIONSCORE_ID", "$field.CLASSIFICATIONSCOREID").deleteData();
+    var classificationScoreId = vars.get("$field.CLASSIFICATIONSCOREID")
 
-var gradingTable = ClassificationUtils.getGradingTableByScoreId(classificationScoreId);
-var classificationGroup = ClassificationUtils.getClassificationGroup(classificationScoreId);
-var maxScore = ClassificationUtils.getMaxScore(classificationGroup);
+    var classificationType = ClassificationUtils.getClassificationType(classificationScoreId);
+    var classificationGroup = ClassificationUtils.getClassificationGroup(classificationType);
+    var gradingTable = ClassificationUtils.getGradingTableByGroupId(classificationGroup);
+    var maxScore = ClassificationUtils.getMaxScore(classificationGroup)
 
-//checks if the maxscore has to be updated after the data has been deleted
-if(gradingTable[0][1] != maxScore)
-{
-    var column = ["MAXGRADEFORSCORE"];
-    var table = ["CLASSIFICATIONGRADING"];
-    var multiplier = maxScore/gradingTable[0][1];
-    var update = newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID", gradingTable[0][0])
-                            .updateData(true, table, column,  db.getColumnTypes("CLASSIFICATIONGRADING", column, db.getCurrentAlias()), [maxScore]);
-                        
-    for (var i = 1; i < gradingTable.length; i++) 
+    if(gradingTable[0][1] != maxScore) //the gradingTable is already sorted, so gradingTable[0][1] is the maxGradeForScore of the best possible Grade
     {
-        update = newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID", gradingTable[i][0])
-                        .updateData(true, table, column,  db.getColumnTypes("CLASSIFICATIONGRADING", column, db.getCurrentAlias()), [parseInt(gradingTable[i][1] * multiplier)]);
+        var column = ["MAXGRADEFORSCORE"];
+        var table = ["CLASSIFICATIONGRADING"];
+        var multiplicand = maxScore/gradingTable[0][1];
+        var update = newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID", gradingTable[0][0])
+                                .updateData(true, table, column,  db.getColumnTypes("CLASSIFICATIONGRADING", column, db.getCurrentAlias()), [maxScore]);
+
+        for (let i = 1; i < gradingTable.length; i++) 
+        {
+            update = newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID", gradingTable[i][0])
+                            .updateData(true, table, column,  db.getColumnTypes("CLASSIFICATIONGRADING", column, db.getCurrentAlias()), [parseInt(gradingTable[i][1] * multiplicand)]);
+        }
     }
-}
\ No newline at end of file
+}
+finally //always make sure that the cache is as valid as possible
+{
+    //ClassificationType_entity accesses the CLASSIFICATIONSCORE (max value of scores) so we need to update the cache to prevent inconsesty
+    entities.invalidateCache("ClassificationType_entity", "db");
+    //Grading-values are dependent since they are modified within this process (maxgrade)
+    entities.invalidateCache("ClassificationGrading_entity", "db");
+}
diff --git a/entity/ClassificationScore_entity/recordcontainers/db/onDBInsert.js b/entity/ClassificationScore_entity/recordcontainers/db/onDBInsert.js
index eddf0f09ffef46937ad6ae864e91a9886318d02c..0dfe964c1e25974c57ac6b79e9f09adf783cdc26 100644
--- a/entity/ClassificationScore_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/ClassificationScore_entity/recordcontainers/db/onDBInsert.js
@@ -1,30 +1,41 @@
+import("system.entities");
 import("system.db");
 import("Sql_lib");
 import("system.vars");
 import("Classification_lib");
-import("system.eMath");
+import("system.eMath")
 
-var classificationScoreId = vars.get("$field.CLASSIFICATIONSCOREID");
+try
+{
+    var classificationScoreId = vars.get("$field.CLASSIFICATIONSCOREID")
 
-var gradingTable = ClassificationUtils.getGradingTableByScoreId(classificationScoreId);
-var classificationGroup = ClassificationUtils.getClassificationGroup(classificationScoreId);
-var maxScore = ClassificationUtils.getMaxScore(classificationGroup);
+    var classificationType = ClassificationUtils.getClassificationType(classificationScoreId);
+    var classificationGroup = ClassificationUtils.getClassificationGroup(classificationType);
+    var gradingTable = ClassificationUtils.getGradingTableByGroupId(classificationGroup);
+    var maxScore = ClassificationUtils.getMaxScore(classificationGroup)
 
-//checks if the maxscore has to be updated after inserting data
-if(gradingTable.length > 0 && gradingTable != undefined && gradingTable != null)
-{
-    if(gradingTable[0][1] != maxScore)
+    if(gradingTable.length > 0 && gradingTable != undefined && gradingTable != null)
     {
-        var column = ["MAXGRADEFORSCORE"];
-        var table = ["CLASSIFICATIONGRADING"];
-        var multiplier = maxScore/gradingTable[0][1];
-        var update = newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID", gradingTable[0][0])
-                                .updateData(true, table, column,  db.getColumnTypes("CLASSIFICATIONGRADING", column, db.getCurrentAlias()), [maxScore]);
-
-        for (var i = 1; i < gradingTable.length; i++) 
+        if(gradingTable[0][1] != maxScore)
         {
-            update = newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID", gradingTable[i][0])
-                            .updateData(true, table, column,  db.getColumnTypes("CLASSIFICATIONGRADING", column, db.getCurrentAlias()), [parseInt(gradengTable[i][1] * multiplier)]);
+            var column = ["MAXGRADEFORSCORE"];
+            var table = ["CLASSIFICATIONGRADING"];
+            var multiplicand = maxScore/gradingTable[0][1];
+            var update = newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID", gradingTable[0][0])
+                                    .updateData(true, table, column,  null, [maxScore]);
+
+            for (let i = 1; i < gradingTable.length; i++) 
+            {
+                update = newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID", gradingTable[i][0])
+                                .updateData(true, table, column,  null, [parseInt(gradingTable[i][1] * multiplicand)]);
+            }
         }
     }
+}
+finally //always make sure that the cache is as valid as possible
+{
+    //ClassificationType_entity accesses the CLASSIFICATIONSCORE (max value of scores) so we need to update the cache to prevent inconsesty
+    entities.invalidateCache("ClassificationType_entity", "db");
+    //Grading-values are dependent since they are modified within this process (maxgrade)
+    entities.invalidateCache("ClassificationGrading_entity", "db");
 }
\ No newline at end of file
diff --git a/entity/ClassificationScore_entity/recordcontainers/db/onDBUpdate.js b/entity/ClassificationScore_entity/recordcontainers/db/onDBUpdate.js
index fb8657adbce952d10cffd25e8a08ef0713371eb8..5cfa69ab83d180289ed03ff802d37ecd44d023b5 100644
--- a/entity/ClassificationScore_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/ClassificationScore_entity/recordcontainers/db/onDBUpdate.js
@@ -1,27 +1,38 @@
+import("system.entities");
 import("system.db");
 import("Sql_lib");
 import("system.vars");
 import("Classification_lib");
-import("system.eMath");
+import("system.eMath")
 
-var classificationScoreId = vars.get("$field.CLASSIFICATIONSCOREID");
+try
+{
+    var classificationScoreId = vars.get("$field.CLASSIFICATIONSCOREID")
 
-var gradingTable = ClassificationUtils.getGradingTableByScoreId(classificationScoreId);
-var classificationGroup = ClassificationUtils.getClassificationGroup(classificationScoreId);
-var maxScore = ClassificationUtils.getMaxScore(classificationGroup);
+    var classificationType = ClassificationUtils.getClassificationType(classificationScoreId);
+    var classificationGroup = ClassificationUtils.getClassificationGroup(classificationType);
+    var gradingTable = ClassificationUtils.getGradingTableByGroupId(classificationGroup);
+    var maxScore = ClassificationUtils.getMaxScore(classificationGroup)
 
-//checks if the maxscore has to be updated after updating data
-if(gradingTable[0][1] != maxScore)
-{
-    var column = ["MAXGRADEFORSCORE"];
-    var table = ["CLASSIFICATIONGRADING"];
-    var multiplier = maxScore/gradingTable[0][1];
-    var update = newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID", gradingTable[0][0])
-                            .updateData(true, table, column,  db.getColumnTypes("CLASSIFICATIONGRADING", column, db.getCurrentAlias()), [maxScore]);
-                        
-    for (var i = 1; i < gradingTable.length; i++) 
+    if(gradingTable[0][1] != maxScore)
     {
-        update = newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID", gradingTable[i][0])
-                        .updateData(true, table, column,  db.getColumnTypes("CLASSIFICATIONGRADING", column, db.getCurrentAlias()), [parseInt(gradingTable[i][1] * multiplier)]);
+        var column = ["MAXGRADEFORSCORE"];
+        var table = ["CLASSIFICATIONGRADING"];
+        var multiplicand = maxScore/gradingTable[0][1];
+        var update = newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID", gradingTable[0][0])
+                                .updateData(true, table, column,  db.getColumnTypes("CLASSIFICATIONGRADING", column, db.getCurrentAlias()), [maxScore]);
+
+        for (let i = 1; i < gradingTable.length; i++) 
+        {
+            update = newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID", gradingTable[i][0])
+                            .updateData(true, table, column,  db.getColumnTypes("CLASSIFICATIONGRADING", column, db.getCurrentAlias()), [parseInt(gradingTable[i][1] * multiplicand)]);
+        }
     }
+}
+finally //always make sure that the cache is as valid as possible
+{
+    //ClassificationType_entity accesses the CLASSIFICATIONSCORE (max value of scores) so we need to update the cache to prevent inconsesty
+    entities.invalidateCache("ClassificationType_entity", "db");
+    //Grading-values are dependent since they are modified within this process (maxgrade)
+    entities.invalidateCache("ClassificationGrading_entity", "db");
 }
\ No newline at end of file
diff --git a/entity/ClassificationType_entity/ClassificationType_entity.aod b/entity/ClassificationType_entity/ClassificationType_entity.aod
index 016b698256decb8bb09a66398cd725c6bb308634..d86c079f7b68f2f527fb56ee8044e50dab3afbbf 100644
--- a/entity/ClassificationType_entity/ClassificationType_entity.aod
+++ b/entity/ClassificationType_entity/ClassificationType_entity.aod
@@ -3,36 +3,97 @@
   <name>ClassificationType_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/entity/ClassificationType_entity/documentation.adoc</documentation>
+  <title>Indicator</title>
+  <contentTitleProcess>%aditoprj%/entity/ClassificationType_entity/contentTitleProcess.js</contentTitleProcess>
   <recordContainer>db</recordContainer>
   <entityFields>
     <entityProvider>
       <name>#PROVIDER</name>
+      <dependencies>
+        <entityDependency>
+          <name>908ca339-4dca-41c6-a32b-472617e1742e</name>
+          <entityName>ClassificationGroup_entity</entityName>
+          <fieldName>ClassificationGroups</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityField>
       <name>CLASSIFICATIONTYPEID</name>
+      <valueProcess>%aditoprj%/entity/ClassificationType_entity/entityfields/classificationtypeid/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
-      <name>TYPE</name>
+      <name>OBJECT_TYPE</name>
+      <title>Place Of Use</title>
+      <displayValueProcess>%aditoprj%/entity/ClassificationType_entity/entityfields/object_type/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
-      <name>CLASS</name>
+      <name>SCORETYPE</name>
+      <title>Indicator</title>
+      <displayValueProcess>%aditoprj%/entity/ClassificationType_entity/entityfields/scoretype/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>CLASSIFICATIONGROUP_ID</name>
+      <title>Classification</title>
+      <displayValueProcess>%aditoprj%/entity/ClassificationType_entity/entityfields/classificationgroup_id/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityConsumer>
+      <name>ClassificationScores</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>ClassificationScore_entity</entityName>
+        <fieldName>ClassificationScores</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ClassificationTypeId_param</name>
+          <valueProcess>%aditoprj%/entity/ClassificationType_entity/entityfields/classificationscores/children/classificationtypeid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>ClassificationGroup_param</name>
+          <valueProcess>%aditoprj%/entity/ClassificationType_entity/entityfields/classificationscores/children/classificationgroup_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityField>
+      <name>infoField</name>
+      <title>Hint</title>
+      <valueProcess>%aditoprj%/entity/ClassificationType_entity/entityfields/infofield/valueProcess.js</valueProcess>
+    </entityField>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityField>
+      <name>maxScore</name>
+      <valueProcess>%aditoprj%/entity/ClassificationType_entity/entityfields/maxscore/valueProcess.js</valueProcess>
     </entityField>
     <entityParameter>
-      <name>ClassificationTypeIds_param</name>
+      <name>ClassificationGroupId_param</name>
       <expose v="true" />
     </entityParameter>
     <entityProvider>
-      <name>#PROVIDER_AGGREGATES</name>
-      <useAggregates v="true" />
+      <name>ClassificationTypesForGroup</name>
+      <documentation>%aditoprj%/entity/ClassificationType_entity/entityfields/classificationtypesforgroup/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>ClassificationGroupId_param</name>
+          <mandatory v="true" />
+        </entityParameter>
+      </children>
     </entityProvider>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
       <name>db</name>
       <alias>Data_alias</alias>
+      <isPageable v="false" />
+      <conditionProcess>%aditoprj%/entity/ClassificationType_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <cacheType>GLOBAL</cacheType>
+      <cacheKeyProcess>%aditoprj%/entity/ClassificationType_entity/recordcontainers/db/cacheKeyProcess.js</cacheKeyProcess>
       <linkInformation>
         <linkInformation>
-          <name>0a0944fd-a72f-4c95-8c42-b1e7d3e17721</name>
+          <name>0c764b72-f55b-4b87-8dc1-9a491a143f44</name>
           <tableName>CLASSIFICATIONTYPE</tableName>
           <primaryKey>CLASSIFICATIONTYPEID</primaryKey>
           <isUIDTable v="true" />
@@ -45,12 +106,20 @@
           <recordfield>CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID</recordfield>
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
-          <name>CLASS.value</name>
-          <recordfield>CLASSIFICATIONTYPE.CLASS</recordfield>
+          <name>OBJECT_TYPE.value</name>
+          <recordfield>CLASSIFICATIONTYPE.OBJECT_TYPE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CLASSIFICATIONGROUP_ID.value</name>
+          <recordfield>CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>SCORETYPE.value</name>
+          <recordfield>CLASSIFICATIONTYPE.SCORETYPE</recordfield>
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
-          <name>TYPE.value</name>
-          <recordfield>CLASSIFICATIONTYPE.TYPE</recordfield>
+          <name>maxScore.value</name>
+          <expression>%aditoprj%/entity/ClassificationType_entity/recordcontainers/db/recordfieldmappings/maxscore.value/expression.js</expression>
         </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
diff --git a/entity/ClassificationAdmin_entity/entityfields/scoretype/displayValueProcess.js b/entity/ClassificationType_entity/contentTitleProcess.js
similarity index 100%
rename from entity/ClassificationAdmin_entity/entityfields/scoretype/displayValueProcess.js
rename to entity/ClassificationType_entity/contentTitleProcess.js
index 87d569a0e2dc50c0ef3859fdbc0f22c3d9ac89e3..4bb76faf06af8296cc8290169d0de052f10976f1 100644
--- a/entity/ClassificationAdmin_entity/entityfields/scoretype/displayValueProcess.js
+++ b/entity/ClassificationType_entity/contentTitleProcess.js
@@ -1,5 +1,5 @@
-import("system.vars");
 import("system.translate");
+import("system.vars");
 import("system.result");
 
 result.string(translate.text(vars.get("$field.SCORETYPE")));
\ No newline at end of file
diff --git a/entity/ClassificationType_entity/documentation.adoc b/entity/ClassificationType_entity/documentation.adoc
index 4b63abbd0ed13d766d3a223ac89f4707a3555f9b..a09562ce3a4c852c52ff3a616d3838531b041890 100644
--- a/entity/ClassificationType_entity/documentation.adoc
+++ b/entity/ClassificationType_entity/documentation.adoc
@@ -1,3 +1,48 @@
 = ClassificationType_entity
 
-Defines types for the classifications (see Classification_entity)
\ No newline at end of file
+Definition:
+
+    Stores the possible Indicators (classificationTypes).
+    (For more information about the classification see also Classification_entity)
+
+Purpose:
+
+    This entity is used for storing the indicators and making it possible for the admin to change 
+    the details of the indicator (classificationType) like the name, it's usage or it's classification (classificationGroup)
+
+    This entity only has one view: the ClassificationTypePreview which has the usage (object_type), 
+    classification (classificationgroup_Id), and title (scoretype)
+    and the ClassificationScoreMultipleEdit_view.
+    making it possible for the admin to configure something like this:
+
+    ClassificationAdminPreviewOfIndicator Example: 
+
+        USAGE:          Organisation
+        CLASSIFICATION: 1. Target Group
+        INDICATOR:      Headquarters
+         Germany         35,00, 10
+         Austria         35,00 20
+         Switzerland     25,00, 30
+         Other            0,00, 40
+
+Particularities:
+
+    The biggest possible score of the subordinated classificationScores is being used by classificationGrading to calculate the value for the best possible grade, 
+    if this value is changed the grading get's updated using the rule of three (see onInsert-, onUpdate- and onDelete- processes of classificationScore_entity).
+    
+    The Classification consists of the following entities:
+    Classification_entity,
+    ClassificationAdmin_entity,
+    ClassificationGrading_entity,
+    ClassificationGroup_entity,
+    ClassificationScore_entity,
+    ClassificationType_entity
+
+    Our terms in the db and entity structure differ from the technical terms the user gets to see, to make it easier to understand 
+    for the developer that doesn't have the technical know-how:
+
+    Our term:               Technical term:                 Example:
+    Object_Type             Usage                           Organisation
+    ClassificationGroup     Classification                  1. Target Group
+    ClassificationType      Indicator                       Industry
+    ClassificationScore     (Possible-)Value/Selection      Service
\ No newline at end of file
diff --git a/entity/ClassificationType_entity/entityfields/classificationgroup_id/displayValueProcess.js b/entity/ClassificationType_entity/entityfields/classificationgroup_id/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..dcd3cf5a9c6467169516adeb67ef468628df172a
--- /dev/null
+++ b/entity/ClassificationType_entity/entityfields/classificationgroup_id/displayValueProcess.js
@@ -0,0 +1,9 @@
+import("system.vars");
+import("Context_lib");
+import("system.result");
+
+var groupId = vars.get("$field.CLASSIFICATIONGROUP_ID");
+if(groupId != "" && groupId != undefined)
+    result.string(ContextUtils.loadContentTitle("ClassificationGroup_entity", groupId));
+else
+    result.string("")
\ No newline at end of file
diff --git a/entity/ClassificationType_entity/entityfields/classificationscores/children/classificationgroup_param/valueProcess.js b/entity/ClassificationType_entity/entityfields/classificationscores/children/classificationgroup_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..83df30fd1c6821c89dcf48519ebec595fc7078c3
--- /dev/null
+++ b/entity/ClassificationType_entity/entityfields/classificationscores/children/classificationgroup_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.CLASSIFICATIONGROUP_ID"));
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationscores/children/classificationtypeid_param/valueProcess.js b/entity/ClassificationType_entity/entityfields/classificationscores/children/classificationtypeid_param/valueProcess.js
similarity index 100%
rename from entity/ClassificationAdmin_entity/entityfields/classificationscores/children/classificationtypeid_param/valueProcess.js
rename to entity/ClassificationType_entity/entityfields/classificationscores/children/classificationtypeid_param/valueProcess.js
diff --git a/entity/ClassificationType_entity/entityfields/classificationtypeid/valueProcess.js b/entity/ClassificationType_entity/entityfields/classificationtypeid/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..268ab03c9af220bfb8b2ac3915197667b73f18b2
--- /dev/null
+++ b/entity/ClassificationType_entity/entityfields/classificationtypeid/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.result")
+import("system.vars")
+
+if(vars.exists("ObjectRowid_param"))
+    result.string(vars.get("ObjectRowid_param"));
\ No newline at end of file
diff --git a/entity/ClassificationType_entity/entityfields/classificationtypesforgroup/documentation.adoc b/entity/ClassificationType_entity/entityfields/classificationtypesforgroup/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..15bbce2b2ee994c354076d1b836c2384ebfde656
--- /dev/null
+++ b/entity/ClassificationType_entity/entityfields/classificationtypesforgroup/documentation.adoc
@@ -0,0 +1 @@
+Used for providing classification types per group.
\ No newline at end of file
diff --git a/entity/ClassificationType_entity/entityfields/infofield/valueProcess.js b/entity/ClassificationType_entity/entityfields/infofield/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..07815a1f88e787ef8647c0580f565279772f5efc
--- /dev/null
+++ b/entity/ClassificationType_entity/entityfields/infofield/valueProcess.js
@@ -0,0 +1,75 @@
+import("system.translate");
+import("Entity_lib");
+import("system.result");
+import("Sql_lib");
+import("system.vars");
+import("Classification_lib");
+import("system.eMath");
+
+//references needed for auto refresh:
+"$field.ClassificationScores.insertedRows";
+"$field.ClassificationScores.changedRows";
+"$field.ClassificationScores.deletedRows";
+
+var rows = EntityConsumerRowsHelper.getCurrentConsumerRows("ClassificationScores", ["SCORE"]);
+var maxScore = 0;
+var i;
+var randomScoreId;
+
+result.string(translate.text("Keep in Mind that changes to the Value with the greatest score directly affect the Classification Gradings of the Classification!"))
+if(rows.length > 0)
+{
+    for (i = 0; i < rows.length; i++) 
+    {
+        randomScoreId = rows[i]["#UID"];
+        break;
+    }
+    var classificationGroup = vars.get("$field.CLASSIFICATIONGROUP_ID");
+    var classificationType = ClassificationUtils.getClassificationType(randomScoreId);
+    var gradingTable = ClassificationUtils.getGradingTableByGroupId(classificationGroup);
+    for (i = 0; i < rows.length; i++) 
+        {
+            if(parseFloat(rows[i]["SCORE"]) > maxScore)
+                maxScore = parseFloat(rows[i]["SCORE"]);
+        }
+    if(classificationType.length > 0)
+    {
+        maxScore = eMath.addDec(parseFloat(maxScore), parseFloat(ClassificationUtils.getMaxScoreExcludeType(classificationGroup, classificationType)));
+    }
+    else
+    {
+        maxScore = eMath.addDec(parseFloat(maxScore), parseFloat(ClassificationUtils.getMaxScore(classificationGroup)));
+    }
+    
+    if(gradingTable.length > 0 && gradingTable != undefined && gradingTable != null)
+    {
+        var greatestGrading = gradingTable[0][1];
+        if(gradingTable[0][1] != maxScore)
+        {
+            var multiplicand;
+            var oldToNewValueString = "";
+            if(greatestGrading != 0)
+            {
+                multiplicand = maxScore/greatestGrading;
+                for (i = 0; i < gradingTable.length; i++) 
+                {
+                    oldToNewValueString += gradingTable[i][2] + ": " + gradingTable[i][1] + "->" + parseInt(gradingTable[i][1] * multiplicand) + "\n\
+            ";
+                }
+            }
+            else 
+            {
+                greatestGrading = maxScore;
+                multiplicand = 1;
+                for (i = 0; i < gradingTable.length; i++) 
+                {
+                    oldToNewValueString += gradingTable[i][2] + ": " + gradingTable[i][1] + "->" + greatestGrading * multiplicand + "\n\
+            ";
+                }
+            }
+            var resString = translate.text("This is how the Classification Gradings of the Classification will get affected by these changes:") + "\n\
+    "+ oldToNewValueString;
+            result.string(resString);
+        }
+    }
+}
\ No newline at end of file
diff --git a/entity/ClassificationType_entity/entityfields/maxscore/valueProcess.js b/entity/ClassificationType_entity/entityfields/maxscore/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..49d9c5de791ae6d83bb8a6f61da2927d509ebddd
--- /dev/null
+++ b/entity/ClassificationType_entity/entityfields/maxscore/valueProcess.js
@@ -0,0 +1,16 @@
+import("system.result");
+import("Sql_lib");
+import("system.vars");
+
+var classificationTypeId = vars.get("$field.CLASSIFICATIONTYPEID");
+
+var score = null;
+if (classificationTypeId)
+{
+    score = newSelect("max(CLASSIFICATIONSCORE.SCORE)")
+        .from("CLASSIFICATIONSCORE")
+        .where("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID", classificationTypeId)
+        .cell();
+}
+
+result.string(score);
\ No newline at end of file
diff --git a/entity/ClassificationType_entity/entityfields/object_type/displayValueProcess.js b/entity/ClassificationType_entity/entityfields/object_type/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..86c8786764dfb70e4874f95658d07af7aae99d50
--- /dev/null
+++ b/entity/ClassificationType_entity/entityfields/object_type/displayValueProcess.js
@@ -0,0 +1,9 @@
+import("system.translate");
+import("Sql_lib");
+import("Classification_lib");
+import("system.result");
+import("system.vars");
+
+var classificationType = vars.get("$this.value");
+                                
+result.string(translate.text(classificationType));
\ No newline at end of file
diff --git a/entity/ClassificationType_entity/entityfields/scoretype/displayValueProcess.js b/entity/ClassificationType_entity/entityfields/scoretype/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..29c6cf6dc29eb3898120f2e480fecc0cc2edbeec
--- /dev/null
+++ b/entity/ClassificationType_entity/entityfields/scoretype/displayValueProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("system.translate");
+import("system.vars");
+
+result.string(translate.text(vars.get("$this.value")));
\ No newline at end of file
diff --git a/entity/ClassificationType_entity/recordcontainers/db/cacheKeyProcess.js b/entity/ClassificationType_entity/recordcontainers/db/cacheKeyProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d6595b81408d7f508732c607760733e4e410da36
--- /dev/null
+++ b/entity/ClassificationType_entity/recordcontainers/db/cacheKeyProcess.js
@@ -0,0 +1,5 @@
+import("CachedRecordContainer_lib");
+import("system.result")
+
+var res = CachedRecordContainerUtils.getCommonKey("$param.ClassificationGroupId_param");
+result.string(res);
diff --git a/entity/ClassificationType_entity/recordcontainers/db/conditionProcess.js b/entity/ClassificationType_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..14721e02d30f3d70942c9a5cafa2b346958bb754
--- /dev/null
+++ b/entity/ClassificationType_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("system.result");
+import("Sql_lib");
+
+var cond = newWhereIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", "$param.ClassificationGroupId_param");
+result.string(cond.toString());
+
diff --git a/entity/ClassificationType_entity/recordcontainers/db/recordfieldmappings/maxscore.value/expression.js b/entity/ClassificationType_entity/recordcontainers/db/recordfieldmappings/maxscore.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..80e8d7e14a4b25f9f4c2461a0d736d5e03ae45ad
--- /dev/null
+++ b/entity/ClassificationType_entity/recordcontainers/db/recordfieldmappings/maxscore.value/expression.js
@@ -0,0 +1,10 @@
+import("system.result");
+import("system.result");
+import("Sql_lib");
+
+var statement = newSelect("max(CLASSIFICATIONSCORE.SCORE)")
+        .from("CLASSIFICATIONSCORE")
+        .where("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID = CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID");
+
+logging.log("statement.toString()>>" + statement.toString())
+result.string(statement.toString());
\ No newline at end of file
diff --git a/entity/Classification_entity/Classification_entity.aod b/entity/Classification_entity/Classification_entity.aod
index 5cdeeb7889b00980739f1a9f7b2194c4c7f66d05..011426f28c49b46e51582e167bf98d6a18abd991 100644
--- a/entity/Classification_entity/Classification_entity.aod
+++ b/entity/Classification_entity/Classification_entity.aod
@@ -51,7 +51,7 @@
           <isConsumer v="false" />
         </entityDependency>
         <entityDependency>
-          <name>c1521dc3-ba97-4e00-8d9b-a6fa46bef42d</name>
+          <name>ed17d4ca-1bdd-45b2-8a38-d7a73b1669e7</name>
           <entityName>Organisation_entity</entityName>
           <fieldName>Classifications</fieldName>
           <isConsumer v="false" />
@@ -64,7 +64,8 @@
     </entityField>
     <entityField>
       <name>CLASSIFICATIONGROUP</name>
-      <title>Group name</title>
+      <documentation>%aditoprj%/entity/Classification_entity/entityfields/classificationgroup/documentation.adoc</documentation>
+      <title>Classification</title>
       <contentType>TEXT</contentType>
       <groupable v="true" />
       <mandatoryProcess>%aditoprj%/entity/Classification_entity/entityfields/classificationgroup/mandatoryProcess.js</mandatoryProcess>
@@ -144,7 +145,7 @@
     </entityConsumer>
     <entityField>
       <name>SCORETYPE</name>
-      <title>Scoretype</title>
+      <title>Indicator</title>
       <mandatory v="true" />
       <displayValueProcess>%aditoprj%/entity/Classification_entity/entityfields/scoretype/displayValueProcess.js</displayValueProcess>
     </entityField>
@@ -159,6 +160,9 @@
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
     </entityProvider>
+    <entityField>
+      <name>CLASSIFICATIONGROUP_ID</name>
+    </entityField>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
@@ -178,9 +182,18 @@
         <jDitoRecordFieldMapping>
           <name>CLASSIFICATIONGROUP.value</name>
         </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>CLASSIFICATIONGROUP.displayValue</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>CLASSIFICATIONGROUP_ID.displayValue</name>
+        </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
           <name>CLASSIFICATIONSCORE_ID.value</name>
         </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>CLASSIFICATIONSCORE_ID.displayValue</name>
+        </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
           <name>CLASSIFICATIONTYPEID.value</name>
         </jDitoRecordFieldMapping>
@@ -188,10 +201,10 @@
           <name>CLASSIFICATIONTYPE_ID.value</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
-          <name>OBJECT_ROWID.value</name>
+          <name>OBJECT_TYPE.value</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
-          <name>OBJECT_TYPE.value</name>
+          <name>OBJECT_ROWID.value</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
           <name>SCORETYPE.value</name>
@@ -202,6 +215,9 @@
         <jDitoRecordFieldMapping>
           <name>SCORE_RESULTS.value</name>
         </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>GroupScore.value</name>
+        </jDitoRecordFieldMapping>
       </recordFieldMappings>
     </jDitoRecordContainer>
   </recordContainers>
diff --git a/entity/Classification_entity/afterOperatingState.js b/entity/Classification_entity/afterOperatingState.js
index 09213cf5619c0ad05c151b3eb5bcb3db792aba72..6ce8bdeeee1b7858a4475e780bc7ea61de0b3aa3 100644
--- a/entity/Classification_entity/afterOperatingState.js
+++ b/entity/Classification_entity/afterOperatingState.js
@@ -1,8 +1,9 @@
-import("system.vars");
-import("system.neon");
+/*
+ *this refresh should not be necessary:
+ */
 
-// "$local.value" contains the previous operationg state
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW && vars.get("$local.value") == neon.OPERATINGSTATE_EDIT) 
-{
-    neon.refreshAll()
-}
+//// "$local.value" contains the previous operationg state
+//if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW && vars.get("$local.value") == neon.OPERATINGSTATE_EDIT) 
+//{
+//    neon.refreshAll();
+//}
diff --git a/entity/Classification_entity/documentation.adoc b/entity/Classification_entity/documentation.adoc
index a233f0ddd65b389f852dd38257a5a091755c6da4..6fb30333ca4369806f0dd63d76773d4e580df977 100644
--- a/entity/Classification_entity/documentation.adoc
+++ b/entity/Classification_entity/documentation.adoc
@@ -1,3 +1,45 @@
 = Classification_entity
 
-Offers the possibility to flexibly classify sales projects. The classification can be dynamically configured at runtime.
\ No newline at end of file
+Definition:
+
+    Offers the possibility to flexibly classify sales projects, organisations, or any other data. 
+    The classification can be dynamically configured at runtime.
+
+Purpose:
+
+    Classifications get stored in the Classification table with their own uid, the ids of the classification type, classification score, object_rowId and object_type.
+
+    This entity displays the classification of an dataset in an treetable,
+    with the classification (classificationgroup), including the archieved and possible points and the resulting grading, as the groupfield.
+    And Columns for the indicators (classificationtype) and the selected values (selection).
+
+    Example: 
+                                                INDICATOR                   SELECTION
+        1. Target Group: 60/100Points = B
+                                                Industry                    Service
+                                                Headquarters                Germany
+                                                Product preference          Commodity group 1
+
+        2. Customer value: 15/100Points = D
+                                                Current supply share        High
+                                                Purchasing potential p. a.  100-199 D?
+                                                Loyalty                     Low
+
+Particularities:
+
+    The Classification consists of the following entities:
+    Classification_entity,
+    ClassificationAdmin_entity,
+    ClassificationGrading_entity,
+    ClassificationGroup_entity,
+    ClassificationScore_entity,
+    ClassificationType_entity
+
+    Our terms in the db and entity structure differ from the technical terms the user gets to see, to make it easier to understand 
+    for the developer that doesn't have the technical know-how:
+
+    Our term:               Technical term:                 Example:
+    Object_Type             Usage                           Organisation
+    ClassificationGroup     Classification                  1. Target Group
+    ClassificationType      Indicator                       Industry
+    ClassificationScore     (Possible-)Value/Selection      Service
diff --git a/entity/Classification_entity/entityfields/classificationgroup/displayValueProcess.js b/entity/Classification_entity/entityfields/classificationgroup/displayValueProcess.js
index deb00e8d5e8728ec0a1711fe5ab7752224af0646..d0b202c003896906849e53907d10e67333faf168 100644
--- a/entity/Classification_entity/entityfields/classificationgroup/displayValueProcess.js
+++ b/entity/Classification_entity/entityfields/classificationgroup/displayValueProcess.js
@@ -1,3 +1,4 @@
+import("Sql_lib");
 import("Classification_lib");
 import("system.translate");
 import("system.result");
@@ -7,8 +8,7 @@ if (vars.getString("$field.CLASSIFICATIONGROUP"))
 {
     var score = vars.getString("$field.GroupScore");
     var group = vars.getString("$field.CLASSIFICATIONGROUP");
-    var maxScore = ClassificationUtils.getMaxScore(group);
-    var classifications = ClassificationUtils.getClassifications(score, group);
-    
-    result.string(translate.withArguments("%0: %1/%2points = %3", [group, score, maxScore, classifications]));
+    var groupName = vars.getString("$field.CLASSIFICATIONGROUP_ID.displayValue");
+    var res = ClassificationUtils.formatDisplaySummaryForGroup(score, group, groupName);
+    result.string(res);
 }
diff --git a/entity/Classification_entity/entityfields/classificationgroup/documentation.adoc b/entity/Classification_entity/entityfields/classificationgroup/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..93bd1542a90b5187c8e0d0da47bfd24b144d9973
--- /dev/null
+++ b/entity/Classification_entity/entityfields/classificationgroup/documentation.adoc
@@ -0,0 +1 @@
+This is the field that is used for automatic grouping.
\ No newline at end of file
diff --git a/entity/Classification_entity/entityfields/classificationscore_id/titleProcess.js b/entity/Classification_entity/entityfields/classificationscore_id/titleProcess.js
index 7865e4544cd6eaba5d15e15937bffca31e2675fa..5f69ddae0ef78a61fc8be88201023c420f4dfb09 100644
--- a/entity/Classification_entity/entityfields/classificationscore_id/titleProcess.js
+++ b/entity/Classification_entity/entityfields/classificationscore_id/titleProcess.js
@@ -6,4 +6,4 @@ import("system.translate");
 if (vars.get("$sys.recordstate") && vars.get("$sys.recordstate") != neon.OPERATINGSTATE_VIEW)
 {
     result.string(translate.text(vars.get("$field.SCORETYPE")));
-}
\ No newline at end of file
+}
diff --git a/entity/Classification_entity/entityfields/classificationscores/children/classificationtype_param/valueProcess.js b/entity/Classification_entity/entityfields/classificationscores/children/classificationtype_param/valueProcess.js
index d3275a8eaa916bbbb9604617cb2fb5385bc01cfe..66d1a9ae5a70ffada860ab15cf8caffd67aea623 100644
--- a/entity/Classification_entity/entityfields/classificationscores/children/classificationtype_param/valueProcess.js
+++ b/entity/Classification_entity/entityfields/classificationscores/children/classificationtype_param/valueProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$field.CLASSIFICATIONTYPE"))
\ No newline at end of file
+result.string(vars.get("$field.OBJECT_TYPE"))
\ No newline at end of file
diff --git a/entity/Classification_entity/entityfields/classificationtype/displayValueProcess.js b/entity/Classification_entity/entityfields/classificationtype/displayValueProcess.js
index 9a93d9382887643fcc081de68214ba526ed930ac..55fc33359a0fc8b9496e9dc12f56e15eb3a7b4ce 100644
--- a/entity/Classification_entity/entityfields/classificationtype/displayValueProcess.js
+++ b/entity/Classification_entity/entityfields/classificationtype/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("Keyword_lib");
 import("KeywordRegistry_basic");
 
-result.string(KeywordUtils.getViewValue($KeywordRegistry.classificationType(), vars.get("$field.CLASSIFICATIONTYPE")));
\ No newline at end of file
+result.string(KeywordUtils.getViewValue($KeywordRegistry.classificationType(), vars.get("$field.OBJECT_TYPE")));
\ No newline at end of file
diff --git a/entity/Classification_entity/entityfields/classificationtype/stateProcess.js b/entity/Classification_entity/entityfields/classificationtype/stateProcess.js
index bcc88cc57c128d8971d6880133fb2584129a802e..2a616f4edfa3c6e68a81c8d99b17d08c353ceb69 100644
--- a/entity/Classification_entity/entityfields/classificationtype/stateProcess.js
+++ b/entity/Classification_entity/entityfields/classificationtype/stateProcess.js
@@ -1,11 +1,9 @@
 import("system.result");
 import("system.neon");
 import("system.vars");
+
 if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-{
     result.string(neon.COMPONENTSTATE_EDITABLE);
-}
+
 else
-{
-    result.string(neon.COMPONENTSTATE_READONLY);
-}
\ No newline at end of file
+    result.string(neon.COMPONENTSTATE_READONLY);
\ No newline at end of file
diff --git a/entity/Classification_entity/entityfields/classificationtype_id/valueProcess.js b/entity/Classification_entity/entityfields/classificationtype_id/valueProcess.js
index aaef9be6b3921ec62b37843d0c65b43aeedd7fdf..e294cffd162af0b88230b7052c38c407862add9e 100644
--- a/entity/Classification_entity/entityfields/classificationtype_id/valueProcess.js
+++ b/entity/Classification_entity/entityfields/classificationtype_id/valueProcess.js
@@ -2,7 +2,6 @@ import("system.result");
 import("system.neon");
 import("system.vars");
 
-if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) && vars.get("$this.value") == null)
-{
-    result.string(vars.get("$field.CLASSIFICATIONTYPEID"));
-}
\ No newline at end of file
+if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) 
+        && vars.get("$this.value") == null)
+    result.string(vars.get("$field.CLASSIFICATIONTYPEID"));
\ No newline at end of file
diff --git a/entity/Classification_entity/entityfields/object_rowid/valueProcess.js b/entity/Classification_entity/entityfields/object_rowid/valueProcess.js
index 00c91dc0b75c8cb002fa9eafe58ad40ab16a0e3a..fe14f896ec8a83c8570a94ad6b64c9585c122e99 100644
--- a/entity/Classification_entity/entityfields/object_rowid/valueProcess.js
+++ b/entity/Classification_entity/entityfields/object_rowid/valueProcess.js
@@ -2,7 +2,7 @@ import("system.result");
 import("system.neon");
 import("system.vars");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && vars.get("$this.value") == null)
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && vars.get("$this.value") == null && vars.get("$param.ObjectRowid_param"))
 {
     result.string(vars.get("$param.ObjectRowid_param"));
 }
\ No newline at end of file
diff --git a/entity/Classification_entity/entityfields/object_type/valueProcess.js b/entity/Classification_entity/entityfields/object_type/valueProcess.js
index 6a340688081d8317de45c8b656f6ffcbe9520e1e..f51252e64ad7fb10b50c67ab339385859219f11b 100644
--- a/entity/Classification_entity/entityfields/object_type/valueProcess.js
+++ b/entity/Classification_entity/entityfields/object_type/valueProcess.js
@@ -3,6 +3,4 @@ import("system.neon");
 import("system.vars");
 
 if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && vars.get("$this.value") == null)
-{
-    result.string(vars.get("$param.ObjectType_param"));
-}
\ No newline at end of file
+    result.string(vars.get("$param.ObjectType_param"));
\ No newline at end of file
diff --git a/entity/Classification_entity/recordcontainers/jdito/contentProcess.js b/entity/Classification_entity/recordcontainers/jdito/contentProcess.js
index 3c8b450298caee22b60b1f32337514057927164d..0827f9f533b96112b07307a62f704bdde271f52a 100644
--- a/entity/Classification_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Classification_entity/recordcontainers/jdito/contentProcess.js
@@ -1,62 +1,165 @@
-import("JditoFilter_lib");
+import("system.text");
 import("Classification_lib");
-import("system.vars");
+import("Contact_lib");
+import("JditoFilter_lib");
 import("Sql_lib");
 import("system.db");
 import("system.result");
+import("system.util");
+import("system.vars");
+import("system.translate");
 
-var scores = JSON.stringify(ClassificationUtils.getScoreAsObject(vars.get("$param.ClassificationType_param"), vars.get("$param.ObjectType_param"), vars.get("$param.ObjectRowid_param")));
+//helper object for coding/decoding the uid of a record in this entity
+function _UidEncoder(){}
 
-var classificationId = null;
-var classificationTypeId = null;
+_UidEncoder.encode = function (pClassifactionTypeId, pObjectRowId, pObjectType)
+{
+    var res = text.encodeMS(Array.from(arguments));
+    return res;
+}
 
-// if the id starts with "C," it is a classificationId. If it starts with "T,", it is a classificationtypeId
-if (vars.exists("$local.idvalues") && vars.get("$local.idvalues") && vars.get("$local.idvalues").length > 0)
+_UidEncoder.decode = function (pEncodedUid)
 {
-    var selected = vars.get("$local.idvalues")[0].split(",");
-    if (selected.length == 2)
-    {
-        if (selected[0] == 'C')
-            classificationId = selected[1]
-        else if (selected[0] == 'T')
-            classificationTypeId = selected[1]
-    }
+    var vals = text.decodeMS(pEncodedUid);
+    return {
+        classifactionTypeId: vals[0],
+        objectRowId: vals[1],
+        objectType: vals[2]
+    };
 }
 
+//grouping is not done in this recordContainer but in it is done in the ClassificaitonTree_view via the defaultGroupFields
+
+var objectRowIdParam = vars.get("$param.ObjectRowid_param");
+var objectTypeParam = vars.get("$param.ObjectType_param");
+var scoresPerGroup = ClassificationUtils.getScoreAsObject(objectTypeParam, objectRowIdParam);
+
 var masking = new SqlMaskingUtils();
 
-var select = newSelect("case when CLASSIFICATIONID is not null then " + masking.concat(["'C,'", "CLASSIFICATIONID"], "", false) + " else " + masking.concat(["'T,'", "CLASSIFICATIONTYPEID"], "", false) + " end, CLASSIFICATIONID, CLASSIFICATIONGROUP, CLASSIFICATIONSCORE_ID, CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE_ID, OBJECT_TYPE, OBJECT_ROWID, SCORETYPE, CLASSIFICATIONTYPE.CLASSIFICATIONTYPE")
+//store the content of $local.idValues depending on the provided type in the idvalues
+var filterClassificationIds = [];
+var filterClassificationTypeIds = [];
+// if the id starts with "C," it is a classificationId. If it starts with "T,", it is a classificationtypeId
+if (vars.exists("$local.idvalues") && vars.get("$local.idvalues"))
+{
+    vars.get("$local.idvalues").forEach(function (pIdValue) {
+        var decodedId = _UidEncoder.decode(pIdValue);
+        filterClassificationTypeIds.push(decodedId.classifactionTypeId);
+    });
+}
+
+//this is the main select for the data
+var select = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID \n\
+                    ,CLASSIFICATION.CLASSIFICATIONID, CLASSIFICATION.CLASSIFICATIONSCORE_ID, CLASSIFICATION.OBJECT_ROWID \n\
+                    ,CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONTYPE.SCORETYPE \n\
+                    ,CLASSIFICATIONSCORE.TITLE\n\
+                    ,CLASSIFICATIONGROUP.TITLE ")
                 .from("CLASSIFICATION")
                 .rightJoin("CLASSIFICATIONTYPE", newWhere()
-                    .and("CLASSIFICATIONTYPE_ID = CLASSIFICATIONTYPEID")
+                    .and("CLASSIFICATION.CLASSIFICATIONTYPE_ID = CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID")
                     .andIfSet("CLASSIFICATION.OBJECT_TYPE", "$param.ObjectType_param")
-                    .andIfSet("CLASSIFICATION.OBJECT_ROWID", "$param.ObjectRowid_param"))
-                .orderBy("CLASSIFICATIONGROUP asc")
-                .whereIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONTYPE", "$param.ClassificationType_param")
-                .andIfSet("CLASSIFICATION.CLASSIFICATIONID", classificationId)
+                    .andIfSet("CLASSIFICATION.OBJECT_ROWID", objectRowIdParam))
+                .join("CLASSIFICATIONGROUP", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID")
+                .leftJoin("CLASSIFICATIONSCORE", "CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID = CLASSIFICATION.CLASSIFICATIONSCORE_ID")
+                .whereIfSet("CLASSIFICATIONTYPE.OBJECT_TYPE", "$param.ClassificationType_param")
+                .andIfSet(
+                        newWhereIfSet("CLASSIFICATION.CLASSIFICATIONID", filterClassificationIds, SqlBuilder.IN())
+                             .orIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", filterClassificationTypeIds, SqlBuilder.IN())
+                    )
+                .orderBy("CLASSIFICATIONGROUP.SORTING");
 
 
-if (!classificationId)
+if (filterClassificationIds.length == 0 && filterClassificationTypeIds.length == 0)//no idvalues for filtering
 {
-    select.andIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypeId)
-        .and(newWhereIfSet("CLASSIFICATION.OBJECT_TYPE", "$param.ObjectType_param")
+    select.and(newWhereIfSet("CLASSIFICATION.OBJECT_TYPE", "$param.ObjectType_param")
                     .or("CLASSIFICATION.OBJECT_TYPE is null"))
-        .and(newWhereIfSet("CLASSIFICATION.OBJECT_ROWID", "$param.ObjectRowid_param")
+            .and(newWhereIfSet("CLASSIFICATION.OBJECT_ROWID", objectRowIdParam)
                     .or("CLASSIFICATION.OBJECT_ROWID is null"));
 }
 
-if (vars.exists("$local.filter") && vars.get("$local.filter"))
+_addLocalFilter();
+_updateScore();
+
+/* After loading the data from the database the data some preparation for the record container is done like translating display values into the 
+ * correct locale or calculating some values
+ */
+var classificationTypeGroupDisplayCache = {};
+var resultSet = [];
+//declaration needs to be separated because if declaration is done in the deconstructioning the IDE (designer) autocomplete does not work anymore
+var uid, classificationId, classificationScoreId, classificationObjectRowId, classificationTypeGroupId, classificationTypeId
+    , classificationTypeObjectType, classificationTypeScoreType, classificationScoreTitle, classificationGroupTitle;
+select.table().forEach(function (pRow){
+    //deconstructioning for easy access when the selected data changes
+    [uid, classificationId, classificationScoreId, classificationObjectRowId, classificationTypeGroupId, classificationTypeId
+    , classificationTypeObjectType, classificationTypeScoreType, classificationScoreTitle, classificationGroupTitle] = pRow;
+    
+    uid = _UidEncoder.encode(uid, objectRowIdParam, objectTypeParam);
+    if (classificationScoreTitle)
+        classificationScoreTitle = translate.text(classificationScoreTitle);
+    if (classificationGroupTitle)
+        classificationGroupTitle = translate.text(classificationGroupTitle);
+
+    var currentGroupScore = scoresPerGroup[classificationTypeGroupId] || 0;
+
+    //display value is the same for every groupId, so let's cache it that we do not need to load it in every row  => better performance
+    if (classificationTypeGroupDisplayCache[classificationTypeGroupId] == undefined)
+    {
+        classificationTypeGroupDisplayCache[classificationTypeGroupId] = ClassificationUtils.formatDisplaySummaryForGroup(currentGroupScore
+                , classificationTypeGroupId, classificationGroupTitle);
+    }
+    var classificationTypeGroupDisplay = classificationTypeGroupDisplayCache[classificationTypeGroupId];
+
+    //a field can only contain a string so format complex data into string
+    scoresPerGroup = JSON.stringify(scoresPerGroup);
+
+    resultSet.push([uid, classificationId, classificationTypeGroupId, classificationTypeGroupDisplay, classificationGroupTitle
+        , classificationScoreId, classificationScoreTitle, classificationTypeId, classificationTypeId, classificationTypeObjectType
+        , objectRowIdParam, classificationTypeScoreType, classificationTypeObjectType, scoresPerGroup, currentGroupScore]);
+});
+
+result.object(resultSet);
+
+/* private helper functions for better readability are following now
+ * variable scope is shared so there is no need to pass the values as parameters
+ */
+
+/**
+ * adds the $local.filter to the sql condition
+ */
+function _addLocalFilter()
 {
-    var filter = vars.get("$local.filter");
-    if (filter.filter)
-        select.andIfSet((JditoFilterUtils.getSqlCondition(filter.filter, "CLASSIFICATION", undefined, {
-             CLASSIFICATIONTYPE : "CLASSIFICATIONTYPE.CLASSIFICATIONTYPE"
-        })));
+    if (vars.exists("$local.filter") && vars.get("$local.filter"))
+    {
+        var filter = vars.get("$local.filter");
+        if (filter.filter)
+            select.andIfSet((JditoFilterUtils.getSqlCondition(filter.filter, "CLASSIFICATION", undefined, {
+                OBJECT_TYPE : "CLASSIFICATIONTYPE.OBJECT_TYPE"
+            })));
+    }
 }
 
-result.object(select.table()
-                    .map(function(pRow)
-                    {
-                        pRow.push(scores);
-                        return pRow;
-                    }));
\ No newline at end of file
+
+/**
+ * performs an update in  the precalculated classification-stoarge information if there is a missmatch between the IS-value and the SHOULD-BE-value
+ */
+function _updateScore()
+{
+    var calculatedScore = ClassificationUtils.getScore(objectTypeParam, objectRowIdParam)
+
+    var calculatedClassification = "";
+    for (let i = 0; i < calculatedScore.length; i++) {
+        calculatedClassification += ClassificationUtils.getClassifications(calculatedScore[i][0], calculatedScore[i][1]);
+    }
+
+    var storedClassification = newSelect("CLASSIFICATIONSTORAGE.CLASSIFICATIONSTORAGEID, CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE ")
+    .from("CLASSIFICATIONSTORAGE")
+    .where("CLASSIFICATIONSTORAGE.OBJECT_ROWID", objectRowIdParam)
+    .arrayRow();
+
+    var table = "CLASSIFICATIONSTORAGE";
+    var columns = ["CLASSIFICATIONVALUE"];
+    var values = [calculatedClassification];
+
+    if(storedClassification[1] != undefined && calculatedClassification != storedClassification[1]) //Update the stored classification if the freshly calculated one differs
+        newWhere("CLASSIFICATIONSTORAGE.CLASSIFICATIONSTORAGEID", storedClassification[0]).updateData(true, table, columns, null, values);
+}
\ No newline at end of file
diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
index 4a37e03e28c89a8118fe06dec3daea05a3b1e002..2d7eb1b4f14ab3e046d8ec7cbe51e4b26917b75c 100644
--- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod
+++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
@@ -385,12 +385,6 @@
           <fieldName>KeywordCampaignManagementCostCategory</fieldName>
           <isConsumer v="false" />
         </entityDependency>
-        <entityDependency>
-          <name>63bd7284-e9a0-4576-afe8-299d412e8def</name>
-          <entityName>ClassificationAdmin_entity</entityName>
-          <fieldName>KeywordClassificationTypes</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
         <entityDependency>
           <name>3a81e886-0d83-47f0-9ec7-c864ffc57cda</name>
           <entityName>Classification_entity</entityName>
diff --git a/entity/KeywordEntry_entity/entityfields/expanded/valueProcess.js b/entity/KeywordEntry_entity/entityfields/expanded/valueProcess.js
index dcb435b5f5508a654ce8c39f81aa6dd9c74fb323..c2ad10b5f03f2c193bf611ba705dbf9c081f29eb 100644
--- a/entity/KeywordEntry_entity/entityfields/expanded/valueProcess.js
+++ b/entity/KeywordEntry_entity/entityfields/expanded/valueProcess.js
@@ -1,3 +1,3 @@
 import("system.result");
 
-result.object(false);
\ No newline at end of file
+result.object(true);
\ No newline at end of file
diff --git a/entity/Notification_entity/Notification_entity.aod b/entity/Notification_entity/Notification_entity.aod
index 0f90322477a103240fcb2b2bcf842b516baf0c92..c6d31ac7fdd70706d675966e937757d9e2957097 100644
--- a/entity/Notification_entity/Notification_entity.aod
+++ b/entity/Notification_entity/Notification_entity.aod
@@ -176,13 +176,6 @@
       <orderClauseProcess>%aditoprj%/entity/Notification_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
       <onDBDelete>%aditoprj%/entity/Notification_entity/recordcontainers/db/onDBDelete.js</onDBDelete>
       <linkInformation>
-        <linkInformation>
-          <name>c4e34b96-6081-4d04-8377-040a8ed3e14c</name>
-          <tableName>ASYS_NOTIFICATIONS</tableName>
-          <primaryKey>ID</primaryKey>
-          <isUIDTable v="true" />
-          <readonly v="false" />
-        </linkInformation>
         <linkInformation>
           <name>38bfb16c-bfe9-45dd-8ce7-692ebba030a9</name>
           <tableName>ASYS_NOTIFICATIONCONTENTS</tableName>
diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod
index 8a881b9f62138901232fcd975438b502ec4cb77f..c46cee54a67ba71293b60433d3473dd8c5fcda90 100644
--- a/entity/Organisation_entity/Organisation_entity.aod
+++ b/entity/Organisation_entity/Organisation_entity.aod
@@ -248,6 +248,7 @@
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER</name>
+      <sortingField>NAME</sortingField>
       <dependencies>
         <entityDependency>
           <name>1a472ca0-4d27-453c-8de5-a046b86f22fb</name>
@@ -825,11 +826,6 @@
       <colorProcess>%aditoprj%/entity/Organisation_entity/entityfields/lastactivity/colorProcess.js</colorProcess>
       <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/lastactivity/valueProcess.js</valueProcess>
     </entityField>
-    <entityField>
-      <name>OpenTasks</name>
-      <title>Open tasks</title>
-      <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/opentasks/valueProcess.js</valueProcess>
-    </entityField>
     <entityActionField>
       <name>openEditDefaultsView</name>
       <documentation>%aditoprj%/entity/Organisation_entity/entityfields/openeditdefaultsview/documentation.adoc</documentation>
@@ -1112,6 +1108,7 @@
     </entityActionField>
     <entityConsumer>
       <name>Classifications</name>
+      <refreshParent v="false" />
       <dependency>
         <name>dependency</name>
         <entityName>Classification_entity</entityName>
@@ -1135,31 +1132,6 @@
         </entityParameter>
       </children>
     </entityConsumer>
-    <entityConsumer>
-      <name>ClassificationGroups</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>ClassificationGroupAnalyses_entity</entityName>
-        <fieldName>GroupAnalyses</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>ClassificationType_param</name>
-          <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/classificationgroups/children/classificationtype_param/valueProcess.js</valueProcess>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>ObjectRowid_param</name>
-          <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/classificationgroups/children/objectrowid_param/valueProcess.js</valueProcess>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>ObjectType_param</name>
-          <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/classificationgroups/children/objecttype_param/valueProcess.js</valueProcess>
-          <expose v="true" />
-        </entityParameter>
-      </children>
-    </entityConsumer>
     <entityField>
       <name>COUNT</name>
       <title>Count</title>
@@ -1170,6 +1142,11 @@
       <parentField>COUNT</parentField>
       <title>Count</title>
     </entityAggregateField>
+    <entityField>
+      <name>CLASSIFICATIONSTORAGE_ID</name>
+      <title>Classification</title>
+      <groupable v="true" />
+    </entityField>
     <entityProvider>
       <name>OrganisationsViaIndex</name>
       <documentation>%aditoprj%/entity/Organisation_entity/entityfields/organisationsviaindex/documentation.adoc</documentation>
@@ -1267,26 +1244,33 @@
       <onDBDelete>%aditoprj%/entity/Organisation_entity/recordcontainers/db/onDBDelete.js</onDBDelete>
       <linkInformation>
         <linkInformation>
-          <name>5808a4a3-f2c1-4ccd-bad1-4e8a834ec7a4</name>
+          <name>f63d7d1a-118a-4cc1-9963-495f57468f8d</name>
           <tableName>ORGANISATION</tableName>
           <primaryKey>ORGANISATIONID</primaryKey>
           <isUIDTable v="false" />
           <readonly v="false" />
         </linkInformation>
         <linkInformation>
-          <name>5cd93c60-47e5-4eaa-90a4-69990f6a7d00</name>
+          <name>3cca93ac-fb3b-4dae-933e-0ee1e8c84260</name>
           <tableName>CONTACT</tableName>
           <primaryKey>CONTACTID</primaryKey>
           <isUIDTable v="true" />
           <readonly v="false" />
         </linkInformation>
         <linkInformation>
-          <name>23fa4717-b401-48db-92ed-285aeab71f08</name>
+          <name>c0bcece8-306a-47ac-a406-7e42014fa4d7</name>
           <tableName>ADDRESS</tableName>
           <primaryKey>ADDRESSID</primaryKey>
           <isUIDTable v="false" />
           <readonly v="true" />
         </linkInformation>
+        <linkInformation>
+          <name>c00213e6-4f5d-41df-a5f3-fd751a46e94b</name>
+          <tableName>CLASSIFICATIONSTORAGE</tableName>
+          <primaryKey>CLASSIFICATIONSTORAGEID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
       </linkInformation>
       <recordFieldMappings>
         <dbRecordFieldMapping>
@@ -1465,6 +1449,12 @@
           <recordfield>ORGANISATION.ORGANISATIONID</recordfield>
           <aggregateType>COUNT</aggregateType>
         </aggregateFieldDbMapping>
+        <dbRecordFieldMapping>
+          <name>CLASSIFICATIONSTORAGE_ID.value</name>
+          <recordfield>CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE</recordfield>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>STANDARD_LAT.value</name>
           <recordfield>ADDRESS.LAT</recordfield>
@@ -1482,6 +1472,24 @@
           <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js</filterConditionProcess>
           <filtertype>BASIC</filtertype>
         </filterExtensionSet>
+        <filterExtensionSet>
+          <name>ClassificationType_filter</name>
+          <filterFieldsProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterFieldsProcess.js</filterFieldsProcess>
+          <filterValuesProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterValuesProcess.js</filterValuesProcess>
+          <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js</filterConditionProcess>
+          <isGroupable v="true" />
+          <groupQueryProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js</groupQueryProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtensionSet>
+        <filterExtensionSet>
+          <name>ClassificationGroup_filter</name>
+          <filterFieldsProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterFieldsProcess.js</filterFieldsProcess>
+          <filterValuesProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterValuesProcess.js</filterValuesProcess>
+          <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterConditionProcess.js</filterConditionProcess>
+          <isGroupable v="true" />
+          <groupQueryProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/groupQueryProcess.js</groupQueryProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtensionSet>
       </filterExtensions>
     </dbRecordContainer>
     <indexRecordContainer>
diff --git a/entity/Organisation_entity/entityfields/classificationgroups/children/classificationtype_param/valueProcess.js b/entity/Organisation_entity/entityfields/classificationgroups/children/classificationtype_param/valueProcess.js
deleted file mode 100644
index 051bc0a8272ab51e6ed2062791876bbf88fb349d..0000000000000000000000000000000000000000
--- a/entity/Organisation_entity/entityfields/classificationgroups/children/classificationtype_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("KeywordRegistry_basic");
-import("system.result");
-
-result.string($KeywordRegistry.classificationType$organisation());
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/classificationgroups/children/objectrowid_param/valueProcess.js b/entity/Organisation_entity/entityfields/classificationgroups/children/objectrowid_param/valueProcess.js
deleted file mode 100644
index 533f8ec837ea2f9b588ddf05545ac47cdda23d18..0000000000000000000000000000000000000000
--- a/entity/Organisation_entity/entityfields/classificationgroups/children/objectrowid_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.vars");
-import("system.result");
-
-result.string(vars.get("$sys.uid"));
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/classificationgroups/children/objecttype_param/valueProcess.js b/entity/Organisation_entity/entityfields/classificationgroups/children/objecttype_param/valueProcess.js
deleted file mode 100644
index 008915f61deac19ccdd40fff81701de63eb3b6a2..0000000000000000000000000000000000000000
--- a/entity/Organisation_entity/entityfields/classificationgroups/children/objecttype_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.result");
-import("Context_lib");
-
-result.string(ContextUtils.getCurrentContextId());
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/classifications/children/objectrowid_param/valueProcess.js b/entity/Organisation_entity/entityfields/classifications/children/objectrowid_param/valueProcess.js
index 533f8ec837ea2f9b588ddf05545ac47cdda23d18..7b6137b4d105e9ba592cf8ef6e796fb838a32b09 100644
--- a/entity/Organisation_entity/entityfields/classifications/children/objectrowid_param/valueProcess.js
+++ b/entity/Organisation_entity/entityfields/classifications/children/objectrowid_param/valueProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$sys.uid"));
\ No newline at end of file
+result.string(vars.get("$field.CONTACTID"));
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/classificationstorage_id/valueProcess.js b/entity/Organisation_entity/entityfields/classificationstorage_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f7db7e7050addd11b9d00962df938b3586435a4b
--- /dev/null
+++ b/entity/Organisation_entity/entityfields/classificationstorage_id/valueProcess.js
@@ -0,0 +1,10 @@
+//import("Sql_lib");
+//import("system.result");
+//import("system.vars");
+//
+//var classification = newSelect("CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE")
+//                                .from("CLASSIFICATIONSTORAGE")
+//                                .where("CLASSIFICATIONSTORAGE.OBJECT_ROWID", vars.get("$field.ORGANISATIONID"))
+//                                .cell();
+//                                
+//result.string(classification);
diff --git a/entity/Organisation_entity/entityfields/opentasks/valueProcess.js b/entity/Organisation_entity/entityfields/opentasks/valueProcess.js
deleted file mode 100644
index 496146a7378b47fc4c6dd676665f5bc8c4ee8e83..0000000000000000000000000000000000000000
--- a/entity/Organisation_entity/entityfields/opentasks/valueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.vars");
-import("Context_lib");
-import("ActivityTask_lib");
-import("system.result");
-
-result.string(TaskUtils.getOpenTaskCount(vars.get("$field.CONTACTID"), ContextUtils.getCurrentContextId()));
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ef0d44ef34942a6219d4ae0f3c5cb66f34847555
--- /dev/null
+++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterConditionProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("ClassificationFilter_lib");
+
+var sqlCond = ClassificationGroupFilterUtils.makeFilterConditionSql();
+
+result.string(sqlCond);
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterFieldsProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterFieldsProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f4082997e0ffed652aa150ae87c52a258d0b481c
--- /dev/null
+++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterFieldsProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("ClassificationFilter_lib");
+
+//this filterExtensionSet is for the Classifications (ClassificationGroups, e.g. 1. Target Group, Customer Value...)
+var fields = ClassificationGroupFilterUtils.makeFilterFields();
+
+result.string(fields);
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterValuesProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterValuesProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..447f4c037255ee7dcbeb6eb0a39007733806d71c
--- /dev/null
+++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterValuesProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("ClassificationFilter_lib");
+
+var values = ClassificationGroupFilterUtils.makeFilterValues();
+result.object(values);
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/groupQueryProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/groupQueryProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..343227e54a7b289f7954ede7bbe7f405a2890e40
--- /dev/null
+++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/groupQueryProcess.js
@@ -0,0 +1,23 @@
+import("system.translate");
+import("Sql_lib");
+import("system.result");
+import("system.vars");
+import("system.logging");
+logging.log("classificationgroup_filter.groupQueryProcess");
+var isCount = vars.get("$local.count");             // TRUE if the count of the records is needed
+var columns = vars.get("$local.columnlist");        // The column, expected from the querry, see also AttributeFilter_lib
+var condition = vars.get("$local.condition");       // The Condition that's beeing used, includes the grouphirachy
+var groupedColumns = vars.get("$local.groupedlist") // The coloumns, used for grouping
+var order = vars.get("$local.order");               // The order of the result
+var classificationId = vars.get("$local.name");
+classificationId = classificationId.slice(classificationId.lastIndexOf(".") + 1, classificationId.length);
+
+var stmt = newSelect(isCount ? groupedColumns : columns)
+                    .from("ORGANISATION")
+                    .join("CONTACT", "ORGANISATIONID = ORGANISATION_ID  and PERSON_ID is null")
+                    .leftJoin("CLASSIFICATIONSTORAGE", "CLASSIFICATIONSTORAGE.OBJECT_ROWID = CONTACT.CONTACTID and OBJECT_TYPE = 'Organisation'")
+                    .where(condition)
+                    .groupBy(groupedColumns)
+                    .toString();
+                    
+result.string(stmt);
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..5875efb7699dfc5aaa3b567c912990895b03eded
--- /dev/null
+++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("ClassificationFilter_lib");
+
+var sqlCond = ClassificationTypeFilterUtils.makeFilterConditionSql();
+
+result.string(sqlCond);
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterFieldsProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterFieldsProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..eebe4d838230a9702e630d919349e7c5aceefb9f
--- /dev/null
+++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterFieldsProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.result");
+import("ClassificationFilter_lib");
+
+//this filterExtensionSet is for the Indicators (ClassificationTypes, e.g. Industry, Loyality, Number of employees...)
+var fields = ClassificationTypeFilterUtils.getFilterFields(vars.get("$sys.currentcontextname"));
+
+result.string(fields);
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterValuesProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterValuesProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..488499064a9bdd69b939b834b9a8c642bae09484
--- /dev/null
+++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterValuesProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("ClassificationFilter_lib");
+
+var values = ClassificationTypeFilterUtils.makeFilterFields();
+result.object(values);
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ccf8f498ce2171f22150fbf2c26e89f495ba169b
--- /dev/null
+++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js
@@ -0,0 +1,25 @@
+import("system.translate");
+import("Sql_lib");
+import("system.result");
+import("system.vars");
+import("system.logging");
+
+var isCount = vars.get("$local.count");             // TRUE if the count of the records is needed
+var columns = vars.get("$local.columnlist");        // The column, expected from the querry, see also AttributeFilter_lib
+var condition = vars.get("$local.condition");       // The Condition that's beeing used, includes the grouphirachy
+var groupedColumns = vars.get("$local.groupedlist") // The coloumns, used for grouping
+var order = vars.get("$local.order");               // The order of the result
+var classificationId = vars.get("$local.name");
+classificationId = classificationId.slice(classificationId.lastIndexOf(".") + 1, classificationId.length);
+var valuefield = "''"
+var stmt = "";
+
+stmt = newSelect(isCount ? "1" : columns)
+                    .from("ORGANISATION")
+                    .join("CONTACT", "ORGANISATIONID = ORGANISATION_ID  and PERSON_ID is null")
+                    .leftJoin("CLASSIFICATION", "CLASSIFICATION.OBJECT_ROWID = CONTACT.CONTACTID and OBJECT_TYPE = 'Organisation' and CLASSIFICATION.CLASSIFICATIONTYPE_ID = '" + classificationId + "' ")
+                    .leftJoin("CLASSIFICATIONSCORE", "CLASSIFICATIONSCOREID = CLASSIFICATION.CLASSIFICATIONSCORE_ID " +  (condition != "  " ? " WHERE " + condition : ""))
+                    .groupBy(groupedColumns + (order != null && !isCount ? " ORDER BY " + order : ""))
+                    .toString();
+
+result.string(stmt);
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/fromClauseProcess.js b/entity/Organisation_entity/recordcontainers/db/fromClauseProcess.js
index 81779a42ee9e845df049275fd8bdf352063e1d4a..f743fde17b2c783b6afdd3f016d19e3cef97d592 100644
--- a/entity/Organisation_entity/recordcontainers/db/fromClauseProcess.js
+++ b/entity/Organisation_entity/recordcontainers/db/fromClauseProcess.js
@@ -1,6 +1,8 @@
 import("system.result");
 
 //ADDRESS is necessary to display standard address fast within organisation lists
+//CLASSIFICATIONSTORAGE is necessaray to make it possible to get the classifications of the organisations and making it possible to group by them
 result.string("ORGANISATION \n\
     join CONTACT on (ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID and CONTACT.PERSON_ID is null)\n\
-    left join ADDRESS on (ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID)");
\ No newline at end of file
+    left join ADDRESS on (ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID)\n\
+    left join CLASSIFICATIONSTORAGE on (CLASSIFICATIONSTORAGE.OBJECT_ROWID = CONTACT.CONTACTID)");
\ 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 ea3ae0e08a4540d451f6330b612f0612092c49f6..4286e03eb2abd75c156c4b4c45eda9f16f8e084e 100644
--- a/entity/Organisation_entity/recordcontainers/db/onDBDelete.js
+++ b/entity/Organisation_entity/recordcontainers/db/onDBDelete.js
@@ -15,5 +15,6 @@ new AttributeRelationQuery(contactId, null, ContextUtils.getCurrentContextId())
 newWhere("COMMUNICATION.CONTACT_ID", contactId).deleteData();
 newWhere("ADDRESS.CONTACT_ID", contactId).deleteData();
 newWhere("COMMRESTRICTION.CONTACT_ID", contactId).deleteData();
+newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", vars.get("$field.CONTACTID")).deleteData();
 
 WorkflowSignalSender.deleted();
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/onDBInsert.js b/entity/Organisation_entity/recordcontainers/db/onDBInsert.js
index 54f0349c9f1ddaab6b25f85f758d52928df41847..434601a60b8df854ee2910909a9c22d187266dd9 100644
--- a/entity/Organisation_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/Organisation_entity/recordcontainers/db/onDBInsert.js
@@ -1,3 +1,13 @@
+import("system.vars");
+import("Classification_lib");
 import("Workflow_lib");
 
+
+var uid = vars.get("$sys.uid");
+var contextname = vars.get("$sys.currentcontextname");
+
+ClassificationUtils.insertEmptyClassification(uid, contextname);
+
+//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/Organisation_entity/recordcontainers/index/query.js b/entity/Organisation_entity/recordcontainers/index/query.js
index b42325af7f5803de7cbc28f16d39f8a15e6eed4f..e860656afa302d7770bf1415039757fa9d833d48 100644
--- a/entity/Organisation_entity/recordcontainers/index/query.js
+++ b/entity/Organisation_entity/recordcontainers/index/query.js
@@ -50,7 +50,7 @@ var querySelect = newSelect([
         .and(["COMMUNICATION", "MEDIUM_ID", "phone"], commMediumPhoneIds, SqlBuilder.IN()), "phone")
     .where("CONTACT.STATUS", $KeywordRegistry.contactStatus$inactive(), SqlBuilder.NOT_EQUAL());
 
-if (vars.exists("$local.idvalue"))
-    querySelect.whereIfSet("CONTACT.CONTACTID", "$local.idvalue");
+if (vars.exists("$local.idvalue") && vars.get("$local.idvalue") && vars.get("$local.idvalue").length > 0) 
+    querySelect.and("CONTACT.CONTACTID", "$local.idvalue");
 
 result.string(querySelect.toString());
diff --git a/entity/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod
index e176d149515c400570a4bb5259ade420b24ae6b0..cdbe5d085655eebc2915926c2bb6b6e658496edf 100644
--- a/entity/Salesproject_entity/Salesproject_entity.aod
+++ b/entity/Salesproject_entity/Salesproject_entity.aod
@@ -595,6 +595,7 @@
     </entityConsumer>
     <entityConsumer>
       <name>Classifications</name>
+      <refreshParent v="true" />
       <dependency>
         <name>dependency</name>
         <entityName>Classification_entity</entityName>
@@ -625,13 +626,6 @@
       <title>Days running</title>
       <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/runtime/valueProcess.js</valueProcess>
     </entityField>
-    <entityField>
-      <name>ClassificationResult</name>
-      <title>Classification</title>
-      <groupable v="false" />
-      <state>READONLY</state>
-      <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/classificationresult/valueProcess.js</valueProcess>
-    </entityField>
     <entityConsumer>
       <name>SalesprojectForecastCharts</name>
       <dependency>
@@ -676,8 +670,6 @@
       <name>ClassificationGroups</name>
       <dependency>
         <name>dependency</name>
-        <entityName>ClassificationGroupAnalyses_entity</entityName>
-        <fieldName>GroupAnalyses</fieldName>
       </dependency>
       <children>
         <entityParameter>
@@ -774,6 +766,10 @@
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
     </entityProvider>
+    <entityField>
+      <name>CLASSIFICATIONSTORAGE_ID</name>
+      <title>Classification</title>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -787,19 +783,26 @@
       <onDBDelete>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/onDBDelete.js</onDBDelete>
       <linkInformation>
         <linkInformation>
-          <name>02eb2f4c-3b85-409f-ac13-c8b26804da44</name>
+          <name>c8b6f1e0-630c-45d1-bdfb-d1eb3f6d6bef</name>
           <tableName>SALESPROJECT</tableName>
           <primaryKey>SALESPROJECTID</primaryKey>
           <isUIDTable v="true" />
           <readonly v="false" />
         </linkInformation>
         <linkInformation>
-          <name>485af2f8-d91d-442f-89c7-c44915dda990</name>
+          <name>5f687ee0-15eb-4e19-aa5a-461c446e7d91</name>
           <tableName>ORGANISATION</tableName>
           <primaryKey>ORGANISATIONID</primaryKey>
           <isUIDTable v="false" />
           <readonly v="true" />
         </linkInformation>
+        <linkInformation>
+          <name>1c73b0de-0e70-421e-a8aa-660dbd177f81</name>
+          <tableName>CLASSIFICATIONSTORAGE</tableName>
+          <primaryKey>CLASSIFICATIONSTORAGEID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
       </linkInformation>
       <recordFieldMappings>
         <dbRecordFieldMapping>
@@ -906,6 +909,12 @@
           <recordfield>SALESPROJECT.SALESPROJECTID</recordfield>
           <aggregateType>COUNT</aggregateType>
         </aggregateFieldDbMapping>
+        <dbRecordFieldMapping>
+          <name>CLASSIFICATIONSTORAGE_ID.value</name>
+          <recordfield>CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE</recordfield>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </dbRecordFieldMapping>
       </recordFieldMappings>
       <filterExtensions>
         <filterExtensionSet>
@@ -916,17 +925,20 @@
           <filtertype>BASIC</filtertype>
         </filterExtensionSet>
         <filterExtensionSet>
-          <name>ClassificationSummary_filter</name>
-          <filterFieldsProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterFieldsProcess.js</filterFieldsProcess>
-          <filterValuesProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterValuesProcess.js</filterValuesProcess>
-          <filterConditionProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterConditionProcess.js</filterConditionProcess>
+          <name>ClassificationType_filter</name>
+          <filterFieldsProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterFieldsProcess.js</filterFieldsProcess>
+          <filterValuesProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterValuesProcess.js</filterValuesProcess>
+          <filterConditionProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js</filterConditionProcess>
+          <isGroupable v="true" />
+          <groupQueryProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js</groupQueryProcess>
           <filtertype>BASIC</filtertype>
         </filterExtensionSet>
         <filterExtensionSet>
-          <name>ClassificationScore_filter</name>
-          <filterFieldsProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterFieldsProcess.js</filterFieldsProcess>
-          <filterValuesProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterValuesProcess.js</filterValuesProcess>
-          <filterConditionProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterConditionProcess.js</filterConditionProcess>
+          <name>ClassificationGroup_filter</name>
+          <filterFieldsProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterFieldsProcess.js</filterFieldsProcess>
+          <filterValuesProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterValuesProcess.js</filterValuesProcess>
+          <filterConditionProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterConditionProcess.js</filterConditionProcess>
+          <isGroupable v="true" />
           <filtertype>BASIC</filtertype>
         </filterExtensionSet>
       </filterExtensions>
diff --git a/entity/Salesproject_entity/entityfields/classificationresult/valueProcess.js b/entity/Salesproject_entity/entityfields/classificationresult/valueProcess.js
deleted file mode 100644
index ec7e306ee9580b62b61f879c1acac71f7c0872ad..0000000000000000000000000000000000000000
--- a/entity/Salesproject_entity/entityfields/classificationresult/valueProcess.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import("KeywordRegistry_basic");
-import("system.vars");
-import("system.result");
-import("Classification_lib")
-import("Context_lib")
-
-var classes = ClassificationUtils.getClass($KeywordRegistry.classificationType$salesproject(), ContextUtils.getCurrentContextId(), vars.get("$sys.uid"))
-result.string(classes);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterConditionProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4d7f34b4b38482879c13a7b2677b58adb17cd897
--- /dev/null
+++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterConditionProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("system.result");
+import("ClassificationFilter_lib");
+
+var sqlCond = ClassificationGroupFilterUtils.makeFilterConditionSql(vars.get("$sys.currentcontextname"));
+
+result.string(sqlCond);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterFieldsProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterFieldsProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b066dbd2bd3d29c633bbb50a3ebe7bf680572ca9
--- /dev/null
+++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterFieldsProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.result");
+import("ClassificationFilter_lib");
+
+//this filterExtensionSet is for the Classifications (ClassificationGroups, e.g. 1. Target Group, Customer Value...)
+var fields = ClassificationTypeFilterUtils.getFilterFieldsGroup(vars.get("$sys.currentcontextname"));
+
+result.string(fields);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterValuesProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterValuesProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..0b91eddce8f2e9807f5ff51f8c9316056a36a350
--- /dev/null
+++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterValuesProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("system.result");
+import("ClassificationFilter_lib");
+
+var values = ClassificationGroupFilterUtils.makeFilterValues(vars.get("$sys.currentcontextname"));
+result.object(values);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterConditionProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterConditionProcess.js
deleted file mode 100644
index a9a81e734d1d5832c87848fa6b12650b9af03993..0000000000000000000000000000000000000000
--- a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterConditionProcess.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import("Sql_lib");
-import("system.logging");
-import("AttributeFilter_lib");
-import("Entity_lib");
-import("Context_lib");
-import("system.vars");
-import("system.result");
-
-
-var operator = vars.get("$local.operator");
-var rawvalue = vars.get("$local.rawvalue");
-var columnPlaceholder = vars.get("$local.columnPlaceholder");
-var filterCond = vars.get("$local.condition");
-var classificationtypeid = AttributeSearchNameCoder.decode(vars.getString("$local.name")).id;
-var sqlCond;
-
-
-var subsqlclosed = newSelect("OBJECT_ROWID").from("CLASSIFICATION").where("CLASSIFICATION.OBJECT_TYPE", "Salesproject");
-var subsqlExtra2 =  subsqlclosed.andIfSet("CLASSIFICATION.CLASSIFICATIONTYPE_ID", classificationtypeid);
-var subsqlExtra = subsqlclosed.andIfSet("CLASSIFICATION.CLASSIFICATIONSCORE_ID", rawvalue);
-
-if (operator == "1")//equal
-    sqlCond = newWhere("SALESPROJECT.SALESPROJECTID", subsqlExtra, SqlBuilder.IN()).toString();
-else if (operator == "2")//not equal 
-    sqlCond = newWhere("SALESPROJECT.SALESPROJECTID", subsqlExtra, SqlBuilder.NOT_IN()).toString();
-else if (operator == "11")//is not empty
-    sqlCond = newWhere("SALESPROJECT.SALESPROJECTID", subsqlExtra2, SqlBuilder.IN()).toString();
-else if (operator == "12")//is empty
-    sqlCond = newWhere("SALESPROJECT.SALESPROJECTID", subsqlExtra2, SqlBuilder.NOT_IN()).toString();
-else sqlCond = "1=1";
-
-
-result.string(sqlCond);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterFieldsProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterFieldsProcess.js
deleted file mode 100644
index a2733262042f5986d7d3cae681ed536f454fffbd..0000000000000000000000000000000000000000
--- a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterFieldsProcess.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import("Sql_lib");
-import("system.translate");
-import("system.logging");
-import("system.util");
-import("KeywordRegistry_basic");
-import("system.entities");
-import("Attribute_lib");
-import("AttributeFilter_lib");
-import("system.result");
-
-var res = [];
-
-var data = newSelect("CLASSIFICATIONTYPEID, CLASSIFICATIONGROUP, SCORETYPE") 
-          .from("classificationtype") 
-          .orderBy("CLASSIFICATIONGROUP").table();
-
-data.forEach(function(row){
-    var name = AttributeSearchNameCoder.encode(row[0], row[2]);
-    res.push({
-        name: name,
-        title: translate.text(row[1]) + " / " + translate.text(row[2]),
-        contentType: "TEXT",
-        hasDropDownValues: true 
-    });
-})
-
-res = JSON.stringify(res);
-result.string(res);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterValuesProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterValuesProcess.js
deleted file mode 100644
index 6750d045ccbf390d579bac8c82f19e61027d3b13..0000000000000000000000000000000000000000
--- a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationscore_filter/filterValuesProcess.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import("IndexSearch_lib");
-import("system.logging");
-import("system.vars");
-import("Sql_lib");
-import("AttributeFilter_lib");
-import("Attribute_lib");
-import("system.result");
-import("system.translate");
-
-var filter = JSON.parse(vars.get("$local.filter"));
-var nameObject = AttributeSearchNameCoder.decode(filter.name); 
-var classID = nameObject.id;
-
-
-var res = newSelect("CLASSIFICATIONSCOREID , TITLE")
-          .from("CLASSIFICATIONSCORE")
-          .where("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID", classID)
-          .table();
-
-for(var i = 0; i < res.length; i++)
-{
-    res[i][1] = translate.text(res[i][1])
-}
-
-if (res == null)
-    res = [];
-result.object(res);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterConditionProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterConditionProcess.js
deleted file mode 100644
index 2f086c699f3978fd4a7f2bf7794cfe9073510a89..0000000000000000000000000000000000000000
--- a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterConditionProcess.js
+++ /dev/null
@@ -1,49 +0,0 @@
-//
-//
-////ToDo: This FilterProcess used to work with the old classification system, it's useless now. 
-//It's gonna get updated soon (#1061442)
-//
-//
-////import("Sql_lib");
-//import("Classification_lib");
-//import("system.logging");
-//import("AttributeFilter_lib");
-//import("Entity_lib");
-//import("Context_lib");
-//import("system.vars");
-//import("system.result");
-//
-//
-//var operator = vars.get("$local.operator");
-//var rawvalue = vars.get("$local.rawvalue");
-//var columnPlaceholder = vars.get("$local.columnPlaceholder");
-//var filterCond = vars.get("$local.condition");
-//var classificationTypeID = AttributeSearchNameCoder.decode(vars.getString("$local.name")).id;
-//var sqlCond;
-//
-////[["A","A"],["B","B"],["C","C"],["D","D"]]
-//var scoreValue = ClassificationUtils.mapClassLetter(rawvalue);
-//var havingCase;
-//if(scoreValue[0] == 0)
-//    havingCase = "sum(SCORE) >= " + scoreValue[0];
-//else
-//    havingCase = "sum(SCORE) > " + scoreValue[0];
-//            
-//var having = havingCase + " and sum(SCORE) <= " + scoreValue[1];  
-//
-//
-//var subSqlCond = newSelect("OBJECT_ROWID").from("classification").join("classificationscore", "classiFICATIONSCOREID = CLASSIFICATIONSCORE_ID")
-//    .where("classificationscore.CLASSIFICATIONTYPE_ID", newSelect("classificationtypeId").from("classificationtype")
-//    .where("classificationtype.CLASSIFICATIONGROUP", classificationTypeID), SqlBuilder.IN()).groupBy("classification.OBJECT_ROWID");
-//
-//if (operator == "1")//equal
-//    sqlCond = newWhere("SALESPROJECT.SALESPROJECTID", subSqlCond.having(having), SqlBuilder.IN()).toString();
-//else if (operator == "2")//not equal
-//    sqlCond = newWhere("SALESPROJECT.SALESPROJECTID", subSqlCond.having(having), SqlBuilder.NOT_IN()).toString();
-//else if (operator == "11")//is not empty
-//    sqlCond = newWhere("SALESPROJECT.SALESPROJECTID", subSqlCond, SqlBuilder.IN()).toString();
-//else if (operator == "12")//is empty
-//    sqlCond = newWhere("SALESPROJECT.SALESPROJECTID", subSqlCond, SqlBuilder.NOT_IN()).or("SALESPROJECT.SALESPROJECTID", newSelect("OBJECT_ROWID").from("classification"), SqlBuilder.NOT_IN()).toString();
-//else sqlCond = "1=1";
-//
-//result.string(sqlCond);
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterFieldsProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterFieldsProcess.js
deleted file mode 100644
index 2ea352cf1d179f06cb5c7d83282df3edac72fac3..0000000000000000000000000000000000000000
--- a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterFieldsProcess.js
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-//
-////ToDo: This FilterProcess used to work with the old classification system, it's useless now. 
-//It's gonna get updated soon (#1061442)
-//
-////import("Sql_lib");
-//import("system.translate");
-//import("system.logging");
-//import("system.util");
-//import("KeywordRegistry_basic");
-//import("system.entities");
-//import("Attribute_lib");
-//import("AttributeFilter_lib");
-//import("system.result");
-//
-//var res = [];
-//
-//var data = newSelect("distinct CLASSIFICATIONGROUP, CLASSIFICATIONGROUP") 
-//          .from("classificationtype") 
-//          .orderBy("CLASSIFICATIONGROUP").table();
-//
-//
-//data.forEach(function(row){
-//    var name = AttributeSearchNameCoder.encode(row[0], row[1]);
-//    res.push({
-//        name: name,
-//        title: translate.text(row[1]),
-//        contentType: "TEXT",
-//        hasDropDownValues: true 
-//    });
-//})
-//
-//res = JSON.stringify(res);
-//result.string(res);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterValuesProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterValuesProcess.js
deleted file mode 100644
index f4b34eb8c3473d891aca091815121efb692660f2..0000000000000000000000000000000000000000
--- a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationsummary_filter/filterValuesProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-////ToDo: This FilterProcess used to work with the old classification system, it's useless now. 
-//It's gonna get updated soon (#1061442)
-//
-//
-////import("system.result");
-//result.object([["A","A"],["B","B"],["C","C"],["D","D"]]);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..5875efb7699dfc5aaa3b567c912990895b03eded
--- /dev/null
+++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("ClassificationFilter_lib");
+
+var sqlCond = ClassificationTypeFilterUtils.makeFilterConditionSql();
+
+result.string(sqlCond);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterFieldsProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterFieldsProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b2cf16be606711221d28048b4af26922e946c004
--- /dev/null
+++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterFieldsProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("system.result");
+import("ClassificationFilter_lib");
+
+var fields = ClassificationTypeFilterUtils.getFilterFields(vars.get("$sys.currentcontextname"));
+
+result.string(fields);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterValuesProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterValuesProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..541cc6c67ce6e4dc53ccc16714b3b7746eb0f097
--- /dev/null
+++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterValuesProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("ClassificationFilter_lib");
+
+var values = ClassificationTypeFilterUtils.makeFilterFields();
+result.object(values);
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..524e35692ad0f51d4bebd9dce80d82ebfc6efc80
--- /dev/null
+++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js
@@ -0,0 +1,22 @@
+import("system.translate");
+import("Sql_lib");
+import("system.result");
+import("system.vars");
+
+var isCount = vars.get("$local.count");             // TRUE if the count of the records is needed
+var columns = vars.get("$local.columnlist");        // The column, expected from the querry, see also AttributeFilter_lib
+var condition = vars.get("$local.condition");       // The Condition that's beeing used, includes the grouphirachy
+var groupedColumns = vars.get("$local.groupedlist") // The coloumns, used for grouping
+var order = vars.get("$local.order");               // The order of the result
+var classificationId = vars.get("$local.name");
+classificationId = classificationId.slice(classificationId.lastIndexOf(".") + 1, classificationId.length);
+var valuefield = "''"
+var stmt = "";
+
+stmt = newSelect(isCount ? "1" : columns)
+                    .from("SALESPROJECT")
+                    .leftJoin("CLASSIFICATION", "CLASSIFICATION.OBJECT_ROWID = SALESPROJECT.SALESPROJECTID and CLASSIFICATION.OBJECT_TYPE = 'Salesproject' and CLASSIFICATION.CLASSIFICATIONTYPE_ID = '" + classificationId + "' ")
+                    .leftJoin("CLASSIFICATIONSCORE", "CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID = CLASSIFICATION.CLASSIFICATIONSCORE_ID" +  (condition != "  " ? " WHERE " + condition : ""))
+                    .groupBy(groupedColumns + (order != null && !isCount ? " ORDER BY " + order : ""))
+                    .toString();
+result.string(stmt);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/fromClauseProcess.js b/entity/Salesproject_entity/recordcontainers/db/fromClauseProcess.js
index 3537c33492c3ea6e636b0fd9970e90d681ba6291..f7c4fec24f882837821e3546df7a8c5c0f5d1951 100644
--- a/entity/Salesproject_entity/recordcontainers/db/fromClauseProcess.js
+++ b/entity/Salesproject_entity/recordcontainers/db/fromClauseProcess.js
@@ -1,6 +1,8 @@
 import("system.vars");
 import("system.result");
 
+//CLASSIFICATIONSTORAGE is necessaray to make it possible to get the classifications of the organisations and making it possible to group by them
 result.string("SALESPROJECT \n\
     left join CONTACT on (SALESPROJECT.CONTACT_ID = CONTACT.CONTACTID) \n\
-    left join ORGANISATION on (CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID)");
\ No newline at end of file
+    left join ORGANISATION on (CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID)\n\
+    left join CLASSIFICATIONSTORAGE on (CLASSIFICATIONSTORAGE.OBJECT_ROWID = SALESPROJECT.SALESPROJECTID)");
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/onDBDelete.js b/entity/Salesproject_entity/recordcontainers/db/onDBDelete.js
index c292d0299ca8cac03b0d7202b49c046d221c0b1c..169c88c898085262157c370ee06c9d55a132086c 100644
--- a/entity/Salesproject_entity/recordcontainers/db/onDBDelete.js
+++ b/entity/Salesproject_entity/recordcontainers/db/onDBDelete.js
@@ -11,12 +11,18 @@ if (currentId)
 {
     var toDelete = [
     "SALESPROJECT_MILESTONE",
-    "SALESPROJECT_TOUCHPOINT"
+    "SALESPROJECT_TOUCHPOINT",
+    "CLASSIFICATIONSTORAGE"
     ];
     
     toDelete = toDelete.map(function(pTable)
     {
-        var cond = newWhere(pTable + ".SALESPROJECT_ID", currentId)
+        var cond;
+        if(pTable != "CLASSIFICATIONSTORAGE")
+            cond = newWhere(pTable + ".SALESPROJECT_ID", currentId)
+        else 
+            cond = newWhere(pTable + ".OBJECT_ROWID", currentId)
+        
         return [pTable, cond.build()];
     });
     
diff --git a/entity/Salesproject_entity/recordcontainers/db/onDBInsert.js b/entity/Salesproject_entity/recordcontainers/db/onDBInsert.js
index 4d90164110fa9a431d839830c54b61ad71e06ac2..38fe9698031dd654c3a8a1e3a37aa506cbb72a8e 100644
--- a/entity/Salesproject_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/Salesproject_entity/recordcontainers/db/onDBInsert.js
@@ -1,3 +1,4 @@
+import("Classification_lib");
 import("Workflow_lib");
 import("Context_lib");
 import("Attribute_lib");
@@ -16,4 +17,11 @@ if (vars.get("$field.PROJECTTYPE"))
         .insertAttribute(vars.get("$field.PROJECTTYPE"), true);
 }
 
+var salesprojectId = vars.get("$field.SALESPROJECTID");
+var contextname = vars.get("$sys.currentcontextname");
+
+ClassificationUtils.insertEmptyClassification(salesprojectId, contextname);
+
+//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/VisitPlanEntry_entity/entityfields/contact_id/displayValueProcess.js b/entity/VisitPlanEntry_entity/entityfields/contact_id/displayValueProcess.js
index 2c0374c9395d47ad5bc042af22caf4a81b374a92..c86af17417bd7854ad67136e3d6472a83e2c372b 100644
--- a/entity/VisitPlanEntry_entity/entityfields/contact_id/displayValueProcess.js
+++ b/entity/VisitPlanEntry_entity/entityfields/contact_id/displayValueProcess.js
@@ -3,7 +3,6 @@ import("system.db");
 import("system.result");
 import("system.vars");
 
-
 var contactId = vars.get("$field.CONTACT_ID");
 var res = ContactUtils.getFullTitleByContactId(contactId);
 
diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
index bab1be7ecc3bf1d9c690234a75fcf63bfed6a981..9c60e9838e2005f790924a75c84eb5f36e071545 100644
--- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
+++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
@@ -7056,6 +7056,9 @@
     <entry>
       <key>Extend</key>
     </entry>
+    <entry>
+      <key>%0: %1/%2points = %3</key>
+    </entry>
     <entry>
       <key>ab 350 T€</key>
     </entry>
@@ -7095,9 +7098,33 @@
     <entry>
       <key>Calendar maintime end</key>
     </entry>
+    <entry>
+      <key>%0: %1/%2 points = %3</key>
+    </entry>
+    <entry>
+      <key>Classification: </key>
+    </entry>
+    <entry>
+      <key>Classificationgroup</key>
+    </entry>
+    <entry>
+      <key>Classificationgroups</key>
+    </entry>
+    <entry>
+      <key>Indicator</key>
+    </entry>
     <entry>
       <key>green</key>
     </entry>
+    <entry>
+      <key>favorites</key>
+    </entry>
+    <entry>
+      <key>Refresh</key>
+    </entry>
+    <entry>
+      <key>Run ServerProcess</key>
+    </entry>
     <entry>
       <key>1. Target group</key>
     </entry>
@@ -7140,9 +7167,6 @@
     <entry>
       <key>Password must contain spaces</key>
     </entry>
-    <entry>
-      <key>favorites</key>
-    </entry>
     <entry>
       <key>The use of any of your previous %0 passwords is prohibited</key>
     </entry>
@@ -7224,6 +7248,60 @@
     <entry>
       <key>Enter current password to verify</key>
     </entry>
+    <entry>
+      <key>Serverprocess has been started</key>
+    </entry>
+    <entry>
+      <key>Run Serverprocess</key>
+    </entry>
+    <entry>
+      <key>ab 350 D€</key>
+    </entry>
+    <entry>
+      <key>200-349 D€</key>
+    </entry>
+    <entry>
+      <key>0-49 D€</key>
+    </entry>
+    <entry>
+      <key>100-199 D€</key>
+    </entry>
+    <entry>
+      <key>50-99 D€</key>
+    </entry>
+    <entry>
+      <key>Max Value</key>
+    </entry>
+    <entry>
+      <key>Points</key>
+    </entry>
+    <entry>
+      <key>OLDACTION</key>
+    </entry>
+    <entry>
+      <key>Run Upgrade Serverprocess</key>
+    </entry>
+    <entry>
+      <key>Child Attributes</key>
+    </entry>
+    <entry>
+      <key>Recalculate all Classifications</key>
+    </entry>
+    <entry>
+      <key>Reminder:</key>
+    </entry>
+    <entry>
+      <key>Start Serveprocess</key>
+    </entry>
+    <entry>
+      <key>Keep in Mind that changes to the Value with the greatest score directly affect the Classification Gradings of the Classification!</key>
+    </entry>
+    <entry>
+      <key>This is how the Classification Gradings of the Classification will get affected by these changes:</key>
+    </entry>
+    <entry>
+      <key>Hint</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 3df93124eda0ae2d702bb8e96a2fe41e35472ca3..a4e4d935912722b25999d2d18dae89b136550a6e 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -2858,7 +2858,7 @@
     </entry>
     <entry>
       <key>unassigned</key>
-      <value>nicht zugewiesen</value>
+      <value>nicht zugeordnet</value>
     </entry>
     <entry>
       <key>Lithuania</key>
@@ -3227,6 +3227,10 @@
       <key>Montenegro</key>
       <value>Montenegro</value>
     </entry>
+    <entry>
+      <key>Indicator</key>
+      <value>Kenngröße</value>
+    </entry>
     <entry>
       <key>Quarterly</key>
       <value>vierteljährlich</value>
@@ -8838,10 +8842,10 @@ Bitte Datumseingabe prüfen</value>
       <key>Full Permissions</key>
     </entry>
     <entry>
-      <key>200-349 T€</key>
+      <key>200-349 D€</key>
     </entry>
     <entry>
-      <key>100-199 T€</key>
+      <key>100-199 D€</key>
     </entry>
     <entry>
       <key>Full permissions already assigned</key>
@@ -8853,10 +8857,10 @@ Bitte Datumseingabe prüfen</value>
       <key>Import Daten</key>
     </entry>
     <entry>
-      <key>ab 350 T€</key>
+      <key>ab 350 D€</key>
     </entry>
     <entry>
-      <key>0-49 T€</key>
+      <key>0-49 D€</key>
     </entry>
     <entry>
       <key>Grading</key>
@@ -8869,7 +8873,7 @@ Bitte Datumseingabe prüfen</value>
       <key>Transferdaten</key>
     </entry>
     <entry>
-      <key>50-99 T€</key>
+      <key>50-99 D€</key>
     </entry>
     <entry>
       <key>101-250</key>
@@ -8944,18 +8948,48 @@ Bitte Datumseingabe prüfen</value>
       <key>Workflow Model</key>
     </entry>
     <entry>
-      <key>No new recipients found that can be added to the bulk mail.</key>
-      <value>Keine neuen Teilnehmer gefunden die zur Serienmail hinzugefügt werden können.</value>
+      <key>Workflow deploy failed</key>
     </entry>
     <entry>
       <key>Current Recipients</key>
       <value>Aktuelle Empfänger</value>
     </entry>
     <entry>
-      <key>The workflow could not be deployed</key>
+      <key>%0: %1/%2points = %3</key>
+      <value>%0: %1/%2Punkte = %3</value>
     </entry>
     <entry>
-      <key>Workflow deploy failed</key>
+      <key>%0: %1/%2 points = %3</key>
+    </entry>
+    <entry>
+      <key>Classification: </key>
+      <value>Klassifizierung: </value>
+    </entry>
+    <entry>
+      <key>Classificationgroup</key>
+      <value>Klassifizierungsgruppe</value>
+    </entry>
+    <entry>
+      <key>Classificationgroups</key>
+      <value>Klassifizierungsgruppen</value>
+    </entry>
+    <entry>
+      <key>Add Participants</key>
+    </entry>
+    <entry>
+      <key>and open Report</key>
+    </entry>
+    <entry>
+      <key>Add Recipients</key>
+    </entry>
+    <entry>
+      <key>{SEND_MAIL}</key>
+    </entry>
+    <entry>
+      <key>Total in euros</key>
+    </entry>
+    <entry>
+      <key>The workflow could not be deployed</key>
     </entry>
     <entry>
       <key>Create model</key>
@@ -9015,10 +9049,17 @@ Bitte Datumseingabe prüfen</value>
       <key>Current password</key>
       <value>Aktuelles Passwort</value>
     </entry>
+    <entry>
+      <key>Serverprocess has been started</key>
+      <value>Serverprozess wurde gestartet</value>
+    </entry>
     <entry>
       <key>Calendar maintime start</key>
       <value>Kalender Kernzeit Beginn</value>
     </entry>
+    <entry>
+      <key>favorite</key>
+    </entry>
     <entry>
       <key>New password</key>
       <value>Neues Passwort</value>
@@ -9045,7 +9086,7 @@ Bitte Datumseingabe prüfen</value>
     </entry>
     <entry>
       <key>SELECTION_PREFIX</key>
-      <value>Vorne</value>
+      <value>Die Verwendung eines Ihrer vorherigen %0 Passwörter ist untersagt</value>
     </entry>
     <entry>
       <key>SELECTION_BOTH</key>
@@ -9088,9 +9129,6 @@ Bitte Datumseingabe prüfen</value>
       <key>Permission Procurer Department</key>
       <value>Rechteempfänger Abteilung</value>
     </entry>
-    <entry>
-      <key>favorite</key>
-    </entry>
     <entry>
       <key>Release</key>
     </entry>
@@ -9105,24 +9143,16 @@ Bitte Datumseingabe prüfen</value>
       <value>Rechteempfänger Benutzer</value>
     </entry>
     <entry>
-      <key>and open Report</key>
-    </entry>
-    <entry>
-      <key>The Sales Project can only be filled when a company has been specified</key>
+      <key>Latitude</key>
+      <value>Teilnehmer hinzufügen</value>
     </entry>
     <entry>
-      <key>Add Recipients</key>
+      <key>No new recipients found that can be added to the bulk mail.</key>
     </entry>
     <entry>
       <key>Grant new User Permission</key>
       <value>Neue Benutzer-Berechtigung vergeben</value>
     </entry>
-    <entry>
-      <key>{SEND_MAIL}</key>
-    </entry>
-    <entry>
-      <key>Latitude</key>
-    </entry>
     <entry>
       <key>Password must contain spaces</key>
       <value>Passwort muss Leerzeichen enhalten</value>
@@ -9145,10 +9175,6 @@ Bitte Datumseingabe prüfen</value>
     <entry>
       <key>Mapping</key>
     </entry>
-    <entry>
-      <key>The use of any of your previous %0 passwords is prohibited</key>
-      <value>Die Verwendung eines Ihrer vorherigen %0 Passwörter ist untersagt</value>
-    </entry>
     <entry>
       <key>Mappings</key>
     </entry>
@@ -9163,6 +9189,10 @@ Bitte Datumseingabe prüfen</value>
       <key>${DISPLAY_AND_OPEN_ONE_HIT}</key>
       <value>Ein Ergebnis wurde gefunden und kann geöffnet werden.</value>
     </entry>
+    <entry>
+      <key>Run Serverprocess</key>
+      <value>Serverprozess ausführen</value>
+    </entry>
     <entry>
       <key>${DISPLAY_AND_OPEN_%0_OF_%1_HITS}</key>
       <value>%0 von insgesamt %1  Ergebnissen werden derzeit angezeigt und können geöffnet werden.</value>
@@ -9203,13 +9233,74 @@ Bitte Datumseingabe prüfen</value>
       <key>Sort down</key>
     </entry>
     <entry>
-      <key>Total in euros</key>
+      <key>Longitude</key>
     </entry>
     <entry>
-      <key>Add Participants</key>
+      <key>0-49 T€</key>
     </entry>
     <entry>
-      <key>Longitude</key>
+      <key>Refresh</key>
+    </entry>
+    <entry>
+      <key>Run ServerProcess</key>
+    </entry>
+    <entry>
+      <key>50-99 T€</key>
+    </entry>
+    <entry>
+      <key>Max Value</key>
+      <value>Maximalwert</value>
+    </entry>
+    <entry>
+      <key>Points</key>
+      <value>Punkte</value>
+    </entry>
+    <entry>
+      <key>OLDACTION</key>
+    </entry>
+    <entry>
+      <key>Run Upgrade Serverprocess</key>
+    </entry>
+    <entry>
+      <key>The Sales Project can only be filled when a company has been specified</key>
+    </entry>
+    <entry>
+      <key>Child Attributes</key>
+    </entry>
+    <entry>
+      <key>Recalculate all Classifications</key>
+      <value>Alle Klassifizierungen neuberechnen</value>
+    </entry>
+    <entry>
+      <key>Reminder:</key>
+    </entry>
+    <entry>
+      <key>Start Serveprocess</key>
+      <value>Serverprozess starten</value>
+    </entry>
+    <entry>
+      <key>This is how the Classification Gradings of the Classification will get affected by these changes:</key>
+      <value>Die Klassifizierungsbewertungen der klassifizierung werden durch diese Änderungen folgendermaßen beeinflußt:</value>
+    </entry>
+    <entry>
+      <key>Keep in Mind that changes to the Value with the greatest score directly affect the Classification Gradings of the Classification!</key>
+      <value>Änderungen an dem Wert mit der höchsten Punktzahl beeinflußen die Klassifizierungsbewertungen der Klassifizierung!</value>
+    </entry>
+    <entry>
+      <key>Hint</key>
+      <value>Hinweis</value>
+    </entry>
+    <entry>
+      <key>200-349 T€</key>
+    </entry>
+    <entry>
+      <key>100-199 T€</key>
+    </entry>
+    <entry>
+      <key>ab 350 T€</key>
+    </entry>
+    <entry>
+      <key>The use of any of your previous %0 passwords is prohibited</key>
     </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
index 1b29727a4107fbf050cfa87323b4d179c4d9a89d..cf687d9006354bce6be41a02950046639f2f65ab 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -6936,12 +6936,6 @@
     <entry>
       <key>Full Permissions</key>
     </entry>
-    <entry>
-      <key>200-349 T€</key>
-    </entry>
-    <entry>
-      <key>100-199 T€</key>
-    </entry>
     <entry>
       <key>Full permissions already assigned</key>
     </entry>
@@ -6951,12 +6945,6 @@
     <entry>
       <key>Import Daten</key>
     </entry>
-    <entry>
-      <key>ab 350 T€</key>
-    </entry>
-    <entry>
-      <key>0-49 T€</key>
-    </entry>
     <entry>
       <key>Grading</key>
     </entry>
@@ -6966,9 +6954,6 @@
     <entry>
       <key>Transferdaten</key>
     </entry>
-    <entry>
-      <key>50-99 T€</key>
-    </entry>
     <entry>
       <key>101-250</key>
     </entry>
@@ -7113,23 +7098,59 @@
       <value>Send mail</value>
     </entry>
     <entry>
-      <key>Probability AI</key>
+      <key>Classification: </key>
     </entry>
     <entry>
-      <key>New</key>
+      <key>Classificationgroup</key>
     </entry>
     <entry>
-      <key>Release</key>
+      <key>Classificationgroups</key>
     </entry>
     <entry>
-      <key>Archived</key>
+      <key>%0: %1/%2points = %3</key>
     </entry>
     <entry>
-      <key>asdf</key>
+      <key>%0: %1/%2 points = %3</key>
+    </entry>
+    <entry>
+      <key>Indicator</key>
+    </entry>
+    <entry>
+      <key>Probability AI</key>
     </entry>
     <entry>
       <key>{SENT_MAIL}</key>
     </entry>
+    <entry>
+      <key>favorites</key>
+    </entry>
+    <entry>
+      <key>Refresh</key>
+    </entry>
+    <entry>
+      <key>Run ServerProcess</key>
+    </entry>
+    <entry>
+      <key>favorite</key>
+    </entry>
+    <entry>
+      <key>favorties</key>
+    </entry>
+    <entry>
+      <key>Serverprocess has been started</key>
+    </entry>
+    <entry>
+      <key>Run Serverprocess</key>
+    </entry>
+    <entry>
+      <key>New</key>
+    </entry>
+    <entry>
+      <key>Release</key>
+    </entry>
+    <entry>
+      <key>Archived</key>
+    </entry>
     <entry>
       <key>Settings</key>
     </entry>
@@ -7172,18 +7193,12 @@
     <entry>
       <key>Calendar maintime start</key>
     </entry>
-    <entry>
-      <key>favorties</key>
-    </entry>
     <entry>
       <key>Password must contain special characters</key>
     </entry>
     <entry>
       <key>Password must be at least %0 characters</key>
     </entry>
-    <entry>
-      <key>favorite</key>
-    </entry>
     <entry>
       <key>Repeat password</key>
     </entry>
@@ -7223,9 +7238,6 @@
     <entry>
       <key>Password must contain spaces</key>
     </entry>
-    <entry>
-      <key>favorites</key>
-    </entry>
     <entry>
       <key>The use of any of your previous %0 passwords is prohibited</key>
     </entry>
@@ -7295,6 +7307,72 @@
     <entry>
       <key>Enter current password to verify</key>
     </entry>
+    <entry>
+      <key>ab 350 D€</key>
+    </entry>
+    <entry>
+      <key>200-349 D€</key>
+    </entry>
+    <entry>
+      <key>0-49 D€</key>
+    </entry>
+    <entry>
+      <key>100-199 D€</key>
+    </entry>
+    <entry>
+      <key>50-99 D€</key>
+    </entry>
+    <entry>
+      <key>asdf</key>
+    </entry>
+    <entry>
+      <key>OLDACTION</key>
+    </entry>
+    <entry>
+      <key>200-349 T€</key>
+    </entry>
+    <entry>
+      <key>100-199 T€</key>
+    </entry>
+    <entry>
+      <key>ab 350 T€</key>
+    </entry>
+    <entry>
+      <key>0-49 T€</key>
+    </entry>
+    <entry>
+      <key>50-99 T€</key>
+    </entry>
+    <entry>
+      <key>Max Value</key>
+    </entry>
+    <entry>
+      <key>Points</key>
+    </entry>
+    <entry>
+      <key>Run Upgrade Serverprocess</key>
+    </entry>
+    <entry>
+      <key>Child Attributes</key>
+    </entry>
+    <entry>
+      <key>Recalculate all Classifications</key>
+    </entry>
+    <entry>
+      <key>Reminder:</key>
+    </entry>
+    <entry>
+      <key>Start Serveprocess</key>
+    </entry>
+    <entry>
+      <key>Keep in Mind that changes to the Value with the greatest score directly affect the Classification Gradings of the Classification!</key>
+    </entry>
+    <entry>
+      <key>This is how the Classification Gradings of the Classification will get affected by these changes:</key>
+    </entry>
+    <entry>
+      <key>Hint</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/neonContext/Classification/Classification.aod b/neonContext/Classification/Classification.aod
index aa3443a0f9f2c1236251a3080bfd567b1ddfe45b..9bf4ba49ac718b28263d2427a1491f8d90e2478a 100644
--- a/neonContext/Classification/Classification.aod
+++ b/neonContext/Classification/Classification.aod
@@ -14,13 +14,5 @@
       <name>50c0d5c5-c84f-452d-9f77-41b82ac0319f</name>
       <view>ClassificatonPreview_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>cabdb49c-4faf-4581-8bb5-8a409f27ac3f</name>
-      <view>ClassificationDrawer_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>4e367ebf-3da3-4252-949c-a5793fd15384</name>
-      <view>ClassificationChart_view</view>
-    </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/ClassificationAdmin/ClassificationAdmin.aod b/neonContext/ClassificationAdmin/ClassificationAdmin.aod
index dc900dcb04c2bf20969123f747b79dbf1fc31688..63467269d2b7d076e78009147ca25fade5504e31 100644
--- a/neonContext/ClassificationAdmin/ClassificationAdmin.aod
+++ b/neonContext/ClassificationAdmin/ClassificationAdmin.aod
@@ -4,26 +4,17 @@
   <title></title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/neonContext/ClassificationAdmin/documentation.adoc</documentation>
-  <filterView>ClassificationAdminTree_view</filterView>
+  <filterView>ClassificationAdminFilter_view</filterView>
   <editView>ClassificationAdminEdit_view</editView>
-  <previewView>ClassificatonAdminPreview_view</previewView>
   <entity>ClassificationAdmin_entity</entity>
   <references>
-    <neonViewReference>
-      <name>d2a900f6-8860-4bd6-bc8a-3a8261fb9b3d</name>
-      <view>ClassificationAdminTree_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>3d860a00-13a4-45ef-8087-487ea80bb84b</name>
-      <view>ClassificatonAdminPreview_view</view>
-    </neonViewReference>
     <neonViewReference>
       <name>2c6e2b30-0fd1-4f12-bf9f-d4bbcfbed8aa</name>
       <view>ClassificationAdminEdit_view</view>
     </neonViewReference>
     <neonViewReference>
-      <name>8c79aba8-f87b-4ac6-b59b-1bbc65df2cee</name>
-      <view>ClassificationAdminGrading</view>
+      <name>664dbc06-1ec3-4c6c-ba4f-ed1ed13a1d4b</name>
+      <view>ClassificationAdminFilter_view</view>
     </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/ClassificationGrading/ClassificationGrading.aod b/neonContext/ClassificationGrading/ClassificationGrading.aod
index 8f4192c31d73079808c76c91d82ea4c5a8920ee6..4c4e4c60ea8d0900e20f03efe72fd924d3e613db 100644
--- a/neonContext/ClassificationGrading/ClassificationGrading.aod
+++ b/neonContext/ClassificationGrading/ClassificationGrading.aod
@@ -2,11 +2,14 @@
 <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>ClassificationGrading</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <mainView>ClassificationGradingMultipleEdit_view</mainView>
+  <previewView>ClassificationGradingMultipleEdit_view</previewView>
+  <lookupView>ClassificationGradingMultipleEdit_view</lookupView>
   <entity>ClassificationGrading_entity</entity>
   <references>
     <neonViewReference>
       <name>9209d983-8388-4a72-96a8-905cdc8fd454</name>
-      <view>ClassificationGradingMultiplePreview_view</view>
+      <view>ClassificationGradingMultipleEdit_view</view>
     </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/ClassificationGroup/ClassificationGroup.aod b/neonContext/ClassificationGroup/ClassificationGroup.aod
new file mode 100644
index 0000000000000000000000000000000000000000..fee41ed5eb8790fb2ddf6b67c740c4e611718f79
--- /dev/null
+++ b/neonContext/ClassificationGroup/ClassificationGroup.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>ClassificationGroup</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <previewView>ClassificationGroupPreview_view</previewView>
+  <entity>ClassificationGroup_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>4d074481-d3cc-4809-b1ee-1c83698146c6</name>
+      <view>ClassificationGroupPreview_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/ClassificationScore/ClassificationScore.aod b/neonContext/ClassificationScore/ClassificationScore.aod
index b3b46da3a9495d519e51955175f36af103a5a5fc..d8069cffe97f8d0a6e788bb42544e7c51fd03713 100644
--- a/neonContext/ClassificationScore/ClassificationScore.aod
+++ b/neonContext/ClassificationScore/ClassificationScore.aod
@@ -2,14 +2,11 @@
 <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>ClassificationScore</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <previewView>ClassificationScoreMultipleEdit_view</previewView>
   <entity>ClassificationScore_entity</entity>
   <references>
     <neonViewReference>
       <name>ccaf4443-07e0-4e29-a73d-2073d132fbe6</name>
-      <view>ClassificationScoreMultiplePreview_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>e857034a-2e2c-4026-8833-12ba4ce597d0</name>
       <view>ClassificationScoreMultipleEdit_view</view>
     </neonViewReference>
   </references>
diff --git a/neonContext/ClassificationGroupAnalyses/ClassificationGroupAnalyses.aod b/neonContext/ClassificationType/ClassificationType.aod
similarity index 61%
rename from neonContext/ClassificationGroupAnalyses/ClassificationGroupAnalyses.aod
rename to neonContext/ClassificationType/ClassificationType.aod
index 65aaf6ffe91d607113cb559d4a3193cc12b60680..bad9b9b514aa815a46b2236cdef4391a23ac86f5 100644
--- a/neonContext/ClassificationGroupAnalyses/ClassificationGroupAnalyses.aod
+++ b/neonContext/ClassificationType/ClassificationType.aod
@@ -1,12 +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>ClassificationGroupAnalyses</name>
+  <name>ClassificationType</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
-  <entity>ClassificationGroupAnalyses_entity</entity>
+  <previewView>ClassificationTypePreview_View</previewView>
+  <entity>ClassificationType_entity</entity>
   <references>
     <neonViewReference>
-      <name>7f1a88f1-c5de-4657-aa44-8309a61422be</name>
-      <view>ClassificationGroupAnalysesChart_view</view>
+      <name>2cf0a9e0-a9ed-47c9-9543-7cf580e99e99</name>
+      <view>ClassificationTypePreview_View</view>
     </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/Organisation/Organisation.aod b/neonContext/Organisation/Organisation.aod
index 90ec3706d78864bdde6041bfe47ecddb3aff2477..5303c6b55cee4d3796c3573e87fe61bf836703ec 100644
--- a/neonContext/Organisation/Organisation.aod
+++ b/neonContext/Organisation/Organisation.aod
@@ -61,11 +61,7 @@
     </neonViewReference>
     <neonViewReference>
       <name>d27a8b2d-2fcf-4626-843c-e709c2ed71b0</name>
-      <view>OrganisationtClassificationAndChart_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>1efa420b-42f4-4d4d-8c23-aba7e6824f4b</name>
-      <view>OrganisationClassificationDrawer_view</view>
+      <view>OrganisationClassification</view>
     </neonViewReference>
     <neonViewReference>
       <name>0b052872-d6b4-41ac-ad0b-580575893e1b</name>
diff --git a/neonContext/Salesproject/Salesproject.aod b/neonContext/Salesproject/Salesproject.aod
index 70d024650c84335066184d6b4c604c31323adc66..fc510061011c9a189deefff688d5284d4855b38f 100644
--- a/neonContext/Salesproject/Salesproject.aod
+++ b/neonContext/Salesproject/Salesproject.aod
@@ -31,10 +31,6 @@
       <name>9d4603e0-6e0e-4c9e-af97-f5c059debe9e</name>
       <view>SalesprojectMilestone_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>5990b9d2-b9b8-495e-85de-68a765d09b7f</name>
-      <view>SalesprojectClassification_view</view>
-    </neonViewReference>
     <neonViewReference>
       <name>6640a2aa-cd7f-41d0-ab55-30a99256c2c6</name>
       <view>SalesprojectMemberActivity_view</view>
@@ -51,14 +47,6 @@
       <name>d878f3b7-1de6-4319-93c7-0fff621c0458</name>
       <view>SalesprojectFurtherInfo_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>68e9257b-d402-4edc-8345-7da46c3b63f9</name>
-      <view>SalesprojectClassificationAndChart_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>99f70216-c195-4c08-a6ab-3a4d5acc759b</name>
-      <view>SalesprojectClassificationAttribute_view</view>
-    </neonViewReference>
     <neonViewReference>
       <name>b3e34681-eef6-48d3-a4e6-975a6fe77e7b</name>
       <view>SalesprojectOfferForecastChart_view</view>
@@ -71,14 +59,6 @@
       <name>589b0f12-a4d9-4108-9da1-4ddb418c3991</name>
       <view>SalesprojectOverview_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>1c957028-bf6b-4b9c-9b46-60f8b53f9edd</name>
-      <view>SaleprojectOverviewCharts_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>42bc01e0-ba80-4e7f-bcf9-30b3d647f565</name>
-      <view>SalesprojectClassificationDrawer_view</view>
-    </neonViewReference>
     <neonViewReference>
       <name>8db978be-4362-48e2-9cc9-6b6774d92f5a</name>
       <view>SalesprojectForecastDrawer_view</view>
diff --git a/neonView/AttributeRelationTree_view/AttributeRelationTree_view.aod b/neonView/AttributeRelationTree_view/AttributeRelationTree_view.aod
index fa91f1febec69188ad0af542924ed847969d3e72..f0161b804b5aa9a8a7856e36eb5e3b557878e0c0 100644
--- a/neonView/AttributeRelationTree_view/AttributeRelationTree_view.aod
+++ b/neonView/AttributeRelationTree_view/AttributeRelationTree_view.aod
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
   <name>AttributeRelationTree_view</name>
+  <title>Attributes</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
     <boxLayout>
diff --git a/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod b/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod
index 8fdb484409dcb88ffc24479a3d455ff9db3a5800..43fd31c31ab964d4bd4d7d0ef08b179b70d9c9e0 100644
--- a/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod
+++ b/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod
@@ -19,23 +19,26 @@
       <entityField>#ENTITY</entityField>
       <fields>
         <entityFieldLink>
-          <name>c702f17c-af6c-4674-bbef-9586adfa3f3b</name>
-          <entityField>CLASSIFICATIONTYPE</entityField>
+          <name>d7a7faff-5693-41ce-ae4d-2f847fa46c18</name>
+          <entityField>OBJECT_TYPE</entityField>
         </entityFieldLink>
         <entityFieldLink>
           <name>66ce2c02-1cd3-4867-91a6-825655d6d16a</name>
           <entityField>CLASSIFICATIONGROUP</entityField>
         </entityFieldLink>
         <entityFieldLink>
-          <name>85cf625b-8ea4-4e6f-8b21-2e42314b46d6</name>
-          <entityField>SCORETYPE</entityField>
+          <name>5493520c-27d9-4333-a804-02c07b0b0747</name>
+          <entityField>SORTING</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>502ba6a6-f3bd-4c10-80a5-d6c779b9adb1</name>
+          <entityField>CLASSIFICATIONTYPEID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>91f2555e-214c-44f0-8798-029b94be9c00</name>
+          <entityField>CLASSIFICATIONTYPEIDDISPLAYVALUE</entityField>
         </entityFieldLink>
       </fields>
     </genericViewTemplate>
-    <neonViewReference>
-      <name>cedafb39-a59c-480f-aeff-e6276ea4fb9e</name>
-      <entityField>ClassificationScores</entityField>
-      <view>ClassificationScoreMultipleEdit_view</view>
-    </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/ClassificationAdminFilter_view/ClassificationAdminFilter_view.aod b/neonView/ClassificationAdminFilter_view/ClassificationAdminFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..0fd065096d7a63abf690e5285a66a56c2a4d3478
--- /dev/null
+++ b/neonView/ClassificationAdminFilter_view/ClassificationAdminFilter_view.aod
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>ClassificationAdminFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <treeTableViewTemplate>
+      <name>treetable</name>
+      <parentField>CLASSIFICATION_PARENT_ID</parentField>
+      <favoriteActionGroup1>FilterviewActionGroup</favoriteActionGroup1>
+      <entityField>#ENTITY</entityField>
+      <linkedColumns />
+      <defaultGroupFields />
+      <fixedFilterFields />
+      <columns>
+        <neonTreeTableColumn>
+          <name>825a461f-65a1-4483-ae97-655b1f87bc0a</name>
+          <entityField>OBJECT_TYPE</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>4d53ba6d-f0a0-4f04-afaa-3278a45cce86</name>
+          <entityField>CLASSIFICATIONGROUP</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>299d5ef1-31a5-47d2-ae41-573e05a0b6c7</name>
+          <entityField>CLASSIFICATIONTYPEID</entityField>
+        </neonTreeTableColumn>
+      </columns>
+    </treeTableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/ClassificationAdminGrading/ClassificationAdminGrading.aod b/neonView/ClassificationAdminGrading/ClassificationAdminGrading.aod
deleted file mode 100644
index 7ca55318be7809e3fe8c6523a6d46b89f033e0f9..0000000000000000000000000000000000000000
--- a/neonView/ClassificationAdminGrading/ClassificationAdminGrading.aod
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>ClassificationAdminGrading</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <noneLayout>
-      <name>layout</name>
-    </noneLayout>
-  </layout>
-  <children>
-    <genericViewTemplate>
-      <name>generic</name>
-      <entityField>#ENTITY</entityField>
-      <title>Classification</title>
-      <fields>
-        <entityFieldLink>
-          <name>ea58623d-4950-40cc-9027-5e2277703353</name>
-          <entityField>CLASSIFICATIONTYPE</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>27c5198d-9330-4617-addf-c7aabac6fa7b</name>
-          <entityField>CLASSIFICATIONGROUP</entityField>
-        </entityFieldLink>
-      </fields>
-    </genericViewTemplate>
-    <genericMultipleViewTemplate>
-      <name>genericMultiple</name>
-      <entityField>#ENTITY</entityField>
-      <title>Grading</title>
-      <columns>
-        <neonGenericMultipleTableColumn>
-          <name>cd98ae70-e37f-42f3-bbab-03ba67b65f49</name>
-          <entityField>SCORETYPE</entityField>
-        </neonGenericMultipleTableColumn>
-        <neonGenericMultipleTableColumn>
-          <name>d861661c-c1d2-4240-9a31-ab4e2ad0cb97</name>
-          <entityField>GRADINGVALUE</entityField>
-        </neonGenericMultipleTableColumn>
-      </columns>
-    </genericMultipleViewTemplate>
-  </children>
-</neonView>
diff --git a/neonView/ClassificationAdminTree_view/ClassificationAdminTree_view.aod b/neonView/ClassificationAdminTree_view/ClassificationAdminTree_view.aod
deleted file mode 100644
index e9cb5c6bed02e2930c5e3f12203711a01b520c3e..0000000000000000000000000000000000000000
--- a/neonView/ClassificationAdminTree_view/ClassificationAdminTree_view.aod
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>ClassificationAdminTree_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <filterable v="true" />
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-    </boxLayout>
-  </layout>
-  <children>
-    <treeViewTemplate>
-      <name>classificationTree</name>
-      <titleField>SCORETYPE</titleField>
-      <defaultGroupFields>
-        <element>CLASSIFICATIONTYPE</element>
-        <element>CLASSIFICATIONGROUP</element>
-      </defaultGroupFields>
-      <showChildrenCount v="false" />
-      <entityField>#ENTITY</entityField>
-    </treeViewTemplate>
-  </children>
-</neonView>
diff --git a/neonView/ClassificationChart_view/ClassificationChart_view.aod b/neonView/ClassificationChart_view/ClassificationChart_view.aod
deleted file mode 100644
index f7be2063e2adce5afedaeefcd74e2d1a9a4035ce..0000000000000000000000000000000000000000
--- a/neonView/ClassificationChart_view/ClassificationChart_view.aod
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>ClassificationChart_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-    </boxLayout>
-  </layout>
-  <children>
-    <multiDataChartViewTemplate>
-      <name>classificationPoints</name>
-      <xAxis>CLASSIFICATIONGROUP</xAxis>
-      <yAxis>GroupScore</yAxis>
-      <entityField>#ENTITY</entityField>
-    </multiDataChartViewTemplate>
-  </children>
-</neonView>
diff --git a/neonView/ClassificationDrawer_view/ClassificationDrawer_view.aod b/neonView/ClassificationDrawer_view/ClassificationDrawer_view.aod
deleted file mode 100644
index 3d71c2d3c9471bb9dc6a190f809b50acc6e06229..0000000000000000000000000000000000000000
--- a/neonView/ClassificationDrawer_view/ClassificationDrawer_view.aod
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>ClassificationDrawer_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <drawerLayout>
-      <name>layout</name>
-      <layoutCaption>Classification</layoutCaption>
-    </drawerLayout>
-  </layout>
-  <children>
-    <neonViewReference>
-      <name>ddde18ed-2617-4f7e-9a6b-71e4625e2cdc</name>
-      <entityField>#ENTITY</entityField>
-      <view>ClassificationTree_view</view>
-    </neonViewReference>
-  </children>
-</neonView>
diff --git a/neonView/ClassificationGradingMultiplePreview_view/ClassificationGradingMultiplePreview_view.aod b/neonView/ClassificationGradingMultipleEdit_view/ClassificationGradingMultipleEdit_view.aod
similarity index 90%
rename from neonView/ClassificationGradingMultiplePreview_view/ClassificationGradingMultiplePreview_view.aod
rename to neonView/ClassificationGradingMultipleEdit_view/ClassificationGradingMultipleEdit_view.aod
index a1e792129a67195e93c36d201872841225eef42d..6ba9ff49effd10c4f9e1292bf94f92e3070303d7 100644
--- a/neonView/ClassificationGradingMultiplePreview_view/ClassificationGradingMultiplePreview_view.aod
+++ b/neonView/ClassificationGradingMultipleEdit_view/ClassificationGradingMultipleEdit_view.aod
@@ -1,11 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>ClassificationGradingMultiplePreview_view</name>
+  <name>ClassificationGradingMultipleEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
   <layout>
     <headerFooterLayout>
       <name>layout</name>
+      <header>titledList</header>
     </headerFooterLayout>
   </layout>
   <children>
diff --git a/neonView/ClassificationGroupAnalysesChart_view/ClassificationGroupAnalysesChart_view.aod b/neonView/ClassificationGroupAnalysesChart_view/ClassificationGroupAnalysesChart_view.aod
deleted file mode 100644
index 40d2afea5d3b5c0291a1bb9ef1d7652ac9cacc6f..0000000000000000000000000000000000000000
--- a/neonView/ClassificationGroupAnalysesChart_view/ClassificationGroupAnalysesChart_view.aod
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>ClassificationGroupAnalysesChart_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <drawerLayout>
-      <name>layout</name>
-      <layoutCaption>Classification</layoutCaption>
-      <fixedDrawer v="true" />
-    </drawerLayout>
-  </layout>
-  <children>
-    <singleDataChartViewTemplate>
-      <name>Groups</name>
-      <chartType>PIE</chartType>
-      <xAxis>GROUP</xAxis>
-      <yAxis>SCORE</yAxis>
-      <entityField>#ENTITY</entityField>
-      <title></title>
-    </singleDataChartViewTemplate>
-  </children>
-</neonView>
diff --git a/neonView/ClassificationGroupPreview_view/ClassificationGroupPreview_view.aod b/neonView/ClassificationGroupPreview_view/ClassificationGroupPreview_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..ac701fd79bb19e0d3b9afcee91964fda6b03c8d7
--- /dev/null
+++ b/neonView/ClassificationGroupPreview_view/ClassificationGroupPreview_view.aod
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>ClassificationGroupPreview_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+      <header>generic</header>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>generic</name>
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>856aa380-f737-4e33-b97a-fdc9230cddaa</name>
+          <entityField>object_type</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>9c5775b3-8000-4d2f-9400-e049afba2f60</name>
+          <entityField>TITLE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>7a847889-24f7-4cfd-8dbc-786eaf9db963</name>
+          <entityField>SORTING</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>83bafcf6-7329-4fe8-b5dd-a3cb88babbd3</name>
+      <entityField>ClassificationGradings</entityField>
+      <view>ClassificationGradingMultipleEdit_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/ClassificationScoreMultipleEdit_view/ClassificationScoreMultipleEdit_view.aod b/neonView/ClassificationScoreMultipleEdit_view/ClassificationScoreMultipleEdit_view.aod
index 80c1c9c1d26b88d54d1b2b430e6bc03f72e8370f..add9fa38736033c557315fd3b6920b080be9e10f 100644
--- a/neonView/ClassificationScoreMultipleEdit_view/ClassificationScoreMultipleEdit_view.aod
+++ b/neonView/ClassificationScoreMultipleEdit_view/ClassificationScoreMultipleEdit_view.aod
@@ -3,25 +3,22 @@
   <name>ClassificationScoreMultipleEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
-    <drawerLayout>
+    <noneLayout>
       <name>layout</name>
-      <layoutCaption>Possible Values</layoutCaption>
-    </drawerLayout>
+    </noneLayout>
   </layout>
   <children>
-    <genericMultipleViewTemplate>
+    <titledListViewTemplate>
       <name>scores</name>
+      <titleField>TITLE</titleField>
+      <autoNewRow v="true" />
       <entityField>#ENTITY</entityField>
       <columns>
-        <neonGenericMultipleTableColumn>
-          <name>7d49c1b4-3525-410c-92d2-b21a69fd8dec</name>
-          <entityField>TITLE</entityField>
-        </neonGenericMultipleTableColumn>
-        <neonGenericMultipleTableColumn>
-          <name>db21eec0-16c6-4267-a785-cb63f15e43b3</name>
+        <neonTitledListTableColumn>
+          <name>d56f97c1-a634-4b12-8dd3-c2c32a9e16f1</name>
           <entityField>SCORE</entityField>
-        </neonGenericMultipleTableColumn>
+        </neonTitledListTableColumn>
       </columns>
-    </genericMultipleViewTemplate>
+    </titledListViewTemplate>
   </children>
 </neonView>
diff --git a/neonView/ClassificationScoreMultiplePreview_view/ClassificationScoreMultiplePreview_view.aod b/neonView/ClassificationScoreMultiplePreview_view/ClassificationScoreMultiplePreview_view.aod
deleted file mode 100644
index 2bd84028e041863b167cb27569b107f043ea8f6c..0000000000000000000000000000000000000000
--- a/neonView/ClassificationScoreMultiplePreview_view/ClassificationScoreMultiplePreview_view.aod
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>ClassificationScoreMultiplePreview_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <noneLayout>
-      <name>layout</name>
-    </noneLayout>
-  </layout>
-  <children>
-    <titledListViewTemplate>
-      <name>scores</name>
-      <titleField>TITLE</titleField>
-      <autoNewRow v="true" />
-      <entityField>#ENTITY</entityField>
-      <columns>
-        <neonTitledListTableColumn>
-          <name>d56f97c1-a634-4b12-8dd3-c2c32a9e16f1</name>
-          <entityField>SCORE</entityField>
-        </neonTitledListTableColumn>
-      </columns>
-    </titledListViewTemplate>
-  </children>
-</neonView>
diff --git a/neonView/ClassificationTree_view/ClassificationTree_view.aod b/neonView/ClassificationTree_view/ClassificationTree_view.aod
index d8b43717e9063dde797ea445c6c21d919d5e6765..ca36f8fd5fa5bb784aa2111d11e4981e1bf01081 100644
--- a/neonView/ClassificationTree_view/ClassificationTree_view.aod
+++ b/neonView/ClassificationTree_view/ClassificationTree_view.aod
@@ -10,12 +10,12 @@
   <children>
     <treeTableViewTemplate>
       <name>ClassificationTreeTable</name>
-      <defaultGroupFields>
-        <element>CLASSIFICATIONGROUP</element>
-      </defaultGroupFields>
       <hideActions v="true" />
       <showChildrenCount v="false" />
       <entityField>#ENTITY</entityField>
+      <defaultGroupFields>
+        <element>CLASSIFICATIONGROUP</element>
+      </defaultGroupFields>
       <columns>
         <neonTreeTableColumn>
           <name>246c0212-dadb-4d71-9567-ceab37e9ef10</name>
diff --git a/neonView/ClassificationTypePreview_View/ClassificationTypePreview_View.aod b/neonView/ClassificationTypePreview_View/ClassificationTypePreview_View.aod
new file mode 100644
index 0000000000000000000000000000000000000000..9b7072fc51941a61d42ed0f8044da5e86732ddc1
--- /dev/null
+++ b/neonView/ClassificationTypePreview_View/ClassificationTypePreview_View.aod
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+  <name>ClassificationTypePreview_View</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+      <header>generic</header>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>generic</name>
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>108530e0-ba87-4db3-9053-6bab10973cb9</name>
+          <entityField>OBJECT_TYPE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>4aac1cf8-9ada-4459-b831-02064b43bc24</name>
+          <entityField>CLASSIFICATIONGROUP_ID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>8853a07b-0a5e-468a-84a4-c59bfd8eec9c</name>
+          <entityField>SCORETYPE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>d070599e-2a60-4de2-ae65-efda4943d199</name>
+          <entityField>infoField</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>6b9f9dc6-8fbf-4f8a-8ba2-250178f1dd1e</name>
+      <entityField>ClassificationScores</entityField>
+      <view>ClassificationScoreMultipleEdit_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/ClassificatonAdminPreview_view/ClassificatonAdminPreview_view.aod b/neonView/ClassificatonAdminPreview_view/ClassificatonAdminPreview_view.aod
deleted file mode 100644
index 1a9bbcdc8b7c3d612317a8d6148e5718f6eef93b..0000000000000000000000000000000000000000
--- a/neonView/ClassificatonAdminPreview_view/ClassificatonAdminPreview_view.aod
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>ClassificatonAdminPreview_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <isOverlay v="false" />
-  <overlayOrientation>PORTRAIT</overlayOrientation>
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-      <autoHeight v="true" />
-    </boxLayout>
-  </layout>
-  <children>
-    <genericViewTemplate>
-      <name>classification</name>
-      <showDrawer v="true" />
-      <drawerCaption>Classification</drawerCaption>
-      <entityField>#ENTITY</entityField>
-      <fields>
-        <entityFieldLink>
-          <name>31662c73-7352-4eb2-889d-3f63bff25686</name>
-          <entityField>CLASSIFICATIONTYPE</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>7fddc4d4-6bdc-4c7a-9d69-bba4a9506707</name>
-          <entityField>CLASSIFICATIONGROUP</entityField>
-        </entityFieldLink>
-        <entityFieldLink>
-          <name>cb6e8f64-b2a4-4cc4-88b7-2f64f56b83dc</name>
-          <entityField>SCORETYPE</entityField>
-        </entityFieldLink>
-      </fields>
-    </genericViewTemplate>
-    <neonViewReference>
-      <name>97143b3d-9b13-4ad9-8f17-c134821d7a80</name>
-      <entityField>ClassificationGradings</entityField>
-      <view>ClassificationGradingMultiplePreview_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>214fbe22-378d-404e-99f8-f175e037f196</name>
-      <entityField>ClassificationScores</entityField>
-      <view>ClassificationScoreMultiplePreview_view</view>
-    </neonViewReference>
-  </children>
-</neonView>
diff --git a/neonView/ClassificatonPreview_view/ClassificatonPreview_view.aod b/neonView/ClassificatonPreview_view/ClassificatonPreview_view.aod
index 29ebb148c72534308c92c4a75a65077122bd422e..c66526bd77fa3230cbf1d393380f6c51b9324411 100644
--- a/neonView/ClassificatonPreview_view/ClassificatonPreview_view.aod
+++ b/neonView/ClassificatonPreview_view/ClassificatonPreview_view.aod
@@ -14,7 +14,9 @@
     <genericViewTemplate>
       <name>classification</name>
       <showDrawer v="true" />
-      <drawerCaption>Classification</drawerCaption>
+      <fixedDrawer v="true" />
+      <hideLabels v="false" />
+      <hideEmptyFields v="false" />
       <entityField>#ENTITY</entityField>
       <fields>
         <entityFieldLink>
@@ -25,7 +27,10 @@
     </genericViewTemplate>
     <genericViewTemplate>
       <name>info</name>
+      <showDrawer v="true" />
+      <fixedDrawer v="true" />
       <entityField>#ENTITY</entityField>
+      <isEditable v="false" />
       <title></title>
       <fields>
         <entityFieldLink>
diff --git a/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod b/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod
index 19ec98e97d3ca1fb6e441f2ef2ff5effc733f4fe..874bbf3c62f6c5150f3e208f50c825539a94715a 100644
--- a/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod
+++ b/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod
@@ -11,12 +11,12 @@
   <children>
     <treeTableViewTemplate>
       <name>EntriesTreeTable</name>
-      <nodeExpandedField>expanded</nodeExpandedField>
+      <nodeExpandedField></nodeExpandedField>
+      <hideContentSearch v="false" />
+      <entityField>#ENTITY</entityField>
       <defaultGroupFields>
         <element>CONTAINER</element>
       </defaultGroupFields>
-      <hideContentSearch v="false" />
-      <entityField>#ENTITY</entityField>
       <columns>
         <neonTreeTableColumn>
           <name>6100879d-dc6a-4c7e-b750-f5b7e627f48a</name>
diff --git a/neonView/OrganisationtClassificationAndChart_view/OrganisationtClassificationAndChart_view.aod b/neonView/OrganisationClassification/OrganisationClassification.aod
similarity index 73%
rename from neonView/OrganisationtClassificationAndChart_view/OrganisationtClassificationAndChart_view.aod
rename to neonView/OrganisationClassification/OrganisationClassification.aod
index 5af287813a87f0e58345de34b45311f3c7fb981b..9019bf34d2fc9a1c046f10134326513ba14eef59 100644
--- a/neonView/OrganisationtClassificationAndChart_view/OrganisationtClassificationAndChart_view.aod
+++ b/neonView/OrganisationClassification/OrganisationClassification.aod
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>OrganisationtClassificationAndChart_view</name>
+  <name>OrganisationClassification</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
     <boxLayout>
@@ -15,10 +15,5 @@
       <entityField>Classifications</entityField>
       <view>ClassificationTree_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>427a8f25-63e5-44fd-98b9-49553f02e38d</name>
-      <entityField>Classifications</entityField>
-      <view>ClassificationChart_view</view>
-    </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/OrganisationClassificationDrawer_view/OrganisationClassificationDrawer_view.aod b/neonView/OrganisationClassificationDrawer_view/OrganisationClassificationDrawer_view.aod
index 23aaa04349f00f25bad81265b3723c0e8320a19e..3f81db3f2e4ff280a021b5b2b8b9271c3ebd5f19 100644
--- a/neonView/OrganisationClassificationDrawer_view/OrganisationClassificationDrawer_view.aod
+++ b/neonView/OrganisationClassificationDrawer_view/OrganisationClassificationDrawer_view.aod
@@ -14,7 +14,7 @@
     <neonViewReference>
       <name>b49a0291-89cc-4962-8706-5044aa2f9e21</name>
       <entityField>#ENTITY</entityField>
-      <view>OrganisationtClassificationAndChart_view</view>
+      <view>OrganisationClassification</view>
     </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/OrganisationFilter_view/OrganisationFilter_view.aod b/neonView/OrganisationFilter_view/OrganisationFilter_view.aod
index 1cc87b9732a33851587d07a0ca3950c4d1c8d8c1..b969a541b7f3b3563add1bbf0bc2b4364bcafd7f 100644
--- a/neonView/OrganisationFilter_view/OrganisationFilter_view.aod
+++ b/neonView/OrganisationFilter_view/OrganisationFilter_view.aod
@@ -77,6 +77,10 @@
           <name>1908e7ac-9e6a-4104-9d5b-da60a10a1c02</name>
           <entityField>STATUS</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>c935dcaf-d1eb-4b2c-afee-a58f3f63458d</name>
+          <entityField>CLASSIFICATIONSTORAGE_ID</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>2a82ed1e-05bf-408a-82e0-4de6195dad49</name>
           <entityField>STANDARD_EMAIL_COMMUNICATION</entityField>
@@ -120,6 +124,10 @@
           <name>2c8450d2-a8a5-49d3-92c5-bf08d32a46db</name>
           <entityField>STATUS</entityField>
         </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>3aedcc38-0313-43d7-9c84-67f03e28038a</name>
+          <entityField>CLASSIFICATIONSTORAGE_ID</entityField>
+        </neonTreeTableColumn>
         <neonTreeTableColumn>
           <name>d134034c-e391-4df3-9205-465d8a390996</name>
           <entityField>STANDARD_EMAIL_COMMUNICATION</entityField>
diff --git a/neonView/OrganisationMain_view/OrganisationMain_view.aod b/neonView/OrganisationMain_view/OrganisationMain_view.aod
index 7c31d30da5f0f8c94646d827996da79ec32e758a..4b49bf017ef8e844fe502401ba56b0a5820d7f0c 100644
--- a/neonView/OrganisationMain_view/OrganisationMain_view.aod
+++ b/neonView/OrganisationMain_view/OrganisationMain_view.aod
@@ -40,6 +40,11 @@
       <entityField>ObjectTrees</entityField>
       <view>ObjectTreeFilter_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>0b618d7e-61e0-42f3-ad0b-176afb9f6da4</name>
+      <entityField>Classifications</entityField>
+      <view>ClassificationTree_view</view>
+    </neonViewReference>
     <neonViewReference>
       <name>45c0f486-e7df-48ac-a201-661ac07f5fed</name>
       <entityField>#ENTITY</entityField>
@@ -50,11 +55,6 @@
       <entityField>#ENTITY</entityField>
       <view>OrganisationAttributeRestriction_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>cdd8e4b8-b3aa-445f-affc-e1fc5b0c03cd</name>
-      <entityField>#ENTITY</entityField>
-      <view>OrganisationClassificationDrawer_view</view>
-    </neonViewReference>
     <neonViewReference>
       <name>eba90ed2-5e55-4cdb-9e0b-5a09feeb7536</name>
       <entityField>Documents</entityField>
diff --git a/neonView/OrganisationPreview_view/OrganisationPreview_view.aod b/neonView/OrganisationPreview_view/OrganisationPreview_view.aod
index bf5ee6388ff0dc8ccda5ab6de099597528e34587..b57cbbcf2f6b70b41115f6f620381b76b2778fa6 100644
--- a/neonView/OrganisationPreview_view/OrganisationPreview_view.aod
+++ b/neonView/OrganisationPreview_view/OrganisationPreview_view.aod
@@ -102,8 +102,8 @@
           <entityField>LastActivity</entityField>
         </entityFieldLink>
         <entityFieldLink>
-          <name>f367d831-d594-4dc1-8e1e-b7c3bf45e2ad</name>
-          <entityField>OpenTasks</entityField>
+          <name>7699811a-42f2-48d4-833d-1425db5ba5d0</name>
+          <entityField>CLASSIFICATIONSTORAGE_ID</entityField>
         </entityFieldLink>
       </fields>
     </scoreCardViewTemplate>
diff --git a/neonView/SaleprojectOverviewCharts_view/SaleprojectOverviewCharts_view.aod b/neonView/SaleprojectOverviewCharts_view/SaleprojectOverviewCharts_view.aod
deleted file mode 100644
index cf426058ce5702f9dbe96151abe91d548cb0a906..0000000000000000000000000000000000000000
--- a/neonView/SaleprojectOverviewCharts_view/SaleprojectOverviewCharts_view.aod
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>SaleprojectOverviewCharts_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-      <direction>HORIZONTAL</direction>
-      <maxDirectionElements v="3" />
-    </boxLayout>
-  </layout>
-  <children>
-    <neonViewReference>
-      <name>4191cb26-76aa-4094-8ff4-b0cfc17bda2c</name>
-      <entityField>ClassificationGroups</entityField>
-      <view>ClassificationGroupAnalysesChart_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>a5583507-7e5a-40dd-9af8-a227b6be5af3</name>
-      <entityField>SalesprojectForecastCharts</entityField>
-      <view>TurnoverChartForcastDrawer_view</view>
-    </neonViewReference>
-  </children>
-</neonView>
diff --git a/neonView/SalesprojectClassificationAndChart_view/SalesprojectClassificationAndChart_view.aod b/neonView/SalesprojectClassificationAndChart_view/SalesprojectClassificationAndChart_view.aod
deleted file mode 100644
index 912611206de885cbb79c126b484218054b42c5c1..0000000000000000000000000000000000000000
--- a/neonView/SalesprojectClassificationAndChart_view/SalesprojectClassificationAndChart_view.aod
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>SalesprojectClassificationAndChart_view</name>
-  <title></title>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-      <direction>HORIZONTAL</direction>
-      <maxDirectionElements v="2" />
-    </boxLayout>
-  </layout>
-  <children>
-    <neonViewReference>
-      <name>b2bbddb9-1a44-4926-9707-7052f96e5963</name>
-      <entityField>Classifications</entityField>
-      <view>ClassificationTree_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>0442c345-d0a3-4778-a906-c5ef86dacd16</name>
-      <entityField>Classifications</entityField>
-      <view>ClassificationChart_view</view>
-    </neonViewReference>
-  </children>
-</neonView>
diff --git a/neonView/SalesprojectClassificationAttribute_view/SalesprojectClassificationAttribute_view.aod b/neonView/SalesprojectClassificationAttribute_view/SalesprojectClassificationAttribute_view.aod
deleted file mode 100644
index 6097fe64b235e5b44beb8e33baf39de6ef8754b2..0000000000000000000000000000000000000000
--- a/neonView/SalesprojectClassificationAttribute_view/SalesprojectClassificationAttribute_view.aod
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>SalesprojectClassificationAttribute_view</name>
-  <title>Categorization</title>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <boxLayout>
-      <name>layout</name>
-    </boxLayout>
-  </layout>
-  <children>
-    <neonViewReference>
-      <name>2cb777a4-cf46-4337-9b17-fc8b6026209b</name>
-      <entityField>#ENTITY</entityField>
-      <view>SalesprojectClassificationDrawer_view</view>
-    </neonViewReference>
-    <neonViewReference>
-      <name>523e3855-eade-4cce-842d-9b272b028cbb</name>
-      <entityField>AttributeTree</entityField>
-      <view>AttributeRelationTreeDrawer_view</view>
-    </neonViewReference>
-  </children>
-</neonView>
diff --git a/neonView/SalesprojectClassificationDrawer_view/SalesprojectClassificationDrawer_view.aod b/neonView/SalesprojectClassificationDrawer_view/SalesprojectClassificationDrawer_view.aod
deleted file mode 100644
index a51cbe2ee81f7ab96d0de0a2047453c730d7ccad..0000000000000000000000000000000000000000
--- a/neonView/SalesprojectClassificationDrawer_view/SalesprojectClassificationDrawer_view.aod
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>SalesprojectClassificationDrawer_view</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <drawerLayout>
-      <name>layout</name>
-      <layoutCaption>Classification</layoutCaption>
-      <fixedDrawer v="true" />
-    </drawerLayout>
-  </layout>
-  <children>
-    <neonViewReference>
-      <name>8cec9c22-7304-47f3-9d46-909dec12ca2a</name>
-      <entityField>#ENTITY</entityField>
-      <view>SalesprojectClassificationAndChart_view</view>
-    </neonViewReference>
-  </children>
-</neonView>
diff --git a/neonView/SalesprojectClassification_view/SalesprojectClassification_view.aod b/neonView/SalesprojectClassification_view/SalesprojectClassification_view.aod
deleted file mode 100644
index b6a3767d13dc962239c7da8f748b9d4f3c339bff..0000000000000000000000000000000000000000
--- a/neonView/SalesprojectClassification_view/SalesprojectClassification_view.aod
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>SalesprojectClassification_view</name>
-  <title>Classifications</title>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <layout>
-    <noneLayout>
-      <name>layout</name>
-    </noneLayout>
-  </layout>
-  <children>
-    <scoreCardViewTemplate>
-      <name>ClassificationResult</name>
-      <entityField>#ENTITY</entityField>
-      <fields>
-        <entityFieldLink>
-          <name>c9fef1fc-21d2-4b6d-913f-a4507fde4dcb</name>
-          <entityField>ClassificationResult</entityField>
-        </entityFieldLink>
-      </fields>
-    </scoreCardViewTemplate>
-    <neonViewReference>
-      <name>e8de8288-df16-4deb-9ce0-6554a669724f</name>
-      <entityField>Classifications</entityField>
-      <view>ClassificationTree_view</view>
-    </neonViewReference>
-  </children>
-</neonView>
diff --git a/neonView/SalesprojectFilter_view/SalesprojectFilter_view.aod b/neonView/SalesprojectFilter_view/SalesprojectFilter_view.aod
index d0ac5d4dec825ac4bfd966729eb8749373468341..2713e11d767a15467c952dfae1354d775b7a2fdc 100644
--- a/neonView/SalesprojectFilter_view/SalesprojectFilter_view.aod
+++ b/neonView/SalesprojectFilter_view/SalesprojectFilter_view.aod
@@ -60,6 +60,7 @@
         <element>PROJECTCODE</element>
         <element>PROJECTTITLE</element>
       </linkedColumns>
+      <fixedFilterFields />
       <title></title>
       <columns>
         <neonTableColumn>
@@ -82,6 +83,10 @@
           <name>20f132ef-161e-4b84-b6ae-1f4daf016d16</name>
           <entityField>PROBABILITY_AI</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>88e6bebb-e83d-43ec-82f1-cc778fac458e</name>
+          <entityField>CLASSIFICATIONSTORAGE_ID</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>fec843c3-f7c0-42c7-8295-50386651edb2</name>
           <entityField>STARTDATE</entityField>
@@ -102,11 +107,13 @@
     </tableViewTemplate>
     <treeTableViewTemplate>
       <name>Treetable</name>
+      <defaultGroupFields />
       <entityField>#ENTITY</entityField>
       <linkedColumns>
         <element>PROJECTCODE</element>
         <element>PROJECTTITLE</element>
       </linkedColumns>
+      <fixedFilterFields />
       <columns>
         <neonTreeTableColumn>
           <name>c3c8cd94-5bb4-46bb-a61b-fec67fcc4841</name>
@@ -124,6 +131,10 @@
           <name>9b7b8a15-4a8d-41cb-bb46-3b1ed573dc6e</name>
           <entityField>CONTACT_ID</entityField>
         </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>6d9d1365-985a-4357-8ecc-16ddcc201ea8</name>
+          <entityField>CLASSIFICATIONSTORAGE_ID</entityField>
+        </neonTreeTableColumn>
         <neonTreeTableColumn>
           <name>745d6192-4817-49e6-8cb2-8470c9c25f4d</name>
           <entityField>STARTDATE</entityField>
diff --git a/neonView/SalesprojectMain_view/SalesprojectMain_view.aod b/neonView/SalesprojectMain_view/SalesprojectMain_view.aod
index 51150b360d3f8f827aec84f675852323586c1767..9098e124f358def2d86451abbac946a00b6cd0aa 100644
--- a/neonView/SalesprojectMain_view/SalesprojectMain_view.aod
+++ b/neonView/SalesprojectMain_view/SalesprojectMain_view.aod
@@ -30,9 +30,14 @@
       <view>SalesprojectMemberActivity_view</view>
     </neonViewReference>
     <neonViewReference>
-      <name>67659a20-068f-4522-ad33-2c35e29f929a</name>
-      <entityField>#ENTITY</entityField>
-      <view>SalesprojectClassificationAttribute_view</view>
+      <name>7ac103ea-1131-41e0-85ce-e7d2fc86dfd8</name>
+      <entityField>Attributes</entityField>
+      <view>AttributeRelationTree_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>d0c1344f-c143-43b4-9c44-f823fb525eff</name>
+      <entityField>Classifications</entityField>
+      <view>ClassificationTree_view</view>
     </neonViewReference>
     <neonViewReference>
       <name>8a83afee-e02c-4714-9641-13b62c95cea1</name>
diff --git a/neonView/SalesprojectOverview_view/SalesprojectOverview_view.aod b/neonView/SalesprojectOverview_view/SalesprojectOverview_view.aod
index 6385f42110ad2479dcb550376ffa2094159aa143..9a84bbb876ca23e4febca4440f2caaddaf6c263b 100644
--- a/neonView/SalesprojectOverview_view/SalesprojectOverview_view.aod
+++ b/neonView/SalesprojectOverview_view/SalesprojectOverview_view.aod
@@ -24,9 +24,9 @@
       </devices>
     </neonViewReference>
     <neonViewReference>
-      <name>dd0dd64f-1135-46c5-82d7-9d1e67cf4810</name>
-      <entityField>#ENTITY</entityField>
-      <view>SaleprojectOverviewCharts_view</view>
+      <name>729108f8-a054-4ea7-9ef8-14b686c6340b</name>
+      <entityField>SalesprojectForecastCharts</entityField>
+      <view>TurnoverChartForcastDrawer_view</view>
     </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/SalesprojectPreview_view/SalesprojectPreview_view.aod b/neonView/SalesprojectPreview_view/SalesprojectPreview_view.aod
index dbf8adad5727fdd82cff1371702bd42bd82a794e..97bfa5d73f75c2285f288f5dfe828d02446e39e8 100644
--- a/neonView/SalesprojectPreview_view/SalesprojectPreview_view.aod
+++ b/neonView/SalesprojectPreview_view/SalesprojectPreview_view.aod
@@ -99,6 +99,7 @@
     </neonViewReference>
     <scoreCardViewTemplate>
       <name>AdditionalInfo</name>
+      <fieldActions />
       <entityField>#ENTITY</entityField>
       <fields>
         <entityFieldLink>
@@ -106,8 +107,8 @@
           <entityField>InactiveTime</entityField>
         </entityFieldLink>
         <entityFieldLink>
-          <name>838cc7e2-6d6a-484a-92ad-d01adc2504df</name>
-          <entityField>ClassificationResult</entityField>
+          <name>49513dd7-f19a-450b-9fcf-d320e2f72c42</name>
+          <entityField>CLASSIFICATIONSTORAGE_ID</entityField>
         </entityFieldLink>
         <entityFieldLink>
           <name>ce670b75-346e-4aeb-b72d-5ef68dd77e71</name>
diff --git a/process/AISalesproject_lib/process.js b/process/AISalesproject_lib/process.js
index c1a63392f2bfc2786c2e3e79c4f38146e11f990d..e0ceec91ec4f07fe072160f85fdbf3133a09ca71 100644
--- a/process/AISalesproject_lib/process.js
+++ b/process/AISalesproject_lib/process.js
@@ -202,7 +202,7 @@ AISalesprojectUtil.getClassificationValues = function (pClassificationType, pObj
             .and("CLASSIFICATION.OBJECT_TYPE", pObjectType)
             .and("CLASSIFICATION.OBJECT_ROWID", pObjectRowid))
         .leftJoin("CLASSIFICATIONSCORE", "CLASSIFICATIONSCORE_ID = CLASSIFICATIONSCOREID")
-        .where("CLASSIFICATIONTYPE.CLASSIFICATIONTYPE", pClassificationType)
+        .where("CLASSIFICATIONTYPE.OBJECT_TYPE", pClassificationType)
         .andIfSet("CLASSIFICATIONTYPE.SCORETYPE", pScoreType)
         .cell()
 
diff --git a/process/AttributeFilter_lib/process.js b/process/AttributeFilter_lib/process.js
index 81a5208ba9200da0a4296046c55485446b2f78a5..d70501cef8425a1503b22892f6d8f34341c4c947 100644
--- a/process/AttributeFilter_lib/process.js
+++ b/process/AttributeFilter_lib/process.js
@@ -25,7 +25,7 @@ function AttributeSearchNameCoder(){}
  * 
  * @param {String} pUid                 <p/> attribute uid of the attribute that has to be encoded
  * @param {String} pAttributeType       <p/> attribute type of the attribute that has to be encoded 
- *                                      <br /> while you may able to specify any string, only values of $AttributeTypes.*** are useful
+ *                                      <br/> while you may able to specify any string, only values of $AttributeTypes.*** are useful
  *                                      
  * @return {String}                     <p/> an encoded string of the given parametervalues 
  *                                      <br/> this is basically a serialized object which is base64 encoded
diff --git a/process/ClassificationFilter_lib/ClassificationFilter_lib.aod b/process/ClassificationFilter_lib/ClassificationFilter_lib.aod
new file mode 100644
index 0000000000000000000000000000000000000000..9b182044a8785df3037df931f0df656d095ae109
--- /dev/null
+++ b/process/ClassificationFilter_lib/ClassificationFilter_lib.aod
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+  <name>ClassificationFilter_lib</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/ClassificationFilter_lib/process.js</process>
+  <variants>
+    <element>LIBRARY</element>
+  </variants>
+</process>
diff --git a/process/ClassificationFilter_lib/process.js b/process/ClassificationFilter_lib/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..ed71bb867c3a4386c81698a739ca1b7fba9442af
--- /dev/null
+++ b/process/ClassificationFilter_lib/process.js
@@ -0,0 +1,343 @@
+import("system.logging");
+import("Context_lib");
+import("Classification_lib");
+import("Entity_lib");
+import("Sql_lib");
+import("system.entities");
+import("system.SQLTYPES");
+import("system.translate");
+import("system.util");
+import("system.vars");
+import("Util_lib");
+
+/**
+ * Methods used for the classification type filter extension set 
+ * Do not create an instance of this!
+ * 
+ * @class
+ */
+function ClassificationTypeFilterUtils() {}
+
+/**
+ * fetches classificationtypes and transforms them into filter fields
+ * 
+ * @param {String} pObjectType       <p/> contextId of the context whoes attributes are used for providing the filter fields
+ *                                      
+ * @return {String}                  <p/> field-definitions (array of objects) that are ready to use for a filterExtensionSet in a stringified form
+ *                                   <br/> The object within the array contains the following properties:
+ *                                   <ul>
+ *                                      <li>name - classificationtypeid (UUID of the classificationtype)</li>
+ *                                      <li>title - "classification: " + string of the classificationtype translated (for the end user)</li>
+ *                                      <li>contentType - string of the neon-contentType (TEXT)</li>
+ *                                      <li>hasDropDownValues - boolean if possible values have to be calculated or not (always true atm)</li>
+ *                                   </ul>
+ * @static 
+ */
+ClassificationTypeFilterUtils.getFilterFields = function(pObjectType) 
+{
+    var res = [];
+    var scoreTypes = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.SCORETYPE, CLASSIFICATIONGROUP.TITLE")
+                            .from("CLASSIFICATIONTYPE")
+                            .join("CLASSIFICATIONGROUP", "CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID = CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID")
+                            .where("CLASSIFICATIONTYPE.OBJECT_TYPE", pObjectType)
+                            .orderBy("CLASSIFICATIONTYPE.SCORETYPE asc")
+                            .table();
+
+    var titleField = SqlUtils.translateStatementWithQuotes(ClassificationTypeFilterUtils.getTranslationSql());
+    for (let i = 0; i < scoreTypes.length; i++)
+    {
+        res.push({
+                name: scoreTypes[i][0],
+                title: translate.text(scoreTypes[i][2])+ ": " + translate.text(scoreTypes[i][1]),
+                contentType: "TEXT",
+                hasDropDownValues: true,
+                isGroupable: true,          // These Fields are also able to be grouped
+                groupedRecordField: "CLASSIFICATION.CLASSIFICATIONSCORE_ID",  // The DB-field that is being grouped by (see also groupQueryProcess)
+                titleRecordField: titleField     // The displayname (see also groupQueryProcess)
+            });
+    }
+
+    return JSON.stringify(res);
+}
+
+/**
+ * fetches classificationscores that are filterable and transforms them into filter fields for the current context
+ * 
+ * @see ClassificationTypeFilterUtils.getFilterFields for more details
+ * @static 
+ */
+ClassificationTypeFilterUtils.makeFilterFields = function()
+{
+var filter = JSON.parse(vars.getString("$local.filter"));
+  
+var classificationTypeId = filter.name;
+
+var classificationValue = newSelect("CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID, CLASSIFICATIONSCORE.TITLE")
+                                        .from("CLASSIFICATIONSCORE")
+                                        .where("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID", classificationTypeId)
+                                        .orderBy("CLASSIFICATIONSCORE.TITLE")
+                                        .table();
+                                        
+for (let i = 0; i < classificationValue.length; i++) 
+    classificationValue[i][1] = translate.text(classificationValue[i][1])
+
+return classificationValue;
+}
+
+/**
+ * Builds a Sql-condition for a classification filter extension set. This allows to filter for classificationtypes within a db-table
+ *
+ * @see ClassificationTypeFilterUtils.getFilterCondition for more details
+ * @static 
+ */
+ClassificationTypeFilterUtils.makeFilterConditionSql = function()
+{
+    var filterCond = vars.get("$local.condition");
+    var uidInfo = EntityUtils.parseUidColumn(vars.get("$sys.uidcolumn"));
+    var columnPlaceholder = vars.get("$local.columnPlaceholder");
+    var res = ClassificationTypeFilterUtils.getFilterCondition(filterCond, uidInfo.table, uidInfo.column, columnPlaceholder);
+    
+    return res;
+}
+
+/**
+ * Builds a Sql-condition that may be used in a filter extension set and allows to filter for classificationtypes within a db-table
+ * 
+ * @param {String} pCondition           <p/> a SQL-condition like it is given in the "$local.condition"-variable in filter extension sets
+ * @param {String} pIdTableName         <p/> name of the db-table where the data shall be filtered
+ * @param {String} pIdColumnName        <p/> name of the primarykey-column of the table that was given via pIdTablename
+ * @param {String} pColumnPlaceholder   <p/> name of the placeholder where the columnname should be like it is given in the 
+ *                                           "$local.columnPlaceholder"-variable in filter extension sets
+ *                                     
+ * @return {SqlBuilder}                 <p/> a SqlBuilder-condition that contains a sub-select and may be used for filtering data
+ * @static 
+ */
+ClassificationTypeFilterUtils.getFilterCondition = function(pCondition, pIdTableName, pIdColumnName, pColumnPlaceholder) 
+{
+    var resSql;   
+    
+    var condition = StringUtils.replaceAll(pCondition, pColumnPlaceholder, "CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID");
+        
+    //a SqlBuilder.IN() in a newWhere is not used here since the subselect can contain a placeholder
+    //(the variable condition) that would break the function
+    resSql = pIdTableName + "." + pIdColumnName + " in (" + newSelect(pIdTableName + "." + pIdColumnName)
+            .from(pIdTableName)
+            .leftJoin("CLASSIFICATION", newWhere("CLASSIFICATION.OBJECT_ROWID = " + pIdTableName + "." + pIdColumnName))
+            .leftJoin("CLASSIFICATIONSCORE", "CLASSIFICATION.CLASSIFICATIONSCORE_ID = CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID")
+            .where(condition) + ")";
+
+    return resSql;
+};
+
+/**
+* gets all titletranslations of the classification scores
+* 
+* 
+* @return {String} a SQL-expression (case-when-statement) that resolves the KEYID into the title -> as preparedSatement-elements
+*/
+ClassificationTypeFilterUtils.getTranslationSql = function()
+{
+    
+    var config = entities.createConfigForLoadingRows().entity("ClassificationScore_entity")
+        .fields(["CLASSIFICATIONSCOREID", "translatedTitle"]);
+        
+
+        var rows = entities.getRows(config);
+        var res = SqlUtils.getResolvingCaseWhenFromObject(rows, "CLASSIFICATIONSCOREID", "translatedTitle", "CLASSIFICATIONSCORE_ID");
+        return res;
+}
+
+
+
+/**
+ * Procides static methods for en- or decoding classification group filter names
+ * AttributeFilter names are shared over several processes and contain therefore various information
+ * The infomration needs to be encoded to be able to transfer it over the different processes
+ * 
+ * @class
+ * 
+ */
+function ClassificationGroupFilterNameCoder(){}
+
+/**
+ * encodes several parameters into one string that can be used as classification group filter-name
+ * 
+ * @param {String} pUid                 <p/> attribute uid of the attribute that has to be encoded
+ * @param {String} pAttributeType       <p/> attribute type of the attribute that has to be encoded 
+ *                                      <br/> while you may able to specify any string, only values of $AttributeTypes.*** are useful
+ *                                      
+ * @return {String}                     <p/> an encoded string of the given parametervalues 
+ *                                      <br/> this is basically a serialized object which is base64 encoded
+ * @static 
+ */
+ClassificationGroupFilterNameCoder.encode = function (pClassificationGroupId, pRepresentingSqlExpression)
+{
+    var res = {
+        classificationGroupId: pClassificationGroupId, 
+        representingSqlExpression: pRepresentingSqlExpression
+    };
+    res = JSON.stringify(res);
+    res = util.encodeBase64String(res);
+    return res;
+};
+
+/**
+ * decodes a string that was encoded with AttributeSearchNameCoder.encode
+ * 
+ * 
+ * @param {String} pEncodedString       <p/> string that shall be decoded; the origin of the name has to be a filter-object
+ *                                      
+ * @return {Object}                     <p/> an object that contains all keys and values that have been encoded with AttributeSearchNameCoder.encode
+ * @static 
+ */
+ClassificationGroupFilterNameCoder.decode = function (pEncodedString)
+{
+    var res = pEncodedString.substr(pEncodedString.lastIndexOf(".") + 1);
+    res = util.decodeBase64String(res);
+    res = JSON.parse(res);
+    return res;
+};
+
+/**
+ * Methods used for the classification group filter extension set 
+ * Do not create an instance of this!
+ * 
+ * @class
+ */
+function ClassificationGroupFilterUtils() {}
+
+
+/**
+ * fetches classificationgroups and transforms them into filter fields
+ * 
+ * @param {String} pObjectType       <p/> contextId of the context whoes attributes are used for providing the filter fields
+ *                                      
+ * @return {String}                  <p/> field-definitions (array of objects) that are ready to use for a filterExtensionSet in a stringified form
+ *                                   <br/> The object within the array contains the following properties:
+ *                                   <ul>
+ *                                      <li>name - classificationtypeid (UUID of the classificationtype)</li>
+ *                                      <li>title - "classification: " + string of the classificationtype translated (for the end user)</li>
+ *                                      <li>contentType - string of the neon-contentType (TEXT)</li>
+ *                                      <li>hasDropDownValues - boolean if possible values have to be calculated or not (always true atm)</li>
+ *                                   </ul>
+ * @static 
+ */
+ClassificationGroupFilterUtils.getFilterFields = function(pObjectType)
+{
+    var sqlHelper = new SqlMaskingUtils();
+    var res = [];
+
+    var config = entities.createConfigForLoadingRows()
+        .entity("ClassificationGroup_entity")
+        .fields(["CLASSIFICATIONGROUPID", "#CONTENTTITLE"])
+        .provider("SpecificObjectTypeGroups")
+        .addParameter("ObjectType_param", pObjectType);
+    var classificationGroups = entities.getRows(config);
+    logging.log("classificationGroups>>" + JSON.stringify(classificationGroups));
+    classificationGroups = ArrayUtils.sortArrayOfObjects(classificationGroups, "#CONTENTTITLE", true, false);
+
+    classificationGroups.forEach(function(classificationGroup, idx){
+        var classificationGroupId = classificationGroup["CLASSIFICATIONGROUPID"];
+        var classificationGroupTitle = classificationGroup["#CONTENTTITLE"];
+        
+        var representingSqlExpression = sqlHelper.substring("CLASSIFICATIONVALUE", idx+1, 1);
+        var name = ClassificationGroupFilterNameCoder.encode(classificationGroupId, sqlHelper.substring("CLASSIFICATIONVALUE", idx+1, 1));
+        res.push({
+            name: name,
+            title: classificationGroupTitle,
+            contentType: "TEXT",
+            hasDropDownValues: true,
+            isGroupable: true,
+            groupedRecordField: representingSqlExpression  //title and group valure are the same (for example a resulting "A")
+        });
+    });
+    return JSON.stringify(res);
+};
+
+ClassificationGroupFilterUtils.makeFilterFields = function()
+{
+    var objectType = ContextUtils.getCurrentContextId();
+    var res = ClassificationGroupFilterUtils.getFilterFields(objectType);
+    return res;
+};
+
+
+/**
+ * fetches classificationscores that are filterable and transforms them into filter fields for the current context
+ * 
+ * @see ClassificationTypeFilterUtils.getFilterFields for more details
+ * @static 
+ */
+ClassificationGroupFilterUtils.getFilterValues = function(pFilter)
+{
+    var filter = JSON.parse(pFilter);
+    var filterName = filter.name;
+    var classificationGroupId = ClassificationGroupFilterNameCoder.decode(filterName).classificationGroupId;
+
+    var classificationValue = newSelect("CLASSIFICATIONGRADING.GRADING, CLASSIFICATIONGRADING.GRADING")
+        .from("CLASSIFICATIONGRADING")
+        .where("CLASSIFICATIONGRADING.CLASSIFICATIONGROUP_ID", classificationGroupId)
+        .orderBy("CLASSIFICATIONGRADING.MAXGRADEFORSCORE desc")
+        .table();
+
+    return classificationValue;
+};
+
+
+/**
+ * fetches classificationscores that are filterable and transforms them into filter fields for the current context
+ * 
+ * @see ClassificationTypeFilterUtils.getFilterFields for more details
+ * @static 
+ */
+ClassificationGroupFilterUtils.makeFilterValues = function()
+{
+    var filter = vars.getString("$local.filter")
+    var res = ClassificationGroupFilterUtils.getFilterValues(filter);
+    return res;
+};
+
+/**
+ * Builds a Sql-condition that may be used in a filter extension set and allows to filter for classificationtypes within a db-table
+ * 
+ * @param {String} pCondition           <p/> a SQL-condition like it is given in the "$local.condition"-variable in filter extension sets
+ * @param {String} pIdTableName         <p/> name of the db-table where the data shall be filtered
+ * @param {String} pIdColumnName        <p/> name of the primarykey-column of the table that was given via pIdTablename
+ * @param {String} pColumnPlaceholder   <p/> name of the placeholder where the columnname should be like it is given in the 
+ *                                           "$local.columnPlaceholder"-variable in filter extension sets
+ *                                     
+ * @return {SqlBuilder}                 <p/> a SqlBuilder-condition that contains a sub-select and may be used for filtering data
+ * @static 
+ */
+ClassificationGroupFilterUtils.getFilterCondition = function(pObjectType, pFilterName, pCondition, pRawValue, pOperatorName, pIdTableName,
+    pIdColumnName, pColumnPlaceholder)
+{
+    var decodedFilterName = ClassificationGroupFilterNameCoder.decode(pFilterName);
+    var condition = StringUtils.replaceAll(pCondition, pColumnPlaceholder, decodedFilterName.representingSqlExpression);
+            
+    return condition;
+};
+
+
+/**
+ * Builds a Sql-condition for a classification group filter extension set. This allows to filter for classificationgroups within a db-table
+ * 
+ *                                      
+ * @see ClassificationGroupFilterUtils.getFilterCondition for more details
+ * @static 
+ */
+ClassificationGroupFilterUtils.makeFilterConditionSql = function()
+{
+    var objectType = ContextUtils.getCurrentContextId();
+    var filterName = vars.get("$local.name");
+    var filterCond = vars.get("$local.condition");
+    var filterRawValue = vars.get("$local.rawvalue");
+    var filterOpratorName = vars.get("$local.operator2").trim();
+    var uidInfo = EntityUtils.parseUidColumn(vars.get("$sys.uidcolumn"));
+    var columnPlaceholder = vars.get("$local.columnPlaceholder");
+    
+    var res = ClassificationGroupFilterUtils.getFilterCondition(objectType, filterName, filterCond, filterRawValue, filterOpratorName, 
+        uidInfo.table, uidInfo.column, columnPlaceholder);
+    
+    return res;
+};
\ No newline at end of file
diff --git a/process/Classification_lib/process.js b/process/Classification_lib/process.js
index 0970b047c9c23c9f6479df9187b0139f30746c2b..baa8bf080832abad6dba02de9b24c8675fcaa059 100644
--- a/process/Classification_lib/process.js
+++ b/process/Classification_lib/process.js
@@ -1,8 +1,13 @@
+import("system.text");
+import("system.translate");
+import("system.result");
+import("system.entities");
 import("system.eMath");
 import("system.util");
 import("system.vars");
 import("system.db");
 import("Sql_lib");
+import("Util_lib");
 
 /**
  * Methods to manage classifications.<br>
@@ -12,12 +17,35 @@ import("Sql_lib");
  */
 function ClassificationUtils() {}
 
+/**
+ * Formats the summary title for one specific group <br/>
+ * This is done by 
+ * 
+
+ * @param {Number|String} pCurrentScore     <p/>Current score that is reached for a group, e.g. 45
+ * @param {String} pGroupId                 <p/>UID of the classification group where the display value is determined. <br/>
+ *                                          This is used for determing the maximum value of the group and the resulting 
+ *                                          classificaiton value (for example: "B")
+ * @param {String} pGroupName               <p/>Name of the group that was passed as ID. This is used as display value and will not be translated,
+ *                                          you have to pass this value already translated to the target locale. <br/>
+ *                                          The reason for not loading this value based on the groupId is: better performance optimization
+ * @return {String}                         <p/>formated and translated title, e.g.: "1. Target Group: 45/120 points = B"
+ */
+ClassificationUtils.formatDisplaySummaryForGroup = function(pCurrentScore, pGroupId, pGroupName) 
+{
+    var maxScore = ClassificationUtils.getMaxScore(pGroupId);
+    var classifications = ClassificationUtils.getClassifications(pCurrentScore, pGroupId);
+
+    pCurrentScore = text.formatDouble(pCurrentScore, "#");
+    maxScore = text.formatDouble(maxScore, "#");
+    var res = translate.withArguments("%0: %1/%2 points = %3", [pGroupName, pCurrentScore, maxScore, classifications]);
+    return res;
+};
+
 /**
  * Get the score of the classification. You can get all groups at once or only the score for one group.
  * 
- * @param {String} pClassificationType                          <p>
- *                                                              The classification-type (usage) e.g. the key id<br>
- *                                                              from keyword 'ClassificationType'.<br>
+
  * @param {String} pObjectType                                  <p>
  *                                                              The object type.<br>
  * @param {String} pObjectRowid                                 <p>
@@ -30,18 +58,18 @@ function ClassificationUtils() {}
  *                                                              Returns all scores as object-map.<br>
  *                                                              (e.g. {"scoreGroup1": 0, "scoreGroup2": 20})
  */
-ClassificationUtils.getScoreAsObject = function(pClassificationType, pObjectType, pObjectRowid, pClassificationGroup)
+ClassificationUtils.getScoreAsObject = function(pObjectType, pObjectRowid, pClassificationGroup)
 {
-    var score = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP, case when sum(score) is not null then sum(score) else 0 end")
+    var score = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, case when sum(score) is not null then sum(score) else 0 end")
         .from("CLASSIFICATIONTYPE")
         .leftJoin("CLASSIFICATION", newWhere("CLASSIFICATIONTYPEID = CLASSIFICATIONTYPE_ID")
             .and("CLASSIFICATION.OBJECT_TYPE", pObjectType)
             .and("CLASSIFICATION.OBJECT_ROWID", pObjectRowid))
         .leftJoin("CLASSIFICATIONSCORE", "CLASSIFICATIONSCORE_ID = CLASSIFICATIONSCOREID")
-        .where("CLASSIFICATIONTYPE.CLASSIFICATIONTYPE", pClassificationType)
-        .andIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP", pClassificationGroup)
-        .groupBy("CLASSIFICATIONGROUP")
-        .orderBy("CLASSIFICATIONGROUP")
+        .where("CLASSIFICATIONTYPE.OBJECT_TYPE", pObjectType)
+        .andIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", pClassificationGroup)
+        .groupBy("CLASSIFICATIONGROUP_ID")
+        .orderBy("CLASSIFICATIONGROUP_ID")
         .table();
         
     var scores = {};
@@ -53,92 +81,77 @@ ClassificationUtils.getScoreAsObject = function(pClassificationType, pObjectType
 }
 
 /**
- * Get the score of the classification. You can get all groups at once or only the score for one group.
+ * Gets the scores of a Object, either for all of them or only for one group (depending on the pClassificationGroupId param, 
+ * if it's set you get only the score of that group)
  * 
- * @param {String} pClassificationType                          <p>
- *                                                              The classification-type (usage) e.g. the key id<br>
- *                                                              from keyword 'ClassificationType'.<br>
  * @param {String} pObjectType                                  <p>
  *                                                              The object type.<br>
  * @param {String} pObjectRowid                                 <p>
  *                                                              The row id. (UUID of the object, e.g: OrganisationId of Organisation)<br>
- * @param {String} pClassificationGroup=undefined (optional)    <p>
- *                                                              The classification group. If it is undefined,<br>
- *                                                              the classification for all groups are returned <br>
+ * @param {String} pClassificationGroupId (optional)    <p>
+ *                                                              The classification group id. If it is undefined,<br>
+ *                                                              the classificationScores for all groups are returned <br>
  *                                                              as Object(-map)<br>
  * @return {Array}                                             <p>
- *                                                              Returns all scores in a Array.<br>
- *                                                              (e.g. ["10,"30","70"] <br>
- *                                                              0 gets returned for null values)
+ *                                                              Returns all scores in a Array with this structure:<br>
+ *                                                              
+ *                                                              [[ID, SCORE], [ID, SCORE], [ID, SCORE]];
  */
-ClassificationUtils.getScore = function(pClassificationType, pObjectType, pObjectRowid, pClassificationGroup)
+ClassificationUtils.getScore = function(pObjectType, pObjectRowid, pClassificationGroupId)
 {
-    var score = newSelect("sum(score), CLASSIFICATIONTYPE.CLASSIFICATIONGROUP")
+    var scoreArray = [];
+    var score = newSelect("sum(score), CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID")
         .from("CLASSIFICATIONTYPE")
         .leftJoin("CLASSIFICATION", newWhere("CLASSIFICATIONTYPEID = CLASSIFICATIONTYPE_ID")
             .and("CLASSIFICATION.OBJECT_TYPE", pObjectType)
             .and("CLASSIFICATION.OBJECT_ROWID", pObjectRowid))
         .leftJoin("CLASSIFICATIONSCORE", "CLASSIFICATIONSCORE_ID = CLASSIFICATIONSCOREID")
-        .where("CLASSIFICATIONTYPE.CLASSIFICATIONTYPE", pClassificationType)
-        .andIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP", pClassificationGroup)
-        .groupBy("CLASSIFICATIONGROUP")
-        .orderBy("CLASSIFICATIONGROUP")
+        .where("CLASSIFICATIONTYPE.OBJECT_TYPE", pObjectType)
+        .andIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", pClassificationGroupId)
+        .groupBy("CLASSIFICATIONGROUP_ID")
+        .orderBy("CLASSIFICATIONGROUP_ID")
         .table();
-        
-    for (let i = 0; i < score.length; i++)
+
+    var sorting = newSelect("distinct CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, CLASSIFICATIONGROUP.SORTING")
+                            .from("CLASSIFICATIONGROUP")
+                            .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID")
+                            .where("CLASSIFICATIONTYPE.OBJECT_TYPE", pObjectType)
+                            .orderBy("CLASSIFICATIONGROUP.SORTING")
+                            .table();
+
+    for (var i = 0; i < sorting.length; i++)
     {
-        if(score[i][0] == "")
-            score[i][0] = 0;
+        for (var ii = 0; ii < score.length; ii++) {
+            if(score[ii][1] == sorting[i][0])
+            {
+                scoreArray[i] = score[ii]
+            }
+        }
     }
         
-    return score;
+    return scoreArray;
 }
 
 /**
  * Get all classifications for one dataset as String.<br>
  * Each char represents one classification.<br>
  * 
- * @param {String} pClassificationType                      <p>
- *                                                          The classification-type (usage)<br>
- *                                                          (e.g. the key id from keyword ClassificationType)
- * @param {String} pObjectType                              <p>
- *                                                          The object type.<br>
- * @param {String} pObjectRowid                             <p>
- *                                                          The row id.<br> 
-* @return {String}                                          <p>
-*                                                           The resulting classification. (e.g. "ACB")<br>
- */
-ClassificationUtils.getClass = function(pClassificationType, pObjectType, pObjectRowid)
-{
-    var classificationGrade = [];
-
-    var score = ClassificationUtils.getScore(pClassificationType, pObjectType, pObjectRowid);
-    for (var i = 0; i < score.length; i++)
-            classificationGrade[i] = ClassificationUtils.getClassifications(score[i][0], score[i][1]);
-        
-    return classificationGrade.join("")
-}
-
-/**
- * Get the classification relative to the max score.<br>
- * The classes calculated in percent of the max score like this:<br>
- * 
  * @param {String} pScore           <p>
- *                                  The archieved score (e.g. 42)
- * @param {String} pClassificationGroup  <p>     
- *                                  The Name of the Classification Group
+ *                                  The archieved score
+ * @param {String} pClassificationGroupId  <p>     
+ *                                  The Id of the Classification Group
  * @return {String}                 <p>
  *                                  Returns the corresponding classification.<br>
  */
-ClassificationUtils.getClassifications = function(pScore, pClassificationGroup) 
+ClassificationUtils.getClassifications = function(pScore, pClassificationGroupId) 
 {
     var score = pScore;
-    var classificationGroup = pClassificationGroup;
-    var gradingTable = ClassificationUtils.getClassificationGrading(classificationGroup);
+    var classificationGroupId = pClassificationGroupId
+    var gradingTable = ClassificationUtils.getClassificationGrading(classificationGroupId);
     var grade = "-";
 
         
-    for(var i = 0; i < gradingTable.length; i++)
+    for(let i = 0; i < gradingTable.length; i++)
     {
             if(Number(score) <= Number(gradingTable[i][0]) && score !=0 && grade == "-")
             {
@@ -148,48 +161,59 @@ ClassificationUtils.getClassifications = function(pScore, pClassificationGroup)
     }
     return grade;
 }
+
 /**
  * Gets the classification table <br>
  * 
- * @param {String} pClassificationGroup  <p>     
+ * @param {String} pClassificationGroupId  <p>     
  *                                  The Classification Group              
  * @return {String}                 <p>
  *                                  Returns the corresponding classification table, ordered by the maxscore ascending.<br>
  */
-ClassificationUtils.getClassificationGrading = function(pClassificationGroup) 
+ClassificationUtils.getClassificationGrading = function(pClassificationGroupId) 
 {
-    var gradingTable = newSelect("CLASSIFICATIONGRADING.MAXGRADEFORSCORE, CLASSIFICATIONGRADING.GRADING")
-                                    .from("CLASSIFICATIONGRADING")
-                                    .where("CLASSIFICATIONGRADING.CLASSIFICATIONTYPE_GROUP", pClassificationGroup)
-                                    .orderBy("MAXGRADEFORSCORE asc")
-                                    .table();
-    return gradingTable;
+    var config = entities.createConfigForLoadingRows()
+        .entity("ClassificationGrading_entity")
+        .addParameter("ClassificationTypeId_param", pClassificationGroupId)
+        .fields(["MAXGRADEFORSCORE", "GRADING"])
+        .ignorePermissions(true);
+        
+    var gradings = entities.getRows(config);
+    ArrayUtils.sortArrayOfObjects(gradings, "MAXGRADEFORSCORE", true, true);
+    gradings = gradings.map(function (row){
+        return [row["MAXGRADEFORSCORE"], row["GRADING"]];
+    });
+    return gradings;
 }
 
-
-/**
- * Gets the maximum score for one group depending on the pClassificationGroup param.
+/**@cl
+ * Gets the maximum score for one group depending on the pClassificationGroupId param.
  * 
- * @param {String} pClassificationGroup (optional)              <p>
+ * @param {String} pClassificationGroupId                       <p>
  *                                                              The classification groupname.<br>
  * @return {String}                                             <p>
  *                                                              Returns the maximum possible score of the chosen group.<br>
  *                                                              
  */
-ClassificationUtils.getMaxScore = function(pClassificationGroup)
+ClassificationUtils.getMaxScore = function(pClassificationGroupId)
 {
-    var maxScore = 0;
-    scores = newSelect("max(CLASSIFICATIONSCORE.SCORE)")
-                            .from("CLASSIFICATIONTYPE")
-                            .join("CLASSIFICATIONSCORE", "CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID = CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID")
-                            .where("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP", pClassificationGroup)
-                            .groupBy("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID")
-                            .arrayColumn();
+    var sumMaxScore = 0;
+    
+    var config = entities.createConfigForLoadingRows()
+                    .entity("ClassificationType_entity")
+                    .ignorePermissions(true)
+                    .addParameter("ClassificationGroupId_param", pClassificationGroupId)
+                    .fields(["maxScore"]);
+    var scores = entities.getRows(config);
                             
     for (let i = 0; i < scores.length; i++)
-        maxScore = eMath.addInt(maxScore, parseInt(scores[i]));
+    {
+        var maxScore = scores[i]["maxScore"];
+        if (maxScore)
+            sumMaxScore = eMath.addInt(sumMaxScore, parseInt(maxScore));
+    }
     
-    return maxScore;
+    return sumMaxScore;
 }
 
 /**
@@ -197,102 +221,21 @@ ClassificationUtils.getMaxScore = function(pClassificationGroup)
  * Either as [["group", "group"]] (for the possible items process).
  * Or as [["group"]].<br>
  * 
- * @param {String} pClassificationtype              <p>
- *                                                  The classification type.<br>
- * @param {Boolean} pTwoCol                         <p>
- *                                                  Use two columns (for possible items process).<br>
+ * @param {String} pObjectType                      <p>
+ *                                                  The object type.<br>
  */
-ClassificationUtils.getAllGroups = function(pClassificationtype, pTwoCol)
+ClassificationUtils.getAllGroups = function(pObjectType)
 {
     var sql = new SqlBuilder()
-                    .select(["distinct CLASSIFICATIONGROUP", (pTwoCol ? "CLASSIFICATIONGROUP" : "")])
-                    .from("CLASSIFICATIONTYPE")
-                    .where("CLASSIFICATIONTYPE.CLASSIFICATIONTYPE", pClassificationtype)
-                    .orderBy("CLASSIFICATIONGROUP");
+                    .select(["distinct CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID", "CLASSIFICATIONGROUP.TITLE"])
+                                .from("CLASSIFICATIONGROUP")
+                                .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID")
+                                .where("CLASSIFICATIONTYPE.OBJECT_TYPE", pObjectType)
+                                .orderBy("CLASSIFICATIONGROUP.TITLE");
     
-    if (pTwoCol)
-        return sql.table();
-    else
-        return sql.arrayColumn();
+    return sql.table();
 }
 
-/**
- * Load the classification group for a classificaiton type<br>
- * id from the db.<br>
- * 
- * @param {String} pClassificationtypeId                <p>
- *                                                      The id of the classification type.<br>
- */
-ClassificationUtils.getGroupFromDb = function(pClassificationtypeId)
-{
-    return newSelect("CLASSIFICATIONGROUP")
-        .from("CLASSIFICATIONTYPE")
-        .where("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", pClassificationtypeId)
-        .orderBy("CLASSIFICATIONGROUP")
-        .cell();
-}
-
-/**
- * Update the groupname. Checks if it is already used and only updates it, if not.
- * TODO: message to the user if it failed? (or return value - bool?)
- * 
- * @param {String} pOldName                         <p>
- *                                                  The old name, which shall be changed.<br>
- * @param {String} pNewName                         <p>
- *                                                  The new name.<br>
- * @param {String} pClassificationType              <p>
- *                                                  The classification type.<br>
- */
-ClassificationUtils.changeGroupName = function(pOldName, pNewName, pClassificationType)
-{
-    var groups = ClassificationUtils.getAllGroups(pClassificationType, false);
-                
-    if (groups.indexOf(pNewName, 0) == -1)
-    {
-        newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP", pOldName)
-            .updateData(true, "CLASSIFICATIONTYPE", ["CLASSIFICATIONGROUP"], null, [pNewName]);
-    }
-}
-
-/**
- * Get the classificationType for the current classification (either from parameter or selection-variable)
- * 
- * @param {String} pParamField                      <p>
- *                                                  The parameter field name. (e.g.: "$param.ClassificationType_param")<br>
- * @param {String} pSelectionField                  <p>
- *                                                  The parameter field name. (e.g.: "$sys.selectionRows")<br>
- * @return {String}                                 <p>
- *                                                  The type (or undefined).<br>
- */
-ClassificationUtils.getUsageType = function(pParamField, pSelectionField)
-{
-    if (vars.exists(pParamField) && vars.get(pParamField))
-        classificationType = vars.get(pParamField);
-    else if (vars.exists(pSelectionField) && vars.get(pSelectionField))
-    {
-        var selection = vars.get(pSelectionField);
-        if (selection.length > 0 && selection[0]["CLASSIFICATIONTYPE"])
-        {
-            classificationType = selection[0]["CLASSIFICATIONTYPE"];
-        }
-    }
-    
-    return classificationType;
-}
-
-/**
- * Update the coreName of a type.<br>
- * 
- * @param {String} pNewScoreName                <p>
- *                                              The new score name.<br>
- * @param {String} pClassificationTypeId        <p>
- *                                              The id of the classification type.<br>
- */
-ClassificationUtils.changeScoreName = function(pNewScoreName, pClassificationTypeId)
-{
-    newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", pClassificationTypeId)
-        .updateData(true, "CLASSIFICATIONTYPE", ["SCORETYPE"], null, [pNewScoreName]);
-}
 
 /**
  * Set a value for a classification type
@@ -316,51 +259,200 @@ ClassificationUtils.setClassificationValue = function(pObjectType, pObjectId, pC
 
 
 /**
- * Get all classifications for one dataset as String.<br>
- * Each char represents one classification.<br>
+ * Gets the classificationGradingTable for a classificationGroup as Array.<br>
+ * ordered by the MaxGradeForScore descending              <br>
  * 
- * @param {String} pScoreId                                 <p>
- *                                                          The classification score id you want the grading table for <br>
+ * @param {String} pClassificationGroupId                   <p>
+ *                                                          The classificationgroup you want the grading for <br>
  *                                                          
-* @return {String}                                          <p>
-*                                                           The resulting classification grading table. (e.g. "ACB")<br>
+* @return {Array}                                           <p>
+*                                                           The resulting gradingTable. <br>
  */
-ClassificationUtils.getGradingTableByScoreId = function(pScoreId)
+ClassificationUtils.getGradingTableByGroupId = function(pClassificationGroupId)
 {
 
-    var scoreId = pScoreId;
+    var classificationGroupId = pClassificationGroupId;
 
     var gradingTable = newSelect("CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID, CLASSIFICATIONGRADING.MAXGRADEFORSCORE, CLASSIFICATIONGRADING.GRADING")
-                            .from("CLASSIFICATIONGRADING")
-                            .where("CLASSIFICATIONGRADING.CLASSIFICATIONTYPE_GROUP", newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP")
-                                                                                        .from("CLASSIFICATIONTYPE")
-                                                                                        .where("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", newSelect("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID")
-                                                                                                                                                .from("CLASSIFICATIONSCORE")
-                                                                                                                                                .where("CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID", scoreId).cell())
-                                                                                        .groupBy("CLASSIFICATIONGROUP").cell())
-                            .orderBy("MAXGRADEFORSCORE desc")
-                            .table();
+                                        .from("CLASSIFICATIONGRADING")
+                                        .where("CLASSIFICATIONGRADING.CLASSIFICATIONGROUP_ID", classificationGroupId)
+                                        .orderBy("MAXGRADEFORSCORE desc")
+                                        .table()
     return gradingTable;
 }
 
 /**
- * Gets the classificationgroup from a classification score id as String.<br>
+ * Gets the classificationgroupId of a classification type as String.<br>
+ * 
+ * @param {String} pClassificationType                   <p>
+ *                                                          The classification-type (usage)<br>
+ *                                                          (e.g. the key id from keyword ClassificationType)
+* @return {String}                                          <p>
+*                                                           The classificationgroupId of the chosen classificationtype<br>
+ */
+ClassificationUtils.getClassificationGroup = function(pClassificationType)
+{
+    var classificationGroupId = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID")
+                                        .from("CLASSIFICATIONTYPE")
+                                        .where("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", pClassificationType)
+                                        .groupBy("CLASSIFICATIONGROUP_ID")
+                                        .cell()
+    return classificationGroupId;                                        
+}
+
+/**
+ * Get all classification type ids for a score using it's unique classification score id.<br>
  * 
  * @param {String} pClassificationScoreId                   <p>
  *                                                          The classification score id 
- *                                                          
 * @return {String}                                          <p>
-*                                                           The classificationgroup of the chosen classificationtype<br>
+*                                                           The resulting classification type.<br>
  */
-ClassificationUtils.getClassificationGroup = function(pClassificationScoreId)
+ClassificationUtils.getClassificationType = function(pClassificationScoreId)
 {
-    var classificationGroup = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP")
-                                        .from("CLASSIFICATIONTYPE")
-                                        .where("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", newSelect("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID")
-                                                                                            .from("CLASSIFICATIONSCORE")
-                                                                                            .where("CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID", pClassificationScoreId)
-                                                                                            .cell())
-                                        .groupBy("CLASSIFICATIONGROUP")
-                                        .cell();
-    return classificationGroup;                                        
-}
\ No newline at end of file
+    var classificationType = newSelect("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID")
+                                        .from("CLASSIFICATIONSCORE")
+                                        .where("CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID", pClassificationScoreId)
+                                        .arrayColumn();
+    return classificationType;
+}
+
+/**
+ * Gets the Grading of a score for a group using an object that contains all the gradings.<br>
+ * 
+ * @param {String} pGradingObject                          <p>
+ *                                                          The classification grading object 
+ * @param {String} pGroupId                                <p>
+ *                                                          The classification group id 
+ * @param {String} pScore                                  <p>
+ *                                                          The score 
+* @return {String}                                          <p>
+*                                                           The resulting classification grading.<br>
+ */
+ClassificationUtils.getGradingFromObject = function(pGradingObject, pGroupId, pScore)
+{
+    var gradingObject = pGradingObject;
+    var groupId = pGroupId;
+    var score = pScore;
+    var grading = "-";
+    for (var index in gradingObject[groupId])
+    {
+        if(Number(score) <= Number(gradingObject[groupId][index][0]) && score != 0)
+        {
+            grading = gradingObject[groupId][index][1];
+            break;
+        }
+    }
+    return grading;
+}
+
+/**
+ * Inserts a empty classification data set into Classificationstorage, since every dataset of a classifiable module has to have an entry 
+ * because the updateClassifications_serverProcess is only updating instead of inserting.<br>
+ * 
+ * @param {String or Array} pUid                          <p>
+ *                                                          The unique uid('s) of the inserted record
+ * @param {String} pObjectType                            <p>
+ *                                                          The object type
+ */
+ClassificationUtils.insertEmptyClassification = function(pUids, pObjectType)
+{
+    var classificationCount = newSelect("count(distinct CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID)")
+                                            .from("CLASSIFICATIONTYPE")
+                                            .where("CLASSIFICATIONTYPE.OBJECT_TYPE", pObjectType)
+                                            .cell();
+    var classificationvalue = "-".repeat(classificationCount);  
+            
+    if(Utils.isString(pUids))
+        pUids = [pUids];
+    
+    var columns = ["CLASSIFICATIONSTORAGEID",
+            "CLASSIFICATIONVALUE",
+            "OBJECT_ROWID",
+            "OBJECT_TYPE"
+            ];
+    var types = db.getColumnTypes("CLASSIFICATIONSTORAGE", columns);
+    var inserts = [];
+    var values;
+    for (var i = 0; i < pUids.length; i++) 
+    {
+        values = [util.getNewUUID(),
+                classificationvalue,
+                pUids[i],
+                pObjectType];
+        inserts.push(["CLASSIFICATIONSTORAGE", columns, types, values]);
+    }
+    db.inserts(inserts);
+}
+
+/**
+ * Gets the maximum score for one group depending on the pClassificationGroupId param.
+ * 
+ * @param {String} pClassificationGroupId                       <p>
+ *                                                              The classification groupname.<br>
+ * @param {String} pClassificationType                          <p>
+ *                                                              The classification type id.<br>
+ * @return {String}                                             <p>
+ *                                                              Returns the maximum possible score of the chosen group.<br>
+ *                                                              
+ */
+ClassificationUtils.getMaxScoreExcludeType = function(pClassificationGroupId, pClassificationType)
+{
+    var classificationGroupId = pClassificationGroupId;
+    var classificationType = pClassificationType;
+    var maxScore = 0;
+    scores = newSelect("max(CLASSIFICATIONSCORE.SCORE)")
+                            .from("CLASSIFICATIONTYPE")
+                            .join("CLASSIFICATIONSCORE", "CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID = CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID")
+                            .where("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", classificationGroupId)
+                            .and("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationType, SqlBuilder.NOT_EQUAL())
+                            .groupBy("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID")
+                            .arrayColumn();
+                            
+    for (let i = 0; i < scores.length; i++)
+        maxScore = eMath.addInt(maxScore, parseInt(scores[i]));
+    
+    return maxScore;
+}
+
+/**
+ * decodes a string that was encoded with AttributeSearchNameCoder.encode
+ * 
+ * 
+ * @param {String} pEncodedString       <p/> string that shall be decoded; the origin of the name has to be a filter-object
+ *                                      
+ * @return {Object}                     <p/> an object that contains all keys and values that have been encoded with AttributeSearchNameCoder.encode
+ * @static 
+ */
+ClassificationUtils.decode = function (pEncodedString)
+{
+    var value = pEncodedString;
+    if(value == undefined)
+        res = $ClassificationRecordCategories.CLASSIFICATION_OBJECT_TYPE;
+    else if(value.charAt(0) != ";" && value.charAt(value.length) != ";")
+        res = $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP();
+    else
+    {
+        var decodedIdvalues = text.decodeMS(value);
+        if(decodedIdvalues[0].charAt(0) != ";" && decodedIdvalues[0].charAt(decodedIdvalues[0].length) != ";")
+            res = $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_TYPE();
+    }
+    if(res)
+        result.string(res);
+    return res
+};
+
+/*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
+ - and proper packageing all constants together
+This may change in the future, if there is something better feel free to improve this */
+function $ClassificationRecordCategories(){}
+$ClassificationRecordCategories.CLASSIFICATION_OBJECT_TYPE =             function(){return "ClassificationObject_Type"};
+$ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP =    function(){return "ClassificationGroup"};
+$ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_TYPE =     function(){return "ClassificationType"};
+$ClassificationRecordCategories.CLASSIFICATION_GROUP_EXISTS =            function(){return "ClassificationGroupExists"};
+$ClassificationRecordCategories.CLASSIFICATION_GROUP_DOESNT_EXIST =      function(){return "ClassificationGroupDoesntExist"};
+
+function $ClassificationPlaceholder(){}
+$ClassificationPlaceholder.TOPSECRETPLACEHOLDER =                       function(){return "T0PS3CR3TPL4CEH0LD3R"};
\ No newline at end of file
diff --git a/process/Entity_lib/process.js b/process/Entity_lib/process.js
index cd17d5d9e24b261da1f869d40ebda76be6f3628e..afdfbfaa023b96d119e17ac92fa64920562076db 100644
--- a/process/Entity_lib/process.js
+++ b/process/Entity_lib/process.js
@@ -542,11 +542,11 @@ EntityConsumerRowsHelper.prototype.changeRows = function (pRowsToChange)
     pRowsToChange.forEach(function (changedRow)
     {
         changeCatalog[changedRow[this._uidField]] = changedRow;
-    });
+    }, this);
     this._rows = this._rows.map(function (row)
     {
         return row[this._uidField] in changeCatalog ? changeCatalog[row[this._uidField]] : row;
-    });
+    }, this);
     return this;
 }
 
@@ -562,11 +562,11 @@ EntityConsumerRowsHelper.prototype.removeRows = function (pRowsToRemove)
     pRowsToRemove.forEach(function (deletedRow)
     {
         deleteCatalog[deletedRow[this._uidField]] = true;
-    });
+    }, this);
     this._rows = this._rows.filter(function (row)
     {
         return !deleteCatalog[row[this._uidField]];
-    });
+    }, this);
     return this;
 }
 
diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js
index eca66d022d91282194a39b763068f17b2ff622db..b36a20300d7be1944e504670ad47bd02e705b235 100644
--- a/process/KeywordRegistry_basic/process.js
+++ b/process/KeywordRegistry_basic/process.js
@@ -172,8 +172,8 @@ $KeywordRegistry.documentTemplateTypeCategory$serial = function(){return "2";};
 $KeywordRegistry.documentTemplateTypeCategory$htmlTemplate = function(){return "7";};
 
 $KeywordRegistry.classificationType = function(){return "ClassificationType";};
-$KeywordRegistry.classificationType$salesproject = function(){return "SALESPROJ";};
-$KeywordRegistry.classificationType$organisation = function(){return "ORGANISATION";};
+$KeywordRegistry.classificationType$salesproject = function(){return "Salesproject";};
+$KeywordRegistry.classificationType$organisation = function(){return "Organisation";};
 
 $KeywordRegistry.personGender = function(){return "PersonGender";};
 $KeywordRegistry.personGender$other = function(){return "o";};
diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js
index 9e9dfd908b37466d0fcf8724ecf5b3878edcdc96..3600f01d4ac7385d61f8687c1c0d9be752cbe9ab 100644
--- a/process/Sql_lib/process.js
+++ b/process/Sql_lib/process.js
@@ -2886,8 +2886,11 @@ SqlBuilder.prototype.forEachPage = function (pCallBackFn, pExecuteOnlyIfConditio
         throw SqlBuilder._ERROR_NOT_A_FUNCTION();
     
     var run = true;
+    var idx = 0;
     while (run && this.hasMoreRows())
-        run = pCallBackFn.call(null, this.nextTablePage(pExecuteOnlyIfConditionExists, pTimeout)) != false;
+    {
+        run = pCallBackFn.call(null, this.nextTablePage(pExecuteOnlyIfConditionExists, pTimeout), idx++) != false;
+    }
 }
 
 /**
@@ -3965,6 +3968,41 @@ SqlUtils.getResolvingCaseWhen = function(pKeyValueArray, pDbFieldName, pLocale)
     return resSql;
 };
 
+/**
+* resolves key-value pairs (of strings) into a case when expression
+* 
+* @param {String[][]} pKeyValueArray you've to pass a 2D-Array where each element has at pos0 the key and pos1 the value
+* @param {String} pDbFieldName name fo the database field where the KEY-value is stored
+* @param {String} [pLocale=current client language] specifies the locale for translating the title; can be false if nothing shalle be translated
+* 
+* @return {String} a SQL-expression (case-when-statement) that resolves the KEYID into the title -> as preparedSatement-elements
+*/
+SqlUtils.getResolvingCaseWhenFromObject = function(pKeyValueObject, pUid, pTranslatedValue, pDbFieldName) 
+{
+    var keyData = pKeyValueObject;
+    if (keyData.length == 0)
+        return  ["''", []];
+    
+    var translateValue = pTranslatedValue;
+    var uid = pUid;
+    var unassigned = translate.text("unassigned")
+    
+    var resSql = "case ", preparedValues = [];
+    var colTypeKeyId = SQLTYPES.CHAR;
+    var colTypeTitle = SQLTYPES.NVARCHAR;
+    for (var i = 0, l = keyData.length; i < l; i++) 
+    {
+        var translatedTitle = keyData[i][translateValue];
+        resSql += " when " + pDbFieldName + " = ? then ? "
+        preparedValues.push([keyData[i][pUid], colTypeKeyId]);
+        preparedValues.push([translatedTitle, colTypeTitle]);
+
+    }
+    resSql += " else '"+ unassigned +"' end ";
+    resSql = [resSql, preparedValues];
+    return resSql;
+};
+
 /**
  * Will quote all prepared statement values from the given statement.
  * 
diff --git a/process/Util_lib/process.js b/process/Util_lib/process.js
index d5ea4793bdffdedd7b0c212e35466b7c00fc1534..2c687d66a4dda42890909aa061ac311e69be5ef9 100644
--- a/process/Util_lib/process.js
+++ b/process/Util_lib/process.js
@@ -472,7 +472,7 @@ ArrayUtils.distinct2d = function(p2dArray)
  * sorts a two dimensional array by the given index
  *
  * @param {Array} targetArray the Array to be sorted
- * @param {String} index the index of the field to sort by
+ * @param {Number} index the indexposistion of the field to sort by
  * @param {Boolean} [sortAsc=false] TRUE sorts ascending, FALSE sorts decending
  * @param {Boolean} [isNumber=false] TRUE sorts numerical, FALSE or undefined sorts alphanumerical
  *
@@ -488,6 +488,25 @@ ArrayUtils.sort2d = function(targetArray, index, sortAsc, isNumber) {
     if (index >= targetArray[0].length)
         throw new RangeError("Index Out Of Bounds: " + index + " >= " + targetArray[0].length);
 
+    var res = ArrayUtils.sortArrayOfObjects(targetArray, index, sortAsc, isNumber);
+    return res;
+};
+
+
+/**
+ * sorts an array of boject the given name index
+ *
+ * @param {Array} targetArray the Array to be sorted
+ * @param {String} key the key (index) of the field to sort by
+ * @param {Boolean} [sortAsc=false] TRUE sorts ascending, FALSE sorts decending
+ * @param {Boolean} [isNumber=false] TRUE sorts numerical, FALSE or undefined sorts alphanumerical
+ *
+ * @return targetArray
+ *
+ * @throws {RangeError} if index was not found
+ */
+ArrayUtils.sortArrayOfObjects = function(targetArray, key, sortAsc, isNumber) {
+    var index = key;
     var sortFn = function (x, y) {
         if ( isNumber ) {
             xx = Number(x[index]);
@@ -496,6 +515,11 @@ ArrayUtils.sort2d = function(targetArray, index, sortAsc, isNumber) {
         else {
             xx = x[index];
             yy = y[index];
+            
+            if (xx == undefined)
+                throw new RangeError("Index Out Of Bounds: The index " + index + " was not found while sorting.");
+            if (yy == undefined)
+                throw new RangeError("Index Out Of Bounds: The index " + index + " was not found while sorting.");
 
             xx = xx.toLowerCase();
             xx = xx.replace(/ä/g,"ae");
@@ -518,7 +542,7 @@ ArrayUtils.sort2d = function(targetArray, index, sortAsc, isNumber) {
 
     targetArray.sort(sortFn);
     return targetArray
-}
+};
 
 /**
 * sorts an array with columns
diff --git a/process/updateClassifications_serverProcess/process.js b/process/updateClassifications_serverProcess/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..22f452a82db5f2ffe695ad1e24a5ca85f01a9c78
--- /dev/null
+++ b/process/updateClassifications_serverProcess/process.js
@@ -0,0 +1,222 @@
+import("system.logging");
+import("Classification_lib");
+import("Sql_lib");
+import("Organisation_lib");
+import("system.db");
+import("system.eMath");
+
+var outputInformation = {};//information how much data has been modified
+var gradingObject = {};
+var helperObject = {}; //Used to check whether or not the data has already been added
+var scoreObject = {};
+var archievedScoresObject = {};
+var objectTypes = [];
+var orderedGroups = [];
+var object_type, classificationGroupId, classificationTypeId, classificationScoreId,  classificationScore, classificationGradingId, score, cond,
+classificationGradingMaxScore, classificationGrading, chainedGrading, currentObjectColumn, currentObjectTable, isOrganisation, idsWithoutStoredClassification;
+var groupString ={}
+var table = "CLASSIFICATIONSTORAGE";
+var column = ["CLASSIFICATIONVALUE"];
+
+//All the possible scores of the classification types
+var scoreArray = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID, CLASSIFICATIONSCORE.SCORE")
+                                        .from("CLASSIFICATIONGROUP")
+                                        .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID")
+                                        .join("CLASSIFICATIONSCORE", "CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID = CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID")
+                                        .orderBy("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.TITLE, CLASSIFICATIONGROUP.SORTING, CLASSIFICATIONTYPE.SCORETYPE, CLASSIFICATIONSCORE.SORT")
+                                        .table();
+
+//build scoreObject out of scoreArray
+for (var i = 0; i < scoreArray.length; i++) 
+{
+    for (var ii = 0; ii < scoreArray[ii].length; ii++) 
+    {
+        [object_type, classificationGroupId, classificationTypeId, classificationScoreId, classificationScore] = scoreArray[i];
+
+        if(!helperObject.hasOwnProperty(scoreArray[i][0])) //objectType
+        {
+            scoreObject[scoreArray[i][0]] = {}; //puts objectType in scoreObject and already initializes the object that later get's filled with the groups and their types
+            helperObject[scoreArray[i][0]] = "";
+            objectTypes.push(scoreArray[i][0]); //also push all the objectTypes in an Array for later (the updating happens one objectType at a time)
+        }
+        if(!helperObject.hasOwnProperty(scoreArray[i][1])) //classificationGroup
+        {
+            scoreObject[scoreArray[i][0]][scoreArray[i][1]] = {}; //same logic as before
+            helperObject[scoreArray[i][1]] = "";
+        }
+        if(!helperObject.hasOwnProperty(scoreArray[i][2])) //classificationType
+        {            
+            scoreObject[scoreArray[i][0]][scoreArray[i][1]][scoreArray[i][2]] = {}; //same logic as before
+            helperObject[scoreArray[i][2]] = "";
+        }
+        if(!helperObject.hasOwnProperty(scoreArray[i][3])) //classificationScore
+        {
+            scoreObject[scoreArray[i][0]][scoreArray[i][1]][scoreArray[i][2]][scoreArray[i][3]] = scoreArray[i][4]; //score
+            helperObject[scoreArray[i][3]] = "";
+        }
+    }
+}
+
+helperObject = {}; //resets the helper object
+
+//All the gradings of the classification groups
+var gradingArray = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, \n\
+                                CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID, CLASSIFICATIONGRADING.MAXGRADEFORSCORE, CLASSIFICATIONGRADING.GRADING")
+                                .from("CLASSIFICATIONGROUP")
+                                .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID")
+                                .join("CLASSIFICATIONGRADING", "CLASSIFICATIONGRADING.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID")
+                                .orderBy("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.TITLE, CLASSIFICATIONGROUP.SORTING, \n\
+                                    CLASSIFICATIONTYPE.SCORETYPE, CLASSIFICATIONGRADING.MAXGRADEFORSCORE asc")
+                                .table();
+                                
+//logic from above applies here aswell
+for (i = 0; i < gradingArray.length; i++) 
+{
+    [object_type, classificationGroupId, classificationTypeId, classificationGradingId, classificationGradingMaxScore, classificationGrading] = gradingArray[i];
+
+    if(!helperObject.hasOwnProperty(gradingArray[i][0])) //objectType
+    {
+        gradingObject[gradingArray[i][0]] = {};
+        helperObject[gradingArray[i][0]] = "";
+    }
+    if(!helperObject.hasOwnProperty(gradingArray[i][1])) //classificationGroup
+    {
+        gradingObject[gradingArray[i][0]][gradingArray[i][1]] = {};
+        helperObject[gradingArray[i][1]] = "";
+    }
+    if(!helperObject.hasOwnProperty(gradingArray[i][2])) //classificationGrading
+    {
+        gradingObject[gradingArray[i][0]][gradingArray[i][1]][gradingArray[i][2]] = [gradingArray[i][3], gradingArray[i][4]]; //maxGradeForScore
+        helperObject[gradingArray[i][2]] = "";
+    }
+}
+
+for (i = 0; i < objectTypes.length; i++) //update for each object_type
+{
+    outputInformation[objectTypes[i]] = {
+        updatedElements: 0,
+        nonChangedElements: 0
+    };
+    isOrganisation = false;
+    if(objectTypes[i] == "Organisation")
+    {
+        currentObjectTable = "CONTACT";
+        currentObjectColumn = "CONTACT.CONTACTID";
+        isOrganisation = true;
+    }
+    else
+    {
+        currentObjectTable =  objectTypes[i];
+        currentObjectColumn = objectTypes[i] + "." + objectTypes[i] +"ID";
+    }
+    
+    //this is the "upgrade" part of this process:
+    //first: insert default values into the records that have no entries 
+    idsWithoutStoredClassification = newSelect(currentObjectColumn)
+        .from(currentObjectTable)
+        .where(currentObjectColumn, newSelect("CLASSIFICATIONSTORAGE.OBJECT_ROWID").from("CLASSIFICATIONSTORAGE").where("CLASSIFICATIONSTORAGE.OBJECT_TYPE", objectTypes[i]), SqlBuilder.NOT_IN())
+                                                                        
+    if(isOrganisation)
+    {
+        idsWithoutStoredClassification.and("CONTACT.PERSON_ID is null")
+                .and("CONTACT.ORGANISATION_ID", OrgUtils.getPrivateOrganisationId(), SqlBuilder.NOT_EQUAL());
+    }
+        
+    idsWithoutStoredClassification = idsWithoutStoredClassification.arrayColumn();
+
+    if(idsWithoutStoredClassification)
+        ClassificationUtils.insertEmptyClassification(idsWithoutStoredClassification, objectTypes[i]);
+    
+    //second: update all entries with correct classificaiton values
+    
+    //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")
+        .from("CLASSIFICATIONGROUP")
+        .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID")
+        .where("CLASSIFICATIONTYPE.OBJECT_TYPE", objectTypes[i])
+        .orderBy("CLASSIFICATIONGROUP.SORTING")
+        .table();
+
+    //private callback function that processes the achieved scores per object type
+    function _processAchievedScoresBatchFn(pBatchData, pBatchNum)
+    {
+        //logic from above applies here aswell
+        for (ii = 0; ii < pBatchData.length; ii++) 
+        {
+            [uid, classificationGroupId, classificationTypeId, classificationScore] = pBatchData[ii];
+
+            if(!helperObject.hasOwnProperty(pBatchData[ii][0])) //uid
+            {
+                archievedScoresObject[pBatchData[ii][0]] = {};
+                helperObject[pBatchData[ii][0]] = "";
+                groupString[pBatchData[ii][0]] = ""; //groupString is another helper object to store all the groupIds
+            }
+            if(!helperObject.hasOwnProperty(pBatchData[ii][0] + pBatchData[ii][1])) //classificationGroup
+            {
+                groupString[pBatchData[ii][0]] = groupString[pBatchData[ii][0]].toString() + pBatchData[ii][1].toString() +" ";
+                archievedScoresObject[pBatchData[ii][0]][pBatchData[ii][1]] = {};
+                helperObject[pBatchData[ii][0] + pBatchData[ii][1]] = "";
+            }
+            if(!helperObject.hasOwnProperty(pBatchData[ii][0] + pBatchData[ii][2])) //classificationType
+            {
+                if(archievedScoresObject[pBatchData[ii][0]][pBatchData[ii][1]]["Score"] == undefined)
+                    archievedScoresObject[pBatchData[ii][0]][pBatchData[ii][1]]["Score"] = 0;
+                score = eMath.addDec(parseFloat(archievedScoresObject[pBatchData[ii][0]][pBatchData[ii][1]]["Score"]), parseFloat(pBatchData[ii][3]));
+                archievedScoresObject[pBatchData[ii][0]][pBatchData[ii][1]]["Score"] = score;
+                archievedScoresObject[pBatchData[ii][0]][pBatchData[ii][1]]["Grade"] = ClassificationUtils.getGradingFromObject(gradingObject[objectTypes[i]], pBatchData[ii][1], score);
+                helperObject[pBatchData[ii][0] + pBatchData[ii][2]] = "";
+            }
+        }
+    }
+
+    var achievedScoresStmt = newSelect(currentObjectColumn + ", CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, \n\
+                                        CLASSIFICATION.CLASSIFICATIONTYPE_ID, CLASSIFICATIONSCORE.SCORE")
+                                    .from(currentObjectTable)
+                                    .join("CLASSIFICATION", "CLASSIFICATION.OBJECT_ROWID = " + currentObjectColumn)
+                                    .join("CLASSIFICATIONSCORE", "CLASSIFICATION.CLASSIFICATIONSCORE_ID = CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID")
+                                    .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID = CLASSIFICATION.CLASSIFICATIONTYPE_ID");
+
+    if(isOrganisation)
+        achievedScoresStmt.where("CONTACT.PERSON_ID is null");
+
+    achievedScoresStmt.orderBy(currentObjectColumn + ", CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONSCORE.SCORE asc");
+    achievedScoresStmt.pageSize(100)
+                        .forEachPage(_processAchievedScoresBatchFn);
+
+    //do this after all the data is collected since the achievedScoresStmt returns several records for each rowId. 
+    //If this would be done in the batch function it would result in false classificationstorage-results because not all records for a rowId are used
+    for (var row_Id in archievedScoresObject)
+    {
+        chainedGrading = "";
+        //chain all the Classifications together
+        for (var row_IdI in archievedScoresObject[row_Id]) 
+        {
+            chainedGrading += archievedScoresObject[row_Id][row_IdI]["Grade"]
+        }
+
+        for (var iii = 0; iii < orderedGroups.length; iii++) //the empty gradings have been ignored, but should be filled with "-"
+        {
+            if(!groupString[row_Id].toString().includes(orderedGroups[iii][0].toString())) //check which ones aren't included and add "-" for those at correct the position
+            {
+                chainedGrading = chainedGrading.substring(0, iii) + "-" + chainedGrading.substring(iii, chainedGrading.length);
+            }
+        }
+
+        //update the specified dataset if the already stored ClassificatioNValue differs from the freshly calculated one
+        cond = newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", row_Id)
+            .and("CLASSIFICATIONSTORAGE.OBJECT_TYPE", objectTypes[i])
+            .and("CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE", chainedGrading, SqlBuilder.NOT_EQUAL());
+        var count = Number(cond.updateData(true, table, column, null, [chainedGrading]));
+        if (count > 0)
+        {
+            outputInformation[objectTypes[i]].updatedElements += count;
+        }
+        else
+        {
+            outputInformation[objectTypes[i]].nonChangedElements++;
+        }
+    }
+}
+
+var outputInfo = "updateClassifications_serverProcess output is:\n" + JSON.stringify(outputInformation);
+logging.log(outputInfo);
\ No newline at end of file
diff --git a/process/updateClassifications_serverProcess/updateClassifications_serverProcess.aod b/process/updateClassifications_serverProcess/updateClassifications_serverProcess.aod
new file mode 100644
index 0000000000000000000000000000000000000000..52e9c03b7cf5d4c0792dd5f4ea13a6676520a729
--- /dev/null
+++ b/process/updateClassifications_serverProcess/updateClassifications_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.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+  <name>updateClassifications_serverProcess</name>
+  <title>Update all Classification entries in the system</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/updateClassifications_serverProcess/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>