diff --git a/.liquibase/Data_alias/basic/2021.2.0/TopicTree/changelog.xml b/.liquibase/Data_alias/basic/2021.2.0/TopicTree/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c8d4f9cd12c9922c8ab4f9b3b53df528d7611bc3
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.2.0/TopicTree/changelog.xml
@@ -0,0 +1,7 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <include relativeToChangelogFile="true" file="create_TopicTree.xml"/>
+    <include relativeToChangelogFile="true" file="create_TopicTreeRelation.xml"/>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2021.2.0/TopicTree/create_TopicTree.xml b/.liquibase/Data_alias/basic/2021.2.0/TopicTree/create_TopicTree.xml
new file mode 100644
index 0000000000000000000000000000000000000000..11c370a75095ab1c252831df89825fef3030fccf
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.2.0/TopicTree/create_TopicTree.xml
@@ -0,0 +1,35 @@
+<?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="9aa9ce72-670d-4122-a50f-0b1e1ca64ca3">
+        <createTable tableName="TOPICTREE">
+            <column name="TOPICTREEID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_TOPICTREEID"/>
+            </column>
+            <column name="ASSIGNEDTO" type="CHAR(36)">
+            </column>
+            <column name="TOPIC" type="VARCHAR(36)"/>
+            <column name="DESCRIPTION" type="NVARCHAR(500)"/>
+            <!-- Boolean (1 = true, 0 = false)-->
+            <column name="ACTIVE" type="TINYINT" defaultValueNumeric="1">
+                <constraints nullable="false"/>
+            </column>
+            <column name="SORTING_LAYER_1" type="INTEGER"/>
+            <column name="SORTING_LAYER_2" type="INTEGER"/>
+            <column name="SORTING_LAYER_3" type="INTEGER"/>
+            <column name="SORTING_LAYER_4" type="INTEGER"/>
+            <column name="SORTING_LAYER_5" type="INTEGER"/>
+            <column name="SORTING_LAYER_6" type="INTEGER"/>
+        
+            <column name="USER_NEW" type="NVARCHAR(50)" />
+            <column name="DATE_NEW" type="DATETIME" />
+            <column name="USER_EDIT" type="NVARCHAR(50)" />
+            <column name="DATE_EDIT" type="DATETIME" />
+        </createTable>
+        <createIndex tableName="TOPICTREE" indexName="IDX_TOPICTREE_ASSIGNEDTO">
+            <column name="ASSIGNEDTO"/>
+        </createIndex>
+    </changeSet>
+</databaseChangeLog>
+
diff --git a/.liquibase/Data_alias/basic/2021.2.0/TopicTree/create_TopicTreeRelation.xml b/.liquibase/Data_alias/basic/2021.2.0/TopicTree/create_TopicTreeRelation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8b3bf2b37c40c4cbd4b2a64957cffe6079c09438
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.2.0/TopicTree/create_TopicTreeRelation.xml
@@ -0,0 +1,32 @@
+<?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="ced229de-1e0b-4e7f-9dbc-233fe6f2c7ba">
+        <createTable tableName="TOPICTREERELATION">
+            <column name="TOPICTREERELATIONID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_TOPICTREERELATIONID"/>
+            </column>
+            <column name="TOPICTREE_ID" type="CHAR(36)"/>
+            <column name="OBJECT_ROWID" type="CHAR(36)"/>
+            <column name="OBJECT_TYPE" type="VARCHAR(63)"/>
+            <column name="DESCRIPTION" type="NCLOB"/>
+            <column name="SORT" type="INTEGER"/>
+
+            <column name="USER_NEW" type="NVARCHAR(50)" />
+            <column name="DATE_NEW" type="DATETIME" />
+            <column name="USER_EDIT" type="NVARCHAR(50)" />
+            <column name="DATE_EDIT" type="DATETIME" />
+        </createTable>
+        <createIndex tableName="TOPICTREERELATION" indexName="IDX_TOPICTREERLTN_TREE_ID">
+            <column name="TOPICTREE_ID"/>
+        </createIndex>
+        <createIndex tableName="TOPICTREERELATION" indexName="IDX_TOPICTREERLTN_OBJROW_ID">
+            <column name="OBJECT_ROWID"/>
+        </createIndex>
+        <createIndex tableName="TOPICTREERELATION" indexName="IDX_TOPICTREERLTN_OBJTYPE_ID">
+            <column name="OBJECT_TYPE"/>
+        </createIndex>
+    </changeSet>
+</databaseChangeLog>
+
diff --git a/.liquibase/Data_alias/basic/2021.2.0/changelog.xml b/.liquibase/Data_alias/basic/2021.2.0/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..009d504db47c9bd92ced84f14fe82eb20565f99d
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2021.2.0/changelog.xml
@@ -0,0 +1,5 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <include relativeToChangelogFile="true" file="TopicTree/changelog.xml"/>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/_demoData/changelog.xml b/.liquibase/Data_alias/basic/_demoData/changelog.xml
index b10c5049de1483e34e78797241e60a8a5e62cbab..0f8fd6f15e6939e296eec6fc54d80128f2b42d97 100644
--- a/.liquibase/Data_alias/basic/_demoData/changelog.xml
+++ b/.liquibase/Data_alias/basic/_demoData/changelog.xml
@@ -103,6 +103,7 @@
   <include file="generatedData/tasklink.xml" relativeToChangelogFile="true"/>
   <include file="generatedData/ticket.xml" relativeToChangelogFile="true"/>
   <include file="generatedData/timetracking.xml" relativeToChangelogFile="true"/>
+  <include file="generatedData/topictree.xml" relativeToChangelogFile="true"/>
   <include file="generatedData/unrelatedduplicates.xml" relativeToChangelogFile="true"/>
   <include file="generatedData/visitplanemployeeweek.xml" relativeToChangelogFile="true"/>
   <include file="generatedData/visitplanentry.xml" relativeToChangelogFile="true"/>
diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/topictree.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/topictree.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b88a5ce2b99916ffe5c1a10b39cd71795436e5b5
--- /dev/null
+++ b/.liquibase/Data_alias/basic/_demoData/generatedData/topictree.xml
@@ -0,0 +1,1074 @@
+<?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="b.ulrich" id="6692d6ef-3488-4fb2-84bc-87d58cbfe644">
+    <delete tableName="TOPICTREE"/>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="3d7eae24-39ba-49c7-878b-01fccd0d3304"/>
+      <column name="ASSIGNEDTO" value="fbd107dc-48b9-4fba-9c21-86d08f48162a"/>
+      <column name="TOPIC" value="Test"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="3"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2021-07-16T01:48:42"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="11f5b210-b5ae-4f92-81ed-051e4679134f"/>
+      <column name="ASSIGNEDTO" value="32918206-e78a-4e63-9370-07e925be0fbe"/>
+      <column name="TOPIC" value="Rückruf"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-10-16T12:50:30"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="60850b03-ff45-446f-9773-6ea9092ca651"/>
+      <column name="ASSIGNEDTO" value="32918206-e78a-4e63-9370-07e925be0fbe"/>
+      <column name="TOPIC" value="Unterlagen senden"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-10-16T12:50:35"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="115233b1-db10-43bf-9cd0-4d1362dafdeb"/>
+      <column name="ASSIGNEDTO" value="32918206-e78a-4e63-9370-07e925be0fbe"/>
+      <column name="TOPIC" value="Angebot erstellen"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="3"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-10-16T12:50:39"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="5fda2d19-75c1-48ea-9d15-1a756e82347f"/>
+      <column name="ASSIGNEDTO" value="32918206-e78a-4e63-9370-07e925be0fbe"/>
+      <column name="TOPIC" value="Broschüre zukommen lassen"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="4"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-10-16T12:50:44"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="4e4a2ca0-b1c5-4b21-8c1b-6fb0057f0749"/>
+      <column name="ASSIGNEDTO" value="94113af6-e96e-49c5-9c8b-4a12d4b07936"/>
+      <column name="TOPIC" value="Warengruppe A"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_5" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-10-06T10:21:24"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="961c18a8-f38d-4e18-8eb6-65422f3df987"/>
+      <column name="ASSIGNEDTO" value="94113af6-e96e-49c5-9c8b-4a12d4b07936"/>
+      <column name="TOPIC" value="Warengruppe B"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_5" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-10-06T10:21:30"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="63804-13-22e0-4dd2-a227-c7f3071d768f"/>
+      <column name="ASSIGNEDTO" value="fde3500f-f2b9-4272-accd-c4449d8e095f"/>
+      <column name="TOPIC" value="Produkt B1"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_5" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-10-06T10:15:52"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="5b010102-859f-4b74-abd5-0b2b9e4ab535"/>
+      <column name="ASSIGNEDTO" value="fde3500f-f2b9-4272-accd-c4449d8e095f"/>
+      <column name="TOPIC" value="Produkt B2"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_5" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-10-06T10:16:00"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="f62a44c4-5f9d-42f6-9df9-35f8aa38d0e7"/>
+      <column name="ASSIGNEDTO" value="dce5d785-4617-47bf-86a4-aab540bdc713"/>
+      <column name="TOPIC" value="Produkt A1"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_5" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-10-06T10:15:23"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="6c037cef-8851-465c-978a-4fdb5d825196"/>
+      <column name="ASSIGNEDTO" value="dce5d785-4617-47bf-86a4-aab540bdc713"/>
+      <column name="TOPIC" value="Produkt A2"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_5" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-10-06T10:15:36"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="dce5d785-4617-47bf-86a4-aab540bdc713"/>
+      <column name="ASSIGNEDTO" value="fb271223-f888-4796-8d5d-117113682924"/>
+      <column name="TOPIC" value="Warengruppe A"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-10-06T10:15:01"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="fde3500f-f2b9-4272-accd-c4449d8e095f"/>
+      <column name="ASSIGNEDTO" value="fb271223-f888-4796-8d5d-117113682924"/>
+      <column name="TOPIC" value="Warengruppe B"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-10-06T10:15:11"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="34425ab2-b4c5-42aa-a217-cfff9ecead9c"/>
+      <column name="ASSIGNEDTO" value="a8b509cc-1e94-4560-a25a-c0bf82a07030"/>
+      <column name="TOPIC" value="Printmedien"/>
+      <column name="DESCRIPTION" value="Printmedien"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T10:05:19"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2021-07-16T01:39:29"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="ee83c6f4-bf94-4ba1-8949-19d6dbcd5b91"/>
+      <column name="ASSIGNEDTO" value="a8b509cc-1e94-4560-a25a-c0bf82a07030"/>
+      <column name="TOPIC" value="Messe"/>
+      <column name="DESCRIPTION" value="Messe"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T10:05:02"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2021-07-16T01:38:06"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="fdab83c5-adb2-4574--118-f389407fb39f"/>
+      <column name="ASSIGNEDTO" value="a8b509cc-1e94-4560-a25a-c0bf82a07030"/>
+      <column name="TOPIC" value="Bestehender Kontakt"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="3"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T10:04:21"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="fd1da70d-4fb1-498d-a62f-5310f9d1c49e"/>
+      <column name="ASSIGNEDTO" value="a8b509cc-1e94-4560-a25a-c0bf82a07030"/>
+      <column name="TOPIC" value="Empfehlung"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="4"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T10:04:37"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="04621076-1b74-4f7e-8320-06275f2dedda"/>
+      <column name="ASSIGNEDTO" value="5e4c565b-fabc-4ae9-b162-272db6b9e166"/>
+      <column name="TOPIC" value="eigene Firma"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T09:50:55"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="91e5027c-b326-4cfb-b9f1-5a74ed56e57c"/>
+      <column name="ASSIGNEDTO" value="5e4c565b-fabc-4ae9-b162-272db6b9e166"/>
+      <column name="TOPIC" value="Interessent"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T09:51:22"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="c9736efd-3b46-4a9f-aab8-da670415349b"/>
+      <column name="ASSIGNEDTO" value="5e4c565b-fabc-4ae9-b162-272db6b9e166"/>
+      <column name="TOPIC" value="Kunde"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="3"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T09:51:34"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="989a92ae-9222-48b7-92c9-760bd50a4ca0"/>
+      <column name="ASSIGNEDTO" value="5e4c565b-fabc-4ae9-b162-272db6b9e166"/>
+      <column name="TOPIC" value="Berater"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="4"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T09:51:46"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="7b2fd3f8-9ff5-4220-ab35-dda92deeac74"/>
+      <column name="ASSIGNEDTO" value="5e4c565b-fabc-4ae9-b162-272db6b9e166"/>
+      <column name="TOPIC" value="Partner"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="5"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T09:51:56"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="f5b6fb12-ee3f-4d07-afe0-abea05fbef1d"/>
+      <column name="ASSIGNEDTO" value="b28dbf9c-56f6-4ce1-b294-d21bf201e388"/>
+      <column name="TOPIC" value="30"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_5" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T09:50:01"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="fda6d366-64f1-4bc3-88cd-af2d0efad58c"/>
+      <column name="ASSIGNEDTO" value="b28dbf9c-56f6-4ce1-b294-d21bf201e388"/>
+      <column name="TOPIC" value="60"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_5" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T09:50:10"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="7bdf2d30-05ba-4106-8cc5-1c5642edddfc"/>
+      <column name="ASSIGNEDTO" value="b28dbf9c-56f6-4ce1-b294-d21bf201e388"/>
+      <column name="TOPIC" value="90"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_5" valueNumeric="3"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T09:50:19"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="b28dbf9c-56f6-4ce1-b294-d21bf201e388"/>
+      <column name="ASSIGNEDTO" value="de752846-46a4-46b3-8e5d-52ee910ff905"/>
+      <column name="TOPIC" value="Wertung"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T09:49:09"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="14e71e11-7c97-4065-8fd5-224ca775bacb"/>
+      <column name="ASSIGNEDTO" value="de752846-46a4-46b3-8e5d-52ee910ff905"/>
+      <column name="TOPIC" value="Begründung"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T09:49:22"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="ea853979-920e-4864-b0c2-98b4543caf51"/>
+      <column name="ASSIGNEDTO" value="6026b29d-0afd-492c-9861-5d4a0200f4e4"/>
+      <column name="TOPIC" value="Nachfassen"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-01-29T06:00:25"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="de31059a-8b1f-46f7-be14-140a7b16e989"/>
+      <column name="ASSIGNEDTO" value="6026b29d-0afd-492c-9861-5d4a0200f4e4"/>
+      <column name="TOPIC" value="Sonstiges"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-23T12:28:50"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="8dd0b595-04fc-4601-b8f1-e5dfe7c9afb2"/>
+      <column name="ASSIGNEDTO" value="490a9132-d4e6-4a37-9cca-3f9fc3c1f4c8"/>
+      <column name="TOPIC" value="Nächster Kontakt?"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T05:04:15"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="554eab0f-4e93-4b1e-bd69-e2244284c610"/>
+      <column name="ASSIGNEDTO" value="490a9132-d4e6-4a37-9cca-3f9fc3c1f4c8"/>
+      <column name="TOPIC" value="Projekt geplant?"/>
+      <column name="DESCRIPTION" value="Projekt geplant?"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T05:02:53"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="64f94e7d-704b-4064-b390-80ef98ed083e"/>
+      <column name="ASSIGNEDTO" value="490a9132-d4e6-4a37-9cca-3f9fc3c1f4c8"/>
+      <column name="TOPIC" value="Kein Projekt geplant"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="3"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T05:03:12"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="cb9554c3-27c3-4815-87c3-92ac638b01fb"/>
+      <column name="ASSIGNEDTO" value="490a9132-d4e6-4a37-9cca-3f9fc3c1f4c8"/>
+      <column name="TOPIC" value="Planung Projekt offen"/>
+      <column name="DESCRIPTION" value="Planung Projekt offen"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="4"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T05:03:50"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="cc7fbe5f-7963-422b-8bd5-428da461bb36"/>
+      <column name="ASSIGNEDTO" value="afd8607d-b3e2-4bc2-8b5c-08cc543a4af5"/>
+      <column name="TOPIC" value="flexibel"/>
+      <column name="DESCRIPTION" value="flexibel"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T04:12:58"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="22de6b4a-40f3-4458-9aa8-75ea486453fe"/>
+      <column name="ASSIGNEDTO" value="afd8607d-b3e2-4bc2-8b5c-08cc543a4af5"/>
+      <column name="TOPIC" value="Referenz"/>
+      <column name="DESCRIPTION" value="Referenz"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T04:13:17"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="c5557e3f-f574-4d28-8897-6109eae0bd56"/>
+      <column name="ASSIGNEDTO" value="afd8607d-b3e2-4bc2-8b5c-08cc543a4af5"/>
+      <column name="TOPIC" value="Technologie"/>
+      <column name="DESCRIPTION" value="Technologie"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="3"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T04:13:38"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="07e4-1fa-95b8-41bc-beab-05cf8d814a0e"/>
+      <column name="ASSIGNEDTO" value="d90629ee-c8d8-408a-8a9f-65778b2bc49b"/>
+      <column name="TOPIC" value="Fachanforderung"/>
+      <column name="DESCRIPTION" value="Fachanforderung"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-01-26T06:52:43"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="afd8607d-b3e2-4bc2-8b5c-08cc543a4af5"/>
+      <column name="ASSIGNEDTO" value="d90629ee-c8d8-408a-8a9f-65778b2bc49b"/>
+      <column name="TOPIC" value="Vorteile"/>
+      <column name="DESCRIPTION" value="Vorteile"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T04:12:32"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="08b8e5e9-a9bc-40e5-b1a3-2626bf0e842b"/>
+      <column name="ASSIGNEDTO" value="d90629ee-c8d8-408a-8a9f-65778b2bc49b"/>
+      <column name="TOPIC" value="Defizite"/>
+      <column name="DESCRIPTION" value="Defizite"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="3"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T09:44:17"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="ed801ac3-00fd-4a35-9430-4b3c8533fe72"/>
+      <column name="ASSIGNEDTO" value="d90629ee-c8d8-408a-8a9f-65778b2bc49b"/>
+      <column name="TOPIC" value="Nächste Schritte"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="4"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T09:44:35"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="6026b29d-0afd-492c-9861-5d4a0200f4e4"/>
+      <column name="ASSIGNEDTO" value="d90629ee-c8d8-408a-8a9f-65778b2bc49b"/>
+      <column name="TOPIC" value="ToDos"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="5"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T09:44:56"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="de752846-46a4-46b3-8e5d-52ee910ff905"/>
+      <column name="ASSIGNEDTO" value="d90629ee-c8d8-408a-8a9f-65778b2bc49b"/>
+      <column name="TOPIC" value="Pers. Einschätzung"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="6"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T09:45:35"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="5e4c565b-fabc-4ae9-b162-272db6b9e166"/>
+      <column name="ASSIGNEDTO" value="d90629ee-c8d8-408a-8a9f-65778b2bc49b"/>
+      <column name="TOPIC" value="Teilnehmer"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="7"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T09:45:50"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="d90629ee-c8d8-408a-8a9f-65778b2bc49b"/>
+      <column name="ASSIGNEDTO" value="5ec1cd03-be1d-457d-9ba5-cd5e41286bee"/>
+      <column name="TOPIC" value="Präsentation"/>
+      <column name="DESCRIPTION" value="Präsentation"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-10-04T09:38:14"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2017-06-29T02:34:20"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="490a9132-d4e6-4a37-9cca-3f9fc3c1f4c8"/>
+      <column name="ASSIGNEDTO" value="5ec1cd03-be1d-457d-9ba5-cd5e41286bee"/>
+      <column name="TOPIC" value="Akquise"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2019-06-23T01:45:08"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2017-06-29T02:34:33"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="2de03c35-f66a-4a4c-8a81-32401dc2ef6e"/>
+      <column name="ASSIGNEDTO" value="5ec1cd03-be1d-457d-9ba5-cd5e41286bee"/>
+      <column name="TOPIC" value="Erstkontakt"/>
+      <column name="DESCRIPTION" value="Erstkontakt"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="3"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-10-30T03:35:39"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2017-06-29T02:34:42"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="3052d584-83af-4f1a-b00d-c338b1681e07"/>
+      <column name="ASSIGNEDTO" value="5ec1cd03-be1d-457d-9ba5-cd5e41286bee"/>
+      <column name="TOPIC" value="Herkunft"/>
+      <column name="DESCRIPTION" value="Herkunft"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="4"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T10:03:05"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2017-06-29T02:34:48"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="8c488fc2-dbf1-4cdb-acd1-222b8fcca449"/>
+      <column name="ASSIGNEDTO" value="5ec1cd03-be1d-457d-9ba5-cd5e41286bee"/>
+      <column name="TOPIC" value="Vertrag"/>
+      <column name="DESCRIPTION" value="Vertrag"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="5"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-10-06T10:12:54"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2021-07-16T01:50:58"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="a8b509cc-1e94-4560-a25a-c0bf82a07030"/>
+      <column name="ASSIGNEDTO" value="5ec1cd03-be1d-457d-9ba5-cd5e41286bee"/>
+      <column name="TOPIC" value="Bekannt durch"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="6"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T05:02:04"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2017-06-29T02:35:19"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="32918206-e78a-4e63-9370-07e925be0fbe"/>
+      <column name="ASSIGNEDTO" value="5ec1cd03-be1d-457d-9ba5-cd5e41286bee"/>
+      <column name="TOPIC" value="ToDo"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="7"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-10-16T12:48:33"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="9e4dcd68--10a-4d94-9cd8-d4702d606748"/>
+      <column name="ASSIGNEDTO" value="8c488fc2-dbf1-4cdb-acd1-222b8fcca449"/>
+      <column name="TOPIC" value="Verwahrungsvereinbarung"/>
+      <column name="DESCRIPTION" value="Verwahrungsvereinbarung"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T04:11:09"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="0e75a981-29a0-4e0b-9b3d-e76659c80877"/>
+      <column name="ASSIGNEDTO" value="8c488fc2-dbf1-4cdb-acd1-222b8fcca449"/>
+      <column name="TOPIC" value="Datenschutzvereinbarung"/>
+      <column name="DESCRIPTION" value="Datenschutzvereinbarung"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T04:10:39"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="5d4d5d55-806d-43f6-89d9-ee58bbe4f85a"/>
+      <column name="ASSIGNEDTO" value="8c488fc2-dbf1-4cdb-acd1-222b8fcca449"/>
+      <column name="TOPIC" value="Abnahmeerklärung"/>
+      <column name="DESCRIPTION" value="Abnahmeerklärung"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="3"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T04:10:00"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="d0d2ad28-a3bf-45f6-bd74-d-1edf425043"/>
+      <column name="ASSIGNEDTO" value="8c488fc2-dbf1-4cdb-acd1-222b8fcca449"/>
+      <column name="TOPIC" value="Dienstleistungsvertrag"/>
+      <column name="DESCRIPTION" value="Dienstleistungsvertrag"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="4"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2014-09-04T05:33:10"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2014-09-16T07:21:55"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="0f16085c-7925-4128-b0ed-e4b44fecce33"/>
+      <column name="ASSIGNEDTO" value="8c488fc2-dbf1-4cdb-acd1-222b8fcca449"/>
+      <column name="TOPIC" value="Wartungsvertrag"/>
+      <column name="DESCRIPTION" value="Wartungsvertrag"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="5"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2014-09-04T05:28:57"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2014-09-16T07:22:07"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="ef877ce6-02ea-43eb-801c-23b77904d58d"/>
+      <column name="ASSIGNEDTO" value="8c488fc2-dbf1-4cdb-acd1-222b8fcca449"/>
+      <column name="TOPIC" value="Rahmenvertrag"/>
+      <column name="DESCRIPTION" value="Rahmenvertrag"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="6"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T10:15:18"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2014-09-16T07:22:01"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="94113af6-e96e-49c5-9c8b-4a12d4b07936"/>
+      <column name="ASSIGNEDTO" value="9429bc0d-0fc3-4887-93f0-2706131517cf"/>
+      <column name="TOPIC" value="Informationen senden"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-10-06T10:16:26"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2016-10-27T08:39:11"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="aed0bb17-80aa-4edd-8b11-7eb09e0eaef1"/>
+      <column name="ASSIGNEDTO" value="9429bc0d-0fc3-4887-93f0-2706131517cf"/>
+      <column name="TOPIC" value="Nachfassen"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-10-06T10:20:48"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2016-10-27T08:40:19"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="fb271223-f888-4796-8d5d-117113682924"/>
+      <column name="ASSIGNEDTO" value="2de03c35-f66a-4a4c-8a81-32401dc2ef6e"/>
+      <column name="TOPIC" value="Produktinteresse"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-10-27T08:35:23"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2016-10-27T08:36:22"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="eb798b53-78cf-46d4-abaa-5a17f426a7d2"/>
+      <column name="ASSIGNEDTO" value="2de03c35-f66a-4a4c-8a81-32401dc2ef6e"/>
+      <column name="TOPIC" value="Allgemein"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-10-06T10:20:32"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="9429bc0d-0fc3-4887-93f0-2706131517cf"/>
+      <column name="ASSIGNEDTO" value="2de03c35-f66a-4a4c-8a81-32401dc2ef6e"/>
+      <column name="TOPIC" value="ToDo"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="3"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-10-27T08:35:37"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2016-10-27T08:36:07"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="aa503a9b-8484-4b86-b7ca--11ab5cc939a"/>
+      <column name="TOPIC" value="Datenschutz-Arten"/>
+      <column name="DESCRIPTION" value="Datenschutz-Arten"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2019-05-15T06:11:19"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2021-07-16T01:51:36"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="83558d74-f0fa-45f0-8147-2d754307aec8"/>
+      <column name="TOPIC" value="Abteilungen"/>
+      <column name="DESCRIPTION" value="Abteilungen"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-04-21T01:42:35"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2021-07-16T01:51:28"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="5ec1cd03-be1d-457d-9ba5-cd5e41286bee"/>
+      <column name="TOPIC" value="Vertrieb"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="3"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-06-29T02:33:58"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2021-07-16T01:51:19"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="0d3258d8-e18d-482a-b20a-31b39396af6a"/>
+      <column name="TOPIC" value="Ressource"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="4"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-06-14T11:33:19"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2021-07-16T01:51:10"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="2a27f5bd-4e69-4b6b-8be5-e870618d1aa4"/>
+      <column name="ASSIGNEDTO" value="3052d584-83af-4f1a-b00d-c338b1681e07"/>
+      <column name="TOPIC" value="persönlich"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-23T12:19:18"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="a04c0748-700c-409d-91dd-9fcb83953c8b"/>
+      <column name="ASSIGNEDTO" value="3052d584-83af-4f1a-b00d-c338b1681e07"/>
+      <column name="TOPIC" value="Referenz-Kunde"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-23T12:19:04"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="daa19a4b-d2a4-4c75-a9ec-c6fc35a4bd-1"/>
+      <column name="ASSIGNEDTO" value="3052d584-83af-4f1a-b00d-c338b1681e07"/>
+      <column name="TOPIC" value="Website"/>
+      <column name="DESCRIPTION" value="Website"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="3"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T10:03:57"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="354b8b2b-b740-4642-ac50-44b9ad0e6fbd"/>
+      <column name="ASSIGNEDTO" value="3052d584-83af-4f1a-b00d-c338b1681e07"/>
+      <column name="TOPIC" value="Messe"/>
+      <column name="DESCRIPTION" value="Messe"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="4"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T10:03:40"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="baf639e8-6fd8-42d1-b370-1ab4d12d83a9"/>
+      <column name="ASSIGNEDTO" value="3052d584-83af-4f1a-b00d-c338b1681e07"/>
+      <column name="TOPIC" value="Anruf"/>
+      <column name="DESCRIPTION" value="Anruf"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="5"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T10:03:26"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="bff86fa3-3351-45f1-b4e9-46adeaacc8d8"/>
+      <column name="ASSIGNEDTO" value="08b8e5e9-a9bc-40e5-b1a3-2626bf0e842b"/>
+      <column name="TOPIC" value="Technologie"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T09:46:32"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="3d27692c-0f83-49d5-bdfa-eab94082e468"/>
+      <column name="ASSIGNEDTO" value="08b8e5e9-a9bc-40e5-b1a3-2626bf0e842b"/>
+      <column name="TOPIC" value="Referenz"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_4" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T09:46:22"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="ec37df26-3f27-4333-826e-66dc5f54c91d"/>
+      <column name="ASSIGNEDTO" value="83558d74-f0fa-45f0-8147-2d754307aec8"/>
+      <column name="TOPIC" value="Produktion"/>
+      <column name="DESCRIPTION" value="Produktion"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T03:44:12"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="757ec28a-cdfb-4db3-8293-2b46eae39fc9"/>
+      <column name="ASSIGNEDTO" value="83558d74-f0fa-45f0-8147-2d754307aec8"/>
+      <column name="TOPIC" value="Geschäftsleitung"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-06-14T11:36:54"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="611075b8-b8da-4214-bdb5-ec0f7c2d7908"/>
+      <column name="ASSIGNEDTO" value="83558d74-f0fa-45f0-8147-2d754307aec8"/>
+      <column name="TOPIC" value="Vertrieb"/>
+      <column name="DESCRIPTION" value="Vertrieb"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="3"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-04-21T01:42:45"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="02da3e29-9676-4abd-b16e-ccee1a2828b1"/>
+      <column name="ASSIGNEDTO" value="83558d74-f0fa-45f0-8147-2d754307aec8"/>
+      <column name="TOPIC" value="Marketing"/>
+      <column name="DESCRIPTION" value="Marketing"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="4"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-04-21T01:42:53"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="6d3fb243-1c8f-424e-a5d6-85bb373912e4"/>
+      <column name="ASSIGNEDTO" value="83558d74-f0fa-45f0-8147-2d754307aec8"/>
+      <column name="TOPIC" value="IT/Service"/>
+      <column name="DESCRIPTION" value="IT und Service"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="5"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T03:43:47"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="e27310c1-43a6-4e5a-8a41-da73fef8b626"/>
+      <column name="ASSIGNEDTO" value="611075b8-b8da-4214-bdb5-ec0f7c2d7908"/>
+      <column name="TOPIC" value="Aussendienst"/>
+      <column name="DESCRIPTION" value="Aussendienst"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T04:04:05"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="b5acfc78-2cc2-4c47-80e6-345102383ed1"/>
+      <column name="ASSIGNEDTO" value="611075b8-b8da-4214-bdb5-ec0f7c2d7908"/>
+      <column name="TOPIC" value="Innendienst"/>
+      <column name="DESCRIPTION" value="Innendienst"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-11-22T03:43:11"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="cc73519f-bc46-4ce3-bff5-336eeeaa70fc"/>
+      <column name="ASSIGNEDTO" value="fbd107dc-48b9-4fba-9c21-86d08f48162a"/>
+      <column name="TOPIC" value=" Kfz1"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2017-02-01T04:04:36"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="2857d130-f570-4581-b6f1-4ae51de9559d"/>
+      <column name="ASSIGNEDTO" value="fbd107dc-48b9-4fba-9c21-86d08f48162a"/>
+      <column name="TOPIC" value=" Kfz3"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-06-14T08:07:06"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2021-07-16T01:27:50"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="2fae6fb5-d6af-4cdd-b597-c09ea075916c"/>
+      <column name="ASSIGNEDTO" value="260d1423-629e-44ac-bff2-40ec07944ebf"/>
+      <column name="TOPIC" value="Raum101"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-06-14T11:33:37"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2021-07-16T01:32:52"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="05ba7abd-ed22-47a6-ac3e-4bff5a9d46cb"/>
+      <column name="ASSIGNEDTO" value="260d1423-629e-44ac-bff2-40ec07944ebf"/>
+      <column name="TOPIC" value="Raum102"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_3" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-06-14T11:33:45"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2021-07-16T01:28:52"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="260d1423-629e-44ac-bff2-40ec07944ebf"/>
+      <column name="ASSIGNEDTO" value="0d3258d8-e18d-482a-b20a-31b39396af6a"/>
+      <column name="TOPIC" value="Raum"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-06-14T11:33:28"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="fbd107dc-48b9-4fba-9c21-86d08f48162a"/>
+      <column name="ASSIGNEDTO" value="0d3258d8-e18d-482a-b20a-31b39396af6a"/>
+      <column name="TOPIC" value="Fahrzeug"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2016-06-14T11:33:53"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="0bcb9d7c-e3f7-4d9c-a0eb-f5be765fad88"/>
+      <column name="ASSIGNEDTO" value="aa503a9b-8484-4b86-b7ca--11ab5cc939a"/>
+      <column name="TOPIC" value="Addresse"/>
+      <column name="DESCRIPTION" value="ADDR"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="1"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2019-05-15T06:12:48"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2021-07-16T01:50:37"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="af30910f-4654-411e-9dda-869506f2c09c"/>
+      <column name="ASSIGNEDTO" value="aa503a9b-8484-4b86-b7ca--11ab5cc939a"/>
+      <column name="TOPIC" value="Kommunikation"/>
+      <column name="DESCRIPTION" value="COMM"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="2"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2019-05-15T06:12:37"/>
+      <column name="USER_EDIT" value="Admin"/>
+      <column name="DATE_EDIT" valueDate="2021-07-16T01:44:49"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="4b7f2ef8-ae00-409d-9bac-5da6fe8d3436"/>
+      <column name="ASSIGNEDTO" value="aa503a9b-8484-4b86-b7ca--11ab5cc939a"/>
+      <column name="TOPIC" value="Person"/>
+      <column name="DESCRIPTION" value="PERS"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="3"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2019-05-15T06:11:50"/>
+    </insert>
+    <insert tableName="TOPICTREE">
+      <column name="TOPICTREEID" value="f277ccb1-d7be-4068-8901-01c2aa957b71"/>
+      <column name="ASSIGNEDTO" value="aa503a9b-8484-4b86-b7ca--11ab5cc939a"/>
+      <column name="TOPIC" value="Firma"/>
+      <column name="DESCRIPTION" value="ORG"/>
+      <column name="ACTIVE" valueNumeric="1"/>
+      <column name="SORTING_LAYER_1" valueNumeric="-1"/>
+      <column name="SORTING_LAYER_2" valueNumeric="4"/>
+      <column name="USER_NEW" value="Admin"/>
+      <column name="DATE_NEW" valueDate="2019-05-15T06:12:19"/>
+    </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/changelog.xml b/.liquibase/Data_alias/changelog.xml
index b93e263dd787521dd53d6bf37962eaddb811ff5e..e211a0f400b6d71748232707325c22af7fbf936c 100644
--- a/.liquibase/Data_alias/changelog.xml
+++ b/.liquibase/Data_alias/changelog.xml
@@ -27,6 +27,7 @@
     <include relativeToChangelogFile="true" file="basic/2021.1.1/changelog.xml"/>
     <include relativeToChangelogFile="true" file="basic/2021.1.2/changelog.xml"/>
     <include relativeToChangelogFile="true" file="basic/2021.1.3/changelog.xml"/>
+    <include relativeToChangelogFile="true" file="basic/2021.2.0/changelog.xml"/>
     
     <include relativeToChangelogFile="true" file="basic/workflows/changelog.xml" context="workflow"/>
     <include relativeToChangelogFile="true" file="basic/_demoData/changelog.xml" context="example"/>
diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod
index 60140ad99b32cef9e6cc0229e882b4b1d478b296..75df167dc2cd36f23f4a54e085b0832369f21669 100644
--- a/aliasDefinition/Data_alias/Data_alias.aod
+++ b/aliasDefinition/Data_alias/Data_alias.aod
@@ -22238,6 +22238,396 @@
               </entityFieldDb>
             </entityFields>
           </entityDb>
+          <entityDb>
+            <name>TOPICTREE</name>
+            <dbName></dbName>
+            <idColumn>TOPICTREEID</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>TOPICTREEID</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>ACTIVE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SORTING_LAYER_5</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>SORTING_LAYER_6</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>TOPIC</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SORTING_LAYER_1</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>SORTING_LAYER_2</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>SORTING_LAYER_3</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>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SORTING_LAYER_4</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>DESCRIPTION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="500" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>ASSIGNEDTO</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>TOPICTREERELATION</name>
+            <dbName></dbName>
+            <idColumn>TOPICTREERELATIONID</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="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TOPICTREE_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DESCRIPTION</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="2005" />
+                <size v="2147483647" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TOPICTREERELATIONID</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>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="29" />
+                <scale v="9" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SORT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="4" />
+                <size v="10" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
         </entities>
       </entityGroup>
     </aliasDefDb>
diff --git a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod
index 049eeb525e6c6ffbe044dea92d433afade2a879d..18ff4f74b031f7b7e427bf633349d12ab604bf39 100644
--- a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod
+++ b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod
@@ -377,6 +377,10 @@
                 <name>Checklist</name>
                 <kind v="10077" />
               </entityNode>
+              <entityNode>
+                <name>TopicTree</name>
+                <kind v="10077" />
+              </entityNode>
             </childNodes>
           </entityNode>
           <entityNode>
diff --git a/entity/Activity_entity/Activity_entity.aod b/entity/Activity_entity/Activity_entity.aod
index 9e1c5bd2f5d657f159a50bc72534b1167772a44c..59493fb1a3c0a6573607469d28b34c66ca73877d 100644
--- a/entity/Activity_entity/Activity_entity.aod
+++ b/entity/Activity_entity/Activity_entity.aod
@@ -698,6 +698,39 @@
       <name>AdvActivityId_param</name>
       <expose v="true" />
     </entityParameter>
+    <entityConsumer>
+      <name>Topics</name>
+      <onValidation>%aditoprj%/entity/Activity_entity/entityfields/topics/onValidation.js</onValidation>
+      <dependency>
+        <name>dependency</name>
+        <entityName>TopicTreeRelation_entity</entityName>
+        <fieldName>TopicRelation</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>ObjectType_param</name>
+          <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/topics/children/objecttype_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>ObjectRowId_param</name>
+          <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/topics/children/objectrowid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityConsumer>
+      <name>AllTopics</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>TopicTree_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>Expanded_param</name>
+          <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/alltopics/children/expanded_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -847,6 +880,24 @@
           <isLookupFilter v="false" />
           <filtertype>BASIC</filtertype>
         </filterExtension>
+        <filterExtension>
+          <name>Topic_filter</name>
+          <title>Topic</title>
+          <contentType>TEXT</contentType>
+          <useConsumer v="true" />
+          <consumer>AllTopics</consumer>
+          <filterConditionProcess>%aditoprj%/entity/Activity_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtension>
+        <filterExtension>
+          <name>TopicIncludingSubTopics_filter</name>
+          <title>Topic (incl. Subtopics)</title>
+          <contentType>TEXT</contentType>
+          <useConsumer v="true" />
+          <consumer>AllTopics</consumer>
+          <filterConditionProcess>%aditoprj%/entity/Activity_entity/recordcontainers/db/filterextensions/topicincludingsubtopics_filter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtension>
       </filterExtensions>
     </dbRecordContainer>
   </recordContainers>
diff --git a/entity/Activity_entity/entityfields/alltopics/children/expanded_param/valueProcess.js b/entity/Activity_entity/entityfields/alltopics/children/expanded_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a
--- /dev/null
+++ b/entity/Activity_entity/entityfields/alltopics/children/expanded_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(true);
\ No newline at end of file
diff --git a/entity/Activity_entity/entityfields/topics/children/objectrowid_param/valueProcess.js b/entity/Activity_entity/entityfields/topics/children/objectrowid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a8267b62060b4bd30cedaba4713f4421a6e6f9ff
--- /dev/null
+++ b/entity/Activity_entity/entityfields/topics/children/objectrowid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.ACTIVITYID"));
\ No newline at end of file
diff --git a/entity/Activity_entity/entityfields/topics/children/objecttype_param/valueProcess.js b/entity/Activity_entity/entityfields/topics/children/objecttype_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..cc6924394ae950c43386275dda2c8db5d7a9c0ed
--- /dev/null
+++ b/entity/Activity_entity/entityfields/topics/children/objecttype_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("Context_lib");
+import("system.result");
+
+result.string(ContextUtils.getCurrentContextId());
\ No newline at end of file
diff --git a/entity/Activity_entity/entityfields/topics/onValidation.js b/entity/Activity_entity/entityfields/topics/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..6e919e3fc66765b822eca989f63eef0c5f477628
--- /dev/null
+++ b/entity/Activity_entity/entityfields/topics/onValidation.js
@@ -0,0 +1,4 @@
+import("TopicTree_lib");
+import("system.result");
+
+result.string(TopicTreeUtils.validateTopicCount("Topics"));
\ No newline at end of file
diff --git a/entity/Activity_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js b/entity/Activity_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..afedc8049596e79077988ea9b16bb335ab8680e5
--- /dev/null
+++ b/entity/Activity_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js
@@ -0,0 +1,34 @@
+import("Context_lib");
+import("Sql_lib");
+import("system.result");
+import("system.vars");
+
+var rawValue = vars.get("$local.rawvalue");
+var operator = vars.get("$local.comparison");
+
+var topicSql = newSelect("TOPICTREERELATION.TOPICTREE_ID")
+                            .from("TOPICTREERELATION")
+                            .where("TOPICTREERELATION.OBJECT_TYPE", ContextUtils.getCurrentContextId())
+
+if(operator == "ISNOTNULL")
+{
+    topicSql = topicSql.and("TOPICTREERELATION.OBJECT_ROWID != ACTIVITY.ACTIVITYID")
+}
+else if(operator != "ISNULL")
+{
+    topicSql = topicSql.and("TOPICTREERELATION.TOPICTREE_ID", rawValue)
+                        .and("TOPICTREERELATION.OBJECT_ROWID = ACTIVITY.ACTIVITYID");
+}
+else
+{
+    topicSql = topicSql.and("TOPICTREERELATION.OBJECT_ROWID = ACTIVITY.ACTIVITYID");
+}
+    
+var condType = SqlBuilder.EXISTS();
+
+if (operator != "EQUAL")
+{
+    condType = SqlBuilder.NOT_EXISTS();
+}
+
+result.string(newWhere(null, topicSql, condType));
\ No newline at end of file
diff --git a/entity/Activity_entity/recordcontainers/db/filterextensions/topicincludingsubtopics_filter/filterConditionProcess.js b/entity/Activity_entity/recordcontainers/db/filterextensions/topicincludingsubtopics_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2435ea65507bee9174463f1dc310ae142c0834aa
--- /dev/null
+++ b/entity/Activity_entity/recordcontainers/db/filterextensions/topicincludingsubtopics_filter/filterConditionProcess.js
@@ -0,0 +1,53 @@
+import("TopicTree_lib");
+import("Sql_lib");
+import("system.result");
+import("system.vars");
+
+var rawValue = vars.get("$local.rawvalue");
+var operator = vars.get("$local.comparison");
+
+var topicSql = newSelect("TOPICTREERELATION.TOPICTREE_ID")
+                            .from("TOPICTREERELATION")
+                            .where("TOPICTREERELATION.OBJECT_TYPE", "Activity")
+
+if(operator == "ISNOTNULL")
+{
+    topicSql = topicSql.and("TOPICTREERELATION.OBJECT_ROWID != ACTIVITY.ACTIVITYID")
+}
+else if(operator != "ISNULL")
+{
+    var topicTreeIds = [rawValue];
+    var topics = [rawValue];
+    //update child topics accordingly
+    while(topicTreeIds && topicTreeIds.length > 0)
+    {
+        topicTreeIds = newSelect("TOPICTREEID")
+                                .from("TOPICTREE")
+                                .where("TOPICTREE.ASSIGNEDTO", topicTreeIds, SqlBuilder.IN())
+                                .arrayColumn();
+
+        if(topicTreeIds && topicTreeIds.length > 0)
+        {
+            for (let i = 0; i < topicTreeIds.length; i++)
+            {
+                topics.push(topicTreeIds[i]);
+            }
+
+        }
+    }
+    topicSql = topicSql.and("TOPICTREERELATION.TOPICTREE_ID", topics, SqlBuilder.IN())
+                        .and("TOPICTREERELATION.OBJECT_ROWID = ACTIVITY.ACTIVITYID");
+}
+else
+{
+    topicSql = topicSql.and("TOPICTREERELATION.OBJECT_ROWID = ACTIVITY.ACTIVITYID");
+}
+    
+var condType = SqlBuilder.EXISTS();
+
+if (operator != "EQUAL")
+{
+    condType = SqlBuilder.NOT_EXISTS();
+}
+
+result.string(newWhere(null, topicSql, condType));
\ No newline at end of file
diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod
index 0dd2601540a2b5f0e411f540ae187f57f8bae247..603cd1abc2cade88d59f650b22be449135a1cdee 100644
--- a/entity/Organisation_entity/Organisation_entity.aod
+++ b/entity/Organisation_entity/Organisation_entity.aod
@@ -1411,6 +1411,20 @@
       <name>IgnoreOrderBy_param</name>
       <expose v="true" />
     </entityParameter>
+    <entityConsumer>
+      <name>AllTopics</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>TopicTree_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>Expanded_param</name>
+          <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/alltopics/children/expanded_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -1774,6 +1788,24 @@
           <documentation>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/visitrecommendation_filter/documentation.adoc</documentation>
           <filtertype>BASIC</filtertype>
         </filterExtension>
+        <filterExtension>
+          <name>Topic_filter</name>
+          <title>Activity: Topic</title>
+          <contentType>TEXT</contentType>
+          <useConsumer v="true" />
+          <consumer>AllTopics</consumer>
+          <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtension>
+        <filterExtension>
+          <name>TopicIncludingSubTopics</name>
+          <title>Activity: Topic (incl. Subtopics)</title>
+          <contentType>TEXT</contentType>
+          <useConsumer v="true" />
+          <consumer>AllTopics</consumer>
+          <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/topicincludingsubtopics/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtension>
       </filterExtensions>
     </dbRecordContainer>
     <indexRecordContainer>
diff --git a/entity/Organisation_entity/entityfields/alltopics/children/expanded_param/valueProcess.js b/entity/Organisation_entity/entityfields/alltopics/children/expanded_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a
--- /dev/null
+++ b/entity/Organisation_entity/entityfields/alltopics/children/expanded_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(true);
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..36791c8b294538e8706862eb760536098cf37265
--- /dev/null
+++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js
@@ -0,0 +1,35 @@
+import("Context_lib");
+import("Sql_lib");
+import("system.result");
+import("system.vars");
+
+var rawValue = vars.get("$local.rawvalue");
+var operator = vars.get("$local.comparison");
+
+var topicSql = newSelect("ACTIVITYLINK.ACTIVITYLINKID")
+                            .from("ACTIVITYLINK")
+                            .join("ACTIVITY", "ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID")
+                            .join("TOPICTREERELATION", "TOPICTREERELATION.OBJECT_ROWID = ACTIVITY.ACTIVITYID")
+                            .where("ACTIVITYLINK.OBJECT_TYPE", ContextUtils.getCurrentContextId());
+
+if(operator == "ISNOTNULL")
+{
+    topicSql = topicSql.and("ACTIVITYLINK.OBJECT_ROWID != CONTACT.CONTACTID");
+}
+else if(operator != "ISNULL")
+{
+    topicSql = topicSql.and("TOPICTREERELATION.TOPICTREE_ID", rawValue)
+                        .and("ACTIVITYLINK.OBJECT_ROWID = CONTACT.CONTACTID");
+}
+else
+{
+    topicSql = topicSql.and("ACTIVITYLINK.OBJECT_ROWID = CONTACT.CONTACTID");
+}
+var condType = SqlBuilder.EXISTS();
+
+if (operator != "EQUAL")
+{
+    condType = SqlBuilder.NOT_EXISTS();
+}
+
+result.string(newWhere(null, topicSql, condType));
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/topicincludingsubtopics/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/topicincludingsubtopics/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..6697b2dd13ebc6d4943ac6971cbf295a3f4db41e
--- /dev/null
+++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/topicincludingsubtopics/filterConditionProcess.js
@@ -0,0 +1,55 @@
+import("Context_lib");
+import("Sql_lib");
+import("system.result");
+import("system.vars");
+
+var rawValue = vars.get("$local.rawvalue");
+var operator = vars.get("$local.comparison");
+
+var topicSql = newSelect("ACTIVITYLINK.ACTIVITYLINKID")
+                            .from("ACTIVITYLINK")
+                            .join("ACTIVITY", "ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID")
+                            .join("TOPICTREERELATION", "TOPICTREERELATION.OBJECT_ROWID = ACTIVITY.ACTIVITYID")
+                            .where("ACTIVITYLINK.OBJECT_TYPE", ContextUtils.getCurrentContextId());
+
+if(operator == "ISNOTNULL")
+{
+    topicSql = topicSql.and("ACTIVITYLINK.OBJECT_ROWID != CONTACT.CONTACTID");
+}
+else if(operator != "ISNULL")
+{
+    var topicTreeIds = [rawValue];
+    var topics = [rawValue];
+    
+    //update child topics accordingly
+    while(topicTreeIds && topicTreeIds.length > 0)
+    {
+        topicTreeIds = newSelect("TOPICTREEID")
+                                .from("TOPICTREE")
+                                .where("TOPICTREE.ASSIGNEDTO", topicTreeIds, SqlBuilder.IN())
+                                .arrayColumn();
+
+        if(topicTreeIds && topicTreeIds.length > 0)
+        {
+            for (let i = 0; i < topicTreeIds.length; i++)
+            {
+                topics.push(topicTreeIds[i]);
+            }
+
+        }
+    }
+    topicSql = topicSql.and("TOPICTREERELATION.TOPICTREE_ID", topics, SqlBuilder.IN())
+                        .and("ACTIVITYLINK.OBJECT_ROWID = CONTACT.CONTACTID");
+}
+else
+{
+    topicSql = topicSql.and("ACTIVITYLINK.OBJECT_ROWID = CONTACT.CONTACTID");
+}
+var condType = SqlBuilder.EXISTS();
+
+if (operator != "EQUAL")
+{
+    condType = SqlBuilder.NOT_EXISTS();
+}
+
+result.string(newWhere(null, topicSql, condType));
\ No newline at end of file
diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod
index e7436815ba14d9de1ee7b325e7019b2958b96818..e712aba6c63b5bb0e02c5852c3b58bbd82710e0e 100644
--- a/entity/Person_entity/Person_entity.aod
+++ b/entity/Person_entity/Person_entity.aod
@@ -1336,6 +1336,20 @@
         <fieldName>Salesprojects</fieldName>
       </dependency>
     </entityConsumer>
+    <entityConsumer>
+      <name>AllTopics</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>TopicTree_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>Expanded_param</name>
+          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/alltopics/children/expanded_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -1822,6 +1836,24 @@
           <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/salesprojectresponsible_filter/filterConditionProcess.js</filterConditionProcess>
           <filtertype>BASIC</filtertype>
         </filterExtension>
+        <filterExtension>
+          <name>Topic_filter</name>
+          <title>Activity: Topic</title>
+          <contentType>TEXT</contentType>
+          <useConsumer v="true" />
+          <consumer>AllTopics</consumer>
+          <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtension>
+        <filterExtension>
+          <name>TopicIncludingSubTopics_filter</name>
+          <title>Activity: Topic (incl. Subtopics)</title>
+          <contentType>TEXT</contentType>
+          <useConsumer v="true" />
+          <consumer>AllTopics</consumer>
+          <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/topicincludingsubtopics_filter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtension>
       </filterExtensions>
     </dbRecordContainer>
     <indexRecordContainer>
diff --git a/entity/Person_entity/entityfields/alltopics/children/expanded_param/valueProcess.js b/entity/Person_entity/entityfields/alltopics/children/expanded_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a
--- /dev/null
+++ b/entity/Person_entity/entityfields/alltopics/children/expanded_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(true);
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1deaa052454a181c544c64fd3957feb672717660
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/filterextensions/topic_filter/filterConditionProcess.js
@@ -0,0 +1,36 @@
+import("Context_lib");
+import("Sql_lib");
+import("system.result");
+import("system.vars");
+
+var rawValue = vars.get("$local.rawvalue");
+var operator = vars.get("$local.comparison");
+
+var topicSql = newSelect("ACTIVITYLINK.ACTIVITYLINKID")
+                            .from("ACTIVITYLINK")
+                            .join("ACTIVITY", "ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID")
+                            .join("TOPICTREERELATION", "TOPICTREERELATION.OBJECT_ROWID = ACTIVITY.ACTIVITYID")
+                            .where("ACTIVITYLINK.OBJECT_TYPE", ContextUtils.getCurrentContextId());
+
+if(operator == "ISNOTNULL")
+{
+    topicSql = topicSql.and("ACTIVITYLINK.OBJECT_ROWID != CONTACT.CONTACTID");
+}
+else if(operator != "ISNULL")
+{
+    topicSql = topicSql.and("TOPICTREERELATION.TOPICTREE_ID", rawValue)
+                        .and("ACTIVITYLINK.OBJECT_ROWID = CONTACT.CONTACTID");
+}
+else
+{
+    topicSql = topicSql.and("ACTIVITYLINK.OBJECT_ROWID = CONTACT.CONTACTID");
+}
+    
+var condType = SqlBuilder.EXISTS();
+
+if (operator != "EQUAL")
+{
+    condType = SqlBuilder.NOT_EXISTS();
+}
+
+result.string(newWhere(null, topicSql, condType));
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/topicincludingsubtopics_filter/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/topicincludingsubtopics_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..6aa80f001b011babb2a565f66755088ee230f572
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/filterextensions/topicincludingsubtopics_filter/filterConditionProcess.js
@@ -0,0 +1,60 @@
+import("Context_lib");
+import("Sql_lib");
+import("system.result");
+import("system.vars");
+
+var rawValue = vars.get("$local.rawvalue");
+var operator = vars.get("$local.comparison");
+
+var topicSql = newSelect("ACTIVITYLINK.ACTIVITYLINKID")
+                            .from("ACTIVITYLINK")
+                            .join("ACTIVITY", "ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID")
+                            .join("TOPICTREERELATION", "TOPICTREERELATION.OBJECT_ROWID = ACTIVITY.ACTIVITYID")
+                            .where("ACTIVITYLINK.OBJECT_TYPE", ContextUtils.getCurrentContextId());
+
+if(operator == "ISNOTNULL")
+{
+    topicSql = topicSql.and("ACTIVITYLINK.OBJECT_ROWID != CONTACT.CONTACTID");
+}
+else if(operator != "ISNULL")
+{
+    var topicTreeIds = [rawValue];
+    var topics = [rawValue];
+    var stop = false;
+    //update child topics accordingly
+    while(stop == false)
+    {
+        topicTreeIds = newSelect("TOPICTREEID")
+                                .from("TOPICTREE")
+                                .where("TOPICTREE.ASSIGNEDTO", topicTreeIds, SqlBuilder.IN())
+                                .arrayColumn();
+
+        if(topicTreeIds && topicTreeIds.length > 0)
+        {
+            for (let i = 0; i < topicTreeIds.length; i++)
+            {
+                topics.push(topicTreeIds[i]);
+            }
+
+        }
+        else
+        {
+            stop = true;
+        }
+    }
+    topicSql = topicSql.and("TOPICTREERELATION.TOPICTREE_ID", topics, SqlBuilder.IN())
+                        .and("ACTIVITYLINK.OBJECT_ROWID = CONTACT.CONTACTID");
+}
+else
+{
+    topicSql = topicSql.and("ACTIVITYLINK.OBJECT_ROWID = CONTACT.CONTACTID");
+}
+    
+var condType = SqlBuilder.EXISTS();
+
+if (operator != "EQUAL")
+{
+    condType = SqlBuilder.NOT_EXISTS();
+}
+
+result.string(newWhere(null, topicSql, condType));
\ No newline at end of file
diff --git a/entity/TopicTreeRelation_entity/TopicTreeRelation_entity.aod b/entity/TopicTreeRelation_entity/TopicTreeRelation_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..10a9f4421933b6a52a028ad99833ce39b73f7083
--- /dev/null
+++ b/entity/TopicTreeRelation_entity/TopicTreeRelation_entity.aod
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21">
+  <name>TopicTreeRelation_entity</name>
+  <title>Topic</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/TopicTreeRelation_entity/documentation.adoc</documentation>
+  <titlePlural>Topics</titlePlural>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityField>
+      <name>TOPICTREERELATIONID</name>
+      <state>INVISIBLE</state>
+    </entityField>
+    <entityField>
+      <name>TOPICTREE_ID</name>
+      <title>Topic</title>
+      <consumer>Topics</consumer>
+      <mandatory v="true" />
+      <stateProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/topictree_id/stateProcess.js</stateProcess>
+      <displayValueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/topictree_id/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>OBJECT_ROWID</name>
+      <state>INVISIBLE</state>
+      <valueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/object_rowid/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>OBJECT_TYPE</name>
+      <state>INVISIBLE</state>
+      <valueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/object_type/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DESCRIPTION</name>
+      <title>Description</title>
+      <contentType>LONG_TEXT</contentType>
+      <htmlEditorFeatures>ADVANCED</htmlEditorFeatures>
+    </entityField>
+    <entityField>
+      <name>USER_NEW</name>
+      <state>INVISIBLE</state>
+      <valueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/user_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_NEW</name>
+      <state>INVISIBLE</state>
+      <valueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/date_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>USER_EDIT</name>
+      <state>INVISIBLE</state>
+      <valueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/user_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_EDIT</name>
+      <state>INVISIBLE</state>
+      <valueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/date_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityProvider>
+      <name>TopicRelation</name>
+      <sortingField>SORT</sortingField>
+      <documentation>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/topicrelation/documentation.adoc</documentation>
+    </entityProvider>
+    <entityParameter>
+      <name>ObjectRowId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>ObjectType_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityConsumer>
+      <name>Topics</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>TopicTree_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>OnlyActive_param</name>
+          <valueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/topics/children/onlyactive_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>OnlyFiveLayers_param</name>
+        </entityParameter>
+        <entityParameter>
+          <name>Expanded_param</name>
+          <valueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/topics/children/expanded_param/valueProcess.js</valueProcess>
+          <mandatory v="true" />
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityField>
+      <name>TOPICTREE_IDdisplayValue</name>
+      <title>Topic</title>
+      <stateProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/topictree_iddisplayvalue/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/TopicTreeRelation_entity/entityfields/topictree_iddisplayvalue/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>SORT</name>
+    </entityField>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <conditionProcess>%aditoprj%/entity/TopicTreeRelation_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <orderClauseProcess>%aditoprj%/entity/TopicTreeRelation_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
+      <alias>Data_alias</alias>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>TOPICTREERELATIONID.value</name>
+          <recordfield>TOPICTREERELATION.TOPICTREERELATIONID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TOPICTREE_ID.value</name>
+          <recordfield>TOPICTREERELATION.TOPICTREE_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>OBJECT_TYPE.value</name>
+          <recordfield>TOPICTREERELATION.OBJECT_TYPE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>OBJECT_ROWID.value</name>
+          <recordfield>TOPICTREERELATION.OBJECT_ROWID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DESCRIPTION.value</name>
+          <recordfield>TOPICTREERELATION.DESCRIPTION</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_NEW.value</name>
+          <recordfield>TOPICTREERELATION.USER_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_EDIT.value</name>
+          <recordfield>TOPICTREERELATION.USER_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_NEW.value</name>
+          <recordfield>TOPICTREERELATION.DATE_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_EDIT.value</name>
+          <recordfield>TOPICTREERELATION.DATE_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>SORT.value</name>
+          <recordfield>TOPICTREERELATION.SORT</recordfield>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+      <linkInformation>
+        <linkInformation>
+          <name>162e9cbb-1a39-4577-97fa-d2833a9966e3</name>
+          <tableName>TOPICTREERELATION</tableName>
+          <primaryKey>TOPICTREERELATIONID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+      </linkInformation>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/TopicTreeRelation_entity/documentation.adoc b/entity/TopicTreeRelation_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..4e961c5a5da4efd0392645ef2be299e62a444f3c
--- /dev/null
+++ b/entity/TopicTreeRelation_entity/documentation.adoc
@@ -0,0 +1,15 @@
+= TopicTreeRelation_entity
+
+Definition:
+
+    Allows n:m relations between objects and topics (one activity can have multiple topics and one topic can be assigned to multiple activities)
+
+Purpose:
+
+    This Entity allows to assign topics to any object you want, altough we currently only use it for activities.
+    It works the same way as all the other linking entites:
+    You create a consumer, link it to the TopicRelation provider, set the objectType and objectRowId params.
+    This entity has an relation to the TopicTree_entity and OnlyShowActive_param is set to true so you can only select active topics.
+´   An relationdataset has the object_rowId and ObjectType aswell as the topic_id and a description textfield.
+
+See also TopicTree_entity.
\ No newline at end of file
diff --git a/entity/TopicTreeRelation_entity/entityfields/date_edit/valueProcess.js b/entity/TopicTreeRelation_entity/entityfields/date_edit/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2af46a8e46789056c6c341a8e4e087f8e1edc0c4
--- /dev/null
+++ b/entity/TopicTreeRelation_entity/entityfields/date_edit/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+{
+    result.string(vars.get("$sys.date"));
+}
\ No newline at end of file
diff --git a/entity/TopicTreeRelation_entity/entityfields/date_new/valueProcess.js b/entity/TopicTreeRelation_entity/entityfields/date_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9e4534537d88c19f96216d442c0b0ae984f65109
--- /dev/null
+++ b/entity/TopicTreeRelation_entity/entityfields/date_new/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+{
+    result.string(vars.get("$sys.date"));
+}
\ No newline at end of file
diff --git a/entity/TopicTreeRelation_entity/entityfields/object_rowid/valueProcess.js b/entity/TopicTreeRelation_entity/entityfields/object_rowid/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4e82c3f0b68ddc75297e7316171953842d02b94f
--- /dev/null
+++ b/entity/TopicTreeRelation_entity/entityfields/object_rowid/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.vars");
+
+if(vars.get("$param.ObjectRowId_param"))
+{
+    result.string(vars.get("$param.ObjectRowId_param"));
+}
\ No newline at end of file
diff --git a/entity/TopicTreeRelation_entity/entityfields/object_type/valueProcess.js b/entity/TopicTreeRelation_entity/entityfields/object_type/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9633afcefd4868203f1a66e5f99994f57bdf5baf
--- /dev/null
+++ b/entity/TopicTreeRelation_entity/entityfields/object_type/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.vars");
+
+if(vars.get("$param.ObjectType_param"))
+{
+    result.string(vars.get("$param.ObjectType_param"));
+}
\ No newline at end of file
diff --git a/entity/TopicTreeRelation_entity/entityfields/topicrelation/documentation.adoc b/entity/TopicTreeRelation_entity/entityfields/topicrelation/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..27d347c5dec08a973ed8f311160c0535d5b28c4a
--- /dev/null
+++ b/entity/TopicTreeRelation_entity/entityfields/topicrelation/documentation.adoc
@@ -0,0 +1,3 @@
+= TopicRelation
+
+Set the objectType and objectRowId params accordingly to only see the datasets of said dataset.
\ No newline at end of file
diff --git a/entity/TopicTreeRelation_entity/entityfields/topics/children/expanded_param/valueProcess.js b/entity/TopicTreeRelation_entity/entityfields/topics/children/expanded_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a
--- /dev/null
+++ b/entity/TopicTreeRelation_entity/entityfields/topics/children/expanded_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(true);
\ No newline at end of file
diff --git a/entity/TopicTreeRelation_entity/entityfields/topics/children/onlyactive_param/valueProcess.js b/entity/TopicTreeRelation_entity/entityfields/topics/children/onlyactive_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a
--- /dev/null
+++ b/entity/TopicTreeRelation_entity/entityfields/topics/children/onlyactive_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(true);
\ No newline at end of file
diff --git a/entity/TopicTreeRelation_entity/entityfields/topictree_id/displayValueProcess.js b/entity/TopicTreeRelation_entity/entityfields/topictree_id/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..6f3388752016c7a574439e987d439eaba0ae2a17
--- /dev/null
+++ b/entity/TopicTreeRelation_entity/entityfields/topictree_id/displayValueProcess.js
@@ -0,0 +1,11 @@
+import("TopicTree_lib");
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+if (vars.get("$this.value") && (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT))
+{
+    var title = TopicTreeUtils.getTopicTreeDisplayValue(vars.get("$this.value"));
+    
+    result.string(title);
+}
\ No newline at end of file
diff --git a/entity/TopicTreeRelation_entity/entityfields/topictree_id/stateProcess.js b/entity/TopicTreeRelation_entity/entityfields/topictree_id/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3713fc5d01c660ae2b034c30f8f334f3543a5db7
--- /dev/null
+++ b/entity/TopicTreeRelation_entity/entityfields/topictree_id/stateProcess.js
@@ -0,0 +1,11 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+var state = neon.COMPONENTSTATE_INVISIBLE;
+if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT)
+{
+    state = neon.COMPONENTSTATE_EDITABLE;
+}
+
+result.string(state);
\ No newline at end of file
diff --git a/entity/TopicTreeRelation_entity/entityfields/topictree_iddisplayvalue/stateProcess.js b/entity/TopicTreeRelation_entity/entityfields/topictree_iddisplayvalue/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b73d481f148d9fa9eb8e3288292fa95544f202db
--- /dev/null
+++ b/entity/TopicTreeRelation_entity/entityfields/topictree_iddisplayvalue/stateProcess.js
@@ -0,0 +1,11 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+var state = neon.COMPONENTSTATE_EDITABLE;
+if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT)
+{
+    state = neon.COMPONENTSTATE_INVISIBLE;
+}
+
+result.string(state);
\ No newline at end of file
diff --git a/entity/TopicTreeRelation_entity/entityfields/topictree_iddisplayvalue/valueProcess.js b/entity/TopicTreeRelation_entity/entityfields/topictree_iddisplayvalue/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..78e2e10fc0e5474ffaa1ce1692029b92b859917b
--- /dev/null
+++ b/entity/TopicTreeRelation_entity/entityfields/topictree_iddisplayvalue/valueProcess.js
@@ -0,0 +1,8 @@
+import("TopicTree_lib");
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+var title = TopicTreeUtils.getTopicTreeDisplayValue(vars.get("$field.TOPICTREE_ID"));
+
+result.string(title);
\ No newline at end of file
diff --git a/entity/TopicTreeRelation_entity/entityfields/user_edit/valueProcess.js b/entity/TopicTreeRelation_entity/entityfields/user_edit/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b874a7ac426b8e99383ac949299b9753e4951f2b
--- /dev/null
+++ b/entity/TopicTreeRelation_entity/entityfields/user_edit/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+{
+    result.string(vars.get("$sys.user"));
+}
\ No newline at end of file
diff --git a/entity/TopicTreeRelation_entity/entityfields/user_new/valueProcess.js b/entity/TopicTreeRelation_entity/entityfields/user_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ee15284e5df386270e83f1b57b189f3fecced930
--- /dev/null
+++ b/entity/TopicTreeRelation_entity/entityfields/user_new/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+{
+    result.string(vars.get("$sys.user"));
+}
\ No newline at end of file
diff --git a/entity/TopicTreeRelation_entity/recordcontainers/db/conditionProcess.js b/entity/TopicTreeRelation_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2921e338105d0be2d8d2a6392283b97f33db172f
--- /dev/null
+++ b/entity/TopicTreeRelation_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,9 @@
+import("system.vars");
+import("system.db");
+import("system.result");
+import("Sql_lib");
+
+var cond = newWhereIfSet("TOPICTREERELATION.OBJECT_ROWID", "$param.ObjectRowId_param", SqlBuilder.EQUAL())
+                        .and("TOPICTREERELATION.OBJECT_TYPE", "$param.ObjectType_param", SqlBuilder.EQUAL());
+
+result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/TopicTreeRelation_entity/recordcontainers/db/orderClauseProcess.js b/entity/TopicTreeRelation_entity/recordcontainers/db/orderClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..df94f9c6f56a7aefa079465bc4f33a55e8ec47b7
--- /dev/null
+++ b/entity/TopicTreeRelation_entity/recordcontainers/db/orderClauseProcess.js
@@ -0,0 +1,6 @@
+import("system.db");
+import("system.result");
+
+result.object({
+    "TOPICTREERELATION.SORT": db.DESCENDING
+})
\ No newline at end of file
diff --git a/entity/TopicTree_entity/TopicTree_entity.aod b/entity/TopicTree_entity/TopicTree_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..870e334f7f617e7e1fe0da236bd42f3a0e150256
--- /dev/null
+++ b/entity/TopicTree_entity/TopicTree_entity.aod
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21">
+  <name>TopicTree_entity</name>
+  <title>Topic Tree</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/TopicTree_entity/documentation.adoc</documentation>
+  <grantDeleteProcess>%aditoprj%/entity/TopicTree_entity/grantDeleteProcess.js</grantDeleteProcess>
+  <contentTitleProcess>%aditoprj%/entity/TopicTree_entity/contentTitleProcess.js</contentTitleProcess>
+  <iconId>VAADIN:TREE_TABLE</iconId>
+  <recordContainer>jdito</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityField>
+      <name>TOPICTREEID</name>
+      <state>INVISIBLE</state>
+      <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/topictreeid/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>ASSIGNEDTO</name>
+      <title>Superordinate Topic</title>
+      <consumer>Topics</consumer>
+      <contentType>TEXT</contentType>
+      <groupable v="true" />
+      <linkedContext>TopicTree</linkedContext>
+      <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/assignedto/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/assignedto/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/assignedto/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>TOPIC</name>
+      <title>Topic</title>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>DESCRIPTION</name>
+      <title>Description</title>
+    </entityField>
+    <entityField>
+      <name>ACTIVE</name>
+      <title>Active</title>
+      <contentType>BOOLEAN</contentType>
+      <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/active/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>SORTING_LAYER_1</name>
+    </entityField>
+    <entityField>
+      <name>SORTING_LAYER_2</name>
+    </entityField>
+    <entityField>
+      <name>SORTING_LAYER_3</name>
+    </entityField>
+    <entityField>
+      <name>SORTING_LAYER_4</name>
+    </entityField>
+    <entityField>
+      <name>SORTING_LAYER_5</name>
+    </entityField>
+    <entityField>
+      <name>SORTING_LAYER_6</name>
+    </entityField>
+    <entityField>
+      <name>USER_NEW</name>
+      <state>INVISIBLE</state>
+      <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/user_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>USER_EDIT</name>
+      <state>INVISIBLE</state>
+      <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/user_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_NEW</name>
+      <contentType>DATE</contentType>
+      <state>INVISIBLE</state>
+      <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/date_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_EDIT</name>
+      <contentType>DATE</contentType>
+      <state>INVISIBLE</state>
+      <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/date_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>icon</name>
+      <colorProcess>%aditoprj%/entity/TopicTree_entity/entityfields/icon/colorProcess.js</colorProcess>
+      <contentType>IMAGE</contentType>
+    </entityField>
+    <entityField>
+      <name>UID</name>
+      <state>INVISIBLE</state>
+    </entityField>
+    <entityActionGroup>
+      <name>More</name>
+      <children>
+        <entityActionField>
+          <name>first</name>
+          <title>First</title>
+          <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/first/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:ANGLE_DOUBLE_UP</iconId>
+          <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/first/stateProcess.js</stateProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>moveUp</name>
+          <title>Move Up</title>
+          <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/moveup/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:ANGLE_UP</iconId>
+          <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/moveup/stateProcess.js</stateProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>moveDown</name>
+          <title>Move Down</title>
+          <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/movedown/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:ANGLE_DOWN</iconId>
+          <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/movedown/stateProcess.js</stateProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>last</name>
+          <title>Last</title>
+          <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/last/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:ANGLE_DOUBLE_DOWN</iconId>
+          <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/last/stateProcess.js</stateProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>copy</name>
+          <title>Copy</title>
+          <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/copy/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:COPY</iconId>
+          <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/copy/stateProcess.js</stateProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>paste</name>
+          <title>Paste</title>
+          <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/paste/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:PASTE</iconId>
+          <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/paste/stateProcess.js</stateProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>pasteAsTopTopic</name>
+          <title>Paste as Top Topic</title>
+          <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/pasteastoptopic/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:PASTE</iconId>
+        </entityActionField>
+        <entityActionField>
+          <name>cut</name>
+          <title>Cut</title>
+          <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/cut/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:SCISSORS</iconId>
+          <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/more/children/cut/stateProcess.js</stateProcess>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
+    <entityField>
+      <name>sortingHelper</name>
+      <state>INVISIBLE</state>
+    </entityField>
+    <entityActionGroup>
+      <name>CreateExpand</name>
+      <iconId>NEON:PLUS</iconId>
+      <children>
+        <entityActionField>
+          <name>createChildTopic</name>
+          <title>Create Child Topic</title>
+          <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/createexpand/children/createchildtopic/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:FILE_TREE_SMALL</iconId>
+          <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/createexpand/children/createchildtopic/stateProcess.js</stateProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>expand</name>
+          <title>Expand</title>
+          <onActionProcess>%aditoprj%/entity/TopicTree_entity/entityfields/createexpand/children/expand/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:EXPAND</iconId>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
+    <entityConsumer>
+      <name>Topics</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>#ENTITY</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>OnlyFiveLayers_param</name>
+          <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/topics/children/onlyfivelayers_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>Expanded_param</name>
+          <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/topics/children/expanded_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityParameter>
+      <name>AssignedToId_param</name>
+      <expose v="true" />
+      <documentation>%aditoprj%/entity/TopicTree_entity/entityfields/assignedtoid_param/documentation.adoc</documentation>
+    </entityParameter>
+    <entityParameter>
+      <name>OnlyActive_param</name>
+      <expose v="true" />
+      <mandatory v="true" />
+      <documentation>%aditoprj%/entity/TopicTree_entity/entityfields/onlyactive_param/documentation.adoc</documentation>
+    </entityParameter>
+    <entityParameter>
+      <name>OnlyFiveLayers_param</name>
+      <expose v="true" />
+      <documentation>%aditoprj%/entity/TopicTree_entity/entityfields/onlyfivelayers_param/documentation.adoc</documentation>
+    </entityParameter>
+    <entityField>
+      <name>warningText</name>
+      <stateProcess>%aditoprj%/entity/TopicTree_entity/entityfields/warningtext/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/warningtext/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>expanded</name>
+      <valueProcess>%aditoprj%/entity/TopicTree_entity/entityfields/expanded/valueProcess.js</valueProcess>
+    </entityField>
+    <entityParameter>
+      <name>Expanded_param</name>
+      <expose v="true" />
+    </entityParameter>
+  </entityFields>
+  <recordContainers>
+    <jDitoRecordContainer>
+      <name>jdito</name>
+      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
+      <contentProcess>%aditoprj%/entity/TopicTree_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
+      <rowCountProcess>%aditoprj%/entity/TopicTree_entity/recordcontainers/jdito/rowCountProcess.js</rowCountProcess>
+      <onInsert>%aditoprj%/entity/TopicTree_entity/recordcontainers/jdito/onInsert.js</onInsert>
+      <onUpdate>%aditoprj%/entity/TopicTree_entity/recordcontainers/jdito/onUpdate.js</onUpdate>
+      <onDelete>%aditoprj%/entity/TopicTree_entity/recordcontainers/jdito/onDelete.js</onDelete>
+      <recordFieldMappings>
+        <jDitoRecordFieldMapping>
+          <name>TOPICTREEID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ASSIGNEDTO.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ACTIVE.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>TOPIC.value</name>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>DESCRIPTION.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>SORTING_LAYER_1.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>SORTING_LAYER_2.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>SORTING_LAYER_3.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>SORTING_LAYER_4.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>SORTING_LAYER_5.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>SORTING_LAYER_6.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>DATE_EDIT.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>DATE_NEW.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>USER_EDIT.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>USER_NEW.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>sortingHelper.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>UID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>icon.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>expanded.value</name>
+        </jDitoRecordFieldMapping>
+      </recordFieldMappings>
+    </jDitoRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/TopicTree_entity/contentTitleProcess.js b/entity/TopicTree_entity/contentTitleProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ec5d92b341436d441a986ab2d969a5170a5b01dd
--- /dev/null
+++ b/entity/TopicTree_entity/contentTitleProcess.js
@@ -0,0 +1,8 @@
+import("TopicTree_lib");
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+var title = TopicTreeUtils.getTopicTreeDisplayValue(vars.get("$field.TOPICTREEID"));
+
+result.string(title);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/documentation.adoc b/entity/TopicTree_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..8003ec604e2c2c5cb169975a67ce6a2dcc3f1545
--- /dev/null
+++ b/entity/TopicTree_entity/documentation.adoc
@@ -0,0 +1,37 @@
+= TopicTree_entity
+
+Definition:
+
+    The administrative representation of the topicTree which is used in activity using TopicTreeRelation_entity
+    The topics can be dynamically configured at runtime.
+
+Purpose:
+
+    This Entity gives the administrators an easy way to change the topicTree.
+    Topics get stored in the TopicTree table with their own uid, the assignedTo Id of the Superordinate Topic, a tinyInt field for the active boolean, 
+    topic title, topic description, sorting_layer_1-6 and the standard date/user new/edit columns.
+
+    This entity displays the Topic Tree and you can easily change the topic title, description and status using the editview.
+    Aswell as change the order of subTopics using the actions (first, last, move down, move up) and even copy, cut and paste topics and their subtopics.
+    When creating a topic you have the option to assign it to another topic -> there also exists a action that presets the selected topic.
+
+Particularities:
+    
+    The sorting is done using six sorting columns: SORTING_VALUE_1, SORTING_VALUE_2, SORTING_VALUE_3, SORTING_VALUE_4, SORTING_VALUE_5, SORTING_VALUE_6
+    The the last one that's filled has to be relevant one.
+
+    Little example to make the whole thing more understandable:
+    TopicA:              SORTING_LAYER_1: 1;                                            ASSIGNEDTO: null
+        TopicAA:                            SORTING_LAYER_2: 1;                         ASSIGNEDTO: topicTreeIdOfTopicA
+        TopicAB:                            SORTING_LAYER_2: 2;                         ASSIGNEDTO: topicTreeIdOfTopicA
+        TopicAC:                            SORTING_LAYER_2: 3;                         ASSIGNEDTO: topicTreeIdOfTopicA
+                TopicACA:                                       SORTING_LAYER_3: 1;     ASSIGNEDTO: topicTreeIdOfTopicAC
+        TopicAD:                            SORTING_LAYER_2: 4;                         ASSIGNEDTO: topicTreeIdOfTopicA
+    TopicB:              SORTING_LAYER_1: 2;                                            ASSIGNEDTO: null
+    TopicC:              SORTING_LAYER_1: 3;                                            ASSIGNEDTO: null
+        TopicCA:                            SORTING_LAYER_2: 1;                         ASSIGNEDTO: topicTreeIdOfTopicC
+    
+    We easily know what layer we are on thank's to these layer columns (if SORTING_LAYER_6 is filled we are in the 6th layer for example)
+    the actions make sure to fill those accordingly and the stateprocceses also act acordingly (to make it impossible to create a seventh layer using the Create Child Topic action or pasting).
+    The AssignedTo lookup doesn't show the complete tree, but instead only shows 5 layers for the same reason (use OnlyFiveLayers_param if you want the same behaviour in your lookup)
+    There also exists another parameter called OnlyActive_param. If set to true you only get to see the active ones. -> make sure that every subtopic has the same status as the above one and vice versa.
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/active/valueProcess.js b/entity/TopicTree_entity/entityfields/active/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c7507ac063f466664ca9a21208126033d122b504
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/active/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(!vars.get("$this.value") && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+{
+    result.string(1);
+}
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/assignedto/displayValueProcess.js b/entity/TopicTree_entity/entityfields/assignedto/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2191a242f75054acea766be123262b326baf334c
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/assignedto/displayValueProcess.js
@@ -0,0 +1,11 @@
+import("TopicTree_lib");
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) && vars.get("$this.value"))
+{
+    var title = TopicTreeUtils.getTopicTreeDisplayValue(vars.get("$this.value"));
+
+    result.string(title);
+}
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/assignedto/stateProcess.js b/entity/TopicTree_entity/entityfields/assignedto/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..64f512b6e7d440ccb3655f07bbe643561f35a858
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/assignedto/stateProcess.js
@@ -0,0 +1,11 @@
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+var state = neon.COMPONENTSTATE_READONLY;
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+{
+    state = neon.COMPONENTSTATE_EDITABLE;
+}
+
+result.string(state);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/assignedto/valueProcess.js b/entity/TopicTree_entity/entityfields/assignedto/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c43ab54e74a7a3579924892c03220adaf600fa2f
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/assignedto/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if(!vars.get("$this.value") && vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.AssignedToId_param") && vars.get("$param.AssignedToId_param"))
+{
+    result.string(vars.get("$param.AssignedToId_param"));
+}
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/assignedtoid_param/documentation.adoc b/entity/TopicTree_entity/entityfields/assignedtoid_param/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..8650b619e2c466fc9cec35ec5f116332cb6bb753
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/assignedtoid_param/documentation.adoc
@@ -0,0 +1,3 @@
+= AssignedTo_param
+
+Get's used by Create Child Topic to preset ASSIGNEDTO.
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/createexpand/children/createchildtopic/onActionProcess.js b/entity/TopicTree_entity/entityfields/createexpand/children/createchildtopic/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..5eae62bae3e11f29a89e179b0731d78146fb1cec
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/createexpand/children/createchildtopic/onActionProcess.js
@@ -0,0 +1,12 @@
+import("system.vars");
+import("system.neon");
+import("Attribute_lib");
+
+var params = {};
+if (vars.exists("$local.rows"))
+{
+    var row = vars.get("$local.rows");
+    var topicTreeId = row[0].UID;
+    params["AssignedToId_param"] = topicTreeId;
+}
+neon.openContext("TopicTree", null, null, neon.OPERATINGSTATE_NEW, params);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/createexpand/children/createchildtopic/stateProcess.js b/entity/TopicTree_entity/entityfields/createexpand/children/createchildtopic/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..0e259b3b846e565b0793a70b3fb37cd1a53515d4
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/createexpand/children/createchildtopic/stateProcess.js
@@ -0,0 +1,22 @@
+import("system.result");
+import("system.eMath");
+import("system.neon");
+import("system.vars");
+
+var operatingState = vars.get("$sys.operatingstate");
+var state = neon.COMPONENTSTATE_DISABLED;
+
+if(operatingState != neon.OPERATINGSTATE_NEW && operatingState != neon.OPERATINGSTATE_EDIT)
+{
+    var selection = vars.get("$sys.selectionRows")[0];
+    if(selection && selection.sortingHelper != "")
+    {
+        var sortingObj = JSON.parse(selection.sortingHelper);
+        var layer = sortingObj.sortingLayer;
+        if(layer != "SORTING_LAYER_6")
+        {
+            state = neon.COMPONENTSTATE_EDITABLE;
+        }
+    }
+}
+result.string(state);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/createexpand/children/expand/onActionProcess.js b/entity/TopicTree_entity/entityfields/createexpand/children/expand/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..84238ef231b7eed25ccebd91f83296ef9e62abba
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/createexpand/children/expand/onActionProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.neon");
+
+vars.set("$context.expanded", true);
+neon.refreshAll();
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/date_edit/valueProcess.js b/entity/TopicTree_entity/entityfields/date_edit/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2af46a8e46789056c6c341a8e4e087f8e1edc0c4
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/date_edit/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+{
+    result.string(vars.get("$sys.date"));
+}
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/date_new/valueProcess.js b/entity/TopicTree_entity/entityfields/date_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9e4534537d88c19f96216d442c0b0ae984f65109
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/date_new/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+{
+    result.string(vars.get("$sys.date"));
+}
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/expanded/valueProcess.js b/entity/TopicTree_entity/entityfields/expanded/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/expanded/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(true);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/icon/colorProcess.js b/entity/TopicTree_entity/entityfields/icon/colorProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f846dd62a1725053c2a277b67787026adb18bdf3
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/icon/colorProcess.js
@@ -0,0 +1,10 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+var color = neon.PRIORITY_LOW_COLOR;
+if (vars.getString("$field.ACTIVE") != "1")
+{
+    color = neon.PRIORITY_HIGH_COLOR;
+}
+result.string(color);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/more/children/copy/onActionProcess.js b/entity/TopicTree_entity/entityfields/more/children/copy/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..57a556f9aa25ce88f956118455d9abf8d44be7c6
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/more/children/copy/onActionProcess.js
@@ -0,0 +1,8 @@
+import("TopicTree_lib");
+import("system.vars");
+
+var topicDatSet = vars.get("$sys.selectionRows")[0];
+
+vars.set("$context.Cut", null);
+vars.set("$context.Copied", JSON.stringify({dataset: topicDatSet
+                                            , amountOfLayers: TopicTreeUtils.getAmountOfLayers(topicDatSet)}));
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/more/children/copy/stateProcess.js b/entity/TopicTree_entity/entityfields/more/children/copy/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3f81b4f375b84c14050bdfc7577055d5b20216e8
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/more/children/copy/stateProcess.js
@@ -0,0 +1,12 @@
+import("system.db");
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+var selection = vars.get("$sys.selectionRows")[0];
+var state = neon.COMPONENTSTATE_DISABLED;
+if(selection)
+{
+    state = neon.COMPONENTSTATE_EDITABLE;
+}
+result.string(state);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/more/children/cut/onActionProcess.js b/entity/TopicTree_entity/entityfields/more/children/cut/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ea2dc5ba77ff322b0a436169ef710d980e15e930
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/more/children/cut/onActionProcess.js
@@ -0,0 +1,8 @@
+import("TopicTree_lib");
+import("system.vars");
+
+var topicDatSet = vars.get("$sys.selectionRows")[0];
+
+vars.set("$context.Copied", JSON.stringify({dataset: topicDatSet
+                                            , amountOfLayers: TopicTreeUtils.getAmountOfLayers(topicDatSet)}));
+vars.set("$context.Cut", true);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/more/children/cut/stateProcess.js b/entity/TopicTree_entity/entityfields/more/children/cut/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..da1b7324b98030e890d11a91b7cfc7a470ae77de
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/more/children/cut/stateProcess.js
@@ -0,0 +1,28 @@
+import("system.neon");
+import("system.result");
+import("Sql_lib");
+import("TopicTree_lib");
+import("system.vars");
+
+var selection = vars.get("$sys.selectionRows");
+var state = neon.COMPONENTSTATE_DISABLED;
+if(selection && selection.length > 0)
+{
+    var topicDatSet = selection[0];
+    var topicIds = TopicTreeUtils.getSubTopicIds(topicDatSet);
+
+    var count = 0;
+    if(topicIds.length > 0)
+    {
+        count = newSelect("count(*)")
+                .from("TOPICTREERELATION")
+                .whereIfSet("TOPICTREERELATION.TOPICTREE_ID", topicIds, SqlBuilder.IN())
+                .cell();
+    }
+    if(count >= 0)
+    {
+        state = neon.COMPONENTSTATE_EDITABLE;
+    }
+}
+
+result.string(state);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/more/children/first/onActionProcess.js b/entity/TopicTree_entity/entityfields/more/children/first/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..328ca8c9be6d35e44604c2cecfc8c137d4f331a0
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/more/children/first/onActionProcess.js
@@ -0,0 +1,12 @@
+import("system.neon");
+import("TopicTree_lib");
+import("system.vars");
+
+var selection = vars.get("$sys.selectionRows")[0];
+var topicTreeid = selection["#UID"];
+var sortingHelper = JSON.parse(selection.sortingHelper);
+var currentLayer = TopicTreeUtils.getLayer(selection.SORTING_LAYER_1, selection.SORTING_LAYER_2, selection.SORTING_LAYER_3, selection.SORTING_LAYER_4, selection.SORTING_LAYER_5, selection.SORTING_LAYER_6);
+var assignedTo = selection.ASSIGNEDTO == "" ? $TopicTreeConstants.TOPTOPIC() : selection.ASSIGNEDTO;
+
+TopicTreeUtils.movePosition(topicTreeid, $TopicTreeMoveDirections.TOP(), sortingHelper.maxSortingValue, assignedTo, sortingHelper.ownSortingValue, currentLayer);
+neon.refreshAll();
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/more/children/first/stateProcess.js b/entity/TopicTree_entity/entityfields/more/children/first/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1a90e3c289a1d561f6959c35adef58380815ab50
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/more/children/first/stateProcess.js
@@ -0,0 +1,21 @@
+import("system.result");
+import("system.eMath");
+import("system.neon");
+import("system.vars");
+
+var operatingState = vars.get("$sys.operatingstate");
+var state = neon.COMPONENTSTATE_DISABLED;
+if(operatingState != neon.OPERATINGSTATE_NEW && operatingState != neon.OPERATINGSTATE_EDIT)
+{
+    var selection = vars.get("$sys.selectionRows")[0];
+    if(selection && selection.sortingHelper != "")
+    {
+        var sortingObj = JSON.parse(selection.sortingHelper);
+        var ownSortingValue = sortingObj.ownSortingValue;
+        if(ownSortingValue != 1)
+        {
+            state = neon.COMPONENTSTATE_EDITABLE;
+        }
+    }
+}
+result.string(state);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/more/children/last/onActionProcess.js b/entity/TopicTree_entity/entityfields/more/children/last/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..bb26a0d1dc66b815e53da2d5b26d61755918f8c7
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/more/children/last/onActionProcess.js
@@ -0,0 +1,12 @@
+import("system.neon");
+import("TopicTree_lib");
+import("system.vars");
+
+var selection = vars.get("$sys.selectionRows")[0];
+var topicTreeid = selection["#UID"];
+var sortingHelper = JSON.parse(selection.sortingHelper);
+var currentLayer = TopicTreeUtils.getLayer(selection.SORTING_LAYER_1, selection.SORTING_LAYER_2, selection.SORTING_LAYER_3, selection.SORTING_LAYER_4, selection.SORTING_LAYER_5, selection.SORTING_LAYER_6);
+var assignedTo = selection.ASSIGNEDTO == "" ? $TopicTreeConstants.TOPTOPIC() : selection.ASSIGNEDTO;
+
+TopicTreeUtils.movePosition(topicTreeid, $TopicTreeMoveDirections.BOTTOM(), sortingHelper.maxSortingValue, assignedTo, sortingHelper.ownSortingValue, currentLayer);
+neon.refreshAll();
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/more/children/last/stateProcess.js b/entity/TopicTree_entity/entityfields/more/children/last/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b0e5ad3ee6202c8d7ff8d87f57046373570a60c6
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/more/children/last/stateProcess.js
@@ -0,0 +1,23 @@
+import("system.result");
+import("system.eMath");
+import("system.neon");
+import("system.vars");
+
+var operatingState = vars.get("$sys.operatingstate");
+var state = neon.COMPONENTSTATE_DISABLED;
+
+if(operatingState != neon.OPERATINGSTATE_NEW && operatingState != neon.OPERATINGSTATE_EDIT)
+{
+    var selection = vars.get("$sys.selectionRows")[0];
+    if(selection && selection.sortingHelper != "")
+    {
+        var sortingObj = JSON.parse(selection.sortingHelper);
+        var maxSorting = sortingObj.maxSortingValue;
+        var ownSortingValue = sortingObj.ownSortingValue;
+        if(eMath.addInt(ownSortingValue, 1) <= maxSorting)
+        {
+            state = neon.COMPONENTSTATE_EDITABLE;
+        }
+    }
+}
+result.string(state);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/more/children/movedown/onActionProcess.js b/entity/TopicTree_entity/entityfields/more/children/movedown/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..cf3eac3f952dd7fd3aeeb3f9602680e61789caad
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/more/children/movedown/onActionProcess.js
@@ -0,0 +1,12 @@
+import("system.neon");
+import("TopicTree_lib");
+import("system.vars");
+
+var selection = vars.get("$sys.selectionRows")[0];
+var topicTreeid = selection["#UID"];
+var sortingHelper = JSON.parse(selection.sortingHelper);
+var currentLayer = TopicTreeUtils.getLayer(selection.SORTING_LAYER_1, selection.SORTING_LAYER_2, selection.SORTING_LAYER_3, selection.SORTING_LAYER_4, selection.SORTING_LAYER_5, selection.SORTING_LAYER_6);
+var assignedTo = selection.ASSIGNEDTO == "" ? $TopicTreeConstants.TOPTOPIC() : selection.ASSIGNEDTO;
+
+TopicTreeUtils.movePosition(topicTreeid, $TopicTreeMoveDirections.DOWN(), sortingHelper.maxSortingValue, assignedTo, sortingHelper.ownSortingValue, currentLayer);
+neon.refreshAll();
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/more/children/movedown/stateProcess.js b/entity/TopicTree_entity/entityfields/more/children/movedown/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b0e5ad3ee6202c8d7ff8d87f57046373570a60c6
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/more/children/movedown/stateProcess.js
@@ -0,0 +1,23 @@
+import("system.result");
+import("system.eMath");
+import("system.neon");
+import("system.vars");
+
+var operatingState = vars.get("$sys.operatingstate");
+var state = neon.COMPONENTSTATE_DISABLED;
+
+if(operatingState != neon.OPERATINGSTATE_NEW && operatingState != neon.OPERATINGSTATE_EDIT)
+{
+    var selection = vars.get("$sys.selectionRows")[0];
+    if(selection && selection.sortingHelper != "")
+    {
+        var sortingObj = JSON.parse(selection.sortingHelper);
+        var maxSorting = sortingObj.maxSortingValue;
+        var ownSortingValue = sortingObj.ownSortingValue;
+        if(eMath.addInt(ownSortingValue, 1) <= maxSorting)
+        {
+            state = neon.COMPONENTSTATE_EDITABLE;
+        }
+    }
+}
+result.string(state);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/more/children/moveup/onActionProcess.js b/entity/TopicTree_entity/entityfields/more/children/moveup/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..681a3bf3fc485a4acc07910702c796b4243736e7
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/more/children/moveup/onActionProcess.js
@@ -0,0 +1,12 @@
+import("system.neon");
+import("TopicTree_lib");
+import("system.vars");
+
+var selection = vars.get("$sys.selectionRows")[0];
+var topicTreeid = selection["#UID"];
+var sortingHelper = JSON.parse(selection.sortingHelper);
+var currentLayer = TopicTreeUtils.getLayer(selection.SORTING_LAYER_1, selection.SORTING_LAYER_2, selection.SORTING_LAYER_3, selection.SORTING_LAYER_4, selection.SORTING_LAYER_5, selection.SORTING_LAYER_6);
+var assignedTo = selection.ASSIGNEDTO == "" ? $TopicTreeConstants.TOPTOPIC() : selection.ASSIGNEDTO;
+
+TopicTreeUtils.movePosition(topicTreeid, $TopicTreeMoveDirections.UP(), sortingHelper.maxSortingValue, assignedTo, sortingHelper.ownSortingValue, currentLayer);
+neon.refreshAll();
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/more/children/moveup/stateProcess.js b/entity/TopicTree_entity/entityfields/more/children/moveup/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c9a5b7f7c30ab18ec91fcb66f666b578229cbeba
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/more/children/moveup/stateProcess.js
@@ -0,0 +1,22 @@
+import("system.result");
+import("system.eMath");
+import("system.neon");
+import("system.vars");
+
+var operatingState = vars.get("$sys.operatingstate");
+var state = neon.COMPONENTSTATE_DISABLED;
+
+if(operatingState != neon.OPERATINGSTATE_NEW && operatingState != neon.OPERATINGSTATE_EDIT)
+{
+    var selection = vars.get("$sys.selectionRows")[0];
+    if(selection && selection.sortingHelper != "")
+    {
+        var sortingObj = JSON.parse(selection.sortingHelper);
+        var ownSortingValue = sortingObj.ownSortingValue;
+        if(ownSortingValue != 1)
+        {
+            state = neon.COMPONENTSTATE_EDITABLE;
+        }
+    }
+}
+result.string(state);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/more/children/paste/onActionProcess.js b/entity/TopicTree_entity/entityfields/more/children/paste/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..6c046ec2a7806ebc5f10722fe5f8f740907660db
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/more/children/paste/onActionProcess.js
@@ -0,0 +1,3 @@
+import("TopicTree_lib");
+
+TopicTreeUtils.paste();
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/more/children/paste/stateProcess.js b/entity/TopicTree_entity/entityfields/more/children/paste/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d9a90bf3d4f2e10faa0444dd98e311c5340d95d2
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/more/children/paste/stateProcess.js
@@ -0,0 +1,34 @@
+import("system.eMath");
+import("TopicTree_lib");
+import("system.db");
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+var selection = vars.get("$sys.selectionRows")[0];
+var state = neon.COMPONENTSTATE_DISABLED;
+if(selection && vars.exists("$context.Copied"))
+{
+    var layer = TopicTreeUtils.returnNumberOfLayerName(JSON.parse(selection["sortingHelper"])["sortingLayer"]);
+    var amountOfLayers = JSON.parse(vars.get("$context.Copied"))["amountOfLayers"];
+    
+    if(eMath.addInt(amountOfLayers, layer) <= TopicTreeUtils.getArrayLayers().length)//this tree doesn't work endlessly, so we can*t allow the user to create more layers than we allow
+    {
+        if(vars.get("$context.Cut"))
+        {
+            var copiedTopicTreeId = JSON.parse(vars.get("$context.Copied"))["dataset"];
+            var topicTreeIds = TopicTreeUtils.getSubTopicIds(copiedTopicTreeId);
+            topicTreeIds.push(copiedTopicTreeId);
+            var pasteTopicTreeId = selection["#UID"];
+            if(!topicTreeIds.includes(pasteTopicTreeId))
+            {
+                state = neon.COMPONENTSTATE_EDITABLE;
+            }
+        }
+        else
+        {
+            state = neon.COMPONENTSTATE_EDITABLE;
+        }
+    }
+}
+result.string(state);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/more/children/pasteastoptopic/onActionProcess.js b/entity/TopicTree_entity/entityfields/more/children/pasteastoptopic/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4f45e76e1c4c007528b531e52a69657e67f89741
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/more/children/pasteastoptopic/onActionProcess.js
@@ -0,0 +1,3 @@
+import("TopicTree_lib");
+
+TopicTreeUtils.paste(true);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/onlyactive_param/documentation.adoc b/entity/TopicTree_entity/entityfields/onlyactive_param/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..dd43f33ccf557da11f8cee4609f7cbff1ac8a186
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/onlyactive_param/documentation.adoc
@@ -0,0 +1,5 @@
+= OnlyActive_param
+
+If set to true you only get to see the active ones.
+ -> make sure that every subtopic has the same status as the above one and vice versa.
+Get's used by Topic Tree Relation.
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/onlyfivelayers_param/documentation.adoc b/entity/TopicTree_entity/entityfields/onlyfivelayers_param/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..a7e01ad8577be404de8adcb538d71eaeac7c6236
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/onlyfivelayers_param/documentation.adoc
@@ -0,0 +1,4 @@
+= OnlyFiveLayers_param
+
+Used to limit how many layers of the tree you get to see. (if set to true you only see the first 5 layers)
+In the assignedTo lookup we don't want to return the whole tree but instead only show 5 layers (to make it impossible to create a seventh layer using the assignee).
diff --git a/entity/TopicTree_entity/entityfields/topics/children/expanded_param/valueProcess.js b/entity/TopicTree_entity/entityfields/topics/children/expanded_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/topics/children/expanded_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(true);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/topics/children/onlyfivelayers_param/valueProcess.js b/entity/TopicTree_entity/entityfields/topics/children/onlyfivelayers_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/topics/children/onlyfivelayers_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string(true);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/topictreeid/valueProcess.js b/entity/TopicTree_entity/entityfields/topictreeid/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a03a8c03e7b03b61e50c133937eb615361528654
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/topictreeid/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(!vars.get("$this.value") && vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW)
+{
+    result.string(vars.get("$field.UID"));
+}
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/user_edit/valueProcess.js b/entity/TopicTree_entity/entityfields/user_edit/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b874a7ac426b8e99383ac949299b9753e4951f2b
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/user_edit/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+{
+    result.string(vars.get("$sys.user"));
+}
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/user_new/valueProcess.js b/entity/TopicTree_entity/entityfields/user_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ee15284e5df386270e83f1b57b189f3fecced930
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/user_new/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+{
+    result.string(vars.get("$sys.user"));
+}
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/warningtext/stateProcess.js b/entity/TopicTree_entity/entityfields/warningtext/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7e15b5cc97399f0a5d92edb88b7e9dd49c322058
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/warningtext/stateProcess.js
@@ -0,0 +1,11 @@
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+var state = neon.COMPONENTSTATE_INVISIBLE;
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+{
+    state = neon.COMPONENTSTATE_EDITABLE;
+}
+
+result.string(state);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/entityfields/warningtext/valueProcess.js b/entity/TopicTree_entity/entityfields/warningtext/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..74dde97a196efa6f8cf63ebac5f1115e432e0baa
--- /dev/null
+++ b/entity/TopicTree_entity/entityfields/warningtext/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("Änderung wirken sich auf die bestehenden Themeneinträge der Aktivität aus, in der dieses Thema bereits verwendet wird.");
\ No newline at end of file
diff --git a/entity/TopicTree_entity/grantDeleteProcess.js b/entity/TopicTree_entity/grantDeleteProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e973103da62353b188dcd148ee3cf17dfd6c5dc4
--- /dev/null
+++ b/entity/TopicTree_entity/grantDeleteProcess.js
@@ -0,0 +1,27 @@
+import("system.result");
+import("Sql_lib");
+import("TopicTree_lib");
+import("system.vars");
+
+var selection = vars.get("$sys.selectionRows");
+var canDelete = true;
+if(selection && selection.length > 0)
+{
+    var topicDatSet = selection[0];
+    var topicIds = TopicTreeUtils.getSubTopicIds(topicDatSet);
+
+    var count = 0;
+    if(topicIds.length > 0)
+    {
+        count = newSelect("count(*)")
+                .from("TOPICTREERELATION")
+                .whereIfSet("TOPICTREERELATION.TOPICTREE_ID", topicIds, SqlBuilder.IN())
+                .cell();
+    }
+    if(count > 0)
+    {
+        canDelete = false;
+    }
+}
+
+result.string(canDelete);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/recordcontainers/jdito/contentProcess.js b/entity/TopicTree_entity/recordcontainers/jdito/contentProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..483cfca649f038887f18d827b464b7ac14af51e8
--- /dev/null
+++ b/entity/TopicTree_entity/recordcontainers/jdito/contentProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("TopicTree_lib");
+
+result.object(JSON.parse(TopicTreeUtils.returnTopicTree(false)));
\ No newline at end of file
diff --git a/entity/TopicTree_entity/recordcontainers/jdito/onDelete.js b/entity/TopicTree_entity/recordcontainers/jdito/onDelete.js
new file mode 100644
index 0000000000000000000000000000000000000000..25d7cc786a4dea1e0f74a10a46b8ae5249c3cffd
--- /dev/null
+++ b/entity/TopicTree_entity/recordcontainers/jdito/onDelete.js
@@ -0,0 +1,60 @@
+import("TopicTree_lib");
+import("system.db");
+import("system.neon");
+import("Sql_lib");
+import("system.vars");
+
+function _updateSortingValuesOfOtherTopics(pLayer, pOwnSortingValue, pAssignedTo)
+{
+    var assignedToCond = newWhere("TOPICTREE.ASSIGNEDTO", pAssignedTo);
+    
+    if(pAssignedTo == $TopicTreeConstants.TOPTOPIC())
+    {
+        assignedToCond = newWhere("TOPICTREE.ASSIGNEDTO is null");
+    }
+    
+    var topicsThatNeedMoving = newSelect("TOPICTREE.TOPICTREEID, TOPICTREE." + pLayer + "")
+                                        .from("TOPICTREE")
+                                        .where(assignedToCond)
+                                        .and("TOPICTREE." + pLayer + "", pOwnSortingValue, SqlBuilder.GREATER())
+                                        .table();
+    
+    var updateStatements = [];
+    for (i = 0; i < topicsThatNeedMoving.length; i++)
+    {
+        updateStatements.push(["TOPICTREE", [pLayer], null, [topicsThatNeedMoving[i][1]], newWhere("TOPICTREE.TOPICTREEID", topicsThatNeedMoving[i][0]).build()]);
+    }
+    db.execute(updateStatements);
+}
+
+var topicTreeId = vars.get("$local.uid");
+var topicTreeIdsToDelete = [topicTreeId];
+var topicTreeIds = [topicTreeId];
+var rowData = vars.get("$local.rowdata");
+var stop = false;
+
+while(stop == false)
+{
+    topicTreeIds = newSelect("TOPICTREEID")
+                            .from("TOPICTREE")
+                            .where("TOPICTREE.ASSIGNEDTO", topicTreeIds, SqlBuilder.IN())
+                            .arrayColumn();
+
+    if(topicTreeIds && topicTreeIds.length > 0)
+    {
+        for (let i = 0; i < topicTreeIds.length; i++)
+        {
+            topicTreeIdsToDelete.push(topicTreeIds[i]);
+        }
+    }
+    else
+    {
+        stop = true;
+    }
+}
+var sortingHelper = JSON.parse(rowData["sortingHelper.value"]);
+_updateSortingValuesOfOtherTopics(sortingHelper["sortingLayer"], sortingHelper["ownSortingValue"], rowData["ASSIGNEDTO.value"]);
+
+newWhereIfSet("TOPICTREE.TOPICTREEID", topicTreeIdsToDelete, SqlBuilder.IN())
+            .deleteData(true, "TOPICTREE");
+            
\ No newline at end of file
diff --git a/entity/TopicTree_entity/recordcontainers/jdito/onInsert.js b/entity/TopicTree_entity/recordcontainers/jdito/onInsert.js
new file mode 100644
index 0000000000000000000000000000000000000000..d55de4fc96fb5f1e8c87f93ea50c3ca09651c24d
--- /dev/null
+++ b/entity/TopicTree_entity/recordcontainers/jdito/onInsert.js
@@ -0,0 +1,122 @@
+import("system.logging");
+import("system.eMath");
+import("TopicTree_lib");
+import("system.vars");
+import("Sql_lib");
+
+var rowdata = vars.get("$local.rowdata");
+var columns = ["TOPICTREEID"
+            , "TOPIC"
+            , "ACTIVE"
+            , "USER_NEW"
+            , "DATE_NEW"];
+        
+var values = [rowdata["UID.value"]
+            , rowdata["TOPIC.value"]
+            , rowdata["ACTIVE.value"]
+            , rowdata["USER_NEW.value"]
+            , rowdata["DATE_NEW.value"]];
+
+if(rowdata["DESCRIPTION.value"])
+{
+    columns.push("DESCRIPTION");
+    values.push(rowdata["DESCRIPTION.value"]);
+}
+
+var assignedTo = rowdata["ASSIGNEDTO.value"];
+
+if(assignedTo && assignedTo != "")
+{
+    columns.push("ASSIGNEDTO");
+    values.push(assignedTo);
+    
+    var sortingSelect = newSelect("case when SORTING_LAYER_6 is not null then 'SORTING_LAYER_6' \n\
+                            else case when SORTING_LAYER_5 is not null then 'SORTING_LAYER_5' \n\
+                            else case when SORTING_LAYER_4 is not null then 'SORTING_LAYER_4' \n\
+                            else case when SORTING_LAYER_3 is not null then 'SORTING_LAYER_3' \n\
+                            else case when SORTING_LAYER_2 is not null then 'SORTING_LAYER_2' \n\
+                            else 'SORTING_LAYER_1' \n\
+                            end end end end end as layerNumber\n\
+                            , SORTING_LAYER_1, SORTING_LAYER_2, SORTING_LAYER_3, SORTING_LAYER_4, SORTING_LAYER_5, SORTING_LAYER_6, TOPICTREE.TOPICTREEID")
+                                .from("TOPICTREE")
+                            .where("TOPICTREE.ASSIGNEDTO", assignedTo)
+                            .or("TOPICTREE.TOPICTREEID", assignedTo)
+                            .orderBy("layerNumber desc, SORTING_LAYER_1 desc, SORTING_LAYER_2 desc , SORTING_LAYER_3 desc, SORTING_LAYER_4 desc, SORTING_LAYER_5 desc, SORTING_LAYER_6 desc")
+                            .arrayRow();
+
+    var layerSorting;
+    var deepestLayer;
+    if(sortingSelect[7] == assignedTo)
+    {
+        deepestLayer = TopicTreeUtils.getDeeperLayerFromLayerName(sortingSelect[0]);
+        columns.push(deepestLayer);
+        values.push(1);//first item of this layer: sorting value should be '1'
+    }
+    else
+    {
+        deepestLayer = sortingSelect[0];
+        columns.push(deepestLayer);
+        values.push(eMath.addInt(sortingSelect[TopicTreeUtils.returnNumberOfLayerName(deepestLayer)], 1));//not the first item of this layer: sorting value should be the greatest one + 1
+    }
+    
+    var previousLayer = deepestLayer;
+    var stop = false;
+    while(stop == false)//fill in previous layersorting values, otherwise the move Actions won't work properly
+    {
+        previousLayer = TopicTreeUtils.getPreviousLayerName(previousLayer);
+        if(previousLayer != "SORTING_LAYER_0")
+        {
+            columns.push(previousLayer);
+            values.push(-1);
+        }
+        else
+        {
+            stop = true;
+        }
+    }
+}
+else
+{
+    columns.push("SORTING_LAYER_1");
+    var sortingLayer1 = newSelect("max(SORTING_LAYER_1)+1")
+                                    .from("TOPICTREE")
+                                    .where("TOPICTREE.SORTING_LAYER_1 is not null")
+                                    .and("TOPICTREE.SORTING_LAYER_2 is null")
+                                    .and("TOPICTREE.SORTING_LAYER_3 is null")
+                                    .and("TOPICTREE.SORTING_LAYER_4 is null")
+                                    .and("TOPICTREE.SORTING_LAYER_5 is null")
+                                    .and("TOPICTREE.SORTING_LAYER_6 is null")
+                                    .cell();
+    
+    values.push(sortingLayer1);
+}
+
+if(assignedTo && assignedTo != "")
+{
+    stop = false;
+    var parentIdsToUpdate = [];
+    //update status of parentTopics if needed
+    while(stop == false)
+    {
+        var parentTopic = newSelect("TOPICTREE.ACTIVE, TOPICTREE.ASSIGNEDTO")
+                                    .from("TOPICTREE")
+                                    .where("TOPICTREE.TOPICTREEID", assignedTo)
+                                    .arrayRow();
+        parentIdsToUpdate.push(assignedTo);
+        if(parentTopic[0] != rowdata["ACTIVE.value"] && parentTopic[1] && parentTopic[1] != "")
+        {
+            assignedTo = parentTopic[1];
+        }
+        else
+        {
+            stop = true;
+        }
+    }
+    if(parentIdsToUpdate && parentIdsToUpdate.length > 0)
+    {
+        newWhereIfSet("TOPICTREE.TOPICTREEID", parentIdsToUpdate, SqlBuilder.IN())
+                    .updateData(true, "TOPICTREE", ["ACTIVE"], null, [rowdata["ACTIVE.value"]]);
+    }
+}
+
+new SqlBuilder().insertData("TOPICTREE", columns, null, values);
\ No newline at end of file
diff --git a/entity/TopicTree_entity/recordcontainers/jdito/onUpdate.js b/entity/TopicTree_entity/recordcontainers/jdito/onUpdate.js
new file mode 100644
index 0000000000000000000000000000000000000000..a024420d4f06f08e6447d8b629b34965ab1f2b0d
--- /dev/null
+++ b/entity/TopicTree_entity/recordcontainers/jdito/onUpdate.js
@@ -0,0 +1,82 @@
+import("Util_lib");
+import("Sql_lib");
+import("system.vars");
+
+var rowData = vars.get("$local.rowdata");
+var topicTreeId = vars.get("$local.uid");
+var columns = ["DATE_EDIT"
+                , "USER_EDIT"
+                , "ACTIVE"
+                , "TOPIC"];
+            
+var values = [rowData["DATE_EDIT.value"]
+                , rowData["USER_EDIT.value"]
+                , rowData["ACTIVE.value"]
+                , rowData["TOPIC.value"]];
+
+var assignedTo = rowData["ASSIGNEDTO.value"];
+if(assignedTo && assignedTo != "")
+{
+    columns.push("ASSIGNEDTO");
+    values.push(assignedTo);
+}
+
+newWhereIfSet("TOPICTREE.TOPICTREEID", topicTreeId).updateData(true, "TOPICTREE", columns, null, values);
+let stop = false;
+
+var topicTreeIdsToUpdate = [];
+var topicTreeIds = [topicTreeId];
+//update child topics accordingly
+while(stop == false)
+{
+    topicTreeIds = newSelect("TOPICTREEID")
+                            .from("TOPICTREE")
+                            .where("TOPICTREE.ASSIGNEDTO", topicTreeIds, SqlBuilder.IN())
+                            .arrayColumn();
+
+    if(topicTreeIds && topicTreeIds.length > 0)
+    {
+        for (let i = 0; i < topicTreeIds.length; i++)
+        {
+            topicTreeIdsToUpdate.push(topicTreeIds[i]);
+        }
+
+    }
+    else
+    {
+        stop = true;
+    }
+}
+if(topicTreeIdsToUpdate && topicTreeIdsToUpdate.length > 0)
+{
+    newWhereIfSet("TOPICTREE.TOPICTREEID", topicTreeIdsToUpdate, SqlBuilder.IN())
+                .updateData(true, "TOPICTREE", ["ACTIVE"], null, [rowData["ACTIVE.value"]]);
+}
+
+if(assignedTo && assignedTo != "" && Utils.toBoolean(rowData["ACTIVE.value"]))
+{
+    let stop = false;
+    var parentIdsToUpdate = [];
+    //update status of parentTopics if needed
+    while(stop == false)
+    {
+        var parentTopic = newSelect("TOPICTREE.ACTIVE, TOPICTREE.ASSIGNEDTO")
+                                    .from("TOPICTREE")
+                                    .where("TOPICTREE.TOPICTREEID", assignedTo)
+                                    .arrayRow();
+        parentIdsToUpdate.push(assignedTo);
+        if(parentTopic[0] != rowData["ACTIVE.value"] && parentTopic[1] && parentTopic[1] != "")
+        {
+            assignedTo = parentTopic[1];
+        }
+        else
+        {
+            stop = true;
+        }
+    }
+    if(parentIdsToUpdate && parentIdsToUpdate.length > 0)
+    {
+        newWhereIfSet("TOPICTREE.TOPICTREEID", parentIdsToUpdate, SqlBuilder.IN())
+                    .updateData(true, "TOPICTREE", ["ACTIVE"], null, [rowData["ACTIVE.value"]]);
+    }
+}
\ No newline at end of file
diff --git a/entity/TopicTree_entity/recordcontainers/jdito/rowCountProcess.js b/entity/TopicTree_entity/recordcontainers/jdito/rowCountProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a1b4af86fbdadb02232f3912219999d78f53d457
--- /dev/null
+++ b/entity/TopicTree_entity/recordcontainers/jdito/rowCountProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("TopicTree_lib");
+
+result.object(TopicTreeUtils.returnTopicTree(true));
\ No newline at end of file
diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
index 3dd4f20d00985579c0008fef8a46a6c39394c5b8..961cafefc6b45b839a923d43efd857fc9b698b1a 100644
--- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
+++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
@@ -9697,6 +9697,69 @@
     <entry>
       <key>Open Visitrecommendation</key>
     </entry>
+    <entry>
+      <key>Copy</key>
+    </entry>
+    <entry>
+      <key>Activity: Topic (incl. Subtopics)</key>
+    </entry>
+    <entry>
+      <key>Calling the abbyy webservice failed</key>
+    </entry>
+    <entry>
+      <key>Last</key>
+    </entry>
+    <entry>
+      <key>First</key>
+    </entry>
+    <entry>
+      <key>Cut</key>
+    </entry>
+    <entry>
+      <key>Paste</key>
+    </entry>
+    <entry>
+      <key>Superordinate Topic</key>
+    </entry>
+    <entry>
+      <key>within one Month</key>
+    </entry>
+    <entry>
+      <key>Move Up</key>
+    </entry>
+    <entry>
+      <key>Valuation</key>
+    </entry>
+    <entry>
+      <key>Topic Tree</key>
+    </entry>
+    <entry>
+      <key>Topic (incl. Subtopics)</key>
+    </entry>
+    <entry>
+      <key>Topics</key>
+    </entry>
+    <entry>
+      <key>Move Down</key>
+    </entry>
+    <entry>
+      <key>Expand</key>
+    </entry>
+    <entry>
+      <key>Create Child Topic</key>
+    </entry>
+    <entry>
+      <key>The following Topics have been set more than once:</key>
+    </entry>
+    <entry>
+      <key>Topic</key>
+    </entry>
+    <entry>
+      <key>Activity: Topic</key>
+    </entry>
+    <entry>
+      <key>Paste as Top Topic</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 b04132493d614719765370d8fb7f5c70983add22..aae267e85c1a5bfb199e9bc1739db96752baba79 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -263,6 +263,10 @@
       <key>Planning</key>
       <value>Planung</value>
     </entry>
+    <entry>
+      <key>Expand</key>
+      <value>Aufklappen</value>
+    </entry>
     <entry>
       <key>Add planning to organisations</key>
       <value>Planung der Firma hinzufügen</value>
@@ -686,6 +690,70 @@
       <key>License</key>
       <value>Lizenz</value>
     </entry>
+    <entry>
+      <key>First</key>
+      <value>Erster</value>
+    </entry>
+    <entry>
+      <key>Last</key>
+      <value>Letzter</value>
+    </entry>
+    <entry>
+      <key>Move Up</key>
+      <value>Nach oben Bewegen</value>
+    </entry>
+    <entry>
+      <key>Move Down</key>
+      <value>Nach unten Bewegen</value>
+    </entry>
+    <entry>
+      <key>Copy</key>
+      <value>Kopieren</value>
+    </entry>
+    <entry>
+      <key>Paste</key>
+      <value>Einfügen</value>
+    </entry>
+    <entry>
+      <key>Cut</key>
+      <value>Ausschneiden</value>
+    </entry>
+    <entry>
+      <key>Topic</key>
+      <value>Thema</value>
+    </entry>
+    <entry>
+      <key>Topic (incl. Subtopics)</key>
+      <value>Thema (inkl. Unterthemen)</value>
+    </entry>
+    <entry>
+      <key>Activity: Topic (incl. Subtopics)</key>
+      <value>Aktivität: Thema (inkl. Unterthemen)</value>
+    </entry>
+    <entry>
+      <key>Activity: Topic</key>
+      <value>Aktivität: Thema</value>
+    </entry>
+    <entry>
+      <key>Topics</key>
+      <value>Themen</value>
+    </entry>
+    <entry>
+      <key>Paste as Top Topic</key>
+      <value>Als Oberthema einfügen</value>
+    </entry>
+    <entry>
+      <key>Create Child Topic</key>
+      <value>Unterthema erstellen</value>
+    </entry>
+    <entry>
+      <key>Superordinate Topic</key>
+      <value>Ãœbergeordnetes Thema</value>
+    </entry>
+    <entry>
+      <key>Topic Tree</key>
+      <value>Themenbaum</value>
+    </entry>
     <entry>
       <key>Failed</key>
       <value>Fehlgeschlagen</value>
@@ -2553,6 +2621,10 @@
       <key>Field staff</key>
       <value>Aussendienst</value>
     </entry>
+    <entry>
+      <key>The following Topics have been set more than once:</key>
+      <value>Die folgenden Themen wurden mehrmals vergeben:</value>
+    </entry>
     <entry>
       <key>0.00</key>
     </entry>
@@ -12338,9 +12410,6 @@ Bitte Datumseingabe prüfen</value>
     <entry>
       <key>within the next Month</key>
     </entry>
-    <entry>
-      <key>DSGVO-Anonymisierung</key>
-    </entry>
     <entry>
       <key>During processing the e-mail an error has occurred.\n Please contact an administrator</key>
     </entry>
diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
index 22c9e61ed915116f0d4882cb5f1637b02db302e9..4c0d9611e57a7fa5719ca0583a50d655a7d02a5a 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -9792,6 +9792,63 @@
     <entry>
       <key>Open Visitrecommendation</key>
     </entry>
+    <entry>
+      <key>Copy</key>
+    </entry>
+    <entry>
+      <key>Activity: Topic (incl. Subtopics)</key>
+    </entry>
+    <entry>
+      <key>Calling the abbyy webservice failed</key>
+    </entry>
+    <entry>
+      <key>Last</key>
+    </entry>
+    <entry>
+      <key>First</key>
+    </entry>
+    <entry>
+      <key>Cut</key>
+    </entry>
+    <entry>
+      <key>Paste</key>
+    </entry>
+    <entry>
+      <key>Superordinate Topic</key>
+    </entry>
+    <entry>
+      <key>Move Up</key>
+    </entry>
+    <entry>
+      <key>Topic Tree</key>
+    </entry>
+    <entry>
+      <key>Topic (incl. Subtopics)</key>
+    </entry>
+    <entry>
+      <key>Topics</key>
+    </entry>
+    <entry>
+      <key>Move Down</key>
+    </entry>
+    <entry>
+      <key>Expand</key>
+    </entry>
+    <entry>
+      <key>Create Child Topic</key>
+    </entry>
+    <entry>
+      <key>The following Topics have been set more than once:</key>
+    </entry>
+    <entry>
+      <key>Topic</key>
+    </entry>
+    <entry>
+      <key>Activity: Topic</key>
+    </entry>
+    <entry>
+      <key>Paste as Top Topic</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/neonContext/TopicTree/TopicTree.aod b/neonContext/TopicTree/TopicTree.aod
new file mode 100644
index 0000000000000000000000000000000000000000..b76eb8916fc504ee19bcaac5cead1ebed98665df
--- /dev/null
+++ b/neonContext/TopicTree/TopicTree.aod
@@ -0,0 +1,37 @@
+<?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>TopicTree</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterView>TopicTreeFilter_view</filterView>
+  <editView>TopicTreeEdit_view</editView>
+  <previewView>TopicTreePreview_view</previewView>
+  <lookupView>TopicTreeLookup_view</lookupView>
+  <entity>TopicTree_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>a361f8a5-5d42-4058-9452-0f591f7e722f</name>
+    </neonViewReference>
+    <neonViewReference>
+      <name>93167d21-d793-4977-92b2-f7996de35cf4</name>
+      <view>TopicTreePreview_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>4b82a15f-6522-4523-8ddc-e4e7e9d6efcf</name>
+      <view>TopicTreeEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>c648fbf3-5cfb-4ec1-87a3-5b35c74df0b1</name>
+    </neonViewReference>
+    <neonViewReference>
+      <name>e74e51db-da4a-4e1a-96fc-7800a9a22536</name>
+    </neonViewReference>
+    <neonViewReference>
+      <name>fdf244ab-804f-49ad-bb9e-2a0def6d1fc6</name>
+      <view>TopicTreeFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>d48fbdce-1d08-4636-bd46-c8eda947d777</name>
+      <view>TopicTreeLookup_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/TopicTreeRelation/TopicTreeRelation.aod b/neonContext/TopicTreeRelation/TopicTreeRelation.aod
new file mode 100644
index 0000000000000000000000000000000000000000..b29d0bdd0b00f70cdd04406537b66bd6792b7513
--- /dev/null
+++ b/neonContext/TopicTreeRelation/TopicTreeRelation.aod
@@ -0,0 +1,20 @@
+<?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>TopicTreeRelation</name>
+  <title>Topic</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <entity>TopicTreeRelation_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>c9db7f4c-81c5-4b89-af20-0bd5dfa0ec31</name>
+      <view>TopicTreeRelationMultiEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>0a1e76a7-68dc-4f7e-a5e3-053540b61f2a</name>
+    </neonViewReference>
+    <neonViewReference>
+      <name>9180455d-d7b5-4c01-9496-bdf9d4b2c310</name>
+      <view>TopicTreeTitledList_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonView/ActivityDetail_view/ActivityDetail_view.aod b/neonView/ActivityDetail_view/ActivityDetail_view.aod
index 95192a1406ad14b83b8a99cdb152fde8f47eeec8..e2d378f230df07c4450400fa784297940aa5837f 100644
--- a/neonView/ActivityDetail_view/ActivityDetail_view.aod
+++ b/neonView/ActivityDetail_view/ActivityDetail_view.aod
@@ -4,19 +4,19 @@
   <title>Description</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
-    <boxLayout>
+    <noneLayout>
       <name>layout</name>
-      <direction>HORIZONTAL</direction>
-      <maxDirectionElements v="2" />
-    </boxLayout>
+    </noneLayout>
   </layout>
   <children>
     <genericViewTemplate>
       <name>Generic</name>
       <showDrawer v="true" />
+      <drawerCaption>Description</drawerCaption>
       <fixedDrawer v="true" />
       <hideLabels v="true" />
       <entityField>#ENTITY</entityField>
+      <title>Description</title>
       <fields>
         <entityFieldLink>
           <name>041a6ded-06b3-4d84-be29-d89d01df6dec</name>
@@ -24,5 +24,10 @@
         </entityFieldLink>
       </fields>
     </genericViewTemplate>
+    <neonViewReference>
+      <name>62634d84-b0a1-472c-aee2-04b392371ecf</name>
+      <entityField>Topics</entityField>
+      <view>TopicTreeTitledList_view</view>
+    </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/ActivityEdit_view/ActivityEdit_view.aod b/neonView/ActivityEdit_view/ActivityEdit_view.aod
index 2fff9dfbe23cab9ca0ca9361d39ebc0810988dd3..f07e18c7d31ea5e26294f1234641632967e834e8 100644
--- a/neonView/ActivityEdit_view/ActivityEdit_view.aod
+++ b/neonView/ActivityEdit_view/ActivityEdit_view.aod
@@ -56,6 +56,11 @@
       <entityField>Attributes</entityField>
       <view>AttributeRelationMultiEdit_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>f87aeb54-30e3-47d4-aaf2-d418ae92c248</name>
+      <entityField>Topics</entityField>
+      <view>TopicTreeRelationMultiEdit_view</view>
+    </neonViewReference>
     <neonViewReference>
       <name>1dfe4fcc-eb36-4a6c-878d-f907d36de9ac</name>
       <entityField>Documents</entityField>
diff --git a/neonView/SalesprojectConversionRate_view/SalesprojectConversionRate_view.aod b/neonView/SalesprojectConversionRate_view/SalesprojectConversionRate_view.aod
index e886fb460da1f6a1439fbad4055a213f87f2b0ed..9b9754063c92aea73ff8385c24c0c71b99d6ce29 100644
--- a/neonView/SalesprojectConversionRate_view/SalesprojectConversionRate_view.aod
+++ b/neonView/SalesprojectConversionRate_view/SalesprojectConversionRate_view.aod
@@ -53,7 +53,6 @@
       <name>TreeTable</name>
       <entityField>#ENTITY</entityField>
       <defaultGroupFields>
-        <element>#EXTENSION.Month.Month#NUMBER</element>
         <element>AB_KEYWORD_ENTRYID_KEYID</element>
       </defaultGroupFields>
       <columns>
@@ -66,6 +65,10 @@
           <entityField>conversionRate</entityField>
           <aggregateEntityField>conversionRate_aggregate</aggregateEntityField>
         </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>de29fbde-b6b4-422b-a051-b506eaad9cdb</name>
+          <entityField>UID</entityField>
+        </neonTreeTableColumn>
       </columns>
     </treeTableViewTemplate>
   </children>
diff --git a/neonView/TopicTreeEdit_view/TopicTreeEdit_view.aod b/neonView/TopicTreeEdit_view/TopicTreeEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..442f120ae326feaebdb2bd6e4371cb9877e0a195
--- /dev/null
+++ b/neonView/TopicTreeEdit_view/TopicTreeEdit_view.aod
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>TopicTreeEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <editMode v="true" />
+      <fields>
+        <entityFieldLink>
+          <name>d4a9e23e-6ff6-46ce-8ce9-aa98229dde90</name>
+          <entityField>UID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>52af19b6-ad44-4072-a078-2f2757b0d493</name>
+          <entityField>TOPICTREEID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>54a8e7b2-31d2-4c12-8dc2-f80012ef6667</name>
+          <entityField>ASSIGNEDTO</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>a37090dd-3daf-43f5-8527-3c63fa88cb33</name>
+          <entityField>TOPIC</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>e3294d31-8471-4c4f-b5b2-bdf9abced785</name>
+          <entityField>DESCRIPTION</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>ae0ca494-b1bd-4564-95d7-4eaecf9f2200</name>
+          <entityField>ACTIVE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>48c992a3-9f59-4fbc-8256-fe760b1b3bc6</name>
+          <entityField>DATE_NEW</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>06e46f3d-cdee-4bc3-9df6-8eb534a2026b</name>
+          <entityField>USER_EDIT</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>47cecb17-0121-45cb-967a-7128c573625e</name>
+          <entityField>USER_NEW</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>8edf2a0f-4ef7-423e-8495-8706362866da</name>
+          <entityField>DATE_EDIT</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <genericViewTemplate>
+      <name>genericForWarning</name>
+      <hideLabels v="true" />
+      <isEditable v="false" />
+      <fields>
+        <entityFieldLink>
+          <name>24d816b2-8aa5-4572-a2e5-f880226aea68</name>
+          <entityField>warningText</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/TopicTreeFilterTree_view/TopicTreeFilterTree_view.aod b/neonView/TopicTreeFilterTree_view/TopicTreeFilterTree_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..6503516309ce33b0b99bb43a9052483661647ee5
--- /dev/null
+++ b/neonView/TopicTreeFilterTree_view/TopicTreeFilterTree_view.aod
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>TopicTreeFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <treeViewTemplate>
+      <name>tree</name>
+      <parentField>ASSIGNEDTO</parentField>
+      <titleField>TOPIC</titleField>
+      <descriptionField>DESCRIPTION</descriptionField>
+      <iconField>icon</iconField>
+      <favoriteActionGroup1>CreateExpand</favoriteActionGroup1>
+      <favoriteActionGroup2>More</favoriteActionGroup2>
+      <informationField>sortingHelper</informationField>
+    </treeViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/TopicTreeFilter_view/TopicTreeFilter_view.aod b/neonView/TopicTreeFilter_view/TopicTreeFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..78fad58dfee031e88299cdc913412d6dc2488c84
--- /dev/null
+++ b/neonView/TopicTreeFilter_view/TopicTreeFilter_view.aod
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>TopicTreeFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <treeViewTemplate>
+      <name>tree</name>
+      <parentField>ASSIGNEDTO</parentField>
+      <nodeExpandedField>expanded</nodeExpandedField>
+      <titleField>TOPIC</titleField>
+      <descriptionField>DESCRIPTION</descriptionField>
+      <iconField>icon</iconField>
+      <hideContentSearch v="false" />
+      <expandRootItems v="false" />
+      <favoriteActionGroup1>CreateExpand</favoriteActionGroup1>
+      <favoriteActionGroup2>More</favoriteActionGroup2>
+      <maxDBRow v="400" />
+      <informationField>sortingHelper</informationField>
+    </treeViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/TopicTreeLookup_view/TopicTreeLookup_view.aod b/neonView/TopicTreeLookup_view/TopicTreeLookup_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..e77713119cc6dbef30310457f37547a6ff995db0
--- /dev/null
+++ b/neonView/TopicTreeLookup_view/TopicTreeLookup_view.aod
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>TopicTreeLookup_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <treeViewTemplate>
+      <name>tree</name>
+      <parentField>ASSIGNEDTO</parentField>
+      <nodeExpandedField>expanded</nodeExpandedField>
+      <titleField>TOPIC</titleField>
+      <descriptionField>DESCRIPTION</descriptionField>
+    </treeViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/TopicTreePreview_view/TopicTreePreview_view.aod b/neonView/TopicTreePreview_view/TopicTreePreview_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..c29eefebdcd78848d4db28ed327a7a1d2968cd7a
--- /dev/null
+++ b/neonView/TopicTreePreview_view/TopicTreePreview_view.aod
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>TopicTreePreview_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <cardViewTemplate>
+      <name>Card</name>
+      <iconField>icon</iconField>
+      <titleField>TOPIC</titleField>
+      <descriptionField>ACTIVE</descriptionField>
+      <informationField>DESCRIPTION</informationField>
+    </cardViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/TopicTreeRelationMultiEdit_view/TopicTreeRelationMultiEdit_view.aod b/neonView/TopicTreeRelationMultiEdit_view/TopicTreeRelationMultiEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..a51afeb7500e93abbd4c2095a8d2040fd2d0fbbb
--- /dev/null
+++ b/neonView/TopicTreeRelationMultiEdit_view/TopicTreeRelationMultiEdit_view.aod
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>TopicTreeRelationMultiEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <genericMultipleViewTemplate>
+      <name>genericMultiple</name>
+      <columns>
+        <neonGenericMultipleTableColumn>
+          <name>e26a5ea7-d5da-41b1-ad6d-c76f3e234aee</name>
+          <entityField>TOPICTREE_ID</entityField>
+          <fullWidth v="true" />
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>b49fcc0f-d6a1-4bf3-9666-0d47ffd2ca0e</name>
+          <entityField>DESCRIPTION</entityField>
+          <fullWidth v="true" />
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>ca267cc4-27f7-45c1-984e-ea09f7e6b810</name>
+          <entityField>TOPICTREERELATIONID</entityField>
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>37499051-ddcf-43e1-bbee-b520111088de</name>
+          <entityField>OBJECT_ROWID</entityField>
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>0667ce95-9606-4f1e-92d0-19f7f3c77a1c</name>
+          <entityField>OBJECT_TYPE</entityField>
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>4e072fd1-9ba7-40f9-ac96-d191f16de449</name>
+          <entityField>DATE_NEW</entityField>
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>23ad696f-9f88-43e2-9a40-9d3341f8af71</name>
+          <entityField>DATE_EDIT</entityField>
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>6986f44a-e4a8-4c12-917a-edc7502b5ce6</name>
+          <entityField>USER_EDIT</entityField>
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>59d29b78-03f5-4c48-9fd6-036ec735fd82</name>
+          <entityField>USER_NEW</entityField>
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>eca89c61-1609-46a9-af11-575199697236</name>
+          <entityField>TOPICTREE_IDdisplayValue</entityField>
+        </neonGenericMultipleTableColumn>
+      </columns>
+    </genericMultipleViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/TopicTreeTitledList_view/TopicTreeTitledList_view.aod b/neonView/TopicTreeTitledList_view/TopicTreeTitledList_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..32898bde9225c0529eb45326f244bfd2b79c0e0e
--- /dev/null
+++ b/neonView/TopicTreeTitledList_view/TopicTreeTitledList_view.aod
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8">
+  <name>TopicTreeTitledList_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <titledListViewTemplate>
+      <name>titledList</name>
+      <titleField>TOPICTREE_IDdisplayValue</titleField>
+      <titleFieldFullWidth v="true" />
+      <highlightingField>DESCRIPTION</highlightingField>
+      <autoNewRow v="true" />
+      <columns>
+        <neonTitledListTableColumn>
+          <name>f13055f2-b612-4016-8089-f05f03af0e09</name>
+          <entityField>TOPICTREE_ID</entityField>
+        </neonTitledListTableColumn>
+        <neonTitledListTableColumn>
+          <name>46d0af7b-7215-4c4d-b157-b1625e7f6dcb</name>
+          <entityField>DESCRIPTION</entityField>
+        </neonTitledListTableColumn>
+      </columns>
+    </titledListViewTemplate>
+  </children>
+</neonView>
diff --git a/process/Entity_lib/process.js b/process/Entity_lib/process.js
index b85c87aaab9ed86357bb101c3ba2f1056e4920ae..bc3aa7382aeded9e3530cb443f4c9c0921a41dd2 100644
--- a/process/Entity_lib/process.js
+++ b/process/Entity_lib/process.js
@@ -1,3 +1,4 @@
+import("system.eMath");
 import("system.process");
 import("system.translate");
 import("system.entities");
@@ -479,6 +480,59 @@ EntityConsumerRowsHelper.getCurrentConsumerRows = function (pConsumer, pFields)
         .getRows();
 }
 
+/**
+ * Static function for validating consumerRows you can use this in the onValidation of an Consumer to validate it's records using pMaxCount (1 if empty).<br>
+ * This first get's all current rows of a consumer with all changes applied (insertedRows, changedRows, deletedRows).<br>
+ * 
+ * @param {String} pConsumer the name of the consumer
+ * @param {String} pField the field of whichs value you want to validate
+ * @param {String} pDisplayField field that holds the displayValue to be returnded
+ * @param {String} pMaxCount max count to be valiated ("1" if empty)
+ * 
+ * @return {Object} Object with all pFields whose count exceeds pMaxCount as key and their pDisplayField as Value. Empty Object if none exist
+ * 
+ * @example
+ * var unvalid = EntityConsumerRowsHelper.validateUniqueRows("Topics", "TOPICTREE_ID", "TOPICTREE_IDdisplayValue", 1);
+ */
+EntityConsumerRowsHelper.validateUniqueRows = function (pConsumer, pField, pDisplayField, pMaxCount)
+{
+    var rows = EntityConsumerRowsHelper.getCurrentConsumerRows(pConsumer, [pField, pDisplayField]);
+    var recordCounts = {};
+    var maxCount = pMaxCount && pMaxCount != 0 ? pMaxCount : 1;
+    
+    for (var i = 0; i < rows.length; i++)
+    {
+        if(!recordCounts.hasOwnProperty(rows[i][pField]))
+        {
+            recordCounts[rows[i][pField]] = {};
+            recordCounts[rows[i][pField]]["count"] = 1;
+            recordCounts[rows[i][pField]]["display"] = rows[i][pDisplayField];
+        }
+        else
+        {
+            recordCounts[rows[i][pField]]["count"] = eMath.addInt(recordCounts[rows[i][pField]]["count"], 1);
+        }
+    }
+    
+    var res = {};
+    
+    for(var row in recordCounts)
+    {
+        if(row && row != "")
+        {
+            if(recordCounts[row]["count"] > maxCount)
+            {
+                if(!res.hasOwnProperty(row))
+                {
+                    res[row] = recordCounts[row]["display"];
+                }
+            }
+        }
+    }
+    
+    return res;
+}
+
 /**
  * Sets the consumer that is used for loading the rows.
  * 
@@ -610,4 +664,4 @@ EntityConsumerRowsHelper.prototype.removeRows = function (pRowsToRemove)
 EntityConsumerRowsHelper.prototype.getRows = function ()
 {
     return this._rows;
-}
+}
\ No newline at end of file
diff --git a/process/TopicTree_lib/TopicTree_lib.aod b/process/TopicTree_lib/TopicTree_lib.aod
new file mode 100644
index 0000000000000000000000000000000000000000..7e1d5b99bcd7c9432bc84cb3dd886d780ed4df20
--- /dev/null
+++ b/process/TopicTree_lib/TopicTree_lib.aod
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
+  <name>TopicTree_lib</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/TopicTree_lib/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>LIBRARY</element>
+  </variants>
+</process>
diff --git a/process/TopicTree_lib/process.js b/process/TopicTree_lib/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..a02f5566a17dbaa62dbb76838baab6af9d5bb5a8
--- /dev/null
+++ b/process/TopicTree_lib/process.js
@@ -0,0 +1,982 @@
+import("system.util");
+import("Entity_lib");
+import("Util_lib");
+import("system.translate");
+import("system.neon");
+import("Sql_lib");
+import("system.logging");
+import("system.vars");
+import("system.db");
+import("system.eMath");
+
+
+function TopicTreeUtils () {}
+
+/*
+ * Returns the sortingValue of the relevant Layer, by checkign which ones are filled.
+ * 
+ * @param {String} pLayer1 sorting value of layer 1
+ * @param {String} pLayer2 sorting value of layer 2
+ * @param {String} pLayer3 sorting value of layer 3
+ * @param {String} pLayer4 sorting value of layer 4
+ * @param {String} pLayer5 sorting value of layer 5
+ * @param {String} pLayer6 sorting value of layer 6
+ * 
+ * @return {String} The sorting value of the relevant Layer
+ */
+TopicTreeUtils.getSortingValue = function(pLayer1, pLayer2, pLayer3, pLayer4, pLayer5, pLayer6)
+{
+    var res;
+    if(pLayer6)
+    {
+        res = pLayer6;
+    }
+    else if(pLayer5)
+    {
+        res = pLayer5;
+    }
+    else if(pLayer4)
+    {
+        res = pLayer4;
+    }
+    else if(pLayer3)
+    {
+        res = pLayer3;
+    }
+    else if(pLayer2)
+    {
+        res = pLayer2;
+    }
+    else
+    {
+        res = pLayer1;
+    }
+
+    return res;
+}
+
+/*
+ * moves Sortingposition of items up/down/bottom/top
+ * 
+ * @param {String} pTopicTreeId topic tree Id of the dataset that get's moved
+ * @param {String} pDirection direction req to change item (e.g: down, up, bottom, top)
+ * @param {String} pMaxSorting max sorting of said item (needed so we can update the sortingValeus of the other topics accordingly)
+ * @param {String} [pAssignedTo] topic tree id of the topic this topic is the subtopic off
+ * @param {String} pOwnSortingValue sorting value of said value
+ * @param {String} pCurrentLayer current Layer as String, as specified as in TopicTreeUtils.getArrayLayers()
+ * 
+ * @return {void}
+ */
+TopicTreeUtils.movePosition = function(pTopicTreeId, pDirection, pMaxSorting, pAssignedTo, pOwnSortingValue, pCurrentLayer) {
+    if(!pTopicTreeId || !pDirection)
+    {
+        return;
+    }
+    var layers = TopicTreeUtils.getArrayLayers();
+    var sysDate = vars.get("$sys.date");
+    var sysUser = vars.get("$sys.user");
+    var maxSorting = pMaxSorting;
+    
+    
+    function buildUpdateArray([pLayer1, pLayer2, pLayer3, pLayer4, pLayer5, pLayer6, pLayerLvl, pPElementId], pNewSorting) {
+        return ["TOPICTREE", [layers[pLayerLvl], "DATE_EDIT", "USER_EDIT"], null, [pNewSorting, sysDate, sysUser], "TOPICTREEID = '" + pPElementId + "'"];
+    }
+    
+    var directionObj = {
+        down: {
+            directionOperation: " + 1 = ",
+            myElementFunction: function(rows) {
+                return buildUpdateArray(rows, (parseInt(rows[rows[6]]) + 1).toString());
+            },
+            otherElementFunction: function(rows) {
+                return buildUpdateArray(rows, (parseInt(rows[rows[6]]) - 1).toString());
+            }
+        },
+        up: {
+            directionOperation: " - 1 = ",
+            myElementFunction: function(rows) {
+                return buildUpdateArray(rows, (parseInt(rows[rows[6]]) - 1).toString());
+            },
+            otherElementFunction: function(rows) {
+                return buildUpdateArray(rows, (parseInt(rows[rows[6]]) + 1).toString());
+            }
+        },
+        bottom: {
+            directionOperation: " < ",
+            myElementFunction: function(rows) { 
+                return buildUpdateArray(rows, maxSorting);
+            },
+            otherElementFunction: function(rows) {
+                return buildUpdateArray(rows, (parseInt(rows[rows[6]]) - 1).toString());
+            }
+        },
+        top: {
+            directionOperation: " > ",
+            myElementFunction: function(rows) {
+                return buildUpdateArray(rows, "1");
+            },
+            otherElementFunction: function(rows) {
+                return buildUpdateArray(rows, (parseInt(rows[rows[6]]) + 1).toString());
+            }
+        }
+    }[pDirection];
+    
+    var myElements = TopicTreeUtils._movePositionHelper(pTopicTreeId, " = ");
+    var otherElements = TopicTreeUtils._movePositionHelper(pTopicTreeId, directionObj.directionOperation, pAssignedTo, pOwnSortingValue, pCurrentLayer);
+
+    var statements = myElements.map(directionObj.myElementFunction);
+    statements = statements.concat(otherElements.map(directionObj.otherElementFunction));
+
+    db.updates(statements);
+}
+
+/*
+ * Returns the topicLayers as StringArray <br>
+ * 
+ * e.g: ["SORTING_LAYER_1", "SORTING_LAYER_2", "SORTING_LAYER_3", "SORTING_LAYER_4", "SORTING_LAYER_5", "SORTING_LAYER_6"];
+ * 
+ * @return {Array} Layers
+ */
+TopicTreeUtils.getArrayLayers = function() {
+    return ["SORTING_LAYER_1", "SORTING_LAYER_2", "SORTING_LAYER_3", "SORTING_LAYER_4", "SORTING_LAYER_5", "SORTING_LAYER_6"];
+}
+
+/*
+ * helper function used in TopicTreeUtils.movePosition()
+ * 
+ * @param {String} pTopicTreeId topic tree Id of the dataset that get's moved
+ * @param {String} pOperation direction operation (e.g: down, up, bottom, top)
+ * @param {String} [pAssignedTo] topic tree id of the topic this topic is the subtopic off (mandatory if you are moving other Elements, leave blank if own Elements)
+ * @param {String} [pMyElementSortingValue] sorting value of said topic (mandatory if you are moving other Elements, leave blank if own Elements)
+ * @param {String} [pCurrentLayer] current Layer as String, as specified as in TopicTreeUtils.getArrayLayers() (mandatory if you are moving other Elements, leave blank if own Elements)
+ * 
+ * @return {boolean} true if succesfull
+ */
+TopicTreeUtils._movePositionHelper = function(pTopicTreeId, pOperation, pAssignedTo, pMyElementSortingValue, pCurrentLayer) {
+        
+        var fixedOperation = pOperation;
+        if(pAssignedTo)
+        {
+            fixedOperation = " = "; //fixed operator for other elements
+        }
+        return db.table("select otherElements.SORTING_LAYER_1 \
+                        , otherElements.SORTING_LAYER_2 \
+                        , otherElements.SORTING_LAYER_3 \
+                        , otherElements.SORTING_LAYER_4 \
+                        , otherElements.SORTING_LAYER_5 \
+                        , otherElements.SORTING_LAYER_6 \
+                        , LAYER_LEVEL \
+                        , otherElements.TOPICTREEID \
+                        from ( " + TopicTreeUtils._getLayerSQL(pTopicTreeId, pAssignedTo, pOperation, pMyElementSortingValue, pCurrentLayer) + " ) TOPICTREE \
+                        join TOPICTREE otherElements \
+                            on TOPICTREE.TOPICTREEID = otherElements.TOPICTREEID \
+                            and case when LAYER_LEVEL = 0 then TOPICTREE.SORTING_LAYER_1 " + fixedOperation + " otherElements.SORTING_LAYER_1 \
+                                     when LAYER_LEVEL = 1 then TOPICTREE.SORTING_LAYER_1 = otherElements.SORTING_LAYER_1 and TOPICTREE.SORTING_LAYER_2 " + fixedOperation + " otherElements.SORTING_LAYER_2 \
+                                     when LAYER_LEVEL = 2 then TOPICTREE.SORTING_LAYER_1 = otherElements.SORTING_LAYER_1 and TOPICTREE.SORTING_LAYER_2 = otherElements.SORTING_LAYER_2 and TOPICTREE.SORTING_LAYER_3 " + fixedOperation + " otherElements.SORTING_LAYER_3 \
+                                     when LAYER_LEVEL = 3 then TOPICTREE.SORTING_LAYER_1 = otherElements.SORTING_LAYER_1 and TOPICTREE.SORTING_LAYER_2 = otherElements.SORTING_LAYER_2 and TOPICTREE.SORTING_LAYER_3 = otherElements.SORTING_LAYER_3 and TOPICTREE.SORTING_LAYER_4 " + fixedOperation + " otherElements.SORTING_LAYER_4 \
+                                     when LAYER_LEVEL = 4 then TOPICTREE.SORTING_LAYER_1 = otherElements.SORTING_LAYER_1 and TOPICTREE.SORTING_LAYER_2 = otherElements.SORTING_LAYER_2 and TOPICTREE.SORTING_LAYER_3 = otherElements.SORTING_LAYER_3 and TOPICTREE.SORTING_LAYER_4 = otherElements.SORTING_LAYER_4 and TOPICTREE.SORTING_LAYER_5 " + fixedOperation + " otherElements.SORTING_LAYER_5 \
+                                     else TOPICTREE.SORTING_LAYER_1 = otherElements.SORTING_LAYER_1 and TOPICTREE.SORTING_LAYER_2 = otherElements.SORTING_LAYER_2 and TOPICTREE.SORTING_LAYER_3 = otherElements.SORTING_LAYER_3 and TOPICTREE.SORTING_LAYER_4 = otherElements.SORTING_LAYER_4 and TOPICTREE.SORTING_LAYER_5 = otherElements.SORTING_LAYER_5 and TOPICTREE.SORTING_LAYER_6 " + fixedOperation + " otherElements.SORTING_LAYER_6 end");
+}
+
+/*
+ * helper function used in TopicTreeUtils._movePositionHelper() <br>
+ * 
+ * returns the layerSql with the correct where condition
+ * @param {String} pTopicTreeId topic tree Id of the dataset that get's moved
+ * @param {String} pOperation direction operation (e.g: down, up, bottom, top)
+ * @param {String} [pAssignedTo] topic tree id of the topic this topic is the subtopic off (mandatory if you are moving other Elements, leave blank if own Elements)
+ * @param {String} [pMyElementSortingValue] sorting value of said topic (mandatory if you are moving other Elements, leave blank if own Elements)
+ * @param {String} [pCurrentLayer] current Layer as String, as specified as in TopicTreeUtils.getArrayLayers() (mandatory if you are moving other Elements, leave blank if own Elements)
+ * 
+ * @return {boolean} true if succesfull
+ */
+TopicTreeUtils._getLayerSQL = function(pTopicTreeId, pAssignedTo, pOperation, pMyElementSortingValue, pCurrentLayer) {
+    var whereCond = "TOPICTREEID = '" + pTopicTreeId + "'";
+    
+    if(pAssignedTo)//other element -> add to condition accordingly
+    {
+        if(pAssignedTo == $TopicTreeConstants.TOPTOPIC())//top topics have no asignee
+        {
+            whereCond = "ASSIGNEDTO is null";
+        }
+        else
+        {
+            whereCond = "ASSIGNEDTO = '" + pAssignedTo + "'";
+        }
+        
+        whereCond = whereCond + " and TOPICTREEID != '" + pTopicTreeId + "'";
+        
+        switch (pOperation) {
+            case " + 1 = ":
+                whereCond = whereCond + " and " + pCurrentLayer + "= (" + pMyElementSortingValue + "+1)";
+                break;
+            case " - 1 = ":
+                whereCond = whereCond + " and " + pCurrentLayer + "= (" + pMyElementSortingValue + "-1)";
+                break;
+            case " < ":
+                whereCond = whereCond + " and " + pCurrentLayer + "> " + pMyElementSortingValue +"";
+                break;
+            case " > ":
+                whereCond = whereCond + " and " + pCurrentLayer + "< " + pMyElementSortingValue +"";
+                break;
+            default:
+                break;
+        }
+
+    }
+    
+    return "select case when SORTING_LAYER_6 is not null then 5 \
+                        when SORTING_LAYER_5 is not null then 4 \
+                        when SORTING_LAYER_4 is not null then 3 \
+                        when SORTING_LAYER_3 is not null then 2 \
+                        when SORTING_LAYER_2 is not null then 1 \
+                        else 0 end as LAYER_LEVEL, \
+                TOPICTREE.* \
+                from TOPICTREE \
+                where " + whereCond + "";
+}
+
+/*
+ * Returns the name of the relevant Layer, by checking which ones are filled. <br>
+ * works the same way as getSortingValue();
+ * 
+ * @param {String} pLayer1 sorting value of layer 1
+ * @param {String} pLayer2 sorting value of layer 2
+ * @param {String} pLayer3 sorting value of layer 3
+ * @param {String} pLayer4 sorting value of layer 4
+ * @param {String} pLayer5 sorting value of layer 5
+ * @param {String} pLayer6 sorting value of layer 6
+ * 
+ * @return {String} The relevant sorting Layer as String
+ */
+TopicTreeUtils.getLayer = function(pLayer1, pLayer2, pLayer3, pLayer4, pLayer5, pLayer6)
+{
+    var res;
+    if(Utils.toBoolean(pLayer6))
+    {
+        res = "SORTING_LAYER_6";
+    }
+    else if(Utils.toBoolean(pLayer5))
+    {
+        res = "SORTING_LAYER_5";
+    }
+    else if(Utils.toBoolean(pLayer4))
+    {
+        res = "SORTING_LAYER_4";
+    }
+    else if(Utils.toBoolean(pLayer3))
+    {
+        res = "SORTING_LAYER_3";
+    }
+    else if(Utils.toBoolean(pLayer2))
+    {
+        res = "SORTING_LAYER_2";
+    }
+    else
+    {
+        res = "SORTING_LAYER_1";
+    }
+
+    return res;
+}
+
+/*
+ * Returns the number value of the relevant Layer.<br>
+ * works the same way as getSortingValue();
+ * 
+ * @param {Boolean} pDeeper not the relevant layer, but one layer deeper (child topics)
+ * @param {String} pLayer1 sorting value of layer 1
+ * @param {String} pLayer2 sorting value of layer 2
+ * @param {String} pLayer3 sorting value of layer 3
+ * @param {String} pLayer4 sorting value of layer 4
+ * @param {String} pLayer5 sorting value of layer 5
+ * @param {String} pLayer6 sorting value of layer 6
+ * 
+ * @return {String} The relevant sorting Layer as Number (e.g: if "SORTING_LAYER_2" was the relevant one the returned value would be "2")
+ */
+TopicTreeUtils.getLayerAsNumber = function(pDeeper, pLayer1, pLayer2, pLayer3, pLayer4, pLayer5, pLayer6)
+{
+    var layer;
+    if(pDeeper)
+    {
+        layer = TopicTreeUtils.getDeeperLayer(pLayer1, pLayer2, pLayer3, pLayer4, pLayer5, pLayer6);
+    }
+    else
+    {
+        layer = TopicTreeUtils.getLayer(pLayer1, pLayer2, pLayer3, pLayer4, pLayer5, pLayer6);
+    }
+    var lastThreeChars = layer.substring(layer.length - 3);
+    
+    for(var element in lastThreeChars)//currently we have only 6 layers, but this might change in the future, this loop allows us to have up to -19 layers
+    {
+        if(!isNaN(lastThreeChars[0]))
+        {
+            return lastThreeChars;
+        }
+        else
+        {
+            lastThreeChars = lastThreeChars.substring(1);
+        }
+    }
+    return 0;
+}
+
+/*
+ * Returns the name of not the relevant Layer, but the one one layer deeper (child topic) by checking which ones are filled. <br>
+ * works the same way as getSortingValue() and getLayer();
+ * 
+ * @param {String} pLayer1 sorting value of layer 1
+ * @param {String} pLayer2 sorting value of layer 2
+ * @param {String} pLayer3 sorting value of layer 3
+ * @param {String} pLayer4 sorting value of layer 4
+ * @param {String} pLayer5 sorting value of layer 5
+ * @param {String} pLayer6 sorting value of layer 6
+ * 
+ * @return {String} The relevant sorting Layer as String
+ */
+TopicTreeUtils.getDeeperLayer = function(pLayer1, pLayer2, pLayer3, pLayer4, pLayer5, pLayer6)
+{
+    var res;
+    if(pLayer5 && pLayer5 != "null" && pLayer5 != "")// null as string because that's how '$sys.selectionRows'returns null
+    {
+        res = "SORTING_LAYER_6";
+    }
+    else if(pLayer4 && pLayer4 != "null" && pLayer4 != "")
+    {
+        res = "SORTING_LAYER_5";
+    }
+    else if(pLayer3 && pLayer3 != "null" && pLayer3 != "")
+    {
+        res = "SORTING_LAYER_4";
+    }
+    else if(pLayer2 && pLayer2 != "null" && pLayer2 != "")
+    {
+        res = "SORTING_LAYER_3";
+    }
+    else
+    {
+        res = "SORTING_LAYER_2";
+    }
+
+    return res;
+}
+
+/*
+ * Returns the layer underneath pLayerName 8child topic as string.<br>
+
+ * @param {String} pLayerName layer name you want the sub topic layer from
+ * 
+ * @return {String} layer name of sub topics as String
+ */
+TopicTreeUtils.getDeeperLayerFromLayerName = function(pLayerName)
+{
+    var number = TopicTreeUtils.returnNumberOfLayerName(pLayerName);
+    var newdeeperNummer = eMath.addInt(parseInt(number), 1);
+    var newName = pLayerName.substring(0, pLayerName.length - number.length) + newdeeperNummer;
+    
+    return newName;
+}
+
+/*
+ * Returns the layer underneath pLayerName 8child topic as string.<br>
+
+ * @param {String} pLayerName layer name you want the sub topic layer from
+ * 
+ * @return {String} layer name of sub topics as String
+ */
+TopicTreeUtils.getPreviousLayerName = function(pLayerName)
+{
+    var number = TopicTreeUtils.returnNumberOfLayerName(pLayerName);
+    var newdeeperNummer = eMath.subInt(parseInt(number), 1);
+    var newName = pLayerName.substring(0, pLayerName.length - number.length) + newdeeperNummer;
+    
+    return newName;
+}
+
+/*
+ * Returns the number of pLayerName<br>
+
+ * @param {String} pLayerName layer name you want the number from
+ * 
+ * @return {String} Sorting layer as String (e.g: if "SORTING_LAYER_2" was the relevant one the returned value would be "2")
+ */
+TopicTreeUtils.returnNumberOfLayerName = function(pLayerName)
+{
+    var lastThreeChars = pLayerName.substring(pLayerName.length - 3);
+
+    for(var element in lastThreeChars)//currently we have only 6 layers, but this might change in the future, this loop allows us to have up to -19 layers
+    {
+        if(!isNaN(lastThreeChars[0]))
+        {
+            return lastThreeChars;
+        }
+        else
+        {
+            lastThreeChars = lastThreeChars.substring(1);
+        }
+    }
+    return 0;
+}
+
+/*
+ * Returns the amount of layers<br>
+ * So basically how deep this topic is from pTopicTreeDataset to the deepest one
+ * @param {String} pTopicTreeDataset as returned by vars.get("$sys.selectionRows")[0];
+ * 
+ * @return {Number} Number of layers (e.g: when topLayer = SORTING_LAYER_2 and the deepest subtopic is SORTING_LAYER_5 --> "4" (4layers: 2, 3, 4, 5) 
+ */
+TopicTreeUtils.getAmountOfLayers = function(pTopicTreeDataset)
+{
+    var topLayer = TopicTreeUtils.returnNumberOfLayerName(JSON.parse(pTopicTreeDataset["sortingHelper"])["sortingLayer"]);
+    var topId = pTopicTreeDataset["#UID"];
+
+    var deepestLayer = topLayer;
+    var assignedTo = [topId];
+
+    while (true)
+    {
+        var subTopics = newSelect("TOPICTREE.TOPICTREEID \n\
+                                        , case when SORTING_LAYER_6 is not null then 'SORTING_LAYER_6' \n\
+                        when SORTING_LAYER_5 is not null then 'SORTING_LAYER_5' \n\
+                        when SORTING_LAYER_4 is not null then 'SORTING_LAYER_4' \n\
+                        when SORTING_LAYER_3 is not null then 'SORTING_LAYER_3' \n\
+                        when SORTING_LAYER_2 is not null then 'SORTING_LAYER_2' \n\
+                        else 'SORTING_LAYER_1' end")
+                                    .from("TOPICTREE")
+                                    .where("TOPICTREE.ASSIGNEDTO", assignedTo, SqlBuilder.IN())
+                                    .table();
+        assignedTo = [];
+        if(subTopics.length == 0)
+        {
+            break;
+        }
+
+        for (var ii = 0; ii < subTopics.length; ii++)
+        {
+            let layer = TopicTreeUtils.returnNumberOfLayerName(subTopics[ii][1]);
+            if(parseInt(layer) > parseInt(deepestLayer))
+            {
+                deepestLayer = layer;
+            }
+            assignedTo.push(subTopics[ii][0]);
+        }
+    }
+
+    var amountOfLayers = eMath.addInt(eMath.subInt(deepestLayer, topLayer), 1);
+    
+    return amountOfLayers;
+}
+
+/*
+ * Returns the amount of layers<br>
+ * So basically how deep this topic is from pTopicTreeDataset to the deepest one
+ * @param {String} pTopicTreeDataset as returned by vars.get("$sys.selectionRows")[0];
+ * 
+ * @return {Number} Number of layers (e.g: when topLayer = SORTING_LAYER_2 and the deepest subtopic is SORTING_LAYER_5 --> "4" (4layers: 2, 3, 4, 5) 
+ */
+TopicTreeUtils.getSubTopicIds = function(pTopicTreeDataset)
+{
+    var topId = pTopicTreeDataset["#UID"];
+    
+    var assignedTo = [topId];
+    var ids = [topId];
+    
+    while (true)
+    {
+        var subTopics = newSelect("TOPICTREE.TOPICTREEID")
+                                    .from("TOPICTREE")
+                                    .where("TOPICTREE.ASSIGNEDTO", assignedTo, SqlBuilder.IN())
+                                    .arrayColumn();
+        assignedTo = [];
+        if(subTopics.length == 0)
+        {
+            break;
+        }
+        for (var i = 0; i < subTopics.length; i++)
+        {
+            ids.push(subTopics[i]);
+            assignedTo.push(subTopics[i]);
+        }
+    }
+    
+    return ids;
+}
+
+
+/*
+ * Returns layer number case when (returns 6 SORTING_LAYER_6 is filled, 5 if SORTING_LAYER_5 is filled, and so on
+ * 
+ * @return {Number} Number of layer 
+ */
+TopicTreeUtils.layerNumberCaseWhen = function()
+{
+    return SqlBuilder.caseWhen(newWhere("SORTING_LAYER_6 is not null"))
+                        .then("6")
+                        .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_5 is not null"))
+                                                .then("5")
+                                                .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_4 is not null"))
+                                                                .then("4")
+                                                                .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_3 is not null"))
+                                                                                .then("3")
+                                                                                .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_2 is not null"))
+                                                                                                .then("2")
+                                                                                                .elseValue("1")))))
+                                .toString();
+}
+
+/*
+ * Returns the case for the actual sortingValue (sortingValue of relevant Layer).
+ * 
+ * @return {Number} Number of layer 
+ */
+TopicTreeUtils.relevantSortingValueCaseWhen = function()
+{
+    return SqlBuilder.caseWhen(newWhere("SORTING_LAYER_6 is not null"))
+                        .then("SORTING_LAYER_6")
+                        .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_5 is not null"))
+                                                .then("SORTING_LAYER_5")
+                                                .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_4 is not null"))
+                                                                .then("SORTING_LAYER_4")
+                                                                .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_3 is not null"))
+                                                                                .then("SORTING_LAYER_3")
+                                                                                .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_2 is not null"))
+                                                                                                .then("SORTING_LAYER_2")
+                                                                                                .elseValue("SORTING_LAYER_1")))))
+                                .toString();
+}
+
+/*
+ * Returns the case for the actual sortingValue (sortingValue of relevant Layer).
+ * 
+ * @return {Number} Number of layer 
+ */
+TopicTreeUtils.layerNameCaseWhen = function()
+{
+    return SqlBuilder.caseWhen(newWhere("SORTING_LAYER_6 is not null"))
+                        .thenString("SORTING_LAYER_6")
+                        .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_5 is not null"))
+                                                .thenString("SORTING_LAYER_5")
+                                                .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_4 is not null"))
+                                                                .thenString("SORTING_LAYER_4")
+                                                                .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_3 is not null"))
+                                                                                .thenString("SORTING_LAYER_3")
+                                                                                .elseValue(SqlBuilder.caseWhen(newWhere("SORTING_LAYER_2 is not null"))
+                                                                                                .thenString("SORTING_LAYER_2")
+                                                                                                .elseString("SORTING_LAYER_1")))))
+                                .toString();
+}
+
+/**
+ * Checks if any topic is beeing added more than once and returns a message if that's the case.<br>
+ * 
+ * @param {String} pConsumer                <p>
+ *                                          The name of the topic tree relation consumer.<br>
+ * @return {String}                         <p> 
+ *                                          The validation message or an empty<br>
+ *                                          string if everything is ok.<br>
+ */
+TopicTreeUtils.validateTopicCount = function (pConsumer)
+{
+    var unvalid = EntityConsumerRowsHelper.validateUniqueRows(pConsumer, "TOPICTREE_ID", "TOPICTREE_IDdisplayValue", 1);
+    
+    var validationString = "";
+    for (var topic in unvalid)
+    {
+        if(validationString == "")
+        {
+            validationString += (translate.text("The following Topics have been set more than once:") + "\n")
+        }
+        else
+        {
+            validationString += ",\n";
+        }
+        validationString += unvalid[topic];
+
+    }
+    return validationString;
+}
+
+/**
+ * Get's the displayvlaue for topic tree elements<br>
+ * Basically adds the topic titles of all Superordinate topics in front of it's own title, concated with " > "<br>
+ * e.g: "Department > Sales > Field staff"<br>
+ * If it's one of the subtopics only that one is returned<br>
+ * e.g: "Department"<br>
+ * 
+ * @param {String} pTopicTreeId             <p>
+ *                                          The row id of the entity.<br>
+ * @return {String}                         <p> 
+ *                                          The displayValue as described above 
+ */
+TopicTreeUtils.getTopicTreeDisplayValue = function (pTopicTreeId)
+{
+    var title;
+
+    var deepestSubTopic = newSelect(["TOPICTREE.TOPIC"
+                                    , "TOPICTREE.ASSIGNEDTO"
+                                    , TopicTreeUtils.layerNumberCaseWhen()])
+                                .from("TOPICTREE")
+                                .orderBy("SORTING_LAYER_1, SORTING_LAYER_2, SORTING_LAYER_3, SORTING_LAYER_4, SORTING_LAYER_5, SORTING_LAYER_6")
+                                .where("TOPICTREE.TOPICTREEID", pTopicTreeId)
+                                .arrayRow();
+    title = deepestSubTopic[0];
+    var assignedTo = deepestSubTopic[1];
+    for (i = 0; i < deepestSubTopic[2]; i++)
+    {
+            var higherLayer = newSelect("TOPICTREE.ASSIGNEDTO, TOPICTREE.TOPIC")
+                                        .from("TOPICTREE")
+                                        .where("TOPICTREE.TOPICTREEID", assignedTo)
+                                        .arrayRow();
+        if(higherLayer[1] != undefined)
+        {
+            title = higherLayer[1] + " > " + "" + title;
+            assignedTo = higherLayer[0];
+        }
+    }
+
+    return title;
+}
+
+/**
+ * Used by both the contentProcess aswell as the rowCountProcess of the jDito recordContainer of TopicTree_lib<br>
+ * 
+ * It is currently not possible to page the tree while using a tree/treeTable viewtemplate (The tree paging we do have which pages the nodes does only
+ * work for groupings and not for our parent-child structure. <br>
+ * 
+ * So we recommend trying to keep your topic tree small and maybe even split it into multiple smaller ones.<br>
+ * 
+ * @param {Boolean} pIsRowCount             <p>
+ *                                          If true: returns the length instead of the stringified tree, also doens't do some stuff that's needed for displayvalues<br>
+ * @return {String}                         <p> 
+ *                                          stringified Array needed for the contentProcess or rowCount if pIsRowCount is set
+ */
+TopicTreeUtils.returnTopicTree = function (pIsRowCount)
+{
+    var expanded = false;
+
+    if(vars.exists("$param.Expanded_param") && vars.get("$param.Expanded_param"))
+    {
+        expanded = Utils.toBoolean(vars.get("$param.Expanded_param"));
+    }
+    else if(vars.exists("$context.expanded") && vars.get("$context.expanded"))
+    {
+        expanded = Utils.toBoolean(vars.get("$context.expanded"));
+    }
+
+    var condition = newWhere();
+
+    if (vars.exists("$local.idvalues") && vars.get("$local.idvalues"))
+    {
+        condition.andIfSet("TOPICTREE.TOPICTREEID", vars.get("$local.idvalues"), SqlBuilder.IN()); 
+    }
+
+    if(vars.exists("$param.OnlyActive_param") && vars.get("$param.OnlyActive_param"))
+    {
+        condition.andIfSet("TOPICTREE.ACTIVE", "1"); 
+    }
+
+    if(vars.exists("$param.OnlyFiveLayers_param") && vars.get("$param.OnlyFiveLayers_param"))
+    {
+        condition.and("TOPICTREE.SORTING_LAYER_6 is null"); 
+    }                                      
+    
+    var treeElements = newSelect(["TOPICTREE.TOPICTREEID"
+                                , "TOPICTREE.ASSIGNEDTO"
+                                , "TOPICTREE.ACTIVE"
+                                , "TOPICTREE.TOPIC"
+                                , "TOPICTREE.DESCRIPTION"
+                                , "TOPICTREE.SORTING_LAYER_1"
+                                , "TOPICTREE.SORTING_LAYER_2"
+                                , "TOPICTREE.SORTING_LAYER_3"
+                                , "TOPICTREE.SORTING_LAYER_4"
+                                , "TOPICTREE.SORTING_LAYER_5"
+                                , "TOPICTREE.SORTING_LAYER_6"
+                                , "TOPICTREE.DATE_EDIT"
+                                , "TOPICTREE.DATE_NEW"
+                                , "TOPICTREE.USER_EDIT"
+                                , "TOPICTREE.USER_NEW"
+                                , TopicTreeUtils.relevantSortingValueCaseWhen()
+                                , TopicTreeUtils.layerNameCaseWhen()])
+                                .from("TOPICTREE")
+                                .whereIfSet(condition)
+                                .orderBy("TOPICTREE.SORTING_LAYER_1 \n\
+                                    , TOPICTREE.SORTING_LAYER_2 \n\
+                                    , TOPICTREE.SORTING_LAYER_3 \n\
+                                    , TOPICTREE.SORTING_LAYER_4 \n\
+                                    , TOPICTREE.SORTING_LAYER_5 \n\
+                                    , TOPICTREE.SORTING_LAYER_6")
+                                .table();
+    
+    var maxCountObj = {};
+    var positionObj = {};
+    var assignedToObj = {}
+    for (let i = 0; i < treeElements.length; i++)//loop trough selected Topics and builds maxCountObj(max SortingVlaue for said assignee)
+    {
+        let topicTreeId = treeElements[i][0];
+        let asigneeId = !treeElements[i][1] || treeElements[i][1] == "" ? $TopicTreeConstants.TOPTOPIC() : treeElements[i][1];//assigned to, "topTopic" if topNode (Topic of first Layer)
+        var sortingValue = treeElements[i][15];//case when returns the relevant sortig value
+
+        if(!maxCountObj.hasOwnProperty(asigneeId))
+        {
+            maxCountObj[asigneeId] = sortingValue;
+        }
+        else if(maxCountObj[asigneeId] < sortingValue)
+        {
+            maxCountObj[asigneeId] = sortingValue;
+        }
+    }
+    
+    if(!pIsRowCount)
+    {
+        //loop trough selected Topics again and assign the ownSortingValue and maxSortingValue to each element with the help of the sortingHelper field,
+        //so we only have to load these from here and can use them for the stateprocesses of the actions without having to get this info from scratch everytime (performance)
+        for (let i = 0; i < treeElements.length; i++)
+        {
+            let asigneeId = !treeElements[i][1] || treeElements[i][1] == "" ? $TopicTreeConstants.TOPTOPIC() : treeElements[i][1];
+
+            //sortingHelper field for the stateProcesses (performanceBoost since we only have to get these here once)
+            treeElements[i][15] = JSON.stringify({"ownSortingValue": treeElements[i][15]
+                                                    , "maxSortingValue": maxCountObj[asigneeId]
+                                                    , "sortingLayer": treeElements[i][16]
+                                                    , "childTopics": maxCountObj[treeElements[i][0]]});
+            treeElements[i][16] = treeElements[i][0]; //uid = TOPICTREEID needed for the tree 
+            treeElements[i][17] = "NEON:DUE"; //icon (different colors depending on the state
+            treeElements[i][18] = expanded; //expanded
+        }
+    }
+    
+    if(pIsRowCount)
+    {
+        return treeElements.length;
+    }
+    return JSON.stringify(treeElements);
+}
+
+/**
+ * Used by both the contentProcess aswell as the rowCountProcess of the jDito recordContainer of TopicTree_lib<br>
+ * 
+ * It is currently not possible to page the tree while using a tree/treeTable viewtemplate (The tree paging we do have which pages the nodes does only
+ * work for groupings and not for our parent-child structure. <br>
+ * 
+ * So we recommend trying to keep your topic tree small and maybe even split it into multiple smaller ones.<br>
+ * 
+ * @param {Boolean} pIsTopTopic             <p>
+ *                                          If true: inserts as top topic instead of inserting at selected topic<br>
+ * @return {void}                           <p> 
+ *                                          
+ */
+TopicTreeUtils.paste = function (pIsTopTopic)
+{
+    function _updateSortingValuesOfOtherTopics(pLayer, pOwnSortingValue, pAssignedTo)
+    {
+        var assignedToCond = newWhere("TOPICTREE.ASSIGNEDTO", pAssignedTo);
+
+        if(pAssignedTo == $TopicTreeConstants.TOPTOPIC())
+        {
+            assignedToCond = newWhere("TOPICTREE.ASSIGNEDTO is null");
+        }
+
+        var topicsThatNeedMoving = newSelect("TOPICTREE.TOPICTREEID, TOPICTREE." + pLayer + "")
+                                            .from("TOPICTREE")
+                                            .where(assignedToCond)
+                                            .and("TOPICTREE." + pLayer + "", pOwnSortingValue, SqlBuilder.GREATER())
+                                            .table();
+
+        var updateStatements = [];
+        for (i = 0; i < topicsThatNeedMoving.length; i++)
+        {
+            updateStatements.push(["TOPICTREE", [pLayer], null, [topicsThatNeedMoving[i][1]], newWhere("TOPICTREE.TOPICTREEID", topicsThatNeedMoving[i][0]).build()]);
+        }
+        if(updateStatements.length > 0)
+        {
+            db.execute(updateStatements);
+        }
+    }
+
+    var isCut = vars.exists("$context.Cut") && vars.get("$context.Cut") != null;
+    var copy = JSON.parse(vars.get("$context.Copied"))["dataset"]; //copied data
+    var cTopicTreeId = copy["#UID"];
+    var topicAndActive = newSelect("TOPICTREE.TOPIC, TOPICTREE.ACTIVE").from("TOPICTREE").where("TOPICTREE.TOPICTREEID", cTopicTreeId).arrayRow();
+    var cTopic = topicAndActive[0];
+    var cActive = topicAndActive[1];
+    var cDescription = copy.DESCRIPTION;
+    var cAssignedTo = copy.ASSIGNEDTO == "" ? $TopicTreeConstants.TOPTOPIC() : copy.ASSIGNEDTO;
+    var cSorting_Layer_1 = copy.SORTING_LAYER_1;
+    var cSorting_Layer_2 = copy.SORTING_LAYER_2;
+    var cSorting_Layer_3 = copy.SORTING_LAYER_3;
+    var cSorting_Layer_4 = copy.SORTING_LAYER_4;
+    var cSorting_Layer_5 = copy.SORTING_LAYER_5;
+    var cSorting_Layer_6 = copy.SORTING_LAYER_6;
+    var cLayer = TopicTreeUtils.getLayer(cSorting_Layer_1, cSorting_Layer_2, cSorting_Layer_3, cSorting_Layer_4, cSorting_Layer_5, cSorting_Layer_6);
+
+    var cSortingHelper = JSON.parse(copy.sortingHelper);
+    var cOwnSortingValue = cSortingHelper.ownSortingValue;
+    
+    var pLayer = "SORTING_LAYER_1";
+    var pLayerDeeper = "SORTING_LAYER_2";
+    var cond = newWhere("TOPICTREE.ASSIGNEDTO is null");
+    if(!pIsTopTopic)
+    {
+        var paste = vars.get("$sys.selectionRows")[0]; //paste data
+        var pTopicTreeId = paste["#UID"];
+        var pSorting_Layer_1 = paste.SORTING_LAYER_1;
+        var pSorting_Layer_2 = paste.SORTING_LAYER_2;
+        var pSorting_Layer_3 = paste.SORTING_LAYER_3;
+        var pSorting_Layer_4 = paste.SORTING_LAYER_4;
+        var pSorting_Layer_5 = paste.SORTING_LAYER_5;
+        var pSorting_Layer_6 = paste.SORTING_LAYER_6;
+        pLayer = TopicTreeUtils.getLayer(pSorting_Layer_1, pSorting_Layer_2, pSorting_Layer_3, pSorting_Layer_4, pSorting_Layer_5, pSorting_Layer_6);
+        pLayerDeeper = TopicTreeUtils.getDeeperLayer(pSorting_Layer_1, pSorting_Layer_2, pSorting_Layer_3, pSorting_Layer_4, pSorting_Layer_5, pSorting_Layer_6);
+        cond = newWhere("TOPICTREE.ASSIGNEDTO", pTopicTreeId);
+    }
+
+
+    var maxSortingOneLayerDeeper = newSelect("max(" + pLayerDeeper + ")")
+                                                .from("TOPICTREE")
+                                                .where(cond)
+                                                .cell();
+
+    if(!maxSortingOneLayerDeeper || maxSortingOneLayerDeeper == "")
+    {
+        maxSortingOneLayerDeeper = 0;
+    }
+
+    var columns = ["TOPICTREEID"
+                    , "TOPIC"
+                    , "DESCRIPTION"
+                    , "ACTIVE"
+                    , pLayer
+                    , "USER_NEW"
+                    , "DATE_NEW"
+                    , "ASSIGNEDTO"];
+
+    var uid = isCut == true ? cTopicTreeId : util.getNewUUID();//new uuid is old uuid if cut, since we "move" the topic instead of copying
+    var values = [uid
+                    , cTopic
+                    , cDescription
+                    , cActive
+                    , eMath.addInt(maxSortingOneLayerDeeper, 1)
+                    , vars.get("$sys.user")
+                    , vars.get("$sys.date")
+                    , pTopicTreeId];
+
+
+    if(isCut)
+    {
+        _updateSortingValuesOfOtherTopics(cLayer, cOwnSortingValue, cAssignedTo);
+
+        db.deletes([newWhere("TOPICTREE.TOPICTREEID", cTopicTreeId).buildDeleteStatement()]);//delete before insert (duplicate id)
+    }
+
+    db.insertData("TOPICTREE", columns, null, values);
+
+    var stop = false
+    var topicTreeIdsToUpdate = [];
+    var subTopicsToDelete = [];
+    var topicTreeIds = [cTopicTreeId];
+    var oldToNewIdHelperObj = {};
+    oldToNewIdHelperObj[cTopicTreeId] = uid;
+    var subInserts = [];
+    //update child topics accordingly
+    while(stop == false)
+    {
+        topicTreeDatasets = newSelect(["TOPICTREE.TOPICTREEID"
+                                    , TopicTreeUtils.relevantSortingValueCaseWhen() + " as sortingValue"
+                                    , TopicTreeUtils.layerNameCaseWhen()
+                                    , "TOPICTREE.TOPIC"
+                                    , "TOPICTREE.DESCRIPTION"
+                                    , "TOPICTREE.ACTIVE"
+                                    , "TOPICTREE.ASSIGNEDTO"
+                                    , TopicTreeUtils.layerNumberCaseWhen() + " as layerNumber"])
+                                .from("TOPICTREE")
+                                .where("TOPICTREE.ASSIGNEDTO", topicTreeIds, SqlBuilder.IN())
+                                .orderBy("layerNumber, sortingValue")
+                                .table();
+
+        if(topicTreeDatasets && topicTreeDatasets.length > 0)
+        {
+            topicTreeIds = []
+            var subTopicId, subTopicRelevantSortingValue, subTopicRelevantSortingLayer, subTopic, subDescription, subActive, subAssignedTo;
+            for (let i = 0; i < topicTreeDatasets.length; i++)
+            {
+                [subTopicId, subTopicRelevantSortingValue, subTopicRelevantSortingLayer, subTopic, subDescription, subActive, subAssignedTo] = topicTreeDatasets[i];
+                if(subTopicId != values[0])//otherwise we would have a problem wehn copying to itself (duplicate)
+                {
+                    topicTreeIds.push(subTopicId);
+                    topicTreeIdsToUpdate.push(subTopicId);
+
+                    subColumns = ["TOPICTREEID"
+                        , "TOPIC"
+                        , "DESCRIPTION"
+                        , "ACTIVE"
+                        , "USER_NEW"
+                        , "DATE_NEW"
+                        , "ASSIGNEDTO"
+                        , subTopicRelevantSortingLayer];//relevant sorting value
+                    var newSubUid
+                    if(isCut == true)
+                    {
+                        newSubUid = subTopicId;
+                        subTopicsToDelete.push(subTopicId);
+                    }
+                    else
+                    {
+                        newSubUid = util.getNewUUID();
+                    }
+                    oldToNewIdHelperObj[subTopicId] = newSubUid;
+
+                    subValues = [newSubUid
+                            , subTopic
+                            , subDescription
+                            , subActive
+                            , vars.get("$sys.user")
+                            , vars.get("$sys.date")
+                            , oldToNewIdHelperObj[subAssignedTo]
+                            , subTopicRelevantSortingValue];
+
+                    var previousLayer = subTopicRelevantSortingLayer;
+                    var stopper = false;
+                    while(stopper == false)//fill in previous layersorting values, otherwise the move Actions won't work properly
+                    {   
+                        previousLayer = TopicTreeUtils.getPreviousLayerName(previousLayer);
+                        if(previousLayer != "SORTING_LAYER_0")
+                        {
+                            subColumns.push(previousLayer);
+                            subValues.push(String(-1));
+                        }
+                        else
+                        {
+                            stopper = true;
+                        }
+                    }
+                    subInserts.push(["TOPICTREE", subColumns, null, subValues]);
+                }
+            }
+        }
+        else
+        {
+            stop = true;
+        }
+    }
+
+    if(isCut && subTopicsToDelete)
+    {
+        db.deletes([newWhere("TOPICTREE.TOPICTREEID", subTopicsToDelete, SqlBuilder.IN()).buildDeleteStatement()]);//delete before insert (duplicate id)
+    }
+    if(subInserts && subInserts.length > 0)
+    {
+        //delete before insert (same uuid if cut)
+        db.inserts(subInserts);
+    }
+
+    neon.refreshAll();
+}
+
+function $TopicTreeMoveDirections(){}
+$TopicTreeMoveDirections.UP =                              function(){return "up"};
+$TopicTreeMoveDirections.DOWN =                            function(){return "down"};
+$TopicTreeMoveDirections.TOP =                             function(){return "top"};
+$TopicTreeMoveDirections.BOTTOM =                          function(){return "bottom"};
+
+function $TopicTreeConstants(){}
+$TopicTreeConstants.TOPTOPIC =                             function(){return "topTopic"};
\ No newline at end of file
diff --git a/process/migrate_themesAsTopics_serverProcess/documentation.adoc b/process/migrate_themesAsTopics_serverProcess/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..f83de406be323946725eeaf2afaaac6343832b78
--- /dev/null
+++ b/process/migrate_themesAsTopics_serverProcess/documentation.adoc
@@ -0,0 +1,25 @@
+= Theme Migration
+This process can be used to transform the existing Theme data of the old ADITO 5.0 implementation of the topic tree to the new datastructure to 
+make the data work with the current implementation.
+The original data keeps unchanged, this process doesn't delete anything!
+
+This process migrates to things:
+1. the HISTORY_THEME datasets to TOPICTREERELATION datasets
+2. the THEME datasets to TOPICTREE datasets
+
+1: The datastructe hasn't changed much, only difference being, that TOPICTREERELATION allows to link topics to more than just activities (object_type get's set accordingly)
+2: the topicTree sorting functions a little different before (6 sorting columns, the last one that's filled has to be the relevant one)
+    topics are still assigned another topic above it using  a column called ASSIGNEDTO.
+    Little example to make the whole thing more understandable:
+    TopicA:              SORTING_LAYER_1: 1;                                            ASSIGNEDTO: null
+        TopicAA:                            SORTING_LAYER_2: 1;                         ASSIGNEDTO: topicTreeIdOfTopicA
+        TopicAB:                            SORTING_LAYER_2: 2;                         ASSIGNEDTO: topicTreeIdOfTopicA
+        TopicAC:                            SORTING_LAYER_2: 3;                         ASSIGNEDTO: topicTreeIdOfTopicA
+                TopicACA:                                       SORTING_LAYER_3: 1;     ASSIGNEDTO: topicTreeIdOfTopicAC
+        TopicAD:                            SORTING_LAYER_2: 4;                         ASSIGNEDTO: topicTreeIdOfTopicA
+    TopicB:              SORTING_LAYER_1: 2;                                            ASSIGNEDTO: null
+    TopicC:              SORTING_LAYER_1: 3;                                            ASSIGNEDTO: null
+        TopicCA:                            SORTING_LAYER_2: 1;                         ASSIGNEDTO: topicTreeIdOfTopicC
+
+    KIND, REMINDER, REMINDER_SUBJECT, REMINDER_GROUP, REMINDER_ROLES, REMINDER_SILENT are all columns for functionality that's not (yet?) implemented, so those don't get migrated
+    -> altough it shouldn't be a problem to migrate them in the future, since no uuids get changed by this process
\ No newline at end of file
diff --git a/process/migrate_themesAsTopics_serverProcess/migrate_themesAsTopics_serverProcess.aod b/process/migrate_themesAsTopics_serverProcess/migrate_themesAsTopics_serverProcess.aod
new file mode 100644
index 0000000000000000000000000000000000000000..3190e8ba90ec30fbc5ddaa9044046d53dbee13bf
--- /dev/null
+++ b/process/migrate_themesAsTopics_serverProcess/migrate_themesAsTopics_serverProcess.aod
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
+  <name>migrate_themesAsTopics_serverProcess</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/process/migrate_themesAsTopics_serverProcess/documentation.adoc</documentation>
+  <process>%aditoprj%/process/migrate_themesAsTopics_serverProcess/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>
diff --git a/process/migrate_themesAsTopics_serverProcess/process.js b/process/migrate_themesAsTopics_serverProcess/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..52496b2230dc44fd3cc41656f834a8f7b8f1f7fd
--- /dev/null
+++ b/process/migrate_themesAsTopics_serverProcess/process.js
@@ -0,0 +1,221 @@
+import("system.eMath");
+import("TopicTree_lib");
+import("system.logging");
+import("system.db");
+import("Sql_lib");
+
+var pageSize = 500;//page because of potentially huge amount of data, you can increase/decrese this depending on you database
+
+//migrate HISTORY_THEME to TOPICTREERELATION
+var topicTreeRelation = newSelect(["HISTORY_THEMEID"
+                                , "HISTORY_ID"
+                                , "THEME"
+                                , "THEME_ID"
+                                , "DATE_EDIT"
+                                , "DATE_NEW"
+                                , "USER_NEW"
+                                , "USER_EDIT"])
+                        .from("HISTORY_THEME")
+                        .pageSize(pageSize)//page because of potentially huge amount of data
+                        .forEachPage(_migrateTopicTreeRelation);
+
+var topicTree = newSelect(["THEMEID"
+                            , "THEME"
+                            , "THEME_ID"
+                            , SqlBuilder.caseWhen(newWhere("THEME.ISACTIVE", true))
+                                        .then("1")
+                                        .elseValue("0")
+                            , "THEMESORT"
+                            , "USER_NEW"
+                            , "DATE_NEW"
+                            , "DATE_EDIT"
+                            , "USER_EDIT"
+                            , "DESCRIPTION"])
+                        .from("THEME")
+                        .orderBy("KIND, THEMESORT")
+                        .table();//here paging isn't easily implemented because of the tree structure, but it probably isn't needed anyway
+
+//migrate THEME to TOPICTREE
+_migrateTopicTree(topicTree);
+
+function _migrateTopicTreeRelation(pBatchData, pBatchNum)
+{
+    var statements = [];
+    for (var i = 0; i < pBatchData.length; i++)
+    {
+        var historyThemeId, history_id, theme, theme_Id, date_edit, date_new, user_new, user_edit;
+        [historyThemeId, history_id, theme, theme_Id, date_edit, date_new, user_new, user_edit] = pBatchData[i];
+        
+        var columns = ["TOPICTREERELATIONID"
+                        , "TOPICTREE_ID"
+                        , "OBJECT_ROWID"
+                        , "OBJECT_TYPE"
+                        , "USER_NEW"
+                        , "DATE_NEW"];
+        var values = [historyThemeId
+                        , theme_Id
+                        , history_id
+                        , "Activity"
+                        , user_new
+                        , date_new];
+        if (theme)//could be empty
+        {
+            columns.push("DESCRIPTION");
+            values.push(theme);
+        }
+        if (date_edit)//could be empty
+        {
+            columns.push("DATE_EDIT");
+            values.push(date_edit);
+        }
+        if (user_edit)//could be empty
+        {
+            columns.push("USER_EDIT");
+            values.push(user_edit);
+        }
+                    
+        statements.push(["TOPICTREERELATION", columns, null, values]);
+    }
+    if (statements.length > 0)
+    {
+        db.execute(statements);
+        logging.log(statements.length + " " + "Topic Relation Datasets have succesfully been migrated");
+    }
+}
+
+function _migrateTopicTree(pThemes)
+{
+    var statements = [];
+    var topicObj = {};
+    var assignedToPositions = {};
+    var topicsToLoopTrough = [];
+    for (let i = 0; i < pThemes.length; i++)
+    {
+        var themeId, theme, theme_id, isActive, themeSort, user_new, date_new, date_edit, user_edit, description;
+        [themeId, theme, theme_id, isActive, themeSort, user_new, date_new, date_edit, user_edit, description] = pThemes[i];
+        
+        topicObj[themeId] = {};
+        
+        topicObj[themeId]["sortingValue"] = themeSort;
+        topicObj[themeId]["insertHelper"] = {};
+        topicObj[themeId]["insertHelper"]["columns"] = [];
+        topicObj[themeId]["insertHelper"]["values"] = [];
+        topicObj[themeId]["insertHelper"]["columns"].push("TOPICTREEID");
+        topicObj[themeId]["insertHelper"]["values"].push(themeId);
+        topicObj[themeId]["insertHelper"]["columns"].push("TOPIC");
+        topicObj[themeId]["insertHelper"]["values"].push(theme);
+        topicObj[themeId]["insertHelper"]["columns"].push("ACTIVE");
+        topicObj[themeId]["insertHelper"]["values"].push(isActive);
+        topicObj[themeId]["insertHelper"]["columns"].push("USER_NEW");
+        topicObj[themeId]["insertHelper"]["values"].push(user_new);
+        topicObj[themeId]["insertHelper"]["columns"].push("DATE_NEW");
+        topicObj[themeId]["insertHelper"]["values"].push(date_new);
+        
+        if(theme_id && Utils.isNotNullOrEmpty(theme_id))
+        {
+            topicObj[themeId]["assignedTo"] = theme_id;
+            topicsToLoopTrough.push(themeId);
+            topicObj[themeId]["insertHelper"]["columns"].push("ASSIGNEDTO");
+            topicObj[themeId]["insertHelper"]["values"].push(theme_id);
+        }
+        else
+        {
+            topicObj[themeId]["assignedTo"] = $TopicTreeConstants.TOPTOPIC();
+            topicObj[themeId]["layer"] = "SORTING_LAYER_1";
+        }
+        if(!assignedToPositions.hasOwnProperty(topicObj[themeId]["assignedTo"]))
+        {
+            assignedToPositions[topicObj[themeId]["assignedTo"]] = []
+        }
+        assignedToPositions[topicObj[themeId]["assignedTo"]].push({"topicId": themeId, "themeSort": themeSort})
+            
+        if (description)//could be empty
+        {
+            topicObj[themeId]["insertHelper"]["columns"].push("DESCRIPTION");
+            topicObj[themeId]["insertHelper"]["values"].push(description);
+        }
+        if (date_edit)//could be empty
+        {
+            topicObj[themeId]["insertHelper"]["columns"].push("DATE_EDIT");
+            topicObj[themeId]["insertHelper"]["values"].push(date_edit);
+        }
+        if (user_edit)//could be empty
+        {
+            topicObj[themeId]["insertHelper"]["columns"].push("USER_EDIT");
+            topicObj[themeId]["insertHelper"]["values"].push(user_edit);
+        }
+        
+    }
+    var stop = false;
+    while(!stop)
+    {
+        for (let i = 0; i < topicsToLoopTrough.length; i++)
+        {
+            var topicId = topicsToLoopTrough[i];
+            var topicElement = topicObj[topicId];
+            var assignedTo = topicElement["assignedTo"];
+            
+            if(topicObj[assignedTo].hasOwnProperty("layer"))
+            {
+                var deepestLayer = TopicTreeUtils.getDeeperLayerFromLayerName(topicObj[assignedTo]["layer"]);
+                topicObj[topicId]["layer"] = deepestLayer;
+                topicsToLoopTrough.splice(i, 1);
+                i = i-1;
+                
+                var previousLayer = deepestLayer;    
+                var stopper = false;
+                while(stopper == false)//fill in previous layerSorting values, otherwise the move Actions won't work properly
+                {
+                    previousLayer = TopicTreeUtils.getPreviousLayerName(previousLayer);
+                    if(previousLayer != "SORTING_LAYER_0")
+                    {
+                        topicObj[themeId]["insertHelper"]["columns"].push(previousLayer);
+                        topicObj[themeId]["insertHelper"]["values"].push(-1);//value doesn't matter here
+                    }
+                    else
+                    {
+                        stopper = true;
+                    }
+
+                }
+            }
+            
+            if(topicsToLoopTrough.length == 0)
+            {
+                stop = true;
+            }
+            
+        }
+    }
+    
+    //sort the topics for every assignee
+    for (let assignee in assignedToPositions)
+    {
+        assignedToPositions[assignee].sort(function (a, b) {
+            return a.themeSort.localeCompare(b.themeSort);
+        });
+    }
+    
+    //push updatestatements for every topic
+    for (let assignee in assignedToPositions)
+    {
+        for (let i = 0; i < assignedToPositions[assignee].length; i++)
+        {
+            var ownTopicId = assignedToPositions[assignee][i]["topicId"];
+            var topicTreeColumns = topicObj[ownTopicId]["insertHelper"]["columns"];
+            var topicTreeValues= topicObj[ownTopicId]["insertHelper"]["values"];
+            
+            //i + 1 instead of the actual sortingValue (topicObj[ownTopicId]["sortingValue"]) since originally those didn't have to be successive (0, 3, 4, 5, 7, 9, ...)
+            //but now we them in a successive order (1, 2, 3, 4, 5, 6, ...) because of the how our move position actions work in the administration of the tree
+            //we don't change the original order tho, since we used the stored sortingValue to sort said array that we are now looping trough
+            var sortingValue = eMath.addInt(i, 1);
+            
+            topicTreeColumns.push(topicObj[ownTopicId]["layer"]);
+            topicTreeValues.push(sortingValue);
+            statements.push(["TOPICTREE", topicTreeColumns, null, topicTreeValues]); 
+        }
+    }
+    db.execute(statements);
+    logging.log(statements.length + " " + "Topic Tree Datasets have succesfully been migrated");
+    
+}
\ No newline at end of file