diff --git a/.aditoprj/ignoredScanServiceTasks.json b/.aditoprj/ignoredScanServiceTasks.json
index 876fa8e77553251308a11423050ca464a547eba2..bad77c8c7df0345b93811fa627e1ca06bf884517 100644
--- a/.aditoprj/ignoredScanServiceTasks.json
+++ b/.aditoprj/ignoredScanServiceTasks.json
@@ -1,11 +1,5 @@
 {
   "entries": [
-    {
-      "target": "aliasDefinition/Data_alias/Data_alias.aod",
-      "line": -1,
-      "description": "The table \"AB_LOGHISTORY\" has no primary key [65]",
-      "groupName": "nb-tasklist-warning"
-    },
     {
       "target": "aliasDefinition/Data_alias/Data_alias.aod",
       "line": -1,
@@ -41,6 +35,36 @@
       "line": -1,
       "description": "There is no index for the column \"DEPLOYMENT_ID\" in the table \"DATABASECHANGELOG\" [59]",
       "groupName": "nb-tasklist-warning"
+    },
+    {
+      "target": "neonView/SalesprojectAnalysesPhases_view/SalesprojectAnalysesPhases_view.aod",
+      "line": -1,
+      "description": "Dead Reference \"#EXTENSION.Phase_filterExtention.Phase_filterExtention#TEXT\" located in: PhaseFunnelChart/defaultGroupFields/#EXTENSION.Phase_filterExtention.Phase_filterExtention#TEXT [67]",
+      "groupName": "nb-tasklist-warning"
+    },
+    {
+      "target": "neonView/SalesprojectAnalysesPhases_view/SalesprojectAnalysesPhases_view.aod",
+      "line": -1,
+      "description": "Dead Reference \"#EXTENSION.Phase_filterExtention.Phase_filterExtention#TEXT\" located in: PhasePieChart/defaultGroupFields/#EXTENSION.Phase_filterExtention.Phase_filterExtention#TEXT [67]",
+      "groupName": "nb-tasklist-warning"
+    },
+    {
+      "target": "neonView/SalesprojectAnalysesPhases_view/SalesprojectAnalysesPhases_view.aod",
+      "line": -1,
+      "description": "Dead Reference \"#EXTENSION.Phase_filterExtention.Phase_filterExtention#TEXT\" located in: PhasePyramidChart/defaultGroupFields/#EXTENSION.Phase_filterExtention.Phase_filterExtention#TEXT [67]",
+      "groupName": "nb-tasklist-warning"
+    },
+    {
+      "target": "neonView/SalesprojectConversionRate_view/SalesprojectConversionRate_view.aod",
+      "line": -1,
+      "description": "Dead Reference \"#EXTENSION.Month.Month#NUMBER\" located in: TreeTable/defaultGroupFields/#EXTENSION.Month.Month#NUMBER [67]",
+      "groupName": "nb-tasklist-warning"
+    },
+    {
+      "target": "neonView/SalesprojectConversionRate_view/SalesprojectConversionRate_view.aod",
+      "line": -1,
+      "description": "Dead Reference \"#EXTENSION.Month.Month#NUMBER\" located in: dynamicChart/defaultGroupFields/#EXTENSION.Month.Month#NUMBER [67]",
+      "groupName": "nb-tasklist-warning"
     }
   ]
 }
\ No newline at end of file
diff --git a/.aditoprj/project.version b/.aditoprj/project.version
index b4940e7b136a1e7dc45d5afe6100e622a0deb61d..94b3c6aab89bbcc9e3c5433f62e4fa30fa7bee5b 100644
--- a/.aditoprj/project.version
+++ b/.aditoprj/project.version
@@ -1,3 +1,3 @@
 #This file is generated by ADITO designer. Do NOT delete or modify!
-#Tue Sep 08 15:42:02 CEST 2020
-version=6.2.0
+#Thu Dec 17 10:59:19 CET 2020
+version=6.2.1
diff --git a/.liquibase/Data_alias/basic/2019.3.2/reworkDbIndexes.xml b/.liquibase/Data_alias/basic/2019.3.2/reworkDbIndexes.xml
index 62c9c29573a17ca606e5c08d2f5ed680729208ae..c1d76b19cd28910c8be6ee4cb90f1a5a8b1e5541 100644
--- a/.liquibase/Data_alias/basic/2019.3.2/reworkDbIndexes.xml
+++ b/.liquibase/Data_alias/basic/2019.3.2/reworkDbIndexes.xml
@@ -10,10 +10,10 @@
             <column name="ACTIVITY_ID"/>
         </createIndex>
     </changeSet>
-    <changeSet id="e7527e13-7546-4fa6-ac95-5cc3e1f27056" author="s.listl" dbms="!oracle">
+    <changeSet id="e7527e13-7546-4fa6-ac95-5cc3e1f27056" author="s.listl">
         <preConditions onFail="MARK_RAN">
             <not>
-                <changeSetExecuted id="5a0b62f4-6770-454c-9a0e-d60ca16596dd" author="j.goderbauer"/>
+                <changeSetExecuted id="5a0b62f4-6770-454c-9a0e-d60ca16596dd" author="j.goderbauer" changeLogFile=".liquibase/Data_alias/basic/2019.3.2/reworkDbIndexes.xml"/>
             </not>
         </preConditions>
         <createIndex indexName="IDX_TICKET_TASK_ID" tableName="TICKET">
diff --git a/.liquibase/Data_alias/basic/2020.1.2/AlterDatatypeOfKeyColumnsToChar/alter_DocumentTemplatePlaceOfUseDatatype.xml b/.liquibase/Data_alias/basic/2020.1.2/AlterDatatypeOfKeyColumnsToChar/alter_DocumentTemplatePlaceOfUseDatatype.xml
index 372497186413416a3a27831bd933c08792bbd0d2..a6e5c99db425623c89a8aaa4446df2b04a77fdb0 100644
--- a/.liquibase/Data_alias/basic/2020.1.2/AlterDatatypeOfKeyColumnsToChar/alter_DocumentTemplatePlaceOfUseDatatype.xml
+++ b/.liquibase/Data_alias/basic/2020.1.2/AlterDatatypeOfKeyColumnsToChar/alter_DocumentTemplatePlaceOfUseDatatype.xml
@@ -15,7 +15,7 @@
     
     <changeSet dbms="!derby" author="b.ulrich" id="85ba6a61-9318-4118-ac4c-e33730f6581d">
         <dropPrimaryKey tableName="DOCUMENTTEMPLATE" constraintName="PK_DOCUMENTTEMPLATE_DOCUMENTTEMPLATEID" dropIndex="true"/>
-        <dropNotNullConstraint tableName="DOCUMENTTEMPLATE" columnName="DOCUMENTTEMPLATEID"/>
+        <dropNotNullConstraint tableName="DOCUMENTTEMPLATE" columnName="DOCUMENTTEMPLATEID" columnDataType="VARCHAR(36)"/>
         <modifyDataType tableName="DOCUMENTTEMPLATE" columnName="DOCUMENTTEMPLATEID" newDataType="CHAR(36)"/>
         <addNotNullConstraint columnName="DOCUMENTTEMPLATEID" tableName="DOCUMENTTEMPLATE" columnDataType="CHAR(36)" validate="true"/>
         <addPrimaryKey tableName="DOCUMENTTEMPLATE" constraintName="PK_DOCUMENTTEMPLATE_DOCUMENTTEMPLATEID" columnNames="DOCUMENTTEMPLATEID"/>
diff --git a/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/changelog_knowledgeManagement.xml b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/changelog_knowledgeManagement.xml
new file mode 100644
index 0000000000000000000000000000000000000000..06a974df46bd976884bc388f86c95285a26023c8
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/changelog_knowledgeManagement.xml
@@ -0,0 +1,14 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <include file="struct/knowledgeManagement_table.xml" relativeToChangelogFile="true" />  
+    <include file="struct/knowledgeTagModeration_table.xml" relativeToChangelogFile="true" />  
+    <include file="struct/knowledgeDiscussion_table.xml" relativeToChangelogFile="true" />  
+    <include file="struct/knowledgeGitInterface_table.xml" relativeToChangelogFile="true" />  
+    <include file="struct/knowledgeLink_table.xml" relativeToChangelogFile="true" /> 
+    <include file="data/knowledgeKeywords.xml" relativeToChangelogFile="true" />  
+    <include file="struct/create_KnowledgeRoles.xml" relativeToChangelogFile="true" />
+    <include file="struct/knowledgeTag_table.xml" relativeToChangelogFile="true" />
+    <include file="struct/knowledgeTagLink_table.xml" relativeToChangelogFile="true" />
+    <include file="data/knowledgeTag.xml" relativeToChangelogFile="true" />
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/data/blobs/git.css b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/data/blobs/git.css
new file mode 100644
index 0000000000000000000000000000000000000000..cb1b3ff2ef344a20d2a636075ad42db25cc9482c
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/data/blobs/git.css
@@ -0,0 +1,450 @@
+/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
+/* Uncomment @import statement below to use as custom stylesheet */
+/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
+audio,canvas,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+script{display:none!important}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+a{background:transparent}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+img,object,svg{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+.center{margin-left:auto;margin-right:auto}
+.stretch{width:100%}
+.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:none}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite::before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}
+table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
+table thead,table tfoot{background:#f7f8f7}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
+.clearfix::after,.float-group::after{clear:both}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
+*:not(pre)>code.nobreak{word-wrap:normal}
+*:not(pre)>code.nowrap{white-space:nowrap}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
+em em{font-style:normal}
+strong strong{font-weight:400}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menuref{color:#000}
+.menuseq b:not(.caret),.menuref{font-weight:inherit}
+.menuseq{word-spacing:-.02em}
+.menuseq b.caret{font-size:1.25em;line-height:.8}
+.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
+b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
+b.button::before{content:"[";padding:0 3px 0 2px}
+b.button::after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;/*max-width:62.5em;*/*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
+#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
+#content{margin-top:1.25em}
+#content::before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
+#header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span::before{content:"\00a0\2013\00a0"}
+#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark::before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber::after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc li{line-height:1.3334;margin-top:.3334em}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+@media screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
+@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}
+#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+#content{margin-bottom:.625em}
+.sect1{padding-bottom:.625em}
+@media screen and (min-width:768px){#content{margin-bottom:1.25em}
+.sect1{padding-bottom:1.25em}}
+.sect1:last-child{padding-bottom:0}
+.sect1+.sect1{border-top:1px solid #efefed}
+#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
+.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
+.sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
+.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
+.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
+@media screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
+@media screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
+.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
+.listingblock pre.highlightjs{padding:0}
+.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.listingblock>.content{position:relative}
+.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
+.listingblock:hover code[data-lang]::before{display:block}
+.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:#999}
+.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
+table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
+table.pyhltable td.code{padding-left:.75em;padding-right:0}
+pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
+pre.pygments .lineno{display:inline-block;margin-right:.25em}
+table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
+.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
+.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
+.quoteblock .quoteblock blockquote::before{display:none}
+.verseblock{margin:0 1em 1.25em}
+.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract{margin:0 1em 1.25em;display:block}
+.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
+.quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{word-spacing:0;line-height:1.6}
+.quoteblock.abstract blockquote::before,.quoteblock.abstract p::before{display:none}
+table.tableblock{max-width:100%;border-collapse:separate}
+p.tableblock:last-child{margin-bottom:0}
+td.tableblock>.content{margin-bottom:-1.25em}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
+table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
+table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
+table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
+table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
+table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
+table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot,table.frame-ends{border-width:1px 0}
+table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd){background:#f8f8f7}
+table.stripes-none tr,table.stripes-odd tr:nth-of-type(even){background:none}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+td>div.verse{white-space:pre}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
+ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
+ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
+ul.unstyled,ol.unstyled{margin-left:0}
+ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
+ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
+ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
+ul.inline>li{margin-left:1.25em}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
+td.hdlist1{font-weight:bold;padding-bottom:1.25em}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
+.colist td:not([class]):first-child img{max-width:none}
+.colist td:not([class]):last-child{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
+.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none;display:inline-block}
+a.image object{pointer-events:none}
+sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
+sup.footnote a,sup.footnoteref a{text-decoration:none}
+sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
+#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background-color:#00fafa}
+.black{color:#000}
+.black-background{background-color:#000}
+.blue{color:#0000bf}
+.blue-background{background-color:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background-color:#fa00fa}
+.gray{color:#606060}
+.gray-background{background-color:#7d7d7d}
+.green{color:#006000}
+.green-background{background-color:#007d00}
+.lime{color:#00bf00}
+.lime-background{background-color:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background-color:#7d0000}
+.navy{color:#000060}
+.navy-background{background-color:#00007d}
+.olive{color:#606000}
+.olive-background{background-color:#7d7d00}
+.purple{color:#600060}
+.purple-background{background-color:#7d007d}
+.red{color:#bf0000}
+.red-background{background-color:#fa0000}
+.silver{color:#909090}
+.silver-background{background-color:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background-color:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background-color:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background-color:#fafa00}
+span.icon>.fa{cursor:default}
+a span.icon>.fa{cursor:inherit}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]::after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
+h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
+p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+@page{margin:1.25cm .75cm}
+@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+html{font-size:80%}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]::after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
+thead{display:table-header-group}
+svg{max-width:100%}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
+body.book #header .details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span::before{content:none!important}
+body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
+.listingblock code[data-lang]::before{display:block}
+#footer{padding:0 .9375em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
+.sect1{padding:0!important}
+.sect1+.sect1{border:0}
+#footer{background:none}
+#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
+@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
+
+.topcorner {
+font-family: Calibri, Verdana;
+font-size: 16px;
+float:right;
+top:100px;
+right: 100px;
+width: 300px;
+height: auto;
+background-color: #EBEBEB;
+border-width: 1px;
+border-color: #666666;
+border-style: dotted;
+padding: 3px;
+box-shadow: 3px 3px 7px #AAAAAA;
+}
+
+.topcorner p {
+	font-family:inherit;font-weight:400;font-size:1em;text-rendering:optimizeLegibility
+}
+
+.stitletext {
+/*font-family: Calibri, Verdana;*/
+color:#ba3925;
+font-size: 30px;
+padding-top: 4px;
+padding-bottom: 4px;
+border-bottom: medium solid #000000;
+font-weight: bold;
+}
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/data/blobs/standard.css b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/data/blobs/standard.css
new file mode 100644
index 0000000000000000000000000000000000000000..3ca3c40a41e0fa4fcdd58ee461b200b1460da10d
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/data/blobs/standard.css
@@ -0,0 +1,138 @@
+h1 {
+font-family: Calibri, Verdana;
+color: #E60048;
+font-size: 25px;
+}
+
+h2 {
+font-family: Calibri, Verdana;
+color: #E60048;
+font-size: 20px;
+}
+
+h3 {
+font-family: Calibri, Verdana;
+font-style: italic;
+color: #E60048;
+font-size: 20px;
+}
+
+h4 {
+font-family: Calibri, Verdana;
+font-style: italic;
+color: #0095B8;
+font-size: 20px;
+}
+
+div {
+font-family: Calibri, Verdana;
+color: #000000;
+font-size: 16px;
+}
+
+p {
+font-family: Calibri, Verdana;
+color: #000000;
+font-size: 18px;
+}
+
+li {
+font-family: Calibri, Verdana;
+color: #000000;
+font-size: 18px;
+}
+
+hr {
+	border: 0;
+	height: 1px;
+	background-image: linear-gradient(to right, #22BBFF, #0095B8, #22BBFF);
+}
+
+table {
+	border-collapse: collapse;
+}
+
+tr:first-child {
+	background-color: #8EE1FF;
+}
+
+table, th, td {
+   border: 1px solid #0095B8;
+}
+
+.stitletext {
+font-family: Calibri, Verdana;
+font-size: 30px;
+padding-top: 4px;
+padding-bottom: 4px;
+color: #E60048;
+border-bottom: medium dotted #0095B8;
+font-weight: bold;
+}
+
+.proptext {
+font-family: Calibri, Verdana;
+font-size: 16px;
+padding-top: 2px;
+padding-bottom: 2px;
+color: #E60048;
+font-weight: bold;
+}
+
+.liketext {
+font-family: Calibri, Verdana;
+font-size: 18px;
+padding-top: 2px;
+padding-bottom: 2px;
+color: #e50047;
+font-weight: bold;
+}
+
+.hashtag {
+font-family: Calibri, Verdana;
+font-size: 12px;
+font-style: italic;
+color: #666666;
+}
+
+.personas {
+font-family: Calibri, Verdana;
+font-size: 12px;
+color: #666666;
+font-weight: bold;
+}
+
+.topcorner {
+font-family: Calibri, Verdana;
+font-size: 16px;
+float:right;
+top:100px;
+right: 100px;
+width: 300px;
+height: auto;
+background-color: #EBEBEB;
+border-width: 1px;
+border-color: #666666;
+border-style: dotted;
+padding: 3px;
+box-shadow: 3px 3px 7px #AAAAAA;
+}
+
+.amenub {
+color: #0095B8;
+text-decoration: underline;}
+
+.processDesc {
+float:left;
+}
+
+.mainDiv {
+	width:100%;
+	height:100%;
+}
+
+.businessProcess {
+	margin-top:30px;
+	width:100%;
+	height:100%;
+}
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/data/knowledgeKeywords.xml b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/data/knowledgeKeywords.xml
new file mode 100644
index 0000000000000000000000000000000000000000..51f7d6b6984d86786ebf154e20c76b05f996726c
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/data/knowledgeKeywords.xml
@@ -0,0 +1,87 @@
+<?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="e.pollinger" id="6c1bb89e-60db-4a50-ba77-c81a8ec82d2c">
+        <!-- KEYWORD ENTRIES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+        <!-- Keywords for discussion status -->
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="DISCUSSIONACTIVE"/>
+            <column name="KEYID" value="ACTIVE"/>
+            <column name="TITLE" value="Active"/>
+            <column name="CONTAINER" value="DiscussionStatus"/>
+            <column name="SORTING" valueNumeric="1"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="DISCUSSIONCLOSED"/>
+            <column name="KEYID" value="CLOSED"/>
+            <column name="TITLE" value="Closed"/>
+            <column name="CONTAINER" value="DiscussionStatus"/>
+            <column name="SORTING" valueNumeric="2"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+        </insert>
+        <!-- Keywords for knowledge type -->
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="KNOWLEDGEBASE"/>
+            <column name="KEYID" value="KNOWLEDGEBASE"/>
+            <column name="TITLE" value="Knowledgebase"/>
+            <column name="CONTAINER" value="KnowledgeType"/>
+            <column name="SORTING" valueNumeric="1"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="EDITORIAL"/>
+            <column name="KEYID" value="EDITORIAL"/>
+            <column name="TITLE" value="Editorial"/>
+            <column name="CONTAINER" value="KnowledgeType"/>
+            <column name="SORTING" valueNumeric="2"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+        </insert>
+        <!-- Keywords for publishing level -->
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="INTERNAL"/>
+            <column name="KEYID" value="INTERNAL"/>
+            <column name="TITLE" value="Internal"/>
+            <column name="CONTAINER" value="KnowledgePublishLevel"/>
+            <column name="SORTING" valueNumeric="1"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="PARTNER"/>
+            <column name="KEYID" value="PARTNER"/>
+            <column name="TITLE" value="Partner"/>
+            <column name="CONTAINER" value="KnowledgePublishLevel"/>
+            <column name="SORTING" valueNumeric="2"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ENTRY">
+            <column name="AB_KEYWORD_ENTRYID" value="PUBLIC"/>
+            <column name="KEYID" value="PUBLIC"/>
+            <column name="TITLE" value="Public"/>
+            <column name="CONTAINER" value="KnowledgePublishLevel"/>
+            <column name="SORTING" valueNumeric="3"/>
+            <column name="ISACTIVE" valueNumeric="1"/>
+        </insert>
+        <!-- KEYWORD ATTRIBUTES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+        <insert tableName="AB_KEYWORD_ATTRIBUTE">
+            <column name="AB_KEYWORD_ATTRIBUTEID" value="b03f93a2-3b87-4a98-b3f9-9ed2358abdfe"/>
+            <column name="NAME" value="contentCssStylesheet"/>
+            <column name="KIND" value="LONG_CHAR_VALUE"/>
+            <column name="CONTAINER" value="KnowledgeType"/>
+        </insert>
+        <!-- KEYWORD ATTRIBUTE RELATIONS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+        <!-- Knowledge type stylesheets-->
+        <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+            <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="d65d9988-2a50-42ed-8235-e1073d7a035e"/>
+            <column name="AB_KEYWORD_ENTRY_ID" value="KNOWLEDGEBASE"/>
+            <column name="AB_KEYWORD_ATTRIBUTE_ID" value="b03f93a2-3b87-4a98-b3f9-9ed2358abdfe"/>
+            <column name="LONG_CHAR_VALUE" valueClobFile="blobs/standard.css"/>
+        </insert>
+        <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+            <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="5c8293eb-2ea2-4de3-a4eb-40e1785c9785"/>
+            <column name="AB_KEYWORD_ENTRY_ID" value="EDITORIAL"/>
+            <column name="AB_KEYWORD_ATTRIBUTE_ID" value="b03f93a2-3b87-4a98-b3f9-9ed2358abdfe"/>
+            <column name="LONG_CHAR_VALUE" valueClobFile="blobs/git.css"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/data/knowledgeTag.xml b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/data/knowledgeTag.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4a17a2ef636b13b4149cd96ed23af6735cc726f0
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/data/knowledgeTag.xml
@@ -0,0 +1,10 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="e.pollinger" id="9c1bb89e-60db-4a50-ba77-c81a8ec82d2c">
+        <insert tableName="KNOWLEDGETAG">
+            <column name="KNOWLEDGETAGID" value="9c1bb89e-60db-4a50-ba77-c81a8ec82d2c"/>
+            <column name="TAG" value="News"/>
+        </insert>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/create_KnowledgeRoles.xml b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/create_KnowledgeRoles.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1987399adb221168427363164d365eb6e183c5c2
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/create_KnowledgeRoles.xml
@@ -0,0 +1,16 @@
+<?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="f.adler" id="eea7595b-3908-449b-8976-6e822aa1923c">
+        <createTable tableName="KNOWLEDGEROLES">
+            <column name="KNOWLEDGEROLESID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_KNOWLEDGEROLES_KNOWLEDGEROLESID"/>
+            </column>
+            <column name="KNOWLEDGEMANAGEMENT_ID" type="CHAR(36)"/>
+            <column name="ROLENAME" type="VARCHAR(100)"/>
+        </createTable>
+        <createIndex tableName="KNOWLEDGEROLES" indexName="IDX_KNOWLEDGEROLES_KM_ID">
+            <column name="KNOWLEDGEMANAGEMENT_ID"/>
+        </createIndex>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeDiscussion_table.xml b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeDiscussion_table.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0f3de5603a81da59cc30743b70c1b38bd1ccfbb0
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeDiscussion_table.xml
@@ -0,0 +1,23 @@
+<?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="e.pollinger" id="1261195c-ffc1-4abb-a31f-0732823ee0cb">
+        <createTable tableName="KNOWLEDGEDISCUSSION">
+            <column name="KNOWLEDGEDISCUSSIONID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_KNOWLEDGEDISCUSSION_KNOWLEDGEDISCUSSIONID"/>
+            </column>
+            <column name="KNOWLEDGEMANAGEMENT_ID" type="CHAR(36)"></column>
+            <column name="DATE_NEW" type="DATETIME2"/>
+            <column name="DATE_EDIT" type="DATETIME2"/>
+            <column name="USER_NEW" type="NVARCHAR(50)"/>
+            <column name="USER_EDIT" type="NVARCHAR(50)"/>
+            <column name="STATUS" type="VARCHAR(36)"/>
+            <column name="AUTHOR" type="NVARCHAR(50)"/>
+            <column name="DISCUSSIONTEXT" type="LONGTEXT"/>
+            <column name="PARENTENTRY" type="CHAR(36)"/>
+        </createTable>
+        <createIndex tableName="KNOWLEDGEDISCUSSION" indexName="IDX_KNOWLEDGEDISCUSSION_KM_ID">
+            <column name="KNOWLEDGEMANAGEMENT_ID"/>
+        </createIndex>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeGitInterface_table.xml b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeGitInterface_table.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8440cd20fdf2743eb59de8bfee555457cdb59a4b
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeGitInterface_table.xml
@@ -0,0 +1,17 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="e.pollinger" id="9e24c875-c592-4839-94aa-3de4269b6fe7">
+        <createTable tableName="KNOWLEDGEGITINTERFACE">
+            <column name="KNOWLEDGEGITINTERFACEID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_KNOWLEDGEGITINTERFACE_KNOWLEDGEGITINTERFACEID"/>
+            </column>
+            <column name="GITCOMMIT" type="NVARCHAR(200)"/>
+            <column name="SYSTEMNAME" type="NVARCHAR(50)"/>              
+            <column name="DATE_NEW" type="DATETIME2"/>
+            <column name="DATE_EDIT" type="DATETIME2"/>
+            <column name="USER_NEW" type="NVARCHAR(50)"/>
+            <column name="USER_EDIT" type="NVARCHAR(50)"/>
+        </createTable>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeLink_table.xml b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeLink_table.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f600fb7e878088e0b6fa325a68c5e8dab3a292f9
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeLink_table.xml
@@ -0,0 +1,21 @@
+<?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="e.pollinger" id="bee4e42e-9103-4464-849e-59d8b11c542e">
+        <createTable tableName="KNOWLEDGELINK">
+            <column name="KNOWLEDGELINKID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_KNOWLEDGELINK_KNOWLEDGELINKID"/>
+            </column>
+            <column name="KNOWLEDGEMANAGEMENT_ID" type="CHAR(36)"></column>
+            <column name="DATE_NEW" type="DATETIME2"/>
+            <column name="DATE_EDIT" type="DATETIME2"/>
+            <column name="USER_NEW" type="NVARCHAR(50)"/>
+            <column name="USER_EDIT" type="NVARCHAR(50)"/>
+            <column name="ROW_ID" type="CHAR(36)"/>
+            <column name="OBJECT_TYPE" type="NVARCHAR(100)"/>
+        </createTable>
+        <createIndex tableName="KNOWLEDGELINK" indexName="IDX_KNOWLEDGELINK_KM_ID">
+            <column name="KNOWLEDGEMANAGEMENT_ID"/>
+        </createIndex>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeManagement_table.xml b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeManagement_table.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ebe0b76822597e70e516335505e6de25c7c85827
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeManagement_table.xml
@@ -0,0 +1,29 @@
+<?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="e.pollinger" id="9a0aaba2-c114-4648-ab1e-15acf489f19d">
+        <createTable tableName="KNOWLEDGEMANAGEMENT">
+            <column name="KNOWLEDGEMANAGEMENTID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_KNOWLEDGEMANAGEMENT_KNOWLEDGEMANAGEMENTID"/>
+            </column>
+            <column name="AUTHOR_CONTACT_ID" type="CHAR(36)"></column>
+            <column name="RESPONSIBLE_CONTACT_ID" type="CHAR(36)"></column>
+            <column name="USER_NEW" type="NVARCHAR(63)"></column>
+            <column name="DATE_NEW" type="DATETIME2"></column>
+            <column name="USER_EDIT" type="NVARCHAR(63)"></column>
+            <column name="DATE_EDIT" type="DATETIME2"></column>
+            <column name="TITLE" type="NVARCHAR(255)"></column>
+            <column name="CONTENT" type="LONGTEXT"></column>
+            <column name="CONTENTDECODED" type="LONGTEXT"></column>
+            <column name="PUBLISH" type="VARCHAR(36)"></column>
+            <column name="TYPE" type="VARCHAR(36)"></column>
+        </createTable>
+        
+        <createIndex tableName="KNOWLEDGEMANAGEMENT" indexName="IDX_KNOWLEDGEMANAGEMENT_TITLE">
+            <column name="TITLE"/>
+        </createIndex>
+        <createIndex tableName="KNOWLEDGEMANAGEMENT" indexName="IDX_KNOWLEDGEMANAGEMENT_TYPE">
+            <column name="TYPE"/>
+        </createIndex>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeTagLink_table.xml b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeTagLink_table.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ba1e74c9fcbbf6a4abe6098fcf2757b76fb5c67b
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeTagLink_table.xml
@@ -0,0 +1,23 @@
+<?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="e.pollinger" id="dc0b71e9-616b-4b5a-ad74-1725f0278a15">
+        <createTable tableName="KNOWLEDGETAGLINK">
+            <column name="KNOWLEDGETAGLINKID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_KNOWLEDGETAGLINK_KNOWLEDGETAGLINKID"/>
+            </column>
+            <column name="KNOWLEDGETAG_ID" type="CHAR(36)"/>
+            <column name="KNOWLEDGEMANAGEMENT_ID" type="CHAR(36)"/>
+            <column name="DATE_NEW" type="TIMESTAMP"/>
+            <column name="DATE_EDIT" type="TIMESTAMP"/>
+            <column name="USER_NEW" type="nvarchar(50)"/>
+            <column name="USER_EDIT" type="nvarchar(50)"/>
+        </createTable>
+        <createIndex tableName="KNOWLEDGETAGLINK" indexName="IDX_KNOWLEDGETAGLINK_TAG_ID">
+            <column name="KNOWLEDGETAG_ID"/>
+        </createIndex>
+        <createIndex tableName="KNOWLEDGETAGLINK" indexName="IDX_KNOWLEDGETAGLINK_KM_ID">
+            <column name="KNOWLEDGEMANAGEMENT_ID"/>
+        </createIndex>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeTagModeration_table.xml b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeTagModeration_table.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e15b847360533f7a523e13c747ef200ef325be1b
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeTagModeration_table.xml
@@ -0,0 +1,13 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="e.pollinger" id="50ea4ad8-c864-489e-a121-92f4738e0a7f">
+        <createTable tableName="KNOWLEDGEMANAGEMENTTAGMODERATION">
+            <column name="KNOWLEDGEMANAGEMENTTAGMODERATIONID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_TAGMODERATION_KNOWLEDGEMANAGEMENTTAGMODERATIONID"/>
+            </column>
+            <column name="AB_ATTRIBUTE_ID" type="CHAR(36)"></column>
+            <column name="STATUS" type="CHAR(36)"/>
+        </createTable>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeTag_table.xml b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeTag_table.xml
new file mode 100644
index 0000000000000000000000000000000000000000..aa0b15c81bba60d40c1310404dffc378bba1657f
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/Knowledgemanagement/struct/knowledgeTag_table.xml
@@ -0,0 +1,17 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <changeSet author="e.pollinger" id="95eabecf-82f8-49c8-87b2-594c338d3c15">
+        <createTable tableName="KNOWLEDGETAG">
+            <column name="KNOWLEDGETAGID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_KNOWLEDGETAG_KNOWLEDGETAGID"/>
+            </column>
+            <column name="TAG" type="VARCHAR(50)"/>
+            <column name="STATUS" type="CHAR(36)"/>
+            <column name="DATE_NEW" type="TIMESTAMP"/>
+            <column name="DATE_EDIT" type="TIMESTAMP"/>
+            <column name="USER_NEW" type="nvarchar(50)"/>
+            <column name="USER_EDIT" type="nvarchar(50)"/>
+        </createTable>
+    </changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.2.2/MSTeams/changelog.xml b/.liquibase/Data_alias/basic/2020.2.2/MSTeams/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d4e6ad9f3d5af78d0f0bb7ec2061aee18715067f
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/MSTeams/changelog.xml
@@ -0,0 +1,6 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <include file="create_MST_TEAM.xml" relativeToChangelogFile="true"/>
+    <include file="create_MST_TEAMLINK.xml" relativeToChangelogFile="true"/>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.2.2/MSTeams/create_MST_TEAM.xml b/.liquibase/Data_alias/basic/2020.2.2/MSTeams/create_MST_TEAM.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3753f3db0c75cb67f100b1063a70e82a18a2d5da
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/MSTeams/create_MST_TEAM.xml
@@ -0,0 +1,16 @@
+<?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="m.bilda" id="3d4f843d-9c5d-46b1-9475-9527d45a65b6">
+	<createTable tableName="MST_TEAM">
+		<column name="MST_TEAMID" type="CHAR(36)">
+			<constraints primaryKey="true" primaryKeyName="PK_MST_TEAM_MST_TEAMID"/>
+		</column>   
+                <column name="TEAMNAME" type="NVARCHAR(255)"/>
+                <column name="GENERAL_CHANNELID" type="CHAR(48)"/>
+                <column name="IS_ARCHIVED" type="TINYINT"/>
+                <column name="SERVICE_URL" type="NVARCHAR(255)"/>
+                <column name="WEB_URL" type="NVARCHAR(500)"/>
+	</createTable>      
+</changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.2.2/MSTeams/create_MST_TEAMLINK.xml b/.liquibase/Data_alias/basic/2020.2.2/MSTeams/create_MST_TEAMLINK.xml
new file mode 100644
index 0000000000000000000000000000000000000000..be14298d37a5e2cdf7923b8c3a3edc7005bfd914
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/MSTeams/create_MST_TEAMLINK.xml
@@ -0,0 +1,26 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+<changeSet author="s.listl" id="05c74217-459f-43ec-8e33-daee059cafd8">
+    <createTable tableName="MST_TEAMLINK">
+        <column name="MST_TEAMLINKID" type="CHAR(36)">
+            <constraints primaryKey="true" primaryKeyName="PK_MST_TEAMLINKID"/>
+        </column>   
+        <column name="MST_TEAM_ID" type="CHAR(36)">
+            <constraints nullable="false"/>
+        </column>
+        <column name="OBJECT_ROWID" type="CHAR(36)">
+            <constraints nullable="false"/>
+        </column>
+        <column name="OBJECT_TYPE" type="NVARCHAR(63)">
+            <constraints nullable="false"/>
+        </column>
+    </createTable>
+    <createIndex tableName="MST_TEAMLINK" indexName="IDX_MST_TEAMLINK_MST_TEAM_ID">
+        <column name="MST_TEAM_ID"/>
+    </createIndex>
+    <createIndex tableName="MST_TEAMLINK" indexName="IDX_MST_TEAMLINK_OBJECT_ROWID">
+        <column name="OBJECT_ROWID"/>
+    </createIndex>
+</changeSet>
+</databaseChangeLog>
diff --git a/.liquibase/Data_alias/basic/2020.2.2/alter_CampaignParticipantResponsible.xml b/.liquibase/Data_alias/basic/2020.2.2/alter_CampaignParticipantResponsible.xml
new file mode 100644
index 0000000000000000000000000000000000000000..349148d665121715e6703272fde03c4da372a7c0
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/alter_CampaignParticipantResponsible.xml
@@ -0,0 +1,10 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="a.voegl" id="2a30b35b-9882-468e-98a6-a10f0561a681">
+	<addColumn tableName="CAMPAIGNPARTICIPANT">
+            <column name="RESPONSIBLE_CONTACT_ID" type="CHAR(36)"/>
+	</addColumn> 
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2020.2.2/alter_CampaignParticipantResponsibleIndex.xml b/.liquibase/Data_alias/basic/2020.2.2/alter_CampaignParticipantResponsibleIndex.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6360542b2dff79630a5591fcbd5f4b8b2287ad87
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/alter_CampaignParticipantResponsibleIndex.xml
@@ -0,0 +1,10 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="a.voegl" id="6d545d51-b838-4325-9573-5fe51eade79b">
+        <createIndex indexName="IDX_CAMPAIGNPART_RES_CONTACT" tableName="CAMPAIGNPARTICIPANT">
+            <column name="RESPONSIBLE_CONTACT_ID"/>
+        </createIndex>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2020.2.2/alter_TableLeadStatus.xml b/.liquibase/Data_alias/basic/2020.2.2/alter_TableLeadStatus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a6625db2f2f6290579c5c747435541ed7d55e78a
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/alter_TableLeadStatus.xml
@@ -0,0 +1,19 @@
+<?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 dbms="derby" author="s.pongratz" id="539e6d12-5ba4-424b-a29d-f63a48d07288">
+        <sql>
+            ALTER TABLE LEAD ADD COLUMN STATUS_NEW VARCHAR(36);
+            UPDATE LEAD SET STATUS_NEW = CAST ( CAST (STATUS as CHAR(36)) as VARCHAR(36) );
+            ALTER TABLE LEAD DROP COLUMN STATUS;
+            RENAME COLUMN LEAD.STATUS_NEW TO STATUS;
+        </sql>
+    </changeSet>
+    <changeSet author="s.pongratz" id="be79e660-b112-4f58-b53d-d9e36ecd145b">
+        <preConditions onFail="CONTINUE">
+            <not>
+                <dbms type="derby" />
+            </not>
+        </preConditions>
+        <modifyDataType tableName="LEAD" columnName="STATUS" newDataType="VARCHAR(36)"/>
+    </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2020.2.2/changelog.xml b/.liquibase/Data_alias/basic/2020.2.2/changelog.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2a4bea7a4e0949d9504cea14b44a0f11cf14b25d
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/changelog.xml
@@ -0,0 +1,13 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+    <include relativeToChangelogFile="true" file="insert_commMediumTitleKeywordAttribute.xml"/>
+    <include relativeToChangelogFile="true" file="Knowledgemanagement/changelog_knowledgeManagement.xml"/>
+    <include relativeToChangelogFile="true" file="insert_employeeCountAttribute.xml"/>
+    <include relativeToChangelogFile="true" file="alter_CampaignParticipantResponsible.xml"/>
+    <include relativeToChangelogFile="true" file="alter_TableLeadStatus.xml"/>
+    <include relativeToChangelogFile="true" file="alter_CampaignParticipantResponsibleIndex.xml"/>
+    <include relativeToChangelogFile="true" file="MSTeams/changelog.xml"/>
+    <include relativeToChangelogFile="true" file="insert_newsletterAttribute.xml"/>
+    <include relativeToChangelogFile="true" file="readd_ExporttemplateIndizes.xml"/>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2020.2.2/insert_commMediumTitleKeywordAttribute.xml b/.liquibase/Data_alias/basic/2020.2.2/insert_commMediumTitleKeywordAttribute.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e67d1cc992d389d0c60a4fe30b7a9fb8a3d5944d
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/insert_commMediumTitleKeywordAttribute.xml
@@ -0,0 +1,55 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="s.listl" id="deb46cd2-c2e7-424b-93a1-052cd0a5aef7">
+      <insert tableName="AB_KEYWORD_ATTRIBUTE">
+          <column name="AB_KEYWORD_ATTRIBUTEID" value="ace00630-1e07-4615-8d61-2478995538fa"/>
+          <column name="CONTAINER" value="CommunicationMedium"/>
+          <column name="KIND" value="CHAR_VALUE"/>
+          <column name="NAME" value="placeholderTitle"/>
+      </insert>
+      <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+          <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="ebf5a52c-34db-4394-9fc1-21dfbdc3c6ea"/>
+          <column name="AB_KEYWORD_ATTRIBUTE_ID" value="ace00630-1e07-4615-8d61-2478995538fa"/>
+          <column name="AB_KEYWORD_ENTRY_ID" value="cc16d938-b95f-4e07-a3b4-73f8524bb664"/>
+          <column name="CHAR_VALUE" value="Phone number"/>
+      </insert>
+      <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+          <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="5a2bb861-31c8-471d-8fb9-a3c28d589b9f"/>
+          <column name="AB_KEYWORD_ATTRIBUTE_ID" value="ace00630-1e07-4615-8d61-2478995538fa"/>
+          <column name="AB_KEYWORD_ENTRY_ID" value="66950de5-fa8b-465c-8db1-4eb7aac98bd3"/>
+          <column name="CHAR_VALUE" value="Email address"/>
+      </insert>
+      <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+          <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="c860637f-4182-4cc4-9879-7ed3d009aee4"/>
+          <column name="AB_KEYWORD_ATTRIBUTE_ID" value="ace00630-1e07-4615-8d61-2478995538fa"/>
+          <column name="AB_KEYWORD_ENTRY_ID" value="aa2b9cc9-3e87-4fe9-98a2-a4e417a3324f"/>
+          <column name="CHAR_VALUE" value="Phone number"/>
+      </insert>
+      <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+          <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="def9c03f-4f8b-4158-9f9c-4f2c6f1f52be"/>
+          <column name="AB_KEYWORD_ATTRIBUTE_ID" value="ace00630-1e07-4615-8d61-2478995538fa"/>
+          <column name="AB_KEYWORD_ENTRY_ID" value="cfebe176-0a64-428d-b0ec-bba454d2ca3e"/>
+          <column name="CHAR_VALUE" value="URL"/>
+      </insert>
+      <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+          <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="bf7be765-ebcc-409f-9c81-66665b6b55f6"/>
+          <column name="AB_KEYWORD_ATTRIBUTE_ID" value="ace00630-1e07-4615-8d61-2478995538fa"/>
+          <column name="AB_KEYWORD_ENTRY_ID" value="d80c3689-7e0a-45ac-801d-91d199c08bd5"/>
+          <column name="CHAR_VALUE" value="URL"/>
+      </insert>
+      <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+          <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="9fc7f919-b04c-40f3-8124-9e1d4d8198f5"/>
+          <column name="AB_KEYWORD_ATTRIBUTE_ID" value="ace00630-1e07-4615-8d61-2478995538fa"/>
+          <column name="AB_KEYWORD_ENTRY_ID" value="e6c36792-763d-44f8-8afe-157c8f158ef8"/>
+          <column name="CHAR_VALUE" value="URL"/>
+      </insert>
+      <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
+          <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="5d64759f-acd2-4dbc-9df3-c38bceaf8f6b"/>
+          <column name="AB_KEYWORD_ATTRIBUTE_ID" value="ace00630-1e07-4615-8d61-2478995538fa"/>
+          <column name="AB_KEYWORD_ENTRY_ID" value="7abf7fc5-08a1-4bae-b0ca-ec5e406d154c"/>
+          <column name="CHAR_VALUE" value="URL"/>
+      </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2020.2.2/insert_employeeCountAttribute.xml b/.liquibase/Data_alias/basic/2020.2.2/insert_employeeCountAttribute.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f84d5e859c535a143acb02b7b54141dc40cdac59
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/insert_employeeCountAttribute.xml
@@ -0,0 +1,21 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="s.listl" id="59d2d137-086a-4c07-869a-72a2b24952d4">
+      <insert tableName="AB_ATTRIBUTE">
+          <column name="AB_ATTRIBUTEID" value="dd024883-c49e-4d09-85c8-829cf9c9c5e9"/>
+          <column name="ATTRIBUTE_PARENT_ID" value="e32cd923-3774-41c1-95d5-57b79e52e568"/>
+          <column name="ATTRIBUTE_ACTIVE" valueNumeric="1"/>
+          <column name="ATTRIBUTE_NAME" value="Employee count"/>
+          <column name="ATTRIBUTE_TYPE" value="NUMBER"/>
+          <column name="SORTING" valueNumeric="7"/>
+      </insert>
+      <insert tableName="AB_ATTRIBUTEUSAGE">
+          <column name="AB_ATTRIBUTEUSAGEID" value="8de717a1-9d64-44c9-b692-b350b0857d59"/>
+          <column name="AB_ATTRIBUTE_ID" value="dd024883-c49e-4d09-85c8-829cf9c9c5e9"/>
+          <column name="OBJECT_TYPE" value="Organisation"/>
+          <column name="MAX_COUNT" valueNumeric="1"/>
+      </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2020.2.2/insert_newsletterAttribute.xml b/.liquibase/Data_alias/basic/2020.2.2/insert_newsletterAttribute.xml
new file mode 100644
index 0000000000000000000000000000000000000000..af877f23248b079e318b4a090bbb6e8fe3d90cd5
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/insert_newsletterAttribute.xml
@@ -0,0 +1,33 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+  <changeSet author="s.listl" id="4b285b34-29bc-4446-8d95-37cfcff7bd58">
+      <insert tableName="AB_ATTRIBUTE">
+          <column name="AB_ATTRIBUTEID" value="cf985906-b4f9-443e-9d7b-edbeb60ca463"/>
+          <column name="ATTRIBUTE_NAME" value="Marketing"/>
+          <column name="ATTRIBUTE_TYPE" value="GROUP"/>
+          <column name="ATTRIBUTE_ACTIVE" valueNumeric="1"/>
+      </insert>
+      <insert tableName="AB_ATTRIBUTE">
+          <column name="AB_ATTRIBUTEID" value="e196975c-6cfd-46dc-9cb2-053893ec2faa"/>
+          <column name="ATTRIBUTE_PARENT_ID" value="cf985906-b4f9-443e-9d7b-edbeb60ca463"/>
+          <column name="ATTRIBUTE_NAME" value="Newsletter"/>
+          <column name="ATTRIBUTE_TYPE" value="BOOLEAN"/>
+          <column name="ATTRIBUTE_ACTIVE" valueNumeric="1"/>
+          <column name="SORTING" valueNumeric="0"/>
+      </insert>
+      <insert tableName="AB_ATTRIBUTEUSAGE">
+          <column name="AB_ATTRIBUTEUSAGEID" value="e9842896-628c-4c80-a0ef-811f35b8ae51"/>
+          <column name="AB_ATTRIBUTE_ID" value="cf985906-b4f9-443e-9d7b-edbeb60ca463"/>
+          <column name="OBJECT_TYPE" value="Person"/>
+          <column name="MAX_COUNT" valueNumeric="1"/>
+      </insert>
+      <insert tableName="AB_ATTRIBUTEUSAGE">
+          <column name="AB_ATTRIBUTEUSAGEID" value="fc594860-76c5-4acb-9758-44ea1a1db5d0"/>
+          <column name="AB_ATTRIBUTE_ID" value="e196975c-6cfd-46dc-9cb2-053893ec2faa"/>
+          <column name="OBJECT_TYPE" value="Person"/>
+          <column name="MAX_COUNT" valueNumeric="1"/>
+      </insert>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/basic/2020.2.2/readd_ExporttemplateIndizes.xml b/.liquibase/Data_alias/basic/2020.2.2/readd_ExporttemplateIndizes.xml
new file mode 100644
index 0000000000000000000000000000000000000000..67891291f5b0e2c0ea3df39d310b0d6939c77481
--- /dev/null
+++ b/.liquibase/Data_alias/basic/2020.2.2/readd_ExporttemplateIndizes.xml
@@ -0,0 +1,36 @@
+<?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">
+  <!-- in some cases -->
+  <changeSet author="j.goderbauer" id="140794d8-eb75-4087-a45a-71b0f547e60a">
+      <preConditions  onFail="MARK_RAN">
+          <not>
+            <indexExists indexName="idx_exprttmpfld_tmpltid" />
+          </not>
+      </preConditions>
+      <createIndex indexName="idx_exprttmpfld_tmpltid" tableName="EXPORTTEMPLATEFIELD">
+          <column name="EXPORTTEMPLATE_ID"/>
+      </createIndex>
+  </changeSet>
+  <changeSet author="j.goderbauer" id="e952abd0-29f4-4d6c-b650-ef925248ae18">
+      <preConditions  onFail="MARK_RAN">
+          <not>
+              <indexExists indexName="idx_exprttmppou_tmpltid" />
+          </not>
+      </preConditions>
+      <createIndex indexName="idx_exprttmppou_tmpltid" tableName="EXPORTTEMPLATEPLACEOFUSE">
+          <column name="EXPORTTEMPLATE_ID"/>
+      </createIndex>
+  </changeSet>
+  <changeSet author="j.goderbauer" id="b49a1ac9-80b2-4cfd-b7cd-bdfee4bc0cd8">
+      <preConditions  onFail="MARK_RAN">
+          <not>
+              <indexExists indexName="idx_exprttmpselection_tmpltid" />
+          </not>
+      </preConditions>
+      <createIndex indexName="idx_exprttmpselection_tmpltid" tableName="EXPORTTEMPLATESELECTION">
+          <column name="EXPORTTEMPLATE_ID"/>
+      </createIndex>
+  </changeSet>
+</databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/Data_alias/changelog.xml b/.liquibase/Data_alias/changelog.xml
index f026f4fe1483a25ff7dbc94a412e14f8c22c94af..faf7b4d858a31a26f2aad2e735685c967f95a989 100644
--- a/.liquibase/Data_alias/changelog.xml
+++ b/.liquibase/Data_alias/changelog.xml
@@ -17,6 +17,7 @@
     <include relativeToChangelogFile="true" file="basic/2020.1.3/changelog.xml"/>
     <include relativeToChangelogFile="true" file="basic/2020.2.0/changelog.xml"/>
     <include relativeToChangelogFile="true" file="basic/2020.2.1/changelog.xml"/>
+    <include relativeToChangelogFile="true" file="basic/2020.2.2/changelog.xml"/>
     <include relativeToChangelogFile="true" file="basic/2021.0.0/changelog.xml"/>
 
     <!--enable this only when you definetly want to overwrite the existing data with demo records:-->
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_aliasconfig.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_aliasconfig.xml
index 84b8857d8d5e08885c286dde38ffc6a9c93b1701..8da963bc9892353e093b84f03ae816b204209090 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_aliasconfig.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_aliasconfig.xml
@@ -13,7 +13,7 @@
             <constraints nullable="false"/>
         </column>
         <column name="NAME" type="NVARCHAR(63)">
-            <constraints nullable="false"/>
+            <constraints nullable="false" unique="true"/>
         </column>
         <column name="TITLE" type="NVARCHAR(63)"/>
         <column name="DESCRIPTION" type="NVARCHAR(255)"/>
@@ -26,5 +26,8 @@
     <createIndex tableName="ASYS_ALIASCONFIG" indexName="IDX_ASYS_ALIASCONFIG_SERVERID">
         <column name="SERVERID"/>
     </createIndex>
+    <createIndex tableName="ASYS_ALIASCONFIG" indexName="IDX_ASYS_ALIASCONFIG_ALIASID">
+        <column name="ALIASID"/>
+    </createIndex>
 </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_calendarbackend.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_calendarbackend.xml
index e037c40bd68234584e01385d2b9f570bd92b4635..939fc396efeac5d3d51bb1e67082b609e39ba406 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_calendarbackend.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_calendarbackend.xml
@@ -23,5 +23,34 @@
         <column name="TRANSP" type="CHAR(1)"/>
         <column name="VCOMPONENT" type="CLOB"/>
     </createTable>
+    <createIndex tableName="ASYS_CALENDARBACKEND" indexName="IDX_CALENDARBACK_ENTRYTYPE">
+        <column name="ENTRYTYPE"/>
+    </createIndex>
+    <createIndex tableName="ASYS_CALENDARBACKEND" indexName="IDX_CALENDARBACK_STARTTIME">
+        <column name="STARTTIME"/>
+    </createIndex>
+    <createIndex tableName="ASYS_CALENDARBACKEND" indexName="IDX_CALENDARBACK_STATUS">
+        <column name="STATUS"/>
+    </createIndex>
+    <createIndex tableName="ASYS_CALENDARBACKEND" indexName="IDX_CALENDARBACK_ENDTIME">
+        <column name="ENDTIME"/>
+    </createIndex>
+    <createIndex tableName="ASYS_CALENDARBACKEND" indexName="IDX_CALENDARBACK_MAILBOX">
+        <column name="MAILBOX"/>
+    </createIndex>
+    <createIndex tableName="ASYS_CALENDARBACKEND" indexName="IDX_CALENDARBACK_LASTMOD">
+        <column name="LASTMODIFIED"/>
+    </createIndex>
+    <createIndex tableName="ASYS_CALENDARBACKEND" indexName="IDX_CALENDARBACK_DTSTART">
+        <column name="DTSTART"/>
+    </createIndex>
+    <createIndex tableName="ASYS_CALENDARBACKEND" indexName="IDX_CALENDARBACK_DTEND">
+        <column name="DTEND"/>
+    </createIndex>
+</changeSet>
+<changeSet id="4810b7c6-50f6-44f6-a0b5-83a3adfae6f7" author="s.listl" dbms="!mssql,!mysql,!mariadb">
+    <createIndex tableName="ASYS_CALENDARBACKEND" indexName="IDX_CALENDARBACK_ELEMENTUID">
+        <column name="ELEMENTUID"/>
+    </createIndex>
 </changeSet>
 </databaseChangeLog>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_calendarlink.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_calendarlink.xml
index 4e0f73a0b10270db715663c22349f57547d93abd..a9535f3f3ac114811a1e0159a6e9d71bafb39c84 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_calendarlink.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_calendarlink.xml
@@ -2,19 +2,25 @@
 <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="a.schindlbeck" id="c31ed111-b98d-46b6-b7bf-845420624e28">
     <createTable tableName="ASYS_CALENDARLINK">
-        <column name="DBALIAS" type="VARCHAR(127)"/>
-        <column name="DBID" type="VARCHAR(191)">
-            <constraints primaryKey="true" primaryKeyName="PK_ASYS_CALENDARLINK_DBID"/>
+        <column name="ID" type="CHAR(36)">
+            <constraints nullable="false" primaryKey="true" primaryKeyName="PK_ASYS_CALENDARLINK_ID"/>
         </column>
+        <column name="DBALIAS" type="VARCHAR(127)"/>
+        <column name="DBID" type="VARCHAR(1023)"/>
         <column name="DBIDCOLUMN" type="VARCHAR(127)"/>
         <column name="DBTABLENAME" type="VARCHAR(127)"/>
         <column name="ENTRYID" type="VARCHAR(512)"/>
         <column name="ENTRYSTORE" type="VARCHAR(255)"/>
         <column name="FRAME" type="VARCHAR(1023)"/>
-        <column name="ID" type="CHAR(36)">
-            <constraints nullable="false"/>
-        </column>
         <column name="TITLE" type="VARCHAR(2000)"/>
     </createTable>
 </changeSet>
+<changeSet id="bf6546b4-67e3-4996-bcd9-77a534127b01" author="s.listl" dbms="!mssql,!mysql,!mariadb">
+    <createIndex tableName="ASYS_CALENDARLINK" indexName="IDX_ASYS_CALENDARLINK_ENTRYID">
+        <column name="ENTRYID"/>
+    </createIndex>
+    <createIndex tableName="ASYS_CALENDARLINK" indexName="IDX_ASYS_CALENDARLINK_DBID">
+        <column name="DBID"/>
+    </createIndex>
+</changeSet>
 </databaseChangeLog>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_collector_data.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_collector_data.xml
index 5f8ddc0ed26f8961dde66978901ff46162f17104..6fcc01993321b4f11d7668493a296751e846f0ae 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_collector_data.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_collector_data.xml
@@ -10,5 +10,8 @@
             <column name="PARENTID" type="CHAR(63)"/>
             <column name="METRICS" type="CLOB"/>
         </createTable>
+        <createIndex tableName="ASYS_COLLECTOR_DATA" indexName="IDX_COLLECTORDATA_TIMECOLLECT">
+            <column name="TIMECOLLECTED"/>
+        </createIndex>
     </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_collector_tags.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_collector_tags.xml
index 1fcaf740d8ac5c8f29254872634be78af9426f0e..133aff97c3446084db51cfcf51d91cc3c52015cf 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_collector_tags.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_collector_tags.xml
@@ -3,10 +3,15 @@
     <changeSet author="j.hoermann" id="4fe7309e-e131-4f3d-8e65-fb399fcd7090">
         <createTable tableName="ASYS_COLLECTOR_TAGS">
             <column name="COLLECTORDATAID" type="CHAR(63)">
-                <constraints primaryKey="true" primaryKeyName="PK_ASYS_COLLECTOR_TAGS_ID"/>
+                <constraints nullable="false"/>
+            </column>
+            <column name="TAGNAME" type="VARCHAR(63)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="TAGVALUE" type="VARCHAR(63)">
+                <constraints nullable="false"/>
             </column>
-            <column name="TAGNAME" type="VARCHAR(63)"/>
-            <column name="TAGVALUE" type="VARCHAR(63)"/>
         </createTable>
+        <addPrimaryKey tableName="ASYS_COLLECTOR_TAGS" columnNames="COLLECTORDATAID, TAGNAME, TAGVALUE" constraintName="PK_ASYS_COLLECTOR_TAGS"/>
     </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_dashletconfigurations.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_dashletconfigurations.xml
index 6ecf84fd630421d50a01ef071830269f8538cfa8..369537c606f93165cf7710c569d7cd21db94672d 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_dashletconfigurations.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_dashletconfigurations.xml
@@ -2,22 +2,22 @@
 <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="j.hoermann" id="a510b5e9-e599-4503-8bcd-4ef2465f56c6">
     <createTable tableName="ASYS_DASHLETCONFIGURATIONS">
-        <column name="ID" type="CHAR(36)">
+        <column name="ID" type="CHAR(63)">
             <constraints primaryKey="true" primaryKeyName="PK_ASYS_ASYS_DASHLETCONFIGURATIONS_ID"/>
         </column>
-        <column name="CATEGORIES" type="CLOB"/>
+        <column name="NAME" type="VARCHAR(63)"/>
+        <column name="TITLE" type="VARCHAR(63)"/>
+        <column name="VIEW_NAME" type="VARCHAR(512)"/>
         <column name="DESCRIPTION" type="VARCHAR(512)"/>
-        <column name="FRAGMENT" type="VARCHAR(1023)"/>
-        <column name="FRAGMENT_CUSTOMIZABLE" type="INTEGER"/>
         <column name="ICON" type="VARCHAR(63)"/>
-        <column name="NAME" type="VARCHAR(63)"/>
-        <column name="PARAMETERS" type="CLOB"/>
+        <column name="FRAGMENT" type="VARCHAR(1023)"/>
         <column name="PREVIEW" type="CLOB"/>
-        <column name="REQUIRES_CONFIGURATION" type="INTEGER"/>
         <column name="SINGLETON" type="INTEGER"/>
+        <column name="FRAGMENT_CUSTOMIZABLE" type="INTEGER"/>
+        <column name="REQUIRES_CONFIGURATION" type="INTEGER"/>
+        <column name="CATEGORIES" type="CLOB"/>
+        <column name="PARAMETERS" type="CLOB"/>
         <column name="STORE_ROLES" type="VARCHAR(1023)"/>
-        <column name="TITLE" type="VARCHAR(63)"/>
-        <column name="VIEW_NAME" type="VARCHAR(63)"/>
     </createTable>
 </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_dashlets.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_dashlets.xml
index f5ea6eb9088d0ea83e950d2e4d259d3eaddc5207..5b3d2d5a60bf48258a8e82957e9db0d43fbf34f8 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_dashlets.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_dashlets.xml
@@ -2,18 +2,18 @@
 <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="j.hoermann" id="dbdfa16c-8e62-4fc6-8d79-2a14a0d863c5">
     <createTable tableName="ASYS_DASHLETS">
-        <column name="ID" type="CHAR(36)">
+        <column name="ID" type="CHAR(63)">
             <constraints primaryKey="true" primaryKeyName="PK_ASYS_DASHLETS_ID"/>
         </column>
-        <column name="COLSPAN" type="INTEGER"/>
-        <column name="CONFIGURATION_ID" type="VARCHAR(63)"/>
         <column name="DASHBOARD_ID" type="VARCHAR(63)"/>
+        <column name="CONFIGURATION_ID" type="VARCHAR(63)"/>
+        <column name="TITLE" type="VARCHAR(63)"/>
         <column name="FRAGMENT" type="VARCHAR(1023)"/>
         <column name="PARAMETERS" type="CLOB"/>
-        <column name="ROWSPAN" type="INTEGER"/>
-        <column name="TITLE" type="VARCHAR(63)"/>
         <column name="X" type="INTEGER"/>
         <column name="Y" type="INTEGER"/>
+        <column name="COLSPAN" type="INTEGER"/>
+        <column name="ROWSPAN" type="INTEGER"/>
     </createTable>
 </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_notificationcontents.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_notificationcontents.xml
index fb1ae2f5ee87ef81421765227ffdeca8682dd681..e77db9a1c3d3b13f9b4c297bf36cde0a4d92ccad 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_notificationcontents.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_notificationcontents.xml
@@ -7,20 +7,17 @@
         </column>
         <column name="BACKPACK" type="CLOB"/>
         <column name="CAPTION" type="VARCHAR(512)"/>
-        <column name="CREATEDATE" type="TIMESTAMP"/>
-        <column name="DELETEDATE" type="TIMESTAMP"/>
+        <column name="CREATEDATE" type="DATETIME"/>
         <column name="DESCRIPTION" type="VARCHAR(1023)"/>
         <column name="FORCEDPRIORITY" type="VARCHAR(15)"/>
         <column name="ICON_INFO" type="VARCHAR(1023)"/>
+        <column name="DELETEDATE" type="DATETIME"/>
         <column name="LINK_INFO" type="VARCHAR(1023)"/>
         <column name="ORIGINATORNAME" type="VARCHAR(63)"/>
         <column name="RECIPIENTUSERIDS" type="CLOB"/>
         <column name="TYPECODE" type="VARCHAR(63)"/>
         <column name="VERSION" type="INTEGER"/>
+        <column name="SUBCATEGORY" type="VARCHAR(256)"/>
     </createTable>
-    
-    <createIndex indexName="idx_asysnoticontents_contid" tableName="ASYS_NOTIFICATIONCONTENTS">
-        <column name="CONTENTID"/>
-    </createIndex>
 </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_notifications.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_notifications.xml
index f3ff1e9ae1ccab5ab2fc46dba3c28bc9e0a783ac..5ecd347c48718a326ba9ec9119f3b9d2e55f6e6c 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_notifications.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_notifications.xml
@@ -6,7 +6,7 @@
             <constraints primaryKey="true" primaryKeyName="PK_ASYS_NOTIFICATIONS_ID"/>
         </column>
         <column name="CONTENTID" type="CHAR(36)"/>
-        <column name="STATE" type="VARCHAR(15)"/>
+        <column name="STATE" type="VARCHAR(16)"/>
         <column name="USERID" type="VARCHAR(63)"/>
         <column name="RESOLVEDPRIORITY" type="VARCHAR(15)"/>
     </createTable>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_recordgroup.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_recordgroup.xml
index c8fae3a479ec0862f068aee234a572c3f092d5c7..35ddb98cb9bb10336fa9fcfa993cd135f1f31b33 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_recordgroup.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_recordgroup.xml
@@ -9,9 +9,6 @@
         <column name="TITLE" type="VARCHAR(256)"/>
         <column name="GROUP_TYPE" type="VARCHAR(64)"/>
     </createTable>
-    <createIndex indexName="idx_asysrecordgroup_id" tableName="ASYS_RECORDGROUP">
-        <column name="ID"/>
-    </createIndex>
     <createIndex indexName="idx_asysrecordgroup_userid" tableName="ASYS_RECORDGROUP">
         <column name="USER_ID"/>
     </createIndex>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_roles.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_roles.xml
index 4ea33eeb65bbdce19c15b13db043c8fc744e58ab..9f54423b467e072e41b99e53eabf9789457083c0 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_roles.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_roles.xml
@@ -5,10 +5,10 @@
             <column name="ROLENAME" type="VARCHAR(63)">
                 <constraints primaryKey="true" primaryKeyName="PK_ASYS_ROLES_ID"/>
             </column>
-            <column name="ROLETITLE" type="VARCHAR(63)"/>
+            <column name="ROLETITLE" type="NVARCHAR(63)"/>
             <column name="ROLEDESCRIPTION" type="VARCHAR(255)"/>
-            <column name="ASSIGNABLE" type="INTEGER"/>
-            <column name="CHILDREN" type="CLOB"/>
+            <column name="ASSIGNABLE" type="TINYINT"/>
+            <column name="CHILDREN" type="NCLOB"/>
         </createTable>
     </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_roles_children.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_roles_children.xml
index 9dd2c8b7d6d65db71a4b6ecb4b3482f1763c74ad..83fff19bd005bb2e605f38b29a189461f5970c26 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_roles_children.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_roles_children.xml
@@ -6,7 +6,7 @@
                 <constraints primaryKey="true" primaryKeyName="PK_ASYS_ROLES_CHILDREN_ID"/>
             </column>
             <column name="PARENT_ROLE" type="VARCHAR(63)"/>
-            <column name="CHILD_ROLE" type="VARCHAR(63)"/>
+            <column name="CHILD_ROLE" type="NVARCHAR(63)"/>
         </createTable>
     </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_sequences.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_sequences.xml
index 4e001416ea8db72052f9da8c0d0925e90d225150..ec0459b46b9596c3ba26f3aa4f3239bef0ea8608 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_sequences.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_sequences.xml
@@ -13,5 +13,8 @@
             <constraints nullable="false"/>
         </column>
     </createTable>
+    <createIndex tableName="ASYS_SEQUENCES" indexName="IDX_ASYS_SEQUENCES_ID_GUID">
+        <column name="ID_GUID"/>
+    </createIndex>
 </changeSet>
 </databaseChangeLog>
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_timers_serverruns.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_timers_serverruns.xml
index fea891c550df4d29827915634728cef5af053042..fb86982a2864b0d101a4fffb0ecd3106b14335c2 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_timers_serverruns.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_timers_serverruns.xml
@@ -13,6 +13,6 @@
     </createTable>
     <addPrimaryKey tableName="ASYS_TIMERS_SERVERRUNS"
                    columnNames="SERVERID, TIMERID"
-                   constraintName="PK_ASYS_TIMERS_SERVERRUNS_SERVERID_TIMERID"/>
+                   constraintName="PK_ASYS_TIMERS_SERVERRUNS"/>
 </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_users.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_users.xml
index c8d26b66bf9e3b832991f2f6f2be6522b0d58043..c2064247aa6464b3bda6f5abce670daf632404a2 100644
--- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_users.xml
+++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_users.xml
@@ -1,37 +1,38 @@
 <?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="j.hoermann" id="77e5fc97-1e89-45e2-a00f-29742d28ab7e">
-    <createTable tableName="ASYS_USERS">
-        <column name="ID" type="CHAR(36)">
-            <constraints primaryKey="true" primaryKeyName="PK_ASYS_USERS_ID"/>
-        </column>
-        <column name="DATE_NEW" type="DATETIME"/>
-        <column name="DATE_EDIT" type="DATETIME"/>
-        <column name="NAME" type="NVARCHAR(63)">
-            <constraints nullable="false"/>
-        </column>
-        <column name="GROUPID" type="NVARCHAR(63)">
-            <constraints nullable="false"/>
-        </column>
-        <column name="PROPKEY" type="VARCHAR(1024)">
-            <constraints nullable="false"/>
-        </column>
-        <column name="PROPVAL" type="VARCHAR(1024)"/>
-        <column name="PROPVAL_CLOB" type="CLOB"/>
-    </createTable>
-    <createIndex indexName="IDX_ASYS_USERS_NAME" tableName="ASYS_USERS">
-        <column name="NAME"/>
-    </createIndex>
-    <createIndex indexName="idx_asysusers_groupid" tableName="ASYS_USERS">
-        <column name="GROUPID"/>
-    </createIndex>
-    <!--normally a index should be created for propkey and propval but this causes due to it's length problems on some dbms-->
-    <!--<createIndex indexName="idx_asysusers_propkey" tableName="ASYS_USERS">
-        <column name="PROPKEY"/>
-    </createIndex>
-    <createIndex indexName="idx_asysusers_propval" tableName="ASYS_USERS">
-        <column name="PROPVAL"/>
-    </createIndex>-->
-    
-</changeSet>
+    <changeSet author="j.hoermann" id="77e5fc97-1e89-45e2-a00f-29742d28ab7e">
+        <createTable tableName="ASYS_USERS">
+            <column name="ID" type="CHAR(36)">
+                <constraints primaryKey="true" primaryKeyName="PK_ASYS_USERS_ID"/>
+            </column>
+            <column name="DATE_NEW" type="DATETIME"/>
+            <column name="DATE_EDIT" type="DATETIME"/>
+            <column name="NAME" type="NVARCHAR(63)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="GROUPID" type="NVARCHAR(63)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="PROPKEY" type="VARCHAR(1024)">
+                <constraints nullable="false"/>
+            </column>
+            <column name="PROPVAL" type="VARCHAR(1024)"/>
+            <column name="PROPVAL_CLOB" type="CLOB"/>
+        </createTable>
+        <createIndex indexName="IDX_ASYS_USERS_NAME" tableName="ASYS_USERS">
+            <column name="NAME"/>
+        </createIndex>
+        <createIndex indexName="idx_asysusers_groupid" tableName="ASYS_USERS">
+            <column name="GROUPID"/>
+        </createIndex>
+    </changeSet>
+    <changeSet id="4d1dc8cd-2bca-4501-9458-9178287a4f38" author="s.listl" dbms="!mssql,!mysql,!mariadb">
+        <!--index can't be created on all dbms because of size restrictions-->
+        <createIndex indexName="idx_asysusers_propkey" tableName="ASYS_USERS">
+            <column name="PROPKEY"/>
+        </createIndex>
+        <createIndex indexName="idx_asysusers_propval" tableName="ASYS_USERS">
+            <column name="PROPVAL"/>
+        </createIndex>
+    </changeSet>
 </databaseChangeLog>
\ No newline at end of file
diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod
index 96738b180650e265da04ed5ca755f51b7ac40641..1b90bea7f650ec646579634c155ced038fcf0d35 100644
--- a/aliasDefinition/Data_alias/Data_alias.aod
+++ b/aliasDefinition/Data_alias/Data_alias.aod
@@ -3611,7 +3611,7 @@
                 <notNull v="true" />
                 <isUnique v="true" />
                 <index v="true" />
-                <title>Salesproject Id</title>
+                <title>Sales Project Id</title>
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
@@ -8091,7 +8091,7 @@
                 <isUnique v="false" />
                 <index v="true" />
                 <documentation></documentation>
-                <title>Salesproject Id</title>
+                <title>Sales Project Id</title>
                 <description></description>
                 <customProperties>
                   <customBooleanProperty>
@@ -8140,7 +8140,7 @@
                 <isUnique v="true" />
                 <index v="true" />
                 <documentation></documentation>
-                <title>Salesproject milestone Id</title>
+                <title>Sales Project milestone Id</title>
                 <description></description>
               </entityFieldDb>
               <entityFieldDb>
@@ -8338,6 +8338,20 @@
                   </entityDependency>
                 </dependencies>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>RESPONSIBLE_CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -10889,8 +10903,8 @@
                 <name>RECIPIENTS</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="12" />
-                <size v="4000" />
+                <columnType v="2005" />
+                <size v="2147483647" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -11711,8 +11725,8 @@
                 <name>SCAN_PATTERN</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="12" />
-                <size v="4000" />
+                <columnType v="2005" />
+                <size v="2147483647" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -13152,8 +13166,8 @@
                 <name>STATUS</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="4" />
-                <size v="10" />
+                <columnType v="12" />
+                <size v="36" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -13883,6 +13897,34 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>P_COMMINTERNET</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="254" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>O_COMMINTERNET</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="254" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -15737,6 +15779,1172 @@
               </entityFieldDb>
             </entityFields>
           </entityDb>
+          <entityDb>
+            <name>KNOWLEDGEDISCUSSION</name>
+            <dbName></dbName>
+            <idColumn>KNOWLEDGEDISCUSSIONID</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>PARENTENTRY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>STATUS</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>DISCUSSIONTEXT</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>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>KNOWLEDGEDISCUSSIONID</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>KNOWLEDGEMANAGEMENT_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>AUTHOR</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="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>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>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>KNOWLEDGELINK</name>
+            <dbName></dbName>
+            <idColumn>KNOWLEDGELINKID</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>KNOWLEDGELINKID</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_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>KNOWLEDGEMANAGEMENT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="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="100" />
+                <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>ROW_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>KNOWLEDGEMANAGEMENT</name>
+            <dbName></dbName>
+            <idColumn>KNOWLEDGEMANAGEMENTID</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>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>KNOWLEDGEMANAGEMENTID</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>AUTHOR_CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+                <customProperties>
+                  <customBooleanProperty>
+                    <name>log</name>
+                    <global v="false" />
+                    <property v="true" />
+                  </customBooleanProperty>
+                </customProperties>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>PUBLISH</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>USER_EDIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTENTDECODED</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>TITLE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+                <customProperties>
+                  <customBooleanProperty>
+                    <name>log</name>
+                    <global v="false" />
+                    <property v="true" />
+                  </customBooleanProperty>
+                </customProperties>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>CONTENT</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>
+                <customProperties>
+                  <customBooleanProperty>
+                    <name>log</name>
+                    <global v="false" />
+                    <property v="true" />
+                  </customBooleanProperty>
+                </customProperties>
+              </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="63" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>RESPONSIBLE_CONTACT_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+                <customProperties>
+                  <customBooleanProperty>
+                    <name>log</name>
+                    <global v="false" />
+                    <property v="true" />
+                  </customBooleanProperty>
+                </customProperties>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>KNOWLEDGEROLES</name>
+            <dbName></dbName>
+            <idColumn>KNOWLEDGEROLESID</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>KNOWLEDGEROLESID</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>KNOWLEDGEMANAGEMENT_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>ROLENAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="100" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>KNOWLEDGEGITINTERFACE</name>
+            <dbName></dbName>
+            <idColumn>KNOWLEDGEGITINTERFACEID</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>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>KNOWLEDGEGITINTERFACEID</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>GITCOMMIT</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="200" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>DATE_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="93" />
+                <size v="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>SYSTEMNAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_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>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>KNOWLEDGEMANAGEMENTTAGMODERATION</name>
+            <dbName></dbName>
+            <idColumn>KNOWLEDGEMANAGEMENTTAGMODERATIONID</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>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>AB_ATTRIBUTE_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>KNOWLEDGEMANAGEMENTTAGMODERATIONID</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>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>KNOWLEDGETAG</name>
+            <dbName></dbName>
+            <idColumn>KNOWLEDGETAGID</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>KNOWLEDGETAGID</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>STATUS</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>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>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>TAG</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>USER_NEW</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="50" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <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>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>KNOWLEDGETAGLINK</name>
+            <dbName></dbName>
+            <idColumn>KNOWLEDGETAGLINKID</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>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>KNOWLEDGEMANAGEMENT_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>KNOWLEDGETAGLINKID</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>KNOWLEDGETAG_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>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>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>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>MST_TEAMLINK</name>
+            <dbName></dbName>
+            <idColumn>MST_TEAMLINKID</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="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MST_TEAM_ID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>MST_TEAMLINKID</name>
+                <dbName></dbName>
+                <primaryKey v="true" />
+                <columnType v="1" />
+                <size v="36" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="true" />
+                <index v="true" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>OBJECT_TYPE</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="63" />
+                <scale v="0" />
+                <notNull v="true" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+            </entityFields>
+          </entityDb>
+          <entityDb>
+            <name>MST_TEAM</name>
+            <dbName></dbName>
+            <idColumn>MST_TEAMID</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>MST_TEAMID</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>IS_ARCHIVED</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="5" />
+                <size v="5" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>SERVICE_URL</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>TEAMNAME</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="255" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>GENERAL_CHANNELID</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="1" />
+                <size v="48" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
+              <entityFieldDb>
+                <name>WEB_URL</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>
+            </entityFields>
+          </entityDb>
         </entities>
       </entityGroup>
     </aliasDefDb>
diff --git a/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/salesorder/entityfields/object_rowid/customproperties/translate4log/property.js b/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/salesorder/entityfields/object_rowid/customproperties/translate4log/property.js
index aa7a1fe2a061e4d09e65eab58e503c37562cf5a6..7305220193d3d0f0504d588ccb1c70db27d139b2 100644
--- a/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/salesorder/entityfields/object_rowid/customproperties/translate4log/property.js
+++ b/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/salesorder/entityfields/object_rowid/customproperties/translate4log/property.js
@@ -12,4 +12,4 @@ var type = newSelect("OBJECT_TYPE")
            .where("SALESORDER.SALESORDERID", params.rowId)
            .cell();
 
-result.string(db.cell(ContextUtils.getNameSql(type, params.value)));
+result.string(ContextUtils.getTitleByContext(type, params.value));
diff --git a/aliasDefinition/IndexSearchAlias/IndexSearchAlias.aod b/aliasDefinition/IndexSearchAlias/IndexSearchAlias.aod
new file mode 100644
index 0000000000000000000000000000000000000000..79981226f95fdf63a642c463bce21dc56fa76f5e
--- /dev/null
+++ b/aliasDefinition/IndexSearchAlias/IndexSearchAlias.aod
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<aliasDefinition xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasDefinition/1.2.0">
+  <name>IndexSearchAlias</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <datasourceType v="18" />
+</aliasDefinition>
diff --git a/aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod b/aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod
index 6f4f1b2dca5291f2a8a2ad8cbb2b4d47552c98ff..6407da1b96ade99cd89fd172be15282552aca01d 100644
--- a/aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod
+++ b/aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod
@@ -101,7 +101,7 @@
                 <scale v="0" />
                 <notNull v="true" />
                 <isUnique v="false" />
-                <index v="false" />
+                <index v="true" />
                 <title></title>
                 <description></description>
               </entityFieldDb>
@@ -174,7 +174,7 @@
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="false" />
+                <index v="true" />
                 <title></title>
                 <description></description>
               </entityFieldDb>
@@ -477,7 +477,7 @@
                 <scale v="9" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="false" />
+                <index v="true" />
                 <title></title>
                 <description></description>
               </entityFieldDb>
@@ -490,7 +490,7 @@
                 <scale v="9" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="false" />
+                <index v="true" />
                 <title></title>
                 <description></description>
               </entityFieldDb>
@@ -503,7 +503,7 @@
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="false" />
+                <index v="true" />
                 <title></title>
                 <description></description>
               </entityFieldDb>
@@ -516,7 +516,7 @@
                 <scale v="9" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="false" />
+                <index v="true" />
                 <title></title>
                 <description></description>
               </entityFieldDb>
@@ -529,7 +529,7 @@
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="false" />
+                <index v="true" />
                 <title></title>
                 <description></description>
               </entityFieldDb>
@@ -568,7 +568,7 @@
                 <scale v="9" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="false" />
+                <index v="true" />
                 <title></title>
                 <description></description>
               </entityFieldDb>
@@ -581,7 +581,7 @@
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="false" />
+                <index v="true" />
                 <title></title>
                 <description></description>
               </entityFieldDb>
@@ -620,7 +620,7 @@
                 <scale v="9" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="false" />
+                <index v="true" />
                 <title></title>
                 <description></description>
               </entityFieldDb>
@@ -633,7 +633,7 @@
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="false" />
+                <index v="true" />
                 <title></title>
                 <description></description>
               </entityFieldDb>
@@ -700,12 +700,12 @@
               <entityFieldDb>
                 <name>DBID</name>
                 <dbName></dbName>
-                <primaryKey v="true" />
+                <primaryKey v="false" />
                 <columnType v="12" />
-                <size v="191" />
+                <size v="1023" />
                 <scale v="0" />
-                <notNull v="true" />
-                <isUnique v="true" />
+                <notNull v="false" />
+                <isUnique v="false" />
                 <index v="true" />
                 <title></title>
                 <description></description>
@@ -745,7 +745,7 @@
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="false" />
+                <index v="true" />
                 <title></title>
                 <description></description>
               </entityFieldDb>
@@ -778,13 +778,13 @@
               <entityFieldDb>
                 <name>ID</name>
                 <dbName></dbName>
-                <primaryKey v="false" />
+                <primaryKey v="true" />
                 <columnType v="1" />
                 <size v="36" />
                 <scale v="0" />
                 <notNull v="true" />
-                <isUnique v="false" />
-                <index v="false" />
+                <isUnique v="true" />
+                <index v="true" />
                 <title></title>
                 <description></description>
               </entityFieldDb>
@@ -883,7 +883,7 @@
                 <scale v="0" />
                 <notNull v="true" />
                 <isUnique v="false" />
-                <index v="false" />
+                <index v="true" />
                 <title></title>
                 <description></description>
               </entityFieldDb>
@@ -896,7 +896,7 @@
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="false" />
+                <index v="true" />
                 <title></title>
                 <description></description>
               </entityFieldDb>
@@ -930,7 +930,7 @@
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="false" />
+                <index v="true" />
                 <title></title>
                 <description></description>
               </entityFieldDb>
@@ -964,8 +964,8 @@
                 <name>DESCRIPTION</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="2005" />
-                <size v="2147483647" />
+                <columnType v="12" />
+                <size v="255" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -1020,8 +1020,8 @@
                 <size v="63" />
                 <scale v="0" />
                 <notNull v="true" />
-                <isUnique v="false" />
-                <index v="false" />
+                <isUnique v="true" />
+                <index v="true" />
                 <title></title>
                 <description></description>
               </entityFieldDb>
@@ -1034,7 +1034,7 @@
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="false" />
+                <index v="true" />
                 <title></title>
                 <description></description>
               </entityFieldDb>
@@ -1142,7 +1142,7 @@
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="12" />
-                <size v="15" />
+                <size v="16" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -1242,7 +1242,7 @@
                 <dbName></dbName>
                 <primaryKey v="true" />
                 <columnType v="1" />
-                <size v="36" />
+                <size v="63" />
                 <scale v="0" />
                 <notNull v="true" />
                 <isUnique v="true" />
@@ -1393,7 +1393,7 @@
                 <dbName></dbName>
                 <primaryKey v="true" />
                 <columnType v="1" />
-                <size v="36" />
+                <size v="63" />
                 <scale v="0" />
                 <notNull v="true" />
                 <isUnique v="true" />
@@ -1497,7 +1497,7 @@
                 <dbName></dbName>
                 <primaryKey v="false" />
                 <columnType v="12" />
-                <size v="63" />
+                <size v="512" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -1707,6 +1707,20 @@
                 <title></title>
                 <description></description>
               </entityFieldDb>
+              <entityFieldDb>
+                <name>SUBCATEGORY</name>
+                <dbName></dbName>
+                <primaryKey v="false" />
+                <columnType v="12" />
+                <size v="256" />
+                <scale v="0" />
+                <notNull v="false" />
+                <isUnique v="false" />
+                <index v="false" />
+                <documentation></documentation>
+                <title></title>
+                <description></description>
+              </entityFieldDb>
             </entityFields>
           </entityDb>
           <entityDb>
@@ -2049,8 +2063,8 @@
                 <name>ASSIGNABLE</name>
                 <dbName></dbName>
                 <primaryKey v="false" />
-                <columnType v="4" />
-                <size v="10" />
+                <columnType v="5" />
+                <size v="5" />
                 <scale v="0" />
                 <notNull v="false" />
                 <isUnique v="false" />
@@ -2304,7 +2318,7 @@
                 <scale v="9" />
                 <notNull v="false" />
                 <isUnique v="false" />
-                <index v="false" />
+                <index v="true" />
                 <documentation></documentation>
                 <title></title>
                 <description></description>
@@ -2615,8 +2629,8 @@
                 <size v="63" />
                 <scale v="0" />
                 <notNull v="true" />
-                <isUnique v="true" />
-                <index v="true" />
+                <isUnique v="false" />
+                <index v="false" />
                 <documentation></documentation>
                 <title></title>
                 <description></description>
@@ -2624,11 +2638,11 @@
               <entityFieldDb>
                 <name>TAGNAME</name>
                 <dbName></dbName>
-                <primaryKey v="false" />
+                <primaryKey v="true" />
                 <columnType v="12" />
                 <size v="63" />
                 <scale v="0" />
-                <notNull v="false" />
+                <notNull v="true" />
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
@@ -2638,11 +2652,11 @@
               <entityFieldDb>
                 <name>TAGVALUE</name>
                 <dbName></dbName>
-                <primaryKey v="false" />
+                <primaryKey v="true" />
                 <columnType v="12" />
                 <size v="63" />
                 <scale v="0" />
-                <notNull v="false" />
+                <notNull v="true" />
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
diff --git a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod
index 2de36e834097c76b055a391c9ed833036b720f86..12e1b3dbc18300005affb2292a9d4bf03fadb450 100644
--- a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod
+++ b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod
@@ -247,6 +247,28 @@
           </entityNode>
         </childNodes>
       </entityNode>
+      <entityNode>
+        <name>Group</name>
+        <kind v="123" />
+        <title>Knowledge Management</title>
+        <icon>VAADIN:ACADEMY_CAP</icon>
+        <childNodes>
+          <entityNode>
+            <name>Group5</name>
+            <kind v="123" />
+            <childNodes>
+              <entityNode>
+                <name>INTERNAL_EVERYONE</name>
+                <kind v="159" />
+              </entityNode>
+              <entityNode>
+                <name>KnowledgeManagement</name>
+                <kind v="10077" />
+              </entityNode>
+            </childNodes>
+          </entityNode>
+        </childNodes>
+      </entityNode>
       <entityNode>
         <name>Administration</name>
         <kind v="123" />
@@ -323,7 +345,7 @@
         </childNodes>
       </entityNode>
       <entityNode>
-        <name>User Administration</name>
+        <name>Useradministration</name>
         <kind v="123" />
         <title>User Administration</title>
         <icon>VAADIN:UNLINK</icon>
diff --git a/entity/360Degree_entity/360Degree_entity.aod b/entity/360Degree_entity/360Degree_entity.aod
index e4125015133a7668cae22904bce30d1369e33115..730a2527675aa0dbfc3346850a81cb7961110d5a 100644
--- a/entity/360Degree_entity/360Degree_entity.aod
+++ b/entity/360Degree_entity/360Degree_entity.aod
@@ -25,6 +25,7 @@
     </entityField>
     <entityField>
       <name>TITLE</name>
+      <title>Title</title>
       <linkedContextProcess>%aditoprj%/entity/360Degree_entity/entityfields/title/linkedContextProcess.js</linkedContextProcess>
     </entityField>
     <entityParameter>
@@ -42,14 +43,6 @@
       <targetContextField>TARGET_CONTEXT</targetContextField>
       <targetIdField>TARGET_ID</targetIdField>
       <documentation>%aditoprj%/entity/360Degree_entity/entityfields/organisationobjects/documentation.adoc</documentation>
-      <dependencies>
-        <entityDependency>
-          <name>15488007-165c-4630-828a-447cf2c27899</name>
-          <entityName>Organisation_entity</entityName>
-          <fieldName>360DegreeObjects</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
@@ -61,6 +54,14 @@
           <valueProcess>%aditoprj%/entity/360Degree_entity/entityfields/organisationobjects/children/basecontextid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>15488007-165c-4630-828a-447cf2c27899</name>
+          <entityName>Organisation_entity</entityName>
+          <fieldName>360DegreeObjects</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityField>
       <name>TARGET_CONTEXT</name>
@@ -71,11 +72,10 @@
     <entityField>
       <name>ENTITY_NAME</name>
       <title>Module</title>
-      <groupable v="true" />
       <valueProcess>%aditoprj%/entity/360Degree_entity/entityfields/entity_name/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
-      <name>DATE</name>
+      <name>DATE_NEW</name>
       <title>Date</title>
       <contentType>DATE</contentType>
       <resolution>DAY</resolution>
@@ -85,14 +85,6 @@
       <targetContextField>TARGET_CONTEXT</targetContextField>
       <targetIdField>TARGET_ID</targetIdField>
       <documentation>%aditoprj%/entity/360Degree_entity/entityfields/personobjects/documentation.adoc</documentation>
-      <dependencies>
-        <entityDependency>
-          <name>1d931ae6-137a-4db3-b02c-eb8872d349c6</name>
-          <entityName>Person_entity</entityName>
-          <fieldName>360DegreeObjects</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
@@ -104,13 +96,15 @@
           <valueProcess>%aditoprj%/entity/360Degree_entity/entityfields/personobjects/children/basecontextid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>1d931ae6-137a-4db3-b02c-eb8872d349c6</name>
+          <entityName>Person_entity</entityName>
+          <fieldName>360DegreeObjects</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
-    <entityField>
-      <name>YEAR</name>
-      <title>Year</title>
-      <groupable v="true" />
-      <valueProcess>%aditoprj%/entity/360Degree_entity/entityfields/year/valueProcess.js</valueProcess>
-    </entityField>
     <entityActionGroup>
       <name>newModule</name>
       <title>New module</title>
@@ -126,7 +120,7 @@
         </entityActionField>
         <entityActionField>
           <name>newSalesproject</name>
-          <title>Salesproject</title>
+          <title>Sales Project</title>
           <onActionProcess>%aditoprj%/entity/360Degree_entity/entityfields/newmodule/children/newsalesproject/onActionProcess.js</onActionProcess>
           <iconId>VAADIN:BOOK_DOLLAR</iconId>
           <stateProcess>%aditoprj%/entity/360Degree_entity/entityfields/newmodule/children/newsalesproject/stateProcess.js</stateProcess>
@@ -166,13 +160,6 @@
       <contentType>IMAGE</contentType>
       <valueProcess>%aditoprj%/entity/360Degree_entity/entityfields/icon/valueProcess.js</valueProcess>
     </entityField>
-    <entityField>
-      <name>ACTIVE</name>
-      <title>Active</title>
-      <contentType>TEXT</contentType>
-      <groupable v="true" />
-      <dropDownProcess>%aditoprj%/entity/360Degree_entity/entityfields/active/dropDownProcess.js</dropDownProcess>
-    </entityField>
     <entityParameter>
       <name>BaseContextId_param</name>
       <expose v="true" />
@@ -185,6 +172,25 @@
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
     </entityProvider>
+    <entityField>
+      <name>GROUP</name>
+      <title>Group</title>
+      <groupable v="true" />
+    </entityField>
+    <entityField>
+      <name>DESCRIPTION</name>
+      <title>Description</title>
+    </entityField>
+    <entityField>
+      <name>YEAR</name>
+      <title>Year</title>
+      <groupable v="true" />
+    </entityField>
+    <entityField>
+      <name>ACTIVE</name>
+      <title>Active</title>
+      <dropDownProcess>%aditoprj%/entity/360Degree_entity/entityfields/active/dropDownProcess.js</dropDownProcess>
+    </entityField>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
@@ -203,20 +209,32 @@
         <jDitoRecordFieldMapping>
           <name>TARGET_CONTEXT.value</name>
         </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>TARGET_CONTEXT.displayValue</name>
+        </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
           <name>TITLE.value</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
-          <name>DATE.value</name>
+          <name>DESCRIPTION.value</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
-          <name>ACTIVE.value</name>
+          <name>DATE_NEW.value</name>
           <isFilterable v="true" />
-          <isLookupFilter v="true" />
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>YEAR.value</name>
         </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
           <name>ENTITY_NAME.value</name>
         </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>GROUP.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ACTIVE.value</name>
+          <isFilterable v="true" />
+        </jDitoRecordFieldMapping>
       </recordFieldMappings>
     </jDitoRecordContainer>
   </recordContainers>
diff --git a/entity/360Degree_entity/documentation.adoc b/entity/360Degree_entity/documentation.adoc
index d14c31a7c939c89fb3ace5ae20758bb83cb2f522..b07c00500ceb7ed1fc24f01140cf046eb2f41251 100644
--- a/entity/360Degree_entity/documentation.adoc
+++ b/entity/360Degree_entity/documentation.adoc
@@ -3,9 +3,9 @@
 The 360Degree_entity shows the Connection between data models.
 The entity has two providers for persons and organizations.
 
-The 360Degree_entity shows direct connections, don´t be confused with the ObjectRelation_entity.
+The 360Degree_entity shows direct connections, don´t be confused with the ObjectRelation_entity.
 
-== Adding new modules to the 360° view
+== Adding new modules to the 360° view
 You may want to display more modules within the 360degree view (for example after creating and implemeting your own module).
 
 .An Example:
@@ -14,6 +14,23 @@ display it in the 360degree view.
 
 Heres is a list of what you need to do whenever you want to do this:
 
-- Add an entry in the function `ContextUtils.getSelectMap` which is located in the `Context_lib` (check out the documentation there for further details). _Speaking of the example above you need to define there how to retrieve the t-shirt-data for a contact_
+- At first you have to fill/add certain Fields/Processes in your new Context.
+    - Add (These have to be written exactly like that, if not already existing):
+        - DATE_NEW, this Field has to contain a Date as a Long Value. That will be used as the Date Value you can see in the Timeline View-Template.
+        - ACTIVE, in this Field you can specify which Datasets are active or not. You have to declare that in the Value Expression as a Case-When due to the Filter
+    - Fill (these can be filled in the specific Entity as a Process)
+        - #CONTENTTITLE, this will be the main display Text and the blue Link
+        - #CONTENTDESCRIPTION, this will be the smaller, mostly longer, Text beneath the #CONTENTTITLE 
+        
+- Add an element (with the name of the context you want to add) in the process of the `ObjectType_param` in the *corresponding provider* which is located in the `360Degree_entity`. _We would extend the JSON-Object which is returned in the `PersonObjects`-provider by the name of our t-shirt-context: "TShirt" in our example
 
-- Add an entry (with the name of the context you want to add) in the process of the `ObjectType_param` in the *corresponding provider* which is located in the `360Degree_entity`. _We would extend the array which is returned in the `PersonObjects`-provider by the name of our t-shirt-context: "TShirt" in our example_
\ No newline at end of file
+- In that JSON-Object you can/have to add some Configuration Elements to change the results.
+    - connectionField, here you have to declare a Field that writes exactly like the one in your Entity (Standard is CONTACT_ID!!!). The Value of this Field will be used to compare it with the Object_Rowid. 
+    - setGroupBy: here you can declare a DB-Column that will be used as the new group by of that context. A good example is Order. We want to group by the Ordertype so we have to declare ORDERTYPE as our groupBy. 
+        - If your DB-Value is related to a Keyword you also have to use groupByKeyword and add the Container as Value
+
+- If you have a Connection of 1:N in your Database Schema (like Task and TaskLink) you have to add specific Properties in your Context Object. Lets take TaskLink as a Example.
+    - subContext: the Name of the "Link"-Context -> TaskLink
+    - childField: The Field where the LinkID to your Parent is stored -> TASK_ID
+    - parentField: The field in your Parent Context where your Connection to your Child is stored -> TASKID
+    - contactIdField: The Field in the Link Context where your Contactid is stored -> OBJECT_ROWID
\ No newline at end of file
diff --git a/entity/360Degree_entity/entityfields/newmodule/children/newcampaignparticipant/stateProcess.js b/entity/360Degree_entity/entityfields/newmodule/children/newcampaignparticipant/stateProcess.js
index 353aa9f3676bc0c8d4a823b2944a5794acbb4677..fbdfd3fd2e124194d93b908f33d2b56bffbf1bee 100644
--- a/entity/360Degree_entity/entityfields/newmodule/children/newcampaignparticipant/stateProcess.js
+++ b/entity/360Degree_entity/entityfields/newmodule/children/newcampaignparticipant/stateProcess.js
@@ -7,11 +7,11 @@ if (contextList)
 {
     var found = false;
 
-    contextList.forEach(function (context) 
+    for(context in contextList)
     {
         if(context == "Campaign")
             found = true;        
-    });
+    }
     if(found)
         result.string(neon.COMPONENTSTATE_AUTO);
     else
diff --git a/entity/360Degree_entity/entityfields/newmodule/children/newcontract/stateProcess.js b/entity/360Degree_entity/entityfields/newmodule/children/newcontract/stateProcess.js
index f1cfb310581815a99377b7da0152c0483f24d9d5..64c597b2e188312d6589a3d1bbf53cb00ff83e95 100644
--- a/entity/360Degree_entity/entityfields/newmodule/children/newcontract/stateProcess.js
+++ b/entity/360Degree_entity/entityfields/newmodule/children/newcontract/stateProcess.js
@@ -6,11 +6,11 @@ var contextList = JSON.parse(vars.getString("$param.ObjectType_param"));
 if (contextList)
 {
     var found = false;
-    contextList.forEach(function (context) 
+    for(context in contextList)
     {
         if(context == "Contract")
             found = true;        
-    });
+    }
     if(found)
         result.string(neon.COMPONENTSTATE_AUTO);
     else
diff --git a/entity/360Degree_entity/entityfields/newmodule/children/newoffer/stateProcess.js b/entity/360Degree_entity/entityfields/newmodule/children/newoffer/stateProcess.js
index 02a2b07b699e399fed77114a8841d76b2d0d35b1..ce3eb11c9bd8dba37fe4bf96fd936fd9fec4f843 100644
--- a/entity/360Degree_entity/entityfields/newmodule/children/newoffer/stateProcess.js
+++ b/entity/360Degree_entity/entityfields/newmodule/children/newoffer/stateProcess.js
@@ -6,11 +6,11 @@ var contextList = JSON.parse(vars.getString("$param.ObjectType_param"));
 if (contextList)
 {
     var found = false;
-    contextList.forEach(function (context) 
+    for(context in contextList)
     {
         if(context == "Offer")
             found = true;        
-    });
+    }
     if(found)
         result.string(neon.COMPONENTSTATE_AUTO);
     else
diff --git a/entity/360Degree_entity/entityfields/newmodule/children/neworder/stateProcess.js b/entity/360Degree_entity/entityfields/newmodule/children/neworder/stateProcess.js
index 1c2b2b9123cb9512962e66ccf03bc2c7fecef0ab..6b9ec8164168c9286b1646b88d8f18e83708d833 100644
--- a/entity/360Degree_entity/entityfields/newmodule/children/neworder/stateProcess.js
+++ b/entity/360Degree_entity/entityfields/newmodule/children/neworder/stateProcess.js
@@ -6,11 +6,11 @@ var contextList = JSON.parse(vars.getString("$param.ObjectType_param"));
 if (contextList)
 {
     var found = false;
-    contextList.forEach(function (context) 
+    for(context in contextList)
     {
         if(context == "Order")
             found = true;        
-    });
+    }
     if(found)
         result.string(neon.COMPONENTSTATE_AUTO);
     else
diff --git a/entity/360Degree_entity/entityfields/newmodule/children/newsalesproject/stateProcess.js b/entity/360Degree_entity/entityfields/newmodule/children/newsalesproject/stateProcess.js
index f23023f7d177f0f5d7eec62b42371db2b0289173..6a18dc9adfd19a69b749c88e9282cfb186e35d5c 100644
--- a/entity/360Degree_entity/entityfields/newmodule/children/newsalesproject/stateProcess.js
+++ b/entity/360Degree_entity/entityfields/newmodule/children/newsalesproject/stateProcess.js
@@ -7,11 +7,11 @@ if (contextList)
 {
     var found = false;
     
-    contextList.forEach(function (context) 
+    for(context in contextList)
     {
         if(context == "Salesproject")
             found = true;        
-    });
+    }
     if(found)
         result.string(neon.COMPONENTSTATE_AUTO);
     else
diff --git a/entity/360Degree_entity/entityfields/organisationobjects/children/objecttype_param/valueProcess.js b/entity/360Degree_entity/entityfields/organisationobjects/children/objecttype_param/valueProcess.js
index 86503dcd7f316c24dd3b7e31d296e35802db29a4..9b0fe874baa54a8604d5955087be959dfb644563 100644
--- a/entity/360Degree_entity/entityfields/organisationobjects/children/objecttype_param/valueProcess.js
+++ b/entity/360Degree_entity/entityfields/organisationobjects/children/objecttype_param/valueProcess.js
@@ -3,4 +3,21 @@ import("system.result");
 
 //No campaign, since a campaign can only be linked with a person. 
 //Even when all entries of persons are displayed in the organisation_entity: It's still nonsense to display campaigns per status.
-result.object(["Salesproject", "Offer", "Order", "Contract", "SupportTicket"]);
\ No newline at end of file
+
+var res = {
+    "Salesproject": {}, 
+    "Offer": {}, 
+    "Order": {
+        "setGroupBy":"ORDERTYPE",
+        "groupByKeyword":"OrderType"
+    }, 
+    "Contract": {}, 
+    "SupportTicket": {
+        "subContext":"TaskLink",
+        "childField":"TASK_ID",
+        "parentField":"TASK_TASKID",
+        "contactIdField":"OBJECT_ROWID"
+    }
+}
+
+result.string(JSON.stringify(res))
\ No newline at end of file
diff --git a/entity/360Degree_entity/entityfields/personobjects/children/objecttype_param/valueProcess.js b/entity/360Degree_entity/entityfields/personobjects/children/objecttype_param/valueProcess.js
index 51c40eed05ba103ae4347347277aea4e2bad20a3..0764eff7f7bb307932d6c09366ff99f6431a1114 100644
--- a/entity/360Degree_entity/entityfields/personobjects/children/objecttype_param/valueProcess.js
+++ b/entity/360Degree_entity/entityfields/personobjects/children/objecttype_param/valueProcess.js
@@ -1,4 +1,14 @@
 import("system.vars");
 import("system.result");
 
-result.object(["Offer", "Contract", "Campaign", "Order", "SupportTicket"]);
\ No newline at end of file
+var res = { 
+    "Offer": {}, 
+    "Order": {
+        "setGroupBy":"ORDERTYPE"
+    }, 
+    "Contract": {}, 
+    "SupportTicket": {},
+    "Campaign": {}
+}
+
+result.string(JSON.stringify(res))
\ No newline at end of file
diff --git a/entity/360Degree_entity/entityfields/year/valueProcess.js b/entity/360Degree_entity/entityfields/year/valueProcess.js
deleted file mode 100644
index c21dcc8cde6f3f27028dbb1844895cc55f093ff8..0000000000000000000000000000000000000000
--- a/entity/360Degree_entity/entityfields/year/valueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.datetime");
-import("system.result");
-import("system.vars");
-
-var dateVal = vars.get("$field.DATE");
-result.string(datetime.toDate(dateVal, "yyyy"));
\ No newline at end of file
diff --git a/entity/360Degree_entity/recordcontainers/jdito/contentProcess.js b/entity/360Degree_entity/recordcontainers/jdito/contentProcess.js
index 3014803809e5526a81241581d3f12bc965edf216..f6417bb26a778fd4df642ffb42f2f127742c3905 100644
--- a/entity/360Degree_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/360Degree_entity/recordcontainers/jdito/contentProcess.js
@@ -1,36 +1,20 @@
-import("system.util");
-import("system.db");
-import("system.vars");
+import("system.datetime");
+import("system.logging");
+import("Util_lib");
+import("system.translate");
 import("system.result");
+import("system.vars");
 import("Context_lib");
-import("system.translate");
+import("Keyword_lib");
 
-if (vars.exists("$param.ObjectType_param") && vars.get("$param.ObjectType_param") && vars.exists("$param.ObjectRowId_param") && vars.get("$param.ObjectRowId_param"))
-{    
-    var active;
-    var selectMap = ContextUtils.getSelectMap();
-    if(vars.exists("$local.filter") && vars.get("$local.filter") )
-    {
-        var filter = vars.get("$local.filter");
-        if (filter.filter)
-            if(filter.filter.childs != null && filter.filter.childs.length > 0)
-            {
-                filter.filter.childs.forEach(function(child)
-                {
-                    if(child.name === "ACTIVE")
-                        active = child.key == 'true';
-                });  
-            }  
-    }
-    
-    var contextList = JSON.parse(vars.getString("$param.ObjectType_param"));
-    var contactId = vars.get("$param.ObjectRowId_param");
-    var idValues;
-    if (vars.exists("$local.idvalues"))
-        idValues = vars.get("$local.idvalues");
-    
-    var res =  _get360Data(selectMap, contactId, contextList, active, idValues);
-    result.object(res);   
+
+if (vars.exists("$param.ObjectType_param") && vars.get("$param.ObjectType_param") 
+    && vars.exists("$param.ObjectRowId_param") && vars.get("$param.ObjectRowId_param"))
+{
+    var contextList = JSON.parse(vars.get("$param.ObjectType_param"));
+    var contactId = JSON.parse(vars.get("$param.ObjectRowId_param"));
+    var data = _get360Data(contactId, contextList);
+    result.object(data);   
 } 
 else
 {
@@ -38,79 +22,65 @@ else
 }
 
 /** 
- * load all data for the 360Degree tree.
- * @param {Object} pSelectMap the select map (result of ContextUtils.getSelectMap())
- * @param {String[]} pContactId the Contactid the 360 Degree tree should be loaded for
- * @param {String[]} pContextList list of contexts to load. Note that subcontexts use their own list, defined in ContextUtils
- * @param {Boolean} [pActive=undefined] if not undefined: it select only for active / inactive state
- * @param {Array} [pUids=undefined] uids of the 360° entity that are used for filtering, each rowId needs the format: 
- *                                    {id: "«rowid»", type: "«context id»"}
+ * collects all data for the 360Degree tree.
+ * @param {String} pContactId, the main Contactid that will be used for the Connections
+ * @param {String[]} pContextList, a list of Contexts that should be displayed
  *  
  *  @return {String[][]} the resulting data
  */
-function _get360Data(pSelectMap, pContactId, pContextList, pActive, pUids)
+function _get360Data(pContactId, pContextList)
 {   
-    //if there are uids for filtering, group them per context:
-    var uidContextMap = new Map();//Map where key is the type (contextname) and value is an array of the rowIds for that type
-    if (pUids)
-    {
-        pUids.forEach(function (uid){
-            uid = JSON.parse(uid);
-            if (uidContextMap.has(uid.type))
-                uidContextMap.get(uid.type).push(uid.id);
-            else
-                uidContextMap.set(uid.type, [uid.id]);
-        });
-    }
-
     var resultList = [];
-    pContextList.forEach(function (context) 
+    var filter = vars.get("$sys.filter");
+    for(var context in pContextList) 
     {
-        var rowIds;
-        if (pUids)
-        {
-            //when a Uid-filter exists, but there is no context for filtering we can skip that context, 
-            //otherwise we need to filter for the found row ids of that context
-            if (!uidContextMap.has(context))
-                return;
-            else
-                rowIds = uidContextMap.get(context);
-        }
-        var data = db.table(ContextUtils.getContextDataSql(context, JSON.parse(pContactId), true, pActive, true, true, rowIds));
-        data.forEach(function (row) 
+        var group = context;
+        if(pContextList[context].hasOwnProperty("setGroupBy") && pContextList[context].hasOwnProperty("groupByKeyword"))
+            var groupKeyword = Utils.objectFromMap(new Map(KeywordUtils.getEntryNamesAndIdsByContainer(pContextList[context]["groupByKeyword"])));
+
+        var res = ContextUtils.getContextDataViaReadEntity(context, pContextList[context], filter, pContactId);
+        if(res.length > 0)
         {
-            var active;
-            if(pActive != undefined) //ACTIVE
-                active = translate.text(pActive);
-            else
+            res.forEach(function (row) 
             {
-                if(pSelectMap[context].activeStates && pSelectMap[context].activeStates.indexOf(row[3]) > -1)    
-                    active = translate.text("true");
-                else
-                    active = translate.text("false");
-            }
-            
-            var groupBy = row[4];
-            if(groupBy == "")
-                groupBy = ContextUtils.getEntityTitle(context, true);
-            
-            var uid = JSON.stringify({id: row[0], type: context});
-            resultList.push([
-                uid, // UID
-                row[0], // TARGET_ID
-                context, // TARGET_CONTEXT
-                row[1], // TITLE
-                row[2], //DATE
-                active,
-                groupBy
-                ]); 
-        });
-    });  
-    
-    resultList.sort(function (a,b) {
-        if (a[4] < b[4]) return  1;
-        if (a[4] > b[4]) return -1;
-        return 0;
-    })
+                var uid = JSON.stringify({
+                    "id": row["#UID"], 
+                    "type": context
+                });
+                var targetid = row["#UID"];
+                var title = row["#CONTENTTITLE"];
+                var description = row["#CONTENTDESCRIPTION"];
+                var dataDate = row["DATE_NEW"];
+                var active = row["ACTIVE"];
+                if(pContextList[context].hasOwnProperty("setGroupBy"))
+                    group = row[pContextList[context]["setGroupBy"]]
+                
+
+                if(pContextList[context].hasOwnProperty("setGroupBy"))
+                {
+                    if( pContextList[context].hasOwnProperty("groupByKeyword") && groupKeyword)
+                        group = groupKeyword[row[pContextList[context]["setGroupBy"]]]
+                    else
+                        group = row[pContextList[context]["setGroupBy"]]
+                }
+                
+                resultList.push([
+                    uid,                                          // UID
+                    targetid,                                     // TARGET_ID
+                    context,                                      // TARGET_CONTEXT
+                    translate.text(pContextList[context]),        // TARGET_CONTEXT.displayValue
+                    title,                                        // TITLE
+                    description,                                  // DESCRIPTION
+                    dataDate,                                     // DATE
+                    datetime.toDate(dataDate, "yyyy"),            // YEAR
+                    ContextUtils.getEntity(context),              // ENTITY_NAME
+                    translate.text(group),                        // GROUP
+                    active                                        // ACTIVE
+                    ]); 
+            });
+        }
+    }
+    var sortArr = [9, false]
+    resultList = ArrayUtils.sortMulti(resultList, sortArr)
     return resultList;
 }
\ No newline at end of file
diff --git a/entity/ActivityLink_entity/ActivityLink_entity.aod b/entity/ActivityLink_entity/ActivityLink_entity.aod
index e5518fff2fac73d9b45fcd177cd580a8edf2a289..7603602585dc40819b65359733ab6f6a5773002a 100644
--- a/entity/ActivityLink_entity/ActivityLink_entity.aod
+++ b/entity/ActivityLink_entity/ActivityLink_entity.aod
@@ -40,6 +40,12 @@
       <targetIdField>OBJECT_ROWID</targetIdField>
       <documentation>%aditoprj%/entity/ActivityLink_entity/entityfields/links/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
+      <children>
+        <entityParameter>
+          <name>ActivityId_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>148c98ea-a24b-453a-afe9-975555486b2c</name>
@@ -48,26 +54,20 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ActivityId_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityConsumer>
       <name>Objects</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Object_entity</entityName>
-        <fieldName>AllObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
           <valueProcess>%aditoprj%/entity/ActivityLink_entity/entityfields/objects/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Object_entity</entityName>
+        <fieldName>AllObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Context</name>
diff --git a/entity/ActivityLink_entity/entityfields/object_rowid/displayValueProcess.js b/entity/ActivityLink_entity/entityfields/object_rowid/displayValueProcess.js
index 8b080bceea92c146a676b0f33cc7cb87d4e86b9d..95c4eea5367140dc2d81e470ba0607adf52f07c1 100644
--- a/entity/ActivityLink_entity/entityfields/object_rowid/displayValueProcess.js
+++ b/entity/ActivityLink_entity/entityfields/object_rowid/displayValueProcess.js
@@ -7,5 +7,5 @@ import("Context_lib");
 if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$field.OBJECT_ROWID")) {
     result.string("");
 } else if (vars.exists("$field.OBJECT_TYPE") && vars.get("$field.OBJECT_TYPE")) {
-    result.string(db.cell(ContextUtils.getNameSql(vars.get("$field.OBJECT_TYPE"), vars.get("$field.OBJECT_ROWID"))));
+    result.string(ContextUtils.getTitleByContext(vars.get("$field.OBJECT_TYPE"), vars.get("$field.OBJECT_ROWID")));
 }
\ No newline at end of file
diff --git a/entity/ActivityLink_entity/recordcontainers/db/conditionProcess.js b/entity/ActivityLink_entity/recordcontainers/db/conditionProcess.js
index 8c0ab0e94b135d4b1b475ecbbde7900cd3fd109e..62c7fcc7146f0ddc96c32458381a18507a831252 100644
--- a/entity/ActivityLink_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/ActivityLink_entity/recordcontainers/db/conditionProcess.js
@@ -5,5 +5,4 @@ import("Sql_lib");
 
 var cond = newWhereIfSet("ACTIVITYLINK.ACTIVITY_ID", "$param.ActivityId_param", SqlBuilder.EQUAL());
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Activity_entity/Activity_entity.aod b/entity/Activity_entity/Activity_entity.aod
index 9163db06e98eabcd7d5addaa2c6d2a2dfcd6f17a..ddb1971da5fe2dd72dba504187bbf76b890f6bf9 100644
--- a/entity/Activity_entity/Activity_entity.aod
+++ b/entity/Activity_entity/Activity_entity.aod
@@ -117,11 +117,6 @@
     <entityConsumer>
       <name>Documents</name>
       <selectionMode>MULTI</selectionMode>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>Documents</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -132,15 +127,15 @@
           <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>MainDocuments</name>
-      <stateProcess>%aditoprj%/entity/Activity_entity/entityfields/maindocuments/stateProcess.js</stateProcess>
       <dependency>
         <name>dependency</name>
         <entityName>Document_entity</entityName>
-        <fieldName>MainDocuments</fieldName>
+        <fieldName>Documents</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>MainDocuments</name>
+      <stateProcess>%aditoprj%/entity/Activity_entity/entityfields/maindocuments/stateProcess.js</stateProcess>
       <children>
         <entityParameter>
           <name>AssignmentTable_param</name>
@@ -151,12 +146,18 @@
           <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/maindocuments/children/assignmentrowid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>MainDocuments</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>ENTRYMONTH</name>
       <title>Date (Month)</title>
       <contentType>TEXT</contentType>
       <groupable v="true" />
+      <displayValueProcess>%aditoprj%/entity/Activity_entity/entityfields/entrymonth/displayValueProcess.js</displayValueProcess>
       <onValueChangeTypes>
         <element>MASK</element>
         <element>PROCESS</element>
@@ -165,25 +166,20 @@
     </entityField>
     <entityConsumer>
       <name>Links</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>ActivityLink_entity</entityName>
-        <fieldName>Links</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ActivityId_param</name>
           <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/links/children/activityid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordDirections</name>
       <dependency>
         <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
+        <entityName>ActivityLink_entity</entityName>
+        <fieldName>Links</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordDirections</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -191,11 +187,47 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>LinkedObjects</name>
       <documentation>%aditoprj%/entity/Activity_entity/entityfields/linkedobjects/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
+      <children>
+        <entityParameter>
+          <name>OnlyInnate_param</name>
+          <expose v="false" />
+          <documentation>%aditoprj%/entity/Activity_entity/entityfields/linkedobjects/children/onlyinnate_param/documentation.adoc</documentation>
+        </entityParameter>
+        <entityParameter>
+          <name>ObjectId_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>RowId_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>PresetLinks_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>ParentContext_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>ParentId_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>PresetDocuments_param</name>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>8ececf30-a3bc-4cd2-ad04-fb9f3cb9332d</name>
@@ -276,37 +308,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>OnlyInnate_param</name>
-          <expose v="false" />
-          <documentation>%aditoprj%/entity/Activity_entity/entityfields/linkedobjects/children/onlyinnate_param/documentation.adoc</documentation>
-        </entityParameter>
-        <entityParameter>
-          <name>ObjectId_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>RowId_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>PresetLinks_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>ParentContext_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>ParentId_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>PresetDocuments_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityField>
       <name>RESPONSIBLE</name>
@@ -320,11 +321,6 @@
     </entityField>
     <entityConsumer>
       <name>ModuleTrees</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>ModuleTree_entity</entityName>
-        <fieldName>TreeProviders</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContextName_param</name>
@@ -337,6 +333,11 @@
           <mandatory v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>ModuleTree_entity</entityName>
+        <fieldName>TreeProviders</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>newActivity</name>
@@ -377,11 +378,6 @@
     </entityField>
     <entityConsumer>
       <name>KeywordCategories</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -389,6 +385,11 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>ENTRYDAY</name>
@@ -398,11 +399,6 @@
     <entityConsumer>
       <name>Attributes</name>
       <onValidation>%aditoprj%/entity/Activity_entity/entityfields/attributes/onValidation.js</onValidation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>AttributeRelations</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -413,6 +409,11 @@
           <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/attributes/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>AttributeRelations</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>newOffer</name>
@@ -437,11 +438,6 @@
     </entityParameter>
     <entityConsumer>
       <name>AttributeTree</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>TreeProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -452,6 +448,11 @@
           <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/attributetree/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>TreeProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>USER_NEW</name>
@@ -519,11 +520,6 @@
     </entityParameter>
     <entityConsumer>
       <name>ActivityAtrributes</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Attribute_entity</entityName>
-        <fieldName>ThemeProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ThemeObjectRowId_param</name>
@@ -534,14 +530,14 @@
           <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/activityatrributes/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>AttributeTreeIsTheme</name>
       <dependency>
         <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>TreeProvider</fieldName>
+        <entityName>Attribute_entity</entityName>
+        <fieldName>ThemeProvider</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>AttributeTreeIsTheme</name>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
@@ -556,6 +552,11 @@
           <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/attributetreeistheme/children/gettheme_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>TreeProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>ENTRYYEAR</name>
@@ -576,18 +577,31 @@
     </entityParameter>
     <entityConsumer>
       <name>LogHistories</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>LogHistory_entity</entityName>
-        <fieldName>LogHistoryProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>tablenames_param</name>
           <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>LogHistory_entity</entityName>
+        <fieldName>LogHistoryProvider</fieldName>
+      </dependency>
     </entityConsumer>
+    <entityActionGroup>
+      <name>MSTeamsActions</name>
+      <title>MS Teams</title>
+      <state>EDITABLE</state>
+      <stateProcess>%aditoprj%/entity/Activity_entity/entityfields/msteamsactions/stateProcess.js</stateProcess>
+      <children>
+        <entityActionField>
+          <name>importFromTeams</name>
+          <title>Import from Teams</title>
+          <onActionProcess>%aditoprj%/entity/Activity_entity/entityfields/msteamsactions/children/importfromteams/onActionProcess.js</onActionProcess>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
     <entityParameter>
       <name>Category_param</name>
       <expose v="true" />
diff --git a/entity/Activity_entity/entityfields/msteamsactions/children/importfromteams/onActionProcess.js b/entity/Activity_entity/entityfields/msteamsactions/children/importfromteams/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..102768f5f8e122cca4946d1cce6beae65d2e3ff5
--- /dev/null
+++ b/entity/Activity_entity/entityfields/msteamsactions/children/importfromteams/onActionProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("system.neon");
+
+neon.openContext("MSTeamsActivityImport", "MSTeamsActivityImportEdit_view", null, neon.OPERATINGSTATE_VIEW, {
+    "ObjectRowId_param" : vars.get("$param.RowId_param"),
+    "ObjectType_param": vars.get("$param.ObjectId_param")
+});
\ No newline at end of file
diff --git a/entity/Activity_entity/entityfields/msteamsactions/stateProcess.js b/entity/Activity_entity/entityfields/msteamsactions/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..828bf3fc5838fa000ec45ce424e0b3d9e16aeae8
--- /dev/null
+++ b/entity/Activity_entity/entityfields/msteamsactions/stateProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("system.neon");
+import("system.result");
+import("MSTeams_lib");
+
+var isTeamsEnabled = vars.get("$param.ObjectId_param") in MSTeamsUtils.getTeamLinkContexts() && MSTeamsUtils.isTeamsEnabled();
+result.string(/*isTeamsEnabled ? neon.COMPONENTSTATE_EDITABLE : */neon.COMPONENTSTATE_INVISIBLE);
\ No newline at end of file
diff --git a/entity/Activity_entity/recordcontainers/db/conditionProcess.js b/entity/Activity_entity/recordcontainers/db/conditionProcess.js
index 0b11a5004b58c4183c958973a80043c56bcac66f..950fcd1f1dc1877ea33c1de0d3c20e92fd9e654a 100644
--- a/entity/Activity_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Activity_entity/recordcontainers/db/conditionProcess.js
@@ -59,5 +59,4 @@ if (Utils.toBoolean(vars.get("$param.OnlyInnate_param")))
 condition.andIfSet("ACTIVITY.PARENT_ID", "$param.ParentId_param");
 condition.andIfSet("ACTIVITY.PARENT_CONTEXT", "$param.ParentContext_param");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(condition.toString());
\ No newline at end of file
diff --git a/entity/AddressType_entity/AddressType_entity.aod b/entity/AddressType_entity/AddressType_entity.aod
index 44fe6f291552d9072dd56043974aaaf7e422024e..843afd1e218beaffea518bc0979c888cc59da93e 100644
--- a/entity/AddressType_entity/AddressType_entity.aod
+++ b/entity/AddressType_entity/AddressType_entity.aod
@@ -22,6 +22,13 @@
       <name>ByCategory</name>
       <lookupIdfield>KEYID</lookupIdfield>
       <documentation>%aditoprj%/entity/AddressType_entity/entityfields/bycategory/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>UsageFilter_param</name>
+          <expose v="true" />
+          <mandatory v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>0956b1f3-8b67-4f82-b04a-70be88aff19f</name>
@@ -30,13 +37,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>UsageFilter_param</name>
-          <expose v="true" />
-          <mandatory v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>UsageFilter_param</name>
diff --git a/entity/AddressType_entity/recordcontainers/db/conditionProcess.js b/entity/AddressType_entity/recordcontainers/db/conditionProcess.js
index 19180612ce1d42532dc6f3807b84884e8469b4ad..6e937ecf4c22f7a5bb99a4320ddb55e7a32590f0 100644
--- a/entity/AddressType_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/AddressType_entity/recordcontainers/db/conditionProcess.js
@@ -18,5 +18,4 @@ if (usageFilter)
             SqlBuilder.IN())
 }
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/AddressValidation_entity/AddressValidation_entity.aod b/entity/AddressValidation_entity/AddressValidation_entity.aod
index 4f1ed59385145f4ad623b3590763ae1ff9ad8a25..28904169c4f2ebba7d779eaed4ca9ebd8b1383c5 100644
--- a/entity/AddressValidation_entity/AddressValidation_entity.aod
+++ b/entity/AddressValidation_entity/AddressValidation_entity.aod
@@ -17,6 +17,13 @@
     <entityProvider>
       <name>ZipValidaton</name>
       <documentation>%aditoprj%/entity/AddressValidation_entity/entityfields/zipvalidaton/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>Type_param</name>
+          <valueProcess>%aditoprj%/entity/AddressValidation_entity/entityfields/zipvalidaton/children/type_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>fcfcbebe-260a-4773-a874-9791b4887ae2</name>
@@ -25,13 +32,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>Type_param</name>
-          <valueProcess>%aditoprj%/entity/AddressValidation_entity/entityfields/zipvalidaton/children/type_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>Type_param</name>
@@ -75,6 +75,13 @@
     <entityProvider>
       <name>CityValidation</name>
       <documentation>%aditoprj%/entity/AddressValidation_entity/entityfields/cityvalidation/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>Type_param</name>
+          <valueProcess>%aditoprj%/entity/AddressValidation_entity/entityfields/cityvalidation/children/type_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>27114db7-8562-43b2-87d8-fa605bbf2319</name>
@@ -83,13 +90,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>Type_param</name>
-          <valueProcess>%aditoprj%/entity/AddressValidation_entity/entityfields/cityvalidation/children/type_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>CurrentValue_param</name>
@@ -99,6 +99,13 @@
     <entityProvider>
       <name>FullAddressValidation</name>
       <documentation>%aditoprj%/entity/AddressValidation_entity/entityfields/fulladdressvalidation/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>Type_param</name>
+          <valueProcess>%aditoprj%/entity/AddressValidation_entity/entityfields/fulladdressvalidation/children/type_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>10f700b5-1ac6-4d50-bcb8-aae55714fb43</name>
@@ -107,13 +114,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>Type_param</name>
-          <valueProcess>%aditoprj%/entity/AddressValidation_entity/entityfields/fulladdressvalidation/children/type_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityField>
       <name>STREET</name>
@@ -135,6 +135,13 @@
     <entityProvider>
       <name>StreetValidation</name>
       <documentation>%aditoprj%/entity/AddressValidation_entity/entityfields/streetvalidation/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>Type_param</name>
+          <valueProcess>%aditoprj%/entity/AddressValidation_entity/entityfields/streetvalidation/children/type_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>3211d147-0867-4fc1-8640-34a1b8fdcf18</name>
@@ -143,13 +150,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>Type_param</name>
-          <valueProcess>%aditoprj%/entity/AddressValidation_entity/entityfields/streetvalidation/children/type_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>City_param</name>
@@ -194,9 +194,6 @@
         <jDitoRecordFieldMapping>
           <name>DISTRICT.value</name>
         </jDitoRecordFieldMapping>
-        <jDitoRecordFieldMapping>
-          <name>REGION.value</name>
-        </jDitoRecordFieldMapping>
         <jDitoRecordFieldMapping>
           <name>STATE.value</name>
         </jDitoRecordFieldMapping>
diff --git a/entity/AddressValidation_entity/recordcontainers/jdito/contentProcess.js b/entity/AddressValidation_entity/recordcontainers/jdito/contentProcess.js
index e92fed1fd8c707472ada73dd1673279aeb618992..506f8a365a9e962f97b5e7f04490319cc8d883ba 100644
--- a/entity/AddressValidation_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/AddressValidation_entity/recordcontainers/jdito/contentProcess.js
@@ -49,7 +49,6 @@ else
             row.cityExt,
             row.country,
             row.district,
-            row.region,
             row.state,
             row.road,
             row.buildingNo,
diff --git a/entity/Address_entity/Address_entity.aod b/entity/Address_entity/Address_entity.aod
index b1cf501940c85a3f845264d1a6a8bca878db1948..c6e2d95af9f9ed239aa78778b427aa164d21695c 100644
--- a/entity/Address_entity/Address_entity.aod
+++ b/entity/Address_entity/Address_entity.aod
@@ -90,14 +90,6 @@
     <entityProvider>
       <name>OrganisationAddresses</name>
       <documentation>%aditoprj%/entity/Address_entity/entityfields/organisationaddresses/documentation.adoc</documentation>
-      <dependencies>
-        <entityDependency>
-          <name>b484b43c-16f6-4875-9787-f0813dd200cb</name>
-          <entityName>Organisation_entity</entityName>
-          <fieldName>Addresses</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ContactType_param</name>
@@ -118,6 +110,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>b484b43c-16f6-4875-9787-f0813dd200cb</name>
+          <entityName>Organisation_entity</entityName>
+          <fieldName>Addresses</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityParameter>
       <name>ContactId_param</name>
@@ -128,20 +128,6 @@
     <entityProvider>
       <name>ContactAddresses</name>
       <documentation>%aditoprj%/entity/Address_entity/entityfields/contactaddresses/documentation.adoc</documentation>
-      <dependencies>
-        <entityDependency>
-          <name>efdb2f19-ab41-4f49-941a-843610e2b31b</name>
-          <entityName>Person_entity</entityName>
-          <fieldName>PersAddresses</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-        <entityDependency>
-          <name>aecd30a8-b80e-42c5-be09-3042b75a3fa2</name>
-          <entityName>Contact_entity</entityName>
-          <fieldName>ContactAddresses</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ContactType_param</name>
@@ -162,6 +148,20 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>efdb2f19-ab41-4f49-941a-843610e2b31b</name>
+          <entityName>Person_entity</entityName>
+          <fieldName>PersAddresses</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>aecd30a8-b80e-42c5-be09-3042b75a3fa2</name>
+          <entityName>Contact_entity</entityName>
+          <fieldName>ContactAddresses</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityProvider>
       <name>#PROVIDER</name>
@@ -178,14 +178,6 @@
       <name>OrganisationAddressesByContact</name>
       <documentation>%aditoprj%/entity/Address_entity/entityfields/organisationaddressesbycontact/documentation.adoc</documentation>
       <titlePlural>Company Addresses</titlePlural>
-      <dependencies>
-        <entityDependency>
-          <name>388f6ad3-b817-4dc0-a5d5-a41eec485357</name>
-          <entityName>Person_entity</entityName>
-          <fieldName>OrgAddresses</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ContactType_param</name>
@@ -198,6 +190,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>388f6ad3-b817-4dc0-a5d5-a41eec485357</name>
+          <entityName>Person_entity</entityName>
+          <fieldName>OrgAddresses</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityField>
       <name>IS_STANDARD</name>
@@ -223,26 +223,6 @@
     <entityProvider>
       <name>OrganisationAndContactAddresses</name>
       <documentation>%aditoprj%/entity/Address_entity/entityfields/organisationandcontactaddresses/documentation.adoc</documentation>
-      <dependencies>
-        <entityDependency>
-          <name>4d7e3b3a-abba-4429-9f1e-18e11788c0f2</name>
-          <entityName>Person_entity</entityName>
-          <fieldName>ContactAndOrganisationAddresses</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-        <entityDependency>
-          <name>daa41953-8e95-46f2-b08a-6c843ab87985</name>
-          <entityName>Offer_entity</entityName>
-          <fieldName>PossibleAddresses</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-        <entityDependency>
-          <name>2f162626-bd99-4e2a-b9cf-e95864d9ed0e</name>
-          <entityName>Order_entity</entityName>
-          <fieldName>PossibleAddresses</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>DefaultAddressId_param</name>
@@ -264,6 +244,26 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>4d7e3b3a-abba-4429-9f1e-18e11788c0f2</name>
+          <entityName>Person_entity</entityName>
+          <fieldName>ContactAndOrganisationAddresses</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>daa41953-8e95-46f2-b08a-6c843ab87985</name>
+          <entityName>Offer_entity</entityName>
+          <fieldName>PossibleAddresses</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>2f162626-bd99-4e2a-b9cf-e95864d9ed0e</name>
+          <entityName>Order_entity</entityName>
+          <fieldName>PossibleAddresses</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityParameter>
       <name>OrganisationId_param</name>
@@ -272,17 +272,17 @@
     </entityParameter>
     <entityConsumer>
       <name>KeywordAddressTypes</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AddressType_entity</entityName>
-        <fieldName>ByCategory</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>UsageFilter_param</name>
           <valueProcess>%aditoprj%/entity/Address_entity/entityfields/keywordaddresstypes/children/usagefilter_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AddressType_entity</entityName>
+        <fieldName>ByCategory</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>USER_NEW</name>
@@ -309,11 +309,6 @@
     </entityField>
     <entityConsumer>
       <name>ZipValidation</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AddressValidation_entity</entityName>
-        <fieldName>ZipValidaton</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>Country_param</name>
@@ -324,14 +319,14 @@
           <valueProcess>%aditoprj%/entity/Address_entity/entityfields/zipvalidation/children/currentvalue_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>CityValidation</name>
       <dependency>
         <name>dependency</name>
         <entityName>AddressValidation_entity</entityName>
-        <fieldName>CityValidation</fieldName>
+        <fieldName>ZipValidaton</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>CityValidation</name>
       <children>
         <entityParameter>
           <name>CurrentValue_param</name>
@@ -342,6 +337,11 @@
           <valueProcess>%aditoprj%/entity/Address_entity/entityfields/cityvalidation/children/country_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AddressValidation_entity</entityName>
+        <fieldName>CityValidation</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>AddressSearch</name>
@@ -357,11 +357,6 @@
     </entityField>
     <entityConsumer>
       <name>FullAddressValidation</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AddressValidation_entity</entityName>
-        <fieldName>FullAddressValidation</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>CurrentValue_param</name>
@@ -372,14 +367,14 @@
           <valueProcess>%aditoprj%/entity/Address_entity/entityfields/fulladdressvalidation/children/country_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>StreetValidation</name>
       <dependency>
         <name>dependency</name>
         <entityName>AddressValidation_entity</entityName>
-        <fieldName>StreetValidation</fieldName>
+        <fieldName>FullAddressValidation</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>StreetValidation</name>
       <children>
         <entityParameter>
           <name>City_param</name>
@@ -394,6 +389,11 @@
           <valueProcess>%aditoprj%/entity/Address_entity/entityfields/streetvalidation/children/currentvalue_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AddressValidation_entity</entityName>
+        <fieldName>StreetValidation</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ShowDsgvoMessage_param</name>
diff --git a/entity/Address_entity/recordcontainers/db/conditionProcess.js b/entity/Address_entity/recordcontainers/db/conditionProcess.js
index a938934f9b9642e9935641e62b1a9f8d957e1fbc..24b457e53de03c851e12a95bc95830c987a5f0f2 100644
--- a/entity/Address_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Address_entity/recordcontainers/db/conditionProcess.js
@@ -4,13 +4,9 @@ import("system.db");
 import("Sql_lib");
 
 var cond = newWhere()
+    .andIfSet("ADDRESS.CONTACT_ID", "$param.ContactId_param");
 
-if (vars.exists("$param.ContactId_param")) // Todo: shouldn't be needed, but sometimes in the filter view of pers / org the param doesn't exist?? --> It should be null if it's not set...
-    cond.andIfSet("ADDRESS.CONTACT_ID", "$param.ContactId_param");
-
-if (vars.exists("$param.OrganisationId_param")) // Todo: shouldn't be needed, but sometimes in the filter view of pers / org the param doesn't exist??' --> It should be null if it's not set...
-    var organisationId = vars.get("$param.OrganisationId_param");
-
+var organisationId = vars.get("$param.OrganisationId_param");
 if (organisationId)
 {
     var organisationContactId = newSelect("CONTACT.CONTACTID")
@@ -21,5 +17,4 @@ if (organisationId)
     cond.orIfSet("ADDRESS.CONTACT_ID", organisationContactId);
 }
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/AdminViewRow_entity/AdminViewRow_entity.aod b/entity/AdminViewRow_entity/AdminViewRow_entity.aod
index 75795a8f2a19547b7ca64bdadba1dc2bea26f996..e957f3e131e1570cc6fd74e143d74bfe0caec1d6 100644
--- a/entity/AdminViewRow_entity/AdminViewRow_entity.aod
+++ b/entity/AdminViewRow_entity/AdminViewRow_entity.aod
@@ -42,6 +42,11 @@
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
     </entityProvider>
+    <entityActionField>
+      <name>copyValueToClipboard</name>
+      <onActionProcess>%aditoprj%/entity/AdminViewRow_entity/entityfields/copyvaluetoclipboard/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:CLIPBOARD</iconId>
+    </entityActionField>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
diff --git a/entity/AdminViewRow_entity/entityfields/copyvaluetoclipboard/onActionProcess.js b/entity/AdminViewRow_entity/entityfields/copyvaluetoclipboard/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..dd853d9ace41d189f6b152f075fee9c1038e0ecb
--- /dev/null
+++ b/entity/AdminViewRow_entity/entityfields/copyvaluetoclipboard/onActionProcess.js
@@ -0,0 +1,11 @@
+import("system.vars");
+import("system.neon");
+
+var fieldValues = JSON.parse(vars.get("$param.Rows_param"));
+var fieldId = vars.get("$local.uid");
+var row = fieldValues.find(function ([id])
+{
+    return id === fieldId;
+});
+if (row)
+    neon.copyToClipboard(row[2]);
\ No newline at end of file
diff --git a/entity/AnyContact_entity/AnyContact_entity.aod b/entity/AnyContact_entity/AnyContact_entity.aod
index 0d0c5d1d960ce42545577c9ad79cde469d73d4a9..3b3b3c3e9899dc01fc477ddfc3e5f3f910455f69 100644
--- a/entity/AnyContact_entity/AnyContact_entity.aod
+++ b/entity/AnyContact_entity/AnyContact_entity.aod
@@ -3,6 +3,7 @@
   <name>AnyContact_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/entity/AnyContact_entity/documentation.adoc</documentation>
+  <title>Contact</title>
   <contentTitleProcess>%aditoprj%/entity/AnyContact_entity/contentTitleProcess.js</contentTitleProcess>
   <initFilterProcess>%aditoprj%/entity/AnyContact_entity/initFilterProcess.js</initFilterProcess>
   <imageProcess>%aditoprj%/entity/AnyContact_entity/imageProcess.js</imageProcess>
@@ -29,12 +30,6 @@
           <fieldName>AnyContacts</fieldName>
           <isConsumer v="false" />
         </entityDependency>
-        <entityDependency>
-          <name>336fdc6b-05f8-40bc-89ba-d4ab98bd6948</name>
-          <entityName>CampaignParticipant_entity</entityName>
-          <fieldName>AnyContacts</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
         <entityDependency>
           <name>b2895709-2ebf-46ec-a46d-6b2e9a4575a3</name>
           <entityName>BulkMailRecipient_entity</entityName>
@@ -77,11 +72,23 @@
           <fieldName>Contacts</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>ea7c855e-dccd-4c05-9efb-a1303f37dab8</name>
+          <entityName>CampaignParticipant_entity</entityName>
+          <fieldName>AnyContacts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
     </entityProvider>
     <entityProvider>
       <name>ContactsByIds</name>
       <documentation>%aditoprj%/entity/AnyContact_entity/entityfields/contactsbyids/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>0206f7a8-fd58-47e8-8b7a-5ff4531e56fb</name>
@@ -90,12 +97,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ContactId_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>ContactIds_param</name>
@@ -108,6 +109,7 @@
     </entityField>
     <entityField>
       <name>LANGUAGE</name>
+      <title>Language</title>
     </entityField>
     <entityField>
       <name>ORGANISATION_ID</name>
@@ -157,9 +159,11 @@ See ContactUtils.getRelationTypeByPersOrg for possible values</description>
     </entityField>
     <entityField>
       <name>PERSON_TITLE</name>
+      <title>Title</title>
     </entityField>
     <entityField>
       <name>PERSON_SALUTATION</name>
+      <title>Salutation</title>
     </entityField>
     <entityField>
       <name>PERSON_FULL_NAME</name>
@@ -173,6 +177,13 @@ See ContactUtils.getRelationTypeByPersOrg for possible values</description>
     <entityProvider>
       <name>OnlySameCompany</name>
       <documentation>%aditoprj%/entity/AnyContact_entity/entityfields/onlysamecompany/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <expose v="true" />
+          <mandatory v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>28b19d6b-237c-4268-b6c6-323df408c94a</name>
@@ -181,13 +192,6 @@ See ContactUtils.getRelationTypeByPersOrg for possible values</description>
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ContactId_param</name>
-          <expose v="true" />
-          <mandatory v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>WithPrivatePersons_param</name>
@@ -248,6 +252,7 @@ See ContactUtils.getRelationTypeByPersOrg for possible values</description>
         <dbRecordFieldMapping>
           <name>LANGUAGE.value</name>
           <recordfield>CONTACT.ISOLANGUAGE</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>ORGANISATION_ID.value</name>
diff --git a/entity/AnyContact_entity/recordcontainers/db/conditionProcess.js b/entity/AnyContact_entity/recordcontainers/db/conditionProcess.js
index a793d04a1b1ac773414d333e4ccc4e645b1df960..e063f85110e206b097eb26a9bed17fc0b948eabd 100644
--- a/entity/AnyContact_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/AnyContact_entity/recordcontainers/db/conditionProcess.js
@@ -32,5 +32,4 @@ var contactIds = vars.exists("$param.ContactIds_param") && vars.get("$param.Cont
 if (contactIds) 
     cond.andIfSet("CONTACT.CONTACTID", JSON.parse(contactIds), SqlBuilder.IN());
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/AppointmentLink_entity/AppointmentLink_entity.aod b/entity/AppointmentLink_entity/AppointmentLink_entity.aod
index a60f3736b97b1a8f533330412d5d8414e5c1d742..1d6a1b12b3496a05194b7c52de49af7fb6d9b974 100644
--- a/entity/AppointmentLink_entity/AppointmentLink_entity.aod
+++ b/entity/AppointmentLink_entity/AppointmentLink_entity.aod
@@ -51,6 +51,12 @@
       <targetIdField>OBJECTID</targetIdField>
       <documentation>%aditoprj%/entity/AppointmentLink_entity/entityfields/links/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
+      <children>
+        <entityParameter>
+          <name>AppointmentId_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>3dde1745-18a1-4499-83d0-61e414086997</name>
@@ -59,12 +65,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>AppointmentId_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityConsumer>
       <name>Context</name>
@@ -76,17 +76,17 @@
     </entityConsumer>
     <entityConsumer>
       <name>Objects</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Object_entity</entityName>
-        <fieldName>AllObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
           <valueProcess>%aditoprj%/entity/AppointmentLink_entity/entityfields/objects/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Object_entity</entityName>
+        <fieldName>AllObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>opencontext</name>
diff --git a/entity/AppointmentLink_entity/entityfields/objectid/displayValueProcess.js b/entity/AppointmentLink_entity/entityfields/objectid/displayValueProcess.js
index e95adef18a9cb958af3277c59ad305d5d4a786b6..a44f299d8aff2125db0785b0a333771b0af21cd5 100644
--- a/entity/AppointmentLink_entity/entityfields/objectid/displayValueProcess.js
+++ b/entity/AppointmentLink_entity/entityfields/objectid/displayValueProcess.js
@@ -7,5 +7,5 @@ import("Context_lib");
 if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$field.OBJECTID")) {
     result.string("");
 } else if (vars.exists("$field.OBJECTTYPE") && vars.get("$field.OBJECTTYPE")) {
-    result.string(db.cell(ContextUtils.getNameSql(vars.get("$field.OBJECTTYPE"), vars.get("$field.OBJECTID"))));
+    result.string(ContextUtils.getTitleByContext(vars.get("$field.OBJECTTYPE"), vars.get("$field.OBJECTID")));
 }
\ No newline at end of file
diff --git a/entity/AppointmentLink_entity/recordcontainers/db/conditionProcess.js b/entity/AppointmentLink_entity/recordcontainers/db/conditionProcess.js
index b9a9cafdcba80e3ff11803906bddf17e2423c3b3..b44b0652bd7cf463b313517ee246185226d339e4 100644
--- a/entity/AppointmentLink_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/AppointmentLink_entity/recordcontainers/db/conditionProcess.js
@@ -4,5 +4,4 @@ import("Sql_lib");
 
 var cond = newWhereIfSet("AB_APPOINTMENTLINK.APPOINTMENT_ID", "$param.AppointmentId_param")
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Appointment_entity/Appointment_entity.aod b/entity/Appointment_entity/Appointment_entity.aod
index 6f51538041ffc0b890e44450ea85fd73235b5185..2b98d6bd2c33292ef54ca82d1d5c8f624b353cbf 100644
--- a/entity/Appointment_entity/Appointment_entity.aod
+++ b/entity/Appointment_entity/Appointment_entity.aod
@@ -171,11 +171,6 @@
     </entityParameter>
     <entityConsumer>
       <name>AppointmentLinks</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AppointmentLink_entity</entityName>
-        <fieldName>Links</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AppointmentId_param</name>
@@ -187,6 +182,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AppointmentLink_entity</entityName>
+        <fieldName>Links</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>deleteSeries</name>
@@ -254,6 +254,11 @@
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
     </entityProvider>
+    <entityParameter>
+      <name>ErrorOnPermissionDenied</name>
+      <valueProcess>%aditoprj%/entity/Appointment_entity/entityfields/erroronpermissiondenied/valueProcess.js</valueProcess>
+      <expose v="true" />
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
diff --git a/entity/Appointment_entity/entityfields/attendees/dropDownProcess.js b/entity/Appointment_entity/entityfields/attendees/dropDownProcess.js
index 1ab0229fb447c8119504440ad07ccc53c097b2f9..52ca1397cf7c11f6ff54c9bc83aa912e5fe05015 100644
--- a/entity/Appointment_entity/entityfields/attendees/dropDownProcess.js
+++ b/entity/Appointment_entity/entityfields/attendees/dropDownProcess.js
@@ -3,7 +3,7 @@ import("system.result");
 import("system.calendars");
 
 var entry = JSON.parse(vars.getString("$param.Entry_param"));
-var allUsers = calendars.getFullCalendarUsers(calendars.RIGHT_WRITE);
+var allUsers = calendars.getFullCalendarUsers(calendars.RIGHT_READ);
 var results = [];
 
 for (var i = 0; i < allUsers.length; i++)
diff --git a/entity/Appointment_entity/entityfields/erroronpermissiondenied/valueProcess.js b/entity/Appointment_entity/entityfields/erroronpermissiondenied/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e5bfa3bbe7f58d2ffaf401248014a6d1a560d2de
--- /dev/null
+++ b/entity/Appointment_entity/entityfields/erroronpermissiondenied/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("true");
\ No newline at end of file
diff --git a/entity/Appointment_entity/grantDeleteProcess.js b/entity/Appointment_entity/grantDeleteProcess.js
index 4caa2d99cfdda2637190ab5c76a15565666b79b5..aef302f111201f63dc427328d2e4db900ac4c0d3 100644
--- a/entity/Appointment_entity/grantDeleteProcess.js
+++ b/entity/Appointment_entity/grantDeleteProcess.js
@@ -2,6 +2,10 @@ import("system.vars");
 import("system.result");
 import("system.calendars");
 import("system.text");
+import("system.tools");
 
-var owner = text.decodeMS(JSON.parse(vars.get("$param.Entry_param"))["h"])[1].split(":")[1];
-result.string(calendars.hasPermission([owner], calendars.VEVENT, "WRITE"));
\ No newline at end of file
+
+var user = tools.getCurrentUser();
+var calUser = calendars.getCalendarUser(user["title"]);
+var calUserCn = text.decodeMS(calUser)[1].split(":")[1];
+result.string(calendars.hasPermission(calUserCn, calendars.VEVENT, "WRITE"));
\ No newline at end of file
diff --git a/entity/Appointment_entity/grantUpdateProcess.js b/entity/Appointment_entity/grantUpdateProcess.js
index 3562ea4a6c4ba8fda784eb7ea85abd591e022f87..e6ac4c8426c460fd26d1f16844a7844c09300153 100644
--- a/entity/Appointment_entity/grantUpdateProcess.js
+++ b/entity/Appointment_entity/grantUpdateProcess.js
@@ -2,7 +2,13 @@ import("system.vars");
 import("system.result");
 import("system.calendars");
 import("system.text");
+import("system.tools");
+import("system.logging");
 
-var owner = text.decodeMS(JSON.parse(vars.get("$param.Entry_param"))["h"])[1].split(":")[1];
-result.string(calendars.hasPermission([owner], calendars.VEVENT, "WRITE"));
 
+var user = tools.getCurrentUser();
+var calUser = calendars.getCalendarUser(user["title"]);
+var calUserCn = text.decodeMS(calUser)[1].split(":")[1];
+var permitted = calendars.hasPermission(calUserCn, calendars.VEVENT, "WRITE");
+
+result.string(permitted);
diff --git a/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js b/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js
index e56415a0faf52007f91bcc4e92f9ae20aebfa819..709bfac8d00e3b805a383dc0c78c0cb8b91a07d1 100644
--- a/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js
@@ -1,3 +1,4 @@
+import("Calendar_lib");
 import("Employee_lib");
 import("system.tools");
 import("system.db");
@@ -9,6 +10,7 @@ import("system.datetime");
 import("system.eMath");
 import("system.util");
 import("system.neon");
+import("system.text");
 
 var appointmentSelect = newSelect("APPOINTMENT_ID").from("AB_APPOINTMENTLINK");
 var appointmentUids;
@@ -27,14 +29,14 @@ if(vars.exists("$param.Entry_param") && vars.get("$param.Entry_param"))
 
     //@TODO Icon 
     result.object([
-        buildEntry(entry, masterEntry)
+        CalendarUtil.buildEntry(entry, masterEntry)
     ]);
 }
 
 else if(vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW && vars.get("$local.idvalues") != null && vars.get("$local.idvalues") != "")
 {
     var selectedids = vars.get("$local.idvalues");
-    result.object([buildEntry(calendars.getEntry(selectedids, null, null), null)]);
+    result.object([CalendarUtil.buildEntry(calendars.getEntry(selectedids, null, null), null)]);
 }
 
 else if(vars.getString("$param.LinkedAppointmentsFromDashlet_param"))
@@ -42,7 +44,7 @@ else if(vars.getString("$param.LinkedAppointmentsFromDashlet_param"))
     var contactid = EmployeeUtils.getCurrentContactId();
     
     appointmentSelect.whereIfSet("AB_APPOINTMENTLINK.OBJECT_ROWID", contactid)
-    result.object(buildEntriesFromUids(appointmentSelect.table()));
+    result.object(CalendarUtil.buildEntriesFromUids(appointmentSelect.table()));
 }
 
 /**
@@ -51,78 +53,5 @@ else if(vars.getString("$param.LinkedAppointmentsFromDashlet_param"))
 else if(vars.getString("$param.LinkedObjectId_param") != undefined)
 {
     appointmentSelect.whereIfSet("AB_APPOINTMENTLINK.OBJECT_ROWID", "$param.LinkedObjectId_param")
-    result.object(buildEntriesFromUids(appointmentSelect.table()));
-}
-
-function buildEntriesFromUids(appointmentUids)
-{
-    var entryArray = new Array(appointmentUids.length);
-    
-    for(var i = 0; i < appointmentUids.length; i++)
-        entryArray[i] = buildEntry(calendars.getEntry(appointmentUids[i], null, null), null);
-    
-    return entryArray;
-}
-
-
-function buildEntry(pEntry, pMasterentry)
-{
-    var uid = pEntry[calendars.ID];    
-    var summary = pEntry[calendars.SUMMARY];
-    var attendees = pEntry[calendars.AFFECTEDUSERS];
-    var startdate = pEntry[calendars.DTSTART];
-    var enddate = pEntry[calendars.DTEND];
-    var links = pEntry[calendars.LINKS];
-    var description = pEntry[calendars.DESCRIPTION];
-    if(pEntry[calendars.ORGANIZER2] != undefined)
-        var organizer = pEntry[calendars.ORGANIZER2]["paramvalue"];
-    if(pEntry[calendars.USER2] != undefined)
-        var owner = pEntry[calendars.USER2]["paramvalue"];
-    var status = pEntry[calendars.STATUS];
-    var location = pEntry[calendars.LOCATION];
-    var reminder = pEntry[calendars.REMINDER_DURATION];
-    var remindercheck = pEntry[calendars.HASREMINDER]
-    var classification = pEntry[calendars.CLASSIFICATION];
-    var transparency = pEntry[calendars.TRANSPARENCY];
-    var categories = pEntry[calendars.CATEGORIES];
-    var isAllDay = pEntry["X-ADITO-ISALLDAYEVENT"] != null ? pEntry["X-ADITO-ISALLDAYEVENT"] : "FALSE";
-    
-    var masterBegin = pMasterentry != null ? pMasterentry[calendars.DTSTART] : null
-    var masterEnd = pMasterentry != null ? pMasterentry[calendars.DTEND] : null
-    
-    // Recurrence
-    var recurrenceID = pEntry[calendars.RECURRENCEID];
-    var rrule = null;
-    if (pMasterentry != null) { // Entry is a recurrence exception, therefore get rrule from master
-        rrule = pMasterentry[calendars.RRULE] != null ? pMasterentry[calendars.RRULE][0] : null;
-    } else {
-        rrule = pEntry[calendars.RRULE] != null ? pEntry[calendars.RRULE][0] : null;
-    }
-    
-    return [
-            uid, 
-            attendees.length, 
-            startdate, 
-            enddate, 
-            summary, 
-            organizer,
-            owner,
-            attendees, 
-            status,  
-            description, 
-            location, 
-            '', 
-            isAllDay,
-            classification,
-            transparency, 
-            categories, 
-            reminder, 
-            remindercheck, 
-            rrule, 
-            recurrenceID, 
-            null, 
-            masterBegin, 
-            masterEnd,
-            null
-        ];
+    result.object(CalendarUtil.buildEntriesFromUids(appointmentSelect.table()));
 }
diff --git a/entity/Appointment_entity/recordcontainers/jdito/onDelete.js b/entity/Appointment_entity/recordcontainers/jdito/onDelete.js
index 4e0e5c7a5c1257293965989052765e861a71fff7..6f6249aee33bd1be9f2247d09814ffba59a1d904 100644
--- a/entity/Appointment_entity/recordcontainers/jdito/onDelete.js
+++ b/entity/Appointment_entity/recordcontainers/jdito/onDelete.js
@@ -1,20 +1,30 @@
+import("system.logging");
 import("Sql_lib");
 import("system.neon");
 import("system.calendars");
 import("system.vars");
 
-if (vars.exists("$param.Entry_param"))
+var uid;
+
+if (vars.get("$param.Entry_param") != null)
 {
     var entry = JSON.parse(vars.getString("$param.Entry_param"));
     var reccurenceid = entry[calendars.RECURRENCEID];
+    
     if (reccurenceid == undefined) 
         reccurenceid = null;
     
-    calendars.removeEntryByUID(calendars.VEVENT, entry[calendars.USER2]["cn"], entry[calendars.ID], reccurenceid)
+    uid = entry[calendars.ID];
+    calendars.removeEntryByUID(calendars.VEVENT, entry[calendars.USER2]["cn"], uid, reccurenceid);
+}
+else if(vars.get("$field.OWNER"))
+{
+    uid = vars.get("$field.UID");
+    calendars.removeEntryByUID(calendars.VEVENT, JSON.parse(vars.get("$field.OWNER"))["cn"], uid, vars.get("$field.RECURRENCEID"));
+}
     
     /**
      * Deletes ApointmentLinks referring to the deleted Appointment.
      */
-    newWhereIfSet("AB_APPOINTMENTLINK.APPOINTMENT_ID", entry[calendars.ID])
-            .deleteData();
-}
\ No newline at end of file
+    newWhereIfSet("AB_APPOINTMENTLINK.APPOINTMENT_ID", uid)
+            .deleteData();
\ No newline at end of file
diff --git a/entity/Appointment_entity/recordcontainers/jdito/rowCountProcess.js b/entity/Appointment_entity/recordcontainers/jdito/rowCountProcess.js
index afff252f743faff586199e13333a707e5d52c51e..d6495461f9409c2d28cd62951d09cc6797a4eb69 100644
--- a/entity/Appointment_entity/recordcontainers/jdito/rowCountProcess.js
+++ b/entity/Appointment_entity/recordcontainers/jdito/rowCountProcess.js
@@ -1,3 +1,4 @@
+import("Calendar_lib");
 import("system.db");
 import("Employee_lib");
 import("Sql_lib");
@@ -5,7 +6,7 @@ import("system.vars");
 import("system.result");
 
 var rowCount = "0";
-var cond = newSelect("count(APPOINTMENT_ID)")
+var cond = newSelect("APPOINTMENT_ID")
                .from("AB_APPOINTMENTLINK");
 
 if (vars.exists("$local.idvalues") && vars.get("$local.idvalues"))
@@ -13,7 +14,7 @@ if (vars.exists("$local.idvalues") && vars.get("$local.idvalues"))
 else if (vars.getString("$param.LinkedAppointmentsFromDashlet_param"))
 {
     cond.whereIfSet("AB_APPOINTMENTLINK.OBJECT_ROWID", EmployeeUtils.getCurrentContactId());
-    rowCount = cond.cell();
+    rowCount = CalendarUtil.countEntriesFromUids(cond.table());
 }
 
 /**
@@ -22,7 +23,7 @@ else if (vars.getString("$param.LinkedAppointmentsFromDashlet_param"))
 else if (vars.getString("$param.LinkedObjectId_param") != undefined)
 {
     cond.whereIfSet("AB_APPOINTMENTLINK.OBJECT_ROWID", "$param.LinkedObjectId_param");
-    rowCount = cond.cell();
+    rowCount = CalendarUtil.countEntriesFromUids(cond.table());
 }
 /**
  * Will be used, if the user is operating the calendar.
diff --git a/entity/AroundLocation_entity/AroundLocation_entity.aod b/entity/AroundLocation_entity/AroundLocation_entity.aod
index c91531dc4c43f5cb38c9324e78b6c69f15d6251f..227c9fc268c1ccecd8d7dfe22781522a0f6a2c2b 100644
--- a/entity/AroundLocation_entity/AroundLocation_entity.aod
+++ b/entity/AroundLocation_entity/AroundLocation_entity.aod
@@ -21,17 +21,17 @@
     <entityConsumer>
       <name>Organisations</name>
       <state>READONLY</state>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Organisation_entity</entityName>
-        <fieldName>OrganisationsViaIndex</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>OnlyShowContactIds_param</name>
           <valueProcess>%aditoprj%/entity/AroundLocation_entity/entityfields/organisations/children/onlyshowcontactids_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Organisation_entity</entityName>
+        <fieldName>OrganisationsViaIndex</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>Open</name>
diff --git a/entity/AttributeRelation_entity/AttributeRelation_entity.aod b/entity/AttributeRelation_entity/AttributeRelation_entity.aod
index 4e5c98f9dece6d09e3bc547dc137db746490724b..6a92d5391d81f8fb81e4968db71c7f66ee112989 100644
--- a/entity/AttributeRelation_entity/AttributeRelation_entity.aod
+++ b/entity/AttributeRelation_entity/AttributeRelation_entity.aod
@@ -34,6 +34,13 @@
     <entityProvider>
       <name>TreeProvider</name>
       <documentation>%aditoprj%/entity/AttributeRelation_entity/entityfields/treeprovider/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>GetTree_param</name>
+          <valueProcess>%aditoprj%/entity/AttributeRelation_entity/entityfields/treeprovider/children/gettree_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>e0a7a4bc-ec7f-4f09-9b94-cbeb328cd7b8</name>
@@ -96,13 +103,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>GetTree_param</name>
-          <valueProcess>%aditoprj%/entity/AttributeRelation_entity/entityfields/treeprovider/children/gettree_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityField>
       <name>AB_ATTRIBUTE_ID</name>
@@ -132,11 +132,6 @@
     </entityField>
     <entityConsumer>
       <name>SpecificAttribute</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Attribute_entity</entityName>
-        <fieldName>SpecificAttribute</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
@@ -155,6 +150,11 @@
           <valueProcess>%aditoprj%/entity/AttributeRelation_entity/entityfields/specificattribute/children/themeobjectrowid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Attribute_entity</entityName>
+        <fieldName>SpecificAttribute</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>GetTree_param</name>
@@ -165,6 +165,12 @@
     <entityProvider>
       <name>AttributeRelations</name>
       <documentation>%aditoprj%/entity/AttributeRelation_entity/entityfields/attributerelations/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>GetTree_param</name>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>69560cc2-d92a-453c-9e64-fb712a538c4f</name>
@@ -239,12 +245,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>GetTree_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityField>
       <name>DATE_EDIT</name>
@@ -312,11 +312,6 @@
     </entityField>
     <entityConsumer>
       <name>Objects</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>ObjectProxy_entity</entityName>
-        <fieldName>FilteredObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>Entity_param</name>
@@ -327,6 +322,11 @@
           <valueProcess>%aditoprj%/entity/AttributeRelation_entity/entityfields/objects/children/filter_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>ObjectProxy_entity</entityName>
+        <fieldName>FilteredObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>DROPDOWNDEFINITION</name>
@@ -341,6 +341,7 @@
     </entityProvider>
     <entityField>
       <name>AB_ATTRIBUTERELATIONID</name>
+      <valueProcess>%aditoprj%/entity/AttributeRelation_entity/entityfields/ab_attributerelationid/valueProcess.js</valueProcess>
     </entityField>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
@@ -348,11 +349,6 @@
     </entityProvider>
     <entityConsumer>
       <name>SpecificFilterAttributes</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Attribute_entity</entityName>
-        <fieldName>SpecificFilterAttributes</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AttributeCount_param</name>
@@ -363,9 +359,20 @@
           <valueProcess>%aditoprj%/entity/AttributeRelation_entity/entityfields/specificfilterattributes/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Attribute_entity</entityName>
+        <fieldName>SpecificFilterAttributes</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>FilterProvider</name>
+      <children>
+        <entityParameter>
+          <name>DisplaySimpleName_param</name>
+          <valueProcess>%aditoprj%/entity/AttributeRelation_entity/entityfields/filterprovider/children/displaysimplename_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>0560c6d0-8473-4050-9ca1-a935bbac2ef9</name>
@@ -374,12 +381,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>DisplaySimpleName_param</name>
-          <valueProcess>%aditoprj%/entity/AttributeRelation_entity/entityfields/filterprovider/children/displaysimplename_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
     </entityProvider>
   </entityFields>
   <recordContainers>
diff --git a/entity/AttributeRelation_entity/entityfields/ab_attributerelationid/valueProcess.js b/entity/AttributeRelation_entity/entityfields/ab_attributerelationid/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e11e370a0bf849a4ef24d5ae03cda2d11b82a8ce
--- /dev/null
+++ b/entity/AttributeRelation_entity/entityfields/ab_attributerelationid/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.util");
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+    result.string(util.getNewUUID());
\ No newline at end of file
diff --git a/entity/AttributeRelation_entity/entityfields/value_lookup/stateProcess.js b/entity/AttributeRelation_entity/entityfields/value_lookup/stateProcess.js
index e0ce90c175370c539ed09e94eab727271db1cc2d..051e58a290e40ba32c7f91d3782eb37a59768e96 100644
--- a/entity/AttributeRelation_entity/entityfields/value_lookup/stateProcess.js
+++ b/entity/AttributeRelation_entity/entityfields/value_lookup/stateProcess.js
@@ -4,8 +4,11 @@ import("system.result");
 import("Attribute_lib");
 
 var fieldState;
-if (AttributeTypeUtil.useLookup(vars.get("$field.ATTRIBUTE_TYPE")))
+if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    && AttributeTypeUtil.useLookup(vars.get("$field.ATTRIBUTE_TYPE")))
+{
     fieldState = neon.COMPONENTSTATE_EDITABLE;
+}
 else 
     fieldState = neon.COMPONENTSTATE_INVISIBLE;
 
diff --git a/entity/AttributeUsage_entity/AttributeUsage_entity.aod b/entity/AttributeUsage_entity/AttributeUsage_entity.aod
index 281daa5f5aafefe0a4307b836fefb819ed97670a..166b6b8423d16017ff4fa657a9a86be652cb5c0e 100644
--- a/entity/AttributeUsage_entity/AttributeUsage_entity.aod
+++ b/entity/AttributeUsage_entity/AttributeUsage_entity.aod
@@ -72,16 +72,7 @@
     </entityField>
     <entityConsumer>
       <name>Context</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Context_entity</entityName>
-        <fieldName>Exclusive</fieldName>
-      </dependency>
       <children>
-        <entityParameter>
-          <name>GetAllContexts_param</name>
-          <valueProcess>%aditoprj%/entity/AttributeUsage_entity/entityfields/context/children/getallcontexts_param/valueProcess.js</valueProcess>
-        </entityParameter>
         <entityParameter>
           <name>Blacklist_param</name>
           <valueProcess>%aditoprj%/entity/AttributeUsage_entity/entityfields/context/children/blacklist_param/valueProcess.js</valueProcess>
@@ -91,6 +82,11 @@
           <valueProcess>%aditoprj%/entity/AttributeUsage_entity/entityfields/context/children/invertblacklist_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Context_entity</entityName>
+        <fieldName>Exclusive</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>SingleSelection_param</name>
diff --git a/entity/AttributeUsage_entity/recordcontainers/db/conditionProcess.js b/entity/AttributeUsage_entity/recordcontainers/db/conditionProcess.js
index 4c333a888b165e2b3fff15433861e3de2b785344..854e2896ae3f2baa9ea18cbab4a7922e6821dd21 100644
--- a/entity/AttributeUsage_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/AttributeUsage_entity/recordcontainers/db/conditionProcess.js
@@ -2,6 +2,5 @@ import("Sql_lib");
 import("system.db");
 import("system.result");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(newWhereIfSet("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", "$param.AttributeId_param")
                 .toString());  
diff --git a/entity/Attribute_entity/Attribute_entity.aod b/entity/Attribute_entity/Attribute_entity.aod
index 26e2e934e598ad4d50c640da866a5cd4b452b3f2..76187e3927335461766933afcdea204d792bbfc6 100644
--- a/entity/Attribute_entity/Attribute_entity.aod
+++ b/entity/Attribute_entity/Attribute_entity.aod
@@ -61,11 +61,6 @@
       <name>AttributeUsages</name>
       <refreshParent v="true" />
       <stateProcess>%aditoprj%/entity/Attribute_entity/entityfields/attributeusages/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeUsage_entity</entityName>
-        <fieldName>SpecificAttribute</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AttributeId_param</name>
@@ -81,6 +76,11 @@
           <valueProcess>%aditoprj%/entity/Attribute_entity/entityfields/attributeusages/children/disablemincount_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeUsage_entity</entityName>
+        <fieldName>SpecificAttribute</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>ATTRIBUTE_ACTIVE</name>
@@ -92,11 +92,6 @@
     </entityField>
     <entityConsumer>
       <name>KeywordAttributeTypes</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -108,6 +103,11 @@
           <valueProcess>%aditoprj%/entity/Attribute_entity/entityfields/keywordattributetypes/children/whitelistids_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>DROPDOWNDEFINITION</name>
@@ -131,6 +131,34 @@
     <entityProvider>
       <name>SpecificAttribute</name>
       <lookupIdfield>UID</lookupIdfield>
+      <documentation>%aditoprj%/entity/Attribute_entity/entityfields/specificattribute/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>ObjectType_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>FilteredAttributeIds_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>DisplaySimpleName_param</name>
+          <valueProcess>%aditoprj%/entity/Attribute_entity/entityfields/specificattribute/children/displaysimplename_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>ChildId_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>ChildType_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>ParentId_param</name>
+          <description>parent id, this is used for filtering by the parent in the content process</description>
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>ba3b4d47-7385-49df-bf61-54c99f5b2c81</name>
@@ -163,33 +191,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ObjectType_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>FilteredAttributeIds_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>DisplaySimpleName_param</name>
-          <valueProcess>%aditoprj%/entity/Attribute_entity/entityfields/specificattribute/children/displaysimplename_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>ChildId_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>ChildType_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>ParentId_param</name>
-          <description>parent id, this is used for filtering by the parent in the content process</description>
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityField>
       <name>FULL_ATTRIBUTE_NAME</name>
@@ -214,6 +215,7 @@
     </entityField>
     <entityProvider>
       <name>AttributeGroups</name>
+      <documentation>%aditoprj%/entity/Attribute_entity/entityfields/attributegroups/documentation.adoc</documentation>
       <children>
         <entityParameter>
           <name>ThemeObjectRowId_param</name>
@@ -240,11 +242,6 @@
     <entityConsumer>
       <name>AttributeGroup</name>
       <description>Used for the selection of the parent attribute</description>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Attribute_entity</entityName>
-        <fieldName>AttributeGroups</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ChildId_param</name>
@@ -259,6 +256,11 @@
           <valueProcess>%aditoprj%/entity/Attribute_entity/entityfields/attributegroup/children/displaysimplename_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Attribute_entity</entityName>
+        <fieldName>AttributeGroups</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>ICON</name>
@@ -309,25 +311,21 @@
     </entityField>
     <entityConsumer>
       <name>Contexts</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Context_entity</entityName>
-        <fieldName>Exclusive</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>Blacklist_param</name>
           <valueProcess>%aditoprj%/entity/Attribute_entity/entityfields/contexts/children/blacklist_param/valueProcess.js</valueProcess>
         </entityParameter>
-        <entityParameter>
-          <name>GetAllContexts_param</name>
-          <valueProcess>%aditoprj%/entity/Attribute_entity/entityfields/contexts/children/getallcontexts_param/valueProcess.js</valueProcess>
-        </entityParameter>
         <entityParameter>
           <name>InvertBlacklist_param</name>
           <valueProcess>%aditoprj%/entity/Attribute_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Context_entity</entityName>
+        <fieldName>Exclusive</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionGroup>
       <name>AttributeActions</name>
@@ -359,14 +357,6 @@
     </entityActionField>
     <entityProvider>
       <name>ThemeProvider</name>
-      <dependencies>
-        <entityDependency>
-          <name>6e314038-62de-4f0c-b89a-92f029c10933</name>
-          <entityName>Activity_entity</entityName>
-          <fieldName>ActivityAtrributes</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>AttributeCount_param</name>
@@ -385,6 +375,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>6e314038-62de-4f0c-b89a-92f029c10933</name>
+          <entityName>Activity_entity</entityName>
+          <fieldName>ActivityAtrributes</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityParameter>
       <name>ParentId_param</name>
@@ -401,14 +399,6 @@
       <sortingField>SORTING</sortingField>
       <documentation>%aditoprj%/entity/Attribute_entity/entityfields/attributechildren/documentation.adoc</documentation>
       <titlePlural>Child Attributes</titlePlural>
-      <dependencies>
-        <entityDependency>
-          <name>80023321-1954-483f-a4be-b7207557c068</name>
-          <entityName>Attribute_entity</entityName>
-          <fieldName>ChildAttributes</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ChildId_param</name>
@@ -448,16 +438,19 @@
           <mandatory v="true" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>80023321-1954-483f-a4be-b7207557c068</name>
+          <entityName>Attribute_entity</entityName>
+          <fieldName>ChildAttributes</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityConsumer>
       <name>ChildAttributes</name>
       <refreshParent v="true" />
       <stateProcess>%aditoprj%/entity/Attribute_entity/entityfields/childattributes/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Attribute_entity</entityName>
-        <fieldName>AttributeChildren</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>DisplaySimpleName_param</name>
@@ -472,6 +465,11 @@
           <valueProcess>%aditoprj%/entity/Attribute_entity/entityfields/childattributes/children/parenttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Attribute_entity</entityName>
+        <fieldName>AttributeChildren</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>GetOnlyFirstLevelChildren_param</name>
@@ -487,14 +485,6 @@
     </entityProvider>
     <entityProvider>
       <name>SpecificFilterAttributes</name>
-      <dependencies>
-        <entityDependency>
-          <name>9b2b5f2e-229d-4a10-a54f-cbf77aafe512</name>
-          <entityName>AttributeRelation_entity</entityName>
-          <fieldName>SpecificFilterAttributes</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>DisplaySimpleName_param</name>
@@ -505,6 +495,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>9b2b5f2e-229d-4a10-a54f-cbf77aafe512</name>
+          <entityName>AttributeRelation_entity</entityName>
+          <fieldName>SpecificFilterAttributes</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
   </entityFields>
   <recordContainers>
diff --git a/entity/Attribute_entity/entityfields/attributegroups/documentation.adoc b/entity/Attribute_entity/entityfields/attributegroups/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..6af9c11f0f7e8517aa60a8bdd6d5fb0a457dd6fc
--- /dev/null
+++ b/entity/Attribute_entity/entityfields/attributegroups/documentation.adoc
@@ -0,0 +1,3 @@
+= AttributeGroups
+
+This provider provides only attribute groups, it is used for the selection of an attribute parent.
\ No newline at end of file
diff --git a/entity/Attribute_entity/entityfields/openadminview/onActionProcess.js b/entity/Attribute_entity/entityfields/openadminview/onActionProcess.js
index 2405febf9b19c521aa76b395b28c7664d84e6357..6f20e15ed4840e4c2cdb74ed5d57da8b30ce4a5c 100644
--- a/entity/Attribute_entity/entityfields/openadminview/onActionProcess.js
+++ b/entity/Attribute_entity/entityfields/openadminview/onActionProcess.js
@@ -1,6 +1,4 @@
 import("system.vars");
 import("Context_lib");
 
-AdminViewUtils.open("ATTRIBUTEID", [
-    ["ATTRIBUTE_PARENT_ID", vars.get("$field.ATTRIBUTE_PARENT_ID")]
-]);
\ No newline at end of file
+AdminViewUtils.open("AB_ATTRIBUTEID", ["ATTRIBUTE_PARENT_ID", "ATTRIBUTE_ACTIVE", "ATTRIBUTE_TYPE", "SORTING"]);
\ No newline at end of file
diff --git a/entity/Attribute_entity/entityfields/specificattribute/documentation.adoc b/entity/Attribute_entity/entityfields/specificattribute/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..5084132f04b54babcf687262514ac3462c479261
--- /dev/null
+++ b/entity/Attribute_entity/entityfields/specificattribute/documentation.adoc
@@ -0,0 +1,4 @@
+= SpecificAttribute
+
+This provider is used for selecting an attribute, for example to create an attribute relation in AttributeRelation_entity.
+The attributes are usually filtered by the ObjectType_param parameter to show only attributes that can be used in a specific context.
\ No newline at end of file
diff --git a/entity/AuditLogHistory_entity/AuditLogHistory_entity.aod b/entity/AuditLogHistory_entity/AuditLogHistory_entity.aod
index 88d93c5023fdb6b90668c9269a64a6a642785a08..2ed69d3a31331cf6801b12b2e12a38394e75d78b 100644
--- a/entity/AuditLogHistory_entity/AuditLogHistory_entity.aod
+++ b/entity/AuditLogHistory_entity/AuditLogHistory_entity.aod
@@ -2,12 +2,12 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
   <name>AuditLogHistory_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/AuditLogHistory_entity/documentation.adoc</documentation>
   <icon>VAADIN:LINES_LIST</icon>
   <title>Audit Log</title>
   <grantCreate v="false" />
   <grantUpdate v="false" />
   <grantDelete v="true" />
-  <grantDeleteProcess>%aditoprj%/entity/AuditLogHistory_entity/grantDeleteProcess.js</grantDeleteProcess>
   <initFilterProcess>%aditoprj%/entity/AuditLogHistory_entity/initFilterProcess.js</initFilterProcess>
   <titlePlural>Audit Logs</titlePlural>
   <recordContainer>db</recordContainer>
@@ -132,7 +132,7 @@
       <filterExtensions>
         <filterExtension>
           <name>contextFilter</name>
-          <title>Kontext</title>
+          <title>Context</title>
           <contentType>TEXT</contentType>
           <filterValuesProcess>%aditoprj%/entity/AuditLogHistory_entity/recordcontainers/db/filterextensions/contextfilter/filterValuesProcess.js</filterValuesProcess>
           <filterConditionProcess>%aditoprj%/entity/AuditLogHistory_entity/recordcontainers/db/filterextensions/contextfilter/filterConditionProcess.js</filterConditionProcess>
diff --git a/entity/AuditLogHistory_entity/documentation.adoc b/entity/AuditLogHistory_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..2c0a2a12eb8182eeab3ad27c32727dee6d898c20
--- /dev/null
+++ b/entity/AuditLogHistory_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= AuditLogHistory_entity
+
+This is an entity for loading all log history entries from all contexts.
\ No newline at end of file
diff --git a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod
index bae83161b6a2b2580cbc7734093346ce3596a028..0e5fdd626ed467febf43099ab2bbe1d578ced05e 100644
--- a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod
+++ b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod
@@ -67,17 +67,17 @@
     </entityConsumer>
     <entityConsumer>
       <name>StatusKeyword</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>EMAIL_ADDRESS</name>
@@ -121,6 +121,13 @@
           <iconId>VAADIN:BAN</iconId>
           <tooltipProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/recipientactions/children/removewithcommrestriction/tooltipProcess.js</tooltipProcess>
         </entityActionField>
+        <entityActionField>
+          <name>startMarketingWorkflows</name>
+          <title>Start marketing mailing</title>
+          <onActionProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/recipientactions/children/startmarketingworkflows/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+          <iconId>VAADIN:ENVELOPES</iconId>
+        </entityActionField>
       </children>
     </entityActionGroup>
     <entityField>
@@ -129,17 +136,17 @@
     </entityField>
     <entityConsumer>
       <name>EmailAdresses</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Communication_entity</entityName>
-        <fieldName>EmailCommunications</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/emailadresses/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Communication_entity</entityName>
+        <fieldName>EmailCommunications</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/BulkMailRecipient_entity/entityfields/recipientactions/children/startmarketingworkflows/onActionProcess.js b/entity/BulkMailRecipient_entity/entityfields/recipientactions/children/startmarketingworkflows/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..cbe91449e5c258643491b9020a7bc6d1b534e7ec
--- /dev/null
+++ b/entity/BulkMailRecipient_entity/entityfields/recipientactions/children/startmarketingworkflows/onActionProcess.js
@@ -0,0 +1,34 @@
+import("Util_lib");
+import("system.entities");
+import("Context_lib");
+import("system.vars");
+import("system.neon");
+
+var rows = vars.get("$sys.selectionRows");
+var filter = vars.get("$sys.filter").filter;
+var targets = [];
+
+if (Utils.isNullOrEmpty(rows))
+{
+    let loadConfig = entities.createConfigForLoadingRows()
+        .entity("BulkMailRecipient_entity")
+        .provider("BulkMailRecipients")
+        .fields(["CONTACT_ID", "TARGETCONTEXT"])
+        .addParameter("BulkMailId_param", vars.get("$param.BulkMailId_param"));
+
+    if (filter)
+        loadConfig.filter(JSON.stringify(filter));
+    
+    rows = entities.getRows(loadConfig);
+}
+
+rows = rows.map(function (row)
+{
+    return [row["CONTACT_ID"], row["TARGETCONTEXT"]];
+});
+
+
+neon.openContext("MarketingWorkflowLauncher", "MarketingWorkflowLauncherEdit_view", null, neon.OPERATINGSTATE_VIEW, {
+    "ObjectIds_param": JSON.stringify(rows),
+    "ObjectType_param": ContextUtils.getCurrentContextId()
+});
\ No newline at end of file
diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js b/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js
index a2473cad7ca8ee6904811861505e0e412ab6c6fa..01d4a5dc9c76ee5f350521eea0f4a2bb6016a3ec 100644
--- a/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js
@@ -2,5 +2,4 @@ import("system.db");
 import("system.result");
 import("Sql_lib");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(newWhere("BULKMAILRECIPIENT.BULKMAIL_ID", "$param.BulkMailId_param").toString());
\ No newline at end of file
diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js
index 3020cb618cdf0f0aac9fbf0f9201753a29563a37..04cd6d4dc91c5a7e36cd82b78301acf456fc05ff 100644
--- a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js
+++ b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js
@@ -5,5 +5,5 @@ import("system.db");
 import("system.result");
 
 var commRestrictionCond = ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail());
-var sql = "case when (" + commRestrictionCond.toString() + ") then 'true' else 'false' end";
-result.string(sql);
+var sql = SqlBuilder.caseWhen(commRestrictionCond).thenString("true").elseString("false");
+result.string(sql.toString());
diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
index 115c35f85e46db99d439362dca426fd984657802..49b6fefd59233f6aa50934a21ce43f06a3a61172 100644
--- a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
+++ b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
@@ -1,17 +1,12 @@
 import("Sql_lib");
 import("Contact_lib");
 import("system.translate");
-import("system.db");
-import("Bulkmail_lib");
 import("system.result");
 import("Keyword_lib");
 import("KeywordRegistry_basic");
 
-var commRestrictionCond = ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail()).build();
+var commRestrictionCond = ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail());
 var keywordSql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.bulkMailRecipientStatus(), "BULKMAILRECIPIENT.STATUS");
 
-// TODO: is prepared possible?
-var sql = "case when (" + SqlUtils.translateStatementWithQuotes(commRestrictionCond)
-    + ") then '" + translate.text("Advertising ban")
-    + "' else (" + keywordSql + ") end";
-result.string(sql);
+var sql = SqlBuilder.caseWhen(commRestrictionCond).thenString(translate.text("Advertising ban")).elseValue(keywordSql);
+result.string(sql.toString());
diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/targetcontext.value/expression.js b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/targetcontext.value/expression.js
index 9bac722a3fa50b14fe0fd7fcf9cb92ebd8e49fba..5247fde75b3f57fdb34fb70500efb8bca84d6906 100644
--- a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/targetcontext.value/expression.js
+++ b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/targetcontext.value/expression.js
@@ -1,7 +1,7 @@
+import("Sql_lib");
 import("Context_lib");
 import("system.result");
 
-// TODO: is prepared possible?
-result.string("case when PERSON_ID is null then '" + ContextUtils.getContextName("Organisation")
-    + "' when CONTACT.ORGANISATION_ID is not null and CONTACT.PERSON_ID is not null then '" + ContextUtils.getContextName("Person") 
-    + "' else '' end");
\ No newline at end of file
+var sql = SqlBuilder.caseWhen("PERSON_ID is null").thenString(ContextUtils.getContextName("Organisation"))
+    .when(newWhere("CONTACT.ORGANISATION_ID is not null").and("CONTACT.PERSON_ID is not null")).thenString(ContextUtils.getContextName("Person"))
+result.string(sql.toString());
\ No newline at end of file
diff --git a/entity/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod
index a6e8b3db47b37d15f43098189957c08b86595414..cc5791ce3abcf79661d371db01061a4de1229fc6 100644
--- a/entity/BulkMail_entity/BulkMail_entity.aod
+++ b/entity/BulkMail_entity/BulkMail_entity.aod
@@ -56,25 +56,20 @@
     <entityConsumer>
       <name>Recipients</name>
       <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/recipients/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>BulkMailRecipient_entity</entityName>
-        <fieldName>BulkMailRecipients</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>BulkMailId_param</name>
           <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/recipients/children/bulkmailid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Templates</name>
       <dependency>
         <name>dependency</name>
-        <entityName>DocumentTemplate_entity</entityName>
-        <fieldName>DocumentTemplateProvider</fieldName>
+        <entityName>BulkMailRecipient_entity</entityName>
+        <fieldName>BulkMailRecipients</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Templates</name>
       <children>
         <entityParameter>
           <name>DocumentTemplateType_param</name>
@@ -85,6 +80,11 @@
           <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/templates/children/documenttemplatetypeclassification_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DocumentTemplate_entity</entityName>
+        <fieldName>DocumentTemplateProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>STATUS</name>
@@ -108,17 +108,17 @@
     </entityField>
     <entityConsumer>
       <name>StatusKeyword</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>bindata</name>
@@ -155,17 +155,17 @@
     </entityField>
     <entityConsumer>
       <name>LogHistories</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>LogHistory_entity</entityName>
-        <fieldName>LogHistoryProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>tablenames_param</name>
           <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>LogHistory_entity</entityName>
+        <fieldName>LogHistoryProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>CREATEACTIVITIES</name>
@@ -176,17 +176,17 @@
     </entityField>
     <entityConsumer>
       <name>RecipientStatusChart</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>BulkMailStatusChart_entity</entityName>
-        <fieldName>RecipientStatusChart</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>BulkMailId_param</name>
           <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/recipientstatuschart/children/bulkmailid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>BulkMailStatusChart_entity</entityName>
+        <fieldName>RecipientStatusChart</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>TESTING_CONTACT_ID</name>
@@ -213,11 +213,6 @@
     </entityConsumer>
     <entityConsumer>
       <name>Activities</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Activity_entity</entityName>
-        <fieldName>LinkedObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectId_param</name>
@@ -228,6 +223,11 @@
           <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/activities/children/rowid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Activity_entity</entityName>
+        <fieldName>LinkedObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>sendMail</name>
@@ -290,6 +290,14 @@
     </entityParameter>
     <entityProvider>
       <name>BulkMailsNotSent</name>
+      <documentation>%aditoprj%/entity/BulkMail_entity/entityfields/bulkmailsnotsent/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>BulkMailStatus_param</name>
+          <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/bulkmailsnotsent/children/bulkmailstatus_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>16cdf326-0b43-4d72-bf19-21434e047e85</name>
@@ -298,13 +306,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>BulkMailStatus_param</name>
-          <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/bulkmailsnotsent/children/bulkmailstatus_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>BulkMailStatus_param</name>
diff --git a/entity/BulkMail_entity/entityfields/bulkmailsnotsent/documentation.adoc b/entity/BulkMail_entity/entityfields/bulkmailsnotsent/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..256cf217d7182dead7e7dfe8cbfb770cdcd77f86
--- /dev/null
+++ b/entity/BulkMail_entity/entityfields/bulkmailsnotsent/documentation.adoc
@@ -0,0 +1,3 @@
+= BulkMailsNotSent
+
+Provides only BulkMails with the status 'not sent'.
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/documenttemplate_id/onValueChange.js b/entity/BulkMail_entity/entityfields/documenttemplate_id/onValueChange.js
index 5f100fbe60a4fef3b5f793b411562889452f16c1..c581ed319d6abf9a33281237cd2ccee9cdbfdd69 100644
--- a/entity/BulkMail_entity/entityfields/documenttemplate_id/onValueChange.js
+++ b/entity/BulkMail_entity/entityfields/documenttemplate_id/onValueChange.js
@@ -9,7 +9,7 @@ if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.re
 {
     // note: could not use only the valueProcess from $field.content because then it refreshed $field.content just before save.
     // --> only set in $field.content.valueProcess if $field.content is null and set it from here only if MASK triggered change
-    [content, type] = DocumentTemplateUtils.getTemplateContent(vars.get("$local.value"), new FileUpload(vars.get("$field.bindata")));
+    var [content, type] = DocumentTemplateUtils.getTemplateContent(vars.get("$local.value"), new FileUpload(vars.get("$field.bindata")));
     vars.set("$field.templateType", type);
     vars.set("$field.content", content);
     
diff --git a/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod b/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod
index 447fef3d4393c2b2dc7924ab017ea3d896006850..5a45ceab9f71040142b2967e02238e309981aa4e 100644
--- a/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod
+++ b/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod
@@ -6,6 +6,7 @@
   <title>Add participants to Campaign</title>
   <siblings>
     <element>CampaignParticipant_entity</element>
+    <element>Campaign_entity</element>
   </siblings>
   <recordContainer>datalessConfig</recordContainer>
   <entityFields>
@@ -59,11 +60,6 @@
     </entityConsumer>
     <entityConsumer>
       <name>CampaignStepConsumer</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>CampaignStep_entity</entityName>
-        <fieldName>CampaignSteps</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>campaignId_param</name>
@@ -71,6 +67,11 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>CampaignStep_entity</entityName>
+        <fieldName>CampaignSteps</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>UID</name>
diff --git a/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js b/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js
index b2c37dfa07d393af2fbd10b50ae3ea3dcac816b4..f1697b24ba89faca7eee7192a830ee3bf51ac713 100644
--- a/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js
+++ b/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js
@@ -31,7 +31,7 @@ else
     participantCondition = JSON.parse(vars.getString("$param.campaignParticipantsCondition_param")).condition;
     _handleCondition(campaignId, conditionSourceTableName, participantCondition);
 }
-
+neon.refreshAll();
 if (!vars.exists("$param.currentCampaignId_param") || !vars.get("$param.currentCampaignId_param"))
     neon.openContext("Campaign", "CampaignMain_view", [campaignId], neon.OPERATINGSTATE_VIEW, null);
 
diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js
index ff279849cebaa73eaaad7f251b821d9379d06ad5..d1c7824536e06bed2ffb8d47a1b93cc8f1260253 100644
--- a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js
+++ b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js
@@ -29,7 +29,7 @@ if(vars.get("$field.CAMPAIGN_ID"))
         if (vars.get("$param.campaignParticipantsCondition_param"))
         {
             var contactFilterCondition = JSON.parse(vars.get("$param.campaignParticipantsCondition_param")).condition;
-            contactIds = CampaignUtils.GetContactIdsNotInCampaignByCondition(vars.get("$field.CAMPAIGN_ID"), contactFilterCondition, comingfrom);
+            contactIds = CampaignUtils.GetContactIdsInCampaignByCondition(vars.get("$field.CAMPAIGN_ID"), contactFilterCondition);
         } 
         else
         {
diff --git a/entity/CampaignAnalysis_entity/CampaignAnalysis_entity.aod b/entity/CampaignAnalysis_entity/CampaignAnalysis_entity.aod
index 137b70c4aa991ae7a2e366e78c7658701dd62d68..8aae1d74b98c7a1429ff8a47a0246962919fc058 100644
--- a/entity/CampaignAnalysis_entity/CampaignAnalysis_entity.aod
+++ b/entity/CampaignAnalysis_entity/CampaignAnalysis_entity.aod
@@ -6,6 +6,7 @@
   <siblings>
     <element>CampaignCost_entity</element>
   </siblings>
+  <usePermissions v="false" />
   <recordContainer>jdito</recordContainer>
   <entityFields>
     <entityProvider>
@@ -14,14 +15,6 @@
     <entityProvider>
       <name>CampaignAnalysisProvider</name>
       <documentation>%aditoprj%/entity/CampaignAnalysis_entity/entityfields/campaignanalysisprovider/documentation.adoc</documentation>
-      <dependencies>
-        <entityDependency>
-          <name>bd130613-f0e4-4591-8035-2c2491b08c50</name>
-          <entityName>Campaign_entity</entityName>
-          <fieldName>CampaignAnalysisConsumer</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>DateEnd_param</name>
@@ -39,6 +32,14 @@
           <mandatory v="true" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>bd130613-f0e4-4591-8035-2c2491b08c50</name>
+          <entityName>Campaign_entity</entityName>
+          <fieldName>CampaignAnalysisConsumer</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityParameter>
       <name>CampaignId_param</name>
diff --git a/entity/CampaignCostChart_entity/CampaignCostChart_entity.aod b/entity/CampaignCostChart_entity/CampaignCostChart_entity.aod
index de366ec455d550396f8e3fbbbb404e73f7c8b02b..f5d7ee451e45fbcc532df7d5ee2d6e934ebe7d79 100644
--- a/entity/CampaignCostChart_entity/CampaignCostChart_entity.aod
+++ b/entity/CampaignCostChart_entity/CampaignCostChart_entity.aod
@@ -6,6 +6,7 @@
   <siblings>
     <element>CampaignCost_entity</element>
   </siblings>
+  <usePermissions v="false" />
   <recordContainer>jdito</recordContainer>
   <entityFields>
     <entityProvider>
diff --git a/entity/CampaignCost_entity/CampaignCost_entity.aod b/entity/CampaignCost_entity/CampaignCost_entity.aod
index 2af24acc0d0ade0e8fbe9d0df0397c5b4c1a2ced..3f3d974f90dfa7cca37d59ae84a4153b1e0d8d94 100644
--- a/entity/CampaignCost_entity/CampaignCost_entity.aod
+++ b/entity/CampaignCost_entity/CampaignCost_entity.aod
@@ -7,6 +7,7 @@
     <element>CampaignAnalysis_entity</element>
     <element>CampaignCostChart_entity</element>
   </siblings>
+  <usePermissions v="false" />
   <titlePlural>Cost entries</titlePlural>
   <recordContainer>db</recordContainer>
   <entityFields>
@@ -79,14 +80,6 @@
     <entityProvider>
       <name>CampaignCosts</name>
       <documentation>%aditoprj%/entity/CampaignCost_entity/entityfields/campaigncosts/documentation.adoc</documentation>
-      <dependencies>
-        <entityDependency>
-          <name>7131288b-af5c-4914-96f5-c5d70217fc23</name>
-          <entityName>Campaign_entity</entityName>
-          <fieldName>CampaignCosts</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>CampaignStepId_param</name>
@@ -106,24 +99,18 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityProvider>
-    <entityProvider>
-      <name>StepCosts</name>
-      <documentation>%aditoprj%/entity/CampaignCost_entity/entityfields/stepcosts/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
-          <name>af147f3e-a1bd-4eb0-9ac8-325dbdaba17d</name>
-          <entityName>CampaignStep_entity</entityName>
-          <fieldName>CampaignStepCosts</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-        <entityDependency>
-          <name>2a92b738-c0bb-4c14-9915-aff9e18effaf</name>
+          <name>7131288b-af5c-4914-96f5-c5d70217fc23</name>
           <entityName>Campaign_entity</entityName>
-          <fieldName>CampaignStepCosts</fieldName>
+          <fieldName>CampaignCosts</fieldName>
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
+    </entityProvider>
+    <entityProvider>
+      <name>StepCosts</name>
+      <documentation>%aditoprj%/entity/CampaignCost_entity/entityfields/stepcosts/documentation.adoc</documentation>
       <children>
         <entityParameter>
           <name>CampaignStepId_param</name>
@@ -143,6 +130,20 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>af147f3e-a1bd-4eb0-9ac8-325dbdaba17d</name>
+          <entityName>CampaignStep_entity</entityName>
+          <fieldName>CampaignStepCosts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>2a92b738-c0bb-4c14-9915-aff9e18effaf</name>
+          <entityName>Campaign_entity</entityName>
+          <fieldName>CampaignStepCosts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityConsumer>
       <name>Campaigns</name>
@@ -154,25 +155,20 @@
     </entityConsumer>
     <entityConsumer>
       <name>CampaignSteps</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>CampaignStep_entity</entityName>
-        <fieldName>CampaignSteps</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>campaignId_param</name>
           <valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/campaignsteps/children/campaignid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordCampaignManagementCostCategory</name>
       <dependency>
         <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
+        <entityName>CampaignStep_entity</entityName>
+        <fieldName>CampaignSteps</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordCampaignManagementCostCategory</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -183,6 +179,11 @@
           <valueProcess>%aditoprj%/entity/CampaignCost_entity/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>CampaignId_param</name>
@@ -236,6 +237,14 @@
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
     </entityProvider>
+    <entityAggregateField>
+      <name>NET_aggregate</name>
+      <parentField>NET</parentField>
+    </entityAggregateField>
+    <entityAggregateField>
+      <name>NETPERPARTICIPANT_aggregate</name>
+      <parentField>netPerParticipant</parentField>
+    </entityAggregateField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -312,6 +321,15 @@
           <name>CURRENCY.value</name>
           <recordfield>CAMPAIGN.CURRENCY</recordfield>
         </dbRecordFieldMapping>
+        <aggregateFieldDbMapping>
+          <name>NET_aggregate.value</name>
+          <recordfield>CAMPAIGNCOST.NET</recordfield>
+          <aggregateType>SUM</aggregateType>
+        </aggregateFieldDbMapping>
+        <aggregateFieldDbMapping>
+          <name>NETPERPARTICIPANT_aggregate.value</name>
+          <expression>%aditoprj%/entity/CampaignCost_entity/recordcontainers/db/recordfieldmappings/netperparticipant_aggregate.value/expression.js</expression>
+        </aggregateFieldDbMapping>
       </recordFieldMappings>
     </dbRecordContainer>
   </recordContainers>
diff --git a/entity/CampaignCost_entity/recordcontainers/db/conditionProcess.js b/entity/CampaignCost_entity/recordcontainers/db/conditionProcess.js
index 0d440b3273654c53a9eb47fa0da830499214b1a0..41159ac869687465a8b95f1980f26bd891c9851d 100644
--- a/entity/CampaignCost_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/CampaignCost_entity/recordcontainers/db/conditionProcess.js
@@ -19,5 +19,4 @@ else
     cond.and("CAMPAIGNCOST.CAMPAIGNSTEP_ID is null");
 }
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/recordcontainers/db/recordfieldmappings/netperparticipant_aggregate.value/expression.js b/entity/CampaignCost_entity/recordcontainers/db/recordfieldmappings/netperparticipant_aggregate.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..18b449265da4cb9e8479a5db4f859cfbc5d6bf53
--- /dev/null
+++ b/entity/CampaignCost_entity/recordcontainers/db/recordfieldmappings/netperparticipant_aggregate.value/expression.js
@@ -0,0 +1,3 @@
+import("system.result");
+result.string("SUM(CAMPAIGNCOST.NET/(select COUNT(*) from CAMPAIGNPARTICIPANT where CAMPAIGNCOST.CAMPAIGN_ID = CAMPAIGNPARTICIPANT.CAMPAIGN_ID "
+             +" and CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID = CAMPAIGNSTEP.CAMPAIGNSTEPID))");
\ No newline at end of file
diff --git a/entity/CampaignParticipantChart_entity/CampaignParticipantChart_entity.aod b/entity/CampaignParticipantChart_entity/CampaignParticipantChart_entity.aod
index 9f4d833b4dd531b6cd9df80f061ed1cd12be9704..6291fe367fc8692ca2d6e068e1d9a6e5a2531818 100644
--- a/entity/CampaignParticipantChart_entity/CampaignParticipantChart_entity.aod
+++ b/entity/CampaignParticipantChart_entity/CampaignParticipantChart_entity.aod
@@ -8,6 +8,7 @@
     <element>CampaignStep_entity</element>
     <element>CampaignAddParticipants_entity</element>
   </siblings>
+  <usePermissions v="false" />
   <recordContainer>jdito</recordContainer>
   <entityFields>
     <entityProvider>
diff --git a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod
index 3c8e5a5655f3c8320c4188939e9588988e7b9b44..92f21ead9046ed628e9a8e2c4148c710a235f88f 100644
--- a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod
+++ b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod
@@ -7,34 +7,21 @@
   <siblings>
     <element>CampaignAddParticipants_entity</element>
     <element>CampaignParticipantChart_entity</element>
+    <element>Campaign_entity</element>
   </siblings>
   <afterOperatingState>%aditoprj%/entity/CampaignParticipant_entity/afterOperatingState.js</afterOperatingState>
-  <useFavorites v="true" />
+  <usePermissions v="false" />
   <titlePlural>Participants</titlePlural>
-  <recordContainer>ParticipantsDbRecordContainer</recordContainer>
+  <recordContainer>db</recordContainer>
   <entityFields>
     <entityProvider>
       <name>#PROVIDER</name>
+      <recordContainer>db</recordContainer>
     </entityProvider>
     <entityProvider>
       <name>CampaignParticipantsProvider</name>
-      <targetContextField>CONTACTCONTEXT</targetContextField>
-      <targetIdField>CONTACT_ID</targetIdField>
       <documentation>%aditoprj%/entity/CampaignParticipant_entity/entityfields/campaignparticipantsprovider/documentation.adoc</documentation>
-      <dependencies>
-        <entityDependency>
-          <name>f28945cd-4613-4dfa-91f7-a7d9d64cef58</name>
-          <entityName>Campaign_entity</entityName>
-          <fieldName>CampaignParticipants</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-        <entityDependency>
-          <name>7ad08378-b36f-4512-8891-db727c6ddcd7</name>
-          <entityName>CampaignStep_entity</entityName>
-          <fieldName>CampaignParticipantsConsumer</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
+      <recordContainer>db</recordContainer>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -49,6 +36,20 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>f28945cd-4613-4dfa-91f7-a7d9d64cef58</name>
+          <entityName>Campaign_entity</entityName>
+          <fieldName>CampaignParticipants</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>7ad08378-b36f-4512-8891-db727c6ddcd7</name>
+          <entityName>CampaignStep_entity</entityName>
+          <fieldName>CampaignParticipantsConsumer</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityParameter>
       <name>CampaignStepId_param</name>
@@ -113,11 +114,9 @@
       <name>CONTACT_ID</name>
       <title>Participant</title>
       <consumer>AnyContacts</consumer>
-      <linkedContextProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/contact_id/linkedContextProcess.js</linkedContextProcess>
       <mandatory v="true" />
       <state>READONLY</state>
       <stateProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/contact_id/stateProcess.js</stateProcess>
-      <valueProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/contact_id/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/contact_id/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
@@ -145,11 +144,6 @@
     <entityConsumer>
       <name>CampaignSteps</name>
       <refreshParent v="true" />
-      <dependency>
-        <name>dependency</name>
-        <entityName>CampaignStep_entity</entityName>
-        <fieldName>CampaignSteps</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>campaignId_param</name>
@@ -157,6 +151,11 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>CampaignStep_entity</entityName>
+        <fieldName>CampaignSteps</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>CONTACTCONTEXT</name>
@@ -170,9 +169,8 @@
           <title>Update campaign step</title>
           <onActionProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js</onActionProcess>
           <isObjectAction v="false" />
-          <isSelectionAction v="false" />
           <iconId>NEON:GROUP_APPOINTMENT</iconId>
-          <state>DISABLED</state>
+          <state>AUTO</state>
           <stateProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/stateProcess.js</stateProcess>
           <tooltip>Update campaign step</tooltip>
           <tooltipProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/tooltipProcess.js</tooltipProcess>
@@ -205,17 +203,17 @@
     </entityConsumer>
     <entityConsumer>
       <name>CommRestrictionIcon</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordAttribute_entity</entityName>
-        <fieldName>SpecificContainerKeyword</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/commrestrictionicon/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordAttribute_entity</entityName>
+        <fieldName>SpecificContainerKeyword</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>STANDARD_EMAIL_COMMUNICATION</name>
@@ -230,23 +228,108 @@
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
+      <recordContainer>db</recordContainer>
     </entityProvider>
+    <entityField>
+      <name>CONTACT_ORGANISATION_ID</name>
+      <title>Organisation</title>
+      <linkedContext>Organisation</linkedContext>
+    </entityField>
+    <entityField>
+      <name>CONTACT_PERSON_ID</name>
+      <title>Participant</title>
+      <linkedContext>Person</linkedContext>
+    </entityField>
+    <entityField>
+      <name>PERSON_CONTACT_ID</name>
+      <title>Person</title>
+      <consumer>Persons</consumer>
+      <linkedContext>Person</linkedContext>
+    </entityField>
+    <entityField>
+      <name>ORGANISATION_CONTACT_ID</name>
+      <title>Organisation</title>
+      <consumer>Organisations</consumer>
+      <groupable v="true" />
+      <linkedContext>Organisation</linkedContext>
+    </entityField>
+    <entityConsumer>
+      <name>Persons</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Person_entity</entityName>
+        <fieldName>Contacts</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Organisations</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Organisation_entity</entityName>
+        <fieldName>Organisations</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityField>
+      <name>RESPONSIBLE_CONTACT_ID</name>
+      <title>Responsible</title>
+      <consumer>ResponsibleEmployees</consumer>
+      <groupable v="true" />
+      <linkedContext>Person</linkedContext>
+      <valueProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/responsible_contact_id/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/responsible_contact_id/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityConsumer>
+      <name>ResponsibleEmployees</name>
+      <children>
+        <entityParameter>
+          <name>EmployeeContactIdWhitelist_param</name>
+          <valueProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/responsibleemployees/children/employeecontactidwhitelist_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Employee_entity</entityName>
+        <fieldName>Employees</fieldName>
+      </dependency>
+    </entityConsumer>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
-      <name>ParticipantsDbRecordContainer</name>
+      <name>db</name>
       <alias>Data_alias</alias>
       <hasDependentRecords v="true" />
-      <conditionProcess>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/conditionProcess.js</conditionProcess>
-      <onDBInsert>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/onDBInsert.js</onDBInsert>
+      <fromClauseProcess>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
+      <conditionProcess>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <onDBInsert>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/db/onDBInsert.js</onDBInsert>
       <linkInformation>
         <linkInformation>
-          <name>12b5bf2e-e376-4c40-9799-fb07961a455d</name>
+          <name>02d0ac80-2767-401c-bdc1-aac3e8abf0e4</name>
           <tableName>CAMPAIGNPARTICIPANT</tableName>
           <primaryKey>CAMPAIGNPARTICIPANTID</primaryKey>
           <isUIDTable v="true" />
           <readonly v="false" />
         </linkInformation>
+        <linkInformation>
+          <name>6c320211-601b-47bf-a562-003886666040</name>
+          <tableName>CONTACT</tableName>
+          <primaryKey>CONTACTID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
+        <linkInformation>
+          <name>e1719eb5-112c-4acd-8f72-58a688d5f058</name>
+          <tableName>PERSON</tableName>
+          <primaryKey>PERSONID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
+        <linkInformation>
+          <name>8be80af4-69ea-4a5d-b404-8a26c1f8d8da</name>
+          <tableName>ORGANISATION</tableName>
+          <primaryKey>ORGANISATIONID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
       </linkInformation>
       <recordFieldMappings>
         <dbRecordFieldMapping>
@@ -260,6 +343,7 @@
         <dbRecordFieldMapping>
           <name>CAMPAIGNSTEP_ID.value</name>
           <recordfield>CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>CONTACT_ID.value</name>
@@ -287,15 +371,66 @@
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>STANDARD_PHONE_COMMUNICATION.displayValue</name>
-          <expression>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/standard_phone_communication.displayvalue/expression.js</expression>
+          <expression>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>STANDARD_EMAIL_COMMUNICATION.displayValue</name>
-          <expression>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/standard_email_communication.displayvalue/expression.js</expression>
+          <expression>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>ADVERTISINGBAN_ICON.value</name>
-          <expression>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/advertisingban_icon.value/expression.js</expression>
+          <expression>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/advertisingban_icon.value/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CONTACT_PERSON_ID.displayValue</name>
+          <expression>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/contact_person_id.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CAMPAIGNSTEP_ID.displayValue</name>
+          <expression>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/campaignstep_id.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>campaignStepCurrentParticipantCount.value</name>
+          <expression>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/campaignstepcurrentparticipantcount.value/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ORGANISATION_CONTACT_ID.value</name>
+          <expression>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/organisation_contact_id.value/expression.js</expression>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>PERSON_CONTACT_ID.value</name>
+          <recordfield>CONTACT.CONTACTID</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>PERSON_CONTACT_ID.displayValue</name>
+          <expression>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/person_contact_id.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>RESPONSIBLE_CONTACT_ID.value</name>
+          <recordfield>CAMPAIGNPARTICIPANT.RESPONSIBLE_CONTACT_ID</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>RESPONSIBLE_CONTACT_ID.displayValue</name>
+          <expression>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/responsible_contact_id.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CONTACT_ORGANISATION_ID.displayValue</name>
+          <recordfield>ORGANISATION.NAME</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CONTACT_ORGANISATION_ID.value</name>
+          <recordfield>CONTACT.ORGANISATION_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CONTACT_PERSON_ID.value</name>
+          <recordfield>CONTACT.PERSON_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ORGANISATION_CONTACT_ID.displayValue</name>
+          <recordfield>ORGANISATION.NAME</recordfield>
         </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
diff --git a/entity/CampaignParticipant_entity/entityfields/campaignsteps/children/campaignid_param/valueProcess.js b/entity/CampaignParticipant_entity/entityfields/campaignsteps/children/campaignid_param/valueProcess.js
index 90d07eb4d8a93c6e438b230582858b05be010468..eb6914514d8b5113929b3fb4b41dd78767efde3a 100644
--- a/entity/CampaignParticipant_entity/entityfields/campaignsteps/children/campaignid_param/valueProcess.js
+++ b/entity/CampaignParticipant_entity/entityfields/campaignsteps/children/campaignid_param/valueProcess.js
@@ -1,3 +1,9 @@
 import("system.vars");
 import("system.result");
-result.string(vars.get("$field.CAMPAIGN_ID"));
\ No newline at end of file
+
+var campaignID = vars.get("$field.CAMPAIGN_ID");
+
+if(!campaignID)
+    campaignID = vars.get("$param.CampaignId_param");
+
+result.string(campaignID);
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/entityfields/contact_id/displayValueProcess.js b/entity/CampaignParticipant_entity/entityfields/contact_id/displayValueProcess.js
index 1e3714bbbc7b3249e43757d6d933fb289cb4f767..85822946ab4fe0ba7730ca93fd6fca69250a5b33 100644
--- a/entity/CampaignParticipant_entity/entityfields/contact_id/displayValueProcess.js
+++ b/entity/CampaignParticipant_entity/entityfields/contact_id/displayValueProcess.js
@@ -3,10 +3,4 @@ import("system.vars");
 import("Contact_lib");
 import("system.neon");
 
-let contactId = vars.getString("$field.CONTACT_ID");
-let displayValue = "";
-    
-if(contactId != "")
-    displayValue = ContactUtils.getFullTitleByContactId(contactId);
-
-result.string(displayValue);
+result.string(ContactUtils.getFullTitleByContactId(vars.getString("$field.CONTACT_ID")));
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/entityfields/contact_id/linkedContextProcess.js b/entity/CampaignParticipant_entity/entityfields/contact_id/linkedContextProcess.js
deleted file mode 100644
index 2e504d63e3b5a3f71b54b072798b3ad09c50984b..0000000000000000000000000000000000000000
--- a/entity/CampaignParticipant_entity/entityfields/contact_id/linkedContextProcess.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import("system.vars");
-import("system.result");
-import("Contact_lib");
-
-result.string(ContactUtils.getContextByContactId(vars.getString("$field.CONTACT_ID")));
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/entityfields/contact_id/valueProcess.js b/entity/CampaignParticipant_entity/entityfields/contact_id/valueProcess.js
deleted file mode 100644
index 7a0567f685002323c521639e56667e945aa30d91..0000000000000000000000000000000000000000
--- a/entity/CampaignParticipant_entity/entityfields/contact_id/valueProcess.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import("system.result");
-import("system.vars");
-
-if(vars.exists("$param.ContactId_param") && vars.get("$param.ContactId_param"))
-    result.string(vars.get("$param.ContactId_param"));
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js b/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js
index 5f2f7a2cfa299eb520877db19056edad8bbef2f6..fbba2db18aa37636d3d3ca5097cccd1c29df51e7 100644
--- a/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js
+++ b/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js
@@ -13,6 +13,5 @@ if(sysSelection.length > 0) //selektierte IDs als Array
 }
 else
 {
-    let sysFilter = vars.get("$sys.filter");//todo change name
-    CampaignUtils.openSetCampaignStepViewByCondition(JSON.stringify(sysFilter), campaignId, campaignStepId);
+    CampaignUtils.openSetCampaignStepViewByCondition(JSON.stringify(vars.get("$sys.filter")), campaignId, campaignStepId);
 }
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/stateProcess.js b/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/stateProcess.js
index d55386c662b50138c9a582d15dfcd103d2200e20..78eb0e84628e8dd7122682d803a8e555c24594a5 100644
--- a/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/stateProcess.js
+++ b/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/stateProcess.js
@@ -3,8 +3,7 @@ import("system.vars");
 import("system.neon");
 import("system.result");
 
-var campaignId = vars.get("$field.CAMPAIGN_ID");
-var participantCount = CampaignUtils.getParticipantCount(campaignId);
+var participantCount = vars.get("$sys.datarowcountfull");
 
 if(participantCount > 0)
 {
diff --git a/entity/CampaignParticipant_entity/entityfields/responsible_contact_id/displayValueProcess.js b/entity/CampaignParticipant_entity/entityfields/responsible_contact_id/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..92bb44a696f0c6d44599487fd487f086d632b652
--- /dev/null
+++ b/entity/CampaignParticipant_entity/entityfields/responsible_contact_id/displayValueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+import("Contact_lib");
+
+result.string(ContactUtils.getTitleByContactId(vars.get("$field.RESPONSIBLE_CONTACT_ID")));
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/entityfields/responsible_contact_id/valueProcess.js b/entity/CampaignParticipant_entity/entityfields/responsible_contact_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a952fcd46b87af6cd15e61a321c986df950fe4d7
--- /dev/null
+++ b/entity/CampaignParticipant_entity/entityfields/responsible_contact_id/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+    
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+    result.string(vars.get("$global.user.contactId"));
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/entityfields/responsibleemployees/children/employeecontactidwhitelist_param/valueProcess.js b/entity/CampaignParticipant_entity/entityfields/responsibleemployees/children/employeecontactidwhitelist_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2aacdbde97117f3c607a2234c5b96e5616f10246
--- /dev/null
+++ b/entity/CampaignParticipant_entity/entityfields/responsibleemployees/children/employeecontactidwhitelist_param/valueProcess.js
@@ -0,0 +1,12 @@
+import("system.vars");
+import("system.result");
+import("Sql_lib");
+import("system.neon");
+
+if(vars.get("$sys.presentationmode") == neon.CONTEXT_PRESENTATIONMODE_FILTER)
+{
+    result.string(JSON.stringify(newSelect("DISTINCT CAMPAIGNPARTICIPANT.RESPONSIBLE_CONTACT_ID")
+        .from("CAMPAIGNPARTICIPANT")
+        .where("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", vars.get("$param.CampaignId_param"))
+        .arrayColumn()));
+}
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/conditionProcess.js b/entity/CampaignParticipant_entity/recordcontainers/db/conditionProcess.js
similarity index 100%
rename from entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/conditionProcess.js
rename to entity/CampaignParticipant_entity/recordcontainers/db/conditionProcess.js
diff --git a/entity/CampaignParticipant_entity/recordcontainers/db/fromClauseProcess.js b/entity/CampaignParticipant_entity/recordcontainers/db/fromClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8603fcea0476d3281eedbdcb42db6032e193ff12
--- /dev/null
+++ b/entity/CampaignParticipant_entity/recordcontainers/db/fromClauseProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+result.string("CAMPAIGNPARTICIPANT "
+            +" join CONTACT on CONTACTID = CONTACT_ID "
+            +" left join PERSON ON PERSONID = PERSON_ID "
+            +" join ORGANISATION on ORGANISATION_ID = ORGANISATIONiD");
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/onDBInsert.js b/entity/CampaignParticipant_entity/recordcontainers/db/onDBInsert.js
similarity index 100%
rename from entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/onDBInsert.js
rename to entity/CampaignParticipant_entity/recordcontainers/db/onDBInsert.js
diff --git a/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/advertisingban_icon.value/expression.js b/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/advertisingban_icon.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..3343ac44d8f919400aa9972b5f1c0cd3f7837c57
--- /dev/null
+++ b/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/advertisingban_icon.value/expression.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("Contact_lib");
+import("Sql_lib");
+import("system.result");
+
+// Now show warning always, if any commrestriction exists. No matter which medium the current step has.
+result.string("(" + ContactUtils.getCommRestrictionCount(undefined, vars.get("$sys.date")) + ")");
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/contact_person_id.displayvalue/expression.js b/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/contact_person_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..d28cdbab4f0d456577a81ffdacfca0609beb60d4
--- /dev/null
+++ b/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/contact_person_id.displayvalue/expression.js
@@ -0,0 +1,3 @@
+import("system.result");
+import("Person_lib");
+result.string(PersUtils.getResolvingDisplaySubSql("CONTACT_ID"));
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/organisation_contact_id.value/expression.js b/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/organisation_contact_id.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..93edad8b41dce7f2dbaab8c776c8054e9097c7a2
--- /dev/null
+++ b/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/organisation_contact_id.value/expression.js
@@ -0,0 +1,14 @@
+import("system.SQLTYPES");
+import("Sql_lib");
+import("system.result");
+
+result.string(SqlBuilder.caseWhen(newWhere(newSelect("COUNT(*)")
+                                    .from("CONTACT")
+                                    .where("CONTACT.CONTACTID = CAMPAIGNPARTICIPANT.CONTACT_ID")
+                                    .and("CONTACT.PERSON_ID is null"), "0", SqlBuilder.GREATER(), SQLTYPES.INTEGER))
+                        .then("CAMPAIGNPARTICIPANT.CONTACT_ID")
+                        .elseValue(newSelect("c1.CONTACTID")
+                                        .from("CONTACT", "c1")
+                                        .join("CONTACT", "c1.ORGANISATION_ID = c2.ORGANISATION_ID", "c2")
+                                        .where("c2.CONTACTID = CAMPAIGNPARTICIPANT.CONTACT_ID")
+                                        .and("c1.PERSON_ID is null")).toString())
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/person_contact_id.displayvalue/expression.js b/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/person_contact_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..8e485513f892edef1812070b5521317ed059cf3d
--- /dev/null
+++ b/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/person_contact_id.displayvalue/expression.js
@@ -0,0 +1,3 @@
+import("system.result");
+import("Person_lib");
+result.string(PersUtils.getResolvingDisplaySubSql("CAMPAIGNPARTICIPANT.CONTACT_ID"));
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/responsible_contact_id.displayvalue/expression.js b/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/responsible_contact_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..29d2f306f74cbad80faada5dba266f0c819e76d3
--- /dev/null
+++ b/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/responsible_contact_id.displayvalue/expression.js
@@ -0,0 +1,3 @@
+import("system.result");
+import("Person_lib");
+result.string(PersUtils.getResolvingDisplaySubSql("CAMPAIGNPARTICIPANT.RESPONSIBLE_CONTACT_ID"));
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/standard_email_communication.displayvalue/expression.js b/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.displayvalue/expression.js
similarity index 100%
rename from entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/standard_email_communication.displayvalue/expression.js
rename to entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.displayvalue/expression.js
diff --git a/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/standard_phone_communication.displayvalue/expression.js b/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.displayvalue/expression.js
similarity index 100%
rename from entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/standard_phone_communication.displayvalue/expression.js
rename to entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.displayvalue/expression.js
diff --git a/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/advertisingban_icon.value/expression.js b/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/advertisingban_icon.value/expression.js
deleted file mode 100644
index 27052d9123b71810bd3c103ca52ea5926567dd69..0000000000000000000000000000000000000000
--- a/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/advertisingban_icon.value/expression.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import("system.vars");
-import("Contact_lib");
-import("Sql_lib");
-import("system.result");
-
-// Now show warning always, if any commrestriction exists. No matter which medium the current step has.
-result.string("(" + newSelect("count(*)")
-                        .from("CONTACT")
-                        .where("CONTACT.CONTACTID = CAMPAIGNPARTICIPANT.CONTACT_ID")
-                        .and(newWhere(ContactUtils.getCommRestrictionCondition(undefined, false, vars.get("$sys.date")))) // TODO: the newWhere can be removed when getCommRestrictionCondition returns a sqlBuilder instead of a SqlCondition
-                        .toString() + ")");
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/campaignstep_id.displayvalue/expression.js b/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/campaignstep_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..c2a7f5503d93c7ac48568fb0476a41b0bb4193ef
--- /dev/null
+++ b/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/campaignstep_id.displayvalue/expression.js
@@ -0,0 +1,3 @@
+import("system.result");
+import("Sql_lib");
+result.string(newSelect("CAMPAIGNSTEP.NAME").from("CAMPAIGNSTEP").where("CAMPAIGNSTEP.CAMPAIGNSTEPID = CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID").toString());
\ No newline at end of file
diff --git a/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/campaignstepcurrentparticipantcount.value/expression.js b/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/campaignstepcurrentparticipantcount.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..7d896cba463f89dde65274356f8bbc5fb2a1097e
--- /dev/null
+++ b/entity/CampaignParticipant_entity/recordcontainers/participantsdbrecordcontainer/recordfieldmappings/campaignstepcurrentparticipantcount.value/expression.js
@@ -0,0 +1,3 @@
+import("system.result");
+import("Sql_lib");
+result.string(newSelect("COUNT(*)").from("CAMPAIGNPARTICIPANT", "p1").where("p1.CAMPAIGNSTEP_ID = CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID").toString());
\ No newline at end of file
diff --git a/entity/CampaignPlanning_entity/CampaignPlanning_entity.aod b/entity/CampaignPlanning_entity/CampaignPlanning_entity.aod
index 2de87bf6e8cb49f4aa8850d0674b0e85d81a2767..44826e7cfe2893a5f59628e874e9c59f0b843d84 100644
--- a/entity/CampaignPlanning_entity/CampaignPlanning_entity.aod
+++ b/entity/CampaignPlanning_entity/CampaignPlanning_entity.aod
@@ -9,6 +9,7 @@
     <element>CampaignStep_entity</element>
   </siblings>
   <iconId>NEON:GROUP_APPOINTMENT</iconId>
+  <usePermissions v="false" />
   <recordContainer>jditoRecordContainer</recordContainer>
   <entityFields>
     <entityProvider>
@@ -80,17 +81,17 @@
     </entityField>
     <entityConsumer>
       <name>CampaignStatusKeyword</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/CampaignPlanning_entity/entityfields/campaignstatuskeyword/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/CampaignStep_entity/CampaignStep_entity.aod b/entity/CampaignStep_entity/CampaignStep_entity.aod
index 38abc14be1b8c632764cc2e8ad4081a5b798d5f3..3632eda854eb4d4dd2b5f0a6773b3aa0fc34b0fb 100644
--- a/entity/CampaignStep_entity/CampaignStep_entity.aod
+++ b/entity/CampaignStep_entity/CampaignStep_entity.aod
@@ -11,8 +11,10 @@
   </siblings>
   <grantDeleteProcess>%aditoprj%/entity/CampaignStep_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/CampaignStep_entity/contentTitleProcess.js</contentTitleProcess>
+  <contentDescriptionProcess>%aditoprj%/entity/CampaignStep_entity/contentDescriptionProcess.js</contentDescriptionProcess>
   <onValidation>%aditoprj%/entity/CampaignStep_entity/onValidation.js</onValidation>
   <imageProcess>%aditoprj%/entity/CampaignStep_entity/imageProcess.js</imageProcess>
+  <usePermissions v="false" />
   <titlePlural>Steps</titlePlural>
   <recordContainer>db</recordContainer>
   <entityFields>
@@ -58,6 +60,7 @@
       <title>Responsible</title>
       <consumer>Employees</consumer>
       <groupable v="true" />
+      <linkedContext>Person</linkedContext>
       <mandatory v="true" />
       <valueProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/employee_contact_id/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/employee_contact_id/displayValueProcess.js</displayValueProcess>
@@ -95,7 +98,6 @@
       <groupable v="true" />
       <mandatory v="true" />
       <valueProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/status/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/status/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
       <name>SORTING</name>
@@ -129,6 +131,13 @@
       <name>CampaignSteps</name>
       <documentation>%aditoprj%/entity/CampaignStep_entity/entityfields/campaignsteps/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
+      <children>
+        <entityParameter>
+          <name>campaignId_param</name>
+          <expose v="true" />
+          <mandatory v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>421e6cc2-f874-4834-b022-fe1b253d50af</name>
@@ -167,13 +176,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>campaignId_param</name>
-          <expose v="true" />
-          <mandatory v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>campaignId_param</name>
@@ -182,17 +184,17 @@
     </entityParameter>
     <entityConsumer>
       <name>KeywordStates</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/keywordstates/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>MAXPARTICIPANTS</name>
@@ -204,11 +206,6 @@
     <entityConsumer>
       <name>CampaignParticipantsConsumer</name>
       <selectionMode>MULTI</selectionMode>
-      <dependency>
-        <name>dependency</name>
-        <entityName>CampaignParticipant_entity</entityName>
-        <fieldName>CampaignParticipantsProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>CampaignId_param</name>
@@ -219,6 +216,11 @@
           <valueProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/campaignparticipantsconsumer/children/campaignstepid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>CampaignParticipant_entity</entityName>
+        <fieldName>CampaignParticipantsProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>CurrentMaxParticipantsInfo</name>
@@ -239,6 +241,12 @@
     </entityField>
     <entityConsumer>
       <name>Employees</name>
+      <children>
+        <entityParameter>
+          <name>OnlyActives_param</name>
+          <valueProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/employees/children/onlyactives_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
       <dependency>
         <name>dependency</name>
         <entityName>Employee_entity</entityName>
@@ -247,11 +255,6 @@
     </entityConsumer>
     <entityConsumer>
       <name>CampaignStepCosts</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>CampaignCost_entity</entityName>
-        <fieldName>StepCosts</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>CampaignId_param</name>
@@ -262,6 +265,11 @@
           <valueProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/campaignstepcosts/children/campaignstepid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>CampaignCost_entity</entityName>
+        <fieldName>StepCosts</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>COST</name>
@@ -281,11 +289,6 @@
     <entityConsumer>
       <name>Activities</name>
       <title>Activities</title>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Activity_entity</entityName>
-        <fieldName>LinkedObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>RowId_param</name>
@@ -296,16 +299,16 @@
           <valueProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/activities/children/objectid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Activity_entity</entityName>
+        <fieldName>LinkedObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Tasks</name>
       <title>Tasks</title>
       <stateProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/tasks/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Task_entity</entityName>
-        <fieldName>Tasks</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>RowId_param</name>
@@ -316,6 +319,11 @@
           <valueProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/tasks/children/objectid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Task_entity</entityName>
+        <fieldName>Tasks</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>newActivity</name>
@@ -349,11 +357,6 @@
     </entityField>
     <entityConsumer>
       <name>CampaignStepsConsumer</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>CampaignStep_entity</entityName>
-        <fieldName>CampaignSteps</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>campaignId_param</name>
@@ -365,6 +368,11 @@
           <valueProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/campaignstepsconsumer/children/maxsort_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>CampaignStep_entity</entityName>
+        <fieldName>CampaignSteps</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>CampaignName</name>
@@ -375,27 +383,11 @@
       <expose v="true" />
       <description>PARAMETER</description>
     </entityParameter>
-    <entityConsumer>
-      <name>CampaignStepMedium</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>ContainerName_param</name>
-          <valueProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/campaignstepmedium/children/containername_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-        </entityParameter>
-      </children>
-    </entityConsumer>
     <entityField>
       <name>STEPMEDIUM</name>
       <title>Medium</title>
-      <consumer>CampaignStepMedium</consumer>
+      <consumer>KeywordStepMedium</consumer>
       <groupable v="true" />
-      <displayValueProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/stepmedium/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityActionField>
       <name>newBulkMail</name>
@@ -422,6 +414,23 @@
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
     </entityProvider>
+    <entityField>
+      <name>CurrentParticipantsPerStep</name>
+    </entityField>
+    <entityConsumer>
+      <name>KeywordStepMedium</name>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/keywordstepmedium/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+    </entityConsumer>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -520,6 +529,18 @@
           <name>STEPMEDIUM.value</name>
           <recordfield>CAMPAIGNSTEP.STEPMEDIUM</recordfield>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CurrentParticipantsPerStep.value</name>
+          <expression>%aditoprj%/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/currentparticipantsperstep.value/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STEPMEDIUM.displayValue</name>
+          <expression>%aditoprj%/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/stepmedium.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>EMPLOYEE_CONTACT_ID.displayValue</name>
+          <expression>%aditoprj%/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/employee_contact_id.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
   </recordContainers>
diff --git a/entity/CampaignStep_entity/contentDescriptionProcess.js b/entity/CampaignStep_entity/contentDescriptionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b07a72fe7cc543e3bedc5d5604f12f28769ffb6b
--- /dev/null
+++ b/entity/CampaignStep_entity/contentDescriptionProcess.js
@@ -0,0 +1,5 @@
+import("system.translate");
+import("system.datetime");
+import("system.vars");
+import("system.result");
+result.string(datetime.toDate(vars.get("$field.DATE_NEW"), translate.text("dd.MM.yyyy")));
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/entityfields/campaign_id/stateProcess.js b/entity/CampaignStep_entity/entityfields/campaign_id/stateProcess.js
index fcfc9adff47d5aec4a5503074c7efba56b4bc507..c53bfb5c9af9abcb188c7f5be23e0ba18b92ae7f 100644
--- a/entity/CampaignStep_entity/entityfields/campaign_id/stateProcess.js
+++ b/entity/CampaignStep_entity/entityfields/campaign_id/stateProcess.js
@@ -11,13 +11,13 @@ import("system.vars");
  * This is specifically required for the campaign planning module as we want to create
  * new steps there regardless of the selection
  */
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW &&
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW || (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW &&
     (vars.exists("$param.campaignId_param") && vars.get("$param.campaignId_param") == "" ||
-    vars.exists("$param.campaignSelectionVisible_param") && vars.get("$param.campaignSelectionVisible_param") == "true"))
+    vars.exists("$param.campaignSelectionVisible_param") && vars.get("$param.campaignSelectionVisible_param") == "true")))
 {
     result.string(neon.COMPONENTSTATE_AUTO);
 }
-else
+else if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
 {
     result.string(neon.COMPONENTSTATE_INVISIBLE);
 }
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/entityfields/currentmaxparticipantsinfo/valueProcess.js b/entity/CampaignStep_entity/entityfields/currentmaxparticipantsinfo/valueProcess.js
index 86c117c70ddf7fe6b5a8c94a811313929cec7a00..e9ba9c24747c9a500d2b4a46091b85a8a1167b4b 100644
--- a/entity/CampaignStep_entity/entityfields/currentmaxparticipantsinfo/valueProcess.js
+++ b/entity/CampaignStep_entity/entityfields/currentmaxparticipantsinfo/valueProcess.js
@@ -2,6 +2,14 @@ import("system.result");
 import("system.vars");
 import("Campaign_lib");
 
-let currentParticipantsCount = CampaignUtils.getParticipantCountForStep(vars.get("$field.CAMPAIGNSTEPID"), vars.get("$field.CAMPAIGN_ID"));
-let maxParticipantsStepCount = vars.get("$field.MAXPARTICIPANTS");
-result.string(currentParticipantsCount + "/" + maxParticipantsStepCount);
\ No newline at end of file
+var currentParticipantsCount = vars.get("$field.CurrentParticipantsPerStep");
+var maxParticipantsStepCount = vars.get("$field.MAXPARTICIPANTS");
+var res = [];
+
+if(currentParticipantsCount)
+    res.push(currentParticipantsCount);
+
+if(maxParticipantsStepCount)
+    res.push(maxParticipantsStepCount);
+
+result.string(res.join("/"));
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/entityfields/employee_contact_id/displayValueProcess.js b/entity/CampaignStep_entity/entityfields/employee_contact_id/displayValueProcess.js
index 351d4b3f2c2dd75cb77ecc6ae3e0ec36f0b467de..037d5e264baf41f4e2b0ebcfce8103d365ee7e13 100644
--- a/entity/CampaignStep_entity/entityfields/employee_contact_id/displayValueProcess.js
+++ b/entity/CampaignStep_entity/entityfields/employee_contact_id/displayValueProcess.js
@@ -1,5 +1,5 @@
-import("system.vars");
-import("system.result");
-import("Contact_lib");
-
+import("system.vars");
+import("system.result");
+import("Contact_lib");
+
 result.string(ContactUtils.getTitleByContactId(vars.get("$field.EMPLOYEE_CONTACT_ID")));
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/entityfields/employee_contact_id/valueProcess.js b/entity/CampaignStep_entity/entityfields/employee_contact_id/valueProcess.js
index 0e00e387dfc0f28d5aa51163bd183e450f8535b9..85f342bc9d6e0a7d82ad065c59d5d30e6c735fe6 100644
--- a/entity/CampaignStep_entity/entityfields/employee_contact_id/valueProcess.js
+++ b/entity/CampaignStep_entity/entityfields/employee_contact_id/valueProcess.js
@@ -3,5 +3,5 @@ import("system.neon");
 import("system.vars");
 import("Employee_lib");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-    result.string(EmployeeUtils.getCurrentContactId());
\ No newline at end of file
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+    result.string(EmployeeUtils.getCurrentContactId());
diff --git a/entity/AttributeUsage_entity/entityfields/context/children/getallcontexts_param/valueProcess.js b/entity/CampaignStep_entity/entityfields/employees/children/onlyactives_param/valueProcess.js
similarity index 97%
rename from entity/AttributeUsage_entity/entityfields/context/children/getallcontexts_param/valueProcess.js
rename to entity/CampaignStep_entity/entityfields/employees/children/onlyactives_param/valueProcess.js
index ed5935fc124e63ff268a7e65d5efceab70ac456e..cda204045d2aba9ae974e0ce2200ba0cc6c852c0 100644
--- a/entity/AttributeUsage_entity/entityfields/context/children/getallcontexts_param/valueProcess.js
+++ b/entity/CampaignStep_entity/entityfields/employees/children/onlyactives_param/valueProcess.js
@@ -1,2 +1,2 @@
-import("system.result");
+import("system.result");
 result.string(true);
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/entityfields/keywordstates/children/containername_param/valueProcess.js b/entity/CampaignStep_entity/entityfields/keywordstates/children/containername_param/valueProcess.js
index 3567518a6daebc37b34b1d557a04f5410c2d0a34..09fcdcf23e88706a34b513b13000ad5db2059234 100644
--- a/entity/CampaignStep_entity/entityfields/keywordstates/children/containername_param/valueProcess.js
+++ b/entity/CampaignStep_entity/entityfields/keywordstates/children/containername_param/valueProcess.js
@@ -1,5 +1,4 @@
 import("system.result");
-import("Keyword_lib");
 import("KeywordRegistry_basic");
 
 result.string($KeywordRegistry.campaignStepState());
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/entityfields/campaignstepmedium/children/containername_param/valueProcess.js b/entity/CampaignStep_entity/entityfields/keywordstepmedium/children/containername_param/valueProcess.js
similarity index 81%
rename from entity/CampaignStep_entity/entityfields/campaignstepmedium/children/containername_param/valueProcess.js
rename to entity/CampaignStep_entity/entityfields/keywordstepmedium/children/containername_param/valueProcess.js
index a944db3259568d4c9b4453d682666704918a9b80..87e20a83401fc3a61ebc4f743ca2cc9763788253 100644
--- a/entity/CampaignStep_entity/entityfields/campaignstepmedium/children/containername_param/valueProcess.js
+++ b/entity/CampaignStep_entity/entityfields/keywordstepmedium/children/containername_param/valueProcess.js
@@ -1,5 +1,3 @@
-import("system.result");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
+import("KeywordRegistry_basic");
+import("system.result");
 result.string($KeywordRegistry.communicationMediumCampaign());
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/entityfields/maxparticipants/onValidation.js b/entity/CampaignStep_entity/entityfields/maxparticipants/onValidation.js
index fd6b6aef2f69c7be604ebcf0512609e3dfdff3cb..de688c4d15daf210c375a6bb8bc8f6af326f20fd 100644
--- a/entity/CampaignStep_entity/entityfields/maxparticipants/onValidation.js
+++ b/entity/CampaignStep_entity/entityfields/maxparticipants/onValidation.js
@@ -1,3 +1,4 @@
+import("system.translate");
 import("Campaign_lib");
 import("system.result");
 import("Entity_lib");
@@ -7,4 +8,6 @@ var currentParticipantsCount = parseInt(vars.get("$field.CurrentMaxParticipantsI
 var newMaxParticipantsCount = parseInt(vars.get("local.value"));
 
 if(newMaxParticipantsCount < currentParticipantsCount)
-    result.string(CampaignUtils.getMaxParticipantsValidationMessage());
\ No newline at end of file
+    result.string(CampaignUtils.getMaxParticipantsValidationMessage());
+else if(newMaxParticipantsCount <= 0)
+    result.string(translate.text("The max participants count can not be equal or less then 0"));
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/entityfields/status/displayValueProcess.js b/entity/CampaignStep_entity/entityfields/status/displayValueProcess.js
deleted file mode 100644
index d0247bf23ab99895d336f6954448a7866fc855c5..0000000000000000000000000000000000000000
--- a/entity/CampaignStep_entity/entityfields/status/displayValueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.result");
-import("system.vars");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
-result.string(KeywordUtils.getViewValue($KeywordRegistry.campaignStepState(), vars.get("$field.STATUS")));
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/entityfields/status/valueProcess.js b/entity/CampaignStep_entity/entityfields/status/valueProcess.js
index dc5efe1d6fe6cca00ad15ff17d26d7fe16a98a55..ed6f79285d36d3d6d904c6554b6e28b79b09d861 100644
--- a/entity/CampaignStep_entity/entityfields/status/valueProcess.js
+++ b/entity/CampaignStep_entity/entityfields/status/valueProcess.js
@@ -1,7 +1,7 @@
+import("KeywordRegistry_basic");
 import("system.vars");
 import("system.result");
 import("system.neon");
-import("KeywordRegistry_basic");
 
 if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
-    result.string($KeywordRegistry.campaignStepState$open());
\ No newline at end of file
+    result.string($KeywordRegistry.campaignStepState$open);
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/entityfields/stepmedium/displayValueProcess.js b/entity/CampaignStep_entity/entityfields/stepmedium/displayValueProcess.js
deleted file mode 100644
index 429287a14cde6238f380ff76c6b30c2e6ca93f05..0000000000000000000000000000000000000000
--- a/entity/CampaignStep_entity/entityfields/stepmedium/displayValueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.result");
-import("system.vars");
-import("KeywordRegistry_basic");
-import("Keyword_lib");
-
-result.string(KeywordUtils.getViewValue($KeywordRegistry.communicationMediumCampaign(), vars.get("$field.STEPMEDIUM")));
diff --git a/entity/CampaignStep_entity/recordcontainers/db/conditionProcess.js b/entity/CampaignStep_entity/recordcontainers/db/conditionProcess.js
index d3d9bfc8c7b5828c91439ec247e9af5ec5ac33a4..c28e929a43d58b57ee5279fea896c3634511bf31 100644
--- a/entity/CampaignStep_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/CampaignStep_entity/recordcontainers/db/conditionProcess.js
@@ -6,5 +6,4 @@ import("system.result");
 var cond = newWhereIfSet("CAMPAIGNSTEP.CAMPAIGN_ID", "$param.campaignId_param")
                 .andIfSet("CAMPAIGNSTEP.SORTING","$param.maxSort_param", SqlBuilder.LESS_OR_EQUAL());
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/currentparticipantsperstep.value/expression.js b/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/currentparticipantsperstep.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..adbfaa81f0fab15ab159113880fd2c1cdd6ce47d
--- /dev/null
+++ b/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/currentparticipantsperstep.value/expression.js
@@ -0,0 +1,3 @@
+import("system.result");
+import("Sql_lib");
+result.string(newSelect("COUNT(*)").from("CAMPAIGNPARTICIPANT").where("CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID = CAMPAIGNSTEP.CAMPAIGNSTEPID").toString());
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/employee_contact_id.displayvalue/expression.js b/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/employee_contact_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..54ff36ce1d19a4fcaf358c6242271a93d788c915
--- /dev/null
+++ b/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/employee_contact_id.displayvalue/expression.js
@@ -0,0 +1,3 @@
+import("system.result");
+import("Person_lib");
+result.string(PersUtils.getResolvingDisplaySubSql("CAMPAIGNSTEP.EMPLOYEE_CONTACT_ID"));
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
index f0e8a44adee3749dafae8e5cba1b67c52701e01a..dd2e2affd49e8a4b142168764ba20c101f1f500e 100644
--- a/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
+++ b/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
@@ -1,6 +1,5 @@
 import("system.result");
 import("Keyword_lib");
-import("KeywordRegistry_basic");
 
-var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.campaignStepState(), "CAMPAIGNSTEP.STATUS");
+var sql = KeywordUtils.getResolvedTitleSqlPart("CampaignManagementStepStates", "CAMPAIGNSTEP.STATUS");
 result.string(sql);
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/stepmedium.displayvalue/expression.js b/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/stepmedium.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..260b5474d57381f02195ced3290c820a2eea719f
--- /dev/null
+++ b/entity/CampaignStep_entity/recordcontainers/db/recordfieldmappings/stepmedium.displayvalue/expression.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("Keyword_lib");
+
+var sql = KeywordUtils.getResolvedTitleSqlPart("CommunicationMediumCampaign", "CAMPAIGNSTEP.STEPMEDIUM");
+result.string(sql);
\ No newline at end of file
diff --git a/entity/Campaign_entity/Campaign_entity.aod b/entity/Campaign_entity/Campaign_entity.aod
index 37416e7b55c7aa8aeec8dc400816f6df5b390cae..0fba3da6c0fe603c6ec1051bd827ebd09ee38bde 100644
--- a/entity/Campaign_entity/Campaign_entity.aod
+++ b/entity/Campaign_entity/Campaign_entity.aod
@@ -10,9 +10,12 @@
     <element>CampaignCost_entity</element>
     <element>CampaignCostChart_entity</element>
     <element>CampaignStep_entity</element>
+    <element>CampaignAddParticipants_entity</element>
+    <element>CampaignParticipant_entity</element>
   </siblings>
   <grantDeleteProcess>%aditoprj%/entity/Campaign_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/Campaign_entity/contentTitleProcess.js</contentTitleProcess>
+  <contentDescriptionProcess>%aditoprj%/entity/Campaign_entity/contentDescriptionProcess.js</contentDescriptionProcess>
   <afterUiInit>%aditoprj%/entity/Campaign_entity/afterUiInit.js</afterUiInit>
   <useFavorites v="true" />
   <iconId>VAADIN:GROUP</iconId>
@@ -45,7 +48,6 @@
       <name>NAME</name>
       <title>Name</title>
       <mandatory v="true" />
-      <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/name/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>DATE_START</name>
@@ -71,6 +73,7 @@
       <title>Person in charge</title>
       <consumer>Employee</consumer>
       <groupable v="true" />
+      <linkedContext>Person</linkedContext>
       <mandatory v="true" />
       <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/employee_contact_id/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/Campaign_entity/entityfields/employee_contact_id/displayValueProcess.js</displayValueProcess>
@@ -79,7 +82,6 @@
       <name>DESCRIPTION</name>
       <title>Description</title>
       <contentType>LONG_TEXT</contentType>
-      <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/description/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>USER_NEW</name>
@@ -106,11 +108,6 @@
     <entityConsumer>
       <name>CampaignSteps</name>
       <state>EDITABLE</state>
-      <dependency>
-        <name>dependency</name>
-        <entityName>CampaignStep_entity</entityName>
-        <fieldName>CampaignSteps</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>campaignId_param</name>
@@ -119,6 +116,11 @@
           <mandatory v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>CampaignStep_entity</entityName>
+        <fieldName>CampaignSteps</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>STATUS</name>
@@ -127,21 +129,20 @@
       <groupable v="true" />
       <mandatory v="true" />
       <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/status/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/Campaign_entity/entityfields/status/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityConsumer>
       <name>KeywordStates</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/keywordstates/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>Campaigns</name>
@@ -178,16 +179,7 @@
       <name>CampaignParticipants</name>
       <refreshParent v="false" />
       <selectionMode>MULTI</selectionMode>
-      <dependency>
-        <name>dependency</name>
-        <entityName>CampaignParticipant_entity</entityName>
-        <fieldName>CampaignParticipantsProvider</fieldName>
-      </dependency>
       <children>
-        <entityParameter>
-          <name>ContactId_param</name>
-          <expose v="true" />
-        </entityParameter>
         <entityParameter>
           <name>CampaignStepId_param</name>
           <expose v="true" />
@@ -198,6 +190,11 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>CampaignParticipant_entity</entityName>
+        <fieldName>CampaignParticipantsProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Employee</name>
@@ -209,17 +206,17 @@
     </entityConsumer>
     <entityConsumer>
       <name>CampaignCosts</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>CampaignCost_entity</entityName>
-        <fieldName>CampaignCosts</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>CampaignId_param</name>
           <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/campaigncosts/children/campaignid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>CampaignCost_entity</entityName>
+        <fieldName>CampaignCosts</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>COST</name>
@@ -230,17 +227,17 @@
     </entityField>
     <entityConsumer>
       <name>CampaignStepCosts</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>CampaignCost_entity</entityName>
-        <fieldName>StepCosts</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>CampaignId_param</name>
           <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/campaignstepcosts/children/campaignid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>CampaignCost_entity</entityName>
+        <fieldName>StepCosts</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>stepCount</name>
@@ -255,11 +252,6 @@
     <entityConsumer>
       <name>Activities</name>
       <title>Activities</title>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Activity_entity</entityName>
-        <fieldName>LinkedObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectId_param</name>
@@ -270,25 +262,11 @@
           <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/activities/children/rowid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Tasks</name>
-      <title>Tasks</title>
       <dependency>
         <name>dependency</name>
-        <entityName>Task_entity</entityName>
-        <fieldName>Tasks</fieldName>
+        <entityName>Activity_entity</entityName>
+        <fieldName>LinkedObjects</fieldName>
       </dependency>
-      <children>
-        <entityParameter>
-          <name>ObjectId_param</name>
-          <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/tasks/children/objectid_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>RowId_param</name>
-          <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/tasks/children/rowid_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
     </entityConsumer>
     <entityActionField>
       <name>newActivity</name>
@@ -307,32 +285,32 @@
     <entityConsumer>
       <name>CampaignCostsChart</name>
       <title>Charts</title>
-      <dependency>
-        <name>dependency</name>
-        <entityName>CampaignCostChart_entity</entityName>
-        <fieldName>CostChart</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>CampaignId_param</name>
           <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/campaigncostschart/children/campaignid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>CampaignCostChart_entity</entityName>
+        <fieldName>CostChart</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>CampaignParticipantsChart</name>
       <title>Chart 2</title>
-      <dependency>
-        <name>dependency</name>
-        <entityName>CampaignParticipantChart_entity</entityName>
-        <fieldName>ParticipantChart</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>CampaignId_param</name>
           <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/campaignparticipantschart/children/campaignid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>CampaignParticipantChart_entity</entityName>
+        <fieldName>ParticipantChart</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>remainingRuntime</name>
@@ -342,27 +320,22 @@
     <entityConsumer>
       <name>CampaignStepsReadonly</name>
       <state>READONLY</state>
-      <dependency>
-        <name>dependency</name>
-        <entityName>CampaignStep_entity</entityName>
-        <fieldName>CampaignSteps</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>campaignId_param</name>
           <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/campaignstepsreadonly/children/campaignid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>CampaignStep_entity</entityName>
+        <fieldName>CampaignSteps</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Attributes</name>
       <stateProcess>%aditoprj%/entity/Campaign_entity/entityfields/attributes/stateProcess.js</stateProcess>
       <onValidation>%aditoprj%/entity/Campaign_entity/entityfields/attributes/onValidation.js</onValidation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>AttributeRelations</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -373,6 +346,11 @@
           <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/attributes/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>AttributeRelations</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>newCampaignStep</name>
@@ -382,11 +360,6 @@
     </entityActionField>
     <entityConsumer>
       <name>CampaignAnalysisConsumer</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>CampaignAnalysis_entity</entityName>
-        <fieldName>CampaignAnalysisProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>CampaignId_param</name>
@@ -402,14 +375,14 @@
           <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/campaignanalysisconsumer/children/datestart_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>MemberConsumer</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Member_entity</entityName>
-        <fieldName>Links</fieldName>
+        <entityName>CampaignAnalysis_entity</entityName>
+        <fieldName>CampaignAnalysisProvider</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>MemberConsumer</name>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
@@ -420,6 +393,11 @@
           <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/memberconsumer/children/objectrowid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Member_entity</entityName>
+        <fieldName>Links</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ShowOnlyCurrentUsersCampaigns_param</name>
@@ -439,33 +417,8 @@
       <iconId>VAADIN:CURLY_BRACKETS</iconId>
       <stateProcess>%aditoprj%/entity/Campaign_entity/entityfields/openadminview/stateProcess.js</stateProcess>
     </entityActionField>
-    <entityParameter>
-      <name>originalCampaignIdCopy_param</name>
-      <expose v="true" />
-    </entityParameter>
-    <entityParameter>
-      <name>description_param</name>
-      <expose v="true" />
-    </entityParameter>
-    <entityParameter>
-      <name>emplContactId_param</name>
-      <expose v="true" />
-    </entityParameter>
-    <entityParameter>
-      <name>name_param</name>
-      <expose v="true" />
-    </entityParameter>
-    <entityParameter>
-      <name>state_param</name>
-      <expose v="true" />
-    </entityParameter>
     <entityConsumer>
       <name>Documents</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>Documents</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentTable_param</name>
@@ -476,15 +429,15 @@
           <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>Documents</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>AttributeTree</name>
       <stateProcess>%aditoprj%/entity/Campaign_entity/entityfields/attributetree/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>TreeProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -495,6 +448,11 @@
           <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/attributetree/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>TreeProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>CURRENCY</name>
@@ -506,17 +464,17 @@
     </entityField>
     <entityConsumer>
       <name>KeywordCurrency</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/keywordcurrency/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>CAMPAIGN_OBEJCTTYPE</name>
@@ -552,12 +510,36 @@
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
     </entityProvider>
+    <entityField>
+      <name>ACTIVE</name>
+    </entityField>
+    <entityParameter>
+      <name>Copy_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityConsumer>
+      <name>Tasks</name>
+      <children>
+        <entityParameter>
+          <name>ObjectId_param</name>
+          <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/tasks/children/objectid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>RowId_param</name>
+          <valueProcess>%aditoprj%/entity/Campaign_entity/entityfields/tasks/children/rowid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Task_entity</entityName>
+        <fieldName>Tasks</fieldName>
+      </dependency>
+    </entityConsumer>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
       <name>db</name>
       <alias>Data_alias</alias>
-      <fromClauseProcess>%aditoprj%/entity/Campaign_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
       <conditionProcess>%aditoprj%/entity/Campaign_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
       <onDBInsert>%aditoprj%/entity/Campaign_entity/recordcontainers/db/onDBInsert.js</onDBInsert>
       <onDBUpdate>%aditoprj%/entity/Campaign_entity/recordcontainers/db/onDBUpdate.js</onDBUpdate>
@@ -667,6 +649,14 @@
           <isFilterable v="true" />
           <filtertype>BASIC</filtertype>
         </consumerMapping>
+        <dbRecordFieldMapping>
+          <name>ACTIVE.value</name>
+          <expression>%aditoprj%/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js</expression>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>EMPLOYEE_CONTACT_ID.displayValue</name>
+          <expression>%aditoprj%/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/employee_contact_id.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
       <filterExtensions>
         <filterExtensionSet>
@@ -676,53 +666,6 @@
           <filterConditionProcess>%aditoprj%/entity/Campaign_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js</filterConditionProcess>
           <filtertype>BASIC</filtertype>
         </filterExtensionSet>
-        <filterExtension>
-          <name>DateStart_filter</name>
-          <title>Startdate</title>
-          <contentType>DATE</contentType>
-          <filterConditionProcess>%aditoprj%/entity/Campaign_entity/recordcontainers/db/filterextensions/datestart_filter/filterConditionProcess.js</filterConditionProcess>
-          <filtertype>BASIC</filtertype>
-        </filterExtension>
-        <filterExtension>
-          <name>DateEnd_filter</name>
-          <title>Enddate</title>
-          <contentType>DATE</contentType>
-          <filterConditionProcess>%aditoprj%/entity/Campaign_entity/recordcontainers/db/filterextensions/dateend_filter/filterConditionProcess.js</filterConditionProcess>
-          <filtertype>BASIC</filtertype>
-        </filterExtension>
-        <filterExtension>
-          <name>Participant_filter</name>
-          <title>Participants</title>
-          <contentType>TEXT</contentType>
-          <filterValuesProcess>%aditoprj%/entity/Campaign_entity/recordcontainers/db/filterextensions/participant_filter/filterValuesProcess.js</filterValuesProcess>
-          <filterConditionProcess>%aditoprj%/entity/Campaign_entity/recordcontainers/db/filterextensions/participant_filter/filterConditionProcess.js</filterConditionProcess>
-          <filtertype>BASIC</filtertype>
-        </filterExtension>
-        <filterExtension>
-          <name>CampaignStep_filter</name>
-          <title>Steps</title>
-          <contentType>TEXT</contentType>
-          <filterValuesProcess>%aditoprj%/entity/Campaign_entity/recordcontainers/db/filterextensions/campaignstep_filter/filterValuesProcess.js</filterValuesProcess>
-          <filterConditionProcess>%aditoprj%/entity/Campaign_entity/recordcontainers/db/filterextensions/campaignstep_filter/filterConditionProcess.js</filterConditionProcess>
-          <filtertype>BASIC</filtertype>
-        </filterExtension>
-        <filterExtension>
-          <name>Member_filter</name>
-          <title>Members</title>
-          <contentType>TEXT</contentType>
-          <filterValuesProcess>%aditoprj%/entity/Campaign_entity/recordcontainers/db/filterextensions/member_filter/filterValuesProcess.js</filterValuesProcess>
-          <filterConditionProcess>%aditoprj%/entity/Campaign_entity/recordcontainers/db/filterextensions/member_filter/filterConditionProcess.js</filterConditionProcess>
-          <filtertype>BASIC</filtertype>
-        </filterExtension>
-        <filterExtension>
-          <name>Favorite_filter</name>
-          <title>Favoritegroup</title>
-          <contentType>TEXT</contentType>
-          <filterValuesProcess>%aditoprj%/entity/Campaign_entity/recordcontainers/db/filterextensions/favorite_filter/filterValuesProcess.js</filterValuesProcess>
-          <filterConditionProcess>%aditoprj%/entity/Campaign_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js</filterConditionProcess>
-          <groupedRecordField></groupedRecordField>
-          <filtertype>BASIC</filtertype>
-        </filterExtension>
       </filterExtensions>
     </dbRecordContainer>
   </recordContainers>
diff --git a/entity/Campaign_entity/afterUiInit.js b/entity/Campaign_entity/afterUiInit.js
index 40048a413712450e39dc819e7142ed9b2a48d820..d71e3ce2b9233ece766c8092979fc69c296d212f 100644
--- a/entity/Campaign_entity/afterUiInit.js
+++ b/entity/Campaign_entity/afterUiInit.js
@@ -6,4 +6,9 @@ import("Attribute_lib");
 if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
 {
     AttributeRelationUtils.presetMandatoryAttributes(ContextUtils.getCurrentContextId(), "Attributes");
+    
+    if(vars.exists("$param.Copy_param") && vars.get("$param.Copy_param"))
+    {
+        neon.setFieldValues(JSON.parse(vars.get("$param.Copy_param"))["FIELDS"]);      
+    }
 }
diff --git a/entity/Campaign_entity/contentDescriptionProcess.js b/entity/Campaign_entity/contentDescriptionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b07a72fe7cc543e3bedc5d5604f12f28769ffb6b
--- /dev/null
+++ b/entity/Campaign_entity/contentDescriptionProcess.js
@@ -0,0 +1,5 @@
+import("system.translate");
+import("system.datetime");
+import("system.vars");
+import("system.result");
+result.string(datetime.toDate(vars.get("$field.DATE_NEW"), translate.text("dd.MM.yyyy")));
\ No newline at end of file
diff --git a/entity/Campaign_entity/entityfields/copycampaign/onActionProcess.js b/entity/Campaign_entity/entityfields/copycampaign/onActionProcess.js
index d0e4f15cee96a3e7328b2b5d92067f31c8cceaef..10b5370070b7fb3a8afee2313256a569cf4bc5ab 100644
--- a/entity/Campaign_entity/entityfields/copycampaign/onActionProcess.js
+++ b/entity/Campaign_entity/entityfields/copycampaign/onActionProcess.js
@@ -1,11 +1,11 @@
 import("system.vars");
 import("Campaign_lib");
 
-var campaignid = vars.getString("$field.CAMPAIGNID");
-var description = vars.getString("$field.DESCRIPTION");
-var emplContactId = vars.getString("$field.EMPLOYEE_CONTACT_ID");
-var name = vars.getString("$field.NAME");
-var state = vars.getString("$field.STATUS");
+var campaignid = vars.get("$field.CAMPAIGNID");
+var description = vars.get("$field.DESCRIPTION");
+var emplContactId = vars.get("$field.EMPLOYEE_CONTACT_ID");
+var name = vars.get("$field.NAME");
+var state = vars.get("$field.STATUS");
 
 CampaignUtils.copyCampaign(campaignid, description, emplContactId, name, state);
     
\ No newline at end of file
diff --git a/entity/Campaign_entity/entityfields/description/valueProcess.js b/entity/Campaign_entity/entityfields/description/valueProcess.js
deleted file mode 100644
index f410607cb7949d96ee9b88651ad0d2ae8b82f61c..0000000000000000000000000000000000000000
--- a/entity/Campaign_entity/entityfields/description/valueProcess.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import("system.vars");
-import("system.result");
-import("system.neon");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.description_param") && vars.get("$param.description_param") && !vars.get("$this.value")) 
-{
-    result.string(vars.get("$param.description_param"));
-}
\ No newline at end of file
diff --git a/entity/Campaign_entity/entityfields/employee_contact_id/valueProcess.js b/entity/Campaign_entity/entityfields/employee_contact_id/valueProcess.js
index 04046053e32189ddf0521ec4c014092fc503e9e2..4b00f2d048bc22a15174915872c498ea6051b998 100644
--- a/entity/Campaign_entity/entityfields/employee_contact_id/valueProcess.js
+++ b/entity/Campaign_entity/entityfields/employee_contact_id/valueProcess.js
@@ -3,10 +3,5 @@ import("system.neon");
 import("system.vars");
 import("Employee_lib");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) 
-{
-    if(vars.exists("$param.emplContactId_param") && vars.get("$param.emplContactId_param") && !vars.get("$this.value"))
-        result.string(vars.get("$param.emplContactId_param"));
-    else if(vars.get("$this.value") == null)
-        result.string(EmployeeUtils.getCurrentContactId());
-}
\ No newline at end of file
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+        result.string(EmployeeUtils.getCurrentContactId());
\ No newline at end of file
diff --git a/entity/Campaign_entity/entityfields/name/valueProcess.js b/entity/Campaign_entity/entityfields/name/valueProcess.js
deleted file mode 100644
index 2c8e28aa36ecb0800ec59eccd8579a6a5d31ef10..0000000000000000000000000000000000000000
--- a/entity/Campaign_entity/entityfields/name/valueProcess.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import("system.vars");
-import("system.result");
-import("system.neon");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.name_param") && vars.get("$param.name_param") && !vars.get("$this.value")) 
-{
-    result.string(vars.get("$param.name_param"));
-}
\ No newline at end of file
diff --git a/entity/Campaign_entity/entityfields/status/displayValueProcess.js b/entity/Campaign_entity/entityfields/status/displayValueProcess.js
deleted file mode 100644
index 2b82fe77f1e59332c6adfbfa9398714a6b7b2566..0000000000000000000000000000000000000000
--- a/entity/Campaign_entity/entityfields/status/displayValueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.result");
-import("system.vars");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
-result.string(KeywordUtils.getViewValue($KeywordRegistry.campaignState(), vars.get("$field.STATUS")));
\ No newline at end of file
diff --git a/entity/Campaign_entity/entityfields/status/valueProcess.js b/entity/Campaign_entity/entityfields/status/valueProcess.js
index e772e08d2c7b872067cd42a3605f157f9e41f4b9..c3b6c3a036232875d3123ed76e88d24c518a0e7f 100644
--- a/entity/Campaign_entity/entityfields/status/valueProcess.js
+++ b/entity/Campaign_entity/entityfields/status/valueProcess.js
@@ -1,12 +1,7 @@
+import("KeywordRegistry_basic");
 import("system.neon");
 import("system.vars");
 import("system.result");
-import("KeywordRegistry_basic");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-{
-    if(vars.exists("$param.state_param") && vars.get("$param.state_param") && !vars.get("$this.value"))
-        result.string(vars.get("$param.state_param"));
-    else if (vars.get("$this.value") == null)
-        result.string($KeywordRegistry.campaignState$planning());
-}
\ No newline at end of file
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+    result.string($KeywordRegistry.campaignState$planning);
\ No newline at end of file
diff --git a/entity/Campaign_entity/entityfields/tasks/children/objectid_param/valueProcess.js b/entity/Campaign_entity/entityfields/tasks/children/objectid_param/valueProcess.js
index 5996e99db232db8df50f155732110608e5abff4e..e8b4e72e74a0a4696ff39e83135aa6100ef908c0 100644
--- a/entity/Campaign_entity/entityfields/tasks/children/objectid_param/valueProcess.js
+++ b/entity/Campaign_entity/entityfields/tasks/children/objectid_param/valueProcess.js
@@ -1,4 +1,4 @@
-import("system.result");
-import("Context_lib");
-
-result.string(ContextUtils.getCurrentContextId());
\ No newline at end of file
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.getCurrentContextId());
diff --git a/entity/Campaign_entity/entityfields/tasks/children/rowid_param/valueProcess.js b/entity/Campaign_entity/entityfields/tasks/children/rowid_param/valueProcess.js
index 44d452d9b78ba56e5498e9044770c98277bbfb2c..3814648f507bd77edb266f38a807c1669e8c5f1e 100644
--- a/entity/Campaign_entity/entityfields/tasks/children/rowid_param/valueProcess.js
+++ b/entity/Campaign_entity/entityfields/tasks/children/rowid_param/valueProcess.js
@@ -1,4 +1,4 @@
-import("system.vars");
-import("system.result");
-
+import("system.vars");
+import("system.result");
+
 result.string(vars.get("$field.CAMPAIGNID"));
\ No newline at end of file
diff --git a/entity/Campaign_entity/recordcontainers/db/conditionProcess.js b/entity/Campaign_entity/recordcontainers/db/conditionProcess.js
index b56a17e4e112b773aa2b1f6f5339c986b5d205bf..e5c5faf2b6e2facaaaad245e6858fa3ddec4c0a7 100644
--- a/entity/Campaign_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Campaign_entity/recordcontainers/db/conditionProcess.js
@@ -7,19 +7,11 @@ import("Sql_lib");
 
 
 var recordState = vars.get("$sys.recordstate");
+var cond = newWhere();
+
 
 if(vars.get("$param.ShowOnlyCurrentUsersCampaigns_param") == 'true')
 {
-    //TODO: use a preparedCondition (.build instead of .translate) when available #1030812 #1034026
-    result.string(newWhere("CAMPAIGN.EMPLOYEE_CONTACT_ID", EmployeeUtils.getCurrentContactId()).toString());
-} else if (recordState != neon.OPERATINGSTATE_NEW && recordState != neon.OPERATINGSTATE_EDIT) {
-    var condition = new SqlBuilder()
-        .whereIfSet("STEPDATESTART_TABLEALIAS.CAMPAIGN_ID = CAMPAIGN.CAMPAIGNID")
-        .andIfSet("STEPDATEEND_TABLEALIAS.CAMPAIGN_ID = CAMPAIGN.CAMPAIGNID")
-        ;
-
-    result.string(condition.toString());
-} else {
-    
-    result.string(newWhere().toString());
-}
\ No newline at end of file
+    cond.and("CAMPAIGN.EMPLOYEE_CONTACT_ID", EmployeeUtils.getCurrentContactId());
+}
+result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Campaign_entity/recordcontainers/db/filterextensions/campaignstep_filter/filterConditionProcess.js b/entity/Campaign_entity/recordcontainers/db/filterextensions/campaignstep_filter/filterConditionProcess.js
deleted file mode 100644
index d0dddcc8b370c4307bd88e167744ee1c2be730ac..0000000000000000000000000000000000000000
--- a/entity/Campaign_entity/recordcontainers/db/filterextensions/campaignstep_filter/filterConditionProcess.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import("system.result");
-import("system.vars");
-import("Sql_lib");
-import("Util_lib");
-import("Campaign_lib");
-
-
-var valueSubSelect = "(select CAMPAIGNSTEPID from CAMPAIGNSTEP where CAMPAIGN.CAMPAIGNID = CAMPAIGNSTEP.CAMPAIGN_ID)";
-var countSubSelect = "(select count(*) from CAMPAIGNSTEP where CAMPAIGNSTEP.CAMPAIGN_ID = CAMPAIGN.CAMPAIGNID)";
-var condition = "";
-
-switch(vars.get("$local.comparison")) {
-    case "ISNOTNULL":
-        condition = countSubSelect + " > 0";
-        break;
-    case "ISNULL":
-        condition = countSubSelect + " = 0";
-        break;
-    case "NOT_EQUAL":
-        condition = vars.get("$local.value") + " not in " + valueSubSelect;
-        break;
-    case "EQUAL":
-        condition = vars.get("$local.value") + " in " + valueSubSelect;
-    break;
-}
-
-result.object(condition);
diff --git a/entity/Campaign_entity/recordcontainers/db/filterextensions/campaignstep_filter/filterValuesProcess.js b/entity/Campaign_entity/recordcontainers/db/filterextensions/campaignstep_filter/filterValuesProcess.js
deleted file mode 100644
index 13b3ff34c39b81bad62a1a11c9ade92ac14078fc..0000000000000000000000000000000000000000
--- a/entity/Campaign_entity/recordcontainers/db/filterextensions/campaignstep_filter/filterValuesProcess.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import("system.result");
-import("Sql_lib");
-
-
-var campaignStepValues = new SqlBuilder()
-    .select("CAMPAIGNSTEPID, NAME")
-    .from("CAMPAIGNSTEP")
-    .orderBy("NAME")
-    .table();
-    
-result.object(campaignStepValues);
\ No newline at end of file
diff --git a/entity/Campaign_entity/recordcontainers/db/filterextensions/dateend_filter/filterConditionProcess.js b/entity/Campaign_entity/recordcontainers/db/filterextensions/dateend_filter/filterConditionProcess.js
deleted file mode 100644
index c5895859892cd384192c63b347d7c054bb6efc3d..0000000000000000000000000000000000000000
--- a/entity/Campaign_entity/recordcontainers/db/filterextensions/dateend_filter/filterConditionProcess.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import("system.result");
-import("system.vars");
-import("Sql_lib");
-import("Util_lib");
-
-
-var subSelect = new SqlBuilder()
-    .select("max(CAMPAIGNSTEP.DATE_END)")
-    .from("CAMPAIGNSTEP")
-    .where("CAMPAIGNSTEP.CAMPAIGN_ID = CAMPAIGN.CAMPAIGNID")
-    .toString();
-
-subSelect = "(" + subSelect + ")";
-
-var condition = StringUtils.replaceAll(vars.get("$local.condition"), vars.get("$local.columnPlaceholder"), subSelect);
-
-result.object(condition);
diff --git a/entity/Campaign_entity/recordcontainers/db/filterextensions/datestart_filter/filterConditionProcess.js b/entity/Campaign_entity/recordcontainers/db/filterextensions/datestart_filter/filterConditionProcess.js
deleted file mode 100644
index 2d15b9e58f29554efe52a565d2033e5ba2f448ab..0000000000000000000000000000000000000000
--- a/entity/Campaign_entity/recordcontainers/db/filterextensions/datestart_filter/filterConditionProcess.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import("system.result");
-import("system.vars");
-import("Sql_lib");
-import("Util_lib");
-
-
-var subSelect = new SqlBuilder()
-    .select("min(CAMPAIGNSTEP.DATE_START)")
-    .from("CAMPAIGNSTEP")
-    .where("CAMPAIGNSTEP.CAMPAIGN_ID = CAMPAIGN.CAMPAIGNID")
-    .toString();
-
-subSelect = "(" + subSelect + ")";
-
-var condition = StringUtils.replaceAll(vars.get("$local.condition"), vars.get("$local.columnPlaceholder"), subSelect);
-
-result.object(condition);
diff --git a/entity/Campaign_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js b/entity/Campaign_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js
deleted file mode 100644
index 5a2fdfdb69a4f0e0b4e752d9bb6cfff63e45f76e..0000000000000000000000000000000000000000
--- a/entity/Campaign_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import("Favorites_lib");
-import("system.result");
-import("Sql_lib");
-
-var favoFilterCond = newWhere();
-var rowIds = FavoritesUtil.getRowIdsOfFavoriteGroup();
-
-for(i = 0; i < rowIds.length; i++)
-    favoFilterCond.or("CAMPAIGN.CAMPAIGNID", rowIds[i], SqlBuilder.EQUAL());
-
-result.string(favoFilterCond.toString());
\ No newline at end of file
diff --git a/entity/Campaign_entity/recordcontainers/db/filterextensions/favorite_filter/filterValuesProcess.js b/entity/Campaign_entity/recordcontainers/db/filterextensions/favorite_filter/filterValuesProcess.js
deleted file mode 100644
index 419128ca73fe597afc7ca4aeed50b28e610206ec..0000000000000000000000000000000000000000
--- a/entity/Campaign_entity/recordcontainers/db/filterextensions/favorite_filter/filterValuesProcess.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import("Context_lib");
-import("system.result");
-import("Favorites_lib");
-
-result.object(FavoritesUtil.getUserFavoriteGroupsByContext(ContextUtils.getCurrentContextId()));
\ No newline at end of file
diff --git a/entity/Campaign_entity/recordcontainers/db/filterextensions/member_filter/filterConditionProcess.js b/entity/Campaign_entity/recordcontainers/db/filterextensions/member_filter/filterConditionProcess.js
deleted file mode 100644
index 48c84a8dcbb02d59429f6b681c2186b3c1767b6b..0000000000000000000000000000000000000000
--- a/entity/Campaign_entity/recordcontainers/db/filterextensions/member_filter/filterConditionProcess.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import("system.result");
-import("system.vars");
-import("Sql_lib");
-import("Util_lib");
-
-
-var valueSubSelect = "(select CONTACT_ID from OBJECTMEMBER where OBJECTMEMBER.OBJECT_ROWID = CAMPAIGN.CAMPAIGNID)";
-var countSubSelect = "(select count(*) from OBJECTMEMBER where OBJECTMEMBER.OBJECT_ROWID = CAMPAIGN.CAMPAIGNID)";
-var condition = "";
-
-switch(vars.get("$local.comparison")) {
-    case "ISNOTNULL":
-        condition = countSubSelect + " > 0";
-        break;
-    case "ISNULL":
-        condition = countSubSelect + " = 0";
-        break;
-    case "NOT_EQUAL":
-        condition = vars.get("$local.value") + " not in " + valueSubSelect;
-        break;
-    case "EQUAL":
-        condition = vars.get("$local.value") + " in " + valueSubSelect;
-    break;
-}
-
-result.object(condition);
diff --git a/entity/Campaign_entity/recordcontainers/db/filterextensions/member_filter/filterValuesProcess.js b/entity/Campaign_entity/recordcontainers/db/filterextensions/member_filter/filterValuesProcess.js
deleted file mode 100644
index 569b13dcd324261da56d6e462a80f7b0a718c1df..0000000000000000000000000000000000000000
--- a/entity/Campaign_entity/recordcontainers/db/filterextensions/member_filter/filterValuesProcess.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import("system.result");
-import("Sql_lib");
-import("Person_lib");
-
-
-var query = new SqlBuilder()
-    .select("OBJECTMEMBER.CONTACT_ID, (" + PersUtils.getResolvingDisplaySubSql("OBJECTMEMBER.CONTACT_ID") + ") as C")
-    .from("OBJECTMEMBER")
-    .join("CAMPAIGN", "OBJECTMEMBER.OBJECT_ROWID = CAMPAIGN.CAMPAIGNID")
-    .join("CONTACT", "OBJECTMEMBER.CONTACT_ID = CONTACT.CONTACTID")
-    ;
-    
-result.object(query.table());
\ No newline at end of file
diff --git a/entity/Campaign_entity/recordcontainers/db/filterextensions/participant_filter/filterConditionProcess.js b/entity/Campaign_entity/recordcontainers/db/filterextensions/participant_filter/filterConditionProcess.js
deleted file mode 100644
index be23e1087b366a1211fadd6672a3ac0a0e9de033..0000000000000000000000000000000000000000
--- a/entity/Campaign_entity/recordcontainers/db/filterextensions/participant_filter/filterConditionProcess.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import("system.result");
-import("system.vars");
-import("Sql_lib");
-import("Util_lib");
-
-
-var valueSubSelect = "(select CONTACT_ID from CAMPAIGNPARTICIPANT where CAMPAIGNPARTICIPANT.CAMPAIGN_ID = CAMPAIGN.CAMPAIGNID)";
-var countSubSelect = "(select count(*) from CAMPAIGNPARTICIPANT where CAMPAIGNPARTICIPANT.CAMPAIGN_ID = CAMPAIGN.CAMPAIGNID)";
-var condition = "";
-
-switch(vars.get("$local.comparison")) {
-    case "ISNOTNULL":
-        condition = countSubSelect + " > 0";
-        break;
-    case "ISNULL":
-        condition = countSubSelect + " = 0";
-        break;
-    case "NOT_EQUAL":
-        condition = vars.get("$local.value") + " not in " + valueSubSelect;
-        break;
-    case "EQUAL":
-        condition = vars.get("$local.value") + " in " + valueSubSelect;
-    break;
-}
-
-result.object(condition);
diff --git a/entity/Campaign_entity/recordcontainers/db/filterextensions/participant_filter/filterValuesProcess.js b/entity/Campaign_entity/recordcontainers/db/filterextensions/participant_filter/filterValuesProcess.js
deleted file mode 100644
index 0ff2d9c975bfceec9ad15b02e8b0a921abf3081b..0000000000000000000000000000000000000000
--- a/entity/Campaign_entity/recordcontainers/db/filterextensions/participant_filter/filterValuesProcess.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import("system.result");
-import("Sql_lib");
-import("Person_lib");
-
-
-var contactDisplaySelect = "case when CONTACT.PERSON_ID is null"
-                            + " then (select ORGANISATION.NAME FROM ORGANISATION join CONTACT on CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID where CONTACT.CONTACTID = CAMPAIGNPARTICIPANT.CONTACT_ID)"
-                            + " else (" + PersUtils.getResolvingDisplaySubSql("CAMPAIGNPARTICIPANT.CONTACT_ID") + ")"
-                            + " end";
-var query = new SqlBuilder()
-    .select("distinct CAMPAIGNPARTICIPANT.CONTACT_ID, (" + contactDisplaySelect + ") as C")
-    .from("CAMPAIGNPARTICIPANT")
-    .join("CONTACT on CAMPAIGNPARTICIPANT.CONTACT_ID = CONTACT.CONTACTID", "", "", "inner")
-    ;
-    
-result.object(query.table());
\ No newline at end of file
diff --git a/entity/Campaign_entity/recordcontainers/db/fromClauseProcess.js b/entity/Campaign_entity/recordcontainers/db/fromClauseProcess.js
deleted file mode 100644
index 5eec4c678e0303f56f160d22534f7c2fbe2bd302..0000000000000000000000000000000000000000
--- a/entity/Campaign_entity/recordcontainers/db/fromClauseProcess.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import("system.result");
-import("system.neon");
-import("system.vars");
-
-
-var recordState = vars.get("$sys.recordstate");
-var res = "CAMPAIGN";
-
-if (recordState != neon.OPERATINGSTATE_NEW && recordState != neon.OPERATINGSTATE_EDIT) {
-    var subSelectDateStart = "(select min(DATE_START) as STEPDATESTART_ALIAS, CAMPAIGN_ID from CAMPAIGNSTEP group by CAMPAIGN_ID) as STEPDATESTART_TABLEALIAS";
-    var subSelectDateEnd = "(select max(DATE_END) as STEPDATEEND_ALIAS, CAMPAIGN_ID from CAMPAIGNSTEP group by CAMPAIGN_ID) as STEPDATEEND_TABLEALIAS";
-         
-    res += ", " + subSelectDateStart + ", " + subSelectDateEnd;
-}
-
-result.string(res);
diff --git a/entity/Campaign_entity/recordcontainers/db/onDBInsert.js b/entity/Campaign_entity/recordcontainers/db/onDBInsert.js
index 3c0830aabedeb8f5a85b0d97704ef810d06b9002..ecc62088cac7fd1e7ee7b449554330682ae3a4e2 100644
--- a/entity/Campaign_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/Campaign_entity/recordcontainers/db/onDBInsert.js
@@ -12,8 +12,8 @@ import("Campaign_lib");
 var rowdata = vars.get("$local.rowdata");
 var campaignId = vars.get("$local.uid");
 
-if (vars.get("$param.originalCampaignIdCopy_param"))
-    CampaignUtils.copyCampaignSteps(vars.getString("$param.originalCampaignIdCopy_param"), campaignId);
+if (vars.get("$param.Copy_param"))
+    CampaignUtils.copyCampaignSteps(JSON.parse(vars.get("$param.Copy_param"))["CAMPAIGNID"], campaignId);
 else
 {
     var threeWeeks = datetime.ONE_WEEK * 3;
diff --git a/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js b/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..0c4da8fb72e3474ab6980b621c9139a560e21b09
--- /dev/null
+++ b/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js
@@ -0,0 +1,6 @@
+import("Context_lib");
+import("system.result");
+import("KeywordRegistry_basic");
+
+var activArr = [$KeywordRegistry.campaignState$planning(), $KeywordRegistry.campaignState$approved()];
+result.string(ContextUtils.buildActiveCaseWhen(activArr, "CAMPAIGN.STATUS"));
\ No newline at end of file
diff --git a/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js b/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js
index fa780bd3a980c26cd0931459951df89c31b7d4a3..dd188aaf77933759617acc567c9f1ba0cb1313dc 100644
--- a/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js
+++ b/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js
@@ -1,6 +1,11 @@
+import("Context_lib");
+import("Sql_lib");
 import("system.vars");
 import("system.result");
+//!LibFunction
+var cond = newWhere(null, newSelect("ACTIVITYLINK.OBJECT_ROWID").from("ACTIVITYLINK")
+    .join("ACTIVITY", newWhere("ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID")
+        .and("ACTIVITYLINK.OBJECT_TYPE", ContextUtils.getCurrentContextId()))
+    .where(vars.get("$local.condition")), SqlBuilder.EXISTS());
 
-var from = "ACTIVITYLINK join ACTIVITY on ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID and ACTIVITYLINK.OBJECT_TYPE = 'Campaign'";
-
-result.string("CAMPAIGNID in (select ACTIVITYLINK.OBJECT_ROWID from " + from + " where " + vars.get("$local.condition")+ ")");
\ No newline at end of file
+result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/date_end.value/expression.js b/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/date_end.value/expression.js
index 510c61f479969118c5e33f8c21cf3861579d0f64..26ead684de6fdd3d812a023a30963789747605ab 100644
--- a/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/date_end.value/expression.js
+++ b/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/date_end.value/expression.js
@@ -1,12 +1,4 @@
-import("system.neon");
 import("system.result");
-import("system.vars");
+import("Sql_lib");
 
-
-var recordState = vars.get("$sys.recordstate");
-
-if (recordState != neon.OPERATINGSTATE_NEW && recordState != neon.OPERATINGSTATE_EDIT) {
-    result.string("STEPDATEEND_ALIAS");
-} else {
-    result.string("0");
-}
+result.string(newSelect("max(CAMPAIGNSTEP.DATE_END)").from("CAMPAIGNSTEP").where("CAMPAIGNSTEP.CAMPAIGN_ID = CAMPAIGN.CAMPAIGNID").toString());
\ No newline at end of file
diff --git a/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/date_start.value/expression.js b/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/date_start.value/expression.js
index 77d1b3dde659a3522bd8f4f6d682a091a8a13dc0..4659e92e558e26b8a60f3f37622a934793ac4f21 100644
--- a/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/date_start.value/expression.js
+++ b/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/date_start.value/expression.js
@@ -1,12 +1,5 @@
 import("system.neon");
 import("system.result");
-import("system.vars");
+import("Sql_lib");
 
-
-var recordState = vars.get("$sys.recordstate");
-
-if (recordState != neon.OPERATINGSTATE_NEW && recordState != neon.OPERATINGSTATE_EDIT) {
-    result.string("STEPDATESTART_ALIAS");
-} else {
-    result.string("0");
-}
\ No newline at end of file
+result.string(newSelect("min(CAMPAIGNSTEP.DATE_START)").from("CAMPAIGNSTEP").where("CAMPAIGNSTEP.CAMPAIGN_ID = CAMPAIGN.CAMPAIGNID").toString());
\ No newline at end of file
diff --git a/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/employee_contact_id.displayvalue/expression.js b/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/employee_contact_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..f0023d115c5071a9e86a99a3f9624b169018f820
--- /dev/null
+++ b/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/employee_contact_id.displayvalue/expression.js
@@ -0,0 +1,3 @@
+import("Person_lib");
+import("system.result");
+result.string(PersUtils.getResolvingDisplaySubSql("CAMPAIGN.EMPLOYEE_CONTACT_ID"));
\ No newline at end of file
diff --git a/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
index f67e50c289fe9587d704ded87665c5abce6509b5..d5024a1449de08a93db1ac0d8d642c2b1e5a4ceb 100644
--- a/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
+++ b/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js
@@ -1,6 +1,6 @@
-import("system.result");
-import("Keyword_lib");
 import("KeywordRegistry_basic");
+import("Keyword_lib");
+import("system.result");
 
 var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.campaignState(), "CAMPAIGN.STATUS");
 result.string(sql);
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/recordcontainers/jdito/onUpdate.js b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onUpdate.js
index 43a6304543f7b01dab728e1774e8d6f9e06980e0..ea803f184c537724212607c29cfa59f9342de57c 100644
--- a/entity/ClassificationAdmin_entity/recordcontainers/jdito/onUpdate.js
+++ b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onUpdate.js
@@ -178,7 +178,7 @@ function _update()
             }
         }
 
-        cond = newWhereIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID = '" + text.decodeMS(uid)[1] + "'");
+        cond = newWhereIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", text.decodeMS(uid)[1]);
         columns.push("SCORETYPE");
         values.push(vars.get("$field.CLASSIFICATIONTYPEIDDISPLAYVALUE"));
         cond.updateData(true, table, columns, null, values);
@@ -195,13 +195,13 @@ function _update()
                                                 .where("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID", id)
                                                 .cell();
 
-        cond = newWhereIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = '" + classificationGroupId + "'");
+        cond = newWhereIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", classificationGroupId);
 
         var groupTable = "CLASSIFICATIONGROUP";
         var groupColumns = ["SORTING", "TITLE"];
         var groupName = rowdata["CLASSIFICATIONGROUP.value"] == classificationGroupId ? rowdata["CLASSIFICATIONGROUP.displayValue"] : rowdata["CLASSIFICATIONGROUP.value"];
         var groupValues = [vars.get("$field.SORTING"), groupName];
-        var groupCond = newWhereIfSet("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID = '" + classificationGroupId + "'");
+        var groupCond = newWhereIfSet("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID", classificationGroupId);
         groupCond.updateData(true, groupTable, groupColumns, null, groupValues);
     }
 }
\ No newline at end of file
diff --git a/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod b/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod
index fdf4e999952bbfc3804623512cf5fe978d900612..39144723e62796ee2c7e4b433e0400cd47bdb623 100644
--- a/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod
+++ b/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod
@@ -40,6 +40,12 @@
     <entityProvider>
       <name>ClassificationGradings</name>
       <documentation>%aditoprj%/entity/ClassificationGrading_entity/entityfields/classificationgradings/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>ClassificationTypeId_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>e0c6b86e-dcc1-43e1-9581-2b10c5c3d0cd</name>
@@ -48,13 +54,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ClassificationTypeId_param</name>
-          <valueProcess>%aditoprj%/entity/ClassificationGrading_entity/entityfields/classificationgradings/children/classificationtypeid_param/valueProcess.js</valueProcess>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/ClassificationGrading_entity/entityfields/classificationgradings/children/classificationtypeid_param/valueProcess.js b/entity/ClassificationGrading_entity/entityfields/classificationgradings/children/classificationtypeid_param/valueProcess.js
deleted file mode 100644
index b11d099579d9bf35111e31b13a41336731c28540..0000000000000000000000000000000000000000
--- a/entity/ClassificationGrading_entity/entityfields/classificationgradings/children/classificationtypeid_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.vars");
-import("system.result");
-
-result.string(vars.get("$field.CLASSIFICATIONTYPEID"));
\ No newline at end of file
diff --git a/entity/ClassificationGroup_entity/ClassificationGroup_entity.aod b/entity/ClassificationGroup_entity/ClassificationGroup_entity.aod
index 546a64d948001e538ed6a971478016d6ae568b0f..c37f1f7de65d9557283ce8e53f1e721e11d4a6c1 100644
--- a/entity/ClassificationGroup_entity/ClassificationGroup_entity.aod
+++ b/entity/ClassificationGroup_entity/ClassificationGroup_entity.aod
@@ -30,17 +30,17 @@
     </entityConsumer>
     <entityConsumer>
       <name>ClassificationGradings</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>ClassificationGrading_entity</entityName>
-        <fieldName>ClassificationGradings</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ClassificationTypeId_param</name>
           <valueProcess>%aditoprj%/entity/ClassificationGroup_entity/entityfields/classificationgradings/children/classificationtypeid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>ClassificationGrading_entity</entityName>
+        <fieldName>ClassificationGradings</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>SORTING</name>
diff --git a/entity/ClassificationGroup_entity/recordcontainers/db/conditionProcess.js b/entity/ClassificationGroup_entity/recordcontainers/db/conditionProcess.js
index 2d43dba815cd2dea8e2a5eeb8335aa36c8e3746c..e0b2732445777e17d096a1122bde6538fa369a47 100644
--- a/entity/ClassificationGroup_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/ClassificationGroup_entity/recordcontainers/db/conditionProcess.js
@@ -16,5 +16,4 @@ if (objectType)
                                                             .from("CLASSIFICATIONTYPE")
                                                             .where("CLASSIFICATIONTYPE.OBJECT_TYPE", objectType), SqlBuilder.IN());
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/ClassificationScore_entity/recordcontainers/db/conditionProcess.js b/entity/ClassificationScore_entity/recordcontainers/db/conditionProcess.js
index 10dbbac6efbdb80f576dab966afa19ede6ffb645..2cc442f6f758f5c33128f5cd38ba37b44c2c00f8 100644
--- a/entity/ClassificationScore_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/ClassificationScore_entity/recordcontainers/db/conditionProcess.js
@@ -3,5 +3,4 @@ import("Sql_lib");
 import("system.db");
 import("system.result");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(newWhereIfSet("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID", "$param.ClassificationTypeId_param").toString());
\ No newline at end of file
diff --git a/entity/ClassificationType_entity/ClassificationType_entity.aod b/entity/ClassificationType_entity/ClassificationType_entity.aod
index faf8305ab8185d249fd38216f9954fd7d857dcb9..2434fa0a53dd70bbd17eb270b3ce3fa7bc92f247 100644
--- a/entity/ClassificationType_entity/ClassificationType_entity.aod
+++ b/entity/ClassificationType_entity/ClassificationType_entity.aod
@@ -40,11 +40,6 @@
     <entityConsumer>
       <name>ClassificationScores</name>
       <refreshParent v="true" />
-      <dependency>
-        <name>dependency</name>
-        <entityName>ClassificationScore_entity</entityName>
-        <fieldName>ClassificationScores</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ClassificationTypeId_param</name>
@@ -55,6 +50,11 @@
           <valueProcess>%aditoprj%/entity/ClassificationType_entity/entityfields/classificationscores/children/classificationgroup_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>ClassificationScore_entity</entityName>
+        <fieldName>ClassificationScores</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>infoField</name>
diff --git a/entity/Classification_entity/Classification_entity.aod b/entity/Classification_entity/Classification_entity.aod
index 0ffc7c029876ca37340aa50f5a4503ca4e0c8d1e..61c825296a1680b522cae9a883f7a6a38c5fb226 100644
--- a/entity/Classification_entity/Classification_entity.aod
+++ b/entity/Classification_entity/Classification_entity.aod
@@ -88,11 +88,6 @@
     </entityField>
     <entityConsumer>
       <name>ClassificationScores</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>ClassificationScore_entity</entityName>
-        <fieldName>ClassificationScores</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ClassificationGroup_param</name>
@@ -107,6 +102,11 @@
           <valueProcess>%aditoprj%/entity/Classification_entity/entityfields/classificationscores/children/classificationtype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>ClassificationScore_entity</entityName>
+        <fieldName>ClassificationScores</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>CLASSIFICATIONTYPE</name>
@@ -130,17 +130,17 @@
     </entityField>
     <entityConsumer>
       <name>KeywordClassificationTypes</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Classification_entity/entityfields/keywordclassificationtypes/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>SCORETYPE</name>
diff --git a/entity/Classification_entity/recordcontainers/jdito/contentProcess.js b/entity/Classification_entity/recordcontainers/jdito/contentProcess.js
index 78879bee92567449a5ca43c6ef616d91d236a62f..9af7e2ab58bfb43d0f1fcbfa4c0b35f42ad13c23 100644
--- a/entity/Classification_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Classification_entity/recordcontainers/jdito/contentProcess.js
@@ -161,5 +161,12 @@ function _updateScore()
     var values = [calculatedClassification];
 
     if(storedClassification[1] != undefined && calculatedClassification != storedClassification[1]) //Update the stored classification if the freshly calculated one differs
-        newWhere("CLASSIFICATIONSTORAGE.CLASSIFICATIONSTORAGEID", storedClassification[0]).updateData(true, table, columns, null, values);
+    {
+    newWhere("CLASSIFICATIONSTORAGE.CLASSIFICATIONSTORAGEID", storedClassification[0]).updateData(true, table, columns, null, values);
+    }
+    else if(storedClassification[1] == undefined) //insert if no classificationstorage exists yet
+    {
+        db.insertData(table, ["CLASSIFICATIONSTORAGEID", "CLASSIFICATIONVALUE", "OBJECT_ROWID", "OBJECT_TYPE"], null, 
+                                [util.getNewUUID(), calculatedClassification, objectRowIdParam, objectTypeParam])
+    }
 }
\ No newline at end of file
diff --git a/entity/CommRestriction_Entity/CommRestriction_Entity.aod b/entity/CommRestriction_Entity/CommRestriction_Entity.aod
index 102c450de9e00d97a4f3e8329bc4d5b528787b1f..60d0a7e5c5161c167310bb868be2f7e3aa4fcdd8 100644
--- a/entity/CommRestriction_Entity/CommRestriction_Entity.aod
+++ b/entity/CommRestriction_Entity/CommRestriction_Entity.aod
@@ -55,11 +55,6 @@
     </entityConsumer>
     <entityConsumer>
       <name>CommRestrictionMedium</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -71,6 +66,11 @@
           <valueProcess>%aditoprj%/entity/CommRestriction_Entity/entityfields/commrestrictionmedium/children/excludedkeyidssubquery_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>CommRestrictions</name>
@@ -103,17 +103,17 @@
     </entityField>
     <entityConsumer>
       <name>MediumKeywordAttribute</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordAttribute_entity</entityName>
-        <fieldName>SpecificContainerKeyword</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/CommRestriction_Entity/entityfields/mediumkeywordattribute/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordAttribute_entity</entityName>
+        <fieldName>SpecificContainerKeyword</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/CommRestriction_Entity/recordcontainers/db/conditionProcess.js b/entity/CommRestriction_Entity/recordcontainers/db/conditionProcess.js
index 4a714c57054e0ee4bd91998185d6157db848cb7f..035d01b5f3e1adb6f2dc0f6a9b1a46153cb5b327 100644
--- a/entity/CommRestriction_Entity/recordcontainers/db/conditionProcess.js
+++ b/entity/CommRestriction_Entity/recordcontainers/db/conditionProcess.js
@@ -4,5 +4,4 @@ import("Sql_lib");
 
 var cond = newWhereIfSet("COMMRESTRICTION.CONTACT_ID", "$param.ContactId_param");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Communication_entity/Communication_entity.aod b/entity/Communication_entity/Communication_entity.aod
index dbc7bf89b31da1c696fa6870dea497360ae54ea7..f931c15531a870c0828c7706d110e39542b74bbd 100644
--- a/entity/Communication_entity/Communication_entity.aod
+++ b/entity/Communication_entity/Communication_entity.aod
@@ -13,6 +13,7 @@
       <title>${COMM_ADDRESS}</title>
       <contentTypeProcess>%aditoprj%/entity/Communication_entity/entityfields/addr/contentTypeProcess.js</contentTypeProcess>
       <mandatory v="true" />
+      <titleProcess>%aditoprj%/entity/Communication_entity/entityfields/addr/titleProcess.js</titleProcess>
       <valueProcess>%aditoprj%/entity/Communication_entity/entityfields/addr/valueProcess.js</valueProcess>
       <onValidation>%aditoprj%/entity/Communication_entity/entityfields/addr/onValidation.js</onValidation>
     </entityField>
@@ -62,6 +63,27 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
       <name>AllCommunications</name>
       <documentation>%aditoprj%/entity/Communication_entity/entityfields/allcommunications/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
+      <children>
+        <entityParameter>
+          <name>CommCategory_param</name>
+          <expose v="true" />
+          <description>TODO: expose auf false. aktuell wird der Code nicht ausgeführt, wenn Expose false ist.</description>
+        </entityParameter>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <expose v="true" />
+          <description>This parameter is used for specifing a related "CONTACTID" to a COMMUNICATION-entry. 
+Usually this is used for filtering COMMUNICATION-entries by a specified contact or creating a new entry that is related to a contact.</description>
+        </entityParameter>
+        <entityParameter>
+          <name>Address_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>AdditionalContactIds_param</name>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>070b2457-3766-4c8a-b43f-a2bf7c9ef638</name>
@@ -88,10 +110,16 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
+    </entityProvider>
+    <entityProvider>
+      <name>PhoneCommunications</name>
+      <documentation>%aditoprj%/entity/Communication_entity/entityfields/phonecommunications/documentation.adoc</documentation>
+      <recordContainer>db</recordContainer>
       <children>
         <entityParameter>
           <name>CommCategory_param</name>
-          <expose v="true" />
+          <valueProcess>%aditoprj%/entity/Communication_entity/entityfields/phonecommunications/children/commcategory_param/valueProcess.js</valueProcess>
+          <expose v="false" />
           <description>TODO: expose auf false. aktuell wird der Code nicht ausgeführt, wenn Expose false ist.</description>
         </entityParameter>
         <entityParameter>
@@ -102,18 +130,14 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
         </entityParameter>
         <entityParameter>
           <name>Address_param</name>
-          <expose v="false" />
+          <expose v="true" />
+          <mandatory v="false" />
         </entityParameter>
         <entityParameter>
           <name>AdditionalContactIds_param</name>
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityProvider>
-    <entityProvider>
-      <name>PhoneCommunications</name>
-      <documentation>%aditoprj%/entity/Communication_entity/entityfields/phonecommunications/documentation.adoc</documentation>
-      <recordContainer>db</recordContainer>
       <dependencies>
         <entityDependency>
           <name>7382242a-aa18-4a31-ab77-69a79f2b97b8</name>
@@ -128,10 +152,16 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
+    </entityProvider>
+    <entityProvider>
+      <name>EmailCommunications</name>
+      <documentation>%aditoprj%/entity/Communication_entity/entityfields/emailcommunications/documentation.adoc</documentation>
+      <recordContainer>db</recordContainer>
       <children>
         <entityParameter>
           <name>CommCategory_param</name>
-          <valueProcess>%aditoprj%/entity/Communication_entity/entityfields/phonecommunications/children/commcategory_param/valueProcess.js</valueProcess>
+          <title></title>
+          <valueProcess>%aditoprj%/entity/Communication_entity/entityfields/emailcommunications/children/commcategory_param/valueProcess.js</valueProcess>
           <expose v="false" />
           <description>TODO: expose auf false. aktuell wird der Code nicht ausgeführt, wenn Expose false ist.</description>
         </entityParameter>
@@ -143,19 +173,13 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
         </entityParameter>
         <entityParameter>
           <name>Address_param</name>
-          <expose v="true" />
-          <mandatory v="false" />
+          <expose v="false" />
         </entityParameter>
         <entityParameter>
           <name>AdditionalContactIds_param</name>
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityProvider>
-    <entityProvider>
-      <name>EmailCommunications</name>
-      <documentation>%aditoprj%/entity/Communication_entity/entityfields/emailcommunications/documentation.adoc</documentation>
-      <recordContainer>db</recordContainer>
       <dependencies>
         <entityDependency>
           <name>ecfbf518-fe92-4661-8ebe-e2d3c8d259e1</name>
@@ -182,29 +206,6 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>CommCategory_param</name>
-          <title></title>
-          <valueProcess>%aditoprj%/entity/Communication_entity/entityfields/emailcommunications/children/commcategory_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-          <description>TODO: expose auf false. aktuell wird der Code nicht ausgeführt, wenn Expose false ist.</description>
-        </entityParameter>
-        <entityParameter>
-          <name>ContactId_param</name>
-          <expose v="true" />
-          <description>This parameter is used for specifing a related "CONTACTID" to a COMMUNICATION-entry. 
-Usually this is used for filtering COMMUNICATION-entries by a specified contact or creating a new entry that is related to a contact.</description>
-        </entityParameter>
-        <entityParameter>
-          <name>Address_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>AdditionalContactIds_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>CommCategory_param</name>
@@ -218,11 +219,6 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
     </entityParameter>
     <entityConsumer>
       <name>KeywordMediums</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -230,6 +226,11 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>USER_NEW</name>
diff --git a/entity/Communication_entity/entityfields/addr/contentTypeProcess.js b/entity/Communication_entity/entityfields/addr/contentTypeProcess.js
index 25141c53776680b9c9c714926c752fda5419deaa..249c9ed0275f8f6dc97e9986016da4b85d48501f 100644
--- a/entity/Communication_entity/entityfields/addr/contentTypeProcess.js
+++ b/entity/Communication_entity/entityfields/addr/contentTypeProcess.js
@@ -4,7 +4,6 @@ import("system.vars");
 import("system.result");
 import("system.neon");
 
-//TODO: add constants for contentTypes #1022547
 var medium = vars.get("$field.MEDIUM_ID");
 var contentType;
 if (medium)
diff --git a/entity/Communication_entity/entityfields/addr/titleProcess.js b/entity/Communication_entity/entityfields/addr/titleProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8bacbaa9a703edcdb8e4ade535013cde65ea17b8
--- /dev/null
+++ b/entity/Communication_entity/entityfields/addr/titleProcess.js
@@ -0,0 +1,10 @@
+import("system.translate");
+import("system.result");
+import("KeywordRegistry_basic");
+import("Keyword_lib");
+import("system.vars");
+
+var commMedium = vars.get("$field.MEDIUM_ID");
+var keywordAttributes = KeywordUtils.getAttributeRelationsByKey(commMedium, $KeywordRegistry.communicationMedium());
+if (keywordAttributes && keywordAttributes.placeholderTitle)
+    result.string(translate.text(keywordAttributes.placeholderTitle));
\ No newline at end of file
diff --git a/entity/Communication_entity/recordcontainers/db/conditionProcess.js b/entity/Communication_entity/recordcontainers/db/conditionProcess.js
index 39f447f1fe79e21b1235025d2c5859cee0a33c23..ec18465d42f9bcc87f5b557653b021a94438c14c 100644
--- a/entity/Communication_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Communication_entity/recordcontainers/db/conditionProcess.js
@@ -13,5 +13,4 @@ if (vars.getString("$param.CommMediumIds_param"))
     var mediumIds = JSON.parse(vars.getString("$param.CommMediumIds_param"));
     cond.andIfSet("COMMUNICATION.MEDIUM_ID", mediumIds, SqlBuilder.IN());
 }
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Communication_entity/recordcontainers/db/fromClauseProcess.js b/entity/Communication_entity/recordcontainers/db/fromClauseProcess.js
index 611aa890f7584912618700b429c0a1415e50cb6d..bafe6c4d6176c505dd8e202d89ae7544d0bd4bb9 100644
--- a/entity/Communication_entity/recordcontainers/db/fromClauseProcess.js
+++ b/entity/Communication_entity/recordcontainers/db/fromClauseProcess.js
@@ -1,8 +1,10 @@
-import("system.logging");
 import("Sql_lib");
 import("system.result");
 import("KeywordRegistry_basic");
 
-result.string("COMMUNICATION " + new SqlBuilder().leftJoin("AB_KEYWORD_ENTRY", newWhere("COMMUNICATION.MEDIUM_ID = AB_KEYWORD_ENTRY.KEYID")
-                                                                .and("AB_KEYWORD_ENTRY.CONTAINER", $KeywordRegistry.communicationMedium()))
-                                                                .toString());
\ No newline at end of file
+result.string(new SqlBuilder()
+    .from("COMMUNICATION")
+    .leftJoin("AB_KEYWORD_ENTRY", newWhere("COMMUNICATION.MEDIUM_ID = AB_KEYWORD_ENTRY.KEYID")
+        .and("AB_KEYWORD_ENTRY.CONTAINER", $KeywordRegistry.communicationMedium()))
+    .toString()
+);
\ No newline at end of file
diff --git a/entity/Competition_entity/Competition_entity.aod b/entity/Competition_entity/Competition_entity.aod
index ac91f28ee4dbfaeaea563112aca8d9ae0bd288f3..50d4bcf30967f630f2a0bd4242e46559beeae68f 100644
--- a/entity/Competition_entity/Competition_entity.aod
+++ b/entity/Competition_entity/Competition_entity.aod
@@ -79,11 +79,6 @@
     </entityConsumer>
     <entityConsumer>
       <name>Organisations</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Organisation_entity</entityName>
-        <fieldName>WithAttribute</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AttributeId_param</name>
@@ -102,15 +97,15 @@
           <title></title>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Organisation_entity</entityName>
+        <fieldName>WithAttribute</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>KeywordWonLost</name>
       <selectionMode>MULTI</selectionMode>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -118,6 +113,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>PHASE</name>
@@ -127,11 +127,6 @@
     </entityField>
     <entityConsumer>
       <name>KeywordPricePolitics</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -139,14 +134,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordWeaknesses</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordWeaknesses</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -154,14 +149,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordStrenghts</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordStrenghts</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -169,14 +164,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordPhases</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordPhases</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -184,14 +179,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordStates</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordStates</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -199,15 +194,15 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Attributes</name>
       <state>DISABLED</state>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>AttributeRelations</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -222,6 +217,11 @@
           <valueProcess>%aditoprj%/entity/Competition_entity/entityfields/attributes/children/displaysimplename_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>AttributeRelations</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>IMAGE</name>
@@ -254,11 +254,6 @@
     </entityConsumer>
     <entityConsumer>
       <name>Objects</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Object_entity</entityName>
-        <fieldName>AllObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
@@ -267,18 +262,15 @@
           <mandatory v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Object_entity</entityName>
+        <fieldName>AllObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>Links</name>
       <recordContainer>db</recordContainer>
-      <dependencies>
-        <entityDependency>
-          <name>be977304-6623-42eb-a8bd-80ef43831204</name>
-          <entityName>Salesproject_entity</entityName>
-          <fieldName>Competitions</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -289,6 +281,14 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>be977304-6623-42eb-a8bd-80ef43831204</name>
+          <entityName>Salesproject_entity</entityName>
+          <fieldName>Competitions</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
@@ -374,10 +374,6 @@
           <name>PHASE.value</name>
           <recordfield>COMPETITION.PHASE</recordfield>
         </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>OBJECT_ROWID.displayValue</name>
-          <expression>%aditoprj%/entity/Competition_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js</expression>
-        </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>COMPETITIONID.value</name>
           <recordfield>COMPETITION.COMPETITIONID</recordfield>
diff --git a/entity/Competition_entity/entityfields/object_rowid/displayValueProcess.js b/entity/Competition_entity/entityfields/object_rowid/displayValueProcess.js
index 8b080bceea92c146a676b0f33cc7cb87d4e86b9d..95c4eea5367140dc2d81e470ba0607adf52f07c1 100644
--- a/entity/Competition_entity/entityfields/object_rowid/displayValueProcess.js
+++ b/entity/Competition_entity/entityfields/object_rowid/displayValueProcess.js
@@ -7,5 +7,5 @@ import("Context_lib");
 if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$field.OBJECT_ROWID")) {
     result.string("");
 } else if (vars.exists("$field.OBJECT_TYPE") && vars.get("$field.OBJECT_TYPE")) {
-    result.string(db.cell(ContextUtils.getNameSql(vars.get("$field.OBJECT_TYPE"), vars.get("$field.OBJECT_ROWID"))));
+    result.string(ContextUtils.getTitleByContext(vars.get("$field.OBJECT_TYPE"), vars.get("$field.OBJECT_ROWID")));
 }
\ No newline at end of file
diff --git a/entity/Competition_entity/recordcontainers/db/conditionProcess.js b/entity/Competition_entity/recordcontainers/db/conditionProcess.js
index 7fdde447ee0c40d4ad260e0392be5c9efe6e345b..79b1357d5be15475ab5c0ec0b2f3b95e8b42d12b 100644
--- a/entity/Competition_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Competition_entity/recordcontainers/db/conditionProcess.js
@@ -6,5 +6,4 @@ var cond = newWhere()
             .andIfSet("COMPETITION.OBJECT_ROWID", "$param.ObjectRowId_param")
             .andIfSet("COMPETITION.OBJECT_TYPE", "$param.ObjectType_param");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
diff --git a/entity/Competition_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js b/entity/Competition_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js
deleted file mode 100644
index 33554680cccd2c3d363443686457c41e0c1c5729..0000000000000000000000000000000000000000
--- a/entity/Competition_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.result");
-import("Context_lib");
-
-result.string(ContextUtils.getNameSubselectSql("OBJECT_TYPE", "OBJECT_ROWID"))
\ No newline at end of file
diff --git a/entity/Contact_entity/Contact_entity.aod b/entity/Contact_entity/Contact_entity.aod
index 41a386bd8dce1d009f4b1887e118adb79b9165cc..051d569c5b1e50b704fc389e793839d515280e2d 100644
--- a/entity/Contact_entity/Contact_entity.aod
+++ b/entity/Contact_entity/Contact_entity.aod
@@ -65,17 +65,17 @@
     </entityField>
     <entityConsumer>
       <name>Organisations</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Organisation_entity</entityName>
-        <fieldName>WithPersonIdFilter</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ExcludeOrganisationsByPersonId</name>
           <valueProcess>%aditoprj%/entity/Contact_entity/entityfields/organisations/children/excludeorganisationsbypersonid/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Organisation_entity</entityName>
+        <fieldName>WithPersonIdFilter</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>PersonId_param</name>
@@ -86,6 +86,12 @@
       <name>PersonRelated</name>
       <targetContextField>targetContext</targetContextField>
       <targetIdField>CONTACTID</targetIdField>
+      <children>
+        <entityParameter>
+          <name>OwnContactId_param</name>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>14975dad-907c-4f8c-bd39-243508ede721</name>
@@ -94,12 +100,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>OwnContactId_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityField>
       <name>ADDRESS_ID</name>
@@ -115,31 +115,31 @@
     </entityField>
     <entityConsumer>
       <name>Communications</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Communication_entity</entityName>
-        <fieldName>AllCommunications</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Contact_entity/entityfields/communications/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>ContactAddresses</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Address_entity</entityName>
-        <fieldName>ContactAddresses</fieldName>
+        <entityName>Communication_entity</entityName>
+        <fieldName>AllCommunications</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>ContactAddresses</name>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Contact_entity/entityfields/contactaddresses/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Address_entity</entityName>
+        <fieldName>ContactAddresses</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>LANGUAGE</name>
@@ -163,6 +163,13 @@
       <targetContextField>targetContext</targetContextField>
       <targetIdField>CONTACTID</targetIdField>
       <titlePlural>Other Contactroles</titlePlural>
+      <children>
+        <entityParameter>
+          <name>PersonId_param</name>
+          <valueProcess>%aditoprj%/entity/Contact_entity/entityfields/personscontactsexceptown/children/personid_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>34cc85f4-5555-4631-94fc-f3ad35b7ce7e</name>
@@ -171,13 +178,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>PersonId_param</name>
-          <valueProcess>%aditoprj%/entity/Contact_entity/entityfields/personscontactsexceptown/children/personid_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>OwnContactId_param</name>
@@ -198,17 +198,17 @@
     </entityField>
     <entityConsumer>
       <name>KeywordContactStates</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Contact_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>LanguageKey_param</name>
diff --git a/entity/Contact_entity/recordcontainers/db/conditionProcess.js b/entity/Contact_entity/recordcontainers/db/conditionProcess.js
index 6f1b0fc9fbbbe71f274f50189be2dfb360c306f2..80af2eaae28bdb8c9e2f0c707256a507acd83d67 100644
--- a/entity/Contact_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Contact_entity/recordcontainers/db/conditionProcess.js
@@ -7,5 +7,4 @@ var cond = newWhere()
             .andIfSet("CONTACT.CONTACTID", "$param.OwnContactId_param", SqlBuilder.NOT_EQUAL())
             .andIfSet("CONTACT.PERSON_ID", "$param.PersonId_param");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Context_entity/Context_entity.aod b/entity/Context_entity/Context_entity.aod
index c82aab16b52506b32800ef2f9635b260fffa3d6b..8e8f8d01c34ea6b4acb2208b165bd6bcc58e60a5 100644
--- a/entity/Context_entity/Context_entity.aod
+++ b/entity/Context_entity/Context_entity.aod
@@ -30,6 +30,16 @@
     </entityField>
     <entityProvider>
       <name>Context</name>
+      <children>
+        <entityParameter>
+          <name>InvertBlacklist_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>Blacklist_param</name>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>dab09827-2eeb-403d-a070-ba805d2640ee</name>
@@ -56,16 +66,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>InvertBlacklist_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>Blacklist_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>Blacklist_param</name>
@@ -74,6 +74,13 @@
     </entityParameter>
     <entityProvider>
       <name>ActivityLinkable</name>
+      <children>
+        <entityParameter>
+          <name>Blacklist_param</name>
+          <valueProcess>%aditoprj%/entity/Context_entity/entityfields/activitylinkable/children/blacklist_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>de50f67e-5ed0-46aa-b007-8c086cf5fea5</name>
@@ -82,16 +89,16 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
+    </entityProvider>
+    <entityProvider>
+      <name>TaskLinkable</name>
       <children>
         <entityParameter>
           <name>Blacklist_param</name>
-          <valueProcess>%aditoprj%/entity/Context_entity/entityfields/activitylinkable/children/blacklist_param/valueProcess.js</valueProcess>
+          <valueProcess>%aditoprj%/entity/Context_entity/entityfields/tasklinkable/children/blacklist_param/valueProcess.js</valueProcess>
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityProvider>
-    <entityProvider>
-      <name>TaskLinkable</name>
       <dependencies>
         <entityDependency>
           <name>ff8925da-b69a-46dd-8fe2-d6707da8808e</name>
@@ -100,19 +107,7 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>Blacklist_param</name>
-          <valueProcess>%aditoprj%/entity/Context_entity/entityfields/tasklinkable/children/blacklist_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
-    <entityParameter>
-      <name>GetAllContexts_param</name>
-      <expose v="true" />
-      <description>PARAMETER</description>
-    </entityParameter>
     <entityParameter>
       <name>InvertBlacklist_param</name>
       <expose v="true" />
@@ -162,6 +157,17 @@
     </entityProvider>
     <entityProvider>
       <name>ContextTemplatePlaceOfUse</name>
+      <children>
+        <entityParameter>
+          <name>InvertBlacklist_param</name>
+          <valueProcess>%aditoprj%/entity/Context_entity/entityfields/contexttemplateplaceofuse/children/invertblacklist_param/valueProcess.js</valueProcess>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>Blacklist_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>423a7a33-02f4-4975-94fd-fa0c21278e3b</name>
@@ -176,17 +182,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>InvertBlacklist_param</name>
-          <valueProcess>%aditoprj%/entity/Context_entity/entityfields/contexttemplateplaceofuse/children/invertblacklist_param/valueProcess.js</valueProcess>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>Blacklist_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/Context_entity/recordcontainers/jdito/contentProcess.js b/entity/Context_entity/recordcontainers/jdito/contentProcess.js
index 25682212551e2b430d137096dd04818e97fbfb5f..1bdca6e2fa31e0c1fb90a38136dbc6af182d38b0 100644
--- a/entity/Context_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Context_entity/recordcontainers/jdito/contentProcess.js
@@ -4,7 +4,6 @@ import("Context_lib");
 
 var blacklist
 var invertBlacklist
-var filterContexts = vars.get("$param.GetAllContexts_param") != "true";
 var whitelist;
 
 if (vars.get("$local.idvalues") && vars.get("$local.idvalues").length > 0)
@@ -23,4 +22,4 @@ else
     invertBlacklist = vars.get("$param.InvertBlacklist_param") == "true";
 }
 
-result.object(ContextUtils.getContexts(filterContexts, blacklist, invertBlacklist));
\ No newline at end of file
+result.object(ContextUtils.getContexts(blacklist, invertBlacklist));
\ No newline at end of file
diff --git a/entity/Contract_entity/Contract_entity.aod b/entity/Contract_entity/Contract_entity.aod
index 273e731918f9e43fbd9259ff07c9dc9ec8123887..3281aae04f01796444be478eb344530931f2c173 100644
--- a/entity/Contract_entity/Contract_entity.aod
+++ b/entity/Contract_entity/Contract_entity.aod
@@ -6,6 +6,7 @@
   <title>Contract</title>
   <grantDeleteProcess>%aditoprj%/entity/Contract_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/Contract_entity/contentTitleProcess.js</contentTitleProcess>
+  <contentDescriptionProcess>%aditoprj%/entity/Contract_entity/contentDescriptionProcess.js</contentDescriptionProcess>
   <afterUiInit>%aditoprj%/entity/Contract_entity/afterUiInit.js</afterUiInit>
   <onValidation>%aditoprj%/entity/Contract_entity/onValidation.js</onValidation>
   <useFavorites v="true" />
@@ -101,7 +102,14 @@
     </entityField>
     <entityProvider>
       <name>Contracts</name>
+      <documentation>%aditoprj%/entity/Contract_entity/entityfields/contracts/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
+      <children>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>6d7c7166-84b4-4da2-9a48-cc1e390ac987</name>
@@ -116,12 +124,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ContactId_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>ContactId_param</name>
@@ -147,11 +149,6 @@
     </entityFieldGroup>
     <entityConsumer>
       <name>Activities</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Activity_entity</entityName>
-        <fieldName>LinkedObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>RowId_param</name>
@@ -166,6 +163,11 @@
           <valueProcess>%aditoprj%/entity/Contract_entity/entityfields/activities/children/presetlinks_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Activity_entity</entityName>
+        <fieldName>LinkedObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>AnyContacts</name>
@@ -206,11 +208,6 @@
     <entityConsumer>
       <name>Documents</name>
       <selectionMode>MULTI</selectionMode>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>Documents</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -221,15 +218,15 @@
           <valueProcess>%aditoprj%/entity/Contract_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>MainDocuments</name>
-      <stateProcess>%aditoprj%/entity/Contract_entity/entityfields/maindocuments/stateProcess.js</stateProcess>
       <dependency>
         <name>dependency</name>
         <entityName>Document_entity</entityName>
-        <fieldName>MainDocuments</fieldName>
+        <fieldName>Documents</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>MainDocuments</name>
+      <stateProcess>%aditoprj%/entity/Contract_entity/entityfields/maindocuments/stateProcess.js</stateProcess>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -240,14 +237,14 @@
           <valueProcess>%aditoprj%/entity/Contract_entity/entityfields/maindocuments/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>ContractPayments</name>
       <dependency>
         <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
+        <entityName>Document_entity</entityName>
+        <fieldName>MainDocuments</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>ContractPayments</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -255,14 +252,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>ContractStates</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>ContractStates</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -270,14 +267,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>ContractTypes</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>ContractTypes</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -285,6 +282,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>newActivity</name>
@@ -298,11 +300,6 @@
       <name>Attributes</name>
       <stateProcess>%aditoprj%/entity/Contract_entity/entityfields/attributes/stateProcess.js</stateProcess>
       <onValidation>%aditoprj%/entity/Contract_entity/entityfields/attributes/onValidation.js</onValidation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>AttributeRelations</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -315,15 +312,15 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>AttributeTree</name>
-      <stateProcess>%aditoprj%/entity/Contract_entity/entityfields/attributetree/stateProcess.js</stateProcess>
       <dependency>
         <name>dependency</name>
         <entityName>AttributeRelation_entity</entityName>
-        <fieldName>TreeProvider</fieldName>
+        <fieldName>AttributeRelations</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>AttributeTree</name>
+      <stateProcess>%aditoprj%/entity/Contract_entity/entityfields/attributetree/stateProcess.js</stateProcess>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
@@ -334,15 +331,15 @@
           <valueProcess>%aditoprj%/entity/Contract_entity/entityfields/attributetree/children/objectrowid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>TreeProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Tasks</name>
       <stateProcess>%aditoprj%/entity/Contract_entity/entityfields/tasks/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Task_entity</entityName>
-        <fieldName>Tasks</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectId_param</name>
@@ -357,6 +354,11 @@
           <valueProcess>%aditoprj%/entity/Contract_entity/entityfields/tasks/children/presetlinks_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Task_entity</entityName>
+        <fieldName>Tasks</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>newTask</name>
@@ -366,17 +368,17 @@
     </entityActionField>
     <entityConsumer>
       <name>LogHistories</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>LogHistory_entity</entityName>
-        <fieldName>LogHistoryProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>tablenames_param</name>
           <valueProcess>%aditoprj%/entity/Contract_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>LogHistory_entity</entityName>
+        <fieldName>LogHistoryProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>openAdminView</name>
@@ -402,6 +404,12 @@
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
     </entityProvider>
+    <entityField>
+      <name>DATE_NEW</name>
+    </entityField>
+    <entityField>
+      <name>ACTIVE</name>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -544,6 +552,14 @@
           <recordfield>CONTRACT.CONTRACTID</recordfield>
           <aggregateType>COUNT</aggregateType>
         </aggregateFieldDbMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_NEW.value</name>
+          <recordfield>CONTRACT.CONTRACTSTART</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ACTIVE.value</name>
+          <expression>%aditoprj%/entity/Contract_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js</expression>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
       <filterExtensions>
         <filterExtensionSet>
diff --git a/entity/Contract_entity/contentDescriptionProcess.js b/entity/Contract_entity/contentDescriptionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c1836a1fcb2ff3413849aca20c8bc8912de21a53
--- /dev/null
+++ b/entity/Contract_entity/contentDescriptionProcess.js
@@ -0,0 +1,16 @@
+import("system.translate");
+import("system.datetime");
+import("system.vars");
+import("system.result");
+
+var res = [translate.text("Payment method") + ": " + vars.get("$field.PAYMENT.displayValue")];
+
+if(vars.get("$field.CONTRACTDUE"))
+    res.push(translate.text("Next due date") + ": " + datetime.toDate(vars.get("$field.CONTRACTDUE"), translate.text("dd.MM.yyyy")));
+
+if(vars.get("$field.CONTRACTEND"))
+    res.push(translate.text("Contract expiry date") + ": " + datetime.toDate(vars.get("$field.CONTRACTEND"), translate.text("dd.MM.yyyy")))
+                      
+res.push(translate.text("Creation date") + ": " + datetime.toDate(vars.get("$field.DATE_NEW"), translate.text("dd.MM.yyyy")));
+
+result.string(res.join(" | "));
\ No newline at end of file
diff --git a/entity/Contract_entity/contentTitleProcess.js b/entity/Contract_entity/contentTitleProcess.js
index 302a1d406e496a03d1f78d114d81592e4cf79582..94a08f9ad5c27a46b15210f60b0b6e9f58cba875 100644
--- a/entity/Contract_entity/contentTitleProcess.js
+++ b/entity/Contract_entity/contentTitleProcess.js
@@ -1,4 +1,6 @@
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$field.CONTRACTCODE_DISPLAY_fieldGroup"));
\ No newline at end of file
+var res = [vars.get("$field.CONTRACTCODE_DISPLAY_fieldGroup"), vars.get("$field.CONTRACTSTATUS.displayValue")];
+
+result.string(res.join(" | "));
\ No newline at end of file
diff --git a/entity/Contract_entity/entityfields/contracts/documentation.adoc b/entity/Contract_entity/entityfields/contracts/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..d329bb27a710b109b2a31416e72c432e1ac947ec
--- /dev/null
+++ b/entity/Contract_entity/entityfields/contracts/documentation.adoc
@@ -0,0 +1,3 @@
+= Contracts
+
+Provides the contracts that are linked with a contact.
\ No newline at end of file
diff --git a/entity/Contract_entity/recordcontainers/db/conditionProcess.js b/entity/Contract_entity/recordcontainers/db/conditionProcess.js
index 0fc49f960a068a0e10aa355fe661c104cb8db537..80390ca2afca4cb07cf9c4de21b819375b4601c6 100644
--- a/entity/Contract_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Contract_entity/recordcontainers/db/conditionProcess.js
@@ -5,5 +5,4 @@ import("Sql_lib");
 
 var cond = newWhereIfSet("CONTRACT.CONTACT_ID", "$param.ContactId_param");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString()); 
diff --git a/entity/Contract_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js b/entity/Contract_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..d788aeadb9234f464203300da1dac4661fcb9d11
--- /dev/null
+++ b/entity/Contract_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js
@@ -0,0 +1,6 @@
+import("Context_lib");
+import("system.result");
+import("KeywordRegistry_basic");
+
+var activArr = [$KeywordRegistry.contractState$validLimited(), $KeywordRegistry.contractState$validUnlimited(), $KeywordRegistry.contractState$notSigned()];
+result.string(ContextUtils.buildActiveCaseWhen(activArr, "CONTRACT.CONTRACTSTATUS"));
\ No newline at end of file
diff --git a/entity/Contract_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js b/entity/Contract_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js
index c2197272407c3509180dc90692e2edc59e2d6d7a..dd188aaf77933759617acc567c9f1ba0cb1313dc 100644
--- a/entity/Contract_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js
+++ b/entity/Contract_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js
@@ -1,6 +1,11 @@
+import("Context_lib");
+import("Sql_lib");
 import("system.vars");
 import("system.result");
+//!LibFunction
+var cond = newWhere(null, newSelect("ACTIVITYLINK.OBJECT_ROWID").from("ACTIVITYLINK")
+    .join("ACTIVITY", newWhere("ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID")
+        .and("ACTIVITYLINK.OBJECT_TYPE", ContextUtils.getCurrentContextId()))
+    .where(vars.get("$local.condition")), SqlBuilder.EXISTS());
 
-var from = "ACTIVITYLINK join ACTIVITY on ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID and ACTIVITYLINK.OBJECT_TYPE = 'Contract'";
-
-result.string("CONTRACTID in (select ACTIVITYLINK.OBJECT_ROWID from " + from + " where " + vars.get("$local.condition")+ ")");
\ No newline at end of file
+result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Contract_entity/recordcontainers/index/query.js b/entity/Contract_entity/recordcontainers/index/query.js
index e12356c93b0c2cefab1f3d847d91dfa563ffbbbe..62196bdcbb7ac0867788fcdd4f7ad7d99a664c6a 100644
--- a/entity/Contract_entity/recordcontainers/index/query.js
+++ b/entity/Contract_entity/recordcontainers/index/query.js
@@ -10,8 +10,8 @@ import("KeywordRegistry_basic");
 var sqlHelper = new SqlMaskingUtils();
 var querySelect = newSelect([
         "CONTRACTID", //#UID
-        sqlHelper.concat(["CONTRACTCODE", KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.contractStatus(), "CONTRACTSTATUS")], " | "), //#TITLE
-        sqlHelper.concat(["ORGANISATION.NAME", "'| " + translate.text("Type of contract") + ":'", 
+        sqlHelper.concatWithSeparator(["CONTRACTCODE", KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.contractStatus(), "CONTRACTSTATUS")], " | "), //#TITLE
+        sqlHelper.concatWithSeparator(["ORGANISATION.NAME", "'| " + translate.text("Type of contract") + ":'", 
             KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.contractType(), "CONTRACTTYPE")]), //#DESCRIPTION
         "CONTRACTCODE",
         "CONTACT.ORGANISATION_ID",  //CONTACT_ORG_ID
diff --git a/entity/Countries_Entity/Countries_Entity.aod b/entity/Countries_Entity/Countries_Entity.aod
index 9a4408cb03cc9d0d4de39895c93611b24df313da..1b19a2841ca62eacc9ae2a1ee8ce5442028172ce 100644
--- a/entity/Countries_Entity/Countries_Entity.aod
+++ b/entity/Countries_Entity/Countries_Entity.aod
@@ -16,6 +16,18 @@
       <name>ISO2Name</name>
       <lookupIdfield>ISO2</lookupIdfield>
       <documentation>%aditoprj%/entity/Countries_Entity/entityfields/iso2name/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>Key_param</name>
+          <valueProcess>%aditoprj%/entity/Countries_Entity/entityfields/iso2name/children/key_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>Value_param</name>
+          <valueProcess>%aditoprj%/entity/Countries_Entity/entityfields/iso2name/children/value_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>83e8a2e6-aa80-4b35-a0ad-8dad483ed428</name>
@@ -30,18 +42,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>Key_param</name>
-          <valueProcess>%aditoprj%/entity/Countries_Entity/entityfields/iso2name/children/key_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>Value_param</name>
-          <valueProcess>%aditoprj%/entity/Countries_Entity/entityfields/iso2name/children/value_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>Key_param</name>
diff --git a/entity/DSGVOInfo_entity/DSGVOInfo_entity.aod b/entity/DSGVOInfo_entity/DSGVOInfo_entity.aod
index 9a090c1ee2cc636fcc7b1dfe8a5651482b51f376..c170fcd06fc27a9ff7ef23c14a110bf5205daef0 100644
--- a/entity/DSGVOInfo_entity/DSGVOInfo_entity.aod
+++ b/entity/DSGVOInfo_entity/DSGVOInfo_entity.aod
@@ -83,31 +83,31 @@
     </entityField>
     <entityConsumer>
       <name>KeywordDeadline</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/DSGVOInfo_entity/entityfields/keyworddeadline/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordTransmission</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordTransmission</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/DSGVOInfo_entity/entityfields/keywordtransmission/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>TRANSMISSION</name>
@@ -140,17 +140,17 @@
     </entityConsumer>
     <entityConsumer>
       <name>KeywordGuarantee</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/DSGVOInfo_entity/entityfields/keywordguarantee/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/DSGVOInfo_entity/recordcontainers/db/conditionProcess.js b/entity/DSGVOInfo_entity/recordcontainers/db/conditionProcess.js
index 0135f590498ce6e715386047a43ac6219af36a35..14a93daf75f5f4b3c32a037f7a98840a32adaa66 100644
--- a/entity/DSGVOInfo_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/DSGVOInfo_entity/recordcontainers/db/conditionProcess.js
@@ -2,6 +2,5 @@ import("system.db");
 import("system.result");
 import("Sql_lib");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(newWhere("DSGVOINFO.CONTACT_ID", "$param.ContactId_param").toString())
                
\ No newline at end of file
diff --git a/entity/DSGVO_entity/DSGVO_entity.aod b/entity/DSGVO_entity/DSGVO_entity.aod
index 19cefc3a19e90adbc2a12a91fe584c93032a6554..a6445e18ca69ee174c9338f15491fcfc8240d805 100644
--- a/entity/DSGVO_entity/DSGVO_entity.aod
+++ b/entity/DSGVO_entity/DSGVO_entity.aod
@@ -84,11 +84,6 @@
     </entityField>
     <entityConsumer>
       <name>KeywordDSGVOPurpose</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -96,20 +91,25 @@
           <valueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/keyworddsgvopurpose/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordDSGVOStatuoritysource</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordDSGVOStatuoritysource</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/keyworddsgvostatuoritysource/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Communications</name>
@@ -181,17 +181,17 @@
     </entityField>
     <entityConsumer>
       <name>KeywordDSGVOType</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/keyworddsgvotype/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>DSGVOEntries</name>
diff --git a/entity/DefaultAdminView_entity/DefaultAdminView_entity.aod b/entity/DefaultAdminView_entity/DefaultAdminView_entity.aod
index a84b79d58a22aff0e293f7115c2f4fcdcede4b84..7b0b1dd8ef9bc50a75c65fe7b422dc6d06d6a575 100644
--- a/entity/DefaultAdminView_entity/DefaultAdminView_entity.aod
+++ b/entity/DefaultAdminView_entity/DefaultAdminView_entity.aod
@@ -19,17 +19,17 @@
     <entityConsumer>
       <name>Rows</name>
       <state>READONLY</state>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AdminViewRow_entity</entityName>
-        <fieldName>AdminViewRows</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>Rows_param</name>
           <valueProcess>%aditoprj%/entity/DefaultAdminView_entity/entityfields/rows/children/rows_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AdminViewRow_entity</entityName>
+        <fieldName>AdminViewRows</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>Uid_param</name>
@@ -40,6 +40,14 @@
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
     </entityProvider>
+    <entityParameter>
+      <name>Entity_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityField>
+      <name>ENTITY</name>
+      <title>Entity</title>
+    </entityField>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
@@ -49,6 +57,9 @@
         <jDitoRecordFieldMapping>
           <name>UID.value</name>
         </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ENTITY.value</name>
+        </jDitoRecordFieldMapping>
       </recordFieldMappings>
     </jDitoRecordContainer>
   </recordContainers>
diff --git a/entity/DefaultAdminView_entity/recordcontainers/jdito/contentProcess.js b/entity/DefaultAdminView_entity/recordcontainers/jdito/contentProcess.js
index b6f288f713ee37fdc2431d8713d06ab465528c88..aa5a7e9b8e4b2bf005c0e43b99498e430d18726a 100644
--- a/entity/DefaultAdminView_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/DefaultAdminView_entity/recordcontainers/jdito/contentProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.object([[vars.get("$param.Uid_param")]]);
\ No newline at end of file
+result.object([[vars.get("$param.Uid_param"), vars.get("$param.Entity_param")]]);
\ No newline at end of file
diff --git a/entity/DescriptionTranslation_entity/DescriptionTranslation_entity.aod b/entity/DescriptionTranslation_entity/DescriptionTranslation_entity.aod
index 83aa32b97318445d0891b35c2443d6452e929739..125b89eb929ff7c7bc2f82abb6b513a12cfea883 100644
--- a/entity/DescriptionTranslation_entity/DescriptionTranslation_entity.aod
+++ b/entity/DescriptionTranslation_entity/DescriptionTranslation_entity.aod
@@ -40,17 +40,17 @@
     </entityField>
     <entityConsumer>
       <name>Languages</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Language_entity</entityName>
-        <fieldName>ISO3NameFiltered</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ExcludedIds_param</name>
           <valueProcess>%aditoprj%/entity/DescriptionTranslation_entity/entityfields/languages/children/excludedids_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Language_entity</entityName>
+        <fieldName>ISO3NameFiltered</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ObjectType_param</name>
diff --git a/entity/DescriptionTranslation_entity/recordcontainers/db/conditionProcess.js b/entity/DescriptionTranslation_entity/recordcontainers/db/conditionProcess.js
index 9b60a2f7aecaea90d458fba6ecff1b8f6aa41a7b..daa85fa01b438eb9728e27f28be4c808d7b25040 100644
--- a/entity/DescriptionTranslation_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/DescriptionTranslation_entity/recordcontainers/db/conditionProcess.js
@@ -4,6 +4,5 @@ import("Sql_lib");
 var cond = newWhere()
             .andIfSet("DESCRIPTIONTRANSLATION.OBJECT_TYPE", "$param.ObjectType_param")
             .andIfSet("DESCRIPTIONTRANSLATION.OBJECT_ROWID", "$param.ObjectRowid_param");
-                       
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
+
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod b/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod
index 4062bb8fd405fd3447584e1169ac5f9f8e15c83c..542e050c6414a26472b63a41636ef1632d31f79e 100644
--- a/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod
+++ b/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod
@@ -37,11 +37,6 @@
     </entityField>
     <entityConsumer>
       <name>Departments</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Attribute_entity</entityName>
-        <fieldName>SpecificAttribute</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ParentId_param</name>
@@ -49,6 +44,11 @@
           <description>parent id, this is used for filtering by the parent in the content process</description>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Attribute_entity</entityName>
+        <fieldName>SpecificAttribute</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Employees</name>
@@ -90,14 +90,6 @@
       <lookupIdfield>DISTRICTRESPONSIBLEID</lookupIdfield>
       <documentation>%aditoprj%/entity/DistrictResponsible_entity/entityfields/districtresponsibles/documentation.adoc</documentation>
       <titlePlural>Responsibles</titlePlural>
-      <dependencies>
-        <entityDependency>
-          <name>ef26fdb6-5fcf-416e-bcc8-380b5751b523</name>
-          <entityName>District_entity</entityName>
-          <fieldName>DistrictResponsibles</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>DistrictId_param</name>
@@ -108,6 +100,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>ef26fdb6-5fcf-416e-bcc8-380b5751b523</name>
+          <entityName>District_entity</entityName>
+          <fieldName>DistrictResponsibles</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityParameter>
       <name>DistrictId_param</name>
@@ -116,25 +116,20 @@
     </entityParameter>
     <entityConsumer>
       <name>LogHistories</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>LogHistory_entity</entityName>
-        <fieldName>LogHistoryProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>tablenames_param</name>
           <valueProcess>%aditoprj%/entity/DistrictResponsible_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Documents</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>Documents</fieldName>
+        <entityName>LogHistory_entity</entityName>
+        <fieldName>LogHistoryProvider</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Documents</name>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -145,6 +140,11 @@
           <valueProcess>%aditoprj%/entity/DistrictResponsible_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>Documents</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>departmentAttributeName</name>
@@ -159,6 +159,12 @@
       <targetContextField>targetContext</targetContextField>
       <targetIdField>EMPLOYEE_CONTACT_ID</targetIdField>
       <documentation>%aditoprj%/entity/DistrictResponsible_entity/entityfields/organisationresponsibles/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>DistrictId_param</name>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>9c2fe0da-9456-44ef-ac6c-28ac234b35f7</name>
@@ -173,12 +179,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>DistrictId_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>OrgUid_param</name>
diff --git a/entity/District_entity/District_entity.aod b/entity/District_entity/District_entity.aod
index e775acd3c2243cada93f42afa935b6336bb8d256..8ae74f7b15631f61f43dfe094c3931db48eb1339 100644
--- a/entity/District_entity/District_entity.aod
+++ b/entity/District_entity/District_entity.aod
@@ -82,14 +82,6 @@
       <documentation>%aditoprj%/entity/District_entity/entityfields/responsibledistricts/documentation.adoc</documentation>
       <titlePlural>Responsible Districts</titlePlural>
       <recordContainer>db</recordContainer>
-      <dependencies>
-        <entityDependency>
-          <name>291c0ca4-5a68-45f5-80a7-745c7df56d7c</name>
-          <entityName>DistrictResponsible_entity</entityName>
-          <fieldName>Districts</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ExcludedDistrictIds_param</name>
@@ -100,6 +92,14 @@
           <mandatory v="true" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>291c0ca4-5a68-45f5-80a7-745c7df56d7c</name>
+          <entityName>DistrictResponsible_entity</entityName>
+          <fieldName>Districts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityConsumer>
       <name>Languages</name>
@@ -111,17 +111,17 @@
     </entityConsumer>
     <entityConsumer>
       <name>DistrictResponsibles</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DistrictResponsible_entity</entityName>
-        <fieldName>DistrictResponsibles</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>DistrictId_param</name>
           <valueProcess>%aditoprj%/entity/District_entity/entityfields/districtresponsibles/children/districtid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DistrictResponsible_entity</entityName>
+        <fieldName>DistrictResponsibles</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>USER_NEW</name>
@@ -142,17 +142,17 @@
     <entityConsumer>
       <name>Organisations</name>
       <refreshParent v="true" />
-      <dependency>
-        <name>dependency</name>
-        <entityName>Organisation_entity</entityName>
-        <fieldName>Organisations</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>FilterPreSet_param</name>
           <valueProcess>%aditoprj%/entity/District_entity/entityfields/organisations/children/filterpreset_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Organisation_entity</entityName>
+        <fieldName>Organisations</fieldName>
+      </dependency>
     </entityConsumer>
     <entityFieldGroup>
       <name>DISTRICT_NUMBER_fieldGroup</name>
@@ -164,11 +164,6 @@
     </entityFieldGroup>
     <entityConsumer>
       <name>Documents</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>Documents</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -179,6 +174,11 @@
           <valueProcess>%aditoprj%/entity/District_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>Documents</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>LogHistories</name>
@@ -217,21 +217,27 @@
     </entityProvider>
     <entityConsumer>
       <name>ParentDistricts</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>#ENTITY</entityName>
-        <fieldName>ValidParentDistricts</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ExcludedDistrictIds_param</name>
           <valueProcess>%aditoprj%/entity/District_entity/entityfields/parentdistricts/children/excludeddistrictids_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>#ENTITY</entityName>
+        <fieldName>ValidParentDistricts</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>ValidParentDistricts</name>
       <documentation>%aditoprj%/entity/District_entity/entityfields/validparentdistricts/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>DistrictsByContactId_param</name>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>8b0738a4-e4cd-4f9e-8df1-f499046c81bf</name>
@@ -240,12 +246,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>DistrictsByContactId_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>ExcludedDistrictIds_param</name>
diff --git a/entity/DocumentTemplateLink_entity/DocumentTemplateLink_entity.aod b/entity/DocumentTemplateLink_entity/DocumentTemplateLink_entity.aod
index e848d6cbed30ee763ef247d2b50de2b6a9fcd166..045e605d322c3f26bb96ae14b37d59b96a15be20 100644
--- a/entity/DocumentTemplateLink_entity/DocumentTemplateLink_entity.aod
+++ b/entity/DocumentTemplateLink_entity/DocumentTemplateLink_entity.aod
@@ -51,11 +51,6 @@
     </entityParameter>
     <entityConsumer>
       <name>Attachments</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DocumentTemplate_entity</entityName>
-        <fieldName>Attachments</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>DocumentTemplateType_param</name>
@@ -63,20 +58,17 @@
           <valueProcess>%aditoprj%/entity/DocumentTemplateLink_entity/entityfields/attachments/children/documenttemplatetype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DocumentTemplate_entity</entityName>
+        <fieldName>Attachments</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>Links</name>
       <targetIdField>DOCUMENTTEMPLATE_ID_CHILD</targetIdField>
       <documentation>%aditoprj%/entity/DocumentTemplateLink_entity/entityfields/links/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
-      <dependencies>
-        <entityDependency>
-          <name>db3b7e04-ca3b-4205-a1d3-5e5e5cb13073</name>
-          <entityName>DocumentTemplate_entity</entityName>
-          <fieldName>Links</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>DocumentId_param</name>
@@ -87,6 +79,14 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>db3b7e04-ca3b-4205-a1d3-5e5e5cb13073</name>
+          <entityName>DocumentTemplate_entity</entityName>
+          <fieldName>Links</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityParameter>
       <name>Type_param</name>
diff --git a/entity/DocumentTemplateLink_entity/recordcontainers/db/conditionProcess.js b/entity/DocumentTemplateLink_entity/recordcontainers/db/conditionProcess.js
index 72212f07978dfd9e4d0d8b8f670a0a3e08316621..0c634187ccb1d78964c27dccf2118f95aa72078d 100644
--- a/entity/DocumentTemplateLink_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/DocumentTemplateLink_entity/recordcontainers/db/conditionProcess.js
@@ -4,5 +4,4 @@ import("Sql_lib");
 
 var cond = newWhereIfSet("DOCUMENTTEMPLATELINK.DOCUMENTTEMPLATE_ID_PARENT", "$param.DocumentId_param");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/DocumentTemplatePlaceOfUse_entity/DocumentTemplatePlaceOfUse_entity.aod b/entity/DocumentTemplatePlaceOfUse_entity/DocumentTemplatePlaceOfUse_entity.aod
index 6db556011a3702c802f4b5a1c3ade5dcb8e172b2..ecc597470943e0219985ae481d76dea66c63687d 100644
--- a/entity/DocumentTemplatePlaceOfUse_entity/DocumentTemplatePlaceOfUse_entity.aod
+++ b/entity/DocumentTemplatePlaceOfUse_entity/DocumentTemplatePlaceOfUse_entity.aod
@@ -29,11 +29,6 @@
     </entityField>
     <entityConsumer>
       <name>ContextDocumentTemplatePlaceOfUse</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Context_entity</entityName>
-        <fieldName>ContextTemplatePlaceOfUse</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>InvertBlacklist_param</name>
@@ -43,15 +38,22 @@
           <name>Blacklist_param</name>
           <valueProcess>%aditoprj%/entity/DocumentTemplatePlaceOfUse_entity/entityfields/contextdocumenttemplateplaceofuse/children/blacklist_param/valueProcess.js</valueProcess>
         </entityParameter>
-        <entityParameter>
-          <name>GetAllContexts_param</name>
-          <valueProcess>%aditoprj%/entity/DocumentTemplatePlaceOfUse_entity/entityfields/contextdocumenttemplateplaceofuse/children/getallcontexts_param/valueProcess.js</valueProcess>
-        </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Context_entity</entityName>
+        <fieldName>ContextTemplatePlaceOfUse</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>DocumentTemplatePlaceOfUse</name>
       <documentation>%aditoprj%/entity/DocumentTemplatePlaceOfUse_entity/entityfields/documenttemplateplaceofuse/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>DocumentTemplatePlaceOfUse_param</name>
+          <documentation>%aditoprj%/entity/DocumentTemplatePlaceOfUse_entity/entityfields/documenttemplateplaceofuse/children/documenttemplateplaceofuse_param/documentation.adoc</documentation>
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>bc05b556-ecca-478c-9a92-b77e4d98d6f3</name>
@@ -60,17 +62,9 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>DocumentTemplatePlaceOfUse_param</name>
-          <valueProcess>%aditoprj%/entity/DocumentTemplatePlaceOfUse_entity/entityfields/documenttemplateplaceofuse/children/documenttemplateplaceofuse_param/valueProcess.js</valueProcess>
-          <documentation>%aditoprj%/entity/DocumentTemplatePlaceOfUse_entity/entityfields/documenttemplateplaceofuse/children/documenttemplateplaceofuse_param/documentation.adoc</documentation>
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>DocumentTemplatePlaceOfUse_param</name>
-      <valueProcess>%aditoprj%/entity/DocumentTemplatePlaceOfUse_entity/entityfields/documenttemplateplaceofuse_param/valueProcess.js</valueProcess>
       <expose v="true" />
     </entityParameter>
     <entityProvider>
diff --git a/entity/DocumentTemplatePlaceOfUse_entity/entityfields/documenttemplateplaceofuse/children/documenttemplateplaceofuse_param/valueProcess.js b/entity/DocumentTemplatePlaceOfUse_entity/entityfields/documenttemplateplaceofuse/children/documenttemplateplaceofuse_param/valueProcess.js
deleted file mode 100644
index f786c8c7b183a2cf2240b9a314f499b55fcdf72c..0000000000000000000000000000000000000000
--- a/entity/DocumentTemplatePlaceOfUse_entity/entityfields/documenttemplateplaceofuse/children/documenttemplateplaceofuse_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.result");
-import("system.vars");
-
-result.string(vars.get("$field.DOCUMENTTEMPLATEID"));
\ No newline at end of file
diff --git a/entity/DocumentTemplatePlaceOfUse_entity/entityfields/documenttemplateplaceofuse_param/valueProcess.js b/entity/DocumentTemplatePlaceOfUse_entity/entityfields/documenttemplateplaceofuse_param/valueProcess.js
deleted file mode 100644
index f786c8c7b183a2cf2240b9a314f499b55fcdf72c..0000000000000000000000000000000000000000
--- a/entity/DocumentTemplatePlaceOfUse_entity/entityfields/documenttemplateplaceofuse_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.result");
-import("system.vars");
-
-result.string(vars.get("$field.DOCUMENTTEMPLATEID"));
\ No newline at end of file
diff --git a/entity/DocumentTemplateTypeCategory_entity/DocumentTemplateTypeCategory_entity.aod b/entity/DocumentTemplateTypeCategory_entity/DocumentTemplateTypeCategory_entity.aod
index bea4c1751d8494da143d1330f839615910e4cba6..c6fa4c852db2405ec9cfc663e8fe80f4ed1ac4fc 100644
--- a/entity/DocumentTemplateTypeCategory_entity/DocumentTemplateTypeCategory_entity.aod
+++ b/entity/DocumentTemplateTypeCategory_entity/DocumentTemplateTypeCategory_entity.aod
@@ -32,6 +32,12 @@
       <lookupIdfield>KEYID</lookupIdfield>
       <documentation>%aditoprj%/entity/DocumentTemplateTypeCategory_entity/entityfields/bycategory/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
+      <children>
+        <entityParameter>
+          <name>usageFilter_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>5eb6b17c-8c13-48df-84d5-a949b7d21cf3</name>
@@ -40,12 +46,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>usageFilter_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/conditionProcess.js b/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/conditionProcess.js
index 42e83fc6e021aace37f74c3de356acc19c11a2d0..0cec405b433c9f43d6e536f471fb001b9da9ac43 100644
--- a/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/DocumentTemplateTypeCategory_entity/recordcontainers/db/conditionProcess.js
@@ -19,5 +19,4 @@ if (usageFilter)
             , SqlBuilder.IN());
 }
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod b/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod
index 9cf1d9cca301bb4240acea90684327824bbd201d..b19bc7ae52fbb3717e35a9917861913b69a226e4 100644
--- a/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod
+++ b/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod
@@ -94,11 +94,6 @@
     </entityField>
     <entityConsumer>
       <name>Documents</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>Documents</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentTable_param</name>
@@ -109,6 +104,11 @@
           <valueProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>Documents</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Languages</name>
@@ -120,27 +120,22 @@
     </entityConsumer>
     <entityConsumer>
       <name>KeywordDocumentTemplateType</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/keyworddocumenttemplatetype/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Attributes</name>
       <stateProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/attributes/stateProcess.js</stateProcess>
       <onValidation>%aditoprj%/entity/DocumentTemplate_entity/entityfields/attributes/onValidation.js</onValidation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>AttributeRelations</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -151,6 +146,11 @@
           <valueProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/attributes/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>AttributeRelations</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>Content</name>
@@ -176,11 +176,6 @@
     </entityField>
     <entityConsumer>
       <name>DocumentTemplateTypeCategory</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DocumentTemplateTypeCategory_entity</entityName>
-        <fieldName>ByCategory</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>usageFilter_param</name>
@@ -188,6 +183,11 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DocumentTemplateTypeCategory_entity</entityName>
+        <fieldName>ByCategory</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>Attachments</name>
@@ -208,11 +208,6 @@
     <entityConsumer>
       <name>Links</name>
       <stateProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/links/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DocumentTemplateLink_entity</entityName>
-        <fieldName>Links</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>DocumentId_param</name>
@@ -225,6 +220,11 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DocumentTemplateLink_entity</entityName>
+        <fieldName>Links</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>DocumentTemplateTypeClassification_param</name>
@@ -234,6 +234,12 @@
     <entityProvider>
       <name>DocumentTemplateProvider</name>
       <documentation>%aditoprj%/entity/DocumentTemplate_entity/entityfields/documenttemplateprovider/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>ComingFrom_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>9c10883d-eb73-4587-b758-693a66367a4c</name>
@@ -278,12 +284,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ComingFrom_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>DocumentTemplateType_param</name>
@@ -321,11 +321,7 @@
     <entityConsumer>
       <name>DocumentTemplatePlaceOfUse</name>
       <stateProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/documenttemplateplaceofuse/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DocumentTemplatePlaceOfUse_entity</entityName>
-        <fieldName>DocumentTemplatePlaceOfUse</fieldName>
-      </dependency>
+      <onValidation>%aditoprj%/entity/DocumentTemplate_entity/entityfields/documenttemplateplaceofuse/onValidation.js</onValidation>
       <children>
         <entityParameter>
           <name>DocumentTemplatePlaceOfUse_param</name>
@@ -333,6 +329,11 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DocumentTemplatePlaceOfUse_entity</entityName>
+        <fieldName>DocumentTemplatePlaceOfUse</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ComingFrom_param</name>
diff --git a/entity/DocumentTemplate_entity/entityfields/documenttemplateplaceofuse/onValidation.js b/entity/DocumentTemplate_entity/entityfields/documenttemplateplaceofuse/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..a40be7eb7d8e21b088a3cf4683b41849239e35ee
--- /dev/null
+++ b/entity/DocumentTemplate_entity/entityfields/documenttemplateplaceofuse/onValidation.js
@@ -0,0 +1,14 @@
+import("system.translate");
+import("system.result");
+import("system.vars");
+import("Entity_lib");
+
+var usages = EntityConsumerRowsHelper.getCurrentConsumerRows("DocumentTemplatePlaceOfUse", ["PLACEOFUSE"]);
+var hasMarketingWorkflowUsage = usages.some(function (usage)
+{
+    return usage["PLACEOFUSE"] == "MarketingWorkflowLauncher";
+});
+if (hasMarketingWorkflowUsage && !vars.get("$field.Content").includes("{@workflowActionLink@}"))
+{
+    result.string(translate.text("The template must contain the placeholder for the worklow-link to use it with the marketing workflow"));
+}
diff --git a/entity/Document_entity/Document_entity.aod b/entity/Document_entity/Document_entity.aod
index 420157a37135f2b6b3fd1105810584e32ac6935e..f1dda1cc413a7dc2f7f2678ef59c6188096c0d5f 100644
--- a/entity/Document_entity/Document_entity.aod
+++ b/entity/Document_entity/Document_entity.aod
@@ -143,7 +143,28 @@
     </entityActionField>
     <entityProvider>
       <name>Documents</name>
+      <documentation>%aditoprj%/entity/Document_entity/entityfields/documents/documentation.adoc</documentation>
       <recordContainer>jdito</recordContainer>
+      <children>
+        <entityParameter>
+          <name>AssignmentName_param</name>
+          <valueProcess>%aditoprj%/entity/Document_entity/entityfields/documents/children/assignmentname_param/valueProcess.js</valueProcess>
+          <expose v="true" />
+          <documentation>%aditoprj%/entity/Document_entity/entityfields/documents/children/assignmentname_param/documentation.adoc</documentation>
+        </entityParameter>
+        <entityParameter>
+          <name>AssignmentRowId_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>AssignmentTable_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>Keyword_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>1eae1907-53ea-4d6f-bcf1-772052365020</name>
@@ -225,7 +246,7 @@
         </entityDependency>
         <entityDependency>
           <name>2e6fcf27-ee98-4f7d-a99d-7ce02774076b</name>
-          <entityName>UserhelpResources</entityName>
+          <entityName>UserhelpResources_entity</entityName>
           <fieldName>Documents</fieldName>
           <isConsumer v="false" />
         </entityDependency>
@@ -242,12 +263,23 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
+    </entityProvider>
+    <entityProvider>
+      <name>MainDocuments</name>
+      <recordContainer>jdito</recordContainer>
       <children>
+        <entityParameter>
+          <name>Keyword_param</name>
+          <valueProcess>%aditoprj%/entity/Document_entity/entityfields/maindocuments/children/keyword_param/valueProcess.js</valueProcess>
+          <expose v="true" />
+          <mandatory v="true" />
+          <description>TODO: expose auf false. aktuell wird der Code nicht ausgeführt, wenn Expose false ist.</description>
+        </entityParameter>
         <entityParameter>
           <name>AssignmentName_param</name>
-          <valueProcess>%aditoprj%/entity/Document_entity/entityfields/documents/children/assignmentname_param/valueProcess.js</valueProcess>
+          <valueProcess>%aditoprj%/entity/Document_entity/entityfields/maindocuments/children/assignmentname_param/valueProcess.js</valueProcess>
           <expose v="true" />
-          <documentation>%aditoprj%/entity/Document_entity/entityfields/documents/children/assignmentname_param/documentation.adoc</documentation>
+          <documentation>%aditoprj%/entity/Document_entity/entityfields/maindocuments/children/assignmentname_param/documentation.adoc</documentation>
         </entityParameter>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -258,14 +290,10 @@
           <expose v="true" />
         </entityParameter>
         <entityParameter>
-          <name>Keyword_param</name>
-          <expose v="true" />
+          <name>DisallowCreate_param</name>
+          <expose v="false" />
         </entityParameter>
       </children>
-    </entityProvider>
-    <entityProvider>
-      <name>MainDocuments</name>
-      <recordContainer>jdito</recordContainer>
       <dependencies>
         <entityDependency>
           <name>87d738a5-5d5e-425e-b013-007371475a38</name>
@@ -310,33 +338,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>Keyword_param</name>
-          <valueProcess>%aditoprj%/entity/Document_entity/entityfields/maindocuments/children/keyword_param/valueProcess.js</valueProcess>
-          <expose v="true" />
-          <mandatory v="true" />
-          <description>TODO: expose auf false. aktuell wird der Code nicht ausgeführt, wenn Expose false ist.</description>
-        </entityParameter>
-        <entityParameter>
-          <name>AssignmentName_param</name>
-          <valueProcess>%aditoprj%/entity/Document_entity/entityfields/maindocuments/children/assignmentname_param/valueProcess.js</valueProcess>
-          <expose v="true" />
-          <documentation>%aditoprj%/entity/Document_entity/entityfields/maindocuments/children/assignmentname_param/documentation.adoc</documentation>
-        </entityParameter>
-        <entityParameter>
-          <name>AssignmentRowId_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>AssignmentTable_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>DisallowCreate_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>DisallowCreate_param</name>
@@ -346,14 +347,6 @@
     <entityProvider>
       <name>SingleDocument</name>
       <titlePlural>Document</titlePlural>
-      <dependencies>
-        <entityDependency>
-          <name>91f87622-d0e8-43c6-99a0-5f9cebf79aaf</name>
-          <entityName>SerialLetter_entity</entityName>
-          <fieldName>Documents</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>AssignmentName_param</name>
@@ -364,12 +357,42 @@
           <valueProcess>%aditoprj%/entity/Document_entity/entityfields/singledocument/children/disallowcreate_param/valueProcess.js</valueProcess>
           <expose v="true" />
         </entityParameter>
+        <entityParameter>
+          <name>MSTTeamId_param</name>
+          <expose v="false" />
+        </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>91f87622-d0e8-43c6-99a0-5f9cebf79aaf</name>
+          <entityName>SerialLetter_entity</entityName>
+          <fieldName>Documents</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
     </entityProvider>
+    <entityActionGroup>
+      <name>MSTeam</name>
+      <title>MS Teams</title>
+      <stateProcess>%aditoprj%/entity/Document_entity/entityfields/msteam/stateProcess.js</stateProcess>
+      <children>
+        <entityActionField>
+          <name>synchronizeDocuments</name>
+          <title>Synchronize documents</title>
+          <onActionProcess>%aditoprj%/entity/Document_entity/entityfields/msteam/children/synchronizedocuments/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:REFRESH</iconId>
+          <stateProcess>%aditoprj%/entity/Document_entity/entityfields/msteam/children/synchronizedocuments/stateProcess.js</stateProcess>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
+    <entityParameter>
+      <name>MSTTeamId_param</name>
+      <expose v="true" />
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
diff --git a/entity/Document_entity/entityfields/documents/documentation.adoc b/entity/Document_entity/entityfields/documents/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..e2c292d974ff694c3b44fef1fbb7d5da60cb7db0
--- /dev/null
+++ b/entity/Document_entity/entityfields/documents/documentation.adoc
@@ -0,0 +1,3 @@
+= Documents
+
+Provider for getting all documents linked to an object.
\ No newline at end of file
diff --git a/entity/Document_entity/entityfields/msteam/children/synchronizedocuments/onActionProcess.js b/entity/Document_entity/entityfields/msteam/children/synchronizedocuments/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..841ff10b1844fa44c81a817f99987d1ff2f42db7
--- /dev/null
+++ b/entity/Document_entity/entityfields/msteam/children/synchronizedocuments/onActionProcess.js
@@ -0,0 +1,9 @@
+import("system.neon");
+import("system.vars");
+
+neon.openContext("MSTTeamsDocument", "MSTeamsDocumentEdit_view", null, neon.OPERATINGSTATE_VIEW, {
+    "MSTTeamId_param" : vars.get("$param.MSTTeamId_param"),
+    "ObjectRowId_param" : vars.get("$param.AssignmentRowId_param"),
+    "AssignmentName_param" : vars.get("$param.AssignmentName_param"),
+    "AssignmentTable_param" : vars.get("$param.AssignmentTable_param")
+});
diff --git a/entity/Document_entity/entityfields/msteam/children/synchronizedocuments/stateProcess.js b/entity/Document_entity/entityfields/msteam/children/synchronizedocuments/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..0bd4c4c544c99f66a5a2ce914d8abd13910ad5c5
--- /dev/null
+++ b/entity/Document_entity/entityfields/msteam/children/synchronizedocuments/stateProcess.js
@@ -0,0 +1,7 @@
+import("MSTeams_lib");
+import("system.vars");
+import("system.neon");
+import("system.result");
+
+var isEnabled = MSTeamsUtils.isTeamsEnabled() && MSTeamsUtils.isTeamActive(vars.get("$param.MSTTeamId_param"));
+result.string(isEnabled ? neon.COMPONENTSTATE_EDITABLE : neon.COMPONENTSTATE_DISABLED);
\ No newline at end of file
diff --git a/entity/Document_entity/entityfields/msteam/stateProcess.js b/entity/Document_entity/entityfields/msteam/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..cd16b0694665a45b7c95ff7aa35547fef4e4f633
--- /dev/null
+++ b/entity/Document_entity/entityfields/msteam/stateProcess.js
@@ -0,0 +1,7 @@
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+result.string(vars.exists("$param.MSTTeamId_param") && vars.get("$param.MSTTeamId_param")
+    ? neon.COMPONENTSTATE_EDITABLE
+    : neon.COMPONENTSTATE_INVISIBLE);
\ No newline at end of file
diff --git a/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod b/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod
index fb343c9aa35db6794cf56f61fb5920617e799a91..b03785e283988f81205973dca4b69b0f77b34416 100644
--- a/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod
+++ b/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod
@@ -74,17 +74,17 @@
     </entityField>
     <entityConsumer>
       <name>ScannerResultFieldsConfig_Consumer</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DuplicateScannerResultFieldConfig_entity</entityName>
-        <fieldName>ScannerResultFieldConfigProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>DuplicateScannerId_param</name>
           <valueProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/scannerresultfieldsconfig_consumer/children/duplicatescannerid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DuplicateScannerResultFieldConfig_entity</entityName>
+        <fieldName>ScannerResultFieldConfigProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionGroup>
       <name>RunActionGroup</name>
diff --git a/entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/onDBUpdate.js b/entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/onDBUpdate.js
index c8e53ac00d768ffab9c7f50553de8b2f3d327bed..c752ef5850f94d87e6353b5cace686dafb172353 100644
--- a/entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/onDBUpdate.js
+++ b/entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/onDBUpdate.js
@@ -1,3 +1,4 @@
+import("Sql_lib");
 import("system.vars");
 
 var rowdata = vars.get("$local.rowdata");
@@ -6,5 +7,6 @@ let scanPattern = JSON.parse(rowdata["DUPLICATESCANNER.SCAN_PATTERN"]);
 if (scanPattern.provider == undefined) 
 { 
     scanPattern.provider = "indexP";
-    vars.set("$field.SCAN_PATTERN", JSON.stringify(scanPattern));
+    newWhere("DUPLICATESCANNER.ID", vars.get("$local.uid"))
+    .updateData(true, "DUPLICATESCANNER", ["DUPLICATESCANNER.SCAN_PATTERN"], null,[JSON.stringify(scanPattern)]);
 }
\ No newline at end of file
diff --git a/entity/Duplicates_entity/Duplicates_entity.aod b/entity/Duplicates_entity/Duplicates_entity.aod
index 54ee932a3235f4e127feeb5112c9c11e3e7f2e47..01016698641fb613af8dd98543ce9c7d4e3fd809 100644
--- a/entity/Duplicates_entity/Duplicates_entity.aod
+++ b/entity/Duplicates_entity/Duplicates_entity.aod
@@ -42,11 +42,6 @@
     </entityProvider>
     <entityConsumer>
       <name>SelfPersonDuplicatesConsumer</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Duplicates_entity</entityName>
-        <fieldName>SelfPersonDuplicatesProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>TargetEntity</name>
@@ -58,6 +53,11 @@
           <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/clusterid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Duplicates_entity</entityName>
+        <fieldName>SelfPersonDuplicatesProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>TargetEntity</name>
@@ -66,11 +66,6 @@
     </entityParameter>
     <entityConsumer>
       <name>SelfOrganisationDuplicatesConsumer</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Duplicates_entity</entityName>
-        <fieldName>SelfOrganisationDuplicatesProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>TargetEntity</name>
@@ -81,6 +76,11 @@
           <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/selforganisationduplicatesconsumer/children/clusterid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Duplicates_entity</entityName>
+        <fieldName>SelfOrganisationDuplicatesProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>SelfOrganisationDuplicatesProvider</name>
@@ -88,11 +88,6 @@
     </entityProvider>
     <entityConsumer>
       <name>DuplicatesUnrelatedPersonConsumer</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DuplicatesUnrelated_entity</entityName>
-        <fieldName>UnrelatedPersonsProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>TargetEntity</name>
@@ -103,17 +98,17 @@
           <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicatesunrelatedpersonconsumer/children/clusterid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DuplicatesUnrelated_entity</entityName>
+        <fieldName>UnrelatedPersonsProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>CLUSTER_ID</name>
     </entityField>
     <entityConsumer>
       <name>DuplicatePersonsConsumer</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Person_entity</entityName>
-        <fieldName>NonselfDuplicates</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>OnlyShowContactIds_param</name>
@@ -124,6 +119,11 @@
           <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicatepersonsconsumer/children/duplicateactionscontrol_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Person_entity</entityName>
+        <fieldName>NonselfDuplicates</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionGroup>
       <name>DuplicateClusterActionGroup</name>
@@ -140,11 +140,6 @@
     </entityActionGroup>
     <entityConsumer>
       <name>DuplicatesUnrelatedOrganisationConsumer</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DuplicatesUnrelated_entity</entityName>
-        <fieldName>UnrelatedOrganisationsProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>TargetEntity</name>
@@ -155,6 +150,11 @@
           <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/clusterid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DuplicatesUnrelated_entity</entityName>
+        <fieldName>UnrelatedOrganisationsProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionGroup>
       <name>PersonOpenClusterDetailActionGroup</name>
@@ -186,11 +186,6 @@
     </entityActionGroup>
     <entityConsumer>
       <name>DuplicateOrganisationsConsumer</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Organisation_entity</entityName>
-        <fieldName>NonselfDuplicates</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>DuplicateActionsControl_param</name>
@@ -201,6 +196,11 @@
           <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicateorganisationsconsumer/children/onlyshowcontactids_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Organisation_entity</entityName>
+        <fieldName>NonselfDuplicates</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/Email_entity/Email_entity.aod b/entity/Email_entity/Email_entity.aod
index 3fae2a234bd2ebccb4ee178dd4c55cbdbacfb054..73da7f79012e6ebb9435ada80d688952aa713aef 100644
--- a/entity/Email_entity/Email_entity.aod
+++ b/entity/Email_entity/Email_entity.aod
@@ -29,11 +29,6 @@
     </entityField>
     <entityConsumer>
       <name>DocumentTemplates</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DocumentTemplate_entity</entityName>
-        <fieldName>#PROVIDER</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>DocumentTemplateType_param</name>
@@ -48,6 +43,11 @@
           <valueProcess>%aditoprj%/entity/Email_entity/entityfields/documenttemplates/children/documenttemplatetypeclassification_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DocumentTemplate_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>Recipient_param</name>
@@ -65,17 +65,17 @@
     </entityField>
     <entityConsumer>
       <name>EmailAddresses</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Communication_entity</entityName>
-        <fieldName>EmailCommunications</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Email_entity/entityfields/emailaddresses/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Communication_entity</entityName>
+        <fieldName>EmailCommunications</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ContactId_param</name>
diff --git a/entity/Email_entity/entityfields/recipient/displayValueProcess.js b/entity/Email_entity/entityfields/recipient/displayValueProcess.js
index 8e2f689eb15234549c8e1586c5aeba949ada2d62..ee4d3155ec9f2c715989a6c0a5d13d57fc0ab006 100644
--- a/entity/Email_entity/entityfields/recipient/displayValueProcess.js
+++ b/entity/Email_entity/entityfields/recipient/displayValueProcess.js
@@ -1,6 +1,14 @@
+import("Communication_lib");
 import("system.result");
-import("system.neon");
 import("system.vars");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-    result.string(vars.get("$field.RECIPIENT"));
\ No newline at end of file
+if(vars.get("$field.RECIPIENT"))
+{
+    var res = "";
+    if (vars.exists("$param.Recipient_param") && vars.get("$param.Recipient_param"))
+        res = vars.get("$param.Recipient_param");
+    else if (vars.exists("$param.ContactId_param") && vars.get("$param.ContactId_param"))
+        res = CommUtil.getStandardMail(vars.get("$param.ContactId_param"));
+    
+    result.string(res);
+}
\ No newline at end of file
diff --git a/entity/Email_entity/entityfields/recipient/valueProcess.js b/entity/Email_entity/entityfields/recipient/valueProcess.js
index 0b715605584a88bb3436e29a08fc69651eb5efc8..13f68a3ed37b6a9fb973117f5743750c34f2a3b1 100644
--- a/entity/Email_entity/entityfields/recipient/valueProcess.js
+++ b/entity/Email_entity/entityfields/recipient/valueProcess.js
@@ -1,16 +1,14 @@
 import("Communication_lib");
 import("system.result");
-import("system.neon");
 import("system.vars");
 
 if (vars.get("$this.value") == null)
 {
+    var res = "";
     if (vars.exists("$param.Recipient_param") && vars.get("$param.Recipient_param"))
-        result.string(vars.get("$param.Recipient_param"));
+        res = vars.get("$param.Recipient_param");
     else if (vars.exists("$param.ContactId_param") && vars.get("$param.ContactId_param"))
-        result.string(CommUtil.getStandardMail(vars.get("$param.ContactId_param")));
-}
-else if (!vars.get("$this.value").includes("@") && vars.get("$this.value") != "")
-    result.string(newSelect("ADDR")
-                        .from("COMMUNICATION")
-                        .where("COMMUNICATION.COMMUNICATIONID", vars.get("$this.value")).cell());
\ No newline at end of file
+        res = CommUtil.getStandardMail(vars.get("$param.ContactId_param"));
+    
+    result.string(res);
+}
\ No newline at end of file
diff --git a/entity/EmployeeRole_entity/EmployeeRole_entity.aod b/entity/EmployeeRole_entity/EmployeeRole_entity.aod
index 8bf5d69b2368ae1236e0d8eedd86745dbfa9927f..a3ed777f95a55fdcb1a293e7ba64444d9eb0ebdb 100644
--- a/entity/EmployeeRole_entity/EmployeeRole_entity.aod
+++ b/entity/EmployeeRole_entity/EmployeeRole_entity.aod
@@ -26,6 +26,13 @@
       <name>EmployeeRoles</name>
       <targetContextField>TARGETCONTEXT</targetContextField>
       <targetIdField>UID</targetIdField>
+      <children>
+        <entityParameter>
+          <name>UserTitle_param</name>
+          <expose v="true" />
+          <mandatory v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>3bcec57a-7165-4773-9253-5ecab26ee3f4</name>
@@ -34,13 +41,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>UserTitle_param</name>
-          <expose v="true" />
-          <mandatory v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityField>
       <name>ROLE</name>
@@ -51,17 +51,17 @@
     </entityField>
     <entityConsumer>
       <name>Roles</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Role_entity</entityName>
-        <fieldName>FilteredRoles</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ExcludeRoles_param</name>
           <valueProcess>%aditoprj%/entity/EmployeeRole_entity/entityfields/roles/children/excluderoles_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Role_entity</entityName>
+        <fieldName>FilteredRoles</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>TARGETCONTEXT</name>
diff --git a/entity/Employee_entity/Employee_entity.aod b/entity/Employee_entity/Employee_entity.aod
index c6c1df49e89ca1dde5d9de14f50e8f38a120fe4c..c17ea53f45bca4ddb64fbf866dad9505601bb5b8 100644
--- a/entity/Employee_entity/Employee_entity.aod
+++ b/entity/Employee_entity/Employee_entity.aod
@@ -111,11 +111,6 @@
     <entityConsumer>
       <name>Attributes</name>
       <onValidation>%aditoprj%/entity/Employee_entity/entityfields/attributes/onValidation.js</onValidation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>AttributeRelations</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -126,6 +121,11 @@
           <valueProcess>%aditoprj%/entity/Employee_entity/entityfields/attributes/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>AttributeRelations</fieldName>
+      </dependency>
     </entityConsumer>
     <entityFieldGroup>
       <name>NAME_fieldGroup</name>
@@ -156,25 +156,20 @@
     </entityField>
     <entityConsumer>
       <name>EmployeeRoles</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>EmployeeRole_entity</entityName>
-        <fieldName>EmployeeRoles</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>UserTitle_param</name>
           <valueProcess>%aditoprj%/entity/Employee_entity/entityfields/employeeroles/children/usertitle_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>AttributeTree</name>
       <dependency>
         <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>TreeProvider</fieldName>
+        <entityName>EmployeeRole_entity</entityName>
+        <fieldName>EmployeeRoles</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>AttributeTree</name>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -185,15 +180,15 @@
           <valueProcess>%aditoprj%/entity/Employee_entity/entityfields/attributetree/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>TreeProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Documents</name>
       <selectionMode>MULTI</selectionMode>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>Documents</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentTable_param</name>
@@ -204,11 +199,22 @@
           <valueProcess>%aditoprj%/entity/Employee_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>Documents</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>Employees</name>
       <lookupIdfield>CONTACT_ID</lookupIdfield>
       <filterVariablesProcess>%aditoprj%/entity/Employee_entity/entityfields/employees/filterVariablesProcess.js</filterVariablesProcess>
+      <children>
+        <entityParameter>
+          <name>OnlyActives_param</name>
+          <valueProcess>%aditoprj%/entity/Employee_entity/entityfields/employees/children/onlyactives_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>0ca415b9-a940-424e-bee8-05c007b20659</name>
@@ -271,26 +277,20 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>OnlyActives_param</name>
-          <valueProcess>%aditoprj%/entity/Employee_entity/entityfields/employees/children/onlyactives_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityConsumer>
       <name>Departments</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Attribute_entity</entityName>
-        <fieldName>SpecificAttribute</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ParentId_param</name>
           <valueProcess>%aditoprj%/entity/Employee_entity/entityfields/departments/children/parentid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Attribute_entity</entityName>
+        <fieldName>SpecificAttribute</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>openAdminView</name>
@@ -301,17 +301,17 @@
     </entityActionField>
     <entityConsumer>
       <name>PossibleRoles</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Role_entity</entityName>
-        <fieldName>FilteredRoles</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ExcludeRoles_param</name>
           <valueProcess>%aditoprj%/entity/Employee_entity/entityfields/possibleroles/children/excluderoles_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Role_entity</entityName>
+        <fieldName>FilteredRoles</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>SHORT_UID</name>
@@ -352,31 +352,31 @@
     <entityConsumer>
       <name>MyPermission</name>
       <refreshParent v="false" />
-      <dependency>
-        <name>dependency</name>
-        <entityName>PermissionCalendar_entity</entityName>
-        <fieldName>Permissions</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>PermissionProcurer_param</name>
           <valueProcess>%aditoprj%/entity/Employee_entity/entityfields/mypermission/children/permissionprocurer_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>TheirPermissions</name>
       <dependency>
         <name>dependency</name>
         <entityName>PermissionCalendar_entity</entityName>
         <fieldName>Permissions</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>TheirPermissions</name>
       <children>
         <entityParameter>
           <name>PermissionDealer_param</name>
           <valueProcess>%aditoprj%/entity/Employee_entity/entityfields/theirpermissions/children/permissiondealer_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>PermissionCalendar_entity</entityName>
+        <fieldName>Permissions</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>PICTURE</name>
@@ -398,18 +398,22 @@
     </entityParameter>
     <entityConsumer>
       <name>EmployeeTokens</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>EmployeeToken_entity</entityName>
-        <fieldName>EmployeeTokenProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>employeeId_param</name>
           <valueProcess>%aditoprj%/entity/Employee_entity/entityfields/employeetokens/children/employeeid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>EmployeeToken_entity</entityName>
+        <fieldName>EmployeeTokenProvider</fieldName>
+      </dependency>
     </entityConsumer>
+    <entityParameter>
+      <name>EmployeeContactIdWhitelist_param</name>
+      <expose v="true" />
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
diff --git a/entity/Employee_entity/recordcontainers/jdito/contentProcess.js b/entity/Employee_entity/recordcontainers/jdito/contentProcess.js
index 42ea78f8cac66461da9ad093bf976729358f76db..8970fd6bd60fb0f744c14a2089ae5a213ef71702 100644
--- a/entity/Employee_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Employee_entity/recordcontainers/jdito/contentProcess.js
@@ -1,3 +1,4 @@
+import("system.logging");
 import("Sql_lib");
 import("system.db");
 import("Attribute_lib");
@@ -12,6 +13,10 @@ import("Employee_lib");
 var users;
 if (vars.exists("$local.idvalues") && vars.get("$local.idvalues"))
     users = tools.getUsersByAttribute(tools.NAME, vars.get("$local.idvalues"), tools.PROFILE_FULL);
+else if(vars.exists("$param.EmployeeContactIdWhitelist_param") && vars.get("$param.EmployeeContactIdWhitelist_param"))
+{
+    users = tools.getUsersByAttribute(tools.CONTACTID, JSON.parse(vars.get("$param.EmployeeContactIdWhitelist_param")), tools.PROFILE_DEFAULT);
+}
 else
 {
     var values = ["true", "false"];
diff --git a/entity/ExportTemplateField_entity/ExportTemplateField_entity.aod b/entity/ExportTemplateField_entity/ExportTemplateField_entity.aod
index e010ab9f6c122d2c7ece42f3c17cad5eb4ddae91..ae07c537a21b1bfa942f26a14123b266163f17b2 100644
--- a/entity/ExportTemplateField_entity/ExportTemplateField_entity.aod
+++ b/entity/ExportTemplateField_entity/ExportTemplateField_entity.aod
@@ -41,16 +41,9 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ExportTemplateField_param</name>
-          <valueProcess>%aditoprj%/entity/ExportTemplateField_entity/entityfields/exporttemplatefields/children/exporttemplatefield_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>ExportTemplateField_param</name>
-      <valueProcess>%aditoprj%/entity/ExportTemplateField_entity/entityfields/exporttemplatefield_param/valueProcess.js</valueProcess>
       <expose v="true" />
     </entityParameter>
     <entityField>
diff --git a/entity/ExportTemplateField_entity/entityfields/exporttemplatefield_param/valueProcess.js b/entity/ExportTemplateField_entity/entityfields/exporttemplatefield_param/valueProcess.js
deleted file mode 100644
index 3cbc49005642cf289c724b7b2de89a5db926e630..0000000000000000000000000000000000000000
--- a/entity/ExportTemplateField_entity/entityfields/exporttemplatefield_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.vars");
-import("system.result");
-
-result.string(vars.get("$field.EXPORTTEMPLATEID"));
\ No newline at end of file
diff --git a/entity/ExportTemplateField_entity/entityfields/exporttemplatefields/children/exporttemplatefield_param/valueProcess.js b/entity/ExportTemplateField_entity/entityfields/exporttemplatefields/children/exporttemplatefield_param/valueProcess.js
deleted file mode 100644
index 3cbc49005642cf289c724b7b2de89a5db926e630..0000000000000000000000000000000000000000
--- a/entity/ExportTemplateField_entity/entityfields/exporttemplatefields/children/exporttemplatefield_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.vars");
-import("system.result");
-
-result.string(vars.get("$field.EXPORTTEMPLATEID"));
\ No newline at end of file
diff --git a/entity/ExportTemplatePlaceOfUse_entity/ExportTemplatePlaceOfUse_entity.aod b/entity/ExportTemplatePlaceOfUse_entity/ExportTemplatePlaceOfUse_entity.aod
index 0dc5e1fc3a6ba07fa7a4b83bf0525011d9a81f57..91964c2b417efeb73c0e5c094a61fa6b57efe915 100644
--- a/entity/ExportTemplatePlaceOfUse_entity/ExportTemplatePlaceOfUse_entity.aod
+++ b/entity/ExportTemplatePlaceOfUse_entity/ExportTemplatePlaceOfUse_entity.aod
@@ -32,11 +32,6 @@
     </entityField>
     <entityConsumer>
       <name>ContextExportTemplatePlaceOfUse</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Context_entity</entityName>
-        <fieldName>ContextTemplatePlaceOfUse</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>InvertBlacklist_param</name>
@@ -47,15 +42,25 @@
           <valueProcess>%aditoprj%/entity/ExportTemplatePlaceOfUse_entity/entityfields/contextexporttemplateplaceofuse/children/blacklist_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Context_entity</entityName>
+        <fieldName>ContextTemplatePlaceOfUse</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ExportTemplatePlaceOfUse_param</name>
-      <valueProcess>%aditoprj%/entity/ExportTemplatePlaceOfUse_entity/entityfields/exporttemplateplaceofuse_param/valueProcess.js</valueProcess>
       <expose v="true" />
     </entityParameter>
     <entityProvider>
       <name>ExportTemplatePlaceOfUser</name>
       <documentation>%aditoprj%/entity/ExportTemplatePlaceOfUse_entity/entityfields/exporttemplateplaceofuser/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>ExportTemplatePlaceOfUse_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>c60a238a-51f0-4538-8c53-6921481ddd4c</name>
@@ -64,13 +69,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ExportTemplatePlaceOfUse_param</name>
-          <valueProcess>%aditoprj%/entity/ExportTemplatePlaceOfUse_entity/entityfields/exporttemplateplaceofuser/children/exporttemplateplaceofuse_param/valueProcess.js</valueProcess>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/ExportTemplatePlaceOfUse_entity/entityfields/exporttemplateplaceofuse_param/valueProcess.js b/entity/ExportTemplatePlaceOfUse_entity/entityfields/exporttemplateplaceofuse_param/valueProcess.js
deleted file mode 100644
index 3cbc49005642cf289c724b7b2de89a5db926e630..0000000000000000000000000000000000000000
--- a/entity/ExportTemplatePlaceOfUse_entity/entityfields/exporttemplateplaceofuse_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.vars");
-import("system.result");
-
-result.string(vars.get("$field.EXPORTTEMPLATEID"));
\ No newline at end of file
diff --git a/entity/ExportTemplatePlaceOfUse_entity/entityfields/exporttemplateplaceofuser/children/exporttemplateplaceofuse_param/valueProcess.js b/entity/ExportTemplatePlaceOfUse_entity/entityfields/exporttemplateplaceofuser/children/exporttemplateplaceofuse_param/valueProcess.js
deleted file mode 100644
index 3cbc49005642cf289c724b7b2de89a5db926e630..0000000000000000000000000000000000000000
--- a/entity/ExportTemplatePlaceOfUse_entity/entityfields/exporttemplateplaceofuser/children/exporttemplateplaceofuse_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.vars");
-import("system.result");
-
-result.string(vars.get("$field.EXPORTTEMPLATEID"));
\ No newline at end of file
diff --git a/entity/ExportTemplateSelection_entity/ExportTemplateSelection_entity.aod b/entity/ExportTemplateSelection_entity/ExportTemplateSelection_entity.aod
index 2840322c0f7c58e64da8ab5f42cd09ded6c47426..b8dcbc15cc2c0d02368ba2b6ffa60e8023e2c034 100644
--- a/entity/ExportTemplateSelection_entity/ExportTemplateSelection_entity.aod
+++ b/entity/ExportTemplateSelection_entity/ExportTemplateSelection_entity.aod
@@ -29,11 +29,6 @@
     </entityParameter>
     <entityConsumer>
       <name>ExportTemplateComsumer</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>ExportTemplate_entity</entityName>
-        <fieldName>ExportTemplateIDs</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ExportTemplateIDs_param</name>
@@ -44,6 +39,11 @@
           <valueProcess>%aditoprj%/entity/ExportTemplateSelection_entity/entityfields/exporttemplatecomsumer/children/comingfrom_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>ExportTemplate_entity</entityName>
+        <fieldName>ExportTemplateIDs</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>UID</name>
diff --git a/entity/ExportTemplate_entity/ExportTemplate_entity.aod b/entity/ExportTemplate_entity/ExportTemplate_entity.aod
index a38388bbd5de723db021a3cb15d5d40cb1322e35..65ba57734b719cca9d227313c6557010d0812147 100644
--- a/entity/ExportTemplate_entity/ExportTemplate_entity.aod
+++ b/entity/ExportTemplate_entity/ExportTemplate_entity.aod
@@ -61,6 +61,7 @@
     <entityField>
       <name>DESCRIPTION</name>
       <title>Description</title>
+      <contentType>LONG_TEXT</contentType>
     </entityField>
     <entityConsumer>
       <name>Languages</name>
@@ -73,11 +74,6 @@
     <entityConsumer>
       <name>ExportTemplateFields</name>
       <state>EDITABLE</state>
-      <dependency>
-        <name>dependency</name>
-        <entityName>ExportTemplateField_entity</entityName>
-        <fieldName>ExportTemplateFields</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ExportTemplateField_param</name>
@@ -86,6 +82,11 @@
           <documentation>%aditoprj%/entity/ExportTemplate_entity/entityfields/exporttemplatefields/children/exporttemplatefield_param/documentation.adoc</documentation>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>ExportTemplateField_entity</entityName>
+        <fieldName>ExportTemplateFields</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ExportTemplateIDs_param</name>
@@ -94,11 +95,6 @@
     </entityParameter>
     <entityConsumer>
       <name>ExportTemplateplaceOfUseCon</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>ExportTemplatePlaceOfUse_entity</entityName>
-        <fieldName>ExportTemplatePlaceOfUser</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ExportTemplatePlaceOfUse_param</name>
@@ -106,11 +102,23 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>ExportTemplatePlaceOfUse_entity</entityName>
+        <fieldName>ExportTemplatePlaceOfUser</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>ExportTemplateIDs</name>
       <documentation>%aditoprj%/entity/ExportTemplate_entity/entityfields/exporttemplateids/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
+      <children>
+        <entityParameter>
+          <name>ExportTemplateIDs_param</name>
+          <valueProcess>%aditoprj%/entity/ExportTemplate_entity/entityfields/exporttemplateids/children/exporttemplateids_param/valueProcess.js</valueProcess>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>1b692618-b800-47ae-a48c-3d4164d68401</name>
@@ -119,13 +127,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ExportTemplateIDs_param</name>
-          <valueProcess>%aditoprj%/entity/ExportTemplate_entity/entityfields/exporttemplateids/children/exporttemplateids_param/valueProcess.js</valueProcess>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>comingFrom_param</name>
@@ -153,6 +154,13 @@
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
     </entityProvider>
+    <entityActionField>
+      <name>openAdminView</name>
+      <title>Open admin view</title>
+      <onActionProcess>%aditoprj%/entity/ExportTemplate_entity/entityfields/openadminview/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:CURLY_BRACKETS</iconId>
+      <stateProcess>%aditoprj%/entity/ExportTemplate_entity/entityfields/openadminview/stateProcess.js</stateProcess>
+    </entityActionField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -160,6 +168,7 @@
       <alias>Data_alias</alias>
       <isReadOnly v="false" />
       <conditionProcess>%aditoprj%/entity/ExportTemplate_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <onDBDelete>%aditoprj%/entity/ExportTemplate_entity/recordcontainers/db/onDBDelete.js</onDBDelete>
       <linkInformation>
         <linkInformation>
           <name>ce410f40-846b-43e6-9c30-150393cee43d</name>
diff --git a/entity/ExportTemplate_entity/entityfields/openadminview/onActionProcess.js b/entity/ExportTemplate_entity/entityfields/openadminview/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..34ed41f947d2483b4ed77b2b949dcc8d435338be
--- /dev/null
+++ b/entity/ExportTemplate_entity/entityfields/openadminview/onActionProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("Context_lib");
+
+AdminViewUtils.open("EXPORTTEMPLATEID", ["DATE_NEW", "DATE_EDIT", "USER_NEW", "USER_EDIT"]);
\ No newline at end of file
diff --git a/entity/ExportTemplate_entity/entityfields/openadminview/stateProcess.js b/entity/ExportTemplate_entity/entityfields/openadminview/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..38f2298db7304b4d44a15fbad7f720558c02da99
--- /dev/null
+++ b/entity/ExportTemplate_entity/entityfields/openadminview/stateProcess.js
@@ -0,0 +1,4 @@
+import("Context_lib");
+import("system.result");
+
+result.string(AdminViewUtils.getActionState());
\ No newline at end of file
diff --git a/entity/ExportTemplate_entity/recordcontainers/db/onDBDelete.js b/entity/ExportTemplate_entity/recordcontainers/db/onDBDelete.js
new file mode 100644
index 0000000000000000000000000000000000000000..571ed49a75e9c390650c56139d99139532a32649
--- /dev/null
+++ b/entity/ExportTemplate_entity/recordcontainers/db/onDBDelete.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("Sql_lib");
+
+var exportTemplateId = vars.get("$local.uid");
+
+newWhere("EXPORTTEMPLATEPLACEOFUSE.EXPORTTEMPLATE_ID", exportTemplateId).deleteData();
+newWhere("EXPORTTEMPLATESELECTION.EXPORTTEMPLATE_ID", exportTemplateId).deleteData();
+newWhere("EXPORTTEMPLATEFIELD.EXPORTTEMPLATE_ID", exportTemplateId).deleteData();
\ No newline at end of file
diff --git a/entity/Favorite_entity/recordcontainers/jditorecordcontainer/contentProcess.js b/entity/Favorite_entity/recordcontainers/jditorecordcontainer/contentProcess.js
index 3bf9fefa02cb04a9da8583c410e0f8c4782fc974..eafabfcf64d2ef9eaea73303673e6b186e7ab184 100644
--- a/entity/Favorite_entity/recordcontainers/jditorecordcontainer/contentProcess.js
+++ b/entity/Favorite_entity/recordcontainers/jditorecordcontainer/contentProcess.js
@@ -127,10 +127,17 @@ function buildFavorites(favos, objecttype)
     loadConfig.uids(ids);
     loadConfig.count(200);
     loadConfig.fields(["#CONTENTTITLE", "#IMAGE", "#UID"]);
-    var loadedRows = entities.getRows(loadConfig);
     
-    for(z = 0; z < loadedRows.length; z++)
-        getFavoriteWith(loadedRows[z], builtFavos, favos, loadedRows[z]["#UID"], objecttype);
+    try {
+        var loadedRows = entities.getRows(loadConfig);
+
+        for(z = 0; z < loadedRows.length; z++)
+            getFavoriteWith(loadedRows[z], builtFavos, favos, loadedRows[z]["#UID"], objecttype);
+
+    } catch(e)
+    {
+        //maybe a missing permission for entity
+    }
     
     return builtFavos;
 }
diff --git a/entity/Forecast_entity/Forecast_entity.aod b/entity/Forecast_entity/Forecast_entity.aod
index f553dde8f46895a3f1a215e1bcf33825610c8009..7487314f3553b288e9711c5c4bf89961a3aeb295 100644
--- a/entity/Forecast_entity/Forecast_entity.aod
+++ b/entity/Forecast_entity/Forecast_entity.aod
@@ -53,11 +53,6 @@
     </entityField>
     <entityConsumer>
       <name>KeywordProductGroupcodes</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -65,6 +60,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>OBJECT_TYPE</name>
@@ -75,11 +75,6 @@
     </entityField>
     <entityConsumer>
       <name>Objects</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Object_entity</entityName>
-        <fieldName>AllObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
@@ -88,6 +83,11 @@
           <mandatory v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Object_entity</entityName>
+        <fieldName>AllObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Contexts</name>
@@ -171,10 +171,6 @@
           <name>OBJECT_ROWID.value</name>
           <recordfield>FORECAST.OBJECT_ROWID</recordfield>
         </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>OBJECT_ROWID.displayValue</name>
-          <expression>%aditoprj%/entity/Forecast_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js</expression>
-        </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>OBJECT_TYPE.value</name>
           <recordfield>FORECAST.OBJECT_TYPE</recordfield>
diff --git a/entity/Forecast_entity/entityfields/object_rowid/displayValueProcess.js b/entity/Forecast_entity/entityfields/object_rowid/displayValueProcess.js
index 8b080bceea92c146a676b0f33cc7cb87d4e86b9d..95c4eea5367140dc2d81e470ba0607adf52f07c1 100644
--- a/entity/Forecast_entity/entityfields/object_rowid/displayValueProcess.js
+++ b/entity/Forecast_entity/entityfields/object_rowid/displayValueProcess.js
@@ -7,5 +7,5 @@ import("Context_lib");
 if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$field.OBJECT_ROWID")) {
     result.string("");
 } else if (vars.exists("$field.OBJECT_TYPE") && vars.get("$field.OBJECT_TYPE")) {
-    result.string(db.cell(ContextUtils.getNameSql(vars.get("$field.OBJECT_TYPE"), vars.get("$field.OBJECT_ROWID"))));
+    result.string(ContextUtils.getTitleByContext(vars.get("$field.OBJECT_TYPE"), vars.get("$field.OBJECT_ROWID")));
 }
\ No newline at end of file
diff --git a/entity/Forecast_entity/recordcontainers/db/conditionProcess.js b/entity/Forecast_entity/recordcontainers/db/conditionProcess.js
index a4ec94640015904a7560453161e2cab3a49c2320..0c0805ca63787abe761e25b34fa860f9cb5c820d 100644
--- a/entity/Forecast_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Forecast_entity/recordcontainers/db/conditionProcess.js
@@ -7,5 +7,4 @@ var cond = newWhere()
             .andIfSet("FORECAST.OBJECT_ROWID", "$param.ObjectRowId_param")
             .andIfSet("FORECAST.OBJECT_TYPE", "$param.ObjectType_param");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Forecast_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js b/entity/Forecast_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js
deleted file mode 100644
index 33554680cccd2c3d363443686457c41e0c1c5729..0000000000000000000000000000000000000000
--- a/entity/Forecast_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.result");
-import("Context_lib");
-
-result.string(ContextUtils.getNameSubselectSql("OBJECT_TYPE", "OBJECT_ROWID"))
\ No newline at end of file
diff --git a/entity/ImportField_Entity/ImportField_Entity.aod b/entity/ImportField_Entity/ImportField_Entity.aod
index cb5bb3fb6434c7a789b8d105cc18d40891bfd3f5..8b47e84bc5da830c573bd68818dceb0f58ad71f3 100644
--- a/entity/ImportField_Entity/ImportField_Entity.aod
+++ b/entity/ImportField_Entity/ImportField_Entity.aod
@@ -72,17 +72,17 @@
     </entityParameter>
     <entityConsumer>
       <name>KeywordImportFields</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/ImportField_Entity/entityfields/keywordimportfields/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod b/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod
index 81be338ad3887462424137b8445aaeef00347076..16bede930f35ec4d63ade98263a7b0b2ccb29d1a 100644
--- a/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod
+++ b/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod
@@ -51,6 +51,13 @@
       <name>AttributesForKeywordEntry</name>
       <titlePlural></titlePlural>
       <recordContainer>db</recordContainer>
+      <children>
+        <entityParameter>
+          <name>KeywordEntryId_param</name>
+          <expose v="true" />
+          <mandatory v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>490d12c0-6ace-42e5-89e1-d40b25322161</name>
@@ -59,13 +66,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>KeywordEntryId_param</name>
-          <expose v="true" />
-          <mandatory v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>ContainerName_param</name>
@@ -75,11 +75,6 @@
     </entityParameter>
     <entityConsumer>
       <name>KeywordAttributes</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordAttribute_entity</entityName>
-        <fieldName>SpecificContainerKeyword</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -92,6 +87,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordAttribute_entity</entityName>
+        <fieldName>SpecificContainerKeyword</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>KeywordEntryId_param</name>
diff --git a/entity/KeywordAttributeRelation_entity/recordcontainers/db/conditionProcess.js b/entity/KeywordAttributeRelation_entity/recordcontainers/db/conditionProcess.js
index 88a371d623036551c0e883501e7ce2fbb7467852..08a73e065351292b94799258ed901ef6689197e1 100644
--- a/entity/KeywordAttributeRelation_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/KeywordAttributeRelation_entity/recordcontainers/db/conditionProcess.js
@@ -6,5 +6,4 @@ import("Sql_lib");
 
 var cond = newWhereIfSet("AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ENTRY_ID", "$param.KeywordEntryId_param");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod b/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod
index 660467e301eb5004b4aca71e1aa786ba5d0df3cc..13cb14c44b1c2b480f27cd3e54c51a2fd6b0af97 100644
--- a/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod
+++ b/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod
@@ -69,11 +69,6 @@
     </entityParameter>
     <entityConsumer>
       <name>KeywordAttributeTypes</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -81,6 +76,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/KeywordAttribute_entity/recordcontainers/db/conditionProcess.js b/entity/KeywordAttribute_entity/recordcontainers/db/conditionProcess.js
index 823c3d4a9247760a8f02f2a715291b64e32315b4..15f1ee62a401226343c96a26c3a7b084e07a843b 100644
--- a/entity/KeywordAttribute_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/KeywordAttribute_entity/recordcontainers/db/conditionProcess.js
@@ -16,5 +16,4 @@ if (entryIdForFilter)
                 SqlBuilder.NOT_IN())
 }
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
index ad9c6c66275b74b098addef8c4d4ed2ca621cb5c..3472852e89848b764ea1dc9a2525a2e6bc300530 100644
--- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod
+++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod
@@ -95,7 +95,19 @@
     <entityProvider>
       <name>SpecificContainerKeywords</name>
       <lookupIdfield>KEYID</lookupIdfield>
+      <documentation>%aditoprj%/entity/KeywordEntry_entity/entityfields/specificcontainerkeywords/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
+      <children>
+        <entityParameter>
+          <name>OnlyActives_param</name>
+          <valueProcess>%aditoprj%/entity/KeywordEntry_entity/entityfields/specificcontainerkeywords/children/onlyactives_param/valueProcess.js</valueProcess>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>bb48a3ee-f340-4fd4-8c80-ef73b765ab58</name>
@@ -589,18 +601,13 @@
           <fieldName>KeywordVisitRecommendationSource</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>10ced13f-78ae-4e99-a315-82f1f7389029</name>
+          <entityName>CampaignStep_entity</entityName>
+          <fieldName>KeywordStepMedium</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>OnlyActives_param</name>
-          <valueProcess>%aditoprj%/entity/KeywordEntry_entity/entityfields/specificcontainerkeywords/children/onlyactives_param/valueProcess.js</valueProcess>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>ContainerName_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityField>
       <name>TITLE_TRANSLATED</name>
@@ -615,11 +622,6 @@
     <entityConsumer>
       <name>KeywordAttributeRelations</name>
       <onValidation>%aditoprj%/entity/KeywordEntry_entity/entityfields/keywordattributerelations/onValidation.js</onValidation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordAttributeRelation_entity</entityName>
-        <fieldName>AttributesForKeywordEntry</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>KeywordEntryId_param</name>
@@ -627,6 +629,11 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordAttributeRelation_entity</entityName>
+        <fieldName>AttributesForKeywordEntry</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ExcludedKeyIdsSubquery_param</name>
diff --git a/entity/KeywordEntry_entity/entityfields/specificcontainerkeywords/documentation.adoc b/entity/KeywordEntry_entity/entityfields/specificcontainerkeywords/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..0525588e240333d63a3e3b76b2c9bfb08d14dc54
--- /dev/null
+++ b/entity/KeywordEntry_entity/entityfields/specificcontainerkeywords/documentation.adoc
@@ -0,0 +1,3 @@
+= SpecificContainerKeywords
+
+Delivers only keywords of a specific container for a keyword selection.
\ No newline at end of file
diff --git a/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js b/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js
index 6fcb81de353b15da6987c4a057a54535f2d1fcbb..c2921e933fff759455fdd5adefee3f8731fe79d3 100644
--- a/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/KeywordEntry_entity/recordcontainers/db/conditionProcess.js
@@ -23,5 +23,4 @@ if (vars.getString("$param.WhitelistIds_param"))
         cond.noResult(); // force empty result if whitelist is empty
 }
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
diff --git a/entity/KnowledgeDiscussion_entity/KnowledgeDiscussion_entity.aod b/entity/KnowledgeDiscussion_entity/KnowledgeDiscussion_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..81246e32ac3a583b322226484c6a2b62a406c5ea
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/KnowledgeDiscussion_entity.aod
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
+  <name>KnowledgeDiscussion_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/KnowledgeDiscussion_entity/documentation.adoc</documentation>
+  <title>Discussion</title>
+  <grantCreateProcess>%aditoprj%/entity/KnowledgeDiscussion_entity/grantCreateProcess.js</grantCreateProcess>
+  <grantUpdateProcess>%aditoprj%/entity/KnowledgeDiscussion_entity/grantUpdateProcess.js</grantUpdateProcess>
+  <grantDeleteProcess>%aditoprj%/entity/KnowledgeDiscussion_entity/grantDeleteProcess.js</grantDeleteProcess>
+  <iconIdProcess>%aditoprj%/entity/KnowledgeDiscussion_entity/iconIdProcess.js</iconIdProcess>
+  <titlePlural>Discussions</titlePlural>
+  <recordContainer>JDito_KnowledgeDiscussionContainer</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>DISCUSSIONTEXT</name>
+      <title>Discussion</title>
+      <contentType>LONG_TEXT</contentType>
+    </entityField>
+    <entityField>
+      <name>KNOWLEDGEMANAGEMENT_ID</name>
+      <valueProcess>%aditoprj%/entity/KnowledgeDiscussion_entity/entityfields/knowledgemanagement_id/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>AUTHOR</name>
+      <title>Author</title>
+      <valueProcess>%aditoprj%/entity/KnowledgeDiscussion_entity/entityfields/author/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>STATUS</name>
+      <title>Status</title>
+      <consumer>StatusKeyword</consumer>
+      <valueProcess>%aditoprj%/entity/KnowledgeDiscussion_entity/entityfields/status/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>USER_NEW</name>
+    </entityField>
+    <entityField>
+      <name>USER_EDIT</name>
+    </entityField>
+    <entityField>
+      <name>DATE_NEW</name>
+      <title>new</title>
+      <contentType>DATE</contentType>
+      <valueProcess>%aditoprj%/entity/KnowledgeDiscussion_entity/entityfields/date_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_EDIT</name>
+      <title>edited</title>
+      <contentType>DATE</contentType>
+      <valueProcess>%aditoprj%/entity/KnowledgeDiscussion_entity/entityfields/date_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>PARENTENTRY</name>
+    </entityField>
+    <entityField>
+      <name>ICON</name>
+      <title>Icon</title>
+      <contentType>IMAGE</contentType>
+    </entityField>
+    <entityConsumer>
+      <name>StatusKeyword</name>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/KnowledgeDiscussion_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>OnlyActives_param</name>
+          <valueProcess>%aditoprj%/entity/KnowledgeDiscussion_entity/entityfields/statuskeyword/children/onlyactives_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityProvider>
+      <name>ByKnowledgeId</name>
+      <documentation>%aditoprj%/entity/KnowledgeDiscussion_entity/entityfields/byknowledgeid/documentation.adoc</documentation>
+      <dependencies>
+        <entityDependency>
+          <name>fbacb136-2690-495a-82c5-b6ab1576d3f9</name>
+          <entityName>KnowledgeManagement_entity</entityName>
+          <fieldName>DiscussionsByKnowledgeId</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityParameter>
+      <name>KnowledgeId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityActionGroup>
+      <name>Edit_ActionGroup</name>
+      <title>Edit</title>
+      <children>
+        <entityActionField>
+          <name>addAnswer_action</name>
+          <title>Reply</title>
+          <onActionProcess>%aditoprj%/entity/KnowledgeDiscussion_entity/entityfields/edit_actiongroup/children/addanswer_action/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+          <isSelectionAction v="true" />
+          <iconId>VAADIN:COMMENT_O</iconId>
+          <tooltip>Adds an answer to the selected discussion</tooltip>
+        </entityActionField>
+        <entityActionField>
+          <name>toggleDiscussionStatus_action</name>
+          <title>Toggle status</title>
+          <onActionProcess>%aditoprj%/entity/KnowledgeDiscussion_entity/entityfields/edit_actiongroup/children/togglediscussionstatus_action/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+          <isSelectionAction v="true" />
+          <iconId>VAADIN:LOCK</iconId>
+          <tooltip>Toggles the status of  selected discussion between open and closed</tooltip>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
+    <entityParameter>
+      <name>ParentId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>RowCount_param</name>
+    </entityParameter>
+    <entityField>
+      <name>nodeType</name>
+    </entityField>
+    <entityField>
+      <name>showAll</name>
+      <contentType>BOOLEAN</contentType>
+    </entityField>
+    <entityField>
+      <name>discussionTitle</name>
+      <title>Last change</title>
+    </entityField>
+    <entityField>
+      <name>UID</name>
+    </entityField>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+  </entityFields>
+  <recordContainers>
+    <jDitoRecordContainer>
+      <name>JDito_KnowledgeDiscussionContainer</name>
+      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
+      <isPageable v="false" />
+      <isFilterable v="true" />
+      <isRequireContainerFiltering v="true" />
+      <isSortable v="false" />
+      <contentProcess>%aditoprj%/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/contentProcess.js</contentProcess>
+      <rowCountProcess>%aditoprj%/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/rowCountProcess.js</rowCountProcess>
+      <hasDependentRecords v="true" />
+      <onInsert>%aditoprj%/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/onInsert.js</onInsert>
+      <onUpdate>%aditoprj%/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/onUpdate.js</onUpdate>
+      <onDelete>%aditoprj%/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/onDelete.js</onDelete>
+      <recordFieldMappings>
+        <jDitoRecordFieldMapping>
+          <name>UID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>PARENTENTRY.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>KNOWLEDGEMANAGEMENT_ID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>AUTHOR.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>DISCUSSIONTEXT.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>STATUS.value</name>
+          <isFilterable v="true" />
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>STATUS.displayValue</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>DATE_NEW.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>DATE_EDIT.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>USER_NEW.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>USER_EDIT.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>AUTHOR.displayValue</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ICON.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>nodeType.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>discussionTitle.value</name>
+        </jDitoRecordFieldMapping>
+      </recordFieldMappings>
+    </jDitoRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/KnowledgeDiscussion_entity/documentation.adoc b/entity/KnowledgeDiscussion_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..d2fa0a728ff196aa8dba9163da1aefd62fd12eb1
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/documentation.adoc
@@ -0,0 +1,3 @@
+This entity manages the discussion "forum" which is linked to a knowledge entry
+It uses a JDito recordcontainer to build the tree.
+The tree is always sorted by latest action. So the dicussion where an answer was added last, is put on top
\ No newline at end of file
diff --git a/entity/KnowledgeDiscussion_entity/entityfields/author/valueProcess.js b/entity/KnowledgeDiscussion_entity/entityfields/author/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2301fca2d43398da856f6cde418bed45abb1aca7
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/entityfields/author/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+if(vars.get("$this.value") === null && vars.get("$sys.recordstate") === neon.OPERATINGSTATE_NEW)
+{
+    result.string(vars.get("$sys.user"));
+}
\ No newline at end of file
diff --git a/entity/KnowledgeDiscussion_entity/entityfields/byknowledgeid/documentation.adoc b/entity/KnowledgeDiscussion_entity/entityfields/byknowledgeid/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..f57edf8c453eebabc900ee3944e040bccc7154f0
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/entityfields/byknowledgeid/documentation.adoc
@@ -0,0 +1,3 @@
+This provider needs the id of a knowledge entry to deliver all discussions of it
+
+Always fill KnowledgeId_param
\ No newline at end of file
diff --git a/entity/KnowledgeDiscussion_entity/entityfields/date_edit/valueProcess.js b/entity/KnowledgeDiscussion_entity/entityfields/date_edit/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..090ae91afeada702f00db3cb657dfcac0d63650b
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/entityfields/date_edit/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+import("system.datetime");
+
+if(vars.get("$sys.recordstate") === neon.OPERATINGSTATE_EDIT)
+    result.string(datetime.date());
\ No newline at end of file
diff --git a/entity/KnowledgeDiscussion_entity/entityfields/date_new/valueProcess.js b/entity/KnowledgeDiscussion_entity/entityfields/date_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..cb4f3c1d5a116427fe672eb6973e64a206b312f1
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/entityfields/date_new/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.datetime");
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+if(vars.get("$sys.recordstate") === neon.OPERATINGSTATE_NEW)
+    result.string(datetime.date());
\ No newline at end of file
diff --git a/entity/KnowledgeDiscussion_entity/entityfields/edit_actiongroup/children/addanswer_action/onActionProcess.js b/entity/KnowledgeDiscussion_entity/entityfields/edit_actiongroup/children/addanswer_action/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..014090f103f492b497d4c4aec743a7108ad3eb0a
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/entityfields/edit_actiongroup/children/addanswer_action/onActionProcess.js
@@ -0,0 +1,9 @@
+import("system.vars");
+import("system.neon");
+
+var params = {
+    "KnowledgeId_param":vars.get("$param.KnowledgeId_param")
+    ,"ParentId_param":vars.get("$field.UID")
+}
+
+neon.openContext("KnowledgeDiscussion", "KnowledgeDiscussionEdit_view", null, neon.OPERATINGSTATE_NEW, params);
\ No newline at end of file
diff --git a/entity/KnowledgeDiscussion_entity/entityfields/edit_actiongroup/children/togglediscussionstatus_action/onActionProcess.js b/entity/KnowledgeDiscussion_entity/entityfields/edit_actiongroup/children/togglediscussionstatus_action/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..79943300955b21920d3260068e2b4b3dde93e69c
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/entityfields/edit_actiongroup/children/togglediscussionstatus_action/onActionProcess.js
@@ -0,0 +1,12 @@
+import("KnowledgeManagement_lib");
+import("KeywordRegistry_basic");
+import("system.vars");
+import("system.neon");
+
+var status = (vars.get("$field.STATUS") == $KeywordRegistry.discussionStatus$acitve()) 
+             ? $KeywordRegistry.discussionStatus$closed() 
+             : $KeywordRegistry.discussionStatus$acitve();
+
+KnowledgeDiscussion.getInstance(vars.get("$param.KnowledgeId_param"))
+                   .setDiscussionStatus(vars.get("$field.UID"), status);
+neon.refresh();
\ No newline at end of file
diff --git a/entity/KnowledgeDiscussion_entity/entityfields/knowledgemanagement_id/valueProcess.js b/entity/KnowledgeDiscussion_entity/entityfields/knowledgemanagement_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3204947cd26a0f50de3268f8be7ab8ce6ea654d1
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/entityfields/knowledgemanagement_id/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("system.result");
+
+if(vars.exists("$param.KnowledgeId_param") 
+                && vars.get("$param.KnowledgeId_param") 
+                && vars.get("$this.value") === null)
+    result.string(vars.get("$param.KnowledgeId_param"));
\ No newline at end of file
diff --git a/entity/KnowledgeDiscussion_entity/entityfields/status/valueProcess.js b/entity/KnowledgeDiscussion_entity/entityfields/status/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..051fa1deb287bb12bddf8b7a57015bdb2cf74677
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/entityfields/status/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+import("KeywordRegistry_basic");
+
+if(vars.get("$this.value") === null && vars.get("$sys.recordstate") === neon.OPERATINGSTATE_NEW)
+    result.string($KeywordRegistry.discussionStatus$acitve());
\ No newline at end of file
diff --git a/entity/KnowledgeDiscussion_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js b/entity/KnowledgeDiscussion_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..10532b30b86375408acb062445dccc28b4d9a8a5
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("KeywordRegistry_basic");
+import("system.result");
+
+result.string($KeywordRegistry.discussionStatus());
\ No newline at end of file
diff --git a/entity/Attribute_entity/entityfields/contexts/children/getallcontexts_param/valueProcess.js b/entity/KnowledgeDiscussion_entity/entityfields/statuskeyword/children/onlyactives_param/valueProcess.js
similarity index 100%
rename from entity/Attribute_entity/entityfields/contexts/children/getallcontexts_param/valueProcess.js
rename to entity/KnowledgeDiscussion_entity/entityfields/statuskeyword/children/onlyactives_param/valueProcess.js
diff --git a/entity/KnowledgeDiscussion_entity/grantCreateProcess.js b/entity/KnowledgeDiscussion_entity/grantCreateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..241a88da0b592ff695a2b6182e867a75cf8460b6
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/grantCreateProcess.js
@@ -0,0 +1,18 @@
+import("system.logging");
+import("system.vars");
+import("system.result");
+import("KnowledgeManagement_lib");
+import("KeywordRegistry_basic");
+
+var status = KnowledgeUtils.trimAndUp(vars.get("$field.STATUS"));
+var parent = vars.exists("$param.ParentId_param") && vars.get("$param.ParentId_param");
+
+var cond = (
+    (
+        status == KnowledgeUtils.trimAndUp($KeywordRegistry.discussionStatus$acitve())
+        ||
+        status == ""
+    )  
+);
+
+result.string(cond);
\ No newline at end of file
diff --git a/entity/KnowledgeDiscussion_entity/grantDeleteProcess.js b/entity/KnowledgeDiscussion_entity/grantDeleteProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b76b609eeb198e6c199d261a5d4760d685b4c0a1
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/grantDeleteProcess.js
@@ -0,0 +1,24 @@
+import("system.vars");
+import("system.result");
+import("KnowledgeManagement_lib");
+import("KeywordRegistry_basic");
+
+var hasChildren = KnowledgeDiscussion.hasChildren(vars.get("$field.UID"));
+var status = vars.get("$field.STATUS");
+var user = vars.get("$sys.user");
+var author = vars.get("$field.AUTHOR");
+//As long as it doesn't have children AND ( ((author == user) and status == active) OR user is academy)
+var cond = (
+    !hasChildren
+    &&
+    (
+        (
+            KnowledgeUtils.trimAndUp(author) === KnowledgeUtils.trimAndUp(user) 
+            && ( KnowledgeUtils.trimAndUp(status) === KnowledgeUtils.trimAndUp($KeywordRegistry.discussionStatus$acitve().slice(0)))
+        )
+        ||
+        KnowledgeUtils.isAcademy(user)
+    )
+);
+
+result.string(cond);
\ No newline at end of file
diff --git a/entity/KnowledgeDiscussion_entity/grantUpdateProcess.js b/entity/KnowledgeDiscussion_entity/grantUpdateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..07664375a4dd09efc3c2f5c5ba428b9adf1f5b7b
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/grantUpdateProcess.js
@@ -0,0 +1,30 @@
+import("system.vars");
+import("system.result");
+import("KeywordRegistry_basic");
+import("KnowledgeManagement_lib");
+
+var user = vars.get("$sys.user");
+var author = vars.get("$field.AUTHOR");
+var status = vars.get("$field.STATUS");
+
+
+
+//if (author == user and status == active) OR user is of role "academy" allow edit
+var cond = (
+    (
+        KnowledgeUtils.trimAndUp(author) === KnowledgeUtils.trimAndUp(user) 
+        && ( KnowledgeUtils.trimAndUp(status) === KnowledgeUtils.trimAndUp($KeywordRegistry.discussionStatus$acitve().slice(0)))
+    )
+    ||
+    KnowledgeUtils.isAcademy(user)
+);
+
+/*
+ * (
+    author === user
+    &&
+    status === $KeywordRegistry.discussionStatus$acitve()
+);
+ */
+
+result.string(cond);
\ No newline at end of file
diff --git a/entity/KnowledgeDiscussion_entity/iconIdProcess.js b/entity/KnowledgeDiscussion_entity/iconIdProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f86b12ac2a9815380d0355d333a56acb87083bb0
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/iconIdProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.ICON"));
\ No newline at end of file
diff --git a/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/contentProcess.js b/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/contentProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ea4631c51b75573cd3141a5fd97c8c8060fc5f42
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/contentProcess.js
@@ -0,0 +1,14 @@
+import("JditoFilter_lib");
+import("KnowledgeManagement_lib");
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+var kId = vars.exists("$param.KnowledgeId_param") && vars.get("$param.KnowledgeId_param");
+
+var idValues = vars.exists("$local.idvalues") && vars.get("$local.idvalues");
+var filterCondition = new FilterSqlTranslator(vars.get("$local.filter"), "KNOWLEDGEDISCUSSION").getSqlCondition();
+
+var discussions = KnowledgeDiscussion.getInstance(kId);    
+var retData = discussions.buildCompleteTree(filterCondition, idValues).data;
+result.object(retData);
\ No newline at end of file
diff --git a/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/onDelete.js b/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/onDelete.js
new file mode 100644
index 0000000000000000000000000000000000000000..8493a27873be85550c508c18b535f6ddb7844ad4
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/onDelete.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("system.result");
+import("KnowledgeManagement_lib");
+
+KnowledgeDiscussion.getInstance(vars.get("$field.KNOWLEDGEMANAGEMENT_ID"))
+                   .deleteDiscussion(vars.get("$local.uid"));
\ No newline at end of file
diff --git a/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/onInsert.js b/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/onInsert.js
new file mode 100644
index 0000000000000000000000000000000000000000..350267a4b0634fc24b6cad0370cbaf9c932cc4f3
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/onInsert.js
@@ -0,0 +1,9 @@
+import("system.vars");
+import("system.result");
+import("KnowledgeManagement_lib");
+
+var parent = vars.exists("$param.ParentId_param") && vars.get("$param.ParentId_param");
+
+KnowledgeDiscussion.getInstance(vars.get("$param.KnowledgeId_param"))
+                   .addDiscussion(parent
+                                 ,vars.get("$local.rowdata"));
\ No newline at end of file
diff --git a/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/onUpdate.js b/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/onUpdate.js
new file mode 100644
index 0000000000000000000000000000000000000000..dbd17c4439fd624cff63481d8aace9983b8a4fa5
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/onUpdate.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.result");
+import("KnowledgeManagement_lib");
+
+KnowledgeDiscussion.getInstance(vars.get("$field.KNOWLEDGEMANAGEMENT_ID"))
+                   .editDiscussion(vars.get("$local.uid")
+                                    , vars.get("$local.rowdata")
+                                    , vars.get("$local.changed"));
\ No newline at end of file
diff --git a/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/rowCountProcess.js b/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/rowCountProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ceb82cc107097c83f8a907f842e5ed320e255490
--- /dev/null
+++ b/entity/KnowledgeDiscussion_entity/recordcontainers/jdito_knowledgediscussioncontainer/rowCountProcess.js
@@ -0,0 +1,17 @@
+import("KnowledgeManagement_lib");
+import("JditoFilter_lib");
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+var kId = vars.exists("$param.KnowledgeId_param") && vars.get("$param.KnowledgeId_param");
+
+var idValues = vars.exists("$local.idvalues") && vars.get("$local.idvalues");
+var filterCondition = new FilterSqlTranslator(vars.get("$local.filter"), "KNOWLEDGEDISCUSSION").getSqlCondition();
+
+if(kId)
+{
+    var discussions = KnowledgeDiscussion.getInstance(kId);    
+    var retData = discussions.getDatasetCount(filterCondition, idValues);
+    result.object(retData);
+}
\ No newline at end of file
diff --git a/entity/KnowledgeLink_entity/KnowledgeLink_entity.aod b/entity/KnowledgeLink_entity/KnowledgeLink_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..e77405dfb6540f4ce466f897ed6bb42fd94866c1
--- /dev/null
+++ b/entity/KnowledgeLink_entity/KnowledgeLink_entity.aod
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
+  <name>KnowledgeLink_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/KnowledgeLink_entity/documentation.adoc</documentation>
+  <title>Link</title>
+  <iconIdProcess>%aditoprj%/entity/KnowledgeLink_entity/iconIdProcess.js</iconIdProcess>
+  <titlePlural>Links</titlePlural>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>KNOWLEDGELINKID</name>
+      <usePermissions v="false" />
+    </entityField>
+    <entityField>
+      <name>ROW_ID</name>
+      <title>Dataset</title>
+      <consumer>Objects</consumer>
+      <linkedContextProcess>%aditoprj%/entity/KnowledgeLink_entity/entityfields/row_id/linkedContextProcess.js</linkedContextProcess>
+      <displayValueProcess>%aditoprj%/entity/KnowledgeLink_entity/entityfields/row_id/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>OBJECT_TYPE</name>
+      <title>Type</title>
+      <consumer>Contexts</consumer>
+      <displayValueProcess>%aditoprj%/entity/KnowledgeLink_entity/entityfields/object_type/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>KNOWLEDGEMANAGEMENT_ID</name>
+      <valueProcess>%aditoprj%/entity/KnowledgeLink_entity/entityfields/knowledgemanagement_id/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_NEW</name>
+      <valueProcess>%aditoprj%/entity/KnowledgeLink_entity/entityfields/date_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_EDIT</name>
+      <valueProcess>%aditoprj%/entity/KnowledgeLink_entity/entityfields/date_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>USER_NEW</name>
+      <valueProcess>%aditoprj%/entity/KnowledgeLink_entity/entityfields/user_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>USER_EDIT</name>
+      <valueProcess>%aditoprj%/entity/KnowledgeLink_entity/entityfields/user_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityConsumer>
+      <name>Contexts</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Context_entity</entityName>
+        <fieldName>ActivityLinkable</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Objects</name>
+      <children>
+        <entityParameter>
+          <name>Entity_param</name>
+          <valueProcess>%aditoprj%/entity/KnowledgeLink_entity/entityfields/objects/children/entity_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>ObjectProxy_entity</entityName>
+        <fieldName>FilteredObjects</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityParameter>
+      <name>KnowledgeManagementId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityProvider>
+      <name>ByKnowledgeId</name>
+      <targetContextField>OBJECT_TYPE</targetContextField>
+      <targetIdField>ROW_ID</targetIdField>
+      <documentation>%aditoprj%/entity/KnowledgeLink_entity/entityfields/byknowledgeid/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>ObjectType_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>RowId_param</name>
+          <expose v="false" />
+        </entityParameter>
+      </children>
+      <dependencies>
+        <entityDependency>
+          <name>c3ed10c1-db55-4e55-9c18-2b8d400df033</name>
+          <entityName>KnowledgeManagement_entity</entityName>
+          <fieldName>LinksByKnowledgeId</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityParameter>
+      <name>RowId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>ObjectType_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <alias>Data_alias</alias>
+      <conditionProcess>%aditoprj%/entity/KnowledgeLink_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <linkInformation>
+        <linkInformation>
+          <name>aea9524a-589e-47df-87d7-5f79519eb135</name>
+          <tableName>KNOWLEDGELINK</tableName>
+          <primaryKey>KNOWLEDGELINKID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+      </linkInformation>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>DATE_EDIT.value</name>
+          <recordfield>KNOWLEDGELINK.DATE_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_NEW.value</name>
+          <recordfield>KNOWLEDGELINK.DATE_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>KNOWLEDGELINKID.value</name>
+          <recordfield>KNOWLEDGELINK.KNOWLEDGELINKID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>KNOWLEDGEMANAGEMENT_ID.value</name>
+          <recordfield>KNOWLEDGELINK.KNOWLEDGEMANAGEMENT_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>OBJECT_TYPE.value</name>
+          <recordfield>KNOWLEDGELINK.OBJECT_TYPE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ROW_ID.value</name>
+          <recordfield>KNOWLEDGELINK.ROW_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_EDIT.value</name>
+          <recordfield>KNOWLEDGELINK.USER_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_NEW.value</name>
+          <recordfield>KNOWLEDGELINK.USER_NEW</recordfield>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/KnowledgeLink_entity/documentation.adoc b/entity/KnowledgeLink_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..32310ca526d16e0c87a4db78a1ef86dfeb15b45d
--- /dev/null
+++ b/entity/KnowledgeLink_entity/documentation.adoc
@@ -0,0 +1 @@
+This entity is used to manage links to other objects, that are read from ObjectProxy_entity via a consumer
\ No newline at end of file
diff --git a/entity/KnowledgeLink_entity/entityfields/byknowledgeid/documentation.adoc b/entity/KnowledgeLink_entity/entityfields/byknowledgeid/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..94bf48727d7cf920859494f4f7a35b058a4c90b1
--- /dev/null
+++ b/entity/KnowledgeLink_entity/entityfields/byknowledgeid/documentation.adoc
@@ -0,0 +1 @@
+Delivers all links to other objects that are linked to a knowledge entry
\ No newline at end of file
diff --git a/entity/KnowledgeLink_entity/entityfields/date_edit/valueProcess.js b/entity/KnowledgeLink_entity/entityfields/date_edit/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f9bd2052348245b216ddc07324deaab863cbf1e1
--- /dev/null
+++ b/entity/KnowledgeLink_entity/entityfields/date_edit/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && vars.exists("$this.value") && vars.get("$this.value") == null)
+    result.string(vars.get("$sys.date"));
\ No newline at end of file
diff --git a/entity/KnowledgeLink_entity/entityfields/date_new/valueProcess.js b/entity/KnowledgeLink_entity/entityfields/date_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2fc9c2258e740f035482eaf127d1268e24a7cf48
--- /dev/null
+++ b/entity/KnowledgeLink_entity/entityfields/date_new/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$this.value") && vars.get("$this.value") == null)
+    result.string(vars.get("$sys.date"));
\ No newline at end of file
diff --git a/entity/KnowledgeLink_entity/entityfields/knowledgemanagement_id/valueProcess.js b/entity/KnowledgeLink_entity/entityfields/knowledgemanagement_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d21371587c7b477fd47c83652d1f061f6450f0a5
--- /dev/null
+++ b/entity/KnowledgeLink_entity/entityfields/knowledgemanagement_id/valueProcess.js
@@ -0,0 +1,13 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+result.string(
+    (
+        vars.exists("$param.KnowledgeManagementId_param") 
+        && vars.get("$this.value") == null 
+        && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW
+    ) 
+    ? vars.getString("$param.KnowledgeManagementId_param") 
+    : ""
+);
\ No newline at end of file
diff --git a/entity/KnowledgeLink_entity/entityfields/object_type/displayValueProcess.js b/entity/KnowledgeLink_entity/entityfields/object_type/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3922264dc37d0431952c91c91192f7c422453e7e
--- /dev/null
+++ b/entity/KnowledgeLink_entity/entityfields/object_type/displayValueProcess.js
@@ -0,0 +1,7 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+import("Context_lib");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && vars.get("$field.OBJECT_TYPE"))
+    result.string(ContextUtils.getTitle(vars.get("$field.OBJECT_TYPE")));
\ No newline at end of file
diff --git a/entity/KnowledgeLink_entity/entityfields/objects/children/entity_param/valueProcess.js b/entity/KnowledgeLink_entity/entityfields/objects/children/entity_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7f9d49710e5f4b78cca4b7c0fa61bf80d015daf6
--- /dev/null
+++ b/entity/KnowledgeLink_entity/entityfields/objects/children/entity_param/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("Context_lib");
+import("system.result");
+
+result.string(ContextUtils.getEntity(vars.get("$field.OBJECT_TYPE")));
\ No newline at end of file
diff --git a/entity/KnowledgeLink_entity/entityfields/row_id/displayValueProcess.js b/entity/KnowledgeLink_entity/entityfields/row_id/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3dbbcf620a10c6c02d3326da49ece763bf738dc5
--- /dev/null
+++ b/entity/KnowledgeLink_entity/entityfields/row_id/displayValueProcess.js
@@ -0,0 +1,11 @@
+import("system.neon");
+import("system.vars");
+import("system.db");
+import("system.result");
+import("Context_lib");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$field.ROW_ID")) {
+    result.string("");
+} else if (vars.exists("$field.OBJECT_TYPE") && vars.get("$field.OBJECT_TYPE")) {
+    result.string(db.cell(ContextUtils.getNameSql(vars.get("$field.OBJECT_TYPE"), vars.get("$field.ROW_ID"))));
+}
\ No newline at end of file
diff --git a/entity/KnowledgeLink_entity/entityfields/row_id/linkedContextProcess.js b/entity/KnowledgeLink_entity/entityfields/row_id/linkedContextProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d868fe097f20bc5d880af358b27fdea7a2c86063
--- /dev/null
+++ b/entity/KnowledgeLink_entity/entityfields/row_id/linkedContextProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+import("Context_lib");
+
+result.string(ContextUtils.getContextName(vars.get("$field.OBJECT_TYPE")))
\ No newline at end of file
diff --git a/entity/KnowledgeLink_entity/entityfields/user_edit/valueProcess.js b/entity/KnowledgeLink_entity/entityfields/user_edit/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d0d7b9894d5d7d012f144c21f5d2747652d67534
--- /dev/null
+++ b/entity/KnowledgeLink_entity/entityfields/user_edit/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && vars.exists("$this.value") && vars.get("$this.value") == null)
+    result.string(vars.get("$sys.user"));
\ No newline at end of file
diff --git a/entity/KnowledgeLink_entity/entityfields/user_new/valueProcess.js b/entity/KnowledgeLink_entity/entityfields/user_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..444094080244a63d3d5b1d099b3a1e40df9730b8
--- /dev/null
+++ b/entity/KnowledgeLink_entity/entityfields/user_new/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$this.value") && vars.get("$this.value") == null)
+    result.string(vars.get("$sys.user"));
\ No newline at end of file
diff --git a/entity/KnowledgeLink_entity/iconIdProcess.js b/entity/KnowledgeLink_entity/iconIdProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..07e66a14ebd280538d18ad5fa3958dd44f28903b
--- /dev/null
+++ b/entity/KnowledgeLink_entity/iconIdProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+import("Context_lib");
+
+result.string("TEXT:" + ContextUtils.getContextName(vars.get("$field.OBJECT_TYPE")))
\ No newline at end of file
diff --git a/entity/KnowledgeLink_entity/recordcontainers/db/conditionProcess.js b/entity/KnowledgeLink_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ba94f4a6e340e9367aa0d46741c5c0dac78d7949
--- /dev/null
+++ b/entity/KnowledgeLink_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,10 @@
+import("Sql_lib");
+import("system.vars");
+import("system.result");
+
+var localId = (vars.exists("$local.idvalue")) ? vars.get("$local.idvalue") : null;
+
+var cond = newWhereIfSet("KNOWLEDGELINK.KNOWLEDGEMANAGEMENT_ID", "$param.KnowledgeManagementId_param")
+    .andIfSet("KNOWLEDGELINK.KNOWLEDGELINKID", localId);
+
+result.string(cond.toString(SqlBuilder.NORESULT_CONDITION()));
\ No newline at end of file
diff --git a/entity/KnowledgeManagementTagList_entity/KnowledgeManagementTagList_entity.aod b/entity/KnowledgeManagementTagList_entity/KnowledgeManagementTagList_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..3a8e46df4e9a2abe34e632740db8f66c0a082da0
--- /dev/null
+++ b/entity/KnowledgeManagementTagList_entity/KnowledgeManagementTagList_entity.aod
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
+  <name>KnowledgeManagementTagList_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/KnowledgeManagementTagList_entity/documentation.adoc</documentation>
+  <contentTitleProcess>%aditoprj%/entity/KnowledgeManagementTagList_entity/contentTitleProcess.js</contentTitleProcess>
+  <recordContainer>JDito_TagList</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>UID</name>
+    </entityField>
+    <entityField>
+      <name>NAME</name>
+    </entityField>
+    <entityProvider>
+      <name>CompleteList</name>
+      <documentation>%aditoprj%/entity/KnowledgeManagementTagList_entity/entityfields/completelist/documentation.adoc</documentation>
+      <dependencies>
+        <entityDependency>
+          <name>85925baa-5edc-4908-804e-f7ec4c5a2a0c</name>
+          <entityName>KnowledgeManagementTags_entity</entityName>
+          <fieldName>CompleteTagList</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+  </entityFields>
+  <recordContainers>
+    <jDitoRecordContainer>
+      <name>JDito_TagList</name>
+      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
+      <contentProcess>%aditoprj%/entity/KnowledgeManagementTagList_entity/recordcontainers/jdito_taglist/contentProcess.js</contentProcess>
+      <recordFieldMappings>
+        <jDitoRecordFieldMapping>
+          <name>UID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>NAME.value</name>
+        </jDitoRecordFieldMapping>
+      </recordFieldMappings>
+    </jDitoRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/KnowledgeManagementTagList_entity/contentTitleProcess.js b/entity/KnowledgeManagementTagList_entity/contentTitleProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..28fd67de270b497ba718dd4e91766bd22936f67e
--- /dev/null
+++ b/entity/KnowledgeManagementTagList_entity/contentTitleProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.NAME"));
\ No newline at end of file
diff --git a/entity/KnowledgeManagementTagList_entity/documentation.adoc b/entity/KnowledgeManagementTagList_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..d2eef458abade304a5c07db9ebbdff5e83879704
--- /dev/null
+++ b/entity/KnowledgeManagementTagList_entity/documentation.adoc
@@ -0,0 +1 @@
+The entity provides a complete list of all existing tags and is consumed where tags can be chosen
\ No newline at end of file
diff --git a/entity/KnowledgeManagementTagList_entity/entityfields/completelist/documentation.adoc b/entity/KnowledgeManagementTagList_entity/entityfields/completelist/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..d26c90a04d79b44a90c99cc2fdbafb008ea7fcbe
--- /dev/null
+++ b/entity/KnowledgeManagementTagList_entity/entityfields/completelist/documentation.adoc
@@ -0,0 +1 @@
+provides a complete list of all possible tags, so they can be chosen when you add tags
\ No newline at end of file
diff --git a/entity/KnowledgeManagementTagList_entity/recordcontainers/jdito_taglist/contentProcess.js b/entity/KnowledgeManagementTagList_entity/recordcontainers/jdito_taglist/contentProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..65e0462c8e4605032d2d8e19aa5040c68131c4af
--- /dev/null
+++ b/entity/KnowledgeManagementTagList_entity/recordcontainers/jdito_taglist/contentProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.logging");
+import("KnowledgeManagement_lib");
+import("system.result");
+
+var res = KnowledgeManagementTagsModel.getInstance().getPossibleTags(KnowledgeUtils.getLocalIdValue()).array;
+
+result.object(res);
\ No newline at end of file
diff --git a/entity/KnowledgeManagementTags_entity/KnowledgeManagementTags_entity.aod b/entity/KnowledgeManagementTags_entity/KnowledgeManagementTags_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..94e8106d88dd3b8f4f1b2205b0d9d5b300bc8bb2
--- /dev/null
+++ b/entity/KnowledgeManagementTags_entity/KnowledgeManagementTags_entity.aod
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
+  <name>KnowledgeManagementTags_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/KnowledgeManagementTags_entity/documentation.adoc</documentation>
+  <recordContainer>JDito_KnowledgeManagementKeywords</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityParameter>
+      <name>KnowledgeManagementId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityProvider>
+      <name>ByKnowledgeManagementId</name>
+      <documentation>%aditoprj%/entity/KnowledgeManagementTags_entity/entityfields/byknowledgemanagementid/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>KnowledgeManagementId_param</name>
+          <mandatory v="true" />
+        </entityParameter>
+      </children>
+      <dependencies>
+        <entityDependency>
+          <name>8d86a61b-0fe3-44c4-a512-e044c990fded</name>
+          <entityName>KnowledgeManagement_entity</entityName>
+          <fieldName>TagsByKnowledgeId</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityField>
+      <name>TAG</name>
+      <title>Tag</title>
+      <consumer>CompleteTagList</consumer>
+      <textInputAllowed v="true" />
+      <displayValueProcess>%aditoprj%/entity/KnowledgeManagementTags_entity/entityfields/tag/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>UID</name>
+    </entityField>
+    <entityConsumer>
+      <name>CompleteTagList</name>
+      <state>EDITABLE</state>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KnowledgeManagementTagList_entity</entityName>
+        <fieldName>CompleteList</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+  </entityFields>
+  <recordContainers>
+    <jDitoRecordContainer>
+      <name>JDito_KnowledgeManagementKeywords</name>
+      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
+      <contentProcess>%aditoprj%/entity/KnowledgeManagementTags_entity/recordcontainers/jdito_knowledgemanagementkeywords/contentProcess.js</contentProcess>
+      <onInsert>%aditoprj%/entity/KnowledgeManagementTags_entity/recordcontainers/jdito_knowledgemanagementkeywords/onInsert.js</onInsert>
+      <onUpdate>%aditoprj%/entity/KnowledgeManagementTags_entity/recordcontainers/jdito_knowledgemanagementkeywords/onUpdate.js</onUpdate>
+      <onDelete>%aditoprj%/entity/KnowledgeManagementTags_entity/recordcontainers/jdito_knowledgemanagementkeywords/onDelete.js</onDelete>
+      <recordFieldMappings>
+        <jDitoRecordFieldMapping>
+          <name>UID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>TAG.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>TAG.displayValue</name>
+        </jDitoRecordFieldMapping>
+      </recordFieldMappings>
+    </jDitoRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/KnowledgeManagementTags_entity/documentation.adoc b/entity/KnowledgeManagementTags_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..ca20973196d16e0261b5acb7b6f4af869f56b496
--- /dev/null
+++ b/entity/KnowledgeManagementTags_entity/documentation.adoc
@@ -0,0 +1,5 @@
+This entity represents the tags of a knowledge entry and handles adding, editing and deleting of linked tags
+
+If a tag, which doesn't exist yet is entered, the tag is created and then added to the knowledge entry
+
+Always fill KnowledgeManagementId_param
\ No newline at end of file
diff --git a/entity/KnowledgeManagementTags_entity/entityfields/byknowledgemanagementid/documentation.adoc b/entity/KnowledgeManagementTags_entity/entityfields/byknowledgemanagementid/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..76bdf00546188f3a4331b2508e472c51b94cb94b
--- /dev/null
+++ b/entity/KnowledgeManagementTags_entity/entityfields/byknowledgemanagementid/documentation.adoc
@@ -0,0 +1,3 @@
+This provider delivers the list of tags of a knowledge entry
+
+KnowledgeManagementId_param has to be filled, otherwise it won't work
\ No newline at end of file
diff --git a/entity/KnowledgeManagementTags_entity/entityfields/tag/displayValueProcess.js b/entity/KnowledgeManagementTags_entity/entityfields/tag/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..26d516e5a813889ed49009c0c827198157570267
--- /dev/null
+++ b/entity/KnowledgeManagementTags_entity/entityfields/tag/displayValueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+import("Sql_lib");
+
+result.string(new SqlBuilder().select("TAG").from("KNOWLEDGETAG").where("KNOWLEDGETAG.KNOWLEDGETAGID", "$field.TAG").cell());
\ No newline at end of file
diff --git a/entity/KnowledgeManagementTags_entity/recordcontainers/jdito_knowledgemanagementkeywords/contentProcess.js b/entity/KnowledgeManagementTags_entity/recordcontainers/jdito_knowledgemanagementkeywords/contentProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d48540b541b3e965acf2ad16d45b0be587ab0672
--- /dev/null
+++ b/entity/KnowledgeManagementTags_entity/recordcontainers/jdito_knowledgemanagementkeywords/contentProcess.js
@@ -0,0 +1,12 @@
+import("system.vars");
+import("system.result");
+import("system.db");
+import("KnowledgeManagement_lib");
+import("system.text");
+import("system.net");
+
+var idValue = vars.exists("$local.idvalues") && vars.get("$local.idvalues");
+
+result.object(KnowledgeManagementTagsModel.getInstance()
+                .collectTags(vars.get("$param.KnowledgeManagementId_param"), idValue)
+                .data);
\ No newline at end of file
diff --git a/entity/KnowledgeManagementTags_entity/recordcontainers/jdito_knowledgemanagementkeywords/onDelete.js b/entity/KnowledgeManagementTags_entity/recordcontainers/jdito_knowledgemanagementkeywords/onDelete.js
new file mode 100644
index 0000000000000000000000000000000000000000..8d94951f9666ef9c8606f1c15476d9bd2617350f
--- /dev/null
+++ b/entity/KnowledgeManagementTags_entity/recordcontainers/jdito_knowledgemanagementkeywords/onDelete.js
@@ -0,0 +1,8 @@
+import("system.logging");
+import("system.vars");
+import("system.result");
+import("KnowledgeManagement_lib");
+
+KnowledgeManagementTagsController
+    .getInstance(vars.get("$param.KnowledgeManagementId_param"))
+    .deleteTag(vars.get("$local.uid"), vars.get("$local.rowdata"))
\ No newline at end of file
diff --git a/entity/KnowledgeManagementTags_entity/recordcontainers/jdito_knowledgemanagementkeywords/onInsert.js b/entity/KnowledgeManagementTags_entity/recordcontainers/jdito_knowledgemanagementkeywords/onInsert.js
new file mode 100644
index 0000000000000000000000000000000000000000..410d6308dafe094e63fc9feccac11bac7fa74ce8
--- /dev/null
+++ b/entity/KnowledgeManagementTags_entity/recordcontainers/jdito_knowledgemanagementkeywords/onInsert.js
@@ -0,0 +1,17 @@
+import("system.db");
+import("system.neon");
+import("system.vars");
+import("system.result");
+import("KnowledgeManagement_lib");
+//You have to access this object in Array notation, cause the Keys are like "FIELD.value", 
+//if you do variable.FIELD.value, you get an error "Cannot find property value of undefined"
+//Because FIELD doesn't exist within the object, but "FIELD.value" does...
+var rowData = vars.get("$local.rowdata");
+
+//UID of this entity is being used for the attribute relation
+var attrRelationId = vars.get("$local.uid");
+var knowledgeId = vars.get("$param.KnowledgeManagementId_param");
+
+KnowledgeManagementTagsController
+    .getInstance(knowledgeId)
+    .addTag(attrRelationId, rowData);
\ No newline at end of file
diff --git a/entity/KnowledgeManagementTags_entity/recordcontainers/jdito_knowledgemanagementkeywords/onUpdate.js b/entity/KnowledgeManagementTags_entity/recordcontainers/jdito_knowledgemanagementkeywords/onUpdate.js
new file mode 100644
index 0000000000000000000000000000000000000000..e60c40d6f32af12e6b137ef1a2e067a0c213231e
--- /dev/null
+++ b/entity/KnowledgeManagementTags_entity/recordcontainers/jdito_knowledgemanagementkeywords/onUpdate.js
@@ -0,0 +1,13 @@
+import("system.db");
+import("KnowledgeManagement_lib");
+import("system.logging");
+import("system.vars");
+import("system.result");
+import("Sql_lib");
+
+var data = vars.get("$local.rowdata");
+var knowledgeId = vars.get("$param.KnowledgeManagementId_param");
+
+KnowledgeManagementTagsController
+    .getInstance(knowledgeId)
+    .editTag(data["UID.value"], data);
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/KnowledgeManagement_entity.aod b/entity/KnowledgeManagement_entity/KnowledgeManagement_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..93e235fcee3100efa34cbea44a49489448453b71
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/KnowledgeManagement_entity.aod
@@ -0,0 +1,504 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
+  <name>KnowledgeManagement_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/KnowledgeManagement_entity/documentation.adoc</documentation>
+  <icon>VAADIN:ACADEMY_CAP</icon>
+  <title>Knowledge</title>
+  <grantUpdateProcess>%aditoprj%/entity/KnowledgeManagement_entity/grantUpdateProcess.js</grantUpdateProcess>
+  <grantDeleteProcess>%aditoprj%/entity/KnowledgeManagement_entity/grantDeleteProcess.js</grantDeleteProcess>
+  <contentTitleProcess>%aditoprj%/entity/KnowledgeManagement_entity/contentTitleProcess.js</contentTitleProcess>
+  <afterOperatingState>%aditoprj%/entity/KnowledgeManagement_entity/afterOperatingState.js</afterOperatingState>
+  <useFavorites v="true" />
+  <iconIdProcess>%aditoprj%/entity/KnowledgeManagement_entity/iconIdProcess.js</iconIdProcess>
+  <titlePlural>Knowledge entries</titlePlural>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>KNOWLEDGEMANAGEMENTID</name>
+    </entityField>
+    <entityField>
+      <name>TITLE</name>
+      <title>Title</title>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>CONTENT</name>
+      <title>Content</title>
+      <contentType>HTML</contentType>
+      <outputFormat></outputFormat>
+      <mandatory v="true" />
+      <onValueChangeTypes>
+        <element>MASK</element>
+        <element>PROCESS</element>
+        <element>PROCESS_SETVALUE</element>
+      </onValueChangeTypes>
+    </entityField>
+    <entityField>
+      <name>CONTENTDECODED</name>
+      <title>Text content</title>
+      <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/contentdecoded/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>AUTHOR_CONTACT_ID</name>
+      <title>Author</title>
+      <consumer>PersonContacts</consumer>
+      <linkedContext>Person</linkedContext>
+      <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/author_contact_id/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/author_contact_id/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_NEW</name>
+      <title>Created on</title>
+      <contentType>DATE</contentType>
+      <resolution>SECOND</resolution>
+      <outputFormat>dd.MM.yyyy HH:mm</outputFormat>
+      <inputFormat>dd.MM.yyyy HH:mm</inputFormat>
+      <state>READONLY</state>
+      <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/date_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DATE_EDIT</name>
+      <title>Edited on</title>
+      <contentType>DATE</contentType>
+      <resolution>SECOND</resolution>
+      <outputFormat>dd.MM.yyyy HH:mm</outputFormat>
+      <inputFormat>dd.MM.yyyy HH:mm</inputFormat>
+      <state>READONLY</state>
+      <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/date_edit/valueProcess.js</valueProcess>
+      <onValueChangeTypes>
+        <element>MASK</element>
+        <element>PROCESS</element>
+        <element>PROCESS_SETVALUE</element>
+      </onValueChangeTypes>
+    </entityField>
+    <entityField>
+      <name>USER_NEW</name>
+      <title>Created by</title>
+      <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/user_new/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>USER_EDIT</name>
+      <title>Edited by</title>
+      <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/user_edit/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>TYPE</name>
+      <title>Type</title>
+      <consumer>KeywordKnowledgeType</consumer>
+      <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/type/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>htmlView</name>
+      <title>Content</title>
+      <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/htmlview/valueProcess.js</valueProcess>
+    </entityField>
+    <entityConsumer>
+      <name>TagsByKnowledgeId</name>
+      <refreshParent v="true" />
+      <state>EDITABLE</state>
+      <onValidation>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/tagsbyknowledgeid/onValidation.js</onValidation>
+      <children>
+        <entityParameter>
+          <name>KnowledgeManagementId_param</name>
+          <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/tagsbyknowledgeid/children/knowledgemanagementid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KnowledgeManagementTags_entity</entityName>
+        <fieldName>ByKnowledgeManagementId</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>DiscussionsByKnowledgeId</name>
+      <refreshParent v="true" />
+      <children>
+        <entityParameter>
+          <name>KnowledgeId_param</name>
+          <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/discussionsbyknowledgeid/children/knowledgeid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KnowledgeDiscussion_entity</entityName>
+        <fieldName>ByKnowledgeId</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityProvider>
+      <name>Provider</name>
+      <documentation>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/provider/documentation.adoc</documentation>
+    </entityProvider>
+    <entityConsumer>
+      <name>PersonContacts</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Person_entity</entityName>
+        <fieldName>Contacts</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordKnowledgeType</name>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/keywordknowledgetype/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordPublish</name>
+      <children>
+        <entityParameter>
+          <name>ContainerName_param</name>
+          <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/keywordpublish/children/containername_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityField>
+      <name>indexTag</name>
+    </entityField>
+    <entityConsumer>
+      <name>LinkedDocuments</name>
+      <children>
+        <entityParameter>
+          <name>AssignmentTable_param</name>
+          <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/linkeddocuments/children/assignmenttable_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>AssignmentRowId_param</name>
+          <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/linkeddocuments/children/assignmentrowid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>Documents</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityActionField>
+      <name>openEntryAsMail</name>
+      <title>send as mail</title>
+      <onActionProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/openentryasmail/onActionProcess.js</onActionProcess>
+      <isMenuAction v="true" />
+      <isSelectionAction v="true" />
+      <state>INVISIBLE</state>
+    </entityActionField>
+    <entityConsumer>
+      <name>LinksByKnowledgeId</name>
+      <refreshParent v="true" />
+      <children>
+        <entityParameter>
+          <name>KnowledgeManagementId_param</name>
+          <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/linksbyknowledgeid/children/knowledgemanagementid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KnowledgeLink_entity</entityName>
+        <fieldName>ByKnowledgeId</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityField>
+      <name>LastChange</name>
+      <title>Last change</title>
+      <contentType>DATE</contentType>
+    </entityField>
+    <entityConsumer>
+      <name>LogHistories</name>
+      <children>
+        <entityParameter>
+          <name>tablenames_param</name>
+          <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>LogHistory_entity</entityName>
+        <fieldName>LogHistoryProvider</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityActionField>
+      <name>exportHTML_action</name>
+      <title>Export HTML</title>
+      <onActionProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/exporthtml_action/onActionProcess.js</onActionProcess>
+      <iconId>NEON:EXPORT</iconId>
+      <tooltip>Exports the knowledge entry as a html file</tooltip>
+    </entityActionField>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityField>
+      <name>KNOWLEDGEMANAGEMENT_OBJECTTYPE</name>
+      <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/knowledgemanagement_objecttype/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>binaryContents</name>
+      <contentType>FILE</contentType>
+    </entityField>
+    <entityField>
+      <name>isNewsMark</name>
+      <title>News</title>
+      <contentType>BOOLEAN</contentType>
+      <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/isnewsmark/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>notificationMark</name>
+      <title>Notification</title>
+      <description>Oh Hi Mark</description>
+      <contentType>BOOLEAN</contentType>
+      <stateProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/notificationmark/stateProcess.js</stateProcess>
+    </entityField>
+    <entityParameter>
+      <name>isDashlet_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityConsumer>
+      <name>KnowledgeRoles</name>
+      <stateProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/stateProcess.js</stateProcess>
+      <onValidation>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/onValidation.js</onValidation>
+      <children>
+        <entityParameter>
+          <name>KnowledgeManagement_param</name>
+          <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/children/knowledgemanagement_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>PublishLevelRoles_param</name>
+          <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/children/publishlevelroles_param/valueProcess.js</valueProcess>
+          <expose v="true" />
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KnowledgeRole_entity</entityName>
+        <fieldName>KnowledgeRole</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Tasks</name>
+      <children>
+        <entityParameter>
+          <name>ObjectId_param</name>
+          <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/tasks/children/objectid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>RowId_param</name>
+          <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/tasks/children/rowid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>PresetLinks_param</name>
+          <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/tasks/children/presetlinks_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Task_entity</entityName>
+        <fieldName>Tasks</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityField>
+      <name>RESPONSIBLE_CONTACT_ID</name>
+      <title>Responsible</title>
+      <consumer>PersonContacts</consumer>
+      <linkedContext>Person</linkedContext>
+      <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/responsible_contact_id/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/responsible_contact_id/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>PUBLISH</name>
+      <title>Publishing level</title>
+      <consumer>KeywordPublish</consumer>
+      <state>INVISIBLE</state>
+      <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/publish/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/publish/displayValueProcess.js</displayValueProcess>
+    </entityField>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <alias>Data_alias</alias>
+      <isRequireContainerFiltering v="true" />
+      <conditionProcess>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <orderClauseProcess>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
+      <onDBInsert>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/db/onDBInsert.js</onDBInsert>
+      <onDBUpdate>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/db/onDBUpdate.js</onDBUpdate>
+      <linkInformation>
+        <linkInformation>
+          <name>9d4a7198-a4d1-45b3-867f-bf12cd558274</name>
+          <tableName>KNOWLEDGEMANAGEMENT</tableName>
+          <primaryKey>KNOWLEDGEMANAGEMENTID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+      </linkInformation>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>AUTHOR_CONTACT_ID.value</name>
+          <recordfield>KNOWLEDGEMANAGEMENT.AUTHOR_CONTACT_ID</recordfield>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CONTENT.value</name>
+          <recordfield>KNOWLEDGEMANAGEMENT.CONTENT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>CONTENTDECODED.value</name>
+          <recordfield>KNOWLEDGEMANAGEMENT.CONTENTDECODED</recordfield>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_EDIT.value</name>
+          <recordfield>KNOWLEDGEMANAGEMENT.DATE_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_NEW.value</name>
+          <recordfield>KNOWLEDGEMANAGEMENT.DATE_NEW</recordfield>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>KNOWLEDGEMANAGEMENTID.value</name>
+          <recordfield>KNOWLEDGEMANAGEMENT.KNOWLEDGEMANAGEMENTID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TITLE.value</name>
+          <recordfield>KNOWLEDGEMANAGEMENT.TITLE</recordfield>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TYPE.value</name>
+          <recordfield>KNOWLEDGEMANAGEMENT.TYPE</recordfield>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_EDIT.value</name>
+          <recordfield>KNOWLEDGEMANAGEMENT.USER_EDIT</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>USER_NEW.value</name>
+          <recordfield>KNOWLEDGEMANAGEMENT.USER_NEW</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>AUTHOR_CONTACT_ID.displayValue</name>
+          <expression>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/author_contact_id.displayvalue/expression.js</expression>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>LastChange.value</name>
+          <expression>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/lastchange.value/expression.js</expression>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TYPE.displayValue</name>
+          <expression>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/type.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+        <consumerMapping>
+          <name>KnowledgeRoles</name>
+          <filterConditionProcess>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/knowledgeroles/filterConditionProcess.js</filterConditionProcess>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+          <filtertype>BASIC</filtertype>
+        </consumerMapping>
+        <dbRecordFieldMapping>
+          <name>RESPONSIBLE_CONTACT_ID.value</name>
+          <recordfield>KNOWLEDGEMANAGEMENT.RESPONSIBLE_CONTACT_ID</recordfield>
+          <columnAlias></columnAlias>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>RESPONSIBLE_CONTACT_ID.displayValue</name>
+          <expression>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/responsible_contact_id.displayvalue/expression.js</expression>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>PUBLISH.value</name>
+          <recordfield>KNOWLEDGEMANAGEMENT.PUBLISH</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>PUBLISH.displayValue</name>
+          <expression>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/publish.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+      <filterExtensions>
+        <filterExtension>
+          <name>TagFilter</name>
+          <title>Tag</title>
+          <contentType>TEXT</contentType>
+          <filterValuesProcess>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/db/filterextensions/tagfilter/filterValuesProcess.js</filterValuesProcess>
+          <filterConditionProcess>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/db/filterextensions/tagfilter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtension>
+      </filterExtensions>
+    </dbRecordContainer>
+    <indexRecordContainer>
+      <name>indexSearchKnowledgebase</name>
+      <configMode>INDEXGROUP_DEFINITION</configMode>
+      <patternExtensionProcess>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/indexsearchknowledgebase/patternExtensionProcess.js</patternExtensionProcess>
+      <indexRecordAlias>Data_alias</indexRecordAlias>
+      <query>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/indexsearchknowledgebase/query.js</query>
+      <subProcess>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/indexsearchknowledgebase/subProcess.js</subProcess>
+      <affectedTables>
+        <element>KNOWLEDGEMANAGEMENT</element>
+        <element>KNOWLEDGETAGLINK</element>
+      </affectedTables>
+      <affectedIds>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/indexsearchknowledgebase/affectedIds.js</affectedIds>
+      <title>Knowledgebase</title>
+      <indexFieldMappings>
+        <indexRecordSystemFieldMapping>
+          <name>#UID</name>
+        </indexRecordSystemFieldMapping>
+        <indexRecordMultilingualSystemFieldMapping>
+          <name>#TITLE</name>
+        </indexRecordMultilingualSystemFieldMapping>
+        <indexRecordMultilingualSystemFieldMapping>
+          <name>#DESCRIPTION</name>
+        </indexRecordMultilingualSystemFieldMapping>
+        <indexRecordFieldMapping>
+          <name>KNOWLEDGEMANAGEMENTID.value</name>
+          <systemField>UID</systemField>
+        </indexRecordFieldMapping>
+        <indexRecordFieldMapping>
+          <name>TITLE.value</name>
+          <indexFieldType>TEXT</indexFieldType>
+        </indexRecordFieldMapping>
+        <indexRecordFieldMapping>
+          <name>CONTENTDECODED.value</name>
+          <indexFieldType>TEXT</indexFieldType>
+        </indexRecordFieldMapping>
+        <indexRecordFieldMapping>
+          <name>indexTag.value</name>
+        </indexRecordFieldMapping>
+        <indexRecordSystemFieldMapping>
+          <name>#SUB_GROUP</name>
+        </indexRecordSystemFieldMapping>
+        <indexRecordFieldMapping>
+          <name>binaryContents.value</name>
+          <isStored v="false" />
+          <isMultiValued v="true" />
+        </indexRecordFieldMapping>
+      </indexFieldMappings>
+    </indexRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/KnowledgeManagement_entity/afterOperatingState.js b/entity/KnowledgeManagement_entity/afterOperatingState.js
new file mode 100644
index 0000000000000000000000000000000000000000..e94e7d5272132f8c3301112c3135e50713f25686
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/afterOperatingState.js
@@ -0,0 +1,52 @@
+import("Util_lib");
+import("system.tools");
+import("system.neon");
+import("system.entities");
+import("NewsSystem_lib");
+import("system.vars");
+
+if(vars.exists("$field.isNewsMark") && Utils.toBoolean(vars.get("$field.isNewsMark")))
+{
+    if(vars.exists("$context.setNotificationMark") 
+        && vars.get("$context.setNotificationMark"))
+    {
+        var roles = [];
+    
+        /*
+     * We need a solution for the following problem:
+     * we need every child role of a parent Role like PROJECT_ADITO because nobody has PROJECT_ADITO but the rest is a child of the parent.
+     * Maybe a tools. method to get them. Currently I don't know how it translates to the prod system.
+     * Testing locally works.
+     */
+    
+
+    
+        var config = entities.createConfigForLoadingConsumerRows()
+        .consumer("KnowledgeRoles")
+        .fields(["ROLES"]);
+    
+        var roleData = entities.getRows(config); //get the rows of the consumer
+    
+        if(roleData)
+        {
+            roles = roleData.map(function(row) //check each role of this object and push it into an array
+            {
+                return row["ROLES"];
+            });
+        }
+    
+        var users = NewsSystem.getUsersWithRoles(roles); //get users with the given role(s)
+    
+        var content = vars.get("$field.CONTENTDECODED");
+        if (content.length > 72)
+            content = content.substring(0, 69) + " ...";
+        if(users.length > 0)
+        NewsSystem.createNewsNotification(content //create notification 
+            ,vars.get("$field.TITLE") 
+            ,users
+            ,vars.get("$field.KNOWLEDGEMANAGEMENTID")
+            );
+    }
+            
+    vars.set("$context.setNotificationMark", false); //set it 'false' so that it doesn't trigger again if it shouldn't
+}
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/contentTitleProcess.js b/entity/KnowledgeManagement_entity/contentTitleProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e3e512ab73cf4d9d8e1512be1786a2b9e238678b
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/contentTitleProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+import("system.vars");
+result.string(vars.get("$field.TITLE"));
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/documentation.adoc b/entity/KnowledgeManagement_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..db9002b6103f2b1f3c04f5b55d9b2e457ee0ef17
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/documentation.adoc
@@ -0,0 +1,3 @@
+The main entity of the knowledgemanagement
+
+manages the content and consumes discussions, links, log history, documents 
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/author_contact_id/displayValueProcess.js b/entity/KnowledgeManagement_entity/entityfields/author_contact_id/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ec6e27b3d071457bd455ca6ab815da0f869eef57
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/author_contact_id/displayValueProcess.js
@@ -0,0 +1,14 @@
+import("Sql_lib");
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value"))
+{
+    result.string(newSelect(new SqlMaskingUtils().concatWithSeparator(["PERSON.FIRSTNAME","PERSON.LASTNAME"]))
+        .from("PERSON")
+        .join("CONTACT", "PERSON.PERSONID = CONTACT.PERSON_ID")
+        .where("CONTACT.CONTACTID", "$this.value")
+        .cell()
+    );
+}
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/author_contact_id/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/author_contact_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..73c38e80b263ed787621164e87482c7f668e818b
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/author_contact_id/valueProcess.js
@@ -0,0 +1,6 @@
+import("Employee_lib");
+import("system.vars");
+import("system.result");
+
+if(vars.exists("$this.value") && vars.get("$this.value") == null)
+    result.string(EmployeeUtils.getCurrentContactId());
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/contentdecoded/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/contentdecoded/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..818f75bf6ec997d9f6f9ffe300194e382ddc62c3
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/contentdecoded/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+import("system.text");
+
+result.string(text.html2text(vars.get("$field.CONTENT")));
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/date_edit/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/date_edit/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f3fbb8b9401628f02e0b80a2fc5f1bbfc1930f73
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/date_edit/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+    result.string(vars.get("$sys.date"));
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/date_new/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/date_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..6f4ffab7ba7cc9791b3aced43d5d7e2cd82a2aa0
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/date_new/valueProcess.js
@@ -0,0 +1,9 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+import("system.datetime");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$field.DATE_NEW"))
+{
+    result.string(datetime.date());
+}
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/discussionsbyknowledgeid/children/knowledgeid_param/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/discussionsbyknowledgeid/children/knowledgeid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..78c1da185830c7db84eedbde260e8a2d7df71e52
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/discussionsbyknowledgeid/children/knowledgeid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.KNOWLEDGEMANAGEMENTID"));
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/exporthtml_action/onActionProcess.js b/entity/KnowledgeManagement_entity/entityfields/exporthtml_action/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..942f98b2ed41cc2cfcf0277e60b211d2daf1bd9e
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/exporthtml_action/onActionProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.neon");
+import("system.util");
+
+neon.download(util.encodeBase64String(vars.get("$field.htmlView")), vars.get("$field.TITLE").replace(/\s/gi,"_") + ".html");
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/htmlview/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/htmlview/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..245543678a57558455aea5101b36cea344b11c5c
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/htmlview/valueProcess.js
@@ -0,0 +1,12 @@
+import("KnowledgeManagement_lib");
+import("Html_lib");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+import("system.vars");
+import("system.result");
+
+var ret = KnowledgeManagementModel.getInstance(vars.getString("$field.CONTENT"), vars.get("$field.KNOWLEDGEMANAGEMENTID"))
+                 .style(KeywordUtils.getAttributeRelation(vars.get("$field.TYPE"), $KeywordRegistry.knowledgeType(), "contentCssStylesheet"))
+                 .replaceAditoLinks().buildHTML();
+
+result.string(ret);
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/isnewsmark/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/isnewsmark/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..eff63fa32ee42ccf61dcae9afeea57fb4864458f
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/isnewsmark/valueProcess.js
@@ -0,0 +1,18 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+import("Sql_lib");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && !vars.getString("$this.value"))
+{
+    var knowledgeId = vars.get("$field.KNOWLEDGEMANAGEMENTID");
+    
+    var isTagSet = newSelect("'1'")
+        .from("KNOWLEDGETAGLINK")
+        .join("KNOWLEDGETAG", "KNOWLEDGETAG.KNOWLEDGETAGID = KNOWLEDGETAGLINK.KNOWLEDGETAG_ID")
+        .where("KNOWLEDGETAGLINK.KNOWLEDGEMANAGEMENT_ID", knowledgeId)
+        .and("KNOWLEDGETAG.TAG", "News")
+        .cell();
+    
+    result.string(isTagSet ? 1 : 0);
+}
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/keywordknowledgetype/children/containername_param/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/keywordknowledgetype/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..777264ed660b668a661dfec46b03ec6341fcab96
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/keywordknowledgetype/children/containername_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("KeywordRegistry_basic");
+
+result.string($KeywordRegistry.knowledgeType());
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/keywordpublish/children/containername_param/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/keywordpublish/children/containername_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ecc5b27a744bfa1fff0af2b064a6dae550036d5d
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/keywordpublish/children/containername_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("KeywordRegistry_basic");
+
+result.string($KeywordRegistry.knowledgePublishLevel());
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/knowledgemanagement_objecttype/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/knowledgemanagement_objecttype/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c437e7b5c35a70149bcea392a1faa1cc442cf687
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/knowledgemanagement_objecttype/valueProcess.js
@@ -0,0 +1,2 @@
+import("system.result");
+result.string("KnowledgeManagement");
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/children/knowledgemanagement_param/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/children/knowledgemanagement_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..78c1da185830c7db84eedbde260e8a2d7df71e52
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/children/knowledgemanagement_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.KNOWLEDGEMANAGEMENTID"));
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/children/publishlevelroles_param/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/children/publishlevelroles_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..08d815d9cd504d45325bc5040dd96fe8d4449652
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/children/publishlevelroles_param/valueProcess.js
@@ -0,0 +1,28 @@
+import("KeywordRegistry_basic");
+import("system.vars");
+import("system.result");
+
+//return a one dimensional array for the excluded roles from the publish level
+//$KeywordRegistry.knowledgePublishLevel$internal()
+
+var level = vars.get("$field.PUBLISH");
+
+var res = _getExcludedRoles()
+
+result.object(res);
+
+
+function _getExcludedRoles()
+{
+    switch (level)
+    {
+        case $KeywordRegistry.knowledgePublishLevel$internal(): 
+            return ["PROJECT_Partner", "PROJECT_Subcontractor", "PROJECT_ExternMitarbeiter"];
+        case $KeywordRegistry.knowledgePublishLevel$partner():
+            return ["PROJECT_ExternMitarbeiter"];
+        case $KeywordRegistry.knowledgePublishLevel$public():
+            return [""];
+        default:
+            return ["PROJECT_Partner", "PROJECT_Subcontractor", "PROJECT_ExternMitarbeiter"];
+    }
+}
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/onValidation.js b/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..d9426aaf28843c5935941bddb88cfb36616d51a9
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/onValidation.js
@@ -0,0 +1,15 @@
+import("system.translate");
+import("Util_lib");
+import("system.result");
+import("system.logging");
+import("system.vars");
+import("Entity_lib");
+
+vars.get("$field.KnowledgeRoles.insertedRows");
+vars.get("$field.KnowledgeRoles.changedRows");
+vars.get("$field.KnowledgeRoles.deletedRows");
+
+var data = EntityConsumerRowsHelper.getCurrentConsumerRows("KnowledgeRoles", ["ROLES"])
+
+if(Utils.toBoolean(vars.get("$field.isNewsMark")) && data[0].ROLES == "" )
+    result.string(translate.text("No role(s) selected"))
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/stateProcess.js b/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8a02cf00398251e14d9b58e0a664045736438a66
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/stateProcess.js
@@ -0,0 +1,11 @@
+import("Util_lib");
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+//make invisible if no news
+if(!Utils.toBoolean(vars.get("$field.isNewsMark")))
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
+else
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+
diff --git a/entity/KnowledgeManagement_entity/entityfields/linkeddocuments/children/assignmentrowid_param/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/linkeddocuments/children/assignmentrowid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..78c1da185830c7db84eedbde260e8a2d7df71e52
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/linkeddocuments/children/assignmentrowid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.KNOWLEDGEMANAGEMENTID"));
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/linkeddocuments/children/assignmenttable_param/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/linkeddocuments/children/assignmenttable_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3057b0f452d61c97e96fc53ac7646b879e28ebaf
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/linkeddocuments/children/assignmenttable_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("KNOWLEDGEMANAGEMENT");
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/linksbyknowledgeid/children/knowledgemanagementid_param/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/linksbyknowledgeid/children/knowledgemanagementid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..78c1da185830c7db84eedbde260e8a2d7df71e52
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/linksbyknowledgeid/children/knowledgemanagementid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.KNOWLEDGEMANAGEMENTID"));
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d31541c503b349b3c03366a9722a35b13b46747b
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.result");
+
+var res = [];
+res.push({id: vars.get("$field.KNOWLEDGEMANAGEMENTID"), tableNames: ["KNOWLEDGEMANAGEMENT","AB_ATTRIBUTERELATION","KNOWLEDGEDISCUSSION"]});
+
+res = JSON.stringify(res);//currently only strings  can be passed as param
+result.object(res);
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/notificationmark/stateProcess.js b/entity/KnowledgeManagement_entity/entityfields/notificationmark/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1c027a16a263da243a61108bce9a006eaeec96e7
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/notificationmark/stateProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+//make invisible if no news
+if(vars.get("$field.isNewsMark") == false)
+    result.string(neon.COMPONENTSTATE_INVISIBLE);
+else
+    result.string(neon.COMPONENTSTATE_EDITABLE);
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/openentryasmail/onActionProcess.js b/entity/KnowledgeManagement_entity/entityfields/openentryasmail/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..069f4e90fe0792cddd473a948b0114415222cecf
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/openentryasmail/onActionProcess.js
@@ -0,0 +1,10 @@
+import("system.tools");
+import("Email_lib");
+import("system.vars");
+import("system.result");
+
+var toSend = new Email(vars.get("$field.CONTENT"));
+
+toSend.setSender(tools.getUser(vars.get("$sys.user"))[tools.PARAMS][tools.CONTACTID]);
+toSend.subject = "Wissen: " + vars.get("$field.TITLE");
+toSend.openMail();
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/provider/documentation.adoc b/entity/KnowledgeManagement_entity/entityfields/provider/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..d72ef5f67309fa7a7091cbe6e102116e123f64ea
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/provider/documentation.adoc
@@ -0,0 +1 @@
+This provider is used by dashlets which set isDashlet_param
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/publish/displayValueProcess.js b/entity/KnowledgeManagement_entity/entityfields/publish/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f3b04d3586264c58bb0536c8dbd61046659bc327
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/publish/displayValueProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.vars");
+import("system.neon");
+import("Keyword_lib");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string(KeywordUtils.getViewValue("KnowledgePublishLevel", vars.get("$this.value")));
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/publish/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/publish/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3ee4bee455432dab7fa7bd7310ff0c1959b12703
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/publish/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.result");
+import("KeywordRegistry_basic");
+
+if(vars.get("$this.value") == null)
+{
+    result.string($KeywordRegistry.knowledgePublishLevel$internal());
+}
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/responsible_contact_id/displayValueProcess.js b/entity/KnowledgeManagement_entity/entityfields/responsible_contact_id/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ec6e27b3d071457bd455ca6ab815da0f869eef57
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/responsible_contact_id/displayValueProcess.js
@@ -0,0 +1,14 @@
+import("Sql_lib");
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value"))
+{
+    result.string(newSelect(new SqlMaskingUtils().concatWithSeparator(["PERSON.FIRSTNAME","PERSON.LASTNAME"]))
+        .from("PERSON")
+        .join("CONTACT", "PERSON.PERSONID = CONTACT.PERSON_ID")
+        .where("CONTACT.CONTACTID", "$this.value")
+        .cell()
+    );
+}
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/responsible_contact_id/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/responsible_contact_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..73c38e80b263ed787621164e87482c7f668e818b
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/responsible_contact_id/valueProcess.js
@@ -0,0 +1,6 @@
+import("Employee_lib");
+import("system.vars");
+import("system.result");
+
+if(vars.exists("$this.value") && vars.get("$this.value") == null)
+    result.string(EmployeeUtils.getCurrentContactId());
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/tagsbyknowledgeid/children/knowledgemanagementid_param/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/tagsbyknowledgeid/children/knowledgemanagementid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..78c1da185830c7db84eedbde260e8a2d7df71e52
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/tagsbyknowledgeid/children/knowledgemanagementid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.KNOWLEDGEMANAGEMENTID"));
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/tagsbyknowledgeid/onValidation.js b/entity/KnowledgeManagement_entity/entityfields/tagsbyknowledgeid/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..a7755c7c8e3817c1c4ce2b06c5aed3bf161cccf1
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/tagsbyknowledgeid/onValidation.js
@@ -0,0 +1,22 @@
+import("system.translate");
+import("system.result");
+import("system.vars");
+import("Entity_lib");
+
+vars.get("$field.TagsByKnowledgeId.insertedRows");
+vars.get("$field.TagsByKnowledgeId.changedRows");
+vars.get("$field.TagsByKnowledgeId.deletedRows");
+
+var tagRows = EntityConsumerRowsHelper.getCurrentConsumerRows("TagsByKnowledgeId", ["TAG"]);
+var tagSet = new Set();
+var hasDuplicate = tagRows.some(function (row)
+{
+    var tag = row["TAG"].trim();
+    if (tagSet.has(tag))
+        return true;
+    tagSet.add(tag);
+    return false;
+});
+
+if (hasDuplicate)
+    result.string(translate.text("Tags can't be assigned more than once!"));
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/tasks/children/objectid_param/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/tasks/children/objectid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..cc6924394ae950c43386275dda2c8db5d7a9c0ed
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/tasks/children/objectid_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/KnowledgeManagement_entity/entityfields/tasks/children/presetlinks_param/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/tasks/children/presetlinks_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a540967e165facb01d6e0d912f1ff0490fa3c9fa
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/tasks/children/presetlinks_param/valueProcess.js
@@ -0,0 +1,5 @@
+import("Context_lib");
+import("system.result");
+import("system.vars");
+
+result.object([[ContextUtils.getCurrentContextId(),vars.get("$field.KNOWLEDGEMANAGEMENTID")]]);
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/tasks/children/rowid_param/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/tasks/children/rowid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..78c1da185830c7db84eedbde260e8a2d7df71e52
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/tasks/children/rowid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.KNOWLEDGEMANAGEMENTID"));
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/type/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/type/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..534409e0c3a40c251eed06e5aa7bb1c1aa5221c6
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/type/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.result");
+import("KeywordRegistry_basic");
+
+if(vars.get("$this.value") == null)
+{
+    result.string($KeywordRegistry.knowledgeType$knowledgeBase());
+}
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/user_edit/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/user_edit/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..101f9115ca7d48575761308d7d8403f96c241128
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/user_edit/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+{
+    result.string(vars.get("$sys.user"));
+}
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/entityfields/user_new/valueProcess.js b/entity/KnowledgeManagement_entity/entityfields/user_new/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..6dbbcb8ffdc78d1efd3836493e6c6556ac143db9
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/entityfields/user_new/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$field.USER_NEW"))
+{
+    result.string(vars.get("$sys.user"));
+}
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/grantDeleteProcess.js b/entity/KnowledgeManagement_entity/grantDeleteProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b91bca7d6742ca3f48aceffd0ab4c8c46d031507
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/grantDeleteProcess.js
@@ -0,0 +1,9 @@
+import("system.result");
+import("KeywordRegistry_basic");
+import("system.vars");
+
+var type  = vars.getString("$field.TYPE");
+
+var ret = (type != $KeywordRegistry.knowledgeType$editorial());
+
+result.string(ret);
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/grantUpdateProcess.js b/entity/KnowledgeManagement_entity/grantUpdateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b91bca7d6742ca3f48aceffd0ab4c8c46d031507
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/grantUpdateProcess.js
@@ -0,0 +1,9 @@
+import("system.result");
+import("KeywordRegistry_basic");
+import("system.vars");
+
+var type  = vars.getString("$field.TYPE");
+
+var ret = (type != $KeywordRegistry.knowledgeType$editorial());
+
+result.string(ret);
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/iconIdProcess.js b/entity/KnowledgeManagement_entity/iconIdProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..385d0165847bff5290aad71dbcf66dfe6cec0b83
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/iconIdProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("system.result");
+
+var type = vars.get("$field.TYPE.displayValue");
+
+result.string("TEXT:" + type);
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/recordcontainers/db/conditionProcess.js b/entity/KnowledgeManagement_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d73eb83fe46705ad872645c30e31657f9aea9436
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,26 @@
+import("system.logging");
+import("AttributeRegistry_basic");
+import("Sql_lib");
+import("system.vars");
+import("system.tools");
+import("system.result");
+
+var cond = newWhere();
+
+if(vars.exists("$param.isDashlet_param") && vars.get("$param.isDashlet_param")) //check if the parameter exists and is filled
+{
+    var userRoles = tools.getRoles(vars.get("$sys.user")); //get all Roles from the current User
+    cond.and(null //create a new condition where we check if any data sets exists with the given parameters
+        ,newSelect("KNOWLEDGEROLES.ROLENAME") //create a subselect for all data sets with the current user roles
+        .from("KNOWLEDGEROLES")
+        .where("KNOWLEDGEROLES.KNOWLEDGEMANAGEMENT_ID = KNOWLEDGEMANAGEMENT.KNOWLEDGEMANAGEMENTID")
+        .and("KNOWLEDGEROLES.ROLENAME", userRoles, SqlBuilder.IN()), SqlBuilder.EXISTS())
+    .and(null
+        ,newSelect("KNOWLEDGETAGLINK.KNOWLEDGETAGLINKID")
+        .from("KNOWLEDGETAGLINK")
+        .join("KNOWLEDGETAG", "KNOWLEDGETAGLINK.KNOWLEDGETAG_ID = KNOWLEDGETAG.KNOWLEDGETAGID")
+        .where("KNOWLEDGETAGLINK.KNOWLEDGEMANAGEMENT_ID = KNOWLEDGEMANAGEMENT.KNOWLEDGEMANAGEMENTID")
+        .and("KNOWLEDGETAG.TAG", "News"), SqlBuilder.EXISTS());
+}
+
+result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/recordcontainers/db/filterextensions/tagfilter/filterConditionProcess.js b/entity/KnowledgeManagement_entity/recordcontainers/db/filterextensions/tagfilter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c05ae19af196f98abd32e4f906c9614c8050a27e
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/recordcontainers/db/filterextensions/tagfilter/filterConditionProcess.js
@@ -0,0 +1,25 @@
+import("Sql_lib");
+import("system.result");
+import("system.vars");
+
+var condition = newWhere();
+var tagLinkSql = newSelect("KNOWLEDGEMANAGEMENT_ID")
+    .from("KNOWLEDGETAGLINK")
+    .where("KNOWLEDGETAGLINK.KNOWLEDGEMANAGEMENT_ID = KNOWLEDGEMANAGEMENT.KNOWLEDGEMANAGEMENTID");
+var condType = SqlBuilder.EXISTS();
+
+switch (vars.get("$local.comparison"))
+{
+    case "NOT_EQUAL":
+        condType = SqlBuilder.NOT_EXISTS();
+    case "EQUAL":
+        condition.and(null, tagLinkSql.and("KNOWLEDGETAGLINK.KNOWLEDGETAG_ID", "$local.rawvalue"), condType);
+    break;
+    case "ISNULL":
+        condType = SqlBuilder.NOT_EXISTS();
+    case "ISNOTNULL":
+        condition.and(null, tagLinkSql, condType);
+    break;
+}
+
+result.string(condition.toString(SqlBuilder.NORESULT_CONDITION()));
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/recordcontainers/db/filterextensions/tagfilter/filterValuesProcess.js b/entity/KnowledgeManagement_entity/recordcontainers/db/filterextensions/tagfilter/filterValuesProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b2c2c7b07ef169e69c4d169d7ab1577179140b95
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/recordcontainers/db/filterextensions/tagfilter/filterValuesProcess.js
@@ -0,0 +1,4 @@
+import("Sql_lib");
+import("system.result");
+
+result.object(new SqlBuilder().selectDistinct(["KNOWLEDGETAGID", "TAG"]).from("KNOWLEDGETAG").orderBy("TAG").table());
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/recordcontainers/db/onDBInsert.js b/entity/KnowledgeManagement_entity/recordcontainers/db/onDBInsert.js
new file mode 100644
index 0000000000000000000000000000000000000000..091635be04440cb3b695a6eb09172a7c54415eec
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/recordcontainers/db/onDBInsert.js
@@ -0,0 +1,17 @@
+import("system.neon");
+import("system.vars");
+import("NewsSystem_lib");
+import("Util_lib");
+
+var bool = Utils.toBoolean; //Alias Utils.toBoolean to bool for easier reading
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW 
+        && vars.exists("$field.isNewsMark") 
+        && bool(vars.get("$field.isNewsMark")))
+{
+    NewsSystem.setAsNews(
+        vars.get("$field.KNOWLEDGEMANAGEMENTID")
+        , bool(vars.get("$field.notificationMark"))
+        , bool(vars.get("$field.isNewsMark"))
+    );
+}
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/recordcontainers/db/onDBUpdate.js b/entity/KnowledgeManagement_entity/recordcontainers/db/onDBUpdate.js
new file mode 100644
index 0000000000000000000000000000000000000000..091635be04440cb3b695a6eb09172a7c54415eec
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/recordcontainers/db/onDBUpdate.js
@@ -0,0 +1,17 @@
+import("system.neon");
+import("system.vars");
+import("NewsSystem_lib");
+import("Util_lib");
+
+var bool = Utils.toBoolean; //Alias Utils.toBoolean to bool for easier reading
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW 
+        && vars.exists("$field.isNewsMark") 
+        && bool(vars.get("$field.isNewsMark")))
+{
+    NewsSystem.setAsNews(
+        vars.get("$field.KNOWLEDGEMANAGEMENTID")
+        , bool(vars.get("$field.notificationMark"))
+        , bool(vars.get("$field.isNewsMark"))
+    );
+}
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/recordcontainers/db/orderClauseProcess.js b/entity/KnowledgeManagement_entity/recordcontainers/db/orderClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..bc51d2191bf3857fd1120908f74afa44073e32ce
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/recordcontainers/db/orderClauseProcess.js
@@ -0,0 +1,8 @@
+import("system.db");
+import("system.result");
+import("Sql_lib");
+
+var sortOrder = {};
+sortOrder[new SqlMaskingUtils().isNull("KNOWLEDGEMANAGEMENT.DATE_EDIT", "KNOWLEDGEMANAGEMENT.DATE_NEW")] = db.DESCENDING;
+
+result.object(sortOrder);
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/author_contact_id.displayvalue/expression.js b/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/author_contact_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..4ed9cfc3749ec9653c2b47f8fb8fe78ed04bbfde
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/author_contact_id.displayvalue/expression.js
@@ -0,0 +1,10 @@
+import("system.result");
+import("Sql_lib");
+
+result.string(
+    newSelect(new SqlMaskingUtils().concatWithSeparator(["PERSON.FIRSTNAME","PERSON.LASTNAME"]))
+        .from("PERSON")
+        .join("CONTACT", "PERSON.PERSONID = CONTACT.PERSON_ID")
+        .where("CONTACT.CONTACTID = KNOWLEDGEMANAGEMENT.AUTHOR_CONTACT_ID")
+        .toString()
+);
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/knowledgeroles/filterConditionProcess.js b/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/knowledgeroles/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e518964b17a4e16412ceb51c57ad73a42d2ca7ec
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/knowledgeroles/filterConditionProcess.js
@@ -0,0 +1,9 @@
+import("Sql_lib");
+import("system.vars");
+import("system.result");
+
+result.string(newWhere(null, newSelect("KNOWLEDGEROLES.KNOWLEDGEMANAGEMENT_ID")
+    .from("KNOWLEDGEROLES")
+    .where("KNOWLEDGEROLES.KNOWLEDGEMANAGEMENT_ID = KNOWLEDGEMANAGEMENTID")
+    .and(vars.get("$local.condition")), SqlBuilder.EXISTS())
+);
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/lastchange.value/expression.js b/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/lastchange.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..c62b199149670a9eeee28c2257a23cc68bc36438
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/lastchange.value/expression.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("Sql_lib");
+
+var maskUtil = new SqlMaskingUtils();
+
+result.string( maskUtil.coalesce(["DATE_EDIT","DATE_NEW"]) );
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/publish.displayvalue/expression.js b/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/publish.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..caefc84ff51f719625700138a42f45fe88421803
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/publish.displayvalue/expression.js
@@ -0,0 +1,4 @@
+import("Keyword_lib");
+import("system.result");
+
+result.string(KeywordUtils.getResolvedTitleSqlPart("KnowledgePublishLevel", "knowledgemanagement.PUBLISH"));
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/responsible_contact_id.displayvalue/expression.js b/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/responsible_contact_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..4ed9cfc3749ec9653c2b47f8fb8fe78ed04bbfde
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/responsible_contact_id.displayvalue/expression.js
@@ -0,0 +1,10 @@
+import("system.result");
+import("Sql_lib");
+
+result.string(
+    newSelect(new SqlMaskingUtils().concatWithSeparator(["PERSON.FIRSTNAME","PERSON.LASTNAME"]))
+        .from("PERSON")
+        .join("CONTACT", "PERSON.PERSONID = CONTACT.PERSON_ID")
+        .where("CONTACT.CONTACTID = KNOWLEDGEMANAGEMENT.AUTHOR_CONTACT_ID")
+        .toString()
+);
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/type.displayvalue/expression.js b/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/type.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..3f4fde9ce6da84535a3b4a822110440836cb948b
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/recordcontainers/db/recordfieldmappings/type.displayvalue/expression.js
@@ -0,0 +1,4 @@
+import("Keyword_lib");
+import("system.result");
+
+result.string(KeywordUtils.getResolvedTitleSqlPart("KnowledgeType", "knowledgemanagement.TYPE"));
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/recordcontainers/indexsearchknowledgebase/affectedIds.js b/entity/KnowledgeManagement_entity/recordcontainers/indexsearchknowledgebase/affectedIds.js
new file mode 100644
index 0000000000000000000000000000000000000000..7e282414273e4d43616a68225934740b96eef5df
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/recordcontainers/indexsearchknowledgebase/affectedIds.js
@@ -0,0 +1,25 @@
+import("system.db");
+import("system.result");
+import("system.vars");
+import("IndexSearch_lib");
+import("Sql_lib");
+
+var infoContainer, onUpdFn, tableName, res;
+
+tableName = vars.get("$local.table");
+idValue = vars.get("$local.idvalue");
+
+switch (tableName)
+{
+    case "KNOWLEDGEMANAGEMENT":
+        res = [idValue];
+        break;
+    case "KNOWLEDGETAGLINK":
+        res = newSelect("KNOWLEDGEMANAGEMENT_ID").from("KNOWLEDGETAGLINK").where("KNOWLEDGETAGLINK.KNOWLEDGETAGLINKID", idValue).arrayColumn();
+        break;
+}
+
+if (res) {
+    result.object(res);
+}
+    
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/recordcontainers/indexsearchknowledgebase/patternExtensionProcess.js b/entity/KnowledgeManagement_entity/recordcontainers/indexsearchknowledgebase/patternExtensionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ad39e57e9cd6587861d2480f9fbde1e483008f00
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/recordcontainers/indexsearchknowledgebase/patternExtensionProcess.js
@@ -0,0 +1,11 @@
+import("system.logging");
+import("system.result");
+import("system.db");
+import("system.vars");
+import("system.tools");
+
+if(tools.hasRole(vars.get("$sys.user"), "PROJECT_Support"))
+{
+    var filter = "( +_index_group_:KNOWLEDGE_KNOWLEDGEBASE + ( (publish_value: 2)) ) OR ( -_index_group_:KNOWLEDGE_KNOWLEDGEBASE )";
+    result.string(filter)
+}
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/recordcontainers/indexsearchknowledgebase/query.js b/entity/KnowledgeManagement_entity/recordcontainers/indexsearchknowledgebase/query.js
new file mode 100644
index 0000000000000000000000000000000000000000..29d30e242c27ba5f0c73e988eb1e365e3e130b67
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/recordcontainers/indexsearchknowledgebase/query.js
@@ -0,0 +1,32 @@
+import("system.vars");
+import("system.result");
+import("KeywordRegistry_basic");
+import("Sql_lib");
+import("system.SQLTYPES");
+
+var sql = newSelect([
+        "km1.KNOWLEDGEMANAGEMENTID", "km1.TITLE", new SqlMaskingUtils().castLob("CONTENTDECODED", 255), "km1.KNOWLEDGEMANAGEMENTID", 
+        "km1.TITLE", "km1.CONTENTDECODED", "KNOWLEDGETAG.TAG",
+        SqlBuilder.caseWhen(null, newSelect("KNOWLEDGEMANAGEMENTID")
+                    .from("KNOWLEDGEMANAGEMENT")
+                    .join("KNOWLEDGETAGLINK", "KNOWLEDGEMANAGEMENTID = KNOWLEDGEMANAGEMENT_ID")
+                    .join("KNOWLEDGETAG", "KNOWLEDGETAGID = KNOWLEDGETAG_ID")
+                    .where("KNOWLEDGETAG.TAG", "News")
+                    .and("KNOWLEDGEMANAGEMENT.KNOWLEDGEMANAGEMENTID = km1.KNOWLEDGEMANAGEMENTID"), SqlBuilder.EXISTS())
+                .thenString("News")
+            .when(newWhere("TYPE = '1'"))
+                .thenString("Knowledgebase")
+            .when(newWhere("TYPE = '2'"))
+                .thenString("Editorial")
+            .when(newWhere("TYPE = '3'"))
+                .thenString("Business process"),
+        "''"
+    ]).from("KNOWLEDGEMANAGEMENT", "km1")
+    .leftJoin("KNOWLEDGETAGLINK", "KNOWLEDGEMANAGEMENTID = KNOWLEDGEMANAGEMENT_ID")
+    .leftJoin("KNOWLEDGETAG", "KNOWLEDGETAGID = KNOWLEDGETAG_ID")
+    .orderBy("KNOWLEDGEMANAGEMENTID");
+
+if (vars.exists("$local.idvalue"))
+    querySelect.whereIfSet("KNOWLEDGEMANAGEMENT.KNOWLEDGEMANAGEMENTID", "$local.idvalue");
+
+result.string(sql.toString());
\ No newline at end of file
diff --git a/entity/KnowledgeManagement_entity/recordcontainers/indexsearchknowledgebase/subProcess.js b/entity/KnowledgeManagement_entity/recordcontainers/indexsearchknowledgebase/subProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..197f0230b508d44c9d127d406d015ffa5af2af8a
--- /dev/null
+++ b/entity/KnowledgeManagement_entity/recordcontainers/indexsearchknowledgebase/subProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("system.result");
+import("KnowledgeManagement_lib");
+
+var res = KnowledgeIndexHelper.getInstance(vars.get("$local.idvalue"),vars.get("$local.data")).getDocumentsFromContent().data;
+
+result.object(res);
\ No newline at end of file
diff --git a/entity/KnowledgeNewsFeed_entity/KnowledgeNewsFeed_entity.aod b/entity/KnowledgeNewsFeed_entity/KnowledgeNewsFeed_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..aa197ca8d2a1e231c8296d8cf579cc435fc5a060
--- /dev/null
+++ b/entity/KnowledgeNewsFeed_entity/KnowledgeNewsFeed_entity.aod
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
+  <name>KnowledgeNewsFeed_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/KnowledgeNewsFeed_entity/documentation.adoc</documentation>
+  <title>Feed</title>
+  <recordContainer>recordContainer</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>HTMLContent</name>
+      <title>Content</title>
+      <contentType>HTML</contentType>
+      <valueProcess>%aditoprj%/entity/KnowledgeNewsFeed_entity/entityfields/htmlcontent/valueProcess.js</valueProcess>
+    </entityField>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+  </entityFields>
+  <recordContainers>
+    <datalessRecordContainer>
+      <name>recordContainer</name>
+      <alias>Data_alias</alias>
+    </datalessRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/KnowledgeNewsFeed_entity/documentation.adoc b/entity/KnowledgeNewsFeed_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..32d6227c6622e61f9f6dbaf1d02fb6379b22aedf
--- /dev/null
+++ b/entity/KnowledgeNewsFeed_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= Knowledge Newsfeed
+
+This entity is used for the creation of the newsfeed in ADITO. A HTML is generated and will be displayed in the client
\ No newline at end of file
diff --git a/entity/KnowledgeNewsFeed_entity/entityfields/htmlcontent/valueProcess.js b/entity/KnowledgeNewsFeed_entity/entityfields/htmlcontent/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ed8c1c9f31549780f8859e20ac982bbd123b4837
--- /dev/null
+++ b/entity/KnowledgeNewsFeed_entity/entityfields/htmlcontent/valueProcess.js
@@ -0,0 +1,34 @@
+import("KeywordRegistry_basic");
+import("system.vars");
+import("Keyword_lib");
+import("Html_lib");
+import("system.entities");
+import("system.result");
+
+var config = entities.createConfigForLoadingRows()
+    .addParameter("isDashlet_param", true)
+    .entity("KnowledgeManagement_entity")
+    .fields(["TITLE", "CONTENT", "AUTHOR_CONTACT_ID.displayValue", "AUTHOR_CONTACT_ID"])
+    .ignorePermissions(true)
+    .count(10);
+    
+var data = entities.getRows(config);
+
+var htmlContent = "";
+
+if(data)
+{
+    data.forEach(function(row)
+    {
+        htmlContent += "<H2>" +  row["TITLE"] + "</H2>\n";
+        htmlContent += "<h3>" +  row["AUTHOR_CONTACT_ID.displayValue"] + "</h3>";
+        htmlContent += "<p>" +  row["CONTENT"] + "</p>\n";
+        htmlContent += "<hr>\n";
+    });
+}
+
+var css = KeywordUtils.getAttributeRelation($KeywordRegistry.knowledgeType$knowledgeBase(), $KeywordRegistry.knowledgeType(), "contentCssStylesheet");
+
+var htmlBody = SimpleHtmlObject.getInstance().body(htmlContent).style(css).toString();
+
+result.string(htmlBody);
diff --git a/entity/KnowledgeRole_entity/KnowledgeRole_entity.aod b/entity/KnowledgeRole_entity/KnowledgeRole_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..fe16e94a9f9fc50735030a2c181ef8cf5e38c9af
--- /dev/null
+++ b/entity/KnowledgeRole_entity/KnowledgeRole_entity.aod
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
+  <name>KnowledgeRole_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/KnowledgeRole_entity/documentation.adoc</documentation>
+  <title>Knowledge Role</title>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>ROLES</name>
+      <title>Roles</title>
+      <consumer>NewsRole</consumer>
+      <displayValueProcess>%aditoprj%/entity/KnowledgeRole_entity/entityfields/roles/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityConsumer>
+      <name>NewsRole</name>
+      <children>
+        <entityParameter>
+          <name>ExcludeRoles_param</name>
+          <valueProcess>%aditoprj%/entity/KnowledgeRole_entity/entityfields/newsrole/children/excluderoles_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Role_entity</entityName>
+        <fieldName>FilterRolesWithoutPermission</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityProvider>
+      <name>KnowledgeRole</name>
+      <lookupIdfield>ROLES</lookupIdfield>
+      <documentation>%aditoprj%/entity/KnowledgeRole_entity/entityfields/knowledgerole/documentation.adoc</documentation>
+      <titlePlural>KnowledgeRoles</titlePlural>
+      <recordContainer>db</recordContainer>
+      <dependencies>
+        <entityDependency>
+          <name>404bd92c-6222-4b58-95b4-d7f657b62c82</name>
+          <entityName>KnowledgeManagement_entity</entityName>
+          <fieldName>KnowledgeRoles</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityField>
+      <name>KNOWLEDGEROLEID</name>
+    </entityField>
+    <entityField>
+      <name>KNOWLEDGEMANAGMENT_ID</name>
+      <state>INVISIBLE</state>
+      <valueProcess>%aditoprj%/entity/KnowledgeRole_entity/entityfields/knowledgemanagment_id/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>TARGETCONTEXT</name>
+      <valueProcess>%aditoprj%/entity/KnowledgeRole_entity/entityfields/targetcontext/valueProcess.js</valueProcess>
+    </entityField>
+    <entityParameter>
+      <name>KnowledgeManagement_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>CurrentRoles_param</name>
+    </entityParameter>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityParameter>
+      <name>PublishLevelRoles_param</name>
+      <expose v="true" />
+    </entityParameter>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <alias>Data_alias</alias>
+      <hasDependentRecords v="true" />
+      <conditionProcess>%aditoprj%/entity/KnowledgeRole_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <title>Knowledge Roles</title>
+      <linkInformation>
+        <linkInformation>
+          <name>16e6127e-67c6-4dce-b2e9-4b2b951dbcd4</name>
+          <tableName>KNOWLEDGEROLES</tableName>
+          <primaryKey>KNOWLEDGEROLESID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+      </linkInformation>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>ROLES.value</name>
+          <recordfield>KNOWLEDGEROLES.ROLENAME</recordfield>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>KNOWLEDGEROLEID.value</name>
+          <recordfield>KNOWLEDGEROLES.KNOWLEDGEROLESID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>KNOWLEDGEMANAGMENT_ID.value</name>
+          <recordfield>KNOWLEDGEROLES.KNOWLEDGEMANAGEMENT_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ROLES.displayValue</name>
+          <expression>%aditoprj%/entity/KnowledgeRole_entity/recordcontainers/db/recordfieldmappings/roles.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/KnowledgeRole_entity/documentation.adoc b/entity/KnowledgeRole_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..6b291538809455a2847b23e14f93cbec08598048
--- /dev/null
+++ b/entity/KnowledgeRole_entity/documentation.adoc
@@ -0,0 +1,5 @@
+This entity handles the roles, that are linked to a knowledge entry
+The roles are used to create notifications and newsfeed entries for specific roles when the switches are set
+
+KnowledgeManagement_param needs the id of a knowledge entry
+PublishLevelRoles_param takes an array of role names which get excluded from the role list
\ No newline at end of file
diff --git a/entity/KnowledgeRole_entity/entityfields/knowledgemanagment_id/valueProcess.js b/entity/KnowledgeRole_entity/entityfields/knowledgemanagment_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..10f790fb648c0909495dad89e55599a351001947
--- /dev/null
+++ b/entity/KnowledgeRole_entity/entityfields/knowledgemanagment_id/valueProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+result.string(vars.get("$param.KnowledgeManagement_param"));
\ No newline at end of file
diff --git a/entity/KnowledgeRole_entity/entityfields/knowledgerole/documentation.adoc b/entity/KnowledgeRole_entity/entityfields/knowledgerole/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..781e59c75976c40ab98ceb4e76b174e38d31a69e
--- /dev/null
+++ b/entity/KnowledgeRole_entity/entityfields/knowledgerole/documentation.adoc
@@ -0,0 +1,2 @@
+KnowledgeManagement_param needs the id of a knowledge entry
+PublishLevelRoles_param takes an array of role names which get excluded from the role list
\ No newline at end of file
diff --git a/entity/KnowledgeRole_entity/entityfields/newsrole/children/excluderoles_param/valueProcess.js b/entity/KnowledgeRole_entity/entityfields/newsrole/children/excluderoles_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..937bc3cba4424062e8c688c103d0e2489cfc1756
--- /dev/null
+++ b/entity/KnowledgeRole_entity/entityfields/newsrole/children/excluderoles_param/valueProcess.js
@@ -0,0 +1,12 @@
+import("system.vars");
+import("system.result");
+
+//RIP Richy
+var roles = JSON.parse(vars.get("$param.PublishLevelRoles_param"));
+var roleArray = ["XMPP_OK", "INTERNAL_WEBSERVICE", "INTERNAL_CANARY", "INTERNAL_EVERYONE", "INTERNAL_GROUPWARE", "INTERNAL_SNMP", "INTERNAL_DESIGNER", "INTERNAL_TECHNICAL", "INTERNAL_DASHBOARDSTOREADMIN", ]
+    .concat(roles); //concat the excluded roles with the other roles
+var res = JSON.stringify(roleArray); //stringify the array
+
+
+
+result.string(res); //return
\ No newline at end of file
diff --git a/entity/KnowledgeRole_entity/entityfields/roles/displayValueProcess.js b/entity/KnowledgeRole_entity/entityfields/roles/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..34cda7e17c14ba4b8810207343c1e6ded197f955
--- /dev/null
+++ b/entity/KnowledgeRole_entity/entityfields/roles/displayValueProcess.js
@@ -0,0 +1,11 @@
+import("system.result");
+import("system.vars");
+import("system.tools");
+
+var allRoles = tools.getAllRoles(["PROJECT", "CUSTOM", "INTERNAL"], true);
+var roleTitle = vars.get("$field.ROLES");
+
+if (roleTitle in allRoles)
+    roleTitle = allRoles[roleTitle][0];
+
+result.string(roleTitle);
\ No newline at end of file
diff --git a/entity/KnowledgeRole_entity/entityfields/targetcontext/valueProcess.js b/entity/KnowledgeRole_entity/entityfields/targetcontext/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c9d54057e5ae103d74826aa989acee631deced0d
--- /dev/null
+++ b/entity/KnowledgeRole_entity/entityfields/targetcontext/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("KnowledgeManagement");
\ No newline at end of file
diff --git a/entity/KnowledgeRole_entity/recordcontainers/db/conditionProcess.js b/entity/KnowledgeRole_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9148537a0db5d39cf5fea801d8659efda903cab3
--- /dev/null
+++ b/entity/KnowledgeRole_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("Sql_lib");
+
+var cond = newWhereIfSet("KNOWLEDGEROLES.KNOWLEDGEMANAGEMENT_ID", "$param.KnowledgeManagement_param");
+
+result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/KnowledgeRole_entity/recordcontainers/db/recordfieldmappings/roles.displayvalue/expression.js b/entity/KnowledgeRole_entity/recordcontainers/db/recordfieldmappings/roles.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..c694956db20b566bf4454fe665a548b1acf24ac9
--- /dev/null
+++ b/entity/KnowledgeRole_entity/recordcontainers/db/recordfieldmappings/roles.displayvalue/expression.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("NewsSystem_lib");
+
+var resultSubSQL = NewsSystem.getDisplayValue();
+
+result.string(resultSubSQL);
+
diff --git a/entity/Language_entity/Language_entity.aod b/entity/Language_entity/Language_entity.aod
index 2afefb3f30bcad00355211100c7b648e58118ddf..6c74b7472d2e9dc5877912344d0593fb0cc9edaf 100644
--- a/entity/Language_entity/Language_entity.aod
+++ b/entity/Language_entity/Language_entity.aod
@@ -33,6 +33,12 @@
       <lookupIdfield>ISO3</lookupIdfield>
       <documentation>%aditoprj%/entity/Language_entity/entityfields/iso3name/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
+      <children>
+        <entityParameter>
+          <name>ExcludedIds_param</name>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>471b099a-03ab-4c49-8372-729b1e789ecc</name>
@@ -95,17 +101,17 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ExcludedIds_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityProvider>
       <name>ISO3NameFiltered</name>
       <lookupIdfield>ISO3</lookupIdfield>
       <documentation>%aditoprj%/entity/Language_entity/entityfields/iso3namefiltered/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>ExcludedIds_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>2df9d0ed-c26b-4166-9667-786a55146e05</name>
@@ -114,12 +120,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ExcludedIds_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>ExcludedIds_param</name>
diff --git a/entity/Language_entity/recordcontainers/db/conditionProcess.js b/entity/Language_entity/recordcontainers/db/conditionProcess.js
index 9e0e3a69ce20255f94f5f90179b9dbc93ac2c006..f36ae3e0f8d6f0cd9d8ae5df3c1dbce72112dfad 100644
--- a/entity/Language_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Language_entity/recordcontainers/db/conditionProcess.js
@@ -10,5 +10,4 @@ if (vars.getString("$param.ExcludedIds_param"))
     cond.andIfSet("AB_LANGUAGE.ISO3", JSON.parse(vars.getString("$param.ExcludedIds_param")), SqlBuilder.NOT_IN())
 }
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString())
\ No newline at end of file
diff --git a/entity/LeadLog_entity/LeadLog_entity.aod b/entity/LeadLog_entity/LeadLog_entity.aod
index ca424a627c7dd8b54e6c90a2383f372981e6c5d3..c5d2fde11e07a8ac46e81662fc89aa749460597f 100644
--- a/entity/LeadLog_entity/LeadLog_entity.aod
+++ b/entity/LeadLog_entity/LeadLog_entity.aod
@@ -61,11 +61,6 @@
     </entityField>
     <entityConsumer>
       <name>LogDocuments</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>Documents</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentName_param</name>
@@ -80,6 +75,11 @@
           <valueProcess>%aditoprj%/entity/LeadLog_entity/entityfields/logdocuments/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>Documents</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/Lead_entity/Lead_entity.aod b/entity/Lead_entity/Lead_entity.aod
index 6a8a9fed94965be2a51c7c27cef30ed371dc7631..1889a635743be724c4dc634e2c9a4bca56e66828 100644
--- a/entity/Lead_entity/Lead_entity.aod
+++ b/entity/Lead_entity/Lead_entity.aod
@@ -77,17 +77,17 @@
     </entityField>
     <entityConsumer>
       <name>ContactId</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Person_entity</entityName>
-        <fieldName>Contact</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Lead_entity/entityfields/contactid/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Person_entity</entityName>
+        <fieldName>Contact</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>LEADDUP_STATUS</name>
@@ -108,11 +108,6 @@
     </entityField>
     <entityConsumer>
       <name>KeywordDupStatus</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -120,6 +115,11 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/LeadimportMappingAssistant_entity/LeadimportMappingAssistant_entity.aod b/entity/LeadimportMappingAssistant_entity/LeadimportMappingAssistant_entity.aod
index f985150a0e1cb55d7858aa3540456b609937f07d..f525794d52d51a5b529dc78b5247db6196e626d9 100644
--- a/entity/LeadimportMappingAssistant_entity/LeadimportMappingAssistant_entity.aod
+++ b/entity/LeadimportMappingAssistant_entity/LeadimportMappingAssistant_entity.aod
@@ -70,17 +70,17 @@
     </entityParameter>
     <entityConsumer>
       <name>KeywordImportFields</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/LeadimportMappingAssistant_entity/entityfields/keywordimportfields/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/Leadimport_entity/Leadimport_entity.aod b/entity/Leadimport_entity/Leadimport_entity.aod
index e5241d647c840387bb8afa77a68ae3282a8532b1..141e0c172a3f2b0d90e9efc1bff354503ff3d12e 100644
--- a/entity/Leadimport_entity/Leadimport_entity.aod
+++ b/entity/Leadimport_entity/Leadimport_entity.aod
@@ -10,6 +10,7 @@
   <grantDelete v="true" />
   <grantDeleteProcess>%aditoprj%/entity/Leadimport_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/Leadimport_entity/contentTitleProcess.js</contentTitleProcess>
+  <contentDescriptionProcess>%aditoprj%/entity/Leadimport_entity/contentDescriptionProcess.js</contentDescriptionProcess>
   <iconId>NEON:IMPORT</iconId>
   <imageProcess>%aditoprj%/entity/Leadimport_entity/imageProcess.js</imageProcess>
   <titlePlural>Lead Imports</titlePlural>
@@ -17,6 +18,14 @@
   <entityFields>
     <entityProvider>
       <name>#PROVIDER</name>
+      <dependencies>
+        <entityDependency>
+          <name>451f0237-27f9-4018-a165-9bb4857d6565</name>
+          <entityName>Object_entity</entityName>
+          <fieldName>Leadimports</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityField>
       <name>NAME</name>
@@ -96,17 +105,17 @@
     </entityField>
     <entityConsumer>
       <name>KeywordImportStatus</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Leadimport_entity/entityfields/keywordimportstatus/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Leadimport_Empl</name>
@@ -145,25 +154,20 @@
     </entityProvider>
     <entityConsumer>
       <name>ImportFieldID</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>ImportField_Entity</entityName>
-        <fieldName>LeadImportIds</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>LeadImportID</name>
           <valueProcess>%aditoprj%/entity/Leadimport_entity/entityfields/importfieldid/children/leadimportid/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>DocumentC</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>Documents</fieldName>
+        <entityName>ImportField_Entity</entityName>
+        <fieldName>LeadImportIds</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>DocumentC</name>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -174,28 +178,28 @@
           <valueProcess>%aditoprj%/entity/Leadimport_entity/entityfields/documentc/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>LogHistoryC</name>
       <dependency>
         <name>dependency</name>
-        <entityName>LogHistory_entity</entityName>
-        <fieldName>LogHistoryProvider</fieldName>
+        <entityName>Document_entity</entityName>
+        <fieldName>Documents</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>LogHistoryC</name>
       <children>
         <entityParameter>
           <name>tablenames_param</name>
           <valueProcess>%aditoprj%/entity/Leadimport_entity/entityfields/loghistoryc/children/tablenames_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Tasks</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Task_entity</entityName>
-        <fieldName>Tasks</fieldName>
+        <entityName>LogHistory_entity</entityName>
+        <fieldName>LogHistoryProvider</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Tasks</name>
       <children>
         <entityParameter>
           <name>ObjectId_param</name>
@@ -206,15 +210,15 @@
           <valueProcess>%aditoprj%/entity/Leadimport_entity/entityfields/tasks/children/rowid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Task_entity</entityName>
+        <fieldName>Tasks</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Attributes</name>
       <onValidation>%aditoprj%/entity/Leadimport_entity/entityfields/attributes/onValidation.js</onValidation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>AttributeRelations</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -225,6 +229,11 @@
           <valueProcess>%aditoprj%/entity/Leadimport_entity/entityfields/attributes/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>AttributeRelations</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>UID</name>
@@ -257,45 +266,45 @@
     </entityActionField>
     <entityConsumer>
       <name>LeadTempC</name>
+      <children>
+        <entityParameter>
+          <name>LeadImportId</name>
+          <valueProcess>%aditoprj%/entity/Leadimport_entity/entityfields/leadtempc/children/leadimportid/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
       <dependency>
         <name>dependency</name>
         <entityName>LeadTemp_entity</entityName>
         <fieldName>LeadTempP</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>LeadC</name>
       <children>
         <entityParameter>
           <name>LeadImportId</name>
-          <valueProcess>%aditoprj%/entity/Leadimport_entity/entityfields/leadtempc/children/leadimportid/valueProcess.js</valueProcess>
+          <valueProcess>%aditoprj%/entity/Leadimport_entity/entityfields/leadc/children/leadimportid/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>LeadC</name>
       <dependency>
         <name>dependency</name>
         <entityName>Lead_entity</entityName>
         <fieldName>LeadP</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>LeadLogC</name>
       <children>
         <entityParameter>
           <name>LeadImportId</name>
-          <valueProcess>%aditoprj%/entity/Leadimport_entity/entityfields/leadc/children/leadimportid/valueProcess.js</valueProcess>
+          <valueProcess>%aditoprj%/entity/Leadimport_entity/entityfields/leadlogc/children/leadimportid/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>LeadLogC</name>
       <dependency>
         <name>dependency</name>
         <entityName>LeadLog_entity</entityName>
         <fieldName>LeadLogP</fieldName>
       </dependency>
-      <children>
-        <entityParameter>
-          <name>LeadImportId</name>
-          <valueProcess>%aditoprj%/entity/Leadimport_entity/entityfields/leadlogc/children/leadimportid/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
     </entityConsumer>
     <entityActionField>
       <name>LeadimportReset</name>
@@ -307,17 +316,17 @@
     </entityActionField>
     <entityConsumer>
       <name>LeadimportMappings</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>LeadimportMappingAssistant_entity</entityName>
-        <fieldName>LeadimportMapping</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>Leadimport_ID_param</name>
           <valueProcess>%aditoprj%/entity/Leadimport_entity/entityfields/leadimportmappings/children/leadimport_id_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>LeadimportMappingAssistant_entity</entityName>
+        <fieldName>LeadimportMapping</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>LEADIMPORT_OBJECTTYPE</name>
diff --git a/entity/Leadimport_entity/contentDescriptionProcess.js b/entity/Leadimport_entity/contentDescriptionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..5fa0cb58bc2af5ffc2520ddbfde0595a93c67cb9
--- /dev/null
+++ b/entity/Leadimport_entity/contentDescriptionProcess.js
@@ -0,0 +1,5 @@
+import("system.datetime");
+import("system.vars");
+import("system.result");
+import("system.translate");
+result.string(datetime.toDate(vars.get("$field.DATE_NEW"), translate.text("dd.MM.yyyy")));
\ No newline at end of file
diff --git a/entity/LetterRecipient_entity/recordcontainers/db/recordfieldmappings/targetcontext.value/expression.js b/entity/LetterRecipient_entity/recordcontainers/db/recordfieldmappings/targetcontext.value/expression.js
index 9bac722a3fa50b14fe0fd7fcf9cb92ebd8e49fba..b9a588dfe867d2a870ad80b9eb25ef5803ddfa4b 100644
--- a/entity/LetterRecipient_entity/recordcontainers/db/recordfieldmappings/targetcontext.value/expression.js
+++ b/entity/LetterRecipient_entity/recordcontainers/db/recordfieldmappings/targetcontext.value/expression.js
@@ -1,7 +1,7 @@
+import("Sql_lib");
 import("Context_lib");
 import("system.result");
 
-// TODO: is prepared possible?
-result.string("case when PERSON_ID is null then '" + ContextUtils.getContextName("Organisation")
-    + "' when CONTACT.ORGANISATION_ID is not null and CONTACT.PERSON_ID is not null then '" + ContextUtils.getContextName("Person") 
-    + "' else '' end");
\ No newline at end of file
+var sql = SqlBuilder.caseWhen("PERSON_ID is null").thenString(ContextUtils.getContextName("Organisation"))
+    .when(newWhere("CONTACT.ORGANISATION_ID is not null").and("CONTACT.PERSON_ID is not null")).thenString(ContextUtils.getContextName("Person"));
+result.string(sql.toString());
\ No newline at end of file
diff --git a/entity/Letter_entity/Letter_entity.aod b/entity/Letter_entity/Letter_entity.aod
index 5e357ba666061841bd96270267b9be9f7dc091ca..6140a981138f2c49c09a60f45e731f0685e65c3e 100644
--- a/entity/Letter_entity/Letter_entity.aod
+++ b/entity/Letter_entity/Letter_entity.aod
@@ -22,11 +22,6 @@
     </entityField>
     <entityConsumer>
       <name>DocumentTemplates</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DocumentTemplate_entity</entityName>
-        <fieldName>DocumentTemplateProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>DocumentTemplateType_param</name>
@@ -37,6 +32,11 @@
           <valueProcess>%aditoprj%/entity/Letter_entity/entityfields/documenttemplates/children/comingfrom_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DocumentTemplate_entity</entityName>
+        <fieldName>DocumentTemplateProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ContactId_param</name>
diff --git a/entity/LogHistory_entity/LogHistory_entity.aod b/entity/LogHistory_entity/LogHistory_entity.aod
index 6499fc00e002942363effcb7f67696ae5849e409..b7abfc4219a2b8478201416b55233d42b5207737 100644
--- a/entity/LogHistory_entity/LogHistory_entity.aod
+++ b/entity/LogHistory_entity/LogHistory_entity.aod
@@ -39,6 +39,12 @@
     <entityProvider>
       <name>LogHistoryProvider</name>
       <documentation>%aditoprj%/entity/LogHistory_entity/entityfields/loghistoryprovider/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>tablenames_param</name>
+          <documentation>%aditoprj%/entity/LogHistory_entity/entityfields/loghistoryprovider/children/tablenames_param/documentation.adoc</documentation>
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>23dbfa51-5340-48e3-bd60-e0dcb7d44ad3</name>
diff --git a/entity/LogHistory_entity/documentation.adoc b/entity/LogHistory_entity/documentation.adoc
index 20fa16faa475bdb8b0cd35d7ddb11fe847f73e0e..b38670d44b72f1f2236c7f594c3f1935458061a3 100644
--- a/entity/LogHistory_entity/documentation.adoc
+++ b/entity/LogHistory_entity/documentation.adoc
@@ -2,5 +2,92 @@
 
 Entity for the log entries in the individual modules.
 
-This entity is based on the `AB_LOGHISTORY`-table. Note that this database table has no primary key associated to it.
-This is because it is only a pit of log-record and not necessary.
\ No newline at end of file
+This entity is based on the `AB_LOGHISTORY`-table.
+
+== configure Loghistory
+
+:DATA_ALIAS: Data_alias
+:EDITOR_ALIAS_DEFINITION: AliasDefinition-Editor
+
+=== the concept
+//TODO: extend the concept description
+Stoarge: Database-table: `AB_LOGHISTORY`
+
+Collecting Data:
+----
+Audit -> process_audit -> Loghistory_lib: LogHistoryExecutor 
+----
+
+Data is collected and pre-translated. Therefor only one Language can be applied for logging.
+Because the loghistory is written via the auditing, only changes that are done with the proper Jdito-Methods will be logged.
+
+=== prerequisites
+
+Auditing has to be activated for all tables you want to log.
+
+.prerequisites of enabling Audit in general
+* Auditing has to be enabled in your Server
+* Auditing has to be enabled for your alias (default: +{DATA_ALIAS}+)
+* Tables that shall be logged need some configs in the _{EDITOR_ALIAS_DEFINITION}_
+** property `idColumn` has to be set (a primary key is needed therefore)
+** `auditMode` has to be set -Standard, -CLOB, or -BLOB (chosse the one you really need)
+
+
+=== activate writing into loghistory
+
+Assuming that the 
+
+* required database-tables exist 
+* JDito-processes already exist
+* audit has been activated in general
+
+you are ready to configure _which_ column shall be logged and _how_.
+
+==== configure columns for logging
+
+There are several properties (custom and pre-exisiting) that can be set for configuring the logging:
+
+.configuration options per column
+[options="header"]
+|=======
+|property |purpose |property-type
+|+title+ |text that is used to display which column has been modified|pre-exisiting
+|+log+ |defines whether a column needs to be logged or not; not exisisting equals `false` |custom: Booelan
+|+tableRef+ |references table for automatically grouping data. This is usefull for ForeignKeys, e.g. a +OFFERITEM.OFFER_ID+ column could have a +tableRef+ "OFFER"|custom: String
+|+primaryKey+ |this is not only used to enable auditing generally, but it's used to resolve +tableRef+ values correctly|pre-exisiting
+|+keyword+ |defines a keyword contianer that should be used to transform a +KEYID+ into a display value|custom: String
+|+autoMapTrueFalse4Log+ |if `true` the loghistory-executor tries to automatically translate a value into a "yes"/"no"-display value|custom: Booelan
+|+translate4Log+ |defines a process to transform a technical value into a display value |custom: JDito
+|=======
+
++translate4Log+ is a mighty possibility to translate a ID-value into a displayvalue. However, you should keep several important things in mind:
+
+* translate text if necessary via the locale-parameter
+* the process is called each time a change to that column is applied - keep it fast and simple
+
+.translate4Log example (skip imports for better readability)
+[source,javascript]
+----
+var params = Translate4LogParams.load();// <1>
+var countryName = CountryUtils.getLatinNameByIso2(params.value, params.locale); // <2>
+result.string(countryName);// <3>
+----
+<1> load the parameters in a easy and fail-proof way
+<2> locale is passed to the resolving function and in that function a translation is applied
+<3> always return a string
+
+==== configure a consumer for retrieving the loghistory
+
+.Example for the +tablenames_param+ process
+----
+import("system.vars");
+import("system.result");
+import("Context_lib");
+
+var res = [];
+res.push({id: vars.get("$field.CONTACTID"), tableNames: ["CONTACT", "COMMUNICATION", "ADDRESS", "AB_ATTRIBUTERELATION"]});
+res.push({id: vars.get("$field.PERSONID"), tableNames: ["PERSON"]});
+
+res = JSON.stringify(res);
+result.object(res);
+----
\ No newline at end of file
diff --git a/entity/LogHistory_entity/entityfields/loghistoryprovider/children/tablenames_param/documentation.adoc b/entity/LogHistory_entity/entityfields/loghistoryprovider/children/tablenames_param/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..3051d2df3f9362543da5347d37f36446eb4a924f
--- /dev/null
+++ b/entity/LogHistory_entity/entityfields/loghistoryprovider/children/tablenames_param/documentation.adoc
@@ -0,0 +1,15 @@
+= tablenames_param
+
+.Example
+----
+import("system.vars");
+import("system.result");
+import("Context_lib");
+
+var res = [];
+res.push({id: vars.get("$field.CONTACTID"), tableNames: ["CONTACT", "COMMUNICATION", "ADDRESS", "AB_ATTRIBUTERELATION"]});
+res.push({id: vars.get("$field.PERSONID"), tableNames: ["PERSON"]});
+
+res = JSON.stringify(res);
+result.object(res);
+----
\ No newline at end of file
diff --git a/entity/LogHistory_entity/entityfields/loghistoryprovider/documentation.adoc b/entity/LogHistory_entity/entityfields/loghistoryprovider/documentation.adoc
index 2712d5d5c6d4ad5349fc4f6539190503d2efa92d..4088dd1c6fa530aa4a30a142f1eb47d5ce7a7c1e 100644
--- a/entity/LogHistory_entity/entityfields/loghistoryprovider/documentation.adoc
+++ b/entity/LogHistory_entity/entityfields/loghistoryprovider/documentation.adoc
@@ -1,3 +1,5 @@
+= LogHistoryProvider
+
 Generic provider for log history entries. 
 
 A filter for given _tablenames_ is applied, see the documentation of the parameters for an example.
\ No newline at end of file
diff --git a/entity/MSTTeamLink_entity/MSTTeamLink_entity.aod b/entity/MSTTeamLink_entity/MSTTeamLink_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..d2df3a1cd3f9fc1b4d60743b0143d100153d3191
--- /dev/null
+++ b/entity/MSTTeamLink_entity/MSTTeamLink_entity.aod
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
+  <name>MSTTeamLink_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/MSTTeamLink_entity/documentation.adoc</documentation>
+  <siblings>
+    <element>Salesproject_entity</element>
+    <element>Member_entity</element>
+  </siblings>
+  <afterUiInit>%aditoprj%/entity/MSTTeamLink_entity/afterUiInit.js</afterUiInit>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityField>
+      <name>MST_TEAMLINKID</name>
+    </entityField>
+    <entityField>
+      <name>MST_TEAM_ID</name>
+      <title>Team</title>
+      <mandatory v="true" />
+      <valueProcess>%aditoprj%/entity/MSTTeamLink_entity/entityfields/mst_team_id/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>OBJECT_ROWID</name>
+      <valueProcess>%aditoprj%/entity/MSTTeamLink_entity/entityfields/object_rowid/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>OBJECT_TYPE</name>
+      <valueProcess>%aditoprj%/entity/MSTTeamLink_entity/entityfields/object_type/valueProcess.js</valueProcess>
+    </entityField>
+    <entityParameter>
+      <name>ObjectRowId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>ObjectType_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityConsumer>
+      <name>Teams</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>MSTTeam_entity</entityName>
+        <fieldName>TeamsByIdAndName</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityField>
+      <name>TEAMNAME</name>
+      <valueProcess>%aditoprj%/entity/MSTTeamLink_entity/entityfields/teamname/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>TEAM_ID_AND_NAME</name>
+      <documentation>%aditoprj%/entity/MSTTeamLink_entity/entityfields/team_id_and_name/documentation.adoc</documentation>
+      <title>Team</title>
+      <consumer>Teams</consumer>
+      <valueProcess>%aditoprj%/entity/MSTTeamLink_entity/entityfields/team_id_and_name/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/MSTTeamLink_entity/entityfields/team_id_and_name/displayValueProcess.js</displayValueProcess>
+    </entityField>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <alias>Data_alias</alias>
+      <fromClauseProcess>%aditoprj%/entity/MSTTeamLink_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
+      <conditionProcess>%aditoprj%/entity/MSTTeamLink_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
+      <onDBInsert>%aditoprj%/entity/MSTTeamLink_entity/recordcontainers/db/onDBInsert.js</onDBInsert>
+      <onDBUpdate>%aditoprj%/entity/MSTTeamLink_entity/recordcontainers/db/onDBUpdate.js</onDBUpdate>
+      <linkInformation>
+        <linkInformation>
+          <name>178230f3-4ee4-4ec0-a7f6-4f4ddddbbb22</name>
+          <tableName>MST_TEAMLINK</tableName>
+          <primaryKey>MST_TEAMLINKID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+        <linkInformation>
+          <name>53378325-f195-4eb3-9e22-68fd769eef03</name>
+          <tableName>MST_TEAM</tableName>
+          <primaryKey>MST_TEAMID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
+      </linkInformation>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>MST_TEAMLINKID.value</name>
+          <recordfield>MST_TEAMLINK.MST_TEAMLINKID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>MST_TEAM_ID.value</name>
+          <recordfield>MST_TEAMLINK.MST_TEAM_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>OBJECT_ROWID.value</name>
+          <recordfield>MST_TEAMLINK.OBJECT_ROWID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>OBJECT_TYPE.value</name>
+          <recordfield>MST_TEAMLINK.OBJECT_TYPE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>TEAMNAME.value</name>
+          <recordfield>MST_TEAM.TEAMNAME</recordfield>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/MSTTeamLink_entity/afterUiInit.js b/entity/MSTTeamLink_entity/afterUiInit.js
new file mode 100644
index 0000000000000000000000000000000000000000..bac4e960d87d6ae60ae5e5d5f2fc506fdd3d191b
--- /dev/null
+++ b/entity/MSTTeamLink_entity/afterUiInit.js
@@ -0,0 +1,13 @@
+import("system.vars");
+import("system.neon");
+import("system.entities");
+
+//reload the teams once, because the cache might not be up-to-date
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+{
+    entities.invalidateCache("MSTTeam_entity", "jdito");
+    entities.getRows(entities.createConfigForLoadingConsumerRows()
+        .consumer("Teams")
+        .fields(["UID", "TEAMNAME", "TEAMID_AND_NAME", "ISARCHIVED", "DESCRIPTION"])
+    );
+}
\ No newline at end of file
diff --git a/entity/MSTTeamLink_entity/documentation.adoc b/entity/MSTTeamLink_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..55fcd72aba98ec0011c6562a4a81014327899e72
--- /dev/null
+++ b/entity/MSTTeamLink_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= MSTTeamLink_entity
+
+This entity represents a relation between a MST team and an object (e. g. a Sales Project).
\ No newline at end of file
diff --git a/entity/MSTTeamLink_entity/entityfields/mst_team_id/valueProcess.js b/entity/MSTTeamLink_entity/entityfields/mst_team_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8b66b4de6f181006ed9464bc5c730db279e5af42
--- /dev/null
+++ b/entity/MSTTeamLink_entity/entityfields/mst_team_id/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+import("Util_lib");
+
+var teamIdAndName = Utils.parseJSON(vars.get("$field.TEAM_ID_AND_NAME"));
+if (teamIdAndName && (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT))
+    result.string(teamIdAndName[0]);
\ No newline at end of file
diff --git a/entity/MSTTeamLink_entity/entityfields/object_rowid/valueProcess.js b/entity/MSTTeamLink_entity/entityfields/object_rowid/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..53123b405da6e47e653fc29b6ea5b1d7ab0b7aba
--- /dev/null
+++ b/entity/MSTTeamLink_entity/entityfields/object_rowid/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string(vars.get("$param.ObjectRowId_param"));
\ No newline at end of file
diff --git a/entity/MSTTeamLink_entity/entityfields/object_type/valueProcess.js b/entity/MSTTeamLink_entity/entityfields/object_type/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7f34d7fdb9049c4c3427fb40b45a320b1585d5b0
--- /dev/null
+++ b/entity/MSTTeamLink_entity/entityfields/object_type/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+    result.string(vars.get("$param.ObjectType_param"));
\ No newline at end of file
diff --git a/entity/MSTTeamLink_entity/entityfields/team_id_and_name/displayValueProcess.js b/entity/MSTTeamLink_entity/entityfields/team_id_and_name/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ada1bccad1d8dba906a5f5db4d9289e0abf3f44f
--- /dev/null
+++ b/entity/MSTTeamLink_entity/entityfields/team_id_and_name/displayValueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.TEAMNAME"));
\ No newline at end of file
diff --git a/entity/MSTTeamLink_entity/entityfields/team_id_and_name/documentation.adoc b/entity/MSTTeamLink_entity/entityfields/team_id_and_name/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..7ef07b42d0e7f4ddef718cf1cf07362e36866b23
--- /dev/null
+++ b/entity/MSTTeamLink_entity/entityfields/team_id_and_name/documentation.adoc
@@ -0,0 +1,7 @@
+= TEAM_ID_AND_NAME
+
+This field is used for selecting a MST team for the teamLink. Because we need both the id and the name from the team, it can't be selected
+directly in the MST_TEAM_ID field, which contains only the id (and fetching the name afterwards using the id would be rather slow).
+
+In new- or edit-mode, the two fields MST_TEAM_ID and TEAMNAME pull their values from this field. In view-mode, this field gets the value
+from MST_TEAM_ID and TEAMNAME, because only these two fields are connected to the recordContainer.
\ No newline at end of file
diff --git a/entity/MSTTeamLink_entity/entityfields/team_id_and_name/valueProcess.js b/entity/MSTTeamLink_entity/entityfields/team_id_and_name/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..94638c9fe9031b798104127c1426fc2d471dca36
--- /dev/null
+++ b/entity/MSTTeamLink_entity/entityfields/team_id_and_name/valueProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+//in view-mode, load the values from the fields that are connected to the recordcontainer
+if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW && vars.get("$sys.recordstate") != neon.OPERATINGSTATE_EDIT)
+    result.string(JSON.stringify([vars.get("$field.MST_TEAM_ID"), vars.get("$field.TEAMNAME")]));
\ No newline at end of file
diff --git a/entity/MSTTeamLink_entity/entityfields/teamname/valueProcess.js b/entity/MSTTeamLink_entity/entityfields/teamname/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d3f581dba2d01626cb9050634dac3abba981f6ab
--- /dev/null
+++ b/entity/MSTTeamLink_entity/entityfields/teamname/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+import("Util_lib");
+
+var teamIdAndName = Utils.parseJSON(vars.get("$field.TEAM_ID_AND_NAME"));
+if (teamIdAndName && (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT))
+    result.string(teamIdAndName[1]);
\ No newline at end of file
diff --git a/entity/MSTTeamLink_entity/recordcontainers/db/conditionProcess.js b/entity/MSTTeamLink_entity/recordcontainers/db/conditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ad0a18104e1291790bd33463603537bce7c5914b
--- /dev/null
+++ b/entity/MSTTeamLink_entity/recordcontainers/db/conditionProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("Sql_lib");
+
+var condition = newWhereIfSet("MST_TEAMLINK.OBJECT_ROWID", "$param.ObjectRowId_param")
+    .andIfSet("MST_TEAMLINK.OBJECT_TYPE", "$param.ObjectType_param");
+
+result.string(condition.toString(SqlBuilder.NORESULT_CONDITION()));
\ No newline at end of file
diff --git a/entity/MSTTeamLink_entity/recordcontainers/db/fromClauseProcess.js b/entity/MSTTeamLink_entity/recordcontainers/db/fromClauseProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4457ba9b19fa0da6c133ce39565cb83164888cfb
--- /dev/null
+++ b/entity/MSTTeamLink_entity/recordcontainers/db/fromClauseProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("MST_TEAMLINK left join MST_TEAM on MST_TEAMLINK.MST_TEAM_ID = MST_TEAM.MST_TEAMID");
\ No newline at end of file
diff --git a/entity/MSTTeamLink_entity/recordcontainers/db/onDBInsert.js b/entity/MSTTeamLink_entity/recordcontainers/db/onDBInsert.js
new file mode 100644
index 0000000000000000000000000000000000000000..bf45fb336010b2db0a4ddc1e03a35ce009fb2c15
--- /dev/null
+++ b/entity/MSTTeamLink_entity/recordcontainers/db/onDBInsert.js
@@ -0,0 +1,12 @@
+import("system.vars");
+import("MSTeams_lib");
+
+var teamLinkId = vars.get("$local.uid");
+var rowData = vars.get("$local.rowdata");
+//if the linked context is configured to have just one teamLink but the object already has a teamLink, the old teamLink will be deleted
+MSTeamsUtils.purgeCorruptTeamLinks(rowData["MST_TEAMLINK.OBJECT_ROWID"], rowData["MST_TEAMLINK.OBJECT_TYPE"], teamLinkId);
+
+MSTeamsUtils.insertTeamIfMissing({
+    teamId: rowData["MST_TEAMLINK.MST_TEAM_ID"],
+    teamName: rowData["MST_TEAM.TEAMNAME"]
+});
\ No newline at end of file
diff --git a/entity/MSTTeamLink_entity/recordcontainers/db/onDBUpdate.js b/entity/MSTTeamLink_entity/recordcontainers/db/onDBUpdate.js
new file mode 100644
index 0000000000000000000000000000000000000000..61769345ec3f8bb71aad2e776267b4f5f009f185
--- /dev/null
+++ b/entity/MSTTeamLink_entity/recordcontainers/db/onDBUpdate.js
@@ -0,0 +1,9 @@
+import("system.vars");
+import("MSTeams_lib");
+
+var rowData = vars.get("$local.rowdata");
+
+MSTeamsUtils.insertTeamIfMissing({
+    teamId: rowData["MST_TEAMLINK.MST_TEAM_ID"],
+    teamName: rowData["MST_TEAM.TEAMNAME"]
+});
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/MSTTeamMember_entity.aod b/entity/MSTTeamMember_entity/MSTTeamMember_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..72dead10e1dc47cf5fe80fb31d4493667fd40677
--- /dev/null
+++ b/entity/MSTTeamMember_entity/MSTTeamMember_entity.aod
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
+  <name>MSTTeamMember_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/MSTTeamMember_entity/documentation.adoc</documentation>
+  <title>Member</title>
+  <siblings />
+  <titlePlural>Members</titlePlural>
+  <recordContainer>jdito</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+      <dependencies>
+        <entityDependency>
+          <name>335d30c4-7beb-4dcb-8a0f-de85108530a9</name>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityField>
+      <name>CONTACT_ID</name>
+      <title>Members</title>
+      <consumer>ProjectMembers</consumer>
+      <linkedContextProcess>%aditoprj%/entity/MSTTeamMember_entity/entityfields/contact_id/linkedContextProcess.js</linkedContextProcess>
+      <mandatory v="true" />
+      <stateProcess>%aditoprj%/entity/MSTTeamMember_entity/entityfields/contact_id/stateProcess.js</stateProcess>
+      <displayValueProcess>%aditoprj%/entity/MSTTeamMember_entity/entityfields/contact_id/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>UID</name>
+    </entityField>
+    <entityParameter>
+      <name>UpnsOfMembers_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>MailsOfExtern_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityConsumer>
+      <name>ProjectMembers</name>
+      <children>
+        <entityParameter>
+          <name>ObjectRowId_param</name>
+          <valueProcess>%aditoprj%/entity/MSTTeamMember_entity/entityfields/projectmembers/children/objectrowid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>ObjectType_param</name>
+          <valueProcess>%aditoprj%/entity/MSTTeamMember_entity/entityfields/projectmembers/children/objecttype_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Member_entity</entityName>
+        <fieldName>TeamMemberProvider</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityField>
+      <name>ISEXTERN</name>
+      <state>INVISIBLE</state>
+      <valueProcess>%aditoprj%/entity/MSTTeamMember_entity/entityfields/isextern/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>MEMBERNAME</name>
+    </entityField>
+    <entityParameter>
+      <name>MSTTeamId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityProvider>
+      <name>MembersOfTeam</name>
+      <documentation>%aditoprj%/entity/MSTTeamMember_entity/entityfields/membersofteam/documentation.adoc</documentation>
+      <dependencies>
+        <entityDependency>
+          <name>37854fde-c4ae-4f56-82df-14385717f82e</name>
+          <entityName>MSTTeam_entity</entityName>
+          <fieldName>TeamMembers</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityParameter>
+      <name>ObjectRowId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>ObjectType_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityField>
+      <name>ROLE</name>
+      <title>Role</title>
+      <mandatory v="true" />
+      <mandatoryProcess>%aditoprj%/entity/MSTTeamMember_entity/entityfields/role/mandatoryProcess.js</mandatoryProcess>
+      <dropDownProcess>%aditoprj%/entity/MSTTeamMember_entity/entityfields/role/dropDownProcess.js</dropDownProcess>
+      <stateProcess>%aditoprj%/entity/MSTTeamMember_entity/entityfields/role/stateProcess.js</stateProcess>
+    </entityField>
+    <entityField>
+      <name>INVITE</name>
+      <title>Invitation</title>
+      <mandatoryProcess>%aditoprj%/entity/MSTTeamMember_entity/entityfields/invite/mandatoryProcess.js</mandatoryProcess>
+      <dropDownProcess>%aditoprj%/entity/MSTTeamMember_entity/entityfields/invite/dropDownProcess.js</dropDownProcess>
+      <stateProcess>%aditoprj%/entity/MSTTeamMember_entity/entityfields/invite/stateProcess.js</stateProcess>
+    </entityField>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityField>
+      <name>AZUREID</name>
+      <state>INVISIBLE</state>
+      <valueProcess>%aditoprj%/entity/MSTTeamMember_entity/entityfields/azureid/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>AZUREUPN</name>
+      <state>INVISIBLE</state>
+      <valueProcess>%aditoprj%/entity/MSTTeamMember_entity/entityfields/azureupn/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>AZURE_DATA</name>
+      <valueProcess>%aditoprj%/entity/MSTTeamMember_entity/entityfields/azure_data/valueProcess.js</valueProcess>
+    </entityField>
+  </entityFields>
+  <recordContainers>
+    <jDitoRecordContainer>
+      <name>jdito</name>
+      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
+      <contentProcess>%aditoprj%/entity/MSTTeamMember_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
+      <hasDependentRecords v="true" />
+      <onInsert>%aditoprj%/entity/MSTTeamMember_entity/recordcontainers/jdito/onInsert.js</onInsert>
+      <onUpdate>%aditoprj%/entity/MSTTeamMember_entity/recordcontainers/jdito/onUpdate.js</onUpdate>
+      <onDelete>%aditoprj%/entity/MSTTeamMember_entity/recordcontainers/jdito/onDelete.js</onDelete>
+      <recordFieldMappings>
+        <jDitoRecordFieldMapping>
+          <name>UID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>MEMBERNAME.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ROLE.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ROLE.displayValue</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>CONTACT_ID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>CONTACT_ID.displayValue</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ISEXTERN.value</name>
+        </jDitoRecordFieldMapping>
+      </recordFieldMappings>
+    </jDitoRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/MSTTeamMember_entity/documentation.adoc b/entity/MSTTeamMember_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..31059321e3f9951411240a778c077d89bda07fbc
--- /dev/null
+++ b/entity/MSTTeamMember_entity/documentation.adoc
@@ -0,0 +1,14 @@
+MSTTeamMember
+============
+
+== Overview ==
+MSTTeamMember is used to get all members of a MST team
+
+== A MSTTeamMember consists of some modules: ==
+- MSTTeamMember itself
+
+== BestPractice ==
+
+== FAQ ==
+
+
diff --git a/entity/MSTTeamMember_entity/entityfields/azure_data/valueProcess.js b/entity/MSTTeamMember_entity/entityfields/azure_data/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2df756b62a28fb058c3cec8a2df5de3090bf9538
--- /dev/null
+++ b/entity/MSTTeamMember_entity/entityfields/azure_data/valueProcess.js
@@ -0,0 +1,16 @@
+import("system.result");
+import("system.neon");
+import("system.tools");
+import("system.vars");
+import("Employee_lib");
+
+var contactId = vars.get("$field.CONTACT_ID");
+var user = EmployeeUtils.getUserByContactId(contactId);
+var azureId = user ? user[tools.PARAMS][tools.TEAMS_AZUREID] : "";
+var azureUpn = user ? user[tools.PARAMS][tools.TEAMS_AZUREUPN] : "";
+
+var azureData = {
+    azureId: azureId,
+    azureUpn: azureUpn
+};
+result.string(JSON.stringify(azureData));
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/entityfields/azureid/valueProcess.js b/entity/MSTTeamMember_entity/entityfields/azureid/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7744184c730b891e88e88ada811a017db109b03d
--- /dev/null
+++ b/entity/MSTTeamMember_entity/entityfields/azureid/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("Util_lib");
+import("system.vars");
+
+var azureData = Utils.parseJSON(vars.get("$field.AZURE_DATA"));
+result.string(azureData ? azureData.azureId : "");
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/entityfields/azureupn/valueProcess.js b/entity/MSTTeamMember_entity/entityfields/azureupn/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..554d4e727325955acb211567d4ea1878a534128c
--- /dev/null
+++ b/entity/MSTTeamMember_entity/entityfields/azureupn/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("Util_lib");
+import("system.vars");
+
+var azureData = Utils.parseJSON(vars.get("$field.AZURE_DATA"));
+result.string(azureData ? azureData.azureUpn : "");
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/entityfields/contact_id/displayValueProcess.js b/entity/MSTTeamMember_entity/entityfields/contact_id/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e038c4ba3609a69417debdc9c43185e7051438ff
--- /dev/null
+++ b/entity/MSTTeamMember_entity/entityfields/contact_id/displayValueProcess.js
@@ -0,0 +1,10 @@
+import("system.result");
+import("system.vars");
+import("Contact_lib");
+
+if (vars.get("$field.MEMBERNAME"))
+    result.string(vars.get("$field.MEMBERNAME"));
+else 
+{
+    result.string(ContactUtils.getTitleByContactId(vars.get("$field.CONTACT_ID")));
+}
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/entityfields/contact_id/linkedContextProcess.js b/entity/MSTTeamMember_entity/entityfields/contact_id/linkedContextProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c02451c808e121fce9dea7537331dc3fa0dd6e02
--- /dev/null
+++ b/entity/MSTTeamMember_entity/entityfields/contact_id/linkedContextProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+
+if (vars.get("$field.CONTACT_ID"))
+    result.string("Person");
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/entityfields/contact_id/stateProcess.js b/entity/MSTTeamMember_entity/entityfields/contact_id/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..53c48b1aa60c14977805717d383efb2668f5bd64
--- /dev/null
+++ b/entity/MSTTeamMember_entity/entityfields/contact_id/stateProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+result.string(vars.get("$field.MEMBERNAME") ? neon.COMPONENTSTATE_READONLY : neon.COMPONENTSTATE_EDITABLE);
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/entityfields/invite/dropDownProcess.js b/entity/MSTTeamMember_entity/entityfields/invite/dropDownProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..0a4ec38e3c77cac49e9a94b463d4c483a63715a7
--- /dev/null
+++ b/entity/MSTTeamMember_entity/entityfields/invite/dropDownProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.translate");
+
+result.object([
+    ["true", translate.text("Invite")],
+    ["false", translate.text("Don't invite")]
+]);
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/entityfields/invite/mandatoryProcess.js b/entity/MSTTeamMember_entity/entityfields/invite/mandatoryProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..488ee5dc7e0ad5e6122271731fa275245d7057e6
--- /dev/null
+++ b/entity/MSTTeamMember_entity/entityfields/invite/mandatoryProcess.js
@@ -0,0 +1,5 @@
+import("Util_lib");
+import("system.vars");
+import("system.result");
+
+result.string(Utils.toBoolean(vars.get("$field.ISEXTERN")));
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/entityfields/invite/stateProcess.js b/entity/MSTTeamMember_entity/entityfields/invite/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..37feecaa37dcd3ffed35221ff2e9157477fa6f4e
--- /dev/null
+++ b/entity/MSTTeamMember_entity/entityfields/invite/stateProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+result.string(vars.get("$field.MEMBERNAME") || vars.get("$field.ISEXTERN") != "true" ? neon.COMPONENTSTATE_INVISIBLE : neon.COMPONENTSTATE_EDITABLE);
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/entityfields/isextern/valueProcess.js b/entity/MSTTeamMember_entity/entityfields/isextern/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c2bd7034a52ed887060a47de48959ab0db7792f5
--- /dev/null
+++ b/entity/MSTTeamMember_entity/entityfields/isextern/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("Util_lib");
+import("system.vars");
+
+var azureData = Utils.parseJSON(vars.get("$field.AZURE_DATA"));
+result.string(!azureData || !(azureData.azureId || azureData.azureUpn));
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/entityfields/membersofteam/documentation.adoc b/entity/MSTTeamMember_entity/entityfields/membersofteam/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..f9cc1fa6dc82eea3b61b20c766c074e38ac518f1
--- /dev/null
+++ b/entity/MSTTeamMember_entity/entityfields/membersofteam/documentation.adoc
@@ -0,0 +1,3 @@
+Provider MembersOfTeam
+
+Provides the members of a team
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/entityfields/projectmembers/children/objectrowid_param/valueProcess.js b/entity/MSTTeamMember_entity/entityfields/projectmembers/children/objectrowid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f21aa5c2a735e552ff099c71fed0cd5fd88cbca1
--- /dev/null
+++ b/entity/MSTTeamMember_entity/entityfields/projectmembers/children/objectrowid_param/valueProcess.js
@@ -0,0 +1,13 @@
+import("system.vars");
+import("system.result");
+import("Sql_lib");
+
+var rowId = vars.get("$param.ObjectRowId_param");
+if (!rowId)
+{
+    rowId = newSelect("OBJECT_ROWID")
+        .from("MST_TEAMLINK")
+        .where("MST_TEAMLINK.MST_TEAM_ID", "$param.MSTTeamId_param")
+        .cell();
+}
+result.string(rowId);
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/entityfields/projectmembers/children/objecttype_param/valueProcess.js b/entity/MSTTeamMember_entity/entityfields/projectmembers/children/objecttype_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..95c8514f3bbc2804547c47b50ec222c09aec3f59
--- /dev/null
+++ b/entity/MSTTeamMember_entity/entityfields/projectmembers/children/objecttype_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$param.ObjectType_param"));
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/entityfields/role/dropDownProcess.js b/entity/MSTTeamMember_entity/entityfields/role/dropDownProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..97558334115b6199684018810a38d54788a0e56b
--- /dev/null
+++ b/entity/MSTTeamMember_entity/entityfields/role/dropDownProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.translate");
+
+result.object([
+    ["owner", translate.text("Owner")],
+    ["member", translate.text("Member")]
+]);
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/entityfields/role/mandatoryProcess.js b/entity/MSTTeamMember_entity/entityfields/role/mandatoryProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..79bef7b2ca07a9f35c95021eedcee8f89d68f873
--- /dev/null
+++ b/entity/MSTTeamMember_entity/entityfields/role/mandatoryProcess.js
@@ -0,0 +1,5 @@
+import("Util_lib");
+import("system.vars");
+import("system.result");
+
+result.string(!Utils.toBoolean(vars.get("$field.ISEXTERN")));
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/entityfields/role/stateProcess.js b/entity/MSTTeamMember_entity/entityfields/role/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f76be28d47e7adee58f41d88a7a7993bda575de0
--- /dev/null
+++ b/entity/MSTTeamMember_entity/entityfields/role/stateProcess.js
@@ -0,0 +1,15 @@
+import("system.result");
+import("system.vars");
+import("system.neon");
+import("system.logging")
+
+var state = neon.COMPONENTSTATE_EDITABLE;
+if (vars.get("$field.ISEXTERN") == "true")
+{
+    if (!vars.get("$field.MEMBERNAME"))
+        state = neon.COMPONENTSTATE_INVISIBLE;
+    else
+        state = neon.COMPONENTSTATE_READONLY;
+}
+
+result.string(state);
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/recordcontainers/jdito/contentProcess.js b/entity/MSTTeamMember_entity/recordcontainers/jdito/contentProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..4f615a675a9df54c018305fd39293403cd7f852f
--- /dev/null
+++ b/entity/MSTTeamMember_entity/recordcontainers/jdito/contentProcess.js
@@ -0,0 +1,44 @@
+import("system.translate");
+import("system.teams");
+import("system.result");
+import("system.vars");
+import("MSTeams_lib");
+
+var teamId = vars.get("$param.MSTTeamId_param");
+var allMembers = teamId ? teams.getAllMembers(teamId) : {};
+var impersoAzureId = MSTeamsUtils.getImpersoAzureId();
+if (impersoAzureId in allMembers) //don't display the imperso user
+    delete allMembers[impersoAzureId];
+    
+var memberIds = vars.get("$local.idvalues") || Object.keys(allMembers);
+var owners = teamId ? teams.getAllOwners(teamId) : {};
+var memberContactIds = MSTeamsUtils.getContactIdsByAzureIds(memberIds);
+var memberArray = [];
+
+memberArray = memberIds.map(function (memberId) 
+{
+    var role = "guest";
+    var roleName = translate.text("Guest");
+    if (memberId in owners)
+    {
+        role = "owner";
+        roleName = translate.text("Owner");
+    }
+    else if (memberId in memberContactIds)
+    {
+        role = "member";
+        roleName = translate.text("Member");
+    }
+    
+    return [
+        memberId, 
+        allMembers[memberId] || "", 
+        role,
+        roleName,
+        memberContactIds[memberId] || "",
+        allMembers[memberId] || "",
+        !(memberId in memberContactIds)
+    ];
+});   
+
+result.object(memberArray);
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/recordcontainers/jdito/onDelete.js b/entity/MSTTeamMember_entity/recordcontainers/jdito/onDelete.js
new file mode 100644
index 0000000000000000000000000000000000000000..03dee90e18e2a92a7f745165aedf7168e54e7f60
--- /dev/null
+++ b/entity/MSTTeamMember_entity/recordcontainers/jdito/onDelete.js
@@ -0,0 +1,2 @@
+//deletion is done in the MSTTeam_entity
+var e = "e";
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/recordcontainers/jdito/onInsert.js b/entity/MSTTeamMember_entity/recordcontainers/jdito/onInsert.js
new file mode 100644
index 0000000000000000000000000000000000000000..c776217e3402eab8c1c1dceed828a5cc17e1d380
--- /dev/null
+++ b/entity/MSTTeamMember_entity/recordcontainers/jdito/onInsert.js
@@ -0,0 +1,2 @@
+//inserting is done in the MSTTeam_entity
+var dummy = "dummy";
\ No newline at end of file
diff --git a/entity/MSTTeamMember_entity/recordcontainers/jdito/onUpdate.js b/entity/MSTTeamMember_entity/recordcontainers/jdito/onUpdate.js
new file mode 100644
index 0000000000000000000000000000000000000000..1df92b6ad9e44d0f84ee47f4e96b94fffa54721f
--- /dev/null
+++ b/entity/MSTTeamMember_entity/recordcontainers/jdito/onUpdate.js
@@ -0,0 +1,2 @@
+//updating is done in the MSTTeam_entity
+var dummy = "dummy";
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/MSTTeam_entity.aod b/entity/MSTTeam_entity/MSTTeam_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..f7675657fed04c925d381d928cb6d43ce6d14d20
--- /dev/null
+++ b/entity/MSTTeam_entity/MSTTeam_entity.aod
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
+  <name>MSTTeam_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/MSTTeam_entity/documentation.adoc</documentation>
+  <grantUpdateProcess>%aditoprj%/entity/MSTTeam_entity/grantUpdateProcess.js</grantUpdateProcess>
+  <grantDeleteProcess>%aditoprj%/entity/MSTTeam_entity/grantDeleteProcess.js</grantDeleteProcess>
+  <contentTitleProcess>%aditoprj%/entity/MSTTeam_entity/contentTitleProcess.js</contentTitleProcess>
+  <afterUiInit>%aditoprj%/entity/MSTTeam_entity/afterUiInit.js</afterUiInit>
+  <recordContainer>jdito</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>UID</name>
+    </entityField>
+    <entityField>
+      <name>TEAMNAME</name>
+      <title>Name</title>
+      <mandatory v="true" />
+      <stateProcess>%aditoprj%/entity/MSTTeam_entity/entityfields/teamname/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/MSTTeam_entity/entityfields/teamname/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>DESCRIPTION</name>
+      <title>Description</title>
+      <contentType>LONG_TEXT</contentType>
+      <stateProcess>%aditoprj%/entity/MSTTeam_entity/entityfields/description/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/MSTTeam_entity/entityfields/description/valueProcess.js</valueProcess>
+    </entityField>
+    <entityParameter>
+      <name>TeamName_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>Description_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityConsumer>
+      <name>TeamMembers</name>
+      <stateProcess>%aditoprj%/entity/MSTTeam_entity/entityfields/teammembers/stateProcess.js</stateProcess>
+      <onValidation>%aditoprj%/entity/MSTTeam_entity/entityfields/teammembers/onValidation.js</onValidation>
+      <children>
+        <entityParameter>
+          <name>MSTTeamId_param</name>
+          <valueProcess>%aditoprj%/entity/MSTTeam_entity/entityfields/teammembers/children/mstteamid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>ObjectRowId_param</name>
+          <valueProcess>%aditoprj%/entity/MSTTeam_entity/entityfields/teammembers/children/objectrowid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>ObjectType_param</name>
+          <valueProcess>%aditoprj%/entity/MSTTeam_entity/entityfields/teammembers/children/objecttype_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>MSTTeamMember_entity</entityName>
+        <fieldName>MembersOfTeam</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityField>
+      <name>TEAMID_AND_NAME</name>
+    </entityField>
+    <entityField>
+      <name>ISARCHIVED</name>
+      <title>Archived</title>
+      <dropDownProcess>%aditoprj%/entity/MSTTeam_entity/entityfields/isarchived/dropDownProcess.js</dropDownProcess>
+    </entityField>
+    <entityParameter>
+      <name>ObjectRowId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>ObjectType_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityConsumer>
+      <name>Channels</name>
+      <children>
+        <entityParameter>
+          <name>TeamId_param</name>
+          <valueProcess>%aditoprj%/entity/MSTTeam_entity/entityfields/channels/children/teamid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>MSTeamsChannel_entity</entityName>
+        <fieldName>ChannelsForTeam</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityParameter>
+      <name>SalesprojectCode_param</name>
+      <expose v="true" />
+      <description>PARAMETER</description>
+    </entityParameter>
+    <entityProvider>
+      <name>TeamsByIdAndName</name>
+      <lookupIdfield>TEAMID_AND_NAME</lookupIdfield>
+      <documentation>%aditoprj%/entity/MSTTeam_entity/entityfields/teamsbyidandname/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>UseCache_param</name>
+          <valueProcess>%aditoprj%/entity/MSTTeam_entity/entityfields/teamsbyidandname/children/usecache_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
+      </children>
+      <dependencies>
+        <entityDependency>
+          <name>e48136a2-5f66-4399-903a-cd1363fa30c6</name>
+          <entityName>MSTTeamLink_entity</entityName>
+          <fieldName>Teams</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityParameter>
+      <name>UseCache_param</name>
+      <expose v="true" />
+    </entityParameter>
+  </entityFields>
+  <recordContainers>
+    <jDitoRecordContainer>
+      <name>jdito</name>
+      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
+      <isFilterable v="true" />
+      <isRequireContainerFiltering v="true" />
+      <contentProcess>%aditoprj%/entity/MSTTeam_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
+      <onInsert>%aditoprj%/entity/MSTTeam_entity/recordcontainers/jdito/onInsert.js</onInsert>
+      <onUpdate>%aditoprj%/entity/MSTTeam_entity/recordcontainers/jdito/onUpdate.js</onUpdate>
+      <onDelete>%aditoprj%/entity/MSTTeam_entity/recordcontainers/jdito/onDelete.js</onDelete>
+      <cacheType>SESSION</cacheType>
+      <cacheKeyProcess>%aditoprj%/entity/MSTTeam_entity/recordcontainers/jdito/cacheKeyProcess.js</cacheKeyProcess>
+      <recordFieldMappings>
+        <jDitoRecordFieldMapping>
+          <name>UID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>TEAMNAME.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>TEAMID_AND_NAME.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>DESCRIPTION.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>ISARCHIVED.value</name>
+        </jDitoRecordFieldMapping>
+      </recordFieldMappings>
+    </jDitoRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/MSTTeam_entity/afterUiInit.js b/entity/MSTTeam_entity/afterUiInit.js
new file mode 100644
index 0000000000000000000000000000000000000000..018d0a4733e5cbbe12c222b5dad06af43196a371
--- /dev/null
+++ b/entity/MSTTeam_entity/afterUiInit.js
@@ -0,0 +1,20 @@
+import("system.entities");
+import("system.vars");
+import("system.neon");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+{
+    var memberLoadConfig = entities.createConfigForLoadingRows()
+        .fields(["CONTACT_ID"])
+        .entity("Member_entity")
+        .provider("Links")
+        .addParameter("ObjectRowId_param", vars.get("$param.ObjectRowId_param"))
+        .addParameter("ObjectType_param", vars.get("$param.ObjectType_param"));
+        
+    entities.getRows(memberLoadConfig).forEach(function (member)
+    {
+        neon.addRecord("TeamMembers", {
+            "CONTACT_ID": member["CONTACT_ID"]
+        });
+    })
+}
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/contentTitleProcess.js b/entity/MSTTeam_entity/contentTitleProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ada1bccad1d8dba906a5f5db4d9289e0abf3f44f
--- /dev/null
+++ b/entity/MSTTeam_entity/contentTitleProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.TEAMNAME"));
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/documentation.adoc b/entity/MSTTeam_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..1d8ddac0f359514ccb2d7bef6dc161e4227d6036
--- /dev/null
+++ b/entity/MSTTeam_entity/documentation.adoc
@@ -0,0 +1,14 @@
+MSTTeam
+============
+
+== Overview ==
+MSTTeam is used to display the linked team. create a team, edit a team
+
+== A MSTTeam consists of some modules: ==
+- MSTTeam itself
+
+== BestPractice ==
+
+== FAQ ==
+
+
diff --git a/entity/MSTTeam_entity/entityfields/channels/children/teamid_param/valueProcess.js b/entity/MSTTeam_entity/entityfields/channels/children/teamid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..16c85500b5355a72548030867e3d300661e9d4aa
--- /dev/null
+++ b/entity/MSTTeam_entity/entityfields/channels/children/teamid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.UID"));
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/entityfields/description/stateProcess.js b/entity/MSTTeam_entity/entityfields/description/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..18f779e6910541c7a8e75facfe14a54cfc74458b
--- /dev/null
+++ b/entity/MSTTeam_entity/entityfields/description/stateProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+result.string(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW ? neon.COMPONENTSTATE_EDITABLE : neon.COMPONENTSTATE_READONLY);
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/entityfields/description/valueProcess.js b/entity/MSTTeam_entity/entityfields/description/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..561cefe7b56371783c388b4e0c233197a6a96d73
--- /dev/null
+++ b/entity/MSTTeam_entity/entityfields/description/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$param.Description_param") && vars.get("$this.value") == null)
+    result.string(vars.get("$param.Description_param"));
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/entityfields/isarchived/dropDownProcess.js b/entity/MSTTeam_entity/entityfields/isarchived/dropDownProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f77d640ef1d32a67d4fd3e8da7bcff5531277f05
--- /dev/null
+++ b/entity/MSTTeam_entity/entityfields/isarchived/dropDownProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.translate");
+
+result.object([
+    ["true", translate.text("Yes")],
+    ["false", translate.text("No")]
+]);
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/entityfields/teammembers/children/mstteamid_param/valueProcess.js b/entity/MSTTeam_entity/entityfields/teammembers/children/mstteamid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7b7daa293fe35f6acc203b39e6cb67bb7a987151
--- /dev/null
+++ b/entity/MSTTeam_entity/entityfields/teammembers/children/mstteamid_param/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW && vars.get("$field.TEAMID_AND_NAME"))
+    result.string(vars.get("$field.UID"));
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/entityfields/teammembers/children/objectrowid_param/valueProcess.js b/entity/MSTTeam_entity/entityfields/teammembers/children/objectrowid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..dc0d70ccbe710b96a2f13dfac668a5b705e5aae1
--- /dev/null
+++ b/entity/MSTTeam_entity/entityfields/teammembers/children/objectrowid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$param.ObjectRowId_param"));
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/entityfields/teammembers/children/objecttype_param/valueProcess.js b/entity/MSTTeam_entity/entityfields/teammembers/children/objecttype_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..95c8514f3bbc2804547c47b50ec222c09aec3f59
--- /dev/null
+++ b/entity/MSTTeam_entity/entityfields/teammembers/children/objecttype_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$param.ObjectType_param"));
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/entityfields/teammembers/onValidation.js b/entity/MSTTeam_entity/entityfields/teammembers/onValidation.js
new file mode 100644
index 0000000000000000000000000000000000000000..0629031e507398d3f502728590e967582d74fc50
--- /dev/null
+++ b/entity/MSTTeam_entity/entityfields/teammembers/onValidation.js
@@ -0,0 +1,11 @@
+import("Entity_lib");
+import("system.result");
+import("system.translate");
+
+var members = EntityConsumerRowsHelper.getCurrentConsumerRows("TeamMembers", ["ROLE"]);
+var hasOwner = members.some(function (member)
+{
+    return member["ROLE"] == "owner";
+});
+if (!hasOwner)
+    result.string(translate.text("The team must have at least one owner"));
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/entityfields/teammembers/stateProcess.js b/entity/MSTTeam_entity/entityfields/teammembers/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1c53ca6a0df2f0f9fe9edc13efa4226f1b936c5f
--- /dev/null
+++ b/entity/MSTTeam_entity/entityfields/teammembers/stateProcess.js
@@ -0,0 +1,6 @@
+import("Util_lib");
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+result.string(Utils.toBoolean(vars.get("$field.ISARCHIVED")) ? neon.COMPONENTSTATE_INVISIBLE : neon.COMPONENTSTATE_EDITABLE);
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/entityfields/teamname/stateProcess.js b/entity/MSTTeam_entity/entityfields/teamname/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..18f779e6910541c7a8e75facfe14a54cfc74458b
--- /dev/null
+++ b/entity/MSTTeam_entity/entityfields/teamname/stateProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+result.string(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW ? neon.COMPONENTSTATE_EDITABLE : neon.COMPONENTSTATE_READONLY);
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/entityfields/teamname/valueProcess.js b/entity/MSTTeam_entity/entityfields/teamname/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..31b659fe1728c550134884ef7bdbf98fed4110d2
--- /dev/null
+++ b/entity/MSTTeam_entity/entityfields/teamname/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$param.TeamName_param") && vars.get("$this.value") == null)
+    result.string(vars.get("$param.TeamName_param"));
\ No newline at end of file
diff --git a/entity/DocumentTemplatePlaceOfUse_entity/entityfields/contextdocumenttemplateplaceofuse/children/getallcontexts_param/valueProcess.js b/entity/MSTTeam_entity/entityfields/teamsbyidandname/children/usecache_param/valueProcess.js
similarity index 100%
rename from entity/DocumentTemplatePlaceOfUse_entity/entityfields/contextdocumenttemplateplaceofuse/children/getallcontexts_param/valueProcess.js
rename to entity/MSTTeam_entity/entityfields/teamsbyidandname/children/usecache_param/valueProcess.js
diff --git a/entity/MSTTeam_entity/entityfields/teamsbyidandname/documentation.adoc b/entity/MSTTeam_entity/entityfields/teamsbyidandname/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..84522789b1b5dd1e014bd0db3e6c4c7b740f7b3a
--- /dev/null
+++ b/entity/MSTTeam_entity/entityfields/teamsbyidandname/documentation.adoc
@@ -0,0 +1,4 @@
+= TeamsByIdAndName
+
+The provider uses a JSON containing [teamId, teamName] as the lookupIdField for cases when both values are needed.
+Because the request that loads the MST teams can be slow, the records will be cached if this provider is used.
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/grantDeleteProcess.js b/entity/MSTTeam_entity/grantDeleteProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3fad7d06d00a3a204f60e7ef811caa4e1fd000c5
--- /dev/null
+++ b/entity/MSTTeam_entity/grantDeleteProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("system.vars");
+import("MSTeams_lib");
+
+result.string(vars.get("$field.TEAMID_AND_NAME") && vars.get("$field.ISARCHIVED") != "true" && MSTeamsUtils.isUserTeamOwner(vars.get("$field.UID")));
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/grantUpdateProcess.js b/entity/MSTTeam_entity/grantUpdateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3fad7d06d00a3a204f60e7ef811caa4e1fd000c5
--- /dev/null
+++ b/entity/MSTTeam_entity/grantUpdateProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("system.vars");
+import("MSTeams_lib");
+
+result.string(vars.get("$field.TEAMID_AND_NAME") && vars.get("$field.ISARCHIVED") != "true" && MSTeamsUtils.isUserTeamOwner(vars.get("$field.UID")));
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/recordcontainers/jdito/cacheKeyProcess.js b/entity/MSTTeam_entity/recordcontainers/jdito/cacheKeyProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f9c2f6bbd9ddf14c6cd10228138b52546d0184b7
--- /dev/null
+++ b/entity/MSTTeam_entity/recordcontainers/jdito/cacheKeyProcess.js
@@ -0,0 +1,7 @@
+import("system.result");
+import("system.vars");
+import("Util_lib");
+import("CachedRecordContainer_lib");
+
+if (Utils.toBoolean(vars.get("$param.UseCache_param")))
+    result.string(CachedRecordContainerUtils.getCommonKey("$param.UseCache_param"));
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/recordcontainers/jdito/contentProcess.js b/entity/MSTTeam_entity/recordcontainers/jdito/contentProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..dccb70e0330c7d584be6a0786ea150e8eb508396
--- /dev/null
+++ b/entity/MSTTeam_entity/recordcontainers/jdito/contentProcess.js
@@ -0,0 +1,65 @@
+import("system.teams");
+import("system.result");
+import("system.vars");
+import("JditoFilter_lib");
+
+var lookupFilter = new FilterConditionGroup(vars.get("$local.filter")).getRow("$$$LOOKUPFIELD$$$");
+var searchValue = lookupFilter ? lookupFilter.key : null;
+
+var allTeams = teams.getAllTeams(searchValue || null);
+var teamsArray = [];
+
+if (vars.get("$local.idvalues"))
+{
+    var teamInfoLoader = {
+        normalTeams : allTeams,
+        archivedTeams : null,
+        getTeamInfo : function (pTeamId)
+        {
+            if (pTeamId in this.normalTeams)
+            {
+                return {
+                    name : this.normalTeams[pTeamId],
+                    isArchived : false
+                };
+            }
+            
+            if (this.archivedTeams == null)
+                this.archivedTeams = teams.getAllArchivedTeams(null);
+            
+            return {
+                name : this.archivedTeams[pTeamId] || "",
+                isArchived : pTeamId in this.archivedTeams
+            };
+        }
+    };
+    
+    teamsArray = vars.get("$local.idvalues").map(function (teamId) 
+    {
+        var teamInfo = teamInfoLoader.getTeamInfo(teamId);
+        var idAndName = JSON.stringify([teamId, teamInfo.name]);
+        return [
+            teamId, 
+            teamInfo.name, 
+            idAndName, 
+            "", 
+            teamInfo.isArchived
+        ];
+    });   
+}
+else
+{
+    for (let teamId in allTeams)
+    {
+        var idAndName = JSON.stringify([teamId, allTeams[teamId]]);
+        teamsArray.push([
+            teamId, 
+            allTeams[teamId], 
+            idAndName, 
+            "", 
+            false
+        ]);
+    }
+}
+
+result.object(teamsArray);
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/recordcontainers/jdito/onDelete.js b/entity/MSTTeam_entity/recordcontainers/jdito/onDelete.js
new file mode 100644
index 0000000000000000000000000000000000000000..ed8e457d4a824e1d4029b7640fea9804d41463cb
--- /dev/null
+++ b/entity/MSTTeam_entity/recordcontainers/jdito/onDelete.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.teams");
+import("Sql_lib");
+
+var teamId = vars.get("$field.UID");
+teams.archiveTeam(teamId);
+newWhere("MST_TEAM.MST_TEAMID", teamId)
+   .updateFields({"IS_ARCHIVED" : "1"});
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/recordcontainers/jdito/onInsert.js b/entity/MSTTeam_entity/recordcontainers/jdito/onInsert.js
new file mode 100644
index 0000000000000000000000000000000000000000..8a1c6e0c83d6d16ef62ed23cb2594be121eb5a0f
--- /dev/null
+++ b/entity/MSTTeam_entity/recordcontainers/jdito/onInsert.js
@@ -0,0 +1,66 @@
+import("Util_lib");
+import("Communication_lib");
+import("Sql_lib");
+import("system.vars");
+import("system.teams");
+import("system.tools");
+import("Employee_lib");
+import("MSTeams_lib");
+
+var rowData = vars.get("$local.rowdata");
+var teamName = rowData["TEAMNAME.value"];
+var description = rowData["DESCRIPTION.value"];
+var teamMembers = vars.get("$field.TeamMembers.insertedRows");
+
+var ownerIds = [];
+var internalMembers = [];
+var externalMembers = [];
+teamMembers.forEach(function (teamMember)
+{
+    var contactId = teamMember["CONTACT_ID"];
+    var isExtern = Utils.toBoolean(teamMember["ISEXTERN"]);
+    var isInvite = Utils.toBoolean(teamMember["INVITE"]);
+    if (isExtern)
+    {
+        var memberEmail = CommUtil.getStandardMail(contactId);
+        if (memberEmail)
+        {
+            externalMembers.push(
+                teams.createExternalUserConfig(memberEmail)
+                    .sendInvitation(isInvite)
+            );
+        }
+        return;
+    }
+    var memberAzureId = teamMember["AZUREID"];
+    var memberUpn = teamMember["AZUREUPN"];
+    var isOwner = teamMember["ROLE"] == "owner";
+    if (!memberAzureId && memberUpn)
+        memberAzureId = teams.getInternalAzureId(memberUpn);
+    if (memberAzureId)
+    {
+        if (isOwner)
+            ownerIds.push(memberAzureId);
+        else
+            internalMembers.push(teams.createInternalUserConfig(memberAzureId));
+    }
+});
+
+var mailNickName = StringUtils.toLowerCamelCase(teamName);  //mailNickName = teamName in camel case
+mailNickName = mailNickName + vars.get("$param.SalesprojectCode_param");
+
+var groupConfig = teams.createGroupConfig(teamName, mailNickName, ownerIds);
+if (description)
+    groupConfig.setDescription(description);
+var teamConfig = teams.createTeamConfig();
+
+var mstTeam = teams.createTeam(groupConfig, teamConfig);
+
+if (internalMembers.length !== 0)
+    teams.addInternalMembers(mstTeam.teamId, internalMembers);
+
+if (externalMembers.length !== 0)
+    teams.addExternalMembers(mstTeam.teamId, externalMembers);
+
+MSTeamsUtils.insertTeamIfMissing(mstTeam);
+MSTeamsUtils.createTeamLink(mstTeam.teamId, vars.get("$param.ObjectRowId_param"), vars.get("$param.ObjectType_param"));
\ No newline at end of file
diff --git a/entity/MSTTeam_entity/recordcontainers/jdito/onUpdate.js b/entity/MSTTeam_entity/recordcontainers/jdito/onUpdate.js
new file mode 100644
index 0000000000000000000000000000000000000000..54e7ab9ab6b4e76d9a767db9d8314b6cbb3d2dc5
--- /dev/null
+++ b/entity/MSTTeam_entity/recordcontainers/jdito/onUpdate.js
@@ -0,0 +1,77 @@
+import("Communication_lib");
+import("Sql_lib");
+import("system.vars");
+import("system.teams");
+import("system.tools");
+import("Employee_lib");
+
+var rowData = vars.get("$local.rowdata");
+var teamId = rowData["UID.value"];
+var teamName = rowData["TEAMNAME.value"];
+var description = rowData["DESCRIPTION.value"];
+var insertedTeamMembers = vars.get("$field.TeamMembers.insertedRows");
+var changedTeamMembers = vars.get("$field.TeamMembers.changedRows");
+var deletedTeamMembers = vars.get("$field.TeamMembers.deletedRows");
+
+var internalMembers = [];
+var externalMembers = [];
+insertedTeamMembers.forEach(function (teamMember)
+{
+    var memberUser = EmployeeUtils.getUserByContactId(teamMember["CONTACT_ID"]);
+    if (!memberUser)
+    {
+        var memberEmail = CommUtil.getStandardMail(teamMember["CONTACT_ID"]);
+        if (memberEmail)
+        {
+            externalMembers.push(
+                teams.createExternalUserConfig(memberEmail)
+                    .sendInvitation(teamMember["INVITE"] == "true")
+            );
+        }
+        return;
+    }
+    var internalUserConfigToAdd = _getTeamsInternalUserConfig(memberUser, teamMember["ROLE"] == "owner");
+    if (internalUserConfigToAdd)
+        internalMembers.push(internalUserConfigToAdd);
+});
+
+if (internalMembers.length !== 0)
+    teams.addInternalMembers(teamId, internalMembers);
+
+if (externalMembers.length !== 0)
+    teams.addExternalMembers(teamId, externalMembers);
+
+changedTeamMembers.forEach(function (teamMember)
+{
+    var memberUser = EmployeeUtils.getUserByContactId(teamMember["CONTACT_ID"]);
+    if (!memberUser)
+        return;
+    
+    var internalUserConfigToChange = _getTeamsInternalUserConfig(memberUser, teamMember["ROLE"] == "owner");
+    if (internalUserConfigToChange)
+        teams.changeRole(teamId, internalUserConfigToChange);
+});
+
+
+var owners = teams.getAllOwners(teamId);
+var removeMembers = deletedTeamMembers.map(function (member)
+{
+    var isOwner = member["#UID"] in owners;
+    return teams.createInternalUserConfig(member["#UID"]).setOwner(isOwner);
+});
+
+if (removeMembers.length !== 0)
+    teams.removeInternalMembers(teamId, removeMembers);
+
+function _getTeamsInternalUserConfig(pUserObject, pAsOwner)
+{
+    var memberAzureId = pUserObject[tools.PARAMS][tools.TEAMS_AZUREID];
+    var memberUpn = pUserObject[tools.PARAMS][tools.TEAMS_AZUREUPN];
+    if (!memberAzureId && memberUpn)
+        memberAzureId = teams.getInternalAzureId(memberUpn);
+    if (memberAzureId)
+    {
+        return teams.createInternalUserConfig(memberAzureId).setOwner(pAsOwner);
+    }
+    return null;
+}
\ No newline at end of file
diff --git a/entity/MSTeamsActivityImport_entity/MSTeamsActivityImport_entity.aod b/entity/MSTeamsActivityImport_entity/MSTeamsActivityImport_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..2f279cf23fb22d886b2a3a7bce9c60edcf83206c
--- /dev/null
+++ b/entity/MSTeamsActivityImport_entity/MSTeamsActivityImport_entity.aod
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
+  <name>MSTeamsActivityImport_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/MSTeamsActivityImport_entity/documentation.adoc</documentation>
+  <siblings />
+  <afterUiInit>%aditoprj%/entity/MSTeamsActivityImport_entity/afterUiInit.js</afterUiInit>
+  <recordContainer>dataless</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityConsumer>
+      <name>Messages</name>
+      <selectionMode>MULTI</selectionMode>
+      <children>
+        <entityParameter>
+          <name>Channel_param</name>
+          <valueProcess>%aditoprj%/entity/MSTeamsActivityImport_entity/entityfields/messages/children/channel_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>TeamId_param</name>
+          <valueProcess>%aditoprj%/entity/MSTeamsActivityImport_entity/entityfields/messages/children/teamid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>LoadNext_param</name>
+          <valueProcess>%aditoprj%/entity/MSTeamsActivityImport_entity/entityfields/messages/children/loadnext_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>MSTeamsMessage_entity</entityName>
+        <fieldName>Messages</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityField>
+      <name>CHANNEL_ID</name>
+      <title>Channel</title>
+      <consumer>Channels</consumer>
+      <state>EDITABLE</state>
+    </entityField>
+    <entityParameter>
+      <name>ObjectRowId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityField>
+      <name>TEAM_ID</name>
+      <valueProcess>%aditoprj%/entity/MSTeamsActivityImport_entity/entityfields/team_id/valueProcess.js</valueProcess>
+    </entityField>
+    <entityConsumer>
+      <name>Channels</name>
+      <children>
+        <entityParameter>
+          <name>TeamId_param</name>
+          <valueProcess>%aditoprj%/entity/MSTeamsActivityImport_entity/entityfields/channels/children/teamid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>MSTeamsChannel_entity</entityName>
+        <fieldName>ChannelsForTeam</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityActionField>
+      <name>loadNextMessages</name>
+      <title>Load older messages</title>
+      <onActionProcess>%aditoprj%/entity/MSTeamsActivityImport_entity/entityfields/loadnextmessages/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:CLOCK</iconId>
+    </entityActionField>
+    <entityField>
+      <name>LOAD_ID</name>
+    </entityField>
+    <entityParameter>
+      <name>ObjectType_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityActionField>
+      <name>importMessages</name>
+    </entityActionField>
+  </entityFields>
+  <recordContainers>
+    <datalessRecordContainer>
+      <name>dataless</name>
+      <alias>Data_alias</alias>
+    </datalessRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/MSTeamsActivityImport_entity/afterUiInit.js b/entity/MSTeamsActivityImport_entity/afterUiInit.js
new file mode 100644
index 0000000000000000000000000000000000000000..9357f9cbc246dd684cda414ee905e0e5586e4cb7
--- /dev/null
+++ b/entity/MSTeamsActivityImport_entity/afterUiInit.js
@@ -0,0 +1,8 @@
+import("system.entities");
+
+//load the channels into the cache when opening the dialog, so the user doesn't have to wait when opening the lookup
+entities.invalidateCache("MSTeamsChannel_entity", "jdito");
+entities.getRows(entities.createConfigForLoadingConsumerRows()
+    .consumer("Channels")
+    .fields(["UID", "CHANNELNAME"])
+);
\ No newline at end of file
diff --git a/entity/MSTeamsActivityImport_entity/documentation.adoc b/entity/MSTeamsActivityImport_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..e9a7b4eadedbbcc63946070f941eecaa515905cd
--- /dev/null
+++ b/entity/MSTeamsActivityImport_entity/documentation.adoc
@@ -0,0 +1,12 @@
+MSTTeamsActivityImport
+============
+
+== Overview ==
+MSTTeamsActivityImport is used to import messages from MST  
+
+== A MSTTeamsActivityImport consists of some modules: ==
+- MSTTeamsActivityImport itself
+
+== BestPractice ==
+
+== FAQ ==
\ No newline at end of file
diff --git a/entity/MSTeamsActivityImport_entity/entityfields/channels/children/teamid_param/valueProcess.js b/entity/MSTeamsActivityImport_entity/entityfields/channels/children/teamid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e6f0ee80bb8afc2a1d41e693e8a433805743e014
--- /dev/null
+++ b/entity/MSTeamsActivityImport_entity/entityfields/channels/children/teamid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("system.vars");
+
+result.string(vars.get("$field.TEAM_ID"));
\ No newline at end of file
diff --git a/entity/MSTeamsActivityImport_entity/entityfields/loadnextmessages/onActionProcess.js b/entity/MSTeamsActivityImport_entity/entityfields/loadnextmessages/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..05f69f965eba54557bac6aed07227f6d8ff716a0
--- /dev/null
+++ b/entity/MSTeamsActivityImport_entity/entityfields/loadnextmessages/onActionProcess.js
@@ -0,0 +1,5 @@
+import("system.neon");
+import("system.util");
+
+//set a new random ID to reload the messages consumer
+neon.setFieldValue("$field.LOAD_ID", util.getNewUUID());
\ No newline at end of file
diff --git a/entity/MSTeamsActivityImport_entity/entityfields/messages/children/channel_param/valueProcess.js b/entity/MSTeamsActivityImport_entity/entityfields/messages/children/channel_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2385cda828f2a88ccb21220449e36a1b09b1db91
--- /dev/null
+++ b/entity/MSTeamsActivityImport_entity/entityfields/messages/children/channel_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.CHANNEL_ID"));
\ No newline at end of file
diff --git a/entity/MSTeamsActivityImport_entity/entityfields/messages/children/loadnext_param/valueProcess.js b/entity/MSTeamsActivityImport_entity/entityfields/messages/children/loadnext_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f83604cf16728a3863ed3f26751100c6a947b6eb
--- /dev/null
+++ b/entity/MSTeamsActivityImport_entity/entityfields/messages/children/loadnext_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("system.vars");
+
+result.string(vars.get("$field.LOAD_ID"));
\ No newline at end of file
diff --git a/entity/MSTeamsActivityImport_entity/entityfields/messages/children/teamid_param/valueProcess.js b/entity/MSTeamsActivityImport_entity/entityfields/messages/children/teamid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9eed48618458976b1838543de6ba1c7719f79911
--- /dev/null
+++ b/entity/MSTeamsActivityImport_entity/entityfields/messages/children/teamid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.TEAM_ID"));
\ No newline at end of file
diff --git a/entity/MSTeamsActivityImport_entity/entityfields/team_id/valueProcess.js b/entity/MSTeamsActivityImport_entity/entityfields/team_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c431bd3ac3e9bc6fa97d0b85729ed1c4f9b203b0
--- /dev/null
+++ b/entity/MSTeamsActivityImport_entity/entityfields/team_id/valueProcess.js
@@ -0,0 +1,6 @@
+import("system.vars");
+import("MSTeams_lib");
+import("system.result");
+import("Sql_lib");
+
+result.string(MSTeamsUtils.getLinkedTeam(vars.get("$param.ObjectRowId_param"), vars.get("$param.ObjectType_param")) || "");
\ No newline at end of file
diff --git a/entity/MSTeamsChannel_entity/MSTeamsChannel_entity.aod b/entity/MSTeamsChannel_entity/MSTeamsChannel_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..4c2ea19b1014949ea8bc56f1a925d367ff004286
--- /dev/null
+++ b/entity/MSTeamsChannel_entity/MSTeamsChannel_entity.aod
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
+  <name>MSTeamsChannel_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/MSTeamsChannel_entity/documentation.adoc</documentation>
+  <title>Channel</title>
+  <siblings />
+  <contentTitleProcess>%aditoprj%/entity/MSTeamsChannel_entity/contentTitleProcess.js</contentTitleProcess>
+  <titlePlural>Channels</titlePlural>
+  <recordContainer>jdito</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>CHANNELNAME</name>
+      <title>Channel Name</title>
+    </entityField>
+    <entityField>
+      <name>UID</name>
+    </entityField>
+    <entityProvider>
+      <name>ChannelsForTeam</name>
+      <documentation>%aditoprj%/entity/MSTeamsChannel_entity/entityfields/channelsforteam/documentation.adoc</documentation>
+      <dependencies>
+        <entityDependency>
+          <name>a784ee43-b2ef-4d55-a092-9c7f822905fa</name>
+          <entityName>MSTeamsActivityImport_entity</entityName>
+          <fieldName>Channels</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>c2b60ab3-3edd-4571-b9aa-766826f561fd</name>
+          <entityName>MSTTeam_entity</entityName>
+          <fieldName>Channels</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityParameter>
+      <name>TeamId_param</name>
+      <expose v="true" />
+      <mandatory v="true" />
+    </entityParameter>
+    <entityProvider>
+      <name>ChannelsByName</name>
+      <lookupIdfield>CHANNELNAME</lookupIdfield>
+      <documentation>%aditoprj%/entity/MSTeamsChannel_entity/entityfields/channelsbyname/documentation.adoc</documentation>
+      <dependencies>
+        <entityDependency>
+          <name>3dfb5be2-d956-4e8a-9aec-4c80b81e0527</name>
+          <entityName>MSTeamsDocument_entity</entityName>
+          <fieldName>Channels</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+  </entityFields>
+  <recordContainers>
+    <jDitoRecordContainer>
+      <name>jdito</name>
+      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
+      <contentProcess>%aditoprj%/entity/MSTeamsChannel_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
+      <cacheType>SESSION</cacheType>
+      <cacheKeyProcess>%aditoprj%/entity/MSTeamsChannel_entity/recordcontainers/jdito/cacheKeyProcess.js</cacheKeyProcess>
+      <recordFieldMappings>
+        <jDitoRecordFieldMapping>
+          <name>UID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>CHANNELNAME.value</name>
+        </jDitoRecordFieldMapping>
+      </recordFieldMappings>
+    </jDitoRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/MSTeamsChannel_entity/contentTitleProcess.js b/entity/MSTeamsChannel_entity/contentTitleProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..678b5f5e99791cb0d6158d3bb6b7e01f0450fd37
--- /dev/null
+++ b/entity/MSTeamsChannel_entity/contentTitleProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.CHANNELNAME"));
\ No newline at end of file
diff --git a/entity/MSTeamsChannel_entity/documentation.adoc b/entity/MSTeamsChannel_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..84851137bfe4a7a9bbd4b774b01bb719b904ed06
--- /dev/null
+++ b/entity/MSTeamsChannel_entity/documentation.adoc
@@ -0,0 +1,14 @@
+MSTeamsChannel
+============
+
+== Overview ==
+MSTeamsChannel is used to get all channels of a MST Team 
+
+== A MSTeamsChannel consists of some modules: ==
+- MSTeamsChannel itself
+
+== BestPractice ==
+
+== FAQ ==
+
+
diff --git a/entity/MSTeamsChannel_entity/entityfields/channelsbyname/documentation.adoc b/entity/MSTeamsChannel_entity/entityfields/channelsbyname/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..276b88812f25badc1678f208ee47a4d156d0089e
--- /dev/null
+++ b/entity/MSTeamsChannel_entity/entityfields/channelsbyname/documentation.adoc
@@ -0,0 +1,3 @@
+Provider ChannelsByName
+
+Gets all channels by their names
\ No newline at end of file
diff --git a/entity/MSTeamsChannel_entity/entityfields/channelsforteam/documentation.adoc b/entity/MSTeamsChannel_entity/entityfields/channelsforteam/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..c8c3ce9e5628a6d5e656abb9f9babc3167fe1ca1
--- /dev/null
+++ b/entity/MSTeamsChannel_entity/entityfields/channelsforteam/documentation.adoc
@@ -0,0 +1,3 @@
+Provider ChannelsForTeam
+
+Gets all channels for the specific team
\ No newline at end of file
diff --git a/entity/MSTeamsChannel_entity/recordcontainers/jdito/cacheKeyProcess.js b/entity/MSTeamsChannel_entity/recordcontainers/jdito/cacheKeyProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ee4f6d2376080e71d86c3fa327113b15ce3e25a2
--- /dev/null
+++ b/entity/MSTeamsChannel_entity/recordcontainers/jdito/cacheKeyProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("CachedRecordContainer_lib");
+
+result.string(CachedRecordContainerUtils.getCommonKey("$param.TeamId_param"));
\ No newline at end of file
diff --git a/entity/MSTeamsChannel_entity/recordcontainers/jdito/contentProcess.js b/entity/MSTeamsChannel_entity/recordcontainers/jdito/contentProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e687b04b480eb8244dda328b5388cb40ddab1bf3
--- /dev/null
+++ b/entity/MSTeamsChannel_entity/recordcontainers/jdito/contentProcess.js
@@ -0,0 +1,33 @@
+import("system.teams");
+import("system.result");
+import("system.vars");
+import("JditoFilter_lib");
+
+var searchValue = null;
+JditoFilterUtils.filterRecords(["$$$LOOKUPFIELD$$$"], [["dummy"]], vars.get("$local.filter").filter, {
+    "$$$LOOKUPFIELD$$$" : function (recordValue, filterValue)
+    {
+        searchValue = filterValue;
+        return true;
+    }
+});
+
+var allChannels = teams.getAllChannels(vars.get("$param.TeamId_param"), searchValue || null);
+var channels = [];
+
+if (vars.get("$local.idvalues"))
+{
+    channels = vars.get("$local.idvalues").map(function (channelId) 
+    {
+        return [channelId, allChannels[channelId]];
+    });   
+}
+else
+{
+    for (let channelId in allChannels)
+    {
+        channels.push([channelId, allChannels[channelId]]);
+    }
+}
+
+result.object(channels);
\ No newline at end of file
diff --git a/entity/MSTeamsDocument_entity/MSTeamsDocument_entity.aod b/entity/MSTeamsDocument_entity/MSTeamsDocument_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..7b63c5f0e10641d17d6bc056c6f771d217cc1e7d
--- /dev/null
+++ b/entity/MSTeamsDocument_entity/MSTeamsDocument_entity.aod
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
+  <name>MSTeamsDocument_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/MSTeamsDocument_entity/documentation.adoc</documentation>
+  <siblings />
+  <recordContainer>dataless</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>DOCUMENTS</name>
+      <title>Documents</title>
+      <dropDownProcess>%aditoprj%/entity/MSTeamsDocument_entity/entityfields/documents/dropDownProcess.js</dropDownProcess>
+      <selectionMode>MULTI</selectionMode>
+      <state>EDITABLE</state>
+    </entityField>
+    <entityField>
+      <name>CHANNEL</name>
+      <title>Channel</title>
+      <consumer>Channels</consumer>
+      <mandatory v="true" />
+      <state>EDITABLE</state>
+    </entityField>
+    <entityParameter>
+      <name>ObjectRowId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityField>
+      <name>UID</name>
+    </entityField>
+    <entityParameter>
+      <name>AssignmentTable_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>AssignmentName_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityConsumer>
+      <name>Channels</name>
+      <children>
+        <entityParameter>
+          <name>TeamId_param</name>
+          <valueProcess>%aditoprj%/entity/MSTeamsDocument_entity/entityfields/channels/children/teamid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>MSTeamsChannel_entity</entityName>
+        <fieldName>ChannelsByName</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityParameter>
+      <name>MSTTeamId_param</name>
+      <expose v="true" />
+      <mandatory v="true" />
+    </entityParameter>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+    <entityActionField>
+      <name>importDocuments</name>
+      <onActionProcess>%aditoprj%/entity/MSTeamsDocument_entity/entityfields/importdocuments/onActionProcess.js</onActionProcess>
+    </entityActionField>
+  </entityFields>
+  <recordContainers>
+    <datalessRecordContainer>
+      <name>dataless</name>
+      <alias>Data_alias</alias>
+    </datalessRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/MSTeamsDocument_entity/documentation.adoc b/entity/MSTeamsDocument_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..e751b842c923ed49543f07c8af2a3203628ad8b2
--- /dev/null
+++ b/entity/MSTeamsDocument_entity/documentation.adoc
@@ -0,0 +1,14 @@
+MSTeamsDocument
+============
+
+== Overview ==
+MSTeamsDocument is used to synchronize all MST Documents with ADITO 
+
+== A MSTeamsDocument consists of some modules: ==
+- MSTeamsDocument itself
+
+== BestPractice ==
+
+== FAQ ==
+
+
diff --git a/entity/MSTeamsDocument_entity/entityfields/channels/children/teamid_param/valueProcess.js b/entity/MSTeamsDocument_entity/entityfields/channels/children/teamid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9036fa977855169ff3de7b568364d5073791d72a
--- /dev/null
+++ b/entity/MSTeamsDocument_entity/entityfields/channels/children/teamid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("system.vars");
+
+result.string(vars.get("$param.MSTTeamId_param"));
\ No newline at end of file
diff --git a/entity/MSTeamsDocument_entity/entityfields/documents/dropDownProcess.js b/entity/MSTeamsDocument_entity/entityfields/documents/dropDownProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d46e42f287a77be32c587b85fc7a475cfa87a348
--- /dev/null
+++ b/entity/MSTeamsDocument_entity/entityfields/documents/dropDownProcess.js
@@ -0,0 +1,20 @@
+import("system.result");
+import("system.teams");
+import("system.vars");
+import("system.logging");
+import("Sql_lib");
+
+var channelName = vars.get("$field.CHANNEL");
+if (channelName)
+{
+    var teamId = vars.get("$param.MSTTeamId_param");
+    
+    var documents = teams.getAllDocuments(teamId, channelName);
+    documents = documents.map(function (document)
+    {
+        return [JSON.stringify([document.downloadUrl, document.name]), document.name];
+    });
+    result.object(documents);
+}
+else
+    result.object([]);
\ No newline at end of file
diff --git a/entity/MSTeamsDocument_entity/entityfields/importdocuments/onActionProcess.js b/entity/MSTeamsDocument_entity/entityfields/importdocuments/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7237c6c01de74d5355cde59d84173d56989b55b0
--- /dev/null
+++ b/entity/MSTeamsDocument_entity/entityfields/importdocuments/onActionProcess.js
@@ -0,0 +1,27 @@
+import("system.text");
+import("system.teams");
+import("system.vars");
+import("system.db");
+import("system.util")
+import("Sql_lib");
+import("system.net")
+import("system.logging");
+import("system.neon");
+
+var rowData = vars.get("$local.rowdata");
+var documents = text.decodeMS(vars.get("$field.DOCUMENTS"));
+
+documents.forEach(function (document)
+{
+    var [downloadUrl, documentName] = JSON.parse(document);
+    var file = net.getURLContent(downloadUrl, false, null, null, null, false);
+    
+    var assignmentTable = vars.get("$param.AssignmentTable_param");
+    var assignmentName = vars.get("$param.AssignmentName_param");
+    var assignmentRowId = vars.get("$param.ObjectRowId_param");
+    var alias = SqlUtils.getBinariesAlias();
+    
+    db.insertBinary(assignmentTable, assignmentName, assignmentRowId, null, 
+        file, documentName, "", "", alias, util.getNewUUID());    
+});
+
diff --git a/entity/MSTeamsMessage_entity/MSTeamsMessage_entity.aod b/entity/MSTeamsMessage_entity/MSTeamsMessage_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..437ba4f01752bc9a118f40f47ce80f9fdb5b7e3c
--- /dev/null
+++ b/entity/MSTeamsMessage_entity/MSTeamsMessage_entity.aod
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
+  <name>MSTeamsMessage_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/MSTeamsMessage_entity/documentation.adoc</documentation>
+  <recordContainer>jdito</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>FROM</name>
+      <title>Author</title>
+    </entityField>
+    <entityField>
+      <name>MESSAGE</name>
+      <title>Message</title>
+    </entityField>
+    <entityField>
+      <name>CREATED_DATE_TIME</name>
+      <title>Creation date</title>
+      <contentType>DATE</contentType>
+    </entityField>
+    <entityProvider>
+      <name>Messages</name>
+      <documentation>%aditoprj%/entity/MSTeamsMessage_entity/entityfields/messages/documentation.adoc</documentation>
+      <recordContainer>jdito</recordContainer>
+      <dependencies>
+        <entityDependency>
+          <name>89048e4d-32bc-4531-9b45-b0c0d9de82b1</name>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>c79dc4f8-df40-47ba-9baa-b6a64c00f46c</name>
+          <entityName>MSTeamsActivityImport_entity</entityName>
+          <fieldName>Messages</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityField>
+      <name>UID</name>
+    </entityField>
+    <entityParameter>
+      <name>Channel_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>TeamId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>LoadNext_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+  </entityFields>
+  <recordContainers>
+    <jDitoRecordContainer>
+      <name>jdito</name>
+      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
+      <contentProcess>%aditoprj%/entity/MSTeamsMessage_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
+      <title>Messages</title>
+      <recordFieldMappings>
+        <jDitoRecordFieldMapping>
+          <name>UID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>FROM.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>MESSAGE.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>CREATED_DATE_TIME.value</name>
+        </jDitoRecordFieldMapping>
+      </recordFieldMappings>
+    </jDitoRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/MSTeamsMessage_entity/documentation.adoc b/entity/MSTeamsMessage_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..739a9e5de3c0c179690583b7d534b85203990865
--- /dev/null
+++ b/entity/MSTeamsMessage_entity/documentation.adoc
@@ -0,0 +1,14 @@
+MSTeamsMessage
+============
+
+== Overview ==
+MSTeamsMessage is used to get the messages written in MST 
+
+== A MSTeamsMessage consists of some modules: ==
+- MSTeamsMessage itself
+
+== BestPractice ==
+
+== FAQ ==
+
+
diff --git a/entity/MSTeamsMessage_entity/entityfields/messages/documentation.adoc b/entity/MSTeamsMessage_entity/entityfields/messages/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..6bcca7fb1e986c54ce197ca8a4134ad98c23e51c
--- /dev/null
+++ b/entity/MSTeamsMessage_entity/entityfields/messages/documentation.adoc
@@ -0,0 +1,3 @@
+Provider Messages
+
+Provides the messages for other entities
\ No newline at end of file
diff --git a/entity/MSTeamsMessage_entity/recordcontainers/jdito/contentProcess.js b/entity/MSTeamsMessage_entity/recordcontainers/jdito/contentProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..d8c0bad8a65f7fb8ad38753f002d20f1eb5f505a
--- /dev/null
+++ b/entity/MSTeamsMessage_entity/recordcontainers/jdito/contentProcess.js
@@ -0,0 +1,41 @@
+import("Sql_lib");
+import("system.teams");
+import("system.result");
+import("system.util");
+import("system.vars");
+import("system.neon");
+
+var loadNextMessages = vars.exists("$param.LoadNext_param") && vars.get("$param.LoadNext_param");
+var messageAmount = 10;
+var channelMessages;
+var messages = [];
+
+if (loadNextMessages)
+{
+    var nextLink = vars.exists("$context.nextLink") ? vars.get("$context.nextLink") : null;
+    if(nextLink)
+    {
+       channelMessages = teams.getNextChannelMessages(nextLink, messageAmount);
+       messages = channelMessages.messages;
+       vars.set("$context.nextLink", channelMessages.nextLink || null);
+    }
+}
+else if (vars.get("$param.TeamId_param") && vars.get("$param.Channel_param"))
+{
+    channelMessages = teams.getChannelMessages(vars.get("$param.TeamId_param"), vars.get("$param.Channel_param"), messageAmount);
+    messages = channelMessages.messages;
+    
+    vars.set("$context.nextLink", channelMessages.nextLink || null);
+}
+
+messages = messages.map(function (message)
+{
+    return [
+        util.getNewUUID(), 
+        message.author.userName, 
+        message.message.message, 
+        Date.parse(message.createdDateTime).toString()
+    ];
+});
+
+result.object(messages);
diff --git a/entity/MarketingWorkflowLauncher_entity/MarketingWorkflowLauncher_entity.aod b/entity/MarketingWorkflowLauncher_entity/MarketingWorkflowLauncher_entity.aod
index 40b9b39c8993d2b421f368b11fca27d80abb24f5..8efdde1d70c6ad1164767134ad57e8e1282e13b9 100644
--- a/entity/MarketingWorkflowLauncher_entity/MarketingWorkflowLauncher_entity.aod
+++ b/entity/MarketingWorkflowLauncher_entity/MarketingWorkflowLauncher_entity.aod
@@ -14,7 +14,7 @@
     </entityProvider>
     <entityField>
       <name>DOCUMENTTEMPLATE_ID</name>
-      <title>Document template</title>
+      <title>Document Template</title>
       <consumer>EmailTemplates</consumer>
       <mandatory v="true" />
       <state>EDITABLE</state>
@@ -22,11 +22,6 @@
     <entityConsumer>
       <name>WorkflowLauncherIntegration</name>
       <isOneToOneRelationship v="true" />
-      <dependency>
-        <name>dependency</name>
-        <entityName>WorkflowLauncher_entity</entityName>
-        <fieldName>Integration</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>Validationerrors_param</name>
@@ -45,6 +40,11 @@
           <valueProcess>%aditoprj%/entity/MarketingWorkflowLauncher_entity/entityfields/workflowlauncherintegration/children/targetcontext_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>WorkflowLauncher_entity</entityName>
+        <fieldName>Integration</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ObjectType_param</name>
@@ -60,11 +60,6 @@
     </entityParameter>
     <entityConsumer>
       <name>EmailTemplates</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DocumentTemplate_entity</entityName>
-        <fieldName>DocumentTemplateProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>DocumentTemplateType_param</name>
@@ -75,11 +70,17 @@
           <valueProcess>%aditoprj%/entity/MarketingWorkflowLauncher_entity/entityfields/emailtemplates/children/comingfrom_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DocumentTemplate_entity</entityName>
+        <fieldName>DocumentTemplateProvider</fieldName>
+      </dependency>
     </entityConsumer>
   </entityFields>
   <recordContainers>
     <datalessRecordContainer>
       <name>dataLess</name>
+      <alias>Data_alias</alias>
     </datalessRecordContainer>
   </recordContainers>
 </entity>
diff --git a/entity/MarketingWorkflowLauncher_entity/entityfields/workflowlauncherintegration/children/processvariables_param/valueProcess.js b/entity/MarketingWorkflowLauncher_entity/entityfields/workflowlauncherintegration/children/processvariables_param/valueProcess.js
index b81df3d4fb93fc9608febd7783247052a61d4acd..cea637a710a0e3e0903248241654aec944c88137 100644
--- a/entity/MarketingWorkflowLauncher_entity/entityfields/workflowlauncherintegration/children/processvariables_param/valueProcess.js
+++ b/entity/MarketingWorkflowLauncher_entity/entityfields/workflowlauncherintegration/children/processvariables_param/valueProcess.js
@@ -2,6 +2,7 @@ import("system.vars");
 import("system.result");
 
 var variables = {
-    documentTemplate: vars.get("$field.DOCUMENTTEMPLATE_ID")
+    documentTemplateId: vars.get("$field.DOCUMENTTEMPLATE_ID"),
+    originUrl: vars.get("$sys.origin")
 };
 result.string(JSON.stringify(variables));
\ No newline at end of file
diff --git a/entity/MarketingWorkflowLauncher_entity/entityfields/workflowlauncherintegration/children/targets_param/valueProcess.js b/entity/MarketingWorkflowLauncher_entity/entityfields/workflowlauncherintegration/children/targets_param/valueProcess.js
index 6a28aafa528aa4130e913b642f80e04cfadc8b19..1bfc02a3f326e8e82420c38d5f60d1faee9cdf6b 100644
--- a/entity/MarketingWorkflowLauncher_entity/entityfields/workflowlauncherintegration/children/targets_param/valueProcess.js
+++ b/entity/MarketingWorkflowLauncher_entity/entityfields/workflowlauncherintegration/children/targets_param/valueProcess.js
@@ -1,13 +1,43 @@
+import("Sql_lib");
 import("Util_lib");
 import("system.vars");
 import("system.result");
+import("FilterViewAction_lib");
 
 var context = vars.get("$param.ObjectType_param");
-var targets = Utils.parseJSON(vars.get("$param.ObjectIds_param")) || [];
-targets = targets.map(function (targetId)
+var targets = Utils.parseJSON(vars.get("$param.ObjectIds_param"));
+var filter = Utils.parseJSON(vars.get("$param.ObjectFilter_param"));
+
+var personContactIds = [];
+
+targets = FilterViewActionUtils.getUidsBySelectionOrFilter(context, targets, filter).map(function (target)
 {
-    if (Utils.isString(targetId))
-        return [targetId, context]; //todo: context dynamic (eg for participants)
-    return targetId;
+    if (Utils.isString(target))
+        target = [target, context];
+    if (target[1] == "Person")
+        personContactIds.push(target[0]);
+    return target;
 });
+
+if (personContactIds.length !== 0)
+{
+    var orgContactIds = newSelect(["anyContact.CONTACTID", "orgContact.CONTACTID"])
+        .from("CONTACT", "orgContact")
+        .join("CONTACT", "anyContact.ORGANISATION_ID = orgContact.ORGANISATION_ID and orgContact.PERSON_ID is null", "anyContact")
+        .where(["CONTACT", "CONTACTID", "anyContact"], personContactIds, SqlBuilder.IN())
+        .table();
+    var contactIdMap = new Map(orgContactIds);
+    targets.forEach(function ([targetId, targetContext, variables], i, allTargets)
+    {
+        if (contactIdMap.has(targetId))
+        {
+            if (!variables)
+                variables = {};
+            variables.attributeRowId = contactIdMap.get(targetId);
+            variables.attributeContext = "Organisation";
+            allTargets[i][2] = variables;
+        }
+    });
+}
+
 result.string(JSON.stringify(targets));
\ No newline at end of file
diff --git a/entity/Member_entity/Member_entity.aod b/entity/Member_entity/Member_entity.aod
index 23a14e5ebe902ca5f5fcda22532dae26cc4b2c17..a416ef148b261e8877df19ee82ee0802b49753fb 100644
--- a/entity/Member_entity/Member_entity.aod
+++ b/entity/Member_entity/Member_entity.aod
@@ -4,8 +4,13 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/entity/Member_entity/documentation.adoc</documentation>
   <title>${SALESPROJECT_MEMBER}</title>
+  <siblings>
+    <element>MSTTeam_entity</element>
+    <element>MSTTeamLink_entity</element>
+  </siblings>
   <grantUpdateProcess>%aditoprj%/entity/Member_entity/grantUpdateProcess.js</grantUpdateProcess>
   <grantDeleteProcess>%aditoprj%/entity/Member_entity/grantDeleteProcess.js</grantDeleteProcess>
+  <contentTitleProcess>%aditoprj%/entity/Member_entity/contentTitleProcess.js</contentTitleProcess>
   <iconId>VAADIN:FILE_SOUND</iconId>
   <titlePlural>${SALESPROJECT_MEMBER}</titlePlural>
   <recordContainer>db</recordContainer>
@@ -81,11 +86,6 @@
     </entityField>
     <entityConsumer>
       <name>Contacts</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Person_entity</entityName>
-        <fieldName>IdFilteredActiveContacts</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ExcludedContactIds_param</name>
@@ -96,20 +96,25 @@
           <valueProcess>%aditoprj%/entity/Member_entity/entityfields/contacts/children/onlyactive_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordMemberRoles</name>
       <dependency>
         <name>dependency</name>
-        <entityName>MemberRoles_entity</entityName>
-        <fieldName>ByCategory</fieldName>
+        <entityName>Person_entity</entityName>
+        <fieldName>IdFilteredActiveContacts</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordMemberRoles</name>
       <children>
         <entityParameter>
           <name>UsageFilter_param</name>
           <valueProcess>%aditoprj%/entity/Member_entity/entityfields/keywordmemberroles/children/usagefilter_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>MemberRoles_entity</entityName>
+        <fieldName>ByCategory</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>TARGETCONTEXT</name>
@@ -149,11 +154,6 @@
     </entityParameter>
     <entityConsumer>
       <name>Objects</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Object_entity</entityName>
-        <fieldName>AllObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
@@ -162,6 +162,11 @@
           <mandatory v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Object_entity</entityName>
+        <fieldName>AllObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Contexts</name>
@@ -203,23 +208,104 @@
     <entityProvider>
       <name>WithDistrictResponsibles</name>
       <recordContainer>jdito</recordContainer>
+    </entityProvider>
+    <entityField>
+      <name>UID</name>
+      <documentation>%aditoprj%/entity/Member_entity/entityfields/uid/documentation.adoc</documentation>
+    </entityField>
+    <entityActionGroup>
+      <name>MSTeamsActionGroup</name>
+      <title>MS Teams</title>
+      <stateProcess>%aditoprj%/entity/Member_entity/entityfields/msteamsactiongroup/stateProcess.js</stateProcess>
+      <children>
+        <entityActionField>
+          <name>createTeam</name>
+          <title>Create Team</title>
+          <onActionProcess>%aditoprj%/entity/Member_entity/entityfields/msteamsactiongroup/children/createteam/onActionProcess.js</onActionProcess>
+          <isSelectionAction v="false" />
+          <iconId>NEON:PLUS</iconId>
+          <state>EDITABLE</state>
+          <stateProcess>%aditoprj%/entity/Member_entity/entityfields/msteamsactiongroup/children/createteam/stateProcess.js</stateProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>editTeam</name>
+          <title>Edit Team</title>
+          <onActionProcess>%aditoprj%/entity/Member_entity/entityfields/msteamsactiongroup/children/editteam/onActionProcess.js</onActionProcess>
+          <iconId>NEON:PENCIL</iconId>
+          <stateProcess>%aditoprj%/entity/Member_entity/entityfields/msteamsactiongroup/children/editteam/stateProcess.js</stateProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>addApp</name>
+          <title>Add app</title>
+          <onActionProcess>%aditoprj%/entity/Member_entity/entityfields/msteamsactiongroup/children/addapp/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:MOBILE</iconId>
+          <stateProcess>%aditoprj%/entity/Member_entity/entityfields/msteamsactiongroup/children/addapp/stateProcess.js</stateProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>chooseTeam</name>
+          <title>Choose Team</title>
+          <onActionProcess>%aditoprj%/entity/Member_entity/entityfields/msteamsactiongroup/children/chooseteam/onActionProcess.js</onActionProcess>
+          <iconId>NEON:GROUP_APPOINTMENT</iconId>
+          <stateProcess>%aditoprj%/entity/Member_entity/entityfields/msteamsactiongroup/children/chooseteam/stateProcess.js</stateProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>restoreTeam</name>
+          <title>Restore Team</title>
+          <onActionProcess>%aditoprj%/entity/Member_entity/entityfields/msteamsactiongroup/children/restoreteam/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:ARROW_BACKWARD</iconId>
+          <stateProcess>%aditoprj%/entity/Member_entity/entityfields/msteamsactiongroup/children/restoreteam/stateProcess.js</stateProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>openMSTeams</name>
+          <title>Open Teams</title>
+          <onActionProcess>%aditoprj%/entity/Member_entity/entityfields/msteamsactiongroup/children/openmsteams/onActionProcess.js</onActionProcess>
+          <iconId>VAADIN:EXTERNAL_LINK</iconId>
+          <stateProcess>%aditoprj%/entity/Member_entity/entityfields/msteamsactiongroup/children/openmsteams/stateProcess.js</stateProcess>
+        </entityActionField>
+        <entityActionField>
+          <name>deleteTeam</name>
+          <title>Delete Team</title>
+          <onActionProcess>%aditoprj%/entity/Member_entity/entityfields/msteamsactiongroup/children/deleteteam/onActionProcess.js</onActionProcess>
+          <iconId>NEON:TRASH</iconId>
+          <stateProcess>%aditoprj%/entity/Member_entity/entityfields/msteamsactiongroup/children/deleteteam/stateProcess.js</stateProcess>
+        </entityActionField>
+      </children>
+    </entityActionGroup>
+    <entityProvider>
+      <name>TeamMemberProvider</name>
+      <lookupIdfield>CONTACT_ID</lookupIdfield>
       <dependencies>
         <entityDependency>
-          <name>6f90b6c6-118c-485e-9a41-365bdc325f9b</name>
-          <entityName>Salesproject_entity</entityName>
-          <fieldName>Members</fieldName>
+          <name>373a0c5c-dff5-4a6d-9a1f-68d7b73804ce</name>
+          <entityName>MSTTeamMember_entity</entityName>
+          <fieldName>ProjectMembers</fieldName>
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
     </entityProvider>
+    <entityParameter>
+      <name>MSTTeamId_param</name>
+      <valueProcess>%aditoprj%/entity/Member_entity/entityfields/mstteamid_param/valueProcess.js</valueProcess>
+      <expose v="true" />
+    </entityParameter>
     <entityField>
-      <name>UID</name>
-      <documentation>%aditoprj%/entity/Member_entity/entityfields/uid/documentation.adoc</documentation>
+      <name>MST_MEMBERROLE</name>
+      <title>Team role</title>
+      <stateProcess>%aditoprj%/entity/Member_entity/entityfields/mst_memberrole/stateProcess.js</stateProcess>
     </entityField>
+    <entityParameter>
+      <name>EnableMSTeams_param</name>
+      <expose v="true" />
+    </entityParameter>
     <entityField>
       <name>recordType</name>
       <documentation>%aditoprj%/entity/Member_entity/entityfields/recordtype/documentation.adoc</documentation>
     </entityField>
+    <entityParameter>
+      <name>SalesprojectCode_param</name>
+      <expose v="true" />
+      <description>PARAMETER</description>
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -326,10 +412,6 @@
           <name>OBJECTMEMBERID.value</name>
           <recordfield>OBJECTMEMBER.OBJECTMEMBERID</recordfield>
         </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>OBJECT_ROWID.displayValue</name>
-          <expression>%aditoprj%/entity/Member_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js</expression>
-        </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>MEMBERROLE.displayValue</name>
           <expression>%aditoprj%/entity/Member_entity/recordcontainers/db/recordfieldmappings/memberrole.displayvalue/expression.js</expression>
@@ -344,6 +426,10 @@
           <name>recordType.value</name>
           <expression>%aditoprj%/entity/Member_entity/recordcontainers/db/recordfieldmappings/recordtype.value/expression.js</expression>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>MST_MEMBERROLE.value</name>
+          <expression>%aditoprj%/entity/Member_entity/recordcontainers/db/recordfieldmappings/mst_memberrole.value/expression.js</expression>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
     <jDitoRecordContainer>
@@ -424,6 +510,9 @@
         <jDitoRecordFieldMapping>
           <name>recordType.value</name>
         </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>MST_MEMBERROLE.value</name>
+        </jDitoRecordFieldMapping>
       </recordFieldMappings>
     </jDitoRecordContainer>
   </recordContainers>
diff --git a/entity/Member_entity/contentTitleProcess.js b/entity/Member_entity/contentTitleProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e2e9200a47926fc38af5a2534902d2741ed04877
--- /dev/null
+++ b/entity/Member_entity/contentTitleProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.PERSON_FULL_NAME"));
\ No newline at end of file
diff --git a/entity/Member_entity/entityfields/mst_memberrole/stateProcess.js b/entity/Member_entity/entityfields/mst_memberrole/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..0d9f56400af9597e47b8cd95b2d2060881eaa30e
--- /dev/null
+++ b/entity/Member_entity/entityfields/mst_memberrole/stateProcess.js
@@ -0,0 +1,9 @@
+import("system.vars");
+import("system.neon");
+import("system.result");
+import("MSTeams_lib");
+
+result.string(MSTeamsUtils.isTeamsEnabled() && vars.get("$param.EnableMSTeams_param") == "true" 
+    ? neon.COMPONENTSTATE_READONLY 
+    : neon.COMPONENTSTATE_INVISIBLE
+);
\ No newline at end of file
diff --git a/entity/Member_entity/entityfields/msteamsactiongroup/children/addapp/onActionProcess.js b/entity/Member_entity/entityfields/msteamsactiongroup/children/addapp/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f53cd7c87d173497b7b8fd5bcbb4ba4212bac637
--- /dev/null
+++ b/entity/Member_entity/entityfields/msteamsactiongroup/children/addapp/onActionProcess.js
@@ -0,0 +1,7 @@
+import("system.teams");
+import("system.project");
+import("system.vars");
+
+var appId = project.getInstanceConfigValue("teamsAppId", null);
+if (appId)
+    teams.addApp(vars.get("$param.MSTTeamId_param"), appId);
\ No newline at end of file
diff --git a/entity/Member_entity/entityfields/msteamsactiongroup/children/addapp/stateProcess.js b/entity/Member_entity/entityfields/msteamsactiongroup/children/addapp/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f1febe96416f12e029c6de6537cf96e5c7f4d5db
--- /dev/null
+++ b/entity/Member_entity/entityfields/msteamsactiongroup/children/addapp/stateProcess.js
@@ -0,0 +1,16 @@
+import("MSTeams_lib");
+import("system.vars");
+import("system.neon");
+import("system.result");
+import("Sql_lib");
+
+var res = neon.COMPONENTSTATE_DISABLED;
+var teamId = vars.get("$param.MSTTeamId_param");
+if (teamId && MSTeamsUtils.isTeamsEnabled())
+{    
+    var teamInfo = MSTeamsUtils.getTeamInfo(teamId);
+    if (teamInfo && !teamInfo.isArchived && !teamInfo.serviceUrl)
+        res = neon.COMPONENTSTATE_EDITABLE;
+}
+
+result.string(res);
\ No newline at end of file
diff --git a/entity/Member_entity/entityfields/msteamsactiongroup/children/chooseteam/onActionProcess.js b/entity/Member_entity/entityfields/msteamsactiongroup/children/chooseteam/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f5761f78639c0a8b2fc209d0fe50d47ccbb390e2
--- /dev/null
+++ b/entity/Member_entity/entityfields/msteamsactiongroup/children/chooseteam/onActionProcess.js
@@ -0,0 +1,4 @@
+import("MSTeams_lib");
+import("system.vars");
+
+MSTeamsUtils.changeTeamsLink(vars.get("$field.OBJECT_ROWID"), vars.get("$field.OBJECT_TYPE"));
\ No newline at end of file
diff --git a/entity/Member_entity/entityfields/msteamsactiongroup/children/chooseteam/stateProcess.js b/entity/Member_entity/entityfields/msteamsactiongroup/children/chooseteam/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..82ce3fae3fb447579e492f43ad7158f1d8bd0182
--- /dev/null
+++ b/entity/Member_entity/entityfields/msteamsactiongroup/children/chooseteam/stateProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.neon");
+import("system.result");
+
+result.string(vars.exists("$param.MSTTeamId_param") && vars.get("$param.MSTTeamId_param") 
+    ? neon.COMPONENTSTATE_DISABLED 
+    : neon.COMPONENTSTATE_EDITABLE
+);
\ No newline at end of file
diff --git a/entity/Member_entity/entityfields/msteamsactiongroup/children/createteam/onActionProcess.js b/entity/Member_entity/entityfields/msteamsactiongroup/children/createteam/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..611e6d3926780aa4e436f626508e3b1f7a8a4cbc
--- /dev/null
+++ b/entity/Member_entity/entityfields/msteamsactiongroup/children/createteam/onActionProcess.js
@@ -0,0 +1,24 @@
+import("system.vars");
+import("system.neon");
+import("system.teams");
+import("Sql_lib");
+
+var rowId = vars.get("$param.ObjectRowId_param");
+var objectType = vars.get("$param.ObjectType_param");
+var params = {
+    "ObjectRowId_param": rowId,
+    "ObjectType_param": objectType
+};
+
+if (objectType === "Salesproject")
+{
+    var [teamName, description] = newSelect("PROJECTTITLE, INFO")
+        .from("SALESPROJECT")
+        .where("SALESPROJECT.SALESPROJECTID", rowId)
+        .arrayRow();
+    params["TeamName_param"] = teamName;
+    params["Description_param"] = description;
+    params["SalesprojectCode_param"] = vars.get("$param.SalesprojectCode_param");
+}
+
+neon.openContext("MSTTeam", null, null, neon.OPERATINGSTATE_NEW, params);
\ No newline at end of file
diff --git a/entity/Member_entity/entityfields/msteamsactiongroup/children/createteam/stateProcess.js b/entity/Member_entity/entityfields/msteamsactiongroup/children/createteam/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..82ce3fae3fb447579e492f43ad7158f1d8bd0182
--- /dev/null
+++ b/entity/Member_entity/entityfields/msteamsactiongroup/children/createteam/stateProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.neon");
+import("system.result");
+
+result.string(vars.exists("$param.MSTTeamId_param") && vars.get("$param.MSTTeamId_param") 
+    ? neon.COMPONENTSTATE_DISABLED 
+    : neon.COMPONENTSTATE_EDITABLE
+);
\ No newline at end of file
diff --git a/entity/Member_entity/entityfields/msteamsactiongroup/children/deleteteam/onActionProcess.js b/entity/Member_entity/entityfields/msteamsactiongroup/children/deleteteam/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..02a6be4eecfffc75564fb7841470f50c0d00d7b1
--- /dev/null
+++ b/entity/Member_entity/entityfields/msteamsactiongroup/children/deleteteam/onActionProcess.js
@@ -0,0 +1,13 @@
+import("system.teams");
+import("Sql_lib");
+import("system.vars");
+import("system.neon");
+
+var teamId = vars.get("$param.MSTTeamId_param");
+if (teamId)
+{
+    teams.archiveTeam(teamId);
+    newWhere("MST_TEAM.MST_TEAMID", teamId)
+       .updateFields({"IS_ARCHIVED" : "1"});
+    neon.refreshAll();
+}
\ No newline at end of file
diff --git a/entity/Member_entity/entityfields/msteamsactiongroup/children/deleteteam/stateProcess.js b/entity/Member_entity/entityfields/msteamsactiongroup/children/deleteteam/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..dcaec1cc02ac3718197fd77a80e966630bdc0e1d
--- /dev/null
+++ b/entity/Member_entity/entityfields/msteamsactiongroup/children/deleteteam/stateProcess.js
@@ -0,0 +1,15 @@
+import("MSTeams_lib");
+import("system.vars");
+import("system.neon");
+import("system.result");
+
+var res = neon.COMPONENTSTATE_DISABLED;
+var teamId = vars.get("$param.MSTTeamId_param");
+if (teamId && MSTeamsUtils.isTeamsEnabled())
+{    
+    var teamInfo = MSTeamsUtils.getTeamInfo(teamId);
+    if (teamInfo && !teamInfo.isArchived && !teamInfo.serviceUrl && MSTeamsUtils.isUserTeamOwner(teamId))
+        res = neon.COMPONENTSTATE_EDITABLE;
+}
+
+result.string(res);
\ No newline at end of file
diff --git a/entity/Member_entity/entityfields/msteamsactiongroup/children/editteam/onActionProcess.js b/entity/Member_entity/entityfields/msteamsactiongroup/children/editteam/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8f072bc03d016ca70df4643d9f32d8c29c8523e5
--- /dev/null
+++ b/entity/Member_entity/entityfields/msteamsactiongroup/children/editteam/onActionProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("system.neon");
+
+neon.openContext("MSTTeam", "MSTTeamEditMembers_view", [vars.get("$param.MSTTeamId_param")], neon.OPERATINGSTATE_EDIT, {
+    "ObjectRowId_param": vars.get("$param.ObjectRowId_param"),
+    "ObjectType_param": vars.get("$param.ObjectType_param")
+});
\ No newline at end of file
diff --git a/entity/Member_entity/entityfields/msteamsactiongroup/children/editteam/stateProcess.js b/entity/Member_entity/entityfields/msteamsactiongroup/children/editteam/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7aa4197a0d2f1be51667f68696e2ecf18cbf3bc1
--- /dev/null
+++ b/entity/Member_entity/entityfields/msteamsactiongroup/children/editteam/stateProcess.js
@@ -0,0 +1,13 @@
+import("MSTeams_lib");
+import("system.vars");
+import("system.neon");
+import("system.result");
+
+var res = neon.COMPONENTSTATE_DISABLED;
+var teamId = vars.get("$param.MSTTeamId_param");
+if (teamId && MSTeamsUtils.isTeamsEnabled() && MSTeamsUtils.isTeamActive(teamId) && MSTeamsUtils.isUserTeamOwner(teamId))
+{
+    res = neon.COMPONENTSTATE_EDITABLE;
+}
+
+result.string(res);
\ No newline at end of file
diff --git a/entity/Member_entity/entityfields/msteamsactiongroup/children/openmsteams/onActionProcess.js b/entity/Member_entity/entityfields/msteamsactiongroup/children/openmsteams/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..dd6293385c56357965b6ddd53fa1f5611b6bcf72
--- /dev/null
+++ b/entity/Member_entity/entityfields/msteamsactiongroup/children/openmsteams/onActionProcess.js
@@ -0,0 +1,8 @@
+import("MSTeams_lib");
+import("system.vars");
+import("system.neon");
+
+var teamInfo = MSTeamsUtils.getTeamInfo(vars.get("$param.MSTTeamId_param"));
+
+if (teamInfo && teamInfo.webUrl)
+    neon.openUrl(teamInfo.webUrl, true);
diff --git a/entity/Member_entity/entityfields/msteamsactiongroup/children/openmsteams/stateProcess.js b/entity/Member_entity/entityfields/msteamsactiongroup/children/openmsteams/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..ce25c1feb1a1c2247dc19707bd447b5096e04184
--- /dev/null
+++ b/entity/Member_entity/entityfields/msteamsactiongroup/children/openmsteams/stateProcess.js
@@ -0,0 +1,14 @@
+import("MSTeams_lib");
+import("system.vars");
+import("system.neon");
+import("system.result");
+import("Sql_lib");
+
+var res = neon.COMPONENTSTATE_DISABLED;
+var teamId = vars.get("$param.MSTTeamId_param");
+if (teamId && MSTeamsUtils.isTeamsEnabled() && MSTeamsUtils.isTeamActive(teamId))
+{    
+    res = neon.COMPONENTSTATE_EDITABLE;
+}
+
+result.string(res);
\ No newline at end of file
diff --git a/entity/Member_entity/entityfields/msteamsactiongroup/children/restoreteam/onActionProcess.js b/entity/Member_entity/entityfields/msteamsactiongroup/children/restoreteam/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..6a3f91dd3284c696644915699f39cd83512a74a6
--- /dev/null
+++ b/entity/Member_entity/entityfields/msteamsactiongroup/children/restoreteam/onActionProcess.js
@@ -0,0 +1,13 @@
+import("system.teams");
+import("Sql_lib");
+import("system.vars");
+import("system.neon");
+
+var teamId = vars.get("$param.MSTTeamId_param");
+if (teamId)
+{
+    teams.unarchiveTeam(teamId);
+    newWhere("MST_TEAM.MST_TEAMID", teamId)
+       .updateFields({"IS_ARCHIVED" : "0"});
+    neon.refreshAll();
+}
\ No newline at end of file
diff --git a/entity/Member_entity/entityfields/msteamsactiongroup/children/restoreteam/stateProcess.js b/entity/Member_entity/entityfields/msteamsactiongroup/children/restoreteam/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..45ca08b1622ea01f75c5029fbb125be25fba87c5
--- /dev/null
+++ b/entity/Member_entity/entityfields/msteamsactiongroup/children/restoreteam/stateProcess.js
@@ -0,0 +1,16 @@
+import("MSTeams_lib");
+import("system.vars");
+import("system.neon");
+import("system.result");
+import("Sql_lib");
+
+var res = neon.COMPONENTSTATE_DISABLED;
+var teamId = vars.get("$param.MSTTeamId_param");
+if (teamId && MSTeamsUtils.isTeamsEnabled())
+{   
+    var teamInfo = MSTeamsUtils.getTeamInfo(teamId);
+    if (teamInfo && teamInfo.isArchived)
+        res = neon.COMPONENTSTATE_EDITABLE;
+}
+
+result.string(res);
\ No newline at end of file
diff --git a/entity/Member_entity/entityfields/msteamsactiongroup/stateProcess.js b/entity/Member_entity/entityfields/msteamsactiongroup/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c05618702e36bfc821bfcd8ebefe57722f7f29dd
--- /dev/null
+++ b/entity/Member_entity/entityfields/msteamsactiongroup/stateProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("system.neon");
+import("system.result");
+import("MSTeams_lib");
+
+var isTeamsEnabled = vars.get("$param.EnableMSTeams_param") == "true" && MSTeamsUtils.isTeamsEnabled();
+result.string(isTeamsEnabled ? neon.COMPONENTSTATE_EDITABLE : neon.COMPONENTSTATE_INVISIBLE);
\ No newline at end of file
diff --git a/entity/Member_entity/entityfields/mstteamid_param/valueProcess.js b/entity/Member_entity/entityfields/mstteamid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..566da0b330d91a6b956f6a40c0517ce03f795a91
--- /dev/null
+++ b/entity/Member_entity/entityfields/mstteamid_param/valueProcess.js
@@ -0,0 +1,8 @@
+import("system.vars");
+import("system.result");
+import("Sql_lib");
+import("MSTeams_lib");
+
+var objectType = vars.get("$param.ObjectType_param");
+if (objectType in MSTeamsUtils.getTeamLinkContexts())
+    result.string(MSTeamsUtils.getLinkedTeam(vars.get("$param.ObjectRowId_param"), objectType) || "");
\ No newline at end of file
diff --git a/entity/Member_entity/entityfields/object_rowid/displayValueProcess.js b/entity/Member_entity/entityfields/object_rowid/displayValueProcess.js
index 8b080bceea92c146a676b0f33cc7cb87d4e86b9d..95c4eea5367140dc2d81e470ba0607adf52f07c1 100644
--- a/entity/Member_entity/entityfields/object_rowid/displayValueProcess.js
+++ b/entity/Member_entity/entityfields/object_rowid/displayValueProcess.js
@@ -7,5 +7,5 @@ import("Context_lib");
 if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$field.OBJECT_ROWID")) {
     result.string("");
 } else if (vars.exists("$field.OBJECT_TYPE") && vars.get("$field.OBJECT_TYPE")) {
-    result.string(db.cell(ContextUtils.getNameSql(vars.get("$field.OBJECT_TYPE"), vars.get("$field.OBJECT_ROWID"))));
+    result.string(ContextUtils.getTitleByContext(vars.get("$field.OBJECT_TYPE"), vars.get("$field.OBJECT_ROWID")));
 }
\ No newline at end of file
diff --git a/entity/Member_entity/recordcontainers/db/conditionProcess.js b/entity/Member_entity/recordcontainers/db/conditionProcess.js
index 8ea033217e401e458c462cc899184bf4f8b24cd1..ce742b4d37acd1af594044cc09f317b8279ad3ee 100644
--- a/entity/Member_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Member_entity/recordcontainers/db/conditionProcess.js
@@ -6,5 +6,4 @@ var cond = newWhere()
             .andIfSet("OBJECTMEMBER.OBJECT_ROWID", "$param.ObjectRowId_param")
             .andIfSet("OBJECTMEMBER.OBJECT_TYPE", "$param.ObjectType_param");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Member_entity/recordcontainers/db/recordfieldmappings/mst_memberrole.value/expression.js b/entity/Member_entity/recordcontainers/db/recordfieldmappings/mst_memberrole.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..2296cd85fe7663014d2f6724534e21d1e2de81d9
--- /dev/null
+++ b/entity/Member_entity/recordcontainers/db/recordfieldmappings/mst_memberrole.value/expression.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+import("MSTeams_lib");
+
+result.string(MSTeamsUtils.getTeamRoleSubSql(vars.get("$param.MSTTeamId_param"), "OBJECTMEMBER.CONTACT_ID"));
\ No newline at end of file
diff --git a/entity/Member_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js b/entity/Member_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js
deleted file mode 100644
index 000d055cfacc970e2ca0dc70689b4c793e0bc0cd..0000000000000000000000000000000000000000
--- a/entity/Member_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import("system.vars");
-import("system.result");
-import("Context_lib");
-
-//TODO: refactor:
-//whenever we want to shrink data for a single object it's not needed to resolve the objects name where we're from
-if (vars.get("$param.ObjectType_param") == null)
-    result.string(ContextUtils.getNameSubselectSql("OBJECT_TYPE", "OBJECT_ROWID"));
-else
-    result.string("'OBJECT_ROWID.displayValue not loaded'");
\ No newline at end of file
diff --git a/entity/Member_entity/recordcontainers/jdito/contentProcess.js b/entity/Member_entity/recordcontainers/jdito/contentProcess.js
index e4d4225eebe44cebd4e0d39c0acb38313d53162f..48b27281c4ebadf918be03ac5c907c41683d133a 100644
--- a/entity/Member_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Member_entity/recordcontainers/jdito/contentProcess.js
@@ -1,3 +1,4 @@
+import("Util_lib");
 import("system.translate");
 import("system.result");
 import("system.vars");
@@ -16,7 +17,7 @@ var memberLoadingConfig = entities.createConfigForLoadingRows()
                                                 "MEMBERROLE", "MEMBERROLE.displayValue", "OBJECT_ROWID", "OBJECT_TYPE",
                                                 "OBJECTMEMBERID", "ORG_ORGID", "ORGANISATION_NAME", "PERSON_FIRSTNAME", "PERSON_FULL_NAME", 
                                                 "PERSON_LASTNAME", "PERSON_PERSID", "PERSON_SALUTATION", "PERSON_TITLE", "POSITION", "TARGETCONTEXT",
-                                                "recordType"]);
+                                                "recordType", "MST_MEMBERROLE"]);
 
 if (idValues)
 {
@@ -29,90 +30,122 @@ if (filter && filter.filter != null)
 }
 
 var memberRows = entities.getRows(memberLoadingConfig);
+memberRows = memberRows.map(function(row)
+{
+    return [
+        row["#UID"], 
+        row["OBJECTMEMBERID"], 
+        row["CONTACT_ID"], 
+        row["CONTACT_ID.displayValue"], 
+        row["CONTACTROLE"], 
+        row["DEPARTMENT"], 
+        row["ICON"],
+        row["IMAGE"], 
+        row["MEMBERROLE"], 
+        row["MEMBERROLE.displayValue"], 
+        row["OBJECT_ROWID"], 
+        row["OBJECT_TYPE"], 
+        row["ORG_ORGID"], 
+        row["ORGANISATION_NAME"], 
+        row["PERSON_FIRSTNAME"], 
+        row["PERSON_FULL_NAME"], 
+        row["PERSON_LASTNAME"], 
+        row["PERSON_PERSID"], 
+        row["PERSON_SALUTATION"], 
+        row["PERSON_TITLE"], 
+        row["POSITION"], 
+        row["TARGETCONTEXT"], 
+        row["recordType"], 
+        row["MST_MEMBERROLE"]
+    ];
+});
 
-if (vars.get("$param.ObjectType_param") == "Salesproject" && vars.get("$param.ObjectRowId_param") != null)
+if (Utils.isNullOrEmpty(idValues) || memberRows.length === 0)
 {
-    var orgContactId = newSelect("SALESPROJECT.CONTACT_ID")
-                        .from("SALESPROJECT")
-                        .where("SALESPROJECT.SALESPROJECTID", "$param.ObjectRowId_param")
-                        .cell();
-    
-    var districtLoadingConfig = entities.createConfigForLoadingRows()
-                                            .entity("DistrictResponsible_entity")
-                                            .provider("OrganisationResponsibles")
-                                            .addParameter("OrgUid_param", orgContactId)
-                                            .fields(["#UID","DISTRICTRESPONSIBLEID", "DISTRICT_ID", "EMPLOYEE_CONTACT_ID", 
-                                                        "EMPLOYEE_CONTACT_ID.displayValue", "USER_EDIT", "USER_NEW", 
-                                                        "departmentAttributeName", "DATE_EDIT", "DATE_NEW"]);
-    
-    var districtRows = entities.getRows(districtLoadingConfig);
-    
-    
-    districtRows = districtRows.map(function(row)
+    if (vars.get("$param.ObjectType_param") == "Salesproject" && vars.get("$param.ObjectRowId_param") != null)
     {
-        return [row["#UID"], row["DISTRICTRESPONSIBLEID"], row["DISTRICT_ID"], row["EMPLOYEE_CONTACT_ID"], row["EMPLOYEE_CONTACT_ID.displayValue"], 
-            row["USER_EDIT"], row["USER_NEW"], row["departmentAttributeName"], row["DATE_EDIT"], row["DATE_NEW"]];
-    });
-}
+        var orgContactId = newSelect("SALESPROJECT.CONTACT_ID")
+                            .from("SALESPROJECT")
+                            .where("SALESPROJECT.SALESPROJECTID", "$param.ObjectRowId_param")
+                            .cell();
 
+        var districtLoadingConfig = entities.createConfigForLoadingRows()
+            .entity("DistrictResponsible_entity")
+            .provider("OrganisationResponsibles")
+            .addParameter("OrgUid_param", orgContactId)
+            .fields(["#UID","DISTRICTRESPONSIBLEID", "DISTRICT_ID", "EMPLOYEE_CONTACT_ID", 
+                        "EMPLOYEE_CONTACT_ID.displayValue", "USER_EDIT", "USER_NEW", 
+                        "departmentAttributeName", "DATE_EDIT", "DATE_NEW"]);
 
-memberRows = memberRows.map(function(row)
-{
-    return [row["#UID"], row["OBJECTMEMBERID"], row["CONTACT_ID"], row["CONTACT_ID.displayValue"], row["CONTACTROLE"], row["DEPARTMENT"], row["ICON"],
-                row["IMAGE"], row["MEMBERROLE"], row["MEMBERROLE.displayValue"], row["OBJECT_ROWID"], 
-                row["OBJECT_TYPE"], row["ORG_ORGID"], row["ORGANISATION_NAME"], row["PERSON_FIRSTNAME"], 
-                row["PERSON_FULL_NAME"], row["PERSON_LASTNAME"], row["PERSON_PERSID"], row["PERSON_SALUTATION"], row["PERSON_TITLE"], 
-                row["POSITION"], row["TARGETCONTEXT"], row["recordType"]];
-});
+        var districtRows = entities.getRows(districtLoadingConfig);
 
-var responsibleUids = [];
+        districtRows = districtRows.map(function(row)
+        {
+            return [
+                row["#UID"], 
+                row["DISTRICTRESPONSIBLEID"], 
+                row["DISTRICT_ID"], 
+                row["EMPLOYEE_CONTACT_ID"], 
+                row["EMPLOYEE_CONTACT_ID.displayValue"], 
+                row["USER_EDIT"],
+                row["USER_NEW"], 
+                row["departmentAttributeName"], 
+                row["DATE_EDIT"], 
+                row["DATE_NEW"]
+            ];
+        });
+    }
 
-districtRows.forEach(function(row){
-    responsibleUids.push(row[3]);
-});
+    var responsibleUids = [];
 
-var loadingConfPers = entities.createConfigForLoadingRows()
-                                    .entity("Person_entity")
-                                    .uids(responsibleUids)
-                                    .fields(["ORGANISATION_ID", "ORGANISATION_NAME", "CONTACTROLE", "POSITION", 
-                                                "FIRSTNAME", "LASTNAME", "SALUTATION", "TITLE"]);
+    districtRows.forEach(function(row){
+        responsibleUids.push(row[3]);
+    });
 
-var persRows = entities.getRows(loadingConfPers);
+    var loadingConfPers = entities.createConfigForLoadingRows()
+                                        .entity("Person_entity")
+                                        .uids(responsibleUids)
+                                        .fields(["ORGANISATION_ID", "ORGANISATION_NAME", "CONTACTROLE", "POSITION", 
+                                                    "FIRSTNAME", "LASTNAME", "SALUTATION", "TITLE"]);
 
-persRows = persRows.map(function(row){
-    return [row["SALUTATION"], row["TITLE"], row["FIRSTNAME"], row["LASTNAME"],
-                row["ORGANISATION_NAME"], row["ORGANISATION_ID"], row["CONTACTROLE"],
-                row["POSITION"], row["PERSONID"]];
-});
+    var persRows = entities.getRows(loadingConfPers);
 
+    persRows = persRows.map(function(row){
+        return [row["SALUTATION"], row["TITLE"], row["FIRSTNAME"], row["LASTNAME"],
+                    row["ORGANISATION_NAME"], row["ORGANISATION_ID"], row["CONTACTROLE"],
+                    row["POSITION"], row["PERSONID"]];
+    });
 
-districtRows.forEach(function(row, counter){
-    
-    memberRows.push(
-        [row[0],
-        null,
-        row[3],
-        row[4],
-        persRows[counter][6],
-        row[7],
-        "VAADIN:GLOBE",
-        "TEXT:" + row[4].substring(row[4].indexOf(" ", 0)+1, row[4].length),
-        "MEMBERROLEDISTRICTRESPONSIBLE",
-        translate.text("District Responsible"),
-        vars.get("$param.ObjectRowId_param"),
-        vars.get("$param.ObjectType_param"),
-        persRows[counter][5],
-        persRows[counter][4],
-        persRows[counter][2],
-        row[4],
-        persRows[counter][3], 
-        persRows[counter][8], 
-        persRows[counter][0], 
-        persRows[counter][1], 
-        persRows[counter][7],
-        null, 
-        "DistrictResponsible"
-    ]);
-});
+
+    districtRows.forEach(function(row, counter){
+
+        memberRows.push(
+            [row[0],
+            null,
+            row[3],
+            row[4],
+            persRows[counter][6],
+            row[7],
+            "VAADIN:GLOBE",
+            "TEXT:" + row[4].substring(row[4].indexOf(" ", 0)+1, row[4].length),
+            "MEMBERROLEDISTRICTRESPONSIBLE",
+            translate.text("District Responsible"),
+            vars.get("$param.ObjectRowId_param"),
+            vars.get("$param.ObjectType_param"),
+            persRows[counter][5],
+            persRows[counter][4],
+            persRows[counter][2],
+            row[4],
+            persRows[counter][3], 
+            persRows[counter][8], 
+            persRows[counter][0], 
+            persRows[counter][1], 
+            persRows[counter][7],
+            null, 
+            "DistrictResponsible",
+            ""
+        ]);
+    });
+}
 
 result.object(memberRows);
\ No newline at end of file
diff --git a/entity/ModuleTree_entity/ModuleTree_entity.aod b/entity/ModuleTree_entity/ModuleTree_entity.aod
index 576d1171a8410d0c8fc1a15614a746438582b1c0..4340bcf19196be6814b2294b553a9013ceea00bb 100644
--- a/entity/ModuleTree_entity/ModuleTree_entity.aod
+++ b/entity/ModuleTree_entity/ModuleTree_entity.aod
@@ -26,6 +26,16 @@
       <targetContextField>TYPE</targetContextField>
       <targetIdField>ROW_ID</targetIdField>
       <recordContainer>jdito</recordContainer>
+      <children>
+        <entityParameter>
+          <name>ContextName_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>ID_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>7da88ffb-4292-4fe2-88e2-dda2dc4aa625</name>
@@ -46,16 +56,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ContextName_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>ID_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityField>
       <name>PARENT_ID</name>
diff --git a/entity/Notification_entity/Notification_entity.aod b/entity/Notification_entity/Notification_entity.aod
index 8dead6bc118e4d353c6c708976a037b3ace5c45e..2668a0419e9a0b0d0d74c0f6f25867fd05c13faf 100644
--- a/entity/Notification_entity/Notification_entity.aod
+++ b/entity/Notification_entity/Notification_entity.aod
@@ -132,31 +132,31 @@
     </entityField>
     <entityConsumer>
       <name>StateKeywords</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>#PROVIDER</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Notification_entity/entityfields/statekeywords/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>PrioKeywords</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>#PROVIDER</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>PrioKeywords</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Notification_entity/entityfields/priokeywords/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
@@ -170,13 +170,16 @@
       <outputFormat>dd.MM.yyyy</outputFormat>
       <inputFormat>dd.MM.yyyy</inputFormat>
     </entityField>
+    <entityField>
+      <name>SUBCATEGORY</name>
+      <title>Subcategory</title>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
       <name>db</name>
       <alias>_____SYSTEMALIAS</alias>
-      <maximumDbRows v="200" />
-      <isPageable v="false" />
+      <isPageable v="true" />
       <fromClauseProcess>%aditoprj%/entity/Notification_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
       <conditionProcess>%aditoprj%/entity/Notification_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
       <orderClauseProcess>%aditoprj%/entity/Notification_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
@@ -282,6 +285,12 @@
           <name>CREATEDAY.value</name>
           <recordfield>ASYS_NOTIFICATIONCONTENTS.CREATEDATE</recordfield>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>SUBCATEGORY.value</name>
+          <recordfield>ASYS_NOTIFICATIONCONTENTS.SUBCATEGORY</recordfield>
+          <isFilterable v="true" />
+          <isLookupFilter v="true" />
+        </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
   </recordContainers>
diff --git a/entity/Notification_entity/recordcontainers/db/onDBDelete.js b/entity/Notification_entity/recordcontainers/db/onDBDelete.js
index 54618e0f77334d441107ac955591986a7540f4d0..ecd41a4a7a4731ed092c070714bad37a909deccf 100644
--- a/entity/Notification_entity/recordcontainers/db/onDBDelete.js
+++ b/entity/Notification_entity/recordcontainers/db/onDBDelete.js
@@ -4,4 +4,4 @@ import("system.notification");
 // Deletes notificationContents from its table, if there are no user notification left
 // Only AppointmentContents need to stay, because they would appear again after every deletion.
 if(vars.get("$field.TYPECODE") != "_____SYSTEM_NOTIFICATION_APPOINTMENT")
-    notification.deleteContentIfOrphan(vars.get("$field.ID"), vars.get("$field.CONTENTID"));
\ No newline at end of file
+    notification.deleteMultipleContentsIfOrphan([vars.get("$field.CONTENTID")]);
\ No newline at end of file
diff --git a/entity/ObjectProxy_entity/ObjectProxy_entity.aod b/entity/ObjectProxy_entity/ObjectProxy_entity.aod
index ade8076995cdf19ebddb1dc97d0ed3626fb4ea9e..8eb6e53ec1fac158f5a89f6eed26678277279810 100644
--- a/entity/ObjectProxy_entity/ObjectProxy_entity.aod
+++ b/entity/ObjectProxy_entity/ObjectProxy_entity.aod
@@ -18,6 +18,7 @@
     <entityProvider>
       <name>FilteredObjects</name>
       <targetConsumerProcess>%aditoprj%/entity/ObjectProxy_entity/entityfields/filteredobjects/targetConsumerProcess.js</targetConsumerProcess>
+      <documentation>%aditoprj%/entity/ObjectProxy_entity/entityfields/filteredobjects/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>92e21c48-19aa-402c-b75f-96cad75d8a14</name>
@@ -31,6 +32,12 @@
           <fieldName>LinkedObject</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>9d75842d-0f91-4ddf-bd94-d8f092f17224</name>
+          <entityName>KnowledgeLink_entity</entityName>
+          <fieldName>Objects</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
     </entityProvider>
     <entityParameter>
diff --git a/entity/ObjectProxy_entity/entityfields/filteredobjects/documentation.adoc b/entity/ObjectProxy_entity/entityfields/filteredobjects/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..1c4b46dd5e5b005c54afe5060159e4897799d352
--- /dev/null
+++ b/entity/ObjectProxy_entity/entityfields/filteredobjects/documentation.adoc
@@ -0,0 +1,3 @@
+= FilteredObjects
+
+This provider can retrieve objects of the given entity, the results can be filtered.
\ No newline at end of file
diff --git a/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod b/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod
index a2a47eb12c23e662e6c4e789dd4f4b5ae4d032a0..4488b7e9c3c10e6801d1c176c4936df657b38717 100644
--- a/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod
+++ b/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod
@@ -30,6 +30,13 @@
     </entityParameter>
     <entityProvider>
       <name>ObjectRelationTypes</name>
+      <children>
+        <entityParameter>
+          <name>OnlyFirstSide_param</name>
+          <valueProcess>%aditoprj%/entity/ObjectRelationType_entity/entityfields/objectrelationtypes/children/onlyfirstside_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>81f4567a-fc89-49fc-be86-77600cb66305</name>
@@ -38,13 +45,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>OnlyFirstSide_param</name>
-          <valueProcess>%aditoprj%/entity/ObjectRelationType_entity/entityfields/objectrelationtypes/children/onlyfirstside_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>OnlyFirstSide_param</name>
diff --git a/entity/ObjectTree_entity/ObjectTree_entity.aod b/entity/ObjectTree_entity/ObjectTree_entity.aod
index 4266919a6b46eca1ea8ba194b849935a8c606e23..7edb15c3b6b7c93b3b7c06acdec09c16b828d48c 100644
--- a/entity/ObjectTree_entity/ObjectTree_entity.aod
+++ b/entity/ObjectTree_entity/ObjectTree_entity.aod
@@ -17,6 +17,16 @@
       <name>TreeProvider</name>
       <targetContextField>TARGET_CONTEXT</targetContextField>
       <targetIdField>TARGET_ID</targetIdField>
+      <children>
+        <entityParameter>
+          <name>Uid_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>RelationTypes_param</name>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>f4c0605f-3ccb-4ff1-b460-7268e8553857</name>
@@ -31,16 +41,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>Uid_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>RelationTypes_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>ObjectIds_param</name>
@@ -68,17 +68,17 @@
     </entityField>
     <entityConsumer>
       <name>ObjectRelationTypes</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>ObjectRelationType_entity</entityName>
-        <fieldName>ObjectRelationTypes</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>SourceObjectTypes_param</name>
           <valueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/objectrelationtypes/children/sourceobjecttypes_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>ObjectRelationType_entity</entityName>
+        <fieldName>ObjectRelationTypes</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ObjectTypes_param</name>
@@ -126,11 +126,6 @@
     </entityField>
     <entityConsumer>
       <name>Objects</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Object_entity</entityName>
-        <fieldName>FilteredObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
@@ -142,6 +137,11 @@
           <valueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/objects/children/excludedobjectids_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Object_entity</entityName>
+        <fieldName>FilteredObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionGroup>
       <name>alter</name>
diff --git a/entity/ObjectTree_entity/entityfields/target_context/valueProcess.js b/entity/ObjectTree_entity/entityfields/target_context/valueProcess.js
index 700dc7461b5f61b17ead3d2735ef8fd2eb7ac6f6..cd4083fad2fbb15ab6da846ce70808957582da6a 100644
--- a/entity/ObjectTree_entity/entityfields/target_context/valueProcess.js
+++ b/entity/ObjectTree_entity/entityfields/target_context/valueProcess.js
@@ -5,5 +5,9 @@ import("ObjectRelation_lib");
 
 if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
 {
-    result.string(ObjectRelationUtils.getRelationType(vars.get("$field.OBJECTRELATIONTYPEID"))[6]);
+    var relationType = ObjectRelationUtils.getRelationType(vars.get("$field.OBJECTRELATIONTYPEID"));
+    if(relationType[3] == "reverse")
+        result.string(ObjectRelationUtils.getRelationType(vars.get("$field.OBJECTRELATIONTYPEID"))[5]);
+    else
+        result.string(ObjectRelationUtils.getRelationType(vars.get("$field.OBJECTRELATIONTYPEID"))[6]);
 }
\ No newline at end of file
diff --git a/entity/ObjectTree_entity/entityfields/target_id/displayValueProcess.js b/entity/ObjectTree_entity/entityfields/target_id/displayValueProcess.js
index d074689525fa0fc64cc41002e883c2c8cd5579f3..81438bdcb9fc7b302aebf1c0fdcf797bef0334c3 100644
--- a/entity/ObjectTree_entity/entityfields/target_id/displayValueProcess.js
+++ b/entity/ObjectTree_entity/entityfields/target_id/displayValueProcess.js
@@ -6,5 +6,5 @@ import("Context_lib");
 
 if (vars.get("$field.TARGET_ID") && vars.get("$field.TARGET_CONTEXT"))
 {
-    result.string(db.cell(ContextUtils.getNameSql(vars.get("$field.TARGET_CONTEXT"), vars.get("$field.TARGET_ID"))));
+    result.string(ContextUtils.getTitleByContext(vars.get("$field.TARGET_CONTEXT"), vars.get("$field.TARGET_ID")));
 }
\ No newline at end of file
diff --git a/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js b/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js
index d1d925c81b4e8fbd86046d8211e7366524b23882..7980a2bd4337487f4d163001299d364840e52f4e 100644
--- a/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js
@@ -298,7 +298,7 @@ function _insertEntry(pTree, pEntryData, pNodeId, pLayer, pObjectType, pNewRelat
     pEntryData.forEach(function ([objectId, objectRelationId, objectType, relationTitle, info, objectRelationTypeId], i)
     {
         //TODO: entities.getRow, check if this is possible with fewer queries
-        var display = db.cell(ContextUtils.getNameSql(pObjectType, objectId));
+        var display = ContextUtils.getTitleByContext(pObjectType, objectId);
         // TODO: Icon                       
         var uid = [objectId, i, objectRelationTypeId, pObjectType, pNodeId, objectType, objectRelationId, pHierarchy];
 
diff --git a/entity/Object_entity/Object_entity.aod b/entity/Object_entity/Object_entity.aod
index 1a571fad307eb9e7e768bdfa12c553247e3ec376..884a3a733c379f529f1d10c2ad7b4cd9d144900f 100644
--- a/entity/Object_entity/Object_entity.aod
+++ b/entity/Object_entity/Object_entity.aod
@@ -27,6 +27,21 @@
       <targetConsumerProcess>%aditoprj%/entity/Object_entity/entityfields/allobjects/targetConsumerProcess.js</targetConsumerProcess>
       <documentation>%aditoprj%/entity/Object_entity/entityfields/allobjects/documentation.adoc</documentation>
       <recordContainer>jdito</recordContainer>
+      <children>
+        <entityParameter>
+          <name>ObjectType_param</name>
+          <expose v="true" />
+          <mandatory v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>ExcludedObjectIds_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>445b79b3-e826-40d1-b6c2-46d62daf0818</name>
@@ -65,43 +80,23 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ObjectType_param</name>
-          <expose v="true" />
-          <mandatory v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>ExcludedObjectIds_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>ContactId_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityConsumer>
       <name>Organisations</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Organisation_entity</entityName>
-        <fieldName>#PROVIDER</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ExcludedContactIds_param</name>
           <valueProcess>%aditoprj%/entity/Object_entity/entityfields/organisations/children/excludedcontactids_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Persons</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Person_entity</entityName>
+        <entityName>Organisation_entity</entityName>
         <fieldName>#PROVIDER</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Persons</name>
       <children>
         <entityParameter>
           <name>ExcludedContactIds_param</name>
@@ -112,34 +107,39 @@
           <valueProcess>%aditoprj%/entity/Object_entity/entityfields/persons/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Offers</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Offer_entity</entityName>
+        <entityName>Person_entity</entityName>
         <fieldName>#PROVIDER</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Offers</name>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Object_entity/entityfields/offers/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Orders</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Order_entity</entityName>
+        <entityName>Offer_entity</entityName>
         <fieldName>#PROVIDER</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Orders</name>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Object_entity/entityfields/orders/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Order_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Products</name>
@@ -151,31 +151,31 @@
     </entityConsumer>
     <entityConsumer>
       <name>Contracts</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Contract_entity</entityName>
-        <fieldName>#PROVIDER</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Object_entity/entityfields/contracts/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Salesprojects</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Salesproject_entity</entityName>
+        <entityName>Contract_entity</entityName>
         <fieldName>#PROVIDER</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Salesprojects</name>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Object_entity/entityfields/salesprojects/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Salesproject_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ExcludedObjectIds_param</name>
@@ -185,6 +185,21 @@
     <entityProvider>
       <name>FilteredObjects</name>
       <targetConsumerProcess>%aditoprj%/entity/Object_entity/entityfields/filteredobjects/targetConsumerProcess.js</targetConsumerProcess>
+      <children>
+        <entityParameter>
+          <name>ExcludedObjectIds_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>ObjectType_param</name>
+          <expose v="true" />
+          <mandatory v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>e644a709-cc8f-425e-bef2-9c51eea9bbe9</name>
@@ -205,21 +220,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ExcludedObjectIds_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>ObjectType_param</name>
-          <expose v="true" />
-          <mandatory v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>ContactId_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityConsumer>
       <name>Campaigns</name>
@@ -243,17 +243,17 @@
     </entityParameter>
     <entityConsumer>
       <name>PrivatePersons</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>PrivatePerson_entity</entityName>
-        <fieldName>#PROVIDER</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ExcludedPersonIds_param</name>
           <valueProcess>%aditoprj%/entity/Object_entity/entityfields/privatepersons/children/excludedpersonids_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>PrivatePerson_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Activities</name>
@@ -283,6 +283,14 @@
         <fieldName>#PROVIDER</fieldName>
       </dependency>
     </entityConsumer>
+    <entityConsumer>
+      <name>Leadimports</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Leadimport_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+    </entityConsumer>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
diff --git a/entity/Object_entity/recordcontainers/jdito/contentProcess.js b/entity/Object_entity/recordcontainers/jdito/contentProcess.js
index 27b0b7e83a11771b4ea8be2716a3fd61d1c5a6a7..bf77eb9a2d0f0df969843311c18f5bc4eb29738b 100644
--- a/entity/Object_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Object_entity/recordcontainers/jdito/contentProcess.js
@@ -19,7 +19,7 @@ if (vars.get("$param.ObjectType_param"))
     if (vars.exists("$param.ContactId") && vars.get("$param.ContactId"))
         contactId = vars.get("$param.ContactId");
     
-    result.object(db.table(ContextUtils.getContextDataSql(objectType, contactId, false, undefined, false, null, null, excludedIds)))
+    result.object(ContextUtils.loadContent(ContextUtils.getEntity(objectType), [contactId], ["#UID", "#CONTENTTITLE"], excludedIds))
 }
 else
 {
diff --git a/entity/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod
index 0491466e0b6a47b54b5d0c67d48d8d4b7a891d31..5349b4d8fd4c116790e08f7527679c5de5f74b5f 100644
--- a/entity/Offer_entity/Offer_entity.aod
+++ b/entity/Offer_entity/Offer_entity.aod
@@ -10,6 +10,7 @@
   <grantUpdateProcess>%aditoprj%/entity/Offer_entity/grantUpdateProcess.js</grantUpdateProcess>
   <grantDeleteProcess>%aditoprj%/entity/Offer_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/Offer_entity/contentTitleProcess.js</contentTitleProcess>
+  <contentDescriptionProcess>%aditoprj%/entity/Offer_entity/contentDescriptionProcess.js</contentDescriptionProcess>
   <afterUiInit>%aditoprj%/entity/Offer_entity/afterUiInit.js</afterUiInit>
   <useFavorites v="true" />
   <iconId>VAADIN:CART</iconId>
@@ -116,11 +117,6 @@
       <name>Offeritems</name>
       <refreshParent v="true" />
       <description></description>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Offeritem_entity</entityName>
-        <fieldName>OfferItems</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>OfferId_param</name>
@@ -150,6 +146,11 @@
           <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/offeritems/children/language_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Offeritem_entity</entityName>
+        <fieldName>OfferItems</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>newOfferVersion</name>
@@ -246,27 +247,22 @@
     </entityField>
     <entityConsumer>
       <name>AnyContacts</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AnyContact_entity</entityName>
-        <fieldName>OnlySameCompany</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/anycontacts/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AnyContact_entity</entityName>
+        <fieldName>OnlySameCompany</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Documents</name>
       <selectionMode>MULTI</selectionMode>
       <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/documents/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>Documents</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -277,15 +273,15 @@
           <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>MainDocuments</name>
-      <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/maindocuments/stateProcess.js</stateProcess>
       <dependency>
         <name>dependency</name>
         <entityName>Document_entity</entityName>
-        <fieldName>MainDocuments</fieldName>
+        <fieldName>Documents</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>MainDocuments</name>
+      <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/maindocuments/stateProcess.js</stateProcess>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -296,6 +292,11 @@
           <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/maindocuments/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>MainDocuments</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>ADDRESS</name>
@@ -322,11 +323,6 @@
     </entityField>
     <entityConsumer>
       <name>KeywordCurrencies</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -334,14 +330,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordOfferStates</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordOfferStates</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -349,6 +345,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>newOrder</name>
@@ -366,11 +367,6 @@
     </entityConsumer>
     <entityConsumer>
       <name>KeywordProbabilities</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -378,14 +374,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Activities</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Activity_entity</entityName>
-        <fieldName>LinkedObjects</fieldName>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Activities</name>
       <children>
         <entityParameter>
           <name>ObjectId_param</name>
@@ -400,6 +396,11 @@
           <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/activities/children/presetlinks_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Activity_entity</entityName>
+        <fieldName>LinkedObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>newActivity</name>
@@ -411,26 +412,6 @@
     </entityActionField>
     <entityProvider>
       <name>ContactOffers</name>
-      <dependencies>
-        <entityDependency>
-          <name>5c9720b5-1288-4a30-88fd-6dcff6359083</name>
-          <entityName>Person_entity</entityName>
-          <fieldName>Offers</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-        <entityDependency>
-          <name>b308795f-3c81-4e60-99ca-3b5f8e82f62a</name>
-          <entityName>Organisation_entity</entityName>
-          <fieldName>Offers</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-        <entityDependency>
-          <name>a74b02c4-bdb3-4ba8-9207-66a0af528b1b</name>
-          <entityName>Order_entity</entityName>
-          <fieldName>Offers</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -481,6 +462,26 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>5c9720b5-1288-4a30-88fd-6dcff6359083</name>
+          <entityName>Person_entity</entityName>
+          <fieldName>Offers</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>b308795f-3c81-4e60-99ca-3b5f8e82f62a</name>
+          <entityName>Organisation_entity</entityName>
+          <fieldName>Offers</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>a74b02c4-bdb3-4ba8-9207-66a0af528b1b</name>
+          <entityName>Order_entity</entityName>
+          <fieldName>Offers</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityParameter>
       <name>OfferCurrency_param</name>
@@ -550,40 +551,35 @@
     </entityField>
     <entityConsumer>
       <name>KeywordPaymentTerm</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/keywordpaymentterm/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordDeliveryTerm</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordDeliveryTerm</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/keyworddeliveryterm/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Tasks</name>
       <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/tasks/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Task_entity</entityName>
-        <fieldName>Tasks</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>RowId_param</name>
@@ -598,6 +594,11 @@
           <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/tasks/children/presetlinks_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Task_entity</entityName>
+        <fieldName>Tasks</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>INFO</name>
@@ -609,11 +610,6 @@
       <name>Attributes</name>
       <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/attributes/stateProcess.js</stateProcess>
       <onValidation>%aditoprj%/entity/Offer_entity/entityfields/attributes/onValidation.js</onValidation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>AttributeRelations</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -624,6 +620,11 @@
           <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/attributes/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>AttributeRelations</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>OfferPaymentTerm_param</name>
@@ -663,17 +664,17 @@
     </entityField>
     <entityConsumer>
       <name>PossibleAddresses</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Address_entity</entityName>
-        <fieldName>OrganisationAndContactAddresses</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/possibleaddresses/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Address_entity</entityName>
+        <fieldName>OrganisationAndContactAddresses</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>ChoosenTEXHeader</name>
@@ -715,11 +716,6 @@
     </entityField>
     <entityConsumer>
       <name>Objects</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Object_entity</entityName>
-        <fieldName>FilteredObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
@@ -730,14 +726,14 @@
           <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/objects/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Contexts</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Context_entity</entityName>
-        <fieldName>Exclusive</fieldName>
+        <entityName>Object_entity</entityName>
+        <fieldName>FilteredObjects</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Contexts</name>
       <children>
         <entityParameter>
           <name>Blacklist_param</name>
@@ -748,18 +744,15 @@
           <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Context_entity</entityName>
+        <fieldName>Exclusive</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>Links</name>
       <recordContainer>db</recordContainer>
-      <dependencies>
-        <entityDependency>
-          <name>88a166e6-ccd0-4d51-b554-e3327f66d834</name>
-          <entityName>Salesproject_entity</entityName>
-          <fieldName>Offers</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>OfferDeliveryTerm_param</name>
@@ -815,6 +808,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>88a166e6-ccd0-4d51-b554-e3327f66d834</name>
+          <entityName>Salesproject_entity</entityName>
+          <fieldName>Offers</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityParameter>
       <name>ObjectRowId_param</name>
@@ -832,11 +833,6 @@
     </entityField>
     <entityConsumer>
       <name>DocumentTemplateTexHeader</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DocumentTemplate_entity</entityName>
-        <fieldName>DocumentTemplateProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>DocumentTemplateType_param</name>
@@ -847,20 +843,25 @@
           <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/documenttemplatetexheader/children/documenttemplatetypeclassification_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>LogHistories</name>
       <dependency>
         <name>dependency</name>
-        <entityName>LogHistory_entity</entityName>
-        <fieldName>LogHistoryProvider</fieldName>
+        <entityName>DocumentTemplate_entity</entityName>
+        <fieldName>DocumentTemplateProvider</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>LogHistories</name>
       <children>
         <entityParameter>
           <name>tablenames_param</name>
           <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>LogHistory_entity</entityName>
+        <fieldName>LogHistoryProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>FOOTER</name>
@@ -887,11 +888,6 @@
     </entityField>
     <entityConsumer>
       <name>DocumentTemplateTexFooter</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DocumentTemplate_entity</entityName>
-        <fieldName>DocumentTemplateProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>DocumentTemplateType_param</name>
@@ -902,20 +898,25 @@
           <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/documenttemplatetexfooter/children/documenttemplatetypeclassification_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Salesprojects</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Salesproject_entity</entityName>
-        <fieldName>Salesprojects</fieldName>
+        <entityName>DocumentTemplate_entity</entityName>
+        <fieldName>DocumentTemplateProvider</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Salesprojects</name>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/salesprojects/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Salesproject_entity</entityName>
+        <fieldName>Salesprojects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>CONTACT_ID</name>
@@ -1052,6 +1053,9 @@
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
     </entityProvider>
+    <entityField>
+      <name>ACTIVE</name>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -1243,10 +1247,6 @@
           <name>OBJECT_TYPE.value</name>
           <recordfield>OFFER.OBJECT_TYPE</recordfield>
         </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>OBJECT_ROWID.displayValue</name>
-          <expression>%aditoprj%/entity/Offer_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js</expression>
-        </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>CONTACT_ID.value</name>
           <recordfield>OFFER.CONTACT_ID</recordfield>
@@ -1304,6 +1304,10 @@
           <name>OFFER_ID.value</name>
           <recordfield>OFFER.OFFER_ID</recordfield>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ACTIVE.value</name>
+          <expression>%aditoprj%/entity/Offer_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js</expression>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
       <filterExtensions>
         <filterExtensionSet>
diff --git a/entity/Offer_entity/contentDescriptionProcess.js b/entity/Offer_entity/contentDescriptionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..f1afab18db7ad38a661329de19f0554dac92285c
--- /dev/null
+++ b/entity/Offer_entity/contentDescriptionProcess.js
@@ -0,0 +1,12 @@
+import("Util_lib");
+import("system.eMath");
+import("system.translate");
+import("system.datetime");
+import("system.vars");
+import("system.result");
+
+var res = [translate.text("Total gross") + ": " + vars.get("$field.TotalGross.displayValue"), 
+           translate.text("Probability") + ": " + vars.get("$field.PROBABILITY.displayValue"),
+           translate.text("Creation date") + ": " + datetime.toDate(vars.get("$field.DATE_NEW"), translate.text("dd.MM.yyyy"))];
+
+result.string(res.join(" | "));
\ No newline at end of file
diff --git a/entity/Offer_entity/contentTitleProcess.js b/entity/Offer_entity/contentTitleProcess.js
index 98f9e420320b5614344632935f8bb864a240052e..e90d32e0f10a837286539bbe79d4558449dd6b19 100644
--- a/entity/Offer_entity/contentTitleProcess.js
+++ b/entity/Offer_entity/contentTitleProcess.js
@@ -1,4 +1,6 @@
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$field.OfferCode_VersNr_fieldgroup"));
\ No newline at end of file
+var res = [vars.get("$field.OfferCode_VersNr_fieldgroup"), vars.get("$field.STATUS.displayValue")]
+
+result.string(res.join(" | "));
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/copyoffer/onActionProcess.js b/entity/Offer_entity/entityfields/copyoffer/onActionProcess.js
index 17cc41af8869fdfbe8de679bb2a0190d3367e51a..d610943f3409687827462179063e28df0aa3dde8 100644
--- a/entity/Offer_entity/entityfields/copyoffer/onActionProcess.js
+++ b/entity/Offer_entity/entityfields/copyoffer/onActionProcess.js
@@ -1,19 +1,19 @@
 import("system.vars");
-import("system.neon");
 import("Offer_lib");
 
-var contactId = vars.getString("$field.CONTACT_ID");
-var currency = vars.getString("$field.CURRENCY");
-var language = vars.getString("$field.ISOLANGUAGE");
-var header = vars.getString("$field.HEADER");
-var footer = vars.getString("$field.FOOTER");
 var offerId = vars.getString("$field.OFFERID");
-var deliveryTerm = vars.getString("$field.DELIVERYTERMS");
-var paymentTerm = vars.getString("$field.PAYMENTTERMS");
-var rowId = vars.getString("$field.OBJECT_ROWID");
-var objectType = vars.getString("$field.OBJECT_TYPE");
 
+var fieldValues = {
+    contactId: vars.getString("$field.CONTACT_ID"),
+    language: vars.getString("$field.ISOLANGUAGE"),
+    currency: vars.getString("$field.CURRENCY"),
+    header: vars.getString("$field.HEADER"),
+    footer: vars.getString("$field.FOOTER"),
+    deliveryTerm: vars.getString("$field.DELIVERYTERMS"),
+    paymentTerm: vars.getString("$field.PAYMENTTERMS"),
+    objectRowId: vars.getString("$field.OBJECT_ROWID"),
+    objectType: vars.getString("$field.OBJECT_TYPE")
+};
 
-
-OfferUtils.copyOffer(offerId, contactId, language, currency, header, footer, deliveryTerm, paymentTerm, objectType, rowId);
+OfferUtils.copyOffer(offerId, fieldValues);
     
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/deliveryterms/valueProcess.js b/entity/Offer_entity/entityfields/deliveryterms/valueProcess.js
index ff143a3b866db9b739ae9532997d6dd4041b5a89..58333ceee85c85ca43b36ec1a03d4d3067f6a9a9 100644
--- a/entity/Offer_entity/entityfields/deliveryterms/valueProcess.js
+++ b/entity/Offer_entity/entityfields/deliveryterms/valueProcess.js
@@ -11,7 +11,7 @@ if (vars.exists("$param.OfferDeliveryTerm_param") && vars.get("$param.OfferDeliv
 {
     result.string(vars.get("$param.OfferDeliveryTerm_param"));
 } 
-else if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+else if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null && vars.get("$field.CONTACT_ID"))
 {
     var presetValue = "";
     var contactIds = ContactUtils.getPersOrgIds(vars.getString("$field.CONTACT_ID"))
diff --git a/entity/Offer_entity/entityfields/object_rowid/displayValueProcess.js b/entity/Offer_entity/entityfields/object_rowid/displayValueProcess.js
index fe2b7c72502d9937add9b539ed38483e6ca4bd51..8074aca46e2680d0b0d19060e41f370b84830fa1 100644
--- a/entity/Offer_entity/entityfields/object_rowid/displayValueProcess.js
+++ b/entity/Offer_entity/entityfields/object_rowid/displayValueProcess.js
@@ -7,5 +7,5 @@ import("Context_lib");
 if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$field.OBJECT_ROWID") == null) {
     result.string("");
 } else if (vars.exists("$field.OBJECT_TYPE") && vars.get("$field.OBJECT_TYPE")) {
-    result.string(db.cell(ContextUtils.getNameSql(vars.get("$field.OBJECT_TYPE"), vars.get("$field.OBJECT_ROWID"))));
+    result.string(ContextUtils.getTitleByContext(vars.get("$field.OBJECT_TYPE"), vars.get("$field.OBJECT_ROWID")));
 }
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js b/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js
index 0f003f4454eb7dc65386ea75080398e1070aef56..820659874926c9870e401c3898695443e6c2a075 100644
--- a/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js
+++ b/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js
@@ -11,7 +11,7 @@ import("MimeType_lib");
 
 var offerReport = {}
 var attachmentArray = [];
-var updateStatements = [["OFFER", ["STATUS"], db.getColumnTypes("OFFER", ["STATUS"]), [$KeywordRegistry.offerStatus$sent()], newWhere("OFFER.OFFERID", vars.get("$field.OFFERID")).build()]];
+var updateStatements = [["OFFER", ["STATUS"], null, [$KeywordRegistry.offerStatus$sent()], newWhere("OFFER.OFFERID", vars.get("$field.OFFERID")).build()]];
 var notificationMsg = translate.text("The status of the offer was changed to \"sent\".");
 var contactId = vars.get("$field.CONTACT_ID");
 var arrayReport = OfferUtils.buildOfferReport(vars.get("$field.OFFERID"));
diff --git a/entity/Offer_entity/entityfields/paymentterms/valueProcess.js b/entity/Offer_entity/entityfields/paymentterms/valueProcess.js
index 4b13796a10e4c66b70d7abe004fa7369b3c515b3..b9fd6cd7aee19dcfa86cb5e4625f9998548efd02 100644
--- a/entity/Offer_entity/entityfields/paymentterms/valueProcess.js
+++ b/entity/Offer_entity/entityfields/paymentterms/valueProcess.js
@@ -11,7 +11,7 @@ if (vars.exists("$param.OfferPaymentTerm_param") && vars.get("$param.OfferPaymen
 {
     result.string(vars.get("$param.OfferPaymentTerm_param"));
 }
-else if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+else if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null && vars.get("$field.CONTACT_ID"))
 {
     var presetValue = "";
     var contactIds = ContactUtils.getPersOrgIds(vars.getString("$field.CONTACT_ID"))
diff --git a/entity/Offer_entity/recordcontainers/db/conditionProcess.js b/entity/Offer_entity/recordcontainers/db/conditionProcess.js
index 001612ec1946c47b24fee4e07a2273b60586162e..eabc7f2454152f89cb58b7cd582e76dc41cdcdd6 100644
--- a/entity/Offer_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Offer_entity/recordcontainers/db/conditionProcess.js
@@ -14,5 +14,4 @@ else {
 
 cond.andIfSet("OFFER.STATUS", "$param.OfferStatus_param")
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Offer_entity/recordcontainers/db/onDBInsert.js b/entity/Offer_entity/recordcontainers/db/onDBInsert.js
index 086ca1c55981c155c21009f26992a12a4a701fac..da551808a8c82e05a35c7aecf40d283434b2f4c0 100644
--- a/entity/Offer_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/Offer_entity/recordcontainers/db/onDBInsert.js
@@ -1,23 +1,28 @@
+import("Context_lib");
 import("system.workflow");
 import("Workflow_lib");
-import("system.db");
 import("system.datetime");
-import("system.util");
 import("system.neon");
 import("system.vars");
 import("Offer_lib");
+import("Sql_lib");
 
 if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
 {
+    var offerId = vars.get("$local.uid");
     if (vars.exists("$param.OfferOriginal_Id_param"))
-        OfferUtils.copyOfferItems(vars.getString("$param.OfferOriginal_Id_param"), vars.get("$local.uid"));
+        OfferUtils.copyOfferItems(vars.getString("$param.OfferOriginal_Id_param"), offerId);
     
     var activityId = vars.get("$param.ActivityId_param");
     if (activityId)
     {
-        var activityLinkColumns = ["ACTIVITYLINKID", "ACTIVITY_ID", "DATE_NEW", "USER_NEW", "OBJECT_TYPE", "OBJECT_ROWID"];
-        var activityLinkValues = [util.getNewUUID(), activityId,  datetime.date(), vars.get("$sys.user"), "Offer", vars.get("$field.OFFERID")];
-        db.insertData("ACTIVITYLINK", activityLinkColumns, null, activityLinkValues);
+        new SqlBuilder().insertFields({
+            "ACTIVITY_ID": activityId,
+            "DATE_NEW": datetime.date(),
+            "USER_NEW": vars.get("$sys.user"),
+            "OBJECT_TYPE": ContextUtils.getCurrentContextId(),
+            "OBJECT_ROWID": offerId
+        }, "ACTIVITYLINK", "ACTIVITYLINKID");
     }
 }
 
diff --git a/entity/Offer_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js b/entity/Offer_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..6da46407ad55e7e624304130313492b538a2d012
--- /dev/null
+++ b/entity/Offer_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js
@@ -0,0 +1,6 @@
+import("Context_lib");
+import("system.result");
+import("KeywordRegistry_basic");
+
+var activArr = [$KeywordRegistry.offerStatus$open(), $KeywordRegistry.offerStatus$checked(), $KeywordRegistry.offerStatus$sent()];
+result.string(ContextUtils.buildActiveCaseWhen(activArr, "OFFER.STATUS"));
\ No newline at end of file
diff --git a/entity/Offer_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js b/entity/Offer_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js
index 9a3d04480545203f0da83c3f6be762e684c8883a..dd188aaf77933759617acc567c9f1ba0cb1313dc 100644
--- a/entity/Offer_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js
+++ b/entity/Offer_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js
@@ -1,6 +1,11 @@
+import("Context_lib");
+import("Sql_lib");
 import("system.vars");
 import("system.result");
+//!LibFunction
+var cond = newWhere(null, newSelect("ACTIVITYLINK.OBJECT_ROWID").from("ACTIVITYLINK")
+    .join("ACTIVITY", newWhere("ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID")
+        .and("ACTIVITYLINK.OBJECT_TYPE", ContextUtils.getCurrentContextId()))
+    .where(vars.get("$local.condition")), SqlBuilder.EXISTS());
 
-var from = "ACTIVITYLINK join ACTIVITY on ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID and ACTIVITYLINK.OBJECT_TYPE = 'Offer'";
-
-result.string("OFFERID in (select ACTIVITYLINK.OBJECT_ROWID from " + from + " where " + vars.get("$local.condition")+ ")");
\ No newline at end of file
+result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Offer_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js b/entity/Offer_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js
deleted file mode 100644
index 33554680cccd2c3d363443686457c41e0c1c5729..0000000000000000000000000000000000000000
--- a/entity/Offer_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.result");
-import("Context_lib");
-
-result.string(ContextUtils.getNameSubselectSql("OBJECT_TYPE", "OBJECT_ROWID"))
\ No newline at end of file
diff --git a/entity/Offer_entity/recordcontainers/index/query.js b/entity/Offer_entity/recordcontainers/index/query.js
index 7d975c8bb3ea9f1aca3528603f54089ca89cbfbb..b2853b92f92016f237a151162f814427c4ecc671 100644
--- a/entity/Offer_entity/recordcontainers/index/query.js
+++ b/entity/Offer_entity/recordcontainers/index/query.js
@@ -9,8 +9,8 @@ import("KeywordRegistry_basic");
 var sqlHelper = new SqlMaskingUtils();
 var querySelect = newSelect([
         "OFFER.OFFERID", //#UID 
-        sqlHelper.concat([sqlHelper.cast("OFFER.OFFERCODE", SQLTYPES.CHAR, 10), KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.offerStatus(), "OFFER.STATUS")], " | "), //#TITLE
-        sqlHelper.concat(["ORGANISATION.NAME", "'| " + translate.text("Description") + ":'", sqlHelper.castLob("OFFER.INFO", 250)]), //#DESCRIPTION
+        sqlHelper.concatWithSeparator([sqlHelper.cast("OFFER.OFFERCODE", SQLTYPES.CHAR, 10), KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.offerStatus(), "OFFER.STATUS")], " | "), //#TITLE
+        sqlHelper.concatWithSeparator(["ORGANISATION.NAME", "'| " + translate.text("Description") + ":'", sqlHelper.castLob("OFFER.INFO", 250)]), //#DESCRIPTION
         "OFFER.OFFERCODE",
         "OFFER.CONTACT_ID",
         "CONTACT.ORGANISATION_ID",  //CONTACT_ORG_ID
diff --git a/entity/Offeritem_entity/Offeritem_entity.aod b/entity/Offeritem_entity/Offeritem_entity.aod
index a900e6473e8d7ded55a0ca946aa0798296bf657e..281231dc1f88650ef4b04dd1f128b7d1438a4e60 100644
--- a/entity/Offeritem_entity/Offeritem_entity.aod
+++ b/entity/Offeritem_entity/Offeritem_entity.aod
@@ -163,14 +163,6 @@
     <entityProvider>
       <name>OfferItems</name>
       <recordContainer>db</recordContainer>
-      <dependencies>
-        <entityDependency>
-          <name>7810e350-d011-4d95-8d0b-883f3a0e519c</name>
-          <entityName>Offer_entity</entityName>
-          <fieldName>Offeritems</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -194,6 +186,14 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>7810e350-d011-4d95-8d0b-883f3a0e519c</name>
+          <entityName>Offer_entity</entityName>
+          <fieldName>Offeritems</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityField>
       <name>INFO</name>
@@ -204,11 +204,6 @@
     </entityField>
     <entityConsumer>
       <name>KeywordProductGroupcodes</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -216,14 +211,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordQuantityUnits</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordQuantityUnits</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -231,6 +226,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Products</name>
diff --git a/entity/Offeritem_entity/entityfields/product_id/onValueChange.js b/entity/Offeritem_entity/entityfields/product_id/onValueChange.js
index 3a5de6feaba1a19a9d36f5ed067305250b098734..8ff2c784424efb6750081f6cbbb1aaaeaae7faab 100644
--- a/entity/Offeritem_entity/entityfields/product_id/onValueChange.js
+++ b/entity/Offeritem_entity/entityfields/product_id/onValueChange.js
@@ -21,7 +21,7 @@ if(pid != "")
     var productInfoSubSql = newSelect("DESCRIPTION")
         .from("DESCRIPTIONTRANSLATION")
         .whereIfSet("DESCRIPTIONTRANSLATION.OBJECT_ROWID", "$local.value")
-        .and("DESCRIPTIONTRANSLATION.OBJECT_TYPE = 'Product'")
+        .and("DESCRIPTIONTRANSLATION.OBJECT_TYPE", "Product")
         .andIfSet("DESCRIPTIONTRANSLATION.LANG", "$param.Language_param")
         .toString();
     var ProductDetails = ProductUtils.getProductDetails(pid, PriceListFilter, 
diff --git a/entity/Offeritem_entity/recordcontainers/db/conditionProcess.js b/entity/Offeritem_entity/recordcontainers/db/conditionProcess.js
index 82c536561aaac4f8a876433b2311a932cc7b50f4..ee1e6cbd8479673064d2d5aa2350046f148b9102 100644
--- a/entity/Offeritem_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Offeritem_entity/recordcontainers/db/conditionProcess.js
@@ -5,5 +5,4 @@ import("system.vars");
 
 var cond = newWhereIfSet("OFFERITEM.OFFER_ID", "$param.OfferId_param")
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Order_entity/Order_entity.aod b/entity/Order_entity/Order_entity.aod
index 06389d921d507bf630d1baddcbbcd03d570f6faa..0bda9d9f780367d4ddabd0e30a5e482e6d67418c 100644
--- a/entity/Order_entity/Order_entity.aod
+++ b/entity/Order_entity/Order_entity.aod
@@ -6,6 +6,7 @@
   <title>Receipt</title>
   <grantDeleteProcess>%aditoprj%/entity/Order_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/Order_entity/contentTitleProcess.js</contentTitleProcess>
+  <contentDescriptionProcess>%aditoprj%/entity/Order_entity/contentDescriptionProcess.js</contentDescriptionProcess>
   <afterUiInit>%aditoprj%/entity/Order_entity/afterUiInit.js</afterUiInit>
   <useFavorites v="true" />
   <iconId>VAADIN:DOLLAR</iconId>
@@ -28,6 +29,12 @@
           <fieldName>Orders</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>bfc738ad-8af3-4d2b-9ed5-b3ca2212bb9e</name>
+          <entityName>Person_entity</entityName>
+          <fieldName>Orders</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
     </entityProvider>
     <entityField>
@@ -100,11 +107,6 @@
     <entityConsumer>
       <name>Orderitems</name>
       <description></description>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Orderitem_entity</entityName>
-        <fieldName>Orderitems</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>OrderId_param</name>
@@ -130,6 +132,11 @@
           <mandatory v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Orderitem_entity</entityName>
+        <fieldName>Orderitems</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>NET</name>
@@ -191,11 +198,6 @@
     <entityConsumer>
       <name>Documents</name>
       <selectionMode>MULTI</selectionMode>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>Documents</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -206,19 +208,16 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>MainDocuments</name>
-      <stateProcess>%aditoprj%/entity/Order_entity/entityfields/maindocuments/stateProcess.js</stateProcess>
       <dependency>
         <name>dependency</name>
         <entityName>Document_entity</entityName>
-        <fieldName>MainDocuments</fieldName>
+        <fieldName>Documents</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>MainDocuments</name>
+      <stateProcess>%aditoprj%/entity/Order_entity/entityfields/maindocuments/stateProcess.js</stateProcess>
       <children>
-        <entityParameter>
-          <name>AssignmentName_param</name>
-        </entityParameter>
         <entityParameter>
           <name>AssignmentRowId_param</name>
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/maindocuments/children/assignmentrowid_param/valueProcess.js</valueProcess>
@@ -228,28 +227,28 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/maindocuments/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Salesprojects</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Salesproject_entity</entityName>
-        <fieldName>Salesprojects</fieldName>
+        <entityName>Document_entity</entityName>
+        <fieldName>MainDocuments</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Salesprojects</name>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/salesprojects/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordCurrencies</name>
       <dependency>
         <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
+        <entityName>Salesproject_entity</entityName>
+        <fieldName>Salesprojects</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordCurrencies</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -257,14 +256,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordStates</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordStates</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -272,6 +271,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Languages</name>
@@ -290,11 +294,6 @@
     </entityParameter>
     <entityConsumer>
       <name>Activities</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Activity_entity</entityName>
-        <fieldName>LinkedObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>RowId_param</name>
@@ -309,6 +308,11 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/activities/children/presetlinks_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Activity_entity</entityName>
+        <fieldName>LinkedObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>OFFER_ID</name>
@@ -322,11 +326,6 @@
     <entityConsumer>
       <name>Tasks</name>
       <stateProcess>%aditoprj%/entity/Order_entity/entityfields/tasks/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Task_entity</entityName>
-        <fieldName>Tasks</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>RowId_param</name>
@@ -341,15 +340,15 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/tasks/children/presetlinks_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Task_entity</entityName>
+        <fieldName>Tasks</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Attributes</name>
       <onValidation>%aditoprj%/entity/Order_entity/entityfields/attributes/onValidation.js</onValidation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>AttributeRelations</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -360,15 +359,15 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/attributes/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>AttributeTree</name>
-      <stateProcess>%aditoprj%/entity/Order_entity/entityfields/attributetree/stateProcess.js</stateProcess>
       <dependency>
         <name>dependency</name>
         <entityName>AttributeRelation_entity</entityName>
-        <fieldName>TreeProvider</fieldName>
+        <fieldName>AttributeRelations</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>AttributeTree</name>
+      <stateProcess>%aditoprj%/entity/Order_entity/entityfields/attributetree/stateProcess.js</stateProcess>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
@@ -379,20 +378,25 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/attributetree/children/objectrowid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>LogHistories</name>
       <dependency>
         <name>dependency</name>
-        <entityName>LogHistory_entity</entityName>
-        <fieldName>LogHistoryProvider</fieldName>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>TreeProvider</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>LogHistories</name>
       <children>
         <entityParameter>
           <name>tablenames_param</name>
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>LogHistory_entity</entityName>
+        <fieldName>LogHistoryProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>ORDERTYPE</name>
@@ -470,31 +474,31 @@
     </entityField>
     <entityConsumer>
       <name>KeywordOrderTypes</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/keywordordertypes/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordDunningLevels</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordDunningLevels</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/keyworddunninglevels/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>OBJECT_ROWID</name>
@@ -522,11 +526,6 @@
     </entityField>
     <entityConsumer>
       <name>Objects</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Object_entity</entityName>
-        <fieldName>FilteredObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -537,14 +536,14 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/objects/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Contexts</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Context_entity</entityName>
-        <fieldName>Exclusive</fieldName>
+        <entityName>Object_entity</entityName>
+        <fieldName>FilteredObjects</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Contexts</name>
       <children>
         <entityParameter>
           <name>Blacklist_param</name>
@@ -555,6 +554,11 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Context_entity</entityName>
+        <fieldName>Exclusive</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>PossibleConnectionTypes</name>
@@ -607,46 +611,46 @@
     </entityField>
     <entityConsumer>
       <name>KeywordPaymentTerms</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/keywordpaymentterms/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordDeliveryTerms</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordDeliveryTerms</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/keyworddeliveryterms/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>PossibleAddresses</name>
       <documentation>%aditoprj%/entity/Order_entity/entityfields/possibleaddresses/documentation.adoc</documentation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Address_entity</entityName>
-        <fieldName>OrganisationAndContactAddresses</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/possibleaddresses/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Address_entity</entityName>
+        <fieldName>OrganisationAndContactAddresses</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>NOTICE</name>
@@ -663,25 +667,20 @@
     </entityField>
     <entityConsumer>
       <name>Offers</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Offer_entity</entityName>
-        <fieldName>ContactOffers</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/offers/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>DocumentTemplateTexHeader</name>
       <dependency>
         <name>dependency</name>
-        <entityName>DocumentTemplate_entity</entityName>
-        <fieldName>DocumentTemplateProvider</fieldName>
+        <entityName>Offer_entity</entityName>
+        <fieldName>ContactOffers</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>DocumentTemplateTexHeader</name>
       <children>
         <entityParameter>
           <name>DocumentTemplateType_param</name>
@@ -692,14 +691,14 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/documenttemplatetexheader/children/documenttemplatetypeclassification_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>DocumentTemplateTexFooter</name>
       <dependency>
         <name>dependency</name>
         <entityName>DocumentTemplate_entity</entityName>
         <fieldName>DocumentTemplateProvider</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>DocumentTemplateTexFooter</name>
       <children>
         <entityParameter>
           <name>DocumentTemplateType_param</name>
@@ -710,6 +709,11 @@
           <valueProcess>%aditoprj%/entity/Order_entity/entityfields/documenttemplatetexfooter/children/documenttemplatetypeclassification_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DocumentTemplate_entity</entityName>
+        <fieldName>DocumentTemplateProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>ChosenTexHeader</name>
@@ -797,10 +801,10 @@
       <title>Count</title>
     </entityAggregateField>
     <entityActionField>
-      <name>newOrder</name>
-      <documentation>%aditoprj%/entity/Order_entity/entityfields/neworder/documentation.adoc</documentation>
+      <name>copyOrder</name>
+      <documentation>%aditoprj%/entity/Order_entity/entityfields/copyorder/documentation.adoc</documentation>
       <title>Copy receipt</title>
-      <onActionProcess>%aditoprj%/entity/Order_entity/entityfields/neworder/onActionProcess.js</onActionProcess>
+      <onActionProcess>%aditoprj%/entity/Order_entity/entityfields/copyorder/onActionProcess.js</onActionProcess>
       <iconId>VAADIN:COPY</iconId>
     </entityActionField>
     <entityActionField>
@@ -916,6 +920,19 @@
         </entityActionField>
       </children>
     </entityActionGroup>
+    <entityParameter>
+      <name>SourceOrderId_param</name>
+      <expose v="true" />
+      <description></description>
+    </entityParameter>
+    <entityField>
+      <name>DATE_NEW</name>
+      <contentType>DATE</contentType>
+      <resolution>DAY</resolution>
+    </entityField>
+    <entityField>
+      <name>ACTIVE</name>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -1072,14 +1089,6 @@
           <name>OBJECT_ROWID.value</name>
           <recordfield>SALESORDER.OBJECT_ROWID</recordfield>
         </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>OBJECT_ROWID.displayValue</name>
-          <expression>%aditoprj%/entity/Order_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js</expression>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>OFFER_ID.displayValue</name>
-          <expression>%aditoprj%/entity/Order_entity/recordcontainers/db/recordfieldmappings/offer_id.displayvalue/expression.js</expression>
-        </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>OBJECT_TYPE.value</name>
           <recordfield>SALESORDER.OBJECT_TYPE</recordfield>
@@ -1139,6 +1148,14 @@
           <recordfield>SALESORDER.SALESORDERID</recordfield>
           <aggregateType>COUNT</aggregateType>
         </aggregateFieldDbMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_NEW.value</name>
+          <recordfield>SALESORDER.SALESORDERDATE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ACTIVE.value</name>
+          <expression>%aditoprj%/entity/Order_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js</expression>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
       <filterExtensions>
         <filterExtension>
diff --git a/entity/Order_entity/contentDescriptionProcess.js b/entity/Order_entity/contentDescriptionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..bd351d26e62473bda001b51a8393d3ed4f2cdb19
--- /dev/null
+++ b/entity/Order_entity/contentDescriptionProcess.js
@@ -0,0 +1,19 @@
+import("system.logging");
+import("system.translate");
+import("system.datetime");
+import("system.vars");
+import("system.result");
+import("KeywordRegistry_basic");
+
+var orderstatus = vars.get("$field.ORDERSTATUS") == "1" ? translate.text("Yes"): translate.text("No")
+
+var res = [translate.text("Sent") + ": " + orderstatus, 
+           translate.text("Total gross") + ": " + vars.get("$field.TotalGross.displayValue")]
+
+if(vars.get("$field.PAYDATE"))
+    res.push(translate.text("Pay date") + ": " + datetime.toDate(vars.get("$field.PAYDATE"), translate.text("dd.MM.yyyy")))
+
+
+res.push(translate.text("Creation date") + ": " + datetime.toDate(vars.get("$field.DATE_NEW"), translate.text("dd.MM.yyyy")));
+    
+result.string(res.join(" | "));
\ No newline at end of file
diff --git a/entity/Order_entity/contentTitleProcess.js b/entity/Order_entity/contentTitleProcess.js
index efca7174f4eba418870382ab3a958d1428e7d247..376625c4943175ab2b0f7f9b5da3a2e7c9d66f4f 100644
--- a/entity/Order_entity/contentTitleProcess.js
+++ b/entity/Order_entity/contentTitleProcess.js
@@ -4,4 +4,9 @@ import("system.translate");
 import("system.vars");
 import("system.result");
 
-result.string(KeywordUtils.getViewValue($KeywordRegistry.orderType(), vars.get("$field.ORDERTYPE")) +" - "+ vars.get("$field.SALESORDERCODE"));
+var res = [vars.get("$field.SALESORDERCODE")];
+
+if(vars.get("$field.CANCELLATION") == "1")
+    res.push(translate.text("${ORDER_CANCELLED}"));
+
+result.string(res.join(" | "));
diff --git a/entity/Order_entity/entityfields/neworder/documentation.adoc b/entity/Order_entity/entityfields/copyorder/documentation.adoc
similarity index 100%
rename from entity/Order_entity/entityfields/neworder/documentation.adoc
rename to entity/Order_entity/entityfields/copyorder/documentation.adoc
diff --git a/entity/Order_entity/entityfields/copyorder/onActionProcess.js b/entity/Order_entity/entityfields/copyorder/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..57c33c7f0149a55843b44c007ac0c13ab4645ede
--- /dev/null
+++ b/entity/Order_entity/entityfields/copyorder/onActionProcess.js
@@ -0,0 +1,30 @@
+import("system.vars");
+import("system.neon");
+import("Order_lib");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+
+var orderId = vars.get("$field.SALESORDERID");
+var fieldValues = {
+    contactId: vars.getString("$field.CONTACT_ID"),
+    currency: vars.getString("$field.CURRENCY"),
+    language: vars.getString("$field.ISOLANGUAGE"),
+    header: vars.getString("$field.HEADER"),
+    footer: vars.getString("$field.FOOTER"),
+    offerId: vars.getString("$field.OFFER_ID"),
+    deliveryTerm: vars.getString("$field.DELIVERYTERMS"),
+    paymentTerm: vars.getString("$field.PAYMENTTERMS"),
+    paymentAddress: vars.getString("$field.PAYMENTADDRESS"),
+    deliveryAddress: vars.getString("$field.DELIVERYADDRESS"),
+    objectRowId: vars.getString("$field.OBJECT_ROWID"),
+    objectType: vars.getString("$field.OBJECT_TYPE"),
+    dunningDate: vars.getString("$field.DUNNINGDATE"),
+    dunningLevel: vars.getString("$field.DUNNINGLEVEL"),
+    orderType: vars.getString("$field.ORDERTYPE"),
+    cancellation: vars.getString("$field.CANCELLATION"),
+    orderStatus:vars.getString("$field.ORDERSTATUS")
+};
+
+OrderUtils.copyOrder(orderId, fieldValues);
+    
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/deliveryterms/valueProcess.js b/entity/Order_entity/entityfields/deliveryterms/valueProcess.js
index 8e6fb1be5bc999ff98be26570bbd8ff5d5233ff1..ed78d05852c8a088d333cf55307036313541b3e1 100644
--- a/entity/Order_entity/entityfields/deliveryterms/valueProcess.js
+++ b/entity/Order_entity/entityfields/deliveryterms/valueProcess.js
@@ -9,7 +9,7 @@ import("Contact_lib");
 
 
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null && vars.get("$field.CONTACT_ID"))
 {
     var presetValue = "";
     var contactIds = ContactUtils.getPersOrgIds(vars.getString("$field.CONTACT_ID"));
diff --git a/entity/Order_entity/entityfields/neworder/onActionProcess.js b/entity/Order_entity/entityfields/neworder/onActionProcess.js
deleted file mode 100644
index d73a39e61fe0b77c7736dd936384a78344dd2e9d..0000000000000000000000000000000000000000
--- a/entity/Order_entity/entityfields/neworder/onActionProcess.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import("system.vars");
-import("system.neon");
-import("Order_lib");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
-var contactId = vars.getString("$field.CONTACT_ID");
-var currency = vars.getString("$field.CURRENCY");
-var language = vars.getString("$field.ISOLANGUAGE");
-var header = vars.getString("$field.HEADER");
-var footer = vars.getString("$field.FOOTER");
-var offerId = vars.getString("$field.OFFER_ID");
-var deliveryTerm = vars.getString("$field.DELIVERYTERMS");
-var paymentTerm = vars.getString("$field.PAYMENTTERMS");
-var paymentAddress = vars.getString("$field.PAYMENTADDRESS");
-var deliveryAddress = vars.getString("$field.DELIVERYADDRESS");
-var rowId = vars.getString("$field.OBJECT_ROWID");
-var objectType = vars.getString("$field.OBJECT_TYPE");
-var dunningDate = vars.getString("$field.DUNNINGDATE");
-var dunningLevel = vars.getString("$field.DUNNINGLEVEL");
-var orderType= vars.getString("$field.ORDERTYPE");
-var cancellation= vars.getString("$field.CANCELLATION");
-var orderStatus=vars.getString("$field.ORDERSTATUS");
-
-OrderUtils.copyOrder(offerId, contactId, orderType, language, currency, header, footer, deliveryTerm, paymentTerm, paymentAddress, deliveryAddress, objectType, rowId, dunningDate, dunningLevel, cancellation, orderStatus);
-    
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/object_rowid/displayValueProcess.js b/entity/Order_entity/entityfields/object_rowid/displayValueProcess.js
index 8b080bceea92c146a676b0f33cc7cb87d4e86b9d..95c4eea5367140dc2d81e470ba0607adf52f07c1 100644
--- a/entity/Order_entity/entityfields/object_rowid/displayValueProcess.js
+++ b/entity/Order_entity/entityfields/object_rowid/displayValueProcess.js
@@ -7,5 +7,5 @@ import("Context_lib");
 if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$field.OBJECT_ROWID")) {
     result.string("");
 } else if (vars.exists("$field.OBJECT_TYPE") && vars.get("$field.OBJECT_TYPE")) {
-    result.string(db.cell(ContextUtils.getNameSql(vars.get("$field.OBJECT_TYPE"), vars.get("$field.OBJECT_ROWID"))));
+    result.string(ContextUtils.getTitleByContext(vars.get("$field.OBJECT_TYPE"), vars.get("$field.OBJECT_ROWID")));
 }
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/offers/children/contactid_param/valueProcess.js b/entity/Order_entity/entityfields/offers/children/contactid_param/valueProcess.js
index 7b92c1bb14aa08001b7d5738111337ab7e81f4cc..cf4b6cd38a6154032bc3607894ce054e4754a062 100644
--- a/entity/Order_entity/entityfields/offers/children/contactid_param/valueProcess.js
+++ b/entity/Order_entity/entityfields/offers/children/contactid_param/valueProcess.js
@@ -1,10 +1,4 @@
 import("system.result");
 import("system.vars");
-import("Contact_lib");
 
-if (vars.get("$field.CONTACT_ID"))
-{
-    var ids = ContactUtils.getPersOrgIds(vars.getString("$field.CONTACT_ID"));
-    if (ids.length >= 3 && ids[2])
-        result.string(ids[2]);
-}
\ No newline at end of file
+result.string(vars.get("$field.CONTACT_ID"));
diff --git a/entity/Order_entity/entityfields/orderreportdispatch/children/dispatchorderreport/onActionProcess.js b/entity/Order_entity/entityfields/orderreportdispatch/children/dispatchorderreport/onActionProcess.js
index 44cf00055adb79b0f8a573e12ded26e954c36f73..53225e7adf9f1876a1494a42cda2bf08e726f5b0 100644
--- a/entity/Order_entity/entityfields/orderreportdispatch/children/dispatchorderreport/onActionProcess.js
+++ b/entity/Order_entity/entityfields/orderreportdispatch/children/dispatchorderreport/onActionProcess.js
@@ -8,7 +8,7 @@ import("Sql_lib");
 
 var orderReport = {};
 var attachmentArray = [];
-var updateStatements = [["SALESORDER", ["ORDERSTATUS"], db.getColumnTypes("SALESORDER", ["ORDERSTATUS"]), ["1"], newWhere("SALESORDER.SALESORDERID", vars.get("$field.SALESORDERID")).build()]];
+var updateStatements = [["SALESORDER", ["ORDERSTATUS"], null, ["1"], newWhere("SALESORDER.SALESORDERID", vars.get("$field.SALESORDERID")).build()]];
 var notificationMsg = translate.text("The status of the order was changed to \"sent\".");
 var contactId = vars.get("$field.CONTACT_ID");
 var orgContactId = vars.get("$field.CONTACT_ORG_ID");
diff --git a/entity/Order_entity/entityfields/paymentterms/valueProcess.js b/entity/Order_entity/entityfields/paymentterms/valueProcess.js
index 7501b966d14bf76fa1fc2ded5b655a8f0e3e9129..8cf77fdb2b60bc5b819d97a770b3b3c3e8cd8199 100644
--- a/entity/Order_entity/entityfields/paymentterms/valueProcess.js
+++ b/entity/Order_entity/entityfields/paymentterms/valueProcess.js
@@ -7,23 +7,23 @@ import("system.result");
 import("system.vars");
 import("Attribute_lib");
 
-if (vars.get("$this.value") == null) {
-    if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null && vars.get("$field.CONTACT_ID"))
+{
+    var presetValue = "";
+    var contactIds = ContactUtils.getPersOrgIds(vars.getString("$field.CONTACT_ID"));
+    if (contactIds.length >= 3 && contactIds[2])
     {
-        var presetValue = "";
-        var contactIds = ContactUtils.getPersOrgIds(vars.getString("$field.CONTACT_ID"));
-        if (contactIds.length >= 3 && contactIds[2])
-        {
-            var orgContactId = ContactUtils.getOrgContactId(contactIds[2]);
-            if (orgContactId)
-            { 
-                presetValue = new AttributeRelationQuery(orgContactId, $AttributeRegistry.paymentTerm()).getSingleAttributeValue();
-            }
+        var orgContactId = ContactUtils.getOrgContactId(contactIds[2]);
+        if (orgContactId)
+        { 
+            presetValue = new AttributeRelationQuery(orgContactId, $AttributeRegistry.paymentTerm()).getSingleAttributeValue();
         }
-
-        if (presetValue)
-            result.string(presetValue);
-        else
-            result.string(KeywordUtils.getFirst($KeywordRegistry.paymentTerm()));
     }
+
+    if (presetValue)
+        result.string(presetValue);
+    else
+        result.string(KeywordUtils.getFirst($KeywordRegistry.paymentTerm()));
 }
+
diff --git a/entity/Order_entity/recordcontainers/db/conditionProcess.js b/entity/Order_entity/recordcontainers/db/conditionProcess.js
index d799cf12382ac030ddeeb35b7e61e891c2a07f6e..572d8249ded4490fb35322640e28b49764831b3f 100644
--- a/entity/Order_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Order_entity/recordcontainers/db/conditionProcess.js
@@ -11,5 +11,4 @@ else {
     cond.andIfSet("SALESORDER.OBJECT_ROWID", "$param.ObjectRowId_param")
         .andIfSet("SALESORDER.OBJECT_TYPE", "$param.ObjectType_param");
 }
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Order_entity/recordcontainers/db/onDBInsert.js b/entity/Order_entity/recordcontainers/db/onDBInsert.js
index 8e0f20e8575328e3bb330498cf028d3c9a7ee08c..bd3c2bb14b920b17de3b9bfba245f260f445b66d 100644
--- a/entity/Order_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/Order_entity/recordcontainers/db/onDBInsert.js
@@ -4,7 +4,11 @@ import("system.neon");
 import("system.vars");
 
 //@TODO: OfferId_param is also set by 'copy order' -> the items of the offer are copied. What should happen?
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.OfferId_param"))
-    OrderUtils.copyOfferItemsToOrder(vars.getString("$param.OfferId_param"), vars.get("$local.rowdata")["SALESORDER.SALESORDERID"]);
-
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+{
+    if (vars.exists("$param.OfferId_param") && vars.get("$param.OfferId_param"))
+        OrderUtils.copyOfferItemsToOrder(vars.get("$param.OfferId_param"), vars.get("$local.uid"));
+    if (vars.exists("$param.SourceOrderId_param") && vars.get("$param.SourceOrderId_param"))
+        OrderUtils.copyOrderItems(vars.get("$param.SourceOrderId_param"), vars.get("$local.uid"));
+}
 WorkflowSignalSender.inserted();
\ No newline at end of file
diff --git a/entity/Order_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js b/entity/Order_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..b6235593124a2fa09d7432f19455a4dc4cc42dda
--- /dev/null
+++ b/entity/Order_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js
@@ -0,0 +1,6 @@
+import("Context_lib");
+import("system.result");
+import("KeywordRegistry_basic");
+
+var activArr = [0, 1];
+result.string(ContextUtils.buildActiveCaseWhen(activArr, "SALESORDER.ORDERSTATUS"));
\ No newline at end of file
diff --git a/entity/Order_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js b/entity/Order_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js
deleted file mode 100644
index bbe883a82964ab9693ce6c4fca792a9c27e01363..0000000000000000000000000000000000000000
--- a/entity/Order_entity/recordcontainers/db/recordfieldmappings/object_rowid.displayvalue/expression.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.result");
-import("Context_lib");
-
-result.string(ContextUtils.getNameSubselectSql("SALESORDER.OBJECT_TYPE", "SALESORDER.OBJECT_ROWID"))
\ No newline at end of file
diff --git a/entity/Order_entity/recordcontainers/db/recordfieldmappings/offer_id.displayvalue/expression.js b/entity/Order_entity/recordcontainers/db/recordfieldmappings/offer_id.displayvalue/expression.js
deleted file mode 100644
index a86ac585f271d61227c89ec425d97d7c43e2a73d..0000000000000000000000000000000000000000
--- a/entity/Order_entity/recordcontainers/db/recordfieldmappings/offer_id.displayvalue/expression.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.result");
-import("Context_lib");
-
-result.string(ContextUtils.getNameSubselectSql("'Offer'", "SALESORDER.OFFER_ID"));
\ No newline at end of file
diff --git a/entity/Order_entity/recordcontainers/index/query.js b/entity/Order_entity/recordcontainers/index/query.js
index 75ed9d1999b1e1b53073b2c6f99a368fb69cb874..74db3c61d092e8fc771d678ec24bbccd860ca727 100644
--- a/entity/Order_entity/recordcontainers/index/query.js
+++ b/entity/Order_entity/recordcontainers/index/query.js
@@ -8,8 +8,8 @@ import("KeywordRegistry_basic");
 var sqlHelper = new SqlMaskingUtils();
 var querySelect = newSelect([
         "SALESORDERID", //#UID
-        sqlHelper.concat([sqlHelper.cast("SALESORDERCODE", SQLTYPES.CHAR, 10)], " | "), //#TITLE
-        sqlHelper.concat(["ORGANISATION.NAME"], " | "), //#DESCRIPTION
+        sqlHelper.concatWithSeparator([sqlHelper.cast("SALESORDERCODE", SQLTYPES.CHAR, 10)], " | "), //#TITLE
+        sqlHelper.concatWithSeparator(["ORGANISATION.NAME"], " | "), //#DESCRIPTION
         "SALESORDERCODE",
         "SALESORDER.CONTACT_ID",
         "CONTACT.ORGANISATION_ID", //as CONTACT_ORG_ID
diff --git a/entity/Orderitem_entity/Orderitem_entity.aod b/entity/Orderitem_entity/Orderitem_entity.aod
index 888a453225876d3097dfbf65f250e8a3576e83b5..1f80cb9b60958fc24d08fd0d68b3b04b2ff95c97 100644
--- a/entity/Orderitem_entity/Orderitem_entity.aod
+++ b/entity/Orderitem_entity/Orderitem_entity.aod
@@ -144,20 +144,6 @@
     <entityProvider>
       <name>Orderitems</name>
       <recordContainer>db</recordContainer>
-      <dependencies>
-        <entityDependency>
-          <name>7810e350-d011-4d95-8d0b-883f3a0e519c</name>
-          <entityName>Order_entity</entityName>
-          <fieldName>Orderitems</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-        <entityDependency>
-          <name>911de4a4-0e85-4d50-93ee-6f8f2308589e</name>
-          <entityName>Order_entity</entityName>
-          <fieldName>Orderitems</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -180,6 +166,20 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>7810e350-d011-4d95-8d0b-883f3a0e519c</name>
+          <entityName>Order_entity</entityName>
+          <fieldName>Orderitems</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>911de4a4-0e85-4d50-93ee-6f8f2308589e</name>
+          <entityName>Order_entity</entityName>
+          <fieldName>Orderitems</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityField>
       <name>INFO</name>
@@ -188,11 +188,6 @@
     </entityField>
     <entityConsumer>
       <name>KeywordProductGroupcodes</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -200,14 +195,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordQuantityUnits</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordQuantityUnits</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -215,6 +210,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Products</name>
diff --git a/entity/Orderitem_entity/recordcontainers/db/conditionProcess.js b/entity/Orderitem_entity/recordcontainers/db/conditionProcess.js
index 5957207757012e79cce2cff0ed3316c780d85fec..6794f43bc98a7ee4099be70e2d1ce4215cccab26 100644
--- a/entity/Orderitem_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Orderitem_entity/recordcontainers/db/conditionProcess.js
@@ -5,5 +5,4 @@ import("system.vars");
 
 var cond = newWhereIfSet("SALESORDERITEM.SALESORDER_ID", "$param.OrderId_param")
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod
index 4d5db6ed1a8789383791d9793b7c5791ae8f30a6..076fe1f6213c28183ea068723d42855cd05d09c4 100644
--- a/entity/Organisation_entity/Organisation_entity.aod
+++ b/entity/Organisation_entity/Organisation_entity.aod
@@ -7,6 +7,7 @@
   <title>Company</title>
   <grantDeleteProcess>%aditoprj%/entity/Organisation_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/Organisation_entity/contentTitleProcess.js</contentTitleProcess>
+  <contentDescriptionProcess>%aditoprj%/entity/Organisation_entity/contentDescriptionProcess.js</contentDescriptionProcess>
   <afterUiInit>%aditoprj%/entity/Organisation_entity/afterUiInit.js</afterUiInit>
   <initFilterProcess>%aditoprj%/entity/Organisation_entity/initFilterProcess.js</initFilterProcess>
   <useFavorites v="true" />
@@ -71,11 +72,6 @@
     </entityField>
     <entityConsumer>
       <name>Activities</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Activity_entity</entityName>
-        <fieldName>LinkedObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>RowId_param</name>
@@ -86,21 +82,26 @@
           <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/activities/children/objectid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Activity_entity</entityName>
+        <fieldName>LinkedObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Contact</name>
       <selectionMode>MULTI</selectionMode>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Person_entity</entityName>
-        <fieldName>OrganisationRelated</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>OrgId_param</name>
           <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/contact/children/orgid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Person_entity</entityName>
+        <fieldName>OrganisationRelated</fieldName>
+      </dependency>
     </entityConsumer>
     <entityFieldGroup>
       <name>CUSTOMERCODE_DISPLAY_fieldGroup</name>
@@ -114,6 +115,36 @@
       <name>Organisations</name>
       <documentation>%aditoprj%/entity/Organisation_entity/entityfields/organisations/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
+      <children>
+        <entityParameter>
+          <name>WithPrivate_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>ExcludeOrganisationsByPersonId</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>ExcludedContactIds_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>AttributeKeyId_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>AttributeId_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>DuplicateActionsControl_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>DuplicateCurrentContactId_param</name>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>85aa363e-d8ba-4df5-8422-bf7aff86a4f8</name>
@@ -152,44 +183,9 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>WithPrivate_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>ExcludeOrganisationsByPersonId</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>ExcludedContactIds_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>AttributeKeyId_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>AttributeId_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>DuplicateActionsControl_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>DuplicateCurrentContactId_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityConsumer>
       <name>Addresses</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Address_entity</entityName>
-        <fieldName>OrganisationAddresses</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>DefaultAddressId_param</name>
@@ -201,6 +197,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Address_entity</entityName>
+        <fieldName>OrganisationAddresses</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>ADDRESS_ID</name>
@@ -211,11 +212,6 @@
     </entityField>
     <entityConsumer>
       <name>Communications</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Communication_entity</entityName>
-        <fieldName>AllCommunications</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -227,15 +223,15 @@
           <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Communication_entity</entityName>
+        <fieldName>AllCommunications</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Contracts</name>
       <selectionMode>MULTI</selectionMode>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Contract_entity</entityName>
-        <fieldName>Contracts</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -244,14 +240,14 @@
           <mandatory v="true" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Productprices</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Productprice_entity</entityName>
-        <fieldName>Productprices</fieldName>
+        <entityName>Contract_entity</entityName>
+        <fieldName>Contracts</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Productprices</name>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -260,10 +256,14 @@
           <mandatory v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Productprice_entity</entityName>
+        <fieldName>Productprices</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER</name>
-      <sortingField>NAME</sortingField>
       <dependencies>
         <entityDependency>
           <name>1a472ca0-4d27-453c-8de5-a046b86f22fb</name>
@@ -300,11 +300,6 @@
     <entityConsumer>
       <name>Documents</name>
       <selectionMode>MULTI</selectionMode>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>Documents</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -315,6 +310,11 @@
           <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>Documents</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>STANDARD_EMAIL_COMMUNICATION</name>
@@ -330,11 +330,6 @@
     </entityField>
     <entityConsumer>
       <name>PhoneCommunications</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Communication_entity</entityName>
-        <fieldName>PhoneCommunications</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -342,14 +337,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>EmailCommunications</name>
       <dependency>
         <name>dependency</name>
         <entityName>Communication_entity</entityName>
-        <fieldName>EmailCommunications</fieldName>
+        <fieldName>PhoneCommunications</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>EmailCommunications</name>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -357,6 +352,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Communication_entity</entityName>
+        <fieldName>EmailCommunications</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Countries</name>
@@ -369,11 +369,6 @@
     <entityConsumer>
       <name>Attributes</name>
       <onValidation>%aditoprj%/entity/Organisation_entity/entityfields/attributes/onValidation.js</onValidation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>AttributeRelations</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -385,14 +380,14 @@
           <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/attributes/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordContactStates</name>
       <dependency>
         <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>AttributeRelations</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordContactStates</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -400,14 +395,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordOrganisationTypes</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordOrganisationTypes</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -415,6 +410,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Languages</name>
@@ -426,11 +426,6 @@
     </entityConsumer>
     <entityConsumer>
       <name>KeywordPricePolitics</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -438,14 +433,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordWeaknesses</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordWeaknesses</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -453,14 +448,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordStrenghts</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordStrenghts</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -468,14 +463,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Salesprojects</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Salesproject_entity</entityName>
-        <fieldName>Salesprojects</fieldName>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Salesprojects</name>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -484,14 +479,14 @@
           <mandatory v="true" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Offers</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Offer_entity</entityName>
-        <fieldName>ContactOffers</fieldName>
+        <entityName>Salesproject_entity</entityName>
+        <fieldName>Salesprojects</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Offers</name>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -500,14 +495,14 @@
           <mandatory v="true" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Tasks</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Task_entity</entityName>
-        <fieldName>Tasks</fieldName>
+        <entityName>Offer_entity</entityName>
+        <fieldName>ContactOffers</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Tasks</name>
       <children>
         <entityParameter>
           <name>RowId_param</name>
@@ -518,6 +513,11 @@
           <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/tasks/children/objectid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Task_entity</entityName>
+        <fieldName>Tasks</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>WithPrivate_param</name>
@@ -528,11 +528,6 @@
     </entityParameter>
     <entityConsumer>
       <name>ObjectTrees</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>ObjectTree_entity</entityName>
-        <fieldName>TreeProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectIds_param</name>
@@ -543,14 +538,14 @@
           <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/objecttrees/children/objecttypes_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>LogHistories</name>
       <dependency>
         <name>dependency</name>
-        <entityName>LogHistory_entity</entityName>
-        <fieldName>LogHistoryProvider</fieldName>
+        <entityName>ObjectTree_entity</entityName>
+        <fieldName>TreeProvider</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>LogHistories</name>
       <children>
         <entityParameter>
           <name>tablenames_param</name>
@@ -559,14 +554,14 @@
           <mandatory v="true" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>360DegreeObjects</name>
       <dependency>
         <name>dependency</name>
-        <entityName>360Degree_entity</entityName>
-        <fieldName>OrganisationObjects</fieldName>
+        <entityName>LogHistory_entity</entityName>
+        <fieldName>LogHistoryProvider</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>360DegreeObjects</name>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -577,6 +572,11 @@
           <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/360degreeobjects/children/objectstatus_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>360Degree_entity</entityName>
+        <fieldName>OrganisationObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ExcludeOrganisationsByPersonId</name>
@@ -587,26 +587,6 @@
     <entityProvider>
       <name>WithPersonIdFilter</name>
       <documentation>%aditoprj%/entity/Organisation_entity/entityfields/withpersonidfilter/documentation.adoc</documentation>
-      <dependencies>
-        <entityDependency>
-          <name>5a456b04-f0ca-4a45-9c1f-bdfdf074434a</name>
-          <entityName>Contact_entity</entityName>
-          <fieldName>Organisations</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-        <entityDependency>
-          <name>a80c3db0-29db-433c-8f7c-4ebf6639ad6d</name>
-          <entityName>Person_entity</entityName>
-          <fieldName>Organisations</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-        <entityDependency>
-          <name>748a3083-89c2-41b4-a233-3fd5364396e9</name>
-          <entityName>Competition_entity</entityName>
-          <fieldName>Organisation</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ExcludeOrganisationsByPersonId</name>
@@ -639,6 +619,26 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>5a456b04-f0ca-4a45-9c1f-bdfdf074434a</name>
+          <entityName>Contact_entity</entityName>
+          <fieldName>Organisations</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>a80c3db0-29db-433c-8f7c-4ebf6639ad6d</name>
+          <entityName>Person_entity</entityName>
+          <fieldName>Organisations</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>748a3083-89c2-41b4-a233-3fd5364396e9</name>
+          <entityName>Competition_entity</entityName>
+          <fieldName>Organisation</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityParameter>
       <name>AttributeId_param</name>
@@ -653,20 +653,6 @@
     <entityProvider>
       <name>WithAttribute</name>
       <documentation>%aditoprj%/entity/Organisation_entity/entityfields/withattribute/documentation.adoc</documentation>
-      <dependencies>
-        <entityDependency>
-          <name>10480df2-f0b6-4cb6-8bfb-4a468b994996</name>
-          <entityName>Competition_entity</entityName>
-          <fieldName>Organisations</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-        <entityDependency>
-          <name>f368be61-1a15-449f-b37c-b1343069412c</name>
-          <entityName>Product_entity</entityName>
-          <fieldName>Organisations</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>AttributeId_param</name>
@@ -698,6 +684,20 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>10480df2-f0b6-4cb6-8bfb-4a468b994996</name>
+          <entityName>Competition_entity</entityName>
+          <fieldName>Organisations</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>f368be61-1a15-449f-b37c-b1343069412c</name>
+          <entityName>Product_entity</entityName>
+          <fieldName>Organisations</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityParameter>
       <name>ExcludedContactIds_param</name>
@@ -706,11 +706,6 @@
     </entityParameter>
     <entityConsumer>
       <name>AttributeTree</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>TreeProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -721,6 +716,11 @@
           <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/attributetree/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>TreeProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>DATE_NEW</name>
@@ -772,11 +772,6 @@
     <entityConsumer>
       <name>AttributeConditions</name>
       <onValidation>%aditoprj%/entity/Organisation_entity/entityfields/attributeconditions/onValidation.js</onValidation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>AttributeRelations</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -799,20 +794,29 @@
           <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/attributeconditions/children/showempty_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>LinkedAppointments</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Appointment_entity</entityName>
-        <fieldName>LinkedAppointments</fieldName>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>AttributeRelations</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>LinkedAppointments</name>
       <children>
         <entityParameter>
           <name>LinkedObjectId_param</name>
           <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/linkedappointments/children/linkedobjectid_param/valueProcess.js</valueProcess>
         </entityParameter>
+        <entityParameter>
+          <name>ErrorOnPermissionDenied</name>
+          <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/linkedappointments/children/erroronpermissiondenied/valueProcess.js</valueProcess>
+        </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Appointment_entity</entityName>
+        <fieldName>LinkedAppointments</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Products</name>
@@ -955,6 +959,13 @@
           <tooltip>Export fields of this table</tooltip>
           <tooltipProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/export/tooltipProcess.js</tooltipProcess>
         </entityActionField>
+        <entityActionField>
+          <name>startMarketingWorkflows</name>
+          <title>Start marketing mailing</title>
+          <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/startmarketingworkflows/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+          <iconId>VAADIN:ENVELOPES</iconId>
+        </entityActionField>
       </children>
     </entityActionGroup>
     <entityActionField>
@@ -1043,6 +1054,8 @@
           <name>IntegrateSelectedIntoCurrentAction</name>
           <title>Integrate selected into current contact</title>
           <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js</onActionProcess>
+          <isMenuAction v="true" />
+          <isObjectAction v="false" />
           <isSelectionAction v="true" />
           <iconId>NEON:IMPORT</iconId>
           <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js</stateProcess>
@@ -1051,6 +1064,8 @@
           <name>IntegrateCurrentIntoSelectedAction</name>
           <title>Integrate current into selected contact</title>
           <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js</onActionProcess>
+          <isMenuAction v="true" />
+          <isObjectAction v="false" />
           <isSelectionAction v="true" />
           <iconId>NEON:EXPORT</iconId>
           <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js</stateProcess>
@@ -1059,6 +1074,8 @@
           <name>IgnoreDuplicate</name>
           <title>Ignore Duplicate</title>
           <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js</onActionProcess>
+          <isMenuAction v="true" />
+          <isObjectAction v="false" />
           <isSelectionAction v="true" />
           <iconId>VAADIN:CLOSE</iconId>
           <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js</stateProcess>
@@ -1067,6 +1084,7 @@
           <name>IgnoreWholeCluster</name>
           <title>Ignore whole Cluster</title>
           <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
           <iconId>VAADIN:CLOSE</iconId>
           <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js</stateProcess>
         </entityActionField>
@@ -1083,11 +1101,6 @@
     </entityParameter>
     <entityConsumer>
       <name>SelfDuplicatesUncached</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Organisation_entity</entityName>
-        <fieldName>SelfDuplicates</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>DuplicateActionsControl_param</name>
@@ -1107,20 +1120,25 @@
           <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>CommRestrictions</name>
       <dependency>
         <name>dependency</name>
-        <entityName>CommRestriction_Entity</entityName>
-        <fieldName>CommRestrictions</fieldName>
+        <entityName>Organisation_entity</entityName>
+        <fieldName>SelfDuplicates</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>CommRestrictions</name>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/commrestrictions/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>CommRestriction_Entity</entityName>
+        <fieldName>CommRestrictions</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>COMMRESTRICTIONS_ACTIVE</name>
@@ -1175,11 +1193,6 @@
     <entityConsumer>
       <name>Classifications</name>
       <refreshParent v="true" />
-      <dependency>
-        <name>dependency</name>
-        <entityName>Classification_entity</entityName>
-        <fieldName>Classifications</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ClassificationType_param</name>
@@ -1197,6 +1210,11 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Classification_entity</entityName>
+        <fieldName>Classifications</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>COUNT</name>
@@ -1217,14 +1235,6 @@
       <name>OrganisationsViaIndex</name>
       <documentation>%aditoprj%/entity/Organisation_entity/entityfields/organisationsviaindex/documentation.adoc</documentation>
       <recordContainer>index</recordContainer>
-      <dependencies>
-        <entityDependency>
-          <name>e60b8983-166d-4280-a1a5-f990ad77eeb9</name>
-          <entityName>AroundLocation_entity</entityName>
-          <fieldName>Organisations</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ExcludeOrganisationsByPersonId</name>
@@ -1267,6 +1277,14 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>e60b8983-166d-4280-a1a5-f990ad77eeb9</name>
+          <entityName>AroundLocation_entity</entityName>
+          <fieldName>Organisations</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityActionField>
       <name>openAroundLocation</name>
@@ -1337,17 +1355,17 @@
     </entityProvider>
     <entityConsumer>
       <name>DistrictResponsibles</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DistrictResponsible_entity</entityName>
-        <fieldName>OrganisationResponsibles</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>OrgUid_param</name>
           <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/districtresponsibles/children/orguid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DistrictResponsible_entity</entityName>
+        <fieldName>OrganisationResponsibles</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>FilterPreSet_param</name>
@@ -1356,14 +1374,6 @@
     <entityProvider>
       <name>NonselfDuplicates</name>
       <documentation>%aditoprj%/entity/Organisation_entity/entityfields/nonselfduplicates/documentation.adoc</documentation>
-      <dependencies>
-        <entityDependency>
-          <name>2e410b9e-5ebc-48ea-9562-da386202d7e8</name>
-          <entityName>Duplicates_entity</entityName>
-          <fieldName>DuplicateOrganisationsConsumer</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>AttributeKeyId_param</name>
@@ -1386,6 +1396,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>2e410b9e-5ebc-48ea-9562-da386202d7e8</name>
+          <entityName>Duplicates_entity</entityName>
+          <fieldName>DuplicateOrganisationsConsumer</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityActionGroup>
       <name>orgReportDispatch</name>
@@ -1402,11 +1420,6 @@
     </entityActionGroup>
     <entityConsumer>
       <name>AttributesFilter</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>FilterProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -1417,6 +1430,11 @@
           <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/attributesfilter/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>FilterProvider</fieldName>
+      </dependency>
     </entityConsumer>
   </entityFields>
   <recordContainers>
@@ -1658,6 +1676,8 @@
           <filterFieldsProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js</filterFieldsProcess>
           <filterValuesProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js</filterValuesProcess>
           <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js</filterConditionProcess>
+          <isGroupable v="true" />
+          <groupQueryProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/attribute_filter/groupQueryProcess.js</groupQueryProcess>
           <filtertype>BASIC</filtertype>
         </filterExtensionSet>
         <filterExtensionSet>
diff --git a/entity/Organisation_entity/contentDescriptionProcess.js b/entity/Organisation_entity/contentDescriptionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b07a72fe7cc543e3bedc5d5604f12f28769ffb6b
--- /dev/null
+++ b/entity/Organisation_entity/contentDescriptionProcess.js
@@ -0,0 +1,5 @@
+import("system.translate");
+import("system.datetime");
+import("system.vars");
+import("system.result");
+result.string(datetime.toDate(vars.get("$field.DATE_NEW"), translate.text("dd.MM.yyyy")));
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js b/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js
index 1f3a9e3ddfca04ca5911fd70b734115ff1f60291..6bb5f4cde7193d3a4171b6d613cbfb0bfee097c8 100644
--- a/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js
+++ b/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js
@@ -16,5 +16,8 @@ if(mergeSuccess)
     if(currentContactId == null)
         currentContactId = "";
     DuplicateScannerUtils.createMergeSuccessActivity(sourceContactId, targetContactId, currentContactId, "Organisation");
-    neon.refreshAll();
+    //neon.refresh() with no fields will refresh the current image (and all sub images) but NOT the preview. neon.refreshAll() would refresh both,
+    //why it would lead to an error because it's trying to load the already opened preview of the duplicateContact which just got deleted 
+    //and does not exist any more which results in an exception
+    neon.refresh();
 }
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/filterviewactiongroup/children/startmarketingworkflows/onActionProcess.js b/entity/Organisation_entity/entityfields/filterviewactiongroup/children/startmarketingworkflows/onActionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2b04867cc90fd72a300747605800b32664d4b5b4
--- /dev/null
+++ b/entity/Organisation_entity/entityfields/filterviewactiongroup/children/startmarketingworkflows/onActionProcess.js
@@ -0,0 +1,9 @@
+import("Context_lib");
+import("system.vars");
+import("system.neon");
+
+neon.openContext("MarketingWorkflowLauncher", "MarketingWorkflowLauncherEdit_view", null, neon.OPERATINGSTATE_VIEW, {
+    "ObjectIds_param": JSON.stringify(vars.get("$sys.selection")),
+    "ObjectFilter_param": JSON.stringify(vars.get("$sys.filter")),
+    "ObjectType_param": ContextUtils.getCurrentContextId()
+});
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/linkedappointments/children/erroronpermissiondenied/valueProcess.js b/entity/Organisation_entity/entityfields/linkedappointments/children/erroronpermissiondenied/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..15b1f8d0322593145f40d707c61dfdfd9babf0fe
--- /dev/null
+++ b/entity/Organisation_entity/entityfields/linkedappointments/children/erroronpermissiondenied/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("false");
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/conditionProcess.js b/entity/Organisation_entity/recordcontainers/db/conditionProcess.js
index 7ef4fdefa4f6e4dcb25f9b97086b5a1e943e0dda..a38a50972c05d3a71887d352e767a4413d5398bb 100644
--- a/entity/Organisation_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Organisation_entity/recordcontainers/db/conditionProcess.js
@@ -55,5 +55,4 @@ if (vars.exists("$param.OnlyOwnSupervised_param") && vars.get("$param.OnlyOwnSup
         SqlBuilder.EXISTS()
     );
 }
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/attribute_filter/groupQueryProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/attribute_filter/groupQueryProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..03fd2fb9213fbcb64981815207d65e37e1c00e3e
--- /dev/null
+++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/attribute_filter/groupQueryProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var sqlCond = AttributeFilterExtensionMaker.makeFilterGroupQuery("ORGANISATION \n\
+    join CONTACT on (ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID and CONTACT.PERSON_ID is null)\n\
+    left join ADDRESS on (ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID)\n\
+    left join CLASSIFICATIONSTORAGE on (CLASSIFICATIONSTORAGE.OBJECT_ROWID = CONTACT.CONTACTID)");
+result.string(sqlCond);
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/groupQueryProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/groupQueryProcess.js
index 768e6ca7501cdd94caba44242bd5d9f1b3c76859..aad0c1782f7ca0b380aa12d11d4855978b9d3648 100644
--- a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/groupQueryProcess.js
+++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/groupQueryProcess.js
@@ -13,7 +13,8 @@ var name = vars.get("$local.name");
 var stmt = newSelect(isCount ? groupedColumns : columns)
     .from("ORGANISATION")
     .join("CONTACT", "ORGANISATIONID = ORGANISATION_ID  and PERSON_ID is null")
-    .leftJoin("CLASSIFICATIONSTORAGE", "CLASSIFICATIONSTORAGE.OBJECT_ROWID = CONTACT.CONTACTID and OBJECT_TYPE = 'Organisation'")
+    .leftJoin("CLASSIFICATIONSTORAGE", newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID = CONTACT.CONTACTID")
+        .and("CLASSIFICATIONSTORAGE.OBJECT_TYPE", "Organisation"))
 
 if (condition)
 {
diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js
index ccf8f498ce2171f22150fbf2c26e89f495ba169b..a4e9edc5b2c7f90da86619beb5d4d968bb0a392b 100644
--- a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js
+++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js
@@ -11,15 +11,18 @@ var groupedColumns = vars.get("$local.groupedlist") // The coloumns, used for gr
 var order = vars.get("$local.order");               // The order of the result
 var classificationId = vars.get("$local.name");
 classificationId = classificationId.slice(classificationId.lastIndexOf(".") + 1, classificationId.length);
-var valuefield = "''"
-var stmt = "";
 
-stmt = newSelect(isCount ? "1" : columns)
+var sql = newSelect(isCount ? "1" : columns)
                     .from("ORGANISATION")
                     .join("CONTACT", "ORGANISATIONID = ORGANISATION_ID  and PERSON_ID is null")
-                    .leftJoin("CLASSIFICATION", "CLASSIFICATION.OBJECT_ROWID = CONTACT.CONTACTID and OBJECT_TYPE = 'Organisation' and CLASSIFICATION.CLASSIFICATIONTYPE_ID = '" + classificationId + "' ")
-                    .leftJoin("CLASSIFICATIONSCORE", "CLASSIFICATIONSCOREID = CLASSIFICATION.CLASSIFICATIONSCORE_ID " +  (condition != "  " ? " WHERE " + condition : ""))
-                    .groupBy(groupedColumns + (order != null && !isCount ? " ORDER BY " + order : ""))
-                    .toString();
+                    .leftJoin("CLASSIFICATION", newWhere("CLASSIFICATION.OBJECT_ROWID = CONTACT.CONTACTID")
+                        .and("CLASSIFICATION.OBJECT_TYPE", "Organisation")
+                        .and("CLASSIFICATION.CLASSIFICATIONTYPE_ID", classificationId))
+                    .leftJoin("CLASSIFICATIONSCORE", "CLASSIFICATIONSCOREID = CLASSIFICATION.CLASSIFICATIONSCORE_ID")
+                    .whereIfSet(condition.trim())
+                    .groupBy(groupedColumns);
 
-result.string(stmt);
\ No newline at end of file
+if (order != null && !isCount)
+    sql.orderBy(order);
+
+result.string(sql.toString());
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/db/onDBInsert.js b/entity/Organisation_entity/recordcontainers/db/onDBInsert.js
index 434601a60b8df854ee2910909a9c22d187266dd9..87c54eb133ade2f232b31f1ef23e47e3053e1f7f 100644
--- a/entity/Organisation_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/Organisation_entity/recordcontainers/db/onDBInsert.js
@@ -1,13 +1,9 @@
 import("system.vars");
-import("Classification_lib");
 import("Workflow_lib");
 
-
 var uid = vars.get("$sys.uid");
 var contextname = vars.get("$sys.currentcontextname");
 
-ClassificationUtils.insertEmptyClassification(uid, contextname);
-
 //start the execution in afterOperatingState, because here the dataset is not yet inserted
 vars.set("$context.workflowQueue", {});
 WorkflowSignalSender.inserted();
\ No newline at end of file
diff --git a/entity/Organisation_entity/recordcontainers/index/query.js b/entity/Organisation_entity/recordcontainers/index/query.js
index 2d434dc250ffc55f3a17d7dfc6994f29dc86f083..e26250598edb296c39f96f355d82fae6f096a7df 100644
--- a/entity/Organisation_entity/recordcontainers/index/query.js
+++ b/entity/Organisation_entity/recordcontainers/index/query.js
@@ -20,14 +20,14 @@ var commMediumMailIds = CommUtil.getMediumIdsByCategory("EMAIL");
 var sqlHelper = new SqlMaskingUtils();
 var querySelect = newSelect([
         "CONTACT.CONTACTID",
-        sqlHelper.concat(["ORGANISATION.NAME", "'|'", "ORGANISATION.CUSTOMERCODE"]),
-        sqlHelper.concat([
-            sqlHelper.concat(["standardAddress.ADDRESS", "standardAddress.BUILDINGNO", "'-'"
+        sqlHelper.concatWithSeparator(["ORGANISATION.NAME", "'|'", "ORGANISATION.CUSTOMERCODE"]),
+        sqlHelper.concatWithSeparator([
+            sqlHelper.concatWithSeparator(["standardAddress.ADDRESS", "standardAddress.BUILDINGNO", "'-'"
                 ,"standardAddress.COUNTRY", "standardAddress.ZIP", "standardAddress.CITY"]),
-            sqlHelper.concat(["'" + translate.text("Phone") + ":'", "(" + CommUtil.getStandardSubSqlPhone() + ")"]),
-            sqlHelper.concat(["'" + translate.text("Email") + ":'", "(" + CommUtil.getStandardSubSqlMail() + ")"])
+            sqlHelper.concatWithSeparator(["'" + translate.text("Phone") + ":'", "(" + CommUtil.getStandardSubSqlPhone() + ")"]),
+            sqlHelper.concatWithSeparator(["'" + translate.text("Email") + ":'", "(" + CommUtil.getStandardSubSqlMail() + ")"])
         ], " | "),
-        sqlHelper.concat([sqlHelper.cast("standardAddress.LAT", SQLTYPES.VARCHAR, 16), sqlHelper.cast("standardAddress.LON", SQLTYPES.VARCHAR, 16)], ","),
+        sqlHelper.concatWithSeparator([sqlHelper.cast("standardAddress.LAT", SQLTYPES.VARCHAR, 16), sqlHelper.cast("standardAddress.LON", SQLTYPES.VARCHAR, 16)], ","),
         //additional indexed fields
         "ORGANISATION.NAME",
         sqlHelper.trim("ORGANISATION.ORGANISATIONID"),//trim to enable filter patterns like: >> -organisationid_value:0<<
@@ -39,8 +39,8 @@ var querySelect = newSelect([
         "ADDRESS.CITY",
         "standardEmail.ADDR",
         "standardPhone.ADDR",
-        sqlHelper.concat([sqlHelper.concat(["standardAddress.ADDRESS", "standardAddress.BUILDINGNO"])
-            ,sqlHelper.concat(["standardAddress.COUNTRY", "standardAddress.ZIP", "standardAddress.CITY"])
+        sqlHelper.concatWithSeparator([sqlHelper.concatWithSeparator(["standardAddress.ADDRESS", "standardAddress.BUILDINGNO"])
+            ,sqlHelper.concatWithSeparator(["standardAddress.COUNTRY", "standardAddress.ZIP", "standardAddress.CITY"])
         ], " - ")
     ])
     .from("ORGANISATION")
diff --git a/entity/PermissionCalendar_entity/PermissionCalendar_entity.aod b/entity/PermissionCalendar_entity/PermissionCalendar_entity.aod
index 6fd9cfebf50492e7de30e44e050a9e60450778b5..c4614de972159eb81a5f83a2576106930fdee3cf 100644
--- a/entity/PermissionCalendar_entity/PermissionCalendar_entity.aod
+++ b/entity/PermissionCalendar_entity/PermissionCalendar_entity.aod
@@ -147,11 +147,6 @@
     </entityField>
     <entityConsumer>
       <name>Departments</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Attribute_entity</entityName>
-        <fieldName>SpecificAttribute</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ParentId_param</name>
@@ -162,6 +157,11 @@
           <valueProcess>%aditoprj%/entity/PermissionCalendar_entity/entityfields/departments/children/includeparentrecord_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Attribute_entity</entityName>
+        <fieldName>SpecificAttribute</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>User</name>
@@ -184,17 +184,17 @@
     </entityField>
     <entityConsumer>
       <name>KeywordPermissionCalendarTypes</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/PermissionCalendar_entity/entityfields/keywordpermissioncalendartypes/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>PermissionDealer_param</name>
diff --git a/entity/PermissionDetail_entity/PermissionDetail_entity.aod b/entity/PermissionDetail_entity/PermissionDetail_entity.aod
index e18801ffb9cab3450e4dc8c5dbe77069c76add1b..afc95caa0edab0f2d58760314ef6c1987c2e5c8c 100644
--- a/entity/PermissionDetail_entity/PermissionDetail_entity.aod
+++ b/entity/PermissionDetail_entity/PermissionDetail_entity.aod
@@ -139,11 +139,6 @@
     </entityParameter>
     <entityConsumer>
       <name>KeywordConditionType</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -151,14 +146,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordAccessType</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordAccessType</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -166,17 +161,17 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>PermissionActions</name>
       <refreshParent v="true" />
       <stateProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/permissionactions/stateProcess.js</stateProcess>
       <onValidation>%aditoprj%/entity/PermissionDetail_entity/entityfields/permissionactions/onValidation.js</onValidation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>PermissionAction_entity</entityName>
-        <fieldName>PermissionActions</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>PermissionId_param</name>
@@ -195,6 +190,11 @@
           <valueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/permissionactions/children/fullpermissions_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>PermissionAction_entity</entityName>
+        <fieldName>PermissionActions</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>FULLPERMISSIONS</name>
diff --git a/entity/PermissionMetaData_entity/PermissionMetaData_entity.aod b/entity/PermissionMetaData_entity/PermissionMetaData_entity.aod
index b2006b9d74a349c0fd3b27a7ceca370802b5c8d6..6c80e3e90f082da76319817007d6a006c1349bd2 100644
--- a/entity/PermissionMetaData_entity/PermissionMetaData_entity.aod
+++ b/entity/PermissionMetaData_entity/PermissionMetaData_entity.aod
@@ -32,6 +32,12 @@
     <entityProvider>
       <name>MetaData</name>
       <recordContainer>jDito</recordContainer>
+      <children>
+        <entityParameter>
+          <name>EntityName_param</name>
+          <valueProcess>%aditoprj%/entity/PermissionMetaData_entity/entityfields/metadata/children/entityname_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>3b2c9421-5ff0-49a3-99f0-6790f17bd76c</name>
@@ -40,42 +46,36 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>EntityName_param</name>
-          <valueProcess>%aditoprj%/entity/PermissionMetaData_entity/entityfields/metadata/children/entityname_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityConsumer>
       <name>PermissionOverviews</name>
       <refreshParent v="true" />
-      <dependency>
-        <name>dependency</name>
-        <entityName>PermissionOverview_entity</entityName>
-        <fieldName>PermissionOverviews</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>EntityTitle_param</name>
           <valueProcess>%aditoprj%/entity/PermissionMetaData_entity/entityfields/permissionoverviews/children/entitytitle_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>PermissionOverview_entity</entityName>
+        <fieldName>PermissionOverviews</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>PermissionDetails</name>
       <refreshParent v="true" />
-      <dependency>
-        <name>dependency</name>
-        <entityName>PermissionDetail_entity</entityName>
-        <fieldName>Permissions</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>EntityTitle_param</name>
           <valueProcess>%aditoprj%/entity/PermissionMetaData_entity/entityfields/permissiondetails/children/entitytitle_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>PermissionDetail_entity</entityName>
+        <fieldName>Permissions</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>EntityName_param</name>
diff --git a/entity/PermissionOverview_entity/recordcontainers/jdito/contentProcess.js b/entity/PermissionOverview_entity/recordcontainers/jdito/contentProcess.js
index 0a21aef128bcefe95904d2fbed4bfd44cf0bccc8..293144a2513456337e2e290106ec4020e21269a3 100644
--- a/entity/PermissionOverview_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/PermissionOverview_entity/recordcontainers/jdito/contentProcess.js
@@ -74,7 +74,7 @@ for each (var entry in rolesOrEntities) { // entry contains either a role or an
                                 .select("ASYS_PERMISSIONSETID")
                                 .from("ASYS_PERMISSIONSET")
                                 .where("ASYS_PERMISSIONSET.ASYS_PERMISSIONSET_ID", entityPermSetId)
-                                .and("ACCESSTYPE = 'R'")
+                                .and("ASYS_PERMISSIONSET.ACCESSTYPE", "R")
                                 .arrayColumn();
 
         currOverview = [entityPermSetId, entry, "VAADIN:CLOSE", "VAADIN:CLOSE", "VAADIN:CLOSE", "VAADIN:CLOSE", "VAADIN:CLOSE"];
diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod
index c66ce949329c5b9e71486cb5802b41b0b2244ddf..ccb951171b001f5b1ed08cf8daa5368ae64d7990 100644
--- a/entity/Person_entity/Person_entity.aod
+++ b/entity/Person_entity/Person_entity.aod
@@ -62,6 +62,7 @@
       <title>Salutation</title>
       <consumer>Salutations</consumer>
       <mandatory v="true" />
+      <displayValueProcess>%aditoprj%/entity/Person_entity/entityfields/salutation/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
       <name>TITLE</name>
@@ -89,11 +90,6 @@
     </entityFieldGroup>
     <entityConsumer>
       <name>Activities</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Activity_entity</entityName>
-        <fieldName>LinkedObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>RowId_param</name>
@@ -108,6 +104,11 @@
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/activities/children/presetlinks_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Activity_entity</entityName>
+        <fieldName>LinkedObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>CONTACTID</name>
@@ -118,14 +119,6 @@
       <name>OrganisationRelated</name>
       <documentation>%aditoprj%/entity/Person_entity/entityfields/organisationrelated/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
-      <dependencies>
-        <entityDependency>
-          <name>41952879-c2f0-411f-8ca1-36c38914a629</name>
-          <entityName>Organisation_entity</entityName>
-          <fieldName>Contact</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -144,6 +137,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>41952879-c2f0-411f-8ca1-36c38914a629</name>
+          <entityName>Organisation_entity</entityName>
+          <fieldName>Contact</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityField>
       <name>PERSON_ID</name>
@@ -161,11 +162,6 @@
     </entityField>
     <entityConsumer>
       <name>PersAddresses</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Address_entity</entityName>
-        <fieldName>ContactAddresses</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>DefaultAddressId_param</name>
@@ -185,14 +181,14 @@
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/persaddresses/children/replacestandardaddress_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Communications</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Communication_entity</entityName>
-        <fieldName>AllCommunications</fieldName>
+        <entityName>Address_entity</entityName>
+        <fieldName>ContactAddresses</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Communications</name>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -210,29 +206,29 @@
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Communication_entity</entityName>
+        <fieldName>AllCommunications</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Organisations</name>
       <selectionMode>SINGLE</selectionMode>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Organisation_entity</entityName>
-        <fieldName>WithPersonIdFilter</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ExcludeOrganisationsByPersonId</name>
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/organisations/children/excludeorganisationsbypersonid/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Contracts</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Contract_entity</entityName>
-        <fieldName>Contracts</fieldName>
+        <entityName>Organisation_entity</entityName>
+        <fieldName>WithPersonIdFilter</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Contracts</name>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -241,16 +237,16 @@
           <mandatory v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Contract_entity</entityName>
+        <fieldName>Contracts</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Pricelists</name>
       <state>AUTO</state>
       <stateProcess>%aditoprj%/entity/Person_entity/entityfields/pricelists/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Productprice_entity</entityName>
-        <fieldName>Productprices</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -259,6 +255,11 @@
           <mandatory v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Productprice_entity</entityName>
+        <fieldName>Productprices</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Genders</name>
@@ -313,11 +314,6 @@
     <entityConsumer>
       <name>Documents</name>
       <selectionMode>MULTI</selectionMode>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>Documents</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -332,6 +328,11 @@
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/documents/children/disallowcreate_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>Documents</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ContactId_param</name>
@@ -356,14 +357,6 @@
       <name>Contact</name>
       <documentation>%aditoprj%/entity/Person_entity/entityfields/contact/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
-      <dependencies>
-        <entityDependency>
-          <name>f925c8e6-b096-4093-bd39-c9cd30a6a71a</name>
-          <entityName>Lead_entity</entityName>
-          <fieldName>ContactId</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>OrgId_param</name>
@@ -391,16 +384,19 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>f925c8e6-b096-4093-bd39-c9cd30a6a71a</name>
+          <entityName>Lead_entity</entityName>
+          <fieldName>ContactId</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityConsumer>
       <name>OrgAddresses</name>
       <state>READONLY</state>
       <stateProcess>%aditoprj%/entity/Person_entity/entityfields/orgaddresses/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Address_entity</entityName>
-        <fieldName>OrganisationAddressesByContact</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -412,6 +408,11 @@
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/orgaddresses/children/defaultaddressid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Address_entity</entityName>
+        <fieldName>OrganisationAddressesByContact</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>STANDARD_EMAIL_COMMUNICATION</name>
@@ -428,11 +429,6 @@
     <entityConsumer>
       <name>PhoneCommunications</name>
       <description>Used for standard communication</description>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Communication_entity</entityName>
-        <fieldName>PhoneCommunications</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -442,15 +438,15 @@
                         Usually this is used for filtering COMMUNICATION-entries by a specified contact or creating a new entry that is related to a contact.</description>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>EmailCommunications</name>
-      <description>Used for standard communication</description>
       <dependency>
         <name>dependency</name>
         <entityName>Communication_entity</entityName>
-        <fieldName>EmailCommunications</fieldName>
+        <fieldName>PhoneCommunications</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>EmailCommunications</name>
+      <description>Used for standard communication</description>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -460,6 +456,11 @@
                         Usually this is used for filtering COMMUNICATION-entries by a specified contact or creating a new entry that is related to a contact.</description>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Communication_entity</entityName>
+        <fieldName>EmailCommunications</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>ADDRESS_ID</name>
@@ -471,11 +472,6 @@
     </entityField>
     <entityConsumer>
       <name>KeywordGenders</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -483,6 +479,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Languages</name>
@@ -494,40 +495,35 @@
     </entityConsumer>
     <entityConsumer>
       <name>Offers</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Offer_entity</entityName>
-        <fieldName>ContactOffers</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/offers/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Salutations</name>
       <dependency>
         <name>dependency</name>
-        <entityName>SalutationDistinct_entity</entityName>
-        <fieldName>Salutations</fieldName>
+        <entityName>Offer_entity</entityName>
+        <fieldName>ContactOffers</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Salutations</name>
       <children>
         <entityParameter>
           <name>Language_param</name>
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/salutations/children/language_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>SalutationDistinct_entity</entityName>
+        <fieldName>Salutations</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Attributes</name>
       <onValidation>%aditoprj%/entity/Person_entity/entityfields/attributes/onValidation.js</onValidation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>AttributeRelations</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -542,14 +538,14 @@
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/attributes/children/showdsgvomessage_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>SalutationTitles</name>
       <dependency>
         <name>dependency</name>
-        <entityName>SalutationTitleDistinct_entity</entityName>
-        <fieldName>SalutationTitles</fieldName>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>AttributeRelations</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>SalutationTitles</name>
       <children>
         <entityParameter>
           <name>Salutation_param</name>
@@ -560,15 +556,15 @@
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/salutationtitles/children/language_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>SalutationTitleDistinct_entity</entityName>
+        <fieldName>SalutationTitles</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Tasks</name>
       <state>EDITABLE</state>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Task_entity</entityName>
-        <fieldName>Tasks</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>RowId_param</name>
@@ -583,14 +579,14 @@
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/tasks/children/presetlinks_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>ObjectTrees</name>
       <dependency>
         <name>dependency</name>
-        <entityName>ObjectTree_entity</entityName>
-        <fieldName>TreeProvider</fieldName>
+        <entityName>Task_entity</entityName>
+        <fieldName>Tasks</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>ObjectTrees</name>
       <children>
         <entityParameter>
           <name>ObjectIds_param</name>
@@ -601,6 +597,11 @@
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/objecttrees/children/objecttypes_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>ObjectTree_entity</entityName>
+        <fieldName>TreeProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>STATUS</name>
@@ -612,25 +613,20 @@
     </entityField>
     <entityConsumer>
       <name>KeywordContactStates</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>ContactAndOrganisationAddresses</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Address_entity</entityName>
-        <fieldName>OrganisationAndContactAddresses</fieldName>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>ContactAndOrganisationAddresses</name>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -641,6 +637,11 @@
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/contactandorganisationaddresses/children/organisationid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Address_entity</entityName>
+        <fieldName>OrganisationAndContactAddresses</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>DEPARTMENT</name>
@@ -663,11 +664,6 @@
     </entityField>
     <entityConsumer>
       <name>LogHistories</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>LogHistory_entity</entityName>
-        <fieldName>LogHistoryProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>tablenames_param</name>
@@ -676,14 +672,14 @@
           <mandatory v="true" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>OtherContacts</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Contact_entity</entityName>
-        <fieldName>PersonsContactsExceptOwn</fieldName>
+        <entityName>LogHistory_entity</entityName>
+        <fieldName>LogHistoryProvider</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>OtherContacts</name>
       <children>
         <entityParameter>
           <name>OwnContactId_param</name>
@@ -694,6 +690,11 @@
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/othercontacts/children/languagekey_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Contact_entity</entityName>
+        <fieldName>PersonsContactsExceptOwn</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>ORGANISATION_NAME</name>
@@ -706,20 +707,6 @@
     <entityProvider>
       <name>Contacts</name>
       <documentation>%aditoprj%/entity/Person_entity/entityfields/contacts/documentation.adoc</documentation>
-      <dependencies>
-        <entityDependency>
-          <name>c98da62f-d6b2-4ddb-9101-92e9a60abdfb</name>
-          <entityName>VisitPlanEmployeeWeek_entity</entityName>
-          <fieldName>Persons</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-        <entityDependency>
-          <name>f56b1378-138d-4f88-b9df-274adce9f90c</name>
-          <entityName>VisitPlanEntry_entity</entityName>
-          <fieldName>Persons</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -746,14 +733,23 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>c98da62f-d6b2-4ddb-9101-92e9a60abdfb</name>
+          <entityName>VisitPlanEmployeeWeek_entity</entityName>
+          <fieldName>Persons</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+        <entityDependency>
+          <name>f56b1378-138d-4f88-b9df-274adce9f90c</name>
+          <entityName>VisitPlanEntry_entity</entityName>
+          <fieldName>Persons</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityConsumer>
       <name>360DegreeObjects</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>360Degree_entity</entityName>
-        <fieldName>PersonObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -764,14 +760,14 @@
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/360degreeobjects/children/objectstatus_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>AttributeTree</name>
       <dependency>
         <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>TreeProvider</fieldName>
+        <entityName>360Degree_entity</entityName>
+        <fieldName>PersonObjects</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>AttributeTree</name>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -786,6 +782,11 @@
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/attributetree/children/showdsgvomessage_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>TreeProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>DATE_NEW</name>
@@ -845,46 +846,50 @@
     </entityParameter>
     <entityConsumer>
       <name>CommRestrictions</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>CommRestriction_Entity</entityName>
-        <fieldName>CommRestrictions</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/commrestrictions/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>CommRestriction_Entity</entityName>
+        <fieldName>CommRestrictions</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>DSGVOEntries</name>
       <stateProcess>%aditoprj%/entity/Person_entity/entityfields/dsgvoentries/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DSGVO_entity</entityName>
-        <fieldName>#PROVIDER</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/dsgvoentries/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Appointments</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Appointment_entity</entityName>
-        <fieldName>LinkedAppointments</fieldName>
+        <entityName>DSGVO_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Appointments</name>
       <children>
         <entityParameter>
           <name>LinkedObjectId_param</name>
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/appointments/children/linkedobjectid_param/valueProcess.js</valueProcess>
         </entityParameter>
+        <entityParameter>
+          <name>ErrorOnPermissionDenied</name>
+          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/appointments/children/erroronpermissiondenied/valueProcess.js</valueProcess>
+        </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Appointment_entity</entityName>
+        <fieldName>LinkedAppointments</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>OpenTasks</name>
@@ -921,11 +926,6 @@
     </entityField>
     <entityConsumer>
       <name>SelfDuplicatesUncached</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Person_entity</entityName>
-        <fieldName>SelfDuplicates</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>DuplicateActionsControl_param</name>
@@ -944,6 +944,11 @@
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Person_entity</entityName>
+        <fieldName>SelfDuplicates</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>LEAD_LEADID</name>
@@ -974,14 +979,6 @@
       <name>QuickEntryContacts</name>
       <documentation>%aditoprj%/entity/Person_entity/entityfields/quickentrycontacts/documentation.adoc</documentation>
       <titlePlural>Additional Contacts</titlePlural>
-      <dependencies>
-        <entityDependency>
-          <name>6d137850-63ba-4be0-9ca5-1464e71d4f77</name>
-          <entityName>QuickEntry_entity</entityName>
-          <fieldName>Contacts</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -1004,6 +1001,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>6d137850-63ba-4be0-9ca5-1464e71d4f77</name>
+          <entityName>QuickEntry_entity</entityName>
+          <fieldName>Contacts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityActionField>
       <name>openEditDefaultsView</name>
@@ -1099,9 +1104,10 @@
         </entityActionField>
         <entityActionField>
           <name>startMarketingWorkflows</name>
-          <title>Marketing Workflow</title>
+          <title>Start marketing mailing</title>
           <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/filterviewactiongroup/children/startmarketingworkflows/onActionProcess.js</onActionProcess>
           <isObjectAction v="false" />
+          <iconId>VAADIN:ENVELOPES</iconId>
         </entityActionField>
       </children>
     </entityActionGroup>
@@ -1115,6 +1121,8 @@
           <name>IntegrateSelectedIntoCurrentAction</name>
           <title>Integrate selected into current contact</title>
           <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js</onActionProcess>
+          <isMenuAction v="true" />
+          <isObjectAction v="false" />
           <isSelectionAction v="true" />
           <iconId>NEON:IMPORT</iconId>
           <stateProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js</stateProcess>
@@ -1123,6 +1131,8 @@
           <name>IntegrateCurrentIntoSelectedAction</name>
           <title>Integrate current into selected contact</title>
           <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js</onActionProcess>
+          <isMenuAction v="true" />
+          <isObjectAction v="false" />
           <isSelectionAction v="true" />
           <iconId>NEON:EXPORT</iconId>
           <stateProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js</stateProcess>
@@ -1131,6 +1141,8 @@
           <name>IgnoreDuplicate</name>
           <title>Ignore Duplicate</title>
           <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js</onActionProcess>
+          <isMenuAction v="true" />
+          <isObjectAction v="false" />
           <isSelectionAction v="true" />
           <iconId>VAADIN:CLOSE</iconId>
           <stateProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js</stateProcess>
@@ -1139,6 +1151,7 @@
           <name>IgnoreWholeCluster</name>
           <title>Ignore whole cluster</title>
           <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
           <iconId>VAADIN:CLOSE</iconId>
           <stateProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js</stateProcess>
         </entityActionField>
@@ -1249,14 +1262,6 @@
     <entityProvider>
       <name>IdFilteredActiveContacts</name>
       <documentation>%aditoprj%/entity/Person_entity/entityfields/idfilteredactivecontacts/documentation.adoc</documentation>
-      <dependencies>
-        <entityDependency>
-          <name>511f3e4c-7493-4a31-a136-0ba80ba2ec85</name>
-          <entityName>Member_entity</entityName>
-          <fieldName>Contacts</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ExcludedContactIds_param</name>
@@ -1291,6 +1296,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>511f3e4c-7493-4a31-a136-0ba80ba2ec85</name>
+          <entityName>Member_entity</entityName>
+          <fieldName>Contacts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityField>
       <name>COUNT</name>
@@ -1325,29 +1338,21 @@
       <name>Districts</name>
       <state>INVISIBLE</state>
       <stateProcess>%aditoprj%/entity/Person_entity/entityfields/districts/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>District_entity</entityName>
-        <fieldName>ResponsibleDistricts</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>DistrictsByContactId_param</name>
           <valueProcess>%aditoprj%/entity/Person_entity/entityfields/districts/children/districtsbycontactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>District_entity</entityName>
+        <fieldName>ResponsibleDistricts</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>NonselfDuplicates</name>
       <documentation>%aditoprj%/entity/Person_entity/entityfields/nonselfduplicates/documentation.adoc</documentation>
-      <dependencies>
-        <entityDependency>
-          <name>3a4352e2-9686-4c52-9d01-dbfad8c68ea7</name>
-          <entityName>Duplicates_entity</entityName>
-          <fieldName>DuplicatePersonsConsumer</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -1370,22 +1375,45 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>3a4352e2-9686-4c52-9d01-dbfad8c68ea7</name>
+          <entityName>Duplicates_entity</entityName>
+          <fieldName>DuplicatePersonsConsumer</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityConsumer>
       <name>DistrictResponsibles</name>
       <state>INVISIBLE</state>
       <stateProcess>%aditoprj%/entity/Person_entity/entityfields/districtresponsibles/stateProcess.js</stateProcess>
+      <children>
+        <entityParameter>
+          <name>OrgUid_param</name>
+          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/districtresponsibles/children/orguid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
       <dependency>
         <name>dependency</name>
         <entityName>DistrictResponsible_entity</entityName>
         <fieldName>OrganisationResponsibles</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Orders</name>
+      <documentation>%aditoprj%/entity/Person_entity/entityfields/orders/documentation.adoc</documentation>
       <children>
         <entityParameter>
-          <name>OrgUid_param</name>
-          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/districtresponsibles/children/orguid_param/valueProcess.js</valueProcess>
+          <name>ContactId_param</name>
+          <valueProcess>%aditoprj%/entity/Person_entity/entityfields/orders/children/contactid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Order_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
     </entityConsumer>
   </entityFields>
   <recordContainers>
@@ -1688,6 +1716,8 @@
           <filterFieldsProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js</filterFieldsProcess>
           <filterValuesProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js</filterValuesProcess>
           <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js</filterConditionProcess>
+          <isGroupable v="true" />
+          <groupQueryProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/attribute_filter/groupQueryProcess.js</groupQueryProcess>
           <filtertype>BASIC</filtertype>
         </filterExtensionSet>
         <filterExtension>
diff --git a/entity/Person_entity/entityfields/appointments/children/erroronpermissiondenied/valueProcess.js b/entity/Person_entity/entityfields/appointments/children/erroronpermissiondenied/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..15b1f8d0322593145f40d707c61dfdfd9babf0fe
--- /dev/null
+++ b/entity/Person_entity/entityfields/appointments/children/erroronpermissiondenied/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.result");
+
+result.string("false");
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js b/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js
index 2930a65370d53abee83d106cae30b08daf67146d..6a9f2ac39a7238d7dd5fbaec53e41c57eabec241 100644
--- a/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js
+++ b/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js
@@ -26,7 +26,8 @@ if(mergeSuccess)
     if(currentContactId == null)
         currentContactId = "";
     DuplicateScannerUtils.createMergeSuccessActivity(sourceContactId, targetContactId, currentContactId, "Person");
-// openContext due to the fact, that openContext will lead to an error 'due'cause it's trying to load the already opened preview 
-// of the duplicateContact which just got deleted = nullpointException
-    neon.openContext("Person", null, [targetContactId], neon.OPERATINGSTATE_VIEW, null, null);
+    //neon.refresh() with no fields will refresh the current image (and all sub images) but NOT the preview. neon.refreshAll() would refresh both,
+    //why it would lead to an error because it's trying to load the already opened preview of the duplicateContact which just got deleted 
+    //and does not exist any more which results in an exception
+    neon.refresh();
 }
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/filterviewactiongroup/children/startmarketingworkflows/onActionProcess.js b/entity/Person_entity/entityfields/filterviewactiongroup/children/startmarketingworkflows/onActionProcess.js
index 3e462ab4498eb4215bac2daa8457aee59ae8cd2a..2b04867cc90fd72a300747605800b32664d4b5b4 100644
--- a/entity/Person_entity/entityfields/filterviewactiongroup/children/startmarketingworkflows/onActionProcess.js
+++ b/entity/Person_entity/entityfields/filterviewactiongroup/children/startmarketingworkflows/onActionProcess.js
@@ -4,5 +4,6 @@ import("system.neon");
 
 neon.openContext("MarketingWorkflowLauncher", "MarketingWorkflowLauncherEdit_view", null, neon.OPERATINGSTATE_VIEW, {
     "ObjectIds_param": JSON.stringify(vars.get("$sys.selection")),
+    "ObjectFilter_param": JSON.stringify(vars.get("$sys.filter")),
     "ObjectType_param": ContextUtils.getCurrentContextId()
 });
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/orders/children/contactid_param/valueProcess.js b/entity/Person_entity/entityfields/orders/children/contactid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7b6137b4d105e9ba592cf8ef6e796fb838a32b09
--- /dev/null
+++ b/entity/Person_entity/entityfields/orders/children/contactid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.CONTACTID"));
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/orders/documentation.adoc b/entity/Person_entity/entityfields/orders/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..cadb57b42a557960231861bfd0aa547cd54677f4
--- /dev/null
+++ b/entity/Person_entity/entityfields/orders/documentation.adoc
@@ -0,0 +1 @@
+Consumer for loading a contacts related Orders. This is for example used to verify if the Person-row can be deleted.
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/salutation/displayValueProcess.js b/entity/Person_entity/entityfields/salutation/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..275e5fb9a51310d5d2b8e0d427aec3415a2b6c73
--- /dev/null
+++ b/entity/Person_entity/entityfields/salutation/displayValueProcess.js
@@ -0,0 +1,5 @@
+import("system.vars");
+import("system.result");
+
+if(vars.get("$field.SALUTATION"))
+    result.string(vars.get("$field.SALUTATION"));
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/title/displayValueProcess.js b/entity/Person_entity/entityfields/title/displayValueProcess.js
index 3682b56b29c28eb54083e5d08025f851591aed2c..9023d1aa7e54c97980047d0aed8f9fdc50e1b157 100644
--- a/entity/Person_entity/entityfields/title/displayValueProcess.js
+++ b/entity/Person_entity/entityfields/title/displayValueProcess.js
@@ -1,9 +1,5 @@
 import("system.result");
-import("system.neon");
 import("system.vars");
 
-if((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT))
-{
-    if (!vars.get("$field.TITLE"))
-        result.string("")
-}
\ No newline at end of file
+if (vars.get("$field.TITLE"))
+    result.string(vars.get("$field.TITLE"));
diff --git a/entity/Person_entity/grantDeleteProcess.js b/entity/Person_entity/grantDeleteProcess.js
index 876b00bdb6a168033f3c0e5bfc587b8fff02a973..36866c88c8b760c3a8e009714d49ebfb2c9674f3 100644
--- a/entity/Person_entity/grantDeleteProcess.js
+++ b/entity/Person_entity/grantDeleteProcess.js
@@ -29,7 +29,7 @@ if(personCount == 1)
         .andNoEntityRows("Contract_entity", "Contracts", {ContactId_param : contactId}) //Contracts
         .andNoEntityRows("ObjectTree_entity", "TreeProvider", {ObjectIds_param : JSON.stringify([contactId, vars.get("$field.PERSON_ID")]), ObjectTypes_param : JSON.stringify([currentContext, "PrivatePerson"])})
         .andNoEntityRows("CampaignParticipant_entity", "CampaignParticipantsProvider", {ContactId_param : contactId})
-        .andNoEntityRows("Order_entity", "OrderProvider", {ContactId_param : contactId})
+        .andNoEntityRows("Order_entity", "#PROVIDER", {ContactId_param : contactId})
         .validate();
 }
 else if (personCount == 0) //special case in QuickEntry where it should be possible to remove a new Person that is not saved in the db yet
diff --git a/entity/Person_entity/initFilterProcess.js b/entity/Person_entity/initFilterProcess.js
index c30d06ea24f7a12f1a5dfdec27fcf47948a78dc9..f64ef8977cc3f20a910f104d6196bfe90c43fc34 100644
--- a/entity/Person_entity/initFilterProcess.js
+++ b/entity/Person_entity/initFilterProcess.js
@@ -1,3 +1,4 @@
+import("system.entities");
 import("Keyword_lib");
 import("KeywordRegistry_basic");
 import("system.result");
diff --git a/entity/Person_entity/recordcontainers/db/conditionProcess.js b/entity/Person_entity/recordcontainers/db/conditionProcess.js
index 04f984cbc56a2705edaf17cc7f00819a4d4526e9..338811158360900835c45a56b055904518f65ed6 100644
--- a/entity/Person_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Person_entity/recordcontainers/db/conditionProcess.js
@@ -41,5 +41,4 @@ if (vars.exists("$param.OnlyOwnSupervised_param") && vars.get("$param.OnlyOwnSup
     );
 }
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/attribute_filter/groupQueryProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/attribute_filter/groupQueryProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..cd1075a6aca75cc0b77eb7be5f7f83886c9eeb85
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/filterextensions/attribute_filter/groupQueryProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var sqlCond = AttributeFilterExtensionMaker.makeFilterGroupQuery("PERSON \n\
+    join CONTACT on (CONTACT.PERSON_ID = PERSON.PERSONID) \n\
+    join ORGANISATION on (ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID) \n\
+    left join ADDRESS on (ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID)");
+result.string(sqlCond);
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/index/query.js b/entity/Person_entity/recordcontainers/index/query.js
index 57faf589990bf78e08b17cdc4ad1b49b4f03c1af..e5c704e81ad9981791035100cf08dade778bc713 100644
--- a/entity/Person_entity/recordcontainers/index/query.js
+++ b/entity/Person_entity/recordcontainers/index/query.js
@@ -18,12 +18,12 @@ var commMediumPhoneIds = CommUtil.getMediumIdsByCategory("PHONE");
 sqlHelper = new SqlMaskingUtils();
 var querySelect = newSelect([
         "CONTACT.CONTACTID", //#UID
-        sqlHelper.concat(["PERSON.SALUTATION", "PERSON.FIRSTNAME", "PERSON.LASTNAME", "'|'", "ORGANISATION.NAME"]), //#TITLE
-        sqlHelper.concat([
-            sqlHelper.concat(["defaultAddress.ADDRESS", "defaultAddress.BUILDINGNO", "'-'",
+        sqlHelper.concatWithSeparator(["PERSON.SALUTATION", "PERSON.FIRSTNAME", "PERSON.LASTNAME", "'|'", "ORGANISATION.NAME"]), //#TITLE
+        sqlHelper.concatWithSeparator([
+            sqlHelper.concatWithSeparator(["defaultAddress.ADDRESS", "defaultAddress.BUILDINGNO", "'-'",
                 "defaultAddress.COUNTRY", "defaultAddress.ZIP", "defaultAddress.CITY"]),
-            sqlHelper.concat(["'" + translate.text("Phone") + ":'", "(" + CommUtil.getStandardSubSqlPhone() + ")"]),
-            sqlHelper.concat(["'" + translate.text("Email") + ":'", "(" + CommUtil.getStandardSubSqlMail() + ")"])
+            sqlHelper.concatWithSeparator(["'" + translate.text("Phone") + ":'", "(" + CommUtil.getStandardSubSqlPhone() + ")"]),
+            sqlHelper.concatWithSeparator(["'" + translate.text("Email") + ":'", "(" + CommUtil.getStandardSubSqlMail() + ")"])
         ], " | "), //#DESCRIPTION
         //additional indexed fields
         "CONTACT.CONTACTID",
diff --git a/entity/PrivatePerson_entity/PrivatePerson_entity.aod b/entity/PrivatePerson_entity/PrivatePerson_entity.aod
index e3cc784be65ee3ec69e37b8921bdc7fa2076e089..4739b80b0fe7a898f97a61866813f11d8241ff37 100644
--- a/entity/PrivatePerson_entity/PrivatePerson_entity.aod
+++ b/entity/PrivatePerson_entity/PrivatePerson_entity.aod
@@ -60,11 +60,6 @@
     </entityParameter>
     <entityConsumer>
       <name>Persons</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Contact_entity</entityName>
-        <fieldName>PersonRelated</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>PersonId_param</name>
@@ -75,6 +70,11 @@
           <valueProcess>%aditoprj%/entity/PrivatePerson_entity/entityfields/persons/children/readonly_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Contact_entity</entityName>
+        <fieldName>PersonRelated</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/PrivatePerson_entity/recordcontainers/db/conditionProcess.js b/entity/PrivatePerson_entity/recordcontainers/db/conditionProcess.js
index d7230024504ab503e79b5b4c306b41c2a4c3d35e..69206e0479d58423e19c04113145f595ada8bd87 100644
--- a/entity/PrivatePerson_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/PrivatePerson_entity/recordcontainers/db/conditionProcess.js
@@ -11,5 +11,4 @@ if (vars.get("$param.ExcludedPersonIds_param"))
     cond.andIfSet("PERSON.PERSONID", excludedPersons, SqlBuilder.NOT_IN());
 }
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Prod2prod_entity/Prod2prod_entity.aod b/entity/Prod2prod_entity/Prod2prod_entity.aod
index 824ac6d55edafc5cacd1bee2233dc435a517f290..06bfbd33787ea979611fd6b76f525c744a211290 100644
--- a/entity/Prod2prod_entity/Prod2prod_entity.aod
+++ b/entity/Prod2prod_entity/Prod2prod_entity.aod
@@ -64,14 +64,6 @@
       <name>ProductLinks</name>
       <targetContextField>targetContext</targetContextField>
       <targetIdField>SOURCE_ID</targetIdField>
-      <dependencies>
-        <entityDependency>
-          <name>4bd06e3b-17a0-483e-a61c-818ff7e86be3</name>
-          <entityName>Product_entity</entityName>
-          <fieldName>ProductLinks</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ProductId_param</name>
@@ -82,6 +74,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>4bd06e3b-17a0-483e-a61c-818ff7e86be3</name>
+          <entityName>Product_entity</entityName>
+          <fieldName>ProductLinks</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityField>
       <name>PRODUCTCODE</name>
@@ -104,11 +104,6 @@
     </entityActionGroup>
     <entityConsumer>
       <name>Products</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Product_entity</entityName>
-        <fieldName>Products</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ExcludedProducts_param</name>
@@ -116,6 +111,11 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Product_entity</entityName>
+        <fieldName>Products</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>PRODUCTID</name>
diff --git a/entity/Prod2prod_entity/entityfields/products/children/excludedproducts_param/valueProcess.js b/entity/Prod2prod_entity/entityfields/products/children/excludedproducts_param/valueProcess.js
index bbca20492052f0f34e6997a999c968dca4ab821e..ca417dc781a55e926604703a6d21915be43e0af3 100644
--- a/entity/Prod2prod_entity/entityfields/products/children/excludedproducts_param/valueProcess.js
+++ b/entity/Prod2prod_entity/entityfields/products/children/excludedproducts_param/valueProcess.js
@@ -31,7 +31,6 @@ else
 
 result.object(excludeIDs);
 
-// TODO: remove code duplication, better param naming and using SqlBuilder
 function _getParentID(pID, pIDs)
 {
     //Ermitteln welche Produkte ausgeschlossen werden müssen.
diff --git a/entity/Product_entity/Product_entity.aod b/entity/Product_entity/Product_entity.aod
index 2a6662b6f7d6e80914a53eddd2bdf2b74607ffa4..f9026b60de2e8f36a316601aa9135b5db131e0ce 100644
--- a/entity/Product_entity/Product_entity.aod
+++ b/entity/Product_entity/Product_entity.aod
@@ -9,11 +9,11 @@
   </siblings>
   <grantDeleteProcess>%aditoprj%/entity/Product_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/Product_entity/contentTitleProcess.js</contentTitleProcess>
+  <contentDescriptionProcess>%aditoprj%/entity/Product_entity/contentDescriptionProcess.js</contentDescriptionProcess>
   <afterUiInit>%aditoprj%/entity/Product_entity/afterUiInit.js</afterUiInit>
   <useFavorites v="true" />
   <iconId>VAADIN:HAMMER</iconId>
   <imageProcess>%aditoprj%/entity/Product_entity/imageProcess.js</imageProcess>
-  <usePermissions v="true" />
   <titlePlural>Products</titlePlural>
   <recordContainer>db</recordContainer>
   <entityFields>
@@ -89,46 +89,46 @@
     </entityField>
     <entityConsumer>
       <name>Organisations</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Organisation_entity</entityName>
-        <fieldName>Organisations</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>OrganisationType_param</name>
           <valueProcess>%aditoprj%/entity/Product_entity/entityfields/organisations/children/organisationtype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Productprices</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Productprice_entity</entityName>
-        <fieldName>Productprices</fieldName>
+        <entityName>Organisation_entity</entityName>
+        <fieldName>Organisations</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Productprices</name>
       <children>
         <entityParameter>
           <name>ProductId_param</name>
           <valueProcess>%aditoprj%/entity/Product_entity/entityfields/productprices/children/productid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Productprice_entity</entityName>
+        <fieldName>Productprices</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Stocks</name>
       <selectionMode>SINGLE</selectionMode>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Stock_entity</entityName>
-        <fieldName>Stocks</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ProductId_param</name>
           <valueProcess>%aditoprj%/entity/Product_entity/entityfields/stocks/children/productid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Stock_entity</entityName>
+        <fieldName>Stocks</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>PICTURE</name>
@@ -137,17 +137,17 @@
     <entityConsumer>
       <name>StockCounts</name>
       <state>READONLY</state>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Stock_entity</entityName>
-        <fieldName>Stocks</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ProductId_param</name>
           <valueProcess>%aditoprj%/entity/Product_entity/entityfields/stockcounts/children/productid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Stock_entity</entityName>
+        <fieldName>Stocks</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER</name>
@@ -181,11 +181,6 @@
     </entityProvider>
     <entityConsumer>
       <name>ProductLinks</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Prod2prod_entity</entityName>
-        <fieldName>ProductLinks</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ProductId_param</name>
@@ -194,6 +189,11 @@
           <mandatory v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Prod2prod_entity</entityName>
+        <fieldName>ProductLinks</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>CONTACT_ID</name>
@@ -211,11 +211,6 @@
     <entityConsumer>
       <name>Documents</name>
       <selectionMode>MULTI</selectionMode>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>Documents</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -226,15 +221,15 @@
           <valueProcess>%aditoprj%/entity/Product_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>MainDocuments</name>
-      <stateProcess>%aditoprj%/entity/Product_entity/entityfields/maindocuments/stateProcess.js</stateProcess>
       <dependency>
         <name>dependency</name>
         <entityName>Document_entity</entityName>
-        <fieldName>MainDocuments</fieldName>
+        <fieldName>Documents</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>MainDocuments</name>
+      <stateProcess>%aditoprj%/entity/Product_entity/entityfields/maindocuments/stateProcess.js</stateProcess>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -245,14 +240,14 @@
           <valueProcess>%aditoprj%/entity/Product_entity/entityfields/maindocuments/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordProductGroupcodes</name>
       <dependency>
         <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
+        <entityName>Document_entity</entityName>
+        <fieldName>MainDocuments</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordProductGroupcodes</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -260,14 +255,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordQuantityUnits</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordQuantityUnits</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -275,14 +270,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Activities</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Activity_entity</entityName>
-        <fieldName>LinkedObjects</fieldName>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Activities</name>
       <children>
         <entityParameter>
           <name>ObjectId_param</name>
@@ -293,6 +288,11 @@
           <valueProcess>%aditoprj%/entity/Product_entity/entityfields/activities/children/rowid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Activity_entity</entityName>
+        <fieldName>LinkedObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>newActivity</name>
@@ -306,11 +306,6 @@
       <name>Attributes</name>
       <stateProcess>%aditoprj%/entity/Product_entity/entityfields/attributes/stateProcess.js</stateProcess>
       <onValidation>%aditoprj%/entity/Product_entity/entityfields/attributes/onValidation.js</onValidation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>AttributeRelations</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -323,6 +318,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>AttributeRelations</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ExcludedProducts_param</name>
@@ -331,6 +331,12 @@
     </entityParameter>
     <entityProvider>
       <name>Products</name>
+      <children>
+        <entityParameter>
+          <name>ExcludedProducts_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>1b12e8ef-74ba-4294-bd2b-9d4afa80798c</name>
@@ -345,12 +351,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ExcludedProducts_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityActionField>
       <name>newTask</name>
@@ -361,11 +361,6 @@
     <entityConsumer>
       <name>Tasks</name>
       <stateProcess>%aditoprj%/entity/Product_entity/entityfields/tasks/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Task_entity</entityName>
-        <fieldName>Tasks</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>RowId_param</name>
@@ -376,15 +371,15 @@
           <valueProcess>%aditoprj%/entity/Product_entity/entityfields/tasks/children/objectid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Task_entity</entityName>
+        <fieldName>Tasks</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>AttributeTree</name>
       <stateProcess>%aditoprj%/entity/Product_entity/entityfields/attributetree/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>TreeProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -395,6 +390,11 @@
           <valueProcess>%aditoprj%/entity/Product_entity/entityfields/attributetree/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>TreeProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>USER_NEW</name>
@@ -418,17 +418,17 @@
     </entityField>
     <entityConsumer>
       <name>LogHistories</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>LogHistory_entity</entityName>
-        <fieldName>LogHistoryProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>tablenames_param</name>
           <valueProcess>%aditoprj%/entity/Product_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>LogHistory_entity</entityName>
+        <fieldName>LogHistoryProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ProductText_param</name>
@@ -436,11 +436,6 @@
     </entityParameter>
     <entityConsumer>
       <name>DescriptionTranslations</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DescriptionTranslation_entity</entityName>
-        <fieldName>DescriptionTranslations</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowid_param</name>
@@ -451,6 +446,11 @@
           <valueProcess>%aditoprj%/entity/Product_entity/entityfields/descriptiontranslations/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DescriptionTranslation_entity</entityName>
+        <fieldName>DescriptionTranslations</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>openAdminView</name>
diff --git a/entity/Product_entity/contentDescriptionProcess.js b/entity/Product_entity/contentDescriptionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b07a72fe7cc543e3bedc5d5604f12f28769ffb6b
--- /dev/null
+++ b/entity/Product_entity/contentDescriptionProcess.js
@@ -0,0 +1,5 @@
+import("system.translate");
+import("system.datetime");
+import("system.vars");
+import("system.result");
+result.string(datetime.toDate(vars.get("$field.DATE_NEW"), translate.text("dd.MM.yyyy")));
\ No newline at end of file
diff --git a/entity/Product_entity/entityfields/contact_id/displayValueProcess.js b/entity/Product_entity/entityfields/contact_id/displayValueProcess.js
index 660715572aed4cf5db65f233b769c2c9ffa2bdf4..d29e2e1026670cc941752ee8c806c0fa4d730465 100644
--- a/entity/Product_entity/entityfields/contact_id/displayValueProcess.js
+++ b/entity/Product_entity/entityfields/contact_id/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("system.result");
 import("Context_lib");
 
-result.string(db.cell(ContextUtils.getNameSql("Organisation", vars.get("$field.CONTACT_ID"))));
\ No newline at end of file
+result.string(ContextUtils.getTitleByContext("Organisation", vars.get("$field.CONTACT_ID")));
\ No newline at end of file
diff --git a/entity/Product_entity/recordcontainers/db/conditionProcess.js b/entity/Product_entity/recordcontainers/db/conditionProcess.js
index 3602fca8eb08a457b21fdd77bfd58ab4f43be1d3..d2f79f17d279ce0c07f88dab88f93455d1ffe5bb 100644
--- a/entity/Product_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Product_entity/recordcontainers/db/conditionProcess.js
@@ -11,5 +11,4 @@ if (vars.exists("$param.ExcludedProducts_param") && vars.get("$param.ExcludedPro
     productCond.andIfSet("PRODUCT.PRODUCTID", excludedIds, SqlBuilder.NOT_IN());
 }
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(productCond.toString());
\ No newline at end of file
diff --git a/entity/Product_entity/recordcontainers/db/onDBUpdate.js b/entity/Product_entity/recordcontainers/db/onDBUpdate.js
index 01a6d02f7e5b6172f857181ce2b51be666d4cf8c..2e53f3cad9a9edf21cc5bbc6fdecc00c5001dfee 100644
--- a/entity/Product_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/Product_entity/recordcontainers/db/onDBUpdate.js
@@ -1,14 +1,3 @@
 import("Workflow_lib");
-import("system.vars");
-import("Product_lib");
-import("Entity_lib");
-
-// TODO: this is a workaround for missing possibility to react on changes of fields not connected to record Contqainer #1030023
-FieldChanges.assimilateChangeAndDispose("$field.IMAGE", function(state, value){
-    if (state == FieldChanges.STATE_CHANGED())
-        ProductUtils.setImage(vars.get("$local.uid"), value);
-    else
-        ProductUtils.removeImage(vars.get("$local.uid"));
-});
 
 WorkflowSignalSender.updated();
\ No newline at end of file
diff --git a/entity/Product_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js b/entity/Product_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js
index b8141bc3b760b0439c6a4e6e07c99b38dda33d54..dd188aaf77933759617acc567c9f1ba0cb1313dc 100644
--- a/entity/Product_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js
+++ b/entity/Product_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js
@@ -1,6 +1,11 @@
+import("Context_lib");
+import("Sql_lib");
 import("system.vars");
 import("system.result");
+//!LibFunction
+var cond = newWhere(null, newSelect("ACTIVITYLINK.OBJECT_ROWID").from("ACTIVITYLINK")
+    .join("ACTIVITY", newWhere("ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID")
+        .and("ACTIVITYLINK.OBJECT_TYPE", ContextUtils.getCurrentContextId()))
+    .where(vars.get("$local.condition")), SqlBuilder.EXISTS());
 
-var from = "ACTIVITYLINK join ACTIVITY on ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID and ACTIVITYLINK.OBJECT_TYPE = 'Product'";
-
-result.string("PRODUCTID in (select ACTIVITYLINK.OBJECT_ROWID from " + from + " where " + vars.get("$local.condition")+ ")");
\ No newline at end of file
+result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Product_entity/recordcontainers/index/query.js b/entity/Product_entity/recordcontainers/index/query.js
index e06093cbebec627842468acb868e1e5c0dd57403..b1d7ae47756f3a528ab7279735c4cfdc2b224a6f 100644
--- a/entity/Product_entity/recordcontainers/index/query.js
+++ b/entity/Product_entity/recordcontainers/index/query.js
@@ -7,7 +7,7 @@ import("KeywordRegistry_basic");
 var sqlHelper = new SqlMaskingUtils();
 var sqlQuery = newSelect([
         "PRODUCTID", //#UID
-        sqlHelper.concat(["PRODUCTCODE", "PRODUCTNAME"], " | "), //#TITLE
+        sqlHelper.concatWithSeparator(["PRODUCTCODE", "PRODUCTNAME"], " | "), //#TITLE
         KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.productGroupcode(), "GROUPCODEID"), //#DESCRIPTION
         "PRODUCTCODE"
     ])
diff --git a/entity/Productprice_entity/Productprice_entity.aod b/entity/Productprice_entity/Productprice_entity.aod
index 61bf5454ab35395bca8b5fb61db8ee6d5996cfba..26dbe5048b3b016ef6199d2c569b6ab67c3a81c9 100644
--- a/entity/Productprice_entity/Productprice_entity.aod
+++ b/entity/Productprice_entity/Productprice_entity.aod
@@ -143,6 +143,16 @@
       <name>Productprices</name>
       <titlePluralProcess>%aditoprj%/entity/Productprice_entity/entityfields/productprices/titlePluralProcess.js</titlePluralProcess>
       <recordContainer>db</recordContainer>
+      <children>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>ProductId_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>d5f4c7c4-cd21-4075-bd56-c479672dc09a</name>
@@ -163,24 +173,9 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ContactId_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>ProductId_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityConsumer>
       <name>KeywordCurrencies</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -188,14 +183,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordPricelists</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordPricelists</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -203,6 +198,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>DELIVERYTERM</name>
diff --git a/entity/Productprice_entity/recordcontainers/db/conditionProcess.js b/entity/Productprice_entity/recordcontainers/db/conditionProcess.js
index a68cf9891b46dc2d7e584e8f64da30aa40bf8543..869e14a88e9e1d32ca76dc75de6262413477ccb5 100644
--- a/entity/Productprice_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Productprice_entity/recordcontainers/db/conditionProcess.js
@@ -5,5 +5,4 @@ var cond = newWhere()
                 .andIfSet("PRODUCTPRICE.PRODUCT_ID", "$param.ProductId_param")
                 .andIfSet("PRODUCTPRICE.CONTACT_ID", "$param.ContactId_param");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Productprice_entity/recordcontainers/db/recordfieldmappings/fromquantity.displayvalue/expression.js b/entity/Productprice_entity/recordcontainers/db/recordfieldmappings/fromquantity.displayvalue/expression.js
index 9d2ad815005cb83931979b4390e103fbdb198533..cd8dcbf86f1142e272d7b70bc2b01aa1c3c3c592 100644
--- a/entity/Productprice_entity/recordcontainers/db/recordfieldmappings/fromquantity.displayvalue/expression.js
+++ b/entity/Productprice_entity/recordcontainers/db/recordfieldmappings/fromquantity.displayvalue/expression.js
@@ -7,7 +7,7 @@ import("Sql_lib");
 
 var helper = new SqlMaskingUtils();
 
-var res =  newSelect(helper.concat([helper.cast("PRODUCTPRICE.FROMQUANTITY", SQLTYPES.CHAR, 36), "' '", KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.quantityUnit(), "PRODUCT.UNIT")], "|"))
+var res =  newSelect(helper.concatWithSeparator([helper.cast("PRODUCTPRICE.FROMQUANTITY", SQLTYPES.CHAR, 36), "' '", KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.quantityUnit(), "PRODUCT.UNIT")], "|"))
                         .from("PRODUCT")
                         .where("PRODUCT.PRODUCTID = PRODUCTPRICE.PRODUCT_ID")
                         .toString()
diff --git a/entity/QuickEntry_entity/QuickEntry_entity.aod b/entity/QuickEntry_entity/QuickEntry_entity.aod
index fe83641faf97bfc9c0ccc2d595d9105d5ff1b3d2..8f84148e24fc98d4526789179082ecc244fe9b9e 100644
--- a/entity/QuickEntry_entity/QuickEntry_entity.aod
+++ b/entity/QuickEntry_entity/QuickEntry_entity.aod
@@ -22,11 +22,6 @@
     </entityField>
     <entityConsumer>
       <name>Adresses</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Address_entity</entityName>
-        <fieldName>QuickEntryAdresses</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -37,14 +32,14 @@
           <valueProcess>%aditoprj%/entity/QuickEntry_entity/entityfields/adresses/children/contacttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Communications</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Communication_entity</entityName>
-        <fieldName>QuickEntryCommunications</fieldName>
+        <entityName>Address_entity</entityName>
+        <fieldName>QuickEntryAdresses</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Communications</name>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -55,6 +50,11 @@
           <valueProcess>%aditoprj%/entity/QuickEntry_entity/entityfields/communications/children/additionalcontactids_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Communication_entity</entityName>
+        <fieldName>QuickEntryCommunications</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Languages</name>
@@ -94,25 +94,20 @@
     </entityField>
     <entityConsumer>
       <name>Salutations</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>SalutationDistinct_entity</entityName>
-        <fieldName>Salutations</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>Language_param</name>
           <valueProcess>%aditoprj%/entity/QuickEntry_entity/entityfields/salutations/children/language_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>SalutationTitles</name>
       <dependency>
         <name>dependency</name>
-        <entityName>SalutationTitleDistinct_entity</entityName>
-        <fieldName>SalutationTitles</fieldName>
+        <entityName>SalutationDistinct_entity</entityName>
+        <fieldName>Salutations</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>SalutationTitles</name>
       <children>
         <entityParameter>
           <name>Language_param</name>
@@ -123,20 +118,25 @@
           <valueProcess>%aditoprj%/entity/QuickEntry_entity/entityfields/salutationtitles/children/salutation_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Contacts</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Person_entity</entityName>
-        <fieldName>QuickEntryContacts</fieldName>
+        <entityName>SalutationTitleDistinct_entity</entityName>
+        <fieldName>SalutationTitles</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Contacts</name>
       <children>
         <entityParameter>
           <name>OrgId_param</name>
           <valueProcess>%aditoprj%/entity/QuickEntry_entity/entityfields/contacts/children/orgid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Person_entity</entityName>
+        <fieldName>QuickEntryContacts</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>ISOLANGUAGE</name>
@@ -147,11 +147,6 @@
     </entityField>
     <entityConsumer>
       <name>Activities</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Activity_entity</entityName>
-        <fieldName>LinkedObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>Direction_param</name>
@@ -170,6 +165,11 @@
           <valueProcess>%aditoprj%/entity/QuickEntry_entity/entityfields/activities/children/objectid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Activity_entity</entityName>
+        <fieldName>LinkedObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>DATE_NEW</name>
@@ -185,11 +185,6 @@
     </entityField>
     <entityConsumer>
       <name>Salesprojects</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Salesproject_entity</entityName>
-        <fieldName>QuickEntrySalesprojects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -200,14 +195,14 @@
           <valueProcess>%aditoprj%/entity/QuickEntry_entity/entityfields/salesprojects/children/presettitle_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>OrgAddresses</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Address_entity</entityName>
-        <fieldName>QuickEntryAdresses</fieldName>
+        <entityName>Salesproject_entity</entityName>
+        <fieldName>QuickEntrySalesprojects</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>OrgAddresses</name>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -218,6 +213,11 @@
           <valueProcess>%aditoprj%/entity/QuickEntry_entity/entityfields/orgaddresses/children/contacttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Address_entity</entityName>
+        <fieldName>QuickEntryAdresses</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>leadQuickAcquisition</name>
@@ -228,11 +228,6 @@
     </entityField>
     <entityConsumer>
       <name>OrgAndPersDuplicates</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AnyContact_entity</entityName>
-        <fieldName>ContactsByIds</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactIds_param</name>
@@ -243,6 +238,11 @@
           <valueProcess>%aditoprj%/entity/QuickEntry_entity/entityfields/organdpersduplicates/children/withprivatepersons_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AnyContact_entity</entityName>
+        <fieldName>ContactsByIds</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/RoleChildren_entity/recordcontainers/jdito/contentProcess.js b/entity/RoleChildren_entity/recordcontainers/jdito/contentProcess.js
index a76ad51dc5d86201281871b40f73bcd967bf8c44..9a225fe5bc38edbdec6a301f5a51f87e68e2a7dc 100644
--- a/entity/RoleChildren_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/RoleChildren_entity/recordcontainers/jdito/contentProcess.js
@@ -4,6 +4,8 @@ import("system.db");
 import("system.vars");
 import("system.result");
 import("system.util");
+import("Permission_lib");
+import("system.logging");
 
 var alias = SqlUtils.getSystemAlias();
 var selectedRoleName = vars.exists("$param.RoleId_param") && vars.get("$param.RoleId_param");
@@ -17,10 +19,7 @@ if (selectedRoleType == "" && selectedRoleName != "") {
 
 // roles can only be assigned to CUSTOM roles -> selected role has to be a viable CUSTOM role
 if (selectedRoleName && selectedRoleType == "CUSTOM") {
-    var childRoles = newSelect("ID, CHILD_ROLE", alias)
-        .from("ASYS_ROLES_CHILDREN")
-        .where("ASYS_ROLES_CHILDREN.PARENT_ROLE", selectedRoleName)
-        .table();
+    var childRoles = PermissionUtil.getChildRoles(selectedRoleName);
     
     for each (let childRole in childRoles) {
         children.push([childRole[0], childRole[1], selectedRoleName]);
diff --git a/entity/Role_entity/Role_entity.aod b/entity/Role_entity/Role_entity.aod
index b1e75e67c1de2cb4e7b72f7307b74a81a6e6f0cf..cb7d090b6506b259734f2a52ee4e40639f896c31 100644
--- a/entity/Role_entity/Role_entity.aod
+++ b/entity/Role_entity/Role_entity.aod
@@ -41,34 +41,41 @@
     </entityField>
     <entityConsumer>
       <name>TheirPermissions</name>
+      <children>
+        <entityParameter>
+          <name>RoleTitle_param</name>
+          <valueProcess>%aditoprj%/entity/Role_entity/entityfields/theirpermissions/children/roletitle_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
       <dependency>
         <name>dependency</name>
         <entityName>PermissionDetail_entity</entityName>
         <fieldName>Permissions</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>PermissionOverviews</name>
       <children>
         <entityParameter>
           <name>RoleTitle_param</name>
+          <valueProcess>%aditoprj%/entity/Role_entity/entityfields/permissionoverviews/children/roletitle_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>PermissionOverviews</name>
       <dependency>
         <name>dependency</name>
         <entityName>PermissionOverview_entity</entityName>
         <fieldName>PermissionOverviews</fieldName>
       </dependency>
-      <children>
-        <entityParameter>
-          <name>RoleTitle_param</name>
-          <valueProcess>%aditoprj%/entity/Role_entity/entityfields/permissionoverviews/children/roletitle_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
     </entityConsumer>
     <entityProvider>
       <name>Roles</name>
       <recordContainer>jDito</recordContainer>
+      <children>
+        <entityParameter>
+          <name>ExcludeRoles_param</name>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>64d800d0-4db5-4b95-ab6a-9197b83cc09c</name>
@@ -89,12 +96,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ExcludeRoles_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>ExcludeRoles_param</name>
@@ -132,11 +133,6 @@
     <entityConsumer>
       <name>RoleChildrens</name>
       <onValidation>%aditoprj%/entity/Role_entity/entityfields/rolechildrens/onValidation.js</onValidation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>RoleChildren_entity</entityName>
-        <fieldName>RoleChildrens</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>RoleId_param</name>
@@ -147,6 +143,11 @@
           <valueProcess>%aditoprj%/entity/Role_entity/entityfields/rolechildrens/children/roletype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>RoleChildren_entity</entityName>
+        <fieldName>RoleChildrens</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>deleteEverythingLinkedToRole</name>
@@ -157,22 +158,26 @@
     </entityActionField>
     <entityConsumer>
       <name>RoleParents</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>RoleParent_entity</entityName>
-        <fieldName>RoleParents</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>RoleId_param</name>
           <valueProcess>%aditoprj%/entity/Role_entity/entityfields/roleparents/children/roleid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>RoleParent_entity</entityName>
+        <fieldName>RoleParents</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
       <useAggregates v="true" />
     </entityProvider>
+    <entityProvider>
+      <name>FilterRolesWithoutPermission</name>
+      <usePermissions v="false" />
+    </entityProvider>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
diff --git a/entity/Role_entity/entityfields/theirpermissions/children/roletitle_param/valueProcess.js b/entity/Role_entity/entityfields/theirpermissions/children/roletitle_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7b3054d1905ef4ec956c69802f6cc103966b4d08
--- /dev/null
+++ b/entity/Role_entity/entityfields/theirpermissions/children/roletitle_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.ROLENAME"));
\ No newline at end of file
diff --git a/entity/SalesprojectAnalyses_entity/SalesprojectAnalyses_entity.aod b/entity/SalesprojectAnalyses_entity/SalesprojectAnalyses_entity.aod
index 5b2898641b5f0cf0d33f29c1dd3c81bd07806201..3c35c7cf03086585c3973d2112236a060fc1d1c7 100644
--- a/entity/SalesprojectAnalyses_entity/SalesprojectAnalyses_entity.aod
+++ b/entity/SalesprojectAnalyses_entity/SalesprojectAnalyses_entity.aod
@@ -3,7 +3,7 @@
   <name>SalesprojectAnalyses_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/entity/SalesprojectAnalyses_entity/documentation.adoc</documentation>
-  <title>Salesproject Analyses</title>
+  <title>Sales Project Analyses</title>
   <iconId>VAADIN:PIE_CHART</iconId>
   <recordContainer>jdito</recordContainer>
   <entityFields>
@@ -41,14 +41,14 @@
     </entityField>
     <entityField>
       <name>SENT_OFFERS</name>
-      <title>Sent offers</title>
+      <title>Sent Offers</title>
       <contentType>NUMBER</contentType>
       <state>READONLY</state>
       <valueProcess>%aditoprj%/entity/SalesprojectAnalyses_entity/entityfields/sent_offers/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>OPEN_SALESPROJECTS</name>
-      <title>Open salesprojects</title>
+      <title>Open Salesprojects</title>
       <contentType>NUMBER</contentType>
       <state>READONLY</state>
       <valueProcess>%aditoprj%/entity/SalesprojectAnalyses_entity/entityfields/open_salesprojects/valueProcess.js</valueProcess>
diff --git a/entity/SalesprojectConversionRate_entity/SalesprojectConversionRate_entity.aod b/entity/SalesprojectConversionRate_entity/SalesprojectConversionRate_entity.aod
index e7474ae27a84b2eb23c98236397328ac396df494..2432f8fbbf75729f20244a387f7868c528ab3265 100644
--- a/entity/SalesprojectConversionRate_entity/SalesprojectConversionRate_entity.aod
+++ b/entity/SalesprojectConversionRate_entity/SalesprojectConversionRate_entity.aod
@@ -18,7 +18,7 @@
     <entityField>
       <name>AB_KEYWORD_ENTRYID_TITLE</name>
       <title>Phase</title>
-      <displayValueProcess>%aditoprj%/entity/SalesprojectConversionRate_entity/entityfields/ab_keyword_entryid_title/displayValueProcess.js</displayValueProcess>
+      <groupable v="false" />
     </entityField>
     <entityActionField>
       <name>openSalesprojects</name>
@@ -76,6 +76,11 @@
           <name>AB_KEYWORD_ENTRYID_TITLE.value</name>
         </jDitoRecordFieldMapping>
       </recordFieldMappings>
+      <aggregateFieldMappings>
+        <jDitoRecordFieldMapping>
+          <name>conversionRate_aggregate.value</name>
+        </jDitoRecordFieldMapping>
+      </aggregateFieldMappings>
       <filterExtensions>
         <filterExtension>
           <name>Year</name>
diff --git a/entity/SalesprojectConversionRate_entity/entityfields/ab_keyword_entryid_title/displayValueProcess.js b/entity/SalesprojectConversionRate_entity/entityfields/ab_keyword_entryid_title/displayValueProcess.js
deleted file mode 100644
index dc763b0c6156aa6fa4a2e293886ff75fc6cd7e20..0000000000000000000000000000000000000000
--- a/entity/SalesprojectConversionRate_entity/entityfields/ab_keyword_entryid_title/displayValueProcess.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-import("system.vars");
-import("system.translate");
-import("system.result");
-
-// It's important to translate twice, because there are Phase with an extra translation.
-result.string(KeywordUtils.getViewValue($KeywordRegistry.salesprojectPhase(), vars.get("$field.AB_KEYWORD_ENTRYID_TITLE")));
\ No newline at end of file
diff --git a/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/contentProcess.js b/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/contentProcess.js
index 95781d32513a9442d468d93568947555bfcdef3d..32a839f38d92337f1f7acd8cf64fc5ba961cd529 100644
--- a/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/contentProcess.js
@@ -1,65 +1,49 @@
-import("JditoFilter_lib");
-import("Salesproject_lib");
-import("system.datetime");
-import("system.translate");
 import("system.result");
-import("system.vars");
+import("JditoFilter_lib");
 import("Sql_lib");
 import("KeywordRegistry_basic");
-import("system.neon");
+import("Salesproject_lib");
+import("system.vars");
 
-let sqlHelper = new SqlMaskingUtils();
 let filter = vars.get("$local.filters");
-let dateStartYear = sqlHelper.yearFromDate("SALESPROJECT_MILESTONE.DATE_START");
-let dateStartMonth = sqlHelper.monthFromDate("SALESPROJECT_MILESTONE.DATE_START");
-let isFirstPhase = true;
-let data = [];
+let gruppingFields = SalesprojectConversionRate.groupMapping(false);
+var filterPhasenIDs = [];
 
-    
-let  gruppingFields =  {
-    "AB_KEYWORD_ENTRYID_KEYID": ["AB_KEYWORD_ENTRY.KEYID", "AB_KEYWORD_ENTRY.TITLE", "AB_KEYWORD_ENTRY.SORTING"], 
-    "#EXTENSION.Year.Year#NUMBER" : [dateStartYear, dateStartYear, dateStartYear], 
-    "#EXTENSION.Month.Month#NUMBER" : [dateStartMonth, dateStartMonth, dateStartMonth]
-};
+var phasenManager = new SalesprojectConversionRate();
 
-let sql = new SqlBuilder()
+var sql = new SqlBuilder()
 .from("AB_KEYWORD_ENTRY")
 .where("AB_KEYWORD_ENTRY.CONTAINER", $KeywordRegistry.salesprojectPhase())
 .and("AB_KEYWORD_ENTRY.KEYID", $KeywordRegistry.salesprojectPhase$nego(), SqlBuilder.NOT_EQUAL());
 
 if (filter != null)
 {
-    if (JSON.stringify(filter).indexOf("AB_KEYWORD_ENTRYID_KEYID") > -1)
+    if (JSON.stringify(filter).indexOf("AB_KEYWORD_ENTRYID_KEYID") > -1 && vars.exists("$local.grouped"))
     {
-        let phasenFilter = filter.childs.filter(function (child) {
+        var phasenFilter = filter.childs.filter(function (child) {
             return (child.childs.filter(function (child) {
                 return child.name == "AB_KEYWORD_ENTRYID_KEYID";
             })).length > 0
-        })[0];
-        phasenFilter.operator = "OR";
-        let pre = newSelect("PRE.KEYID").from("AB_KEYWORD_ENTRY").join("AB_KEYWORD_ENTRY", "AB_KEYWORD_ENTRY.SORTING -1 = PRE.SORTING", "PRE").where("AB_KEYWORD_ENTRY.CONTAINER", $KeywordRegistry.salesprojectPhase()).and("PRE.CONTAINER = '" + $KeywordRegistry.salesprojectPhase() + "'").and("AB_KEYWORD_ENTRY.KEYID", phasenFilter.childs[0].value).cell()
-        if (pre != "") {
-            let temp = JSON.parse(JSON.stringify(phasenFilter.childs[0]));
-            temp.value = temp.key  = pre;
-            phasenFilter.childs.push(temp);
-            isFirstPhase = false;
-        }
+        });
+        
+        phasenFilter.forEach(function (pFilter) {
+            filterPhasenIDs = filterPhasenIDs.concat(pFilter.childs.map(function (child) { return child.key;}));
+            pFilter.childs = [];
+        });
     }
+    else 
+        filterPhasenIDs = null;
     
     let filterCondition = JditoFilterUtils.getSqlCondition(filter, "AB_KEYWORD_ENTRY", null, SalesprojectConversionRate.filterMapping(null));
     sql.andIfSet(filterCondition);
 }
 
-
-
 if (vars.exists("$local.grouped"))
 {
     let groupedfield = vars.get("$local.grouped");
     sql.join("SALESPROJECT_MILESTONE", newWhere("SALESPROJECT_MILESTONE.MILESTONEVALUE = AB_KEYWORD_ENTRY.KEYID"))
         // COUNT, ID, TITLE
-        .select(["COUNT(*)", gruppingFields[groupedfield][0], gruppingFields[groupedfield][1]])
-        .groupBy(["AB_KEYWORD_ENTRY.KEYID", "AB_KEYWORD_ENTRY.SORTING", gruppingFields[groupedfield][0], gruppingFields[groupedfield][1], gruppingFields[groupedfield][2]])
-        .orderBy([gruppingFields[groupedfield][2], "AB_KEYWORD_ENTRY.SORTING"]);
+        .select(["SALESPROJECT_MILESTONE.SALESPROJECT_ID", "SALESPROJECT_MILESTONE.MILESTONEVALUE", gruppingFields[groupedfield][0]]);
         
     if (filter != null)
     {
@@ -67,60 +51,11 @@ if (vars.exists("$local.grouped"))
         sql.andIfSet(filterCondition);
     }
     
-    let sqlData = sql.table();
-    let row = {
-        "id": "", 
-        "title": "",
-        "sumRate": 0.0, 
-        "sumCount": 0,
-        "count" : 0,
-        "getTitle": function (pGroupedField) {
-            if (pGroupedField == "#EXTENSION.Month.Month#NUMBER" )
-            {
-                // When convert the Number of the Month to the Month name it doesn't matter which Year is used, so here is the Year 2020 hard-coded.
-                let monthDate = new Date(2020, parseInt(this.title)-1);
-                return translate.text(datetime.toDate(monthDate.getTime(), "MMMM", "UTC"));
-            }
-            return translate.text(translate.text(this.title));
-        }
-    };
-    let pre = -1;
-    
-    for (let i = 0; i <= sqlData.length; i++){
-        if (i == sqlData.length || sqlData[i][1] != row.id) 
-        {
-            if (row.id != "")
-                data.push([row.sumCount + "", row.id, row.getTitle(groupedfield), row.sumRate / row.count]);
-            
-            if (i == sqlData.length)
-                break;
-            
-            row.id = sqlData[i][1];
-            row.title = sqlData[i][2];
-            row.sumRate = 0;
-            row.sumCount = 0;
-            row.count =  0;
-            
-            if (groupedfield != "AB_KEYWORD_ENTRYID_KEYID") {
-                pre = -1;
-            }
-        }
-        
-        if (pre != -1)
-            row.sumRate += (parseFloat(sqlData[i][0]) / pre);
-        
-        if (isFirstPhase || pre != -1)
-        {
-            row.count++;
-            row.sumCount += parseInt(sqlData[i][0]);
-        }
-            
-        
-        pre = parseFloat(sqlData[i][0]);
-        
-        
-    }
-    result.object(data);
+    sql.table().forEach(function (row) {
+        phasenManager.insertMilestone(row[0], row[1],groupedfield == "AB_KEYWORD_ENTRYID_KEYID" ? null :row[2] ); // TODO: Gruppingfield 
+    });
+
+    result.object(phasenManager.getConversionRates(filterPhasenIDs));
 } 
 else 
 {
diff --git a/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/rowCountProcess.js b/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/rowCountProcess.js
index 8615399a3833200e8f55e5e176fd493458a417ab..f30b4775d6c3f4356b76028e7faa2a488a3a2d66 100644
--- a/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/rowCountProcess.js
+++ b/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/rowCountProcess.js
@@ -1,32 +1,65 @@
-import("KeywordRegistry_basic");
-import("system.vars");
 import("system.result");
-import("Sql_lib");
 import("JditoFilter_lib");
+import("Sql_lib");
+import("KeywordRegistry_basic");
 import("Salesproject_lib");
+import("system.vars");
 
-var groupMapping = SalesprojectConversionRate.groupMapping(true);
-var phases = new SqlBuilder().select(["COUNT(*)"]).from("AB_KEYWORD_ENTRY")
-.join("SALESPROJECT_MILESTONE", "AB_KEYWORD_ENTRY.KEYID = SALESPROJECT_MILESTONE.MILESTONEVALUE")
+let filter = vars.get("$local.filters");
+let gruppingFields = SalesprojectConversionRate.groupMapping(false);
+var filterPhasenIDs = [];
+
+var phasenManager = new SalesprojectConversionRate();
+
+var sql = new SqlBuilder()
+.from("AB_KEYWORD_ENTRY")
 .where("AB_KEYWORD_ENTRY.CONTAINER", $KeywordRegistry.salesprojectPhase())
 .and("AB_KEYWORD_ENTRY.KEYID", $KeywordRegistry.salesprojectPhase$nego(), SqlBuilder.NOT_EQUAL());
 
-var filter = vars.get("$local.filters");
-
 if (filter != null)
 {
-    var filterCondition = JditoFilterUtils.getSqlCondition(vars.get("$local.filters"), "AB_KEYWORD_ENTRY", null, SalesprojectConversionRate.filterMapping("SALESPROJECT_MILESTONE.DATE_START", true));
-    phases.andIfSet(filterCondition);
+    if (JSON.stringify(filter).indexOf("AB_KEYWORD_ENTRYID_KEYID") > -1 && vars.exists("$local.grouped"))
+    {
+        var phasenFilter = filter.childs.filter(function (child) {
+            return (child.childs.filter(function (child) {
+                return child.name == "AB_KEYWORD_ENTRYID_KEYID";
+            })).length > 0
+        });
+        
+        phasenFilter.forEach(function (pFilter) {
+            filterPhasenIDs = filterPhasenIDs.concat(pFilter.childs.map(function (child) { return child.key;}));
+            pFilter.childs = [];
+        });
+    }
+    else 
+        filterPhasenIDs = null;
+    
+    let filterCondition = JditoFilterUtils.getSqlCondition(filter, "AB_KEYWORD_ENTRY", null, SalesprojectConversionRate.filterMapping(null));
+    sql.andIfSet(filterCondition);
 }
 
 if (vars.exists("$local.grouped"))
 {
-    var groupedfield = vars.get("$local.grouped")
-    phases.groupBy([groupMapping[groupedfield]]);
+    let groupedfield = vars.get("$local.grouped");
+    sql.join("SALESPROJECT_MILESTONE", newWhere("SALESPROJECT_MILESTONE.MILESTONEVALUE = AB_KEYWORD_ENTRY.KEYID"))
+        // COUNT, ID, TITLE
+        .select(["SALESPROJECT_MILESTONE.SALESPROJECT_ID", "SALESPROJECT_MILESTONE.MILESTONEVALUE", gruppingFields[groupedfield][0]]);
+        
+    if (filter != null)
+    {
+        filterCondition = JditoFilterUtils.getSqlCondition(filter, "SALESPROJECT_MILESTONE", null, SalesprojectConversionRate.filterMapping("SALESPROJECT_MILESTONE.DATE_START", false, "SALESPROJECT_MILESTONE"));
+        sql.andIfSet(filterCondition);
+    }
+    
+    sql.table().forEach(function (row) {
+        phasenManager.insertMilestone(row[0], row[1],groupedfield == "AB_KEYWORD_ENTRYID_KEYID" ? null :row[2] ); // TODO: Gruppingfield 
+    });
+
+    result.object(phasenManager.getConversionRates(filterPhasenIDs).length);
 } 
 else 
 {
-    phases.groupBy(["AB_KEYWORD_ENTRY.AB_KEYWORD_ENTRYID", "AB_KEYWORD_ENTRY.KEYID", "AB_KEYWORD_ENTRY.TITLE", "AB_KEYWORD_ENTRY.SORTING"]);
-}
-
-result.string(phases.arrayColumn().length);
\ No newline at end of file
+    sql.select(["AB_KEYWORD_ENTRY.AB_KEYWORD_ENTRYID", "AB_KEYWORD_ENTRY.KEYID", "AB_KEYWORD_ENTRY.TITLE"])
+        .orderBy("AB_KEYWORD_ENTRY.SORTING");
+    result.object(sql.table().length);
+}
\ No newline at end of file
diff --git a/entity/SalesprojectMilestone_entity/SalesprojectMilestone_entity.aod b/entity/SalesprojectMilestone_entity/SalesprojectMilestone_entity.aod
index b1183b77d06223b47e856ca9f4a9c8b62fd65808..8da44d6020598d2c9a5d4a108f7e9d5017a85e11 100644
--- a/entity/SalesprojectMilestone_entity/SalesprojectMilestone_entity.aod
+++ b/entity/SalesprojectMilestone_entity/SalesprojectMilestone_entity.aod
@@ -60,10 +60,6 @@
       <name>SalesprojectMilestones</name>
       <recordContainer>db</recordContainer>
       <children>
-        <entityParameter>
-          <name>SalesprojectId_param</name>
-          <expose v="true" />
-        </entityParameter>
         <entityParameter>
           <name>Kind_param</name>
           <expose v="false" />
@@ -77,17 +73,17 @@
     </entityField>
     <entityConsumer>
       <name>Keywords</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/SalesprojectMilestone_entity/entityfields/keywords/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>Kind_param</name>
@@ -96,6 +92,12 @@
     </entityParameter>
     <entityProvider>
       <name>StateMilestones</name>
+      <children>
+        <entityParameter>
+          <name>Kind_param</name>
+          <valueProcess>%aditoprj%/entity/SalesprojectMilestone_entity/entityfields/statemilestones/children/kind_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>f705534d-dcf3-4049-a1ea-3f75e93aa2f0</name>
@@ -104,15 +106,15 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
+    </entityProvider>
+    <entityProvider>
+      <name>PhaseMilestones</name>
       <children>
         <entityParameter>
           <name>Kind_param</name>
-          <valueProcess>%aditoprj%/entity/SalesprojectMilestone_entity/entityfields/statemilestones/children/kind_param/valueProcess.js</valueProcess>
+          <valueProcess>%aditoprj%/entity/SalesprojectMilestone_entity/entityfields/phasemilestones/children/kind_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityProvider>
-    <entityProvider>
-      <name>PhaseMilestones</name>
       <dependencies>
         <entityDependency>
           <name>b132527b-990c-416a-b2d6-ddbe6f4397e2</name>
@@ -121,12 +123,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>Kind_param</name>
-          <valueProcess>%aditoprj%/entity/SalesprojectMilestone_entity/entityfields/phasemilestones/children/kind_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityConsumer>
       <name>SalesProjectPhases</name>
diff --git a/entity/SalesprojectMilestone_entity/contentTitleProcess.js b/entity/SalesprojectMilestone_entity/contentTitleProcess.js
index 474d304708cb9ee5be375f81044a2529c335641a..27695c3f691e8b1c5ac7e41181b80737355fc514 100644
--- a/entity/SalesprojectMilestone_entity/contentTitleProcess.js
+++ b/entity/SalesprojectMilestone_entity/contentTitleProcess.js
@@ -2,9 +2,9 @@ import("system.vars");
 import("system.translate");
 import("system.result");
 
-if (vars.exists("$field.TYPE") && vars.get("$field.TYPE"))
+if (vars.get("$field.KIND"))
 {
-    result.string(translate.text("Milestones") + " " + translate.text(vars.get("$field.TYPE")));
+    result.string(translate.text("Milestones") + " " + translate.text(vars.get("$field.KIND")));
 }
 else
     result.string(translate.text("Milestones"));
\ No newline at end of file
diff --git a/entity/SalesprojectMilestone_entity/entityfields/keywords/children/containername_param/valueProcess.js b/entity/SalesprojectMilestone_entity/entityfields/keywords/children/containername_param/valueProcess.js
index 1b532aec63043fba84acf422369129fb9706bc12..ff40ad745a0a2d0676d08287e93bad6602a0b35b 100644
--- a/entity/SalesprojectMilestone_entity/entityfields/keywords/children/containername_param/valueProcess.js
+++ b/entity/SalesprojectMilestone_entity/entityfields/keywords/children/containername_param/valueProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$field.TYPE"));
\ No newline at end of file
+result.string(vars.get("$field.KIND"));
\ No newline at end of file
diff --git a/entity/SalesprojectMilestone_entity/entityfields/milestonevalue/titleProcess.js b/entity/SalesprojectMilestone_entity/entityfields/milestonevalue/titleProcess.js
index f02879713e48f2970f9de7b2e423bb1b329e40cd..38663022e20ea6ef8cbaedf0f49a27f94d93faaf 100644
--- a/entity/SalesprojectMilestone_entity/entityfields/milestonevalue/titleProcess.js
+++ b/entity/SalesprojectMilestone_entity/entityfields/milestonevalue/titleProcess.js
@@ -2,9 +2,9 @@ import("system.vars");
 import("system.translate");
 import("system.result");
 
-if (vars.exists("$field.TYPE") && vars.get("$field.TYPE"))
+if (vars.get("$field.KIND"))
 {
-    result.string(translate.text(vars.get("$field.TYPE")));
+    result.string(translate.text(vars.get("$field.KIND")));
 }
 else
     result.string(translate.text("Milestones"));
\ No newline at end of file
diff --git a/entity/SalesprojectMilestone_entity/recordcontainers/db/conditionProcess.js b/entity/SalesprojectMilestone_entity/recordcontainers/db/conditionProcess.js
index 9a21e39ea75ecfa1a1d8989379141d381f361144..06315b6b320bd3388370dccb3c501946043083c7 100644
--- a/entity/SalesprojectMilestone_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/SalesprojectMilestone_entity/recordcontainers/db/conditionProcess.js
@@ -5,5 +5,4 @@ var cond = newWhere()
             .andIfSet("SALESPROJECT_MILESTONE.SALESPROJECT_ID", "$param.SalesprojectId_param")
             .andIfSet("SALESPROJECT_MILESTONE.KIND", "$param.Kind_param");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/SalesprojectSource_entity/SalesprojectSource_entity.aod b/entity/SalesprojectSource_entity/SalesprojectSource_entity.aod
index 21cf70bfb8d0e24b533bbc970d3f2ef96d272d1a..4effdbc2ceaff937a8ea9eb6a86b1f419c17a587 100644
--- a/entity/SalesprojectSource_entity/SalesprojectSource_entity.aod
+++ b/entity/SalesprojectSource_entity/SalesprojectSource_entity.aod
@@ -22,12 +22,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>SalesprojectId_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>SalesprojectId_param</name>
@@ -61,11 +55,6 @@
     </entityField>
     <entityConsumer>
       <name>KeywordSources</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -73,6 +62,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>INFO</name>
diff --git a/entity/SalesprojectSource_entity/recordcontainers/db/conditionProcess.js b/entity/SalesprojectSource_entity/recordcontainers/db/conditionProcess.js
index bad867525a17aebb0ecc286db4afeadc7f846b7f..ab13b330a620c500e29ccd63c8c4fad58ba3fcfe 100644
--- a/entity/SalesprojectSource_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/SalesprojectSource_entity/recordcontainers/db/conditionProcess.js
@@ -4,5 +4,4 @@ import("Sql_lib");
 
 var cond = newWhereIfSet("SALESPROJECT_TOUCHPOINT.SALESPROJECT_ID", "$param.SalesprojectId_param");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod
index f33a33912223de0d1e2047b7f1de11979c36c939..59562dd82e0b190e77e3cefd9f1b87e6124bf55a 100644
--- a/entity/Salesproject_entity/Salesproject_entity.aod
+++ b/entity/Salesproject_entity/Salesproject_entity.aod
@@ -6,15 +6,19 @@
   <title>Sales Project</title>
   <siblings>
     <element>SalesprojectMilestone_entity</element>
+    <element>Member_entity</element>
+    <element>MSTTeam_entity</element>
+    <element>MSTTeamLink_entity</element>
   </siblings>
   <grantDeleteProcess>%aditoprj%/entity/Salesproject_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/Salesproject_entity/contentTitleProcess.js</contentTitleProcess>
+  <contentDescriptionProcess>%aditoprj%/entity/Salesproject_entity/contentDescriptionProcess.js</contentDescriptionProcess>
   <afterUiInit>%aditoprj%/entity/Salesproject_entity/afterUiInit.js</afterUiInit>
   <onValidation>%aditoprj%/entity/Salesproject_entity/onValidation.js</onValidation>
   <useFavorites v="true" />
   <iconId>VAADIN:BOOK_DOLLAR</iconId>
   <imageProcess>%aditoprj%/entity/Salesproject_entity/imageProcess.js</imageProcess>
-  <titlePlural>Sales Projects</titlePlural>
+  <titlePlural>Salesprojects</titlePlural>
   <recordContainer>db</recordContainer>
   <entityFields>
     <entityProvider>
@@ -143,39 +147,34 @@
     </entityField>
     <entityConsumer>
       <name>SalesprojectSources</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>SalesprojectSource_entity</entityName>
-        <fieldName>SalesprojectSouces</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>SalesprojectId_param</name>
           <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/salesprojectsources/children/salesprojectid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>SalesprojectPhaseMilestones</name>
       <dependency>
         <name>dependency</name>
-        <entityName>SalesprojectMilestone_entity</entityName>
-        <fieldName>PhaseMilestones</fieldName>
+        <entityName>SalesprojectSource_entity</entityName>
+        <fieldName>SalesprojectSouces</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>SalesprojectPhaseMilestones</name>
       <children>
         <entityParameter>
           <name>SalesprojectId_param</name>
           <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/salesprojectphasemilestones/children/salesprojectid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Forecasts</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Forecast_entity</entityName>
-        <fieldName>Links</fieldName>
+        <entityName>SalesprojectMilestone_entity</entityName>
+        <fieldName>PhaseMilestones</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Forecasts</name>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
@@ -188,15 +187,15 @@
           <expose v="true" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Competitions</name>
-      <selectionMode>MULTI</selectionMode>
       <dependency>
         <name>dependency</name>
-        <entityName>Competition_entity</entityName>
+        <entityName>Forecast_entity</entityName>
         <fieldName>Links</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Competitions</name>
+      <selectionMode>MULTI</selectionMode>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -209,14 +208,14 @@
           <expose v="true" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Offers</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Offer_entity</entityName>
+        <entityName>Competition_entity</entityName>
         <fieldName>Links</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Offers</name>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -229,14 +228,14 @@
           <expose v="true" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Activities</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Activity_entity</entityName>
-        <fieldName>LinkedObjects</fieldName>
+        <entityName>Offer_entity</entityName>
+        <fieldName>Links</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Activities</name>
       <children>
         <entityParameter>
           <name>PresetLinks_param</name>
@@ -251,14 +250,14 @@
           <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/activities/children/objectid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Members</name>
       <dependency>
         <name>dependency</name>
-        <entityName>Member_entity</entityName>
-        <fieldName>WithDistrictResponsibles</fieldName>
+        <entityName>Activity_entity</entityName>
+        <fieldName>LinkedObjects</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Members</name>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -270,7 +269,24 @@
           <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/members/children/objecttype_param/valueProcess.js</valueProcess>
           <expose v="true" />
         </entityParameter>
+        <entityParameter>
+          <name>MSTTeamId_param</name>
+          <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/members/children/mstteamid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>EnableMSTeams_param</name>
+          <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/members/children/enablemsteams_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>SalesprojectCode_param</name>
+          <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/members/children/salesprojectcode_param/valueProcess.js</valueProcess>
+        </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Member_entity</entityName>
+        <fieldName>WithDistrictResponsibles</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>newOffer</name>
@@ -283,11 +299,6 @@
     <entityConsumer>
       <name>Timetrackings</name>
       <refreshParent v="true" />
-      <dependency>
-        <name>dependency</name>
-        <entityName>Timetracking_entity</entityName>
-        <fieldName>Timetrackings</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectId_param</name>
@@ -298,6 +309,11 @@
           <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/timetrackings/children/rowid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Timetracking_entity</entityName>
+        <fieldName>Timetrackings</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ContactId_param</name>
@@ -321,11 +337,6 @@
     <entityConsumer>
       <name>Documents</name>
       <selectionMode>MULTI</selectionMode>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>Documents</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -335,16 +346,20 @@
           <name>AssignmentTable_param</name>
           <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
+        <entityParameter>
+          <name>MSTTeamId_param</name>
+          <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/documents/children/mstteamid_param/valueProcess.js</valueProcess>
+        </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>MainDocuments</name>
-      <stateProcess>%aditoprj%/entity/Salesproject_entity/entityfields/maindocuments/stateProcess.js</stateProcess>
       <dependency>
         <name>dependency</name>
         <entityName>Document_entity</entityName>
-        <fieldName>MainDocuments</fieldName>
+        <fieldName>Documents</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>MainDocuments</name>
+      <stateProcess>%aditoprj%/entity/Salesproject_entity/entityfields/maindocuments/stateProcess.js</stateProcess>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -355,6 +370,11 @@
           <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/maindocuments/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>MainDocuments</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>newTimetracking</name>
@@ -365,11 +385,6 @@
     </entityActionField>
     <entityConsumer>
       <name>KeywordProbabilties</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -378,14 +393,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordStates</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordStates</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -393,6 +408,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>newActivity</name>
@@ -412,17 +432,17 @@
     <entityConsumer>
       <name>KeywordWonLost</name>
       <selectionMode>MULTI</selectionMode>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/keywordwonlost/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>REASONS</name>
@@ -439,6 +459,17 @@
     </entityField>
     <entityProvider>
       <name>Salesprojects</name>
+      <children>
+        <entityParameter>
+          <name>ContactId_param</name>
+          <expose v="true" />
+          <mandatory v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>PresetTitle_param</name>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>0925d17f-a26a-4641-aaf4-0f74796fefa7</name>
@@ -459,17 +490,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ContactId_param</name>
-          <expose v="true" />
-          <mandatory v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>PresetTitle_param</name>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityActionField>
       <name>newTask</name>
@@ -480,11 +500,6 @@
     <entityConsumer>
       <name>Tasks</name>
       <stateProcess>%aditoprj%/entity/Salesproject_entity/entityfields/tasks/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Task_entity</entityName>
-        <fieldName>Tasks</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>RowId_param</name>
@@ -499,17 +514,14 @@
           <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/tasks/children/objectid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Task_entity</entityName>
+        <fieldName>Tasks</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>OpenSalesprojects</name>
-      <dependencies>
-        <entityDependency>
-          <name>631f55f9-fb0f-4205-bdb8-6e3476268ab4</name>
-          <entityName>Offer_entity</entityName>
-          <fieldName>Salesprojects</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>Status_param</name>
@@ -520,6 +532,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>631f55f9-fb0f-4205-bdb8-6e3476268ab4</name>
+          <entityName>Offer_entity</entityName>
+          <fieldName>Salesprojects</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityParameter>
       <name>Status_param</name>
@@ -528,27 +548,22 @@
     </entityParameter>
     <entityConsumer>
       <name>SalesprojectStateMilestones</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>SalesprojectMilestone_entity</entityName>
-        <fieldName>StateMilestones</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>SalesprojectId_param</name>
           <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/salesprojectstatemilestones/children/salesprojectid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>SalesprojectMilestone_entity</entityName>
+        <fieldName>StateMilestones</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Attributes</name>
       <stateProcess>%aditoprj%/entity/Salesproject_entity/entityfields/attributes/stateProcess.js</stateProcess>
       <onValidation>%aditoprj%/entity/Salesproject_entity/entityfields/attributes/onValidation.js</onValidation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>AttributeRelations</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
@@ -559,15 +574,15 @@
           <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/attributes/children/objectrowid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>AttributeTree</name>
-      <stateProcess>%aditoprj%/entity/Salesproject_entity/entityfields/attributetree/stateProcess.js</stateProcess>
       <dependency>
         <name>dependency</name>
         <entityName>AttributeRelation_entity</entityName>
-        <fieldName>TreeProvider</fieldName>
+        <fieldName>AttributeRelations</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>AttributeTree</name>
+      <stateProcess>%aditoprj%/entity/Salesproject_entity/entityfields/attributetree/stateProcess.js</stateProcess>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
@@ -578,29 +593,29 @@
           <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/attributetree/children/objectrowid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>LogHistories</name>
       <dependency>
         <name>dependency</name>
-        <entityName>LogHistory_entity</entityName>
-        <fieldName>LogHistoryProvider</fieldName>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>TreeProvider</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>LogHistories</name>
       <children>
         <entityParameter>
           <name>tablenames_param</name>
           <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>LogHistory_entity</entityName>
+        <fieldName>LogHistoryProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Classifications</name>
       <refreshParent v="true" />
-      <dependency>
-        <name>dependency</name>
-        <entityName>Classification_entity</entityName>
-        <fieldName>Classifications</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowid_param</name>
@@ -615,6 +630,11 @@
           <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/classifications/children/classificationtype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Classification_entity</entityName>
+        <fieldName>Classifications</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>RemainingTime</name>
@@ -628,11 +648,6 @@
     </entityField>
     <entityConsumer>
       <name>SalesprojectForecastCharts</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Turnover_entity</entityName>
-        <fieldName>FilteredTurnovers</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>SalesprojectId_param</name>
@@ -651,20 +666,25 @@
           <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/salesprojectforecastcharts/children/yearcounttoshow_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>SalesprojectPhaseStepper</name>
       <dependency>
         <name>dependency</name>
-        <entityName>SalesprojectPhase_entity</entityName>
-        <fieldName>Phases</fieldName>
+        <entityName>Turnover_entity</entityName>
+        <fieldName>FilteredTurnovers</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>SalesprojectPhaseStepper</name>
       <children>
         <entityParameter>
           <name>CurrentPhase_param</name>
           <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/salesprojectphasestepper/children/currentphase_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>SalesprojectPhase_entity</entityName>
+        <fieldName>Phases</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>PHASEINFO</name>
@@ -687,17 +707,17 @@
     </entityField>
     <entityConsumer>
       <name>ProjectTypeAttribute</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Attribute_entity</entityName>
-        <fieldName>SpecificAttribute</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
           <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/projecttypeattribute/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Attribute_entity</entityName>
+        <fieldName>SpecificAttribute</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>QuickEntrySalesprojects</name>
@@ -732,6 +752,14 @@
       <name>SALESPROJECT_OBJECTTYPE</name>
       <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/salesproject_objecttype/valueProcess.js</valueProcess>
     </entityField>
+    <entityField>
+      <name>MST_TEAM_ID</name>
+      <title>Team</title>
+      <linkedContext>MSTTeam</linkedContext>
+      <state>INVISIBLE</state>
+      <stateProcess>%aditoprj%/entity/Salesproject_entity/entityfields/mst_team_id/stateProcess.js</stateProcess>
+      <displayValueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/mst_team_id/displayValueProcess.js</displayValueProcess>
+    </entityField>
     <entityField>
       <name>COUNT</name>
       <title>Count</title>
@@ -751,6 +779,12 @@
       <title>Classification</title>
       <groupable v="true" />
     </entityField>
+    <entityField>
+      <name>DATE_NEW</name>
+    </entityField>
+    <entityField>
+      <name>ACTIVE</name>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -791,6 +825,13 @@
           <isUIDTable v="false" />
           <readonly v="true" />
         </linkInformation>
+        <linkInformation>
+          <name>44fba381-e477-4a92-ba82-fc22c3d98c23</name>
+          <tableName>MST_TEAM</tableName>
+          <primaryKey>MST_TEAMID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
       </linkInformation>
       <recordFieldMappings>
         <dbRecordFieldMapping>
@@ -892,6 +933,10 @@
           <isFilterable v="true" />
           <isLookupFilter v="true" />
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>MST_TEAM_ID.value</name>
+          <recordfield>MST_TEAM.MST_TEAMID</recordfield>
+        </dbRecordFieldMapping>
         <aggregateFieldDbMapping>
           <name>COUNT_aggregate.value</name>
           <recordfield>SALESPROJECT.SALESPROJECTID</recordfield>
@@ -902,6 +947,18 @@
           <recordfield>CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE</recordfield>
           <isFilterable v="true" />
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>MST_TEAM_ID.displayValue</name>
+          <recordfield>MST_TEAM.TEAMNAME</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_NEW.value</name>
+          <recordfield>SALESPROJECT.STARTDATE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ACTIVE.value</name>
+          <expression>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js</expression>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
       <filterExtensions>
         <filterExtensionSet>
@@ -909,6 +966,8 @@
           <filterFieldsProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js</filterFieldsProcess>
           <filterValuesProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js</filterValuesProcess>
           <filterConditionProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js</filterConditionProcess>
+          <isGroupable v="true" />
+          <groupQueryProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/groupQueryProcess.js</groupQueryProcess>
           <filtertype>BASIC</filtertype>
         </filterExtensionSet>
         <filterExtensionSet>
@@ -952,6 +1011,7 @@
     <indexRecordContainer>
       <name>index</name>
       <configMode>INDEXGROUP_DEFINITION</configMode>
+      <searchIndexGroups />
       <indexRecordAlias>Data_alias</indexRecordAlias>
       <query>%aditoprj%/entity/Salesproject_entity/recordcontainers/index/query.js</query>
       <affectedTables>
diff --git a/entity/Salesproject_entity/contentDescriptionProcess.js b/entity/Salesproject_entity/contentDescriptionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..3e00d9c6738bf8df48a424143dcf200df3fece54
--- /dev/null
+++ b/entity/Salesproject_entity/contentDescriptionProcess.js
@@ -0,0 +1,14 @@
+import("Keyword_lib");
+import("system.translate");
+import("system.datetime");
+import("system.vars");
+import("system.result");
+import("KeywordRegistry_basic");
+
+var res = [translate.text("Phase") + ": " + KeywordUtils.getViewValue($KeywordRegistry.salesprojectPhase(), vars.get("$field.PHASE")), 
+           translate.text("Classification: ") + vars.get("$field.CLASSIFICATIONVALUE"),
+           translate.text("Volume") + ": " + vars.get("$field.VOLUME.displayValue"),
+           translate.text("Probability") + ": " + vars.get("$field.PROBABILITY.displayValue"),
+           translate.text("Creation date") + ": " + datetime.toDate(vars.get("$field.DATE_NEW"), translate.text("dd.MM.yyyy"))];
+
+result.string(res.join(" | "));
\ No newline at end of file
diff --git a/entity/Salesproject_entity/contentTitleProcess.js b/entity/Salesproject_entity/contentTitleProcess.js
index 5465ff4efe7615371cc39ef88551a10e36412f4c..dd3706b77cb1d6e5b485855656abd40eff8a5133 100644
--- a/entity/Salesproject_entity/contentTitleProcess.js
+++ b/entity/Salesproject_entity/contentTitleProcess.js
@@ -1,4 +1,6 @@
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$field.PROJECTTITLE"));
\ No newline at end of file
+var res = [vars.get("$field.PROJECTCODE"), vars.get("$field.PROJECTTITLE"), vars.get("$field.STATUS.displayValue")];
+
+result.string(res.join(" | "));
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/documents/children/mstteamid_param/valueProcess.js b/entity/Salesproject_entity/entityfields/documents/children/mstteamid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8be21737ac0e517ee8a34c4aa62b253ffb0bada9
--- /dev/null
+++ b/entity/Salesproject_entity/entityfields/documents/children/mstteamid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.MST_TEAM_ID"));
\ No newline at end of file
diff --git a/entity/WorkflowStartConfig_entity/entityfields/contexts/children/getallcontexts_param/valueProcess.js b/entity/Salesproject_entity/entityfields/members/children/enablemsteams_param/valueProcess.js
similarity index 100%
rename from entity/WorkflowStartConfig_entity/entityfields/contexts/children/getallcontexts_param/valueProcess.js
rename to entity/Salesproject_entity/entityfields/members/children/enablemsteams_param/valueProcess.js
diff --git a/entity/Salesproject_entity/entityfields/members/children/mstteamid_param/valueProcess.js b/entity/Salesproject_entity/entityfields/members/children/mstteamid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..8be21737ac0e517ee8a34c4aa62b253ffb0bada9
--- /dev/null
+++ b/entity/Salesproject_entity/entityfields/members/children/mstteamid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.MST_TEAM_ID"));
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/members/children/salesprojectcode_param/valueProcess.js b/entity/Salesproject_entity/entityfields/members/children/salesprojectcode_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..598d579e335bcff49a488b488728055a608e6da4
--- /dev/null
+++ b/entity/Salesproject_entity/entityfields/members/children/salesprojectcode_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("system.vars");
+
+result.string(vars.get("$field.PROJECTCODE"));
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/mst_team_id/displayValueProcess.js b/entity/Salesproject_entity/entityfields/mst_team_id/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..14271e0911152fe467c4283f2b8a6245288c0bc7
--- /dev/null
+++ b/entity/Salesproject_entity/entityfields/mst_team_id/displayValueProcess.js
@@ -0,0 +1,15 @@
+import("MSTeams_lib");
+import("system.result");
+import("Sql_lib");
+
+var res;
+
+if (MSTeamsUtils.isTeamsEnabled())
+    res = newSelect("TEAMNAME")
+        .from("MST_TEAM")
+        .whereIfSet("MST_TEAM.MST_TEAMID", "$field.MST_TEAM_ID")
+        .cell(true);
+else
+    res = "";
+
+result.string(res);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/mst_team_id/stateProcess.js b/entity/Salesproject_entity/entityfields/mst_team_id/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..0a84b37c599e80e8b1295c2cd50f2aa0c548041b
--- /dev/null
+++ b/entity/Salesproject_entity/entityfields/mst_team_id/stateProcess.js
@@ -0,0 +1,11 @@
+import("MSTeams_lib");
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+var res = neon.COMPONENTSTATE_INVISIBLE;
+var recordState = vars.get("$sys.recordstate");
+if (MSTeamsUtils.isTeamsEnabled() && recordState != neon.OPERATINGSTATE_NEW && recordState != neon.OPERATINGSTATE_EDIT)
+    res = neon.COMPONENTSTATE_READONLY;
+    
+result.string(res);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/onValidation.js b/entity/Salesproject_entity/onValidation.js
index c9618796815b4f0e83c28c43a12320cd981a3ed9..ffe29cce81f26b649d2866fd163f7600df045eb9 100644
--- a/entity/Salesproject_entity/onValidation.js
+++ b/entity/Salesproject_entity/onValidation.js
@@ -9,4 +9,4 @@ var endDate = vars.get("$field.ENDDATE");
 if (!DateUtils.validateBeginnBeforeEnd(startDate, endDate))
     result.string(DateUtils.getValidationFailString());
 else if(!vars.get("$field.PROJECTTITLE") && vars.get("$field.PROJECTTYPE") && vars.exists("$param.PresetTitle_param"))
-    result.string(translate.text("The Sales Project can only be filled when a company has been specified"));
\ No newline at end of file
+    result.string(translate.text("The Salesproject can only be filled when a company has been specified"));
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/conditionProcess.js b/entity/Salesproject_entity/recordcontainers/db/conditionProcess.js
index 507cd54e83ac2facada8bc80dae5fd6d8cbc9237..94792e060541b80096169073281f4bde6e365f2b 100644
--- a/entity/Salesproject_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Salesproject_entity/recordcontainers/db/conditionProcess.js
@@ -3,7 +3,6 @@ import("system.result");
 import("system.vars");
 import("Sql_lib");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(newWhereIfSet("SALESPROJECT.CONTACT_ID", "$param.ContactId_param")
                 .andIfSet("SALESPROJECT.STATUS", "$param.Status_param")
                 .toString());
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/groupQueryProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/groupQueryProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2db6219c71582c8d5d3fd91e4a8c1196fe87470b
--- /dev/null
+++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/groupQueryProcess.js
@@ -0,0 +1,10 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var sqlCond = AttributeFilterExtensionMaker.makeFilterGroupQuery("SALESPROJECT \n\
+    left join CONTACT on (SALESPROJECT.CONTACT_ID = CONTACT.CONTACTID) \n\
+    left join ORGANISATION on (CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID)\n\
+    left join CLASSIFICATIONSTORAGE on (CLASSIFICATIONSTORAGE.OBJECT_ROWID = SALESPROJECT.SALESPROJECTID)\n\
+    left join MST_TEAMLINK on (SALESPROJECT.SALESPROJECTID = MST_TEAMLINK.OBJECT_ROWID and MST_TEAMLINK.OBJECT_TYPE = 'Salesproject')\n\
+    left join MST_TEAM on (MST_TEAM.MST_TEAMID = MST_TEAMLINK.MST_TEAM_ID)");
+result.string(sqlCond);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js
index 524e35692ad0f51d4bebd9dce80d82ebfc6efc80..cf3462e69ddf08a90ec5e2a230b1c0d8bcdd3856 100644
--- a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js
+++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js
@@ -10,13 +10,17 @@ var groupedColumns = vars.get("$local.groupedlist") // The coloumns, used for gr
 var order = vars.get("$local.order");               // The order of the result
 var classificationId = vars.get("$local.name");
 classificationId = classificationId.slice(classificationId.lastIndexOf(".") + 1, classificationId.length);
-var valuefield = "''"
-var stmt = "";
 
-stmt = newSelect(isCount ? "1" : columns)
-                    .from("SALESPROJECT")
-                    .leftJoin("CLASSIFICATION", "CLASSIFICATION.OBJECT_ROWID = SALESPROJECT.SALESPROJECTID and CLASSIFICATION.OBJECT_TYPE = 'Salesproject' and CLASSIFICATION.CLASSIFICATIONTYPE_ID = '" + classificationId + "' ")
-                    .leftJoin("CLASSIFICATIONSCORE", "CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID = CLASSIFICATION.CLASSIFICATIONSCORE_ID" +  (condition != "  " ? " WHERE " + condition : ""))
-                    .groupBy(groupedColumns + (order != null && !isCount ? " ORDER BY " + order : ""))
-                    .toString();
-result.string(stmt);
\ No newline at end of file
+var sql = newSelect(isCount ? "1" : columns)
+    .from("SALESPROJECT")
+    .leftJoin("CLASSIFICATION", newWhere("CLASSIFICATION.OBJECT_ROWID = SALESPROJECT.SALESPROJECTID")
+        .and("CLASSIFICATION.OBJECT_TYPE", "Salesproject")
+        .and("CLASSIFICATION.CLASSIFICATIONTYPE_ID", classificationId))
+    .leftJoin("CLASSIFICATIONSCORE", "CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID = CLASSIFICATION.CLASSIFICATIONSCORE_ID")
+    .whereIfSet(condition.trim())
+    .groupBy(groupedColumns);
+
+if (order != null && !isCount)
+    sql.orderBy(order);
+                    
+result.string(sql.toString());
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/phase_filterextention/groupQueryProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/phase_filterextention/groupQueryProcess.js
index 341994efdf214b16a3c8dc9ba3e222c61f1323f8..308e821efaad27ef7cc947f8fcd0710229304998 100644
--- a/entity/Salesproject_entity/recordcontainers/db/filterextensions/phase_filterextention/groupQueryProcess.js
+++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/phase_filterextention/groupQueryProcess.js
@@ -25,7 +25,7 @@ else
 {
     stmt.select([groupedList , KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.salesprojectPhase(),"AB_KEYWORD_ENTRY.KEYID"), "count(*)", "count(*)"])
     if (order != null)
-        stmt.orderBy("AB_KEYWORD_ENTRY.SORTING, " +order);
+        stmt.orderBy("AB_KEYWORD_ENTRY.SORTING, " + order);
 }
 
 result.string(stmt.toString());
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/fromClauseProcess.js b/entity/Salesproject_entity/recordcontainers/db/fromClauseProcess.js
index 435ef5659c496dabc83c5ec578c05a94d5b4ed6a..5532af0f5da27e0cb1351373a063ca94cf02f786 100644
--- a/entity/Salesproject_entity/recordcontainers/db/fromClauseProcess.js
+++ b/entity/Salesproject_entity/recordcontainers/db/fromClauseProcess.js
@@ -6,4 +6,6 @@ import("KeywordRegistry_basic");
 result.string("SALESPROJECT \n\
     left join CONTACT on (SALESPROJECT.CONTACT_ID = CONTACT.CONTACTID) \n\
     left join ORGANISATION on (CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID)\n\
-    left join CLASSIFICATIONSTORAGE on (CLASSIFICATIONSTORAGE.OBJECT_ROWID = SALESPROJECT.SALESPROJECTID)");
\ No newline at end of file
+    left join CLASSIFICATIONSTORAGE on (CLASSIFICATIONSTORAGE.OBJECT_ROWID = SALESPROJECT.SALESPROJECTID)\n\
+    left join MST_TEAMLINK on (SALESPROJECT.SALESPROJECTID = MST_TEAMLINK.OBJECT_ROWID and MST_TEAMLINK.OBJECT_TYPE = 'Salesproject')\n\
+    left join MST_TEAM on (MST_TEAM.MST_TEAMID = MST_TEAMLINK.MST_TEAM_ID)");
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/onDBInsert.js b/entity/Salesproject_entity/recordcontainers/db/onDBInsert.js
index 38fe9698031dd654c3a8a1e3a37aa506cbb72a8e..ac292d8633e479eb892884d9d62652463b34c980 100644
--- a/entity/Salesproject_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/Salesproject_entity/recordcontainers/db/onDBInsert.js
@@ -1,4 +1,3 @@
-import("Classification_lib");
 import("Workflow_lib");
 import("Context_lib");
 import("Attribute_lib");
@@ -17,11 +16,6 @@ if (vars.get("$field.PROJECTTYPE"))
         .insertAttribute(vars.get("$field.PROJECTTYPE"), true);
 }
 
-var salesprojectId = vars.get("$field.SALESPROJECTID");
-var contextname = vars.get("$sys.currentcontextname");
-
-ClassificationUtils.insertEmptyClassification(salesprojectId, contextname);
-
 //start the execution in afterOperatingState, because here the dataset is not yet inserted
 vars.set("$context.workflowQueue", {});
 WorkflowSignalSender.inserted();
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js b/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js
index e08b7fd3e83a3071c963aaf2bca074bd9bfaf3f7..b81c1dd9c2cada650eca9c3555eb0c6cb51416aa 100644
--- a/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js
@@ -9,6 +9,7 @@ import("system.db");
 import("system.question");
 import("KeywordRegistry_basic");
 import("Keyword_lib");
+import("system.teams");
 
 var needToUpdateForecast = null;
 var rowdata = vars.get("$local.rowdata");
@@ -97,20 +98,26 @@ vars.get("$local.changed").forEach(function(fieldName) {
     }
 });
 
+var [serviceUrl, channelId] = newSelect(["SERVICE_URL", "GENERAL_CHANNELID"])
+    .from("MST_TEAM")
+    .where("MST_TEAM.MST_TEAMID", "$field.MST_TEAM_ID")
+    .arrayRow();
+
+if (serviceUrl)
+    teams.sendNotification(serviceUrl, channelId, "Etwas hat sich im Projekt "+ vars.get("$field.PROJECTTITLE") +" geaendert");
+
 if (needToUpdateForecast)
     Salesproject.notifyToUpdateForecast();
 
 WorkflowSignalSender.updated();
 
-neon.refreshAll();
-
 function _updateReasons()
 {
     var reasons = rowdata["SALESPROJECT.REASONS"];
     if(reasons)
     {
-        newWhere("SALESPROJECT.SALESPROJECTID", vars.getString("$local.uid"))
-                        .updateData(true, "SALESPROJECT", ["REASONS"], null, [reasons]);
+        newWhere("SALESPROJECT.SALESPROJECTID", "$local.uid")
+            .updateFields({"REASONS": reasons});
     }
 }
 
@@ -118,7 +125,7 @@ function _clearReasons(pReallyClear)
 {
     if (pReallyClear)
     {
-        newWhere("SALESPROJECT.SALESPROJECTID", vars.getString("$local.uid"))
-                        .updateData(true, "SALESPROJECT", ["REASONS"], null, [""]);
+        newWhere("SALESPROJECT.SALESPROJECTID", "$local.uid")
+            .updateFields({"REASONS": ""});
     }
 }
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js b/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..d91a07968d0c061d1891c1479802d377dc7f2167
--- /dev/null
+++ b/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js
@@ -0,0 +1,6 @@
+import("Context_lib");
+import("system.result");
+import("KeywordRegistry_basic");
+
+var activArr = [$KeywordRegistry.salesprojectState$open(), $KeywordRegistry.salesprojectState$postponed()];
+result.string(ContextUtils.buildActiveCaseWhen(activArr, "SALESPROJECT.STATUS"));
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js b/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js
index 3a8b1fd9f8491be342a16fd7967c756ef82b0e21..dd188aaf77933759617acc567c9f1ba0cb1313dc 100644
--- a/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js
+++ b/entity/Salesproject_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js
@@ -1,6 +1,11 @@
+import("Context_lib");
+import("Sql_lib");
 import("system.vars");
 import("system.result");
+//!LibFunction
+var cond = newWhere(null, newSelect("ACTIVITYLINK.OBJECT_ROWID").from("ACTIVITYLINK")
+    .join("ACTIVITY", newWhere("ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID")
+        .and("ACTIVITYLINK.OBJECT_TYPE", ContextUtils.getCurrentContextId()))
+    .where(vars.get("$local.condition")), SqlBuilder.EXISTS());
 
-var from = "ACTIVITYLINK join ACTIVITY on ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID and ACTIVITYLINK.OBJECT_TYPE = 'Salesproject'";
-
-result.string("SALESPROJECTID in (select ACTIVITYLINK.OBJECT_ROWID from " + from + " where " + vars.get("$local.condition")+ ")");
\ No newline at end of file
+result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/index/query.js b/entity/Salesproject_entity/recordcontainers/index/query.js
index 000f54e04cea1de1398266fc8b5bba9f267a5026..ca558d146bc636a845f5660561b9eb2e8533a225 100644
--- a/entity/Salesproject_entity/recordcontainers/index/query.js
+++ b/entity/Salesproject_entity/recordcontainers/index/query.js
@@ -10,7 +10,7 @@ var sqlHelper = new SqlMaskingUtils();
 var sqlQuery = newSelect([
         "SALESPROJECTID", //#UID
         "PROJECTTITLE", //#TITLE
-        sqlHelper.concat([
+        sqlHelper.concatWithSeparator([
             "'" + translate.text("Status") + ":'",  KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.salesprojectState(), "STATUS"),
             "'| " + translate.text("Phase") + ":'",  KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.salesprojectPhase(), "PHASE")
         ]), //#DESCRIPTION
diff --git a/entity/SalutationDistinct_entity/SalutationDistinct_entity.aod b/entity/SalutationDistinct_entity/SalutationDistinct_entity.aod
index bacd4cd101bf6204fbe070899602d47442afcd16..8109ebac747af0d39e0af423ecde388fb52b335b 100644
--- a/entity/SalutationDistinct_entity/SalutationDistinct_entity.aod
+++ b/entity/SalutationDistinct_entity/SalutationDistinct_entity.aod
@@ -14,6 +14,12 @@
     </entityField>
     <entityProvider>
       <name>Salutations</name>
+      <children>
+        <entityParameter>
+          <name>Language_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>2f56ee5c-0f54-4d26-a4d8-a598c136967b</name>
@@ -22,12 +28,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>Language_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>Language_param</name>
diff --git a/entity/SalutationTitleDistinct_entity/SalutationTitleDistinct_entity.aod b/entity/SalutationTitleDistinct_entity/SalutationTitleDistinct_entity.aod
index e23ed314f9c293c89abced5dd2aad800d5deddd9..1919f07f0a8d78ae58435d8e94b06c058b231ba5 100644
--- a/entity/SalutationTitleDistinct_entity/SalutationTitleDistinct_entity.aod
+++ b/entity/SalutationTitleDistinct_entity/SalutationTitleDistinct_entity.aod
@@ -19,14 +19,6 @@
     </entityParameter>
     <entityProvider>
       <name>SalutationTitles</name>
-      <dependencies>
-        <entityDependency>
-          <name>3514c1fb-09f5-485f-884b-2e21e4e85490</name>
-          <entityName>QuickEntry_entity</entityName>
-          <fieldName>SalutationTitles</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>Language_param</name>
@@ -37,6 +29,14 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>3514c1fb-09f5-485f-884b-2e21e4e85490</name>
+          <entityName>QuickEntry_entity</entityName>
+          <fieldName>SalutationTitles</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityParameter>
       <name>Language_param</name>
diff --git a/entity/Salutation_entity/Salutation_entity.aod b/entity/Salutation_entity/Salutation_entity.aod
index 48def7ff858d71be38bba90a5da0a11ae0c556a1..0d2090d77402c252fd43813978bdf505a60b810b 100644
--- a/entity/Salutation_entity/Salutation_entity.aod
+++ b/entity/Salutation_entity/Salutation_entity.aod
@@ -59,17 +59,17 @@
     </entityField>
     <entityConsumer>
       <name>KeywordGenders</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Salutation_entity/entityfields/keywordgenders/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>KeywordLanguages</name>
diff --git a/entity/SerialLetter_entity/SerialLetter_entity.aod b/entity/SerialLetter_entity/SerialLetter_entity.aod
index 315503bad3d29396d5daeabbf8bff267ab8147d1..558eb8a4b6c36a7640a05b1253e977aa9e22941a 100644
--- a/entity/SerialLetter_entity/SerialLetter_entity.aod
+++ b/entity/SerialLetter_entity/SerialLetter_entity.aod
@@ -39,17 +39,17 @@
     </entityField>
     <entityConsumer>
       <name>Recipients</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>LetterRecipient_entity</entityName>
-        <fieldName>SerialLetterRecipients</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>SerialLetterId_param</name>
           <valueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/recipients/children/serialletterid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>LetterRecipient_entity</entityName>
+        <fieldName>SerialLetterRecipients</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>ICON</name>
@@ -59,11 +59,6 @@
     </entityField>
     <entityConsumer>
       <name>Templates</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>DocumentTemplate_entity</entityName>
-        <fieldName>DocumentTemplateProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>DocumentTemplateType_param</name>
@@ -74,6 +69,11 @@
           <valueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/templates/children/documenttemplatetypeclassification_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>DocumentTemplate_entity</entityName>
+        <fieldName>DocumentTemplateProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>TITLE</name>
@@ -88,17 +88,17 @@
     </entityField>
     <entityConsumer>
       <name>LogHistories</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>LogHistory_entity</entityName>
-        <fieldName>LogHistoryProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>tablenames_param</name>
           <valueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>LogHistory_entity</entityName>
+        <fieldName>LogHistoryProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>bindata</name>
@@ -114,26 +114,21 @@
     </entityField>
     <entityConsumer>
       <name>StatusKeyword</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Activities</name>
       <state>INVISIBLE</state>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Activity_entity</entityName>
-        <fieldName>LinkedObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectId_param</name>
@@ -144,6 +139,11 @@
           <valueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/activities/children/rowid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Activity_entity</entityName>
+        <fieldName>LinkedObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>downloadLetter</name>
@@ -174,11 +174,6 @@
     <entityConsumer>
       <name>Documents</name>
       <refreshParent v="true" />
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>SingleDocument</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -197,6 +192,11 @@
           <valueProcess>%aditoprj%/entity/SerialLetter_entity/entityfields/documents/children/disallowcreate_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>SingleDocument</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>generateLetter</name>
diff --git a/entity/SerialLetter_entity/onValidation.js b/entity/SerialLetter_entity/onValidation.js
index d0d694d8f85e0251a0d1ee7ebfd767e45e529ac3..f2f4506feaf95743c3ecd8e90f1e051043e7ed56 100644
--- a/entity/SerialLetter_entity/onValidation.js
+++ b/entity/SerialLetter_entity/onValidation.js
@@ -2,7 +2,15 @@ import("system.neon");
 import("system.result");
 import("system.vars");
 import("DocumentTemplate_lib");
+import("Document_lib");
 
-[content, type] = DocumentTemplateUtils.getTemplateContent(vars.get("$field.DOCUMENTTEMPLATE_ID"), new FileUpload(vars.get("$field.bindata")));
-if (type != DocumentTemplate.types.ODT && (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT))
+var templateId = vars.get("$field.DOCUMENTTEMPLATE_ID");
+var upload = new FileUpload(vars.get("$field.bindata"));
+var template;
+if (upload.isFilled())
+    template = DocumentTemplate.fromUpload(upload);
+else if (templateId)
+    template = DocumentTemplateUtils.getTemplate(templateId);
+
+if (template && template.type != DocumentTemplate.types.ODT)
     result.string(DocumentTemplate.getSerialLetterODTOnlyMessage());
\ No newline at end of file
diff --git a/entity/SerialLetter_entity/recordcontainers/db/onDBUpdate.js b/entity/SerialLetter_entity/recordcontainers/db/onDBUpdate.js
index 9b94cb43201f9ff942608adfb3f3a694a5a555b6..20c7fc0a0ddd70bb3075f0f5c90bd95d19e01233 100644
--- a/entity/SerialLetter_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/SerialLetter_entity/recordcontainers/db/onDBUpdate.js
@@ -18,8 +18,6 @@ var template = DocumentTemplate.fromUpload(bindata);
 if (template.content)
 {
     SingleBinaryUtils.set("SERIALLETTER", "DOCUMENT", letterId, template.content, template.filename, "");
-    
-    neon.refresh(["$field.content"]);
 }
 
 WorkflowSignalSender.updated();
\ No newline at end of file
diff --git a/entity/SingleObject_entity/SingleObject_entity.aod b/entity/SingleObject_entity/SingleObject_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..b2d528450e42e8451f323774cd5f1cbc16495f97
--- /dev/null
+++ b/entity/SingleObject_entity/SingleObject_entity.aod
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
+  <name>SingleObject_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <recordContainer>jdito</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityField>
+      <name>TARGET_CONTEXT</name>
+    </entityField>
+    <entityField>
+      <name>UID</name>
+    </entityField>
+    <entityParameter>
+      <name>TargetContext_param</name>
+      <expose v="true" />
+      <mandatory v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>TargetId_param</name>
+      <expose v="true" />
+      <mandatory v="true" />
+    </entityParameter>
+    <entityProvider>
+      <name>OneObject</name>
+      <targetContextField>TARGET_CONTEXT</targetContextField>
+      <targetIdField>UID</targetIdField>
+    </entityProvider>
+    <entityProvider>
+      <name>#PROVIDER_AGGREGATES</name>
+      <useAggregates v="true" />
+    </entityProvider>
+  </entityFields>
+  <recordContainers>
+    <jDitoRecordContainer>
+      <name>jdito</name>
+      <recordFieldMappings>
+        <jDitoRecordFieldMapping>
+          <name>UID.value</name>
+        </jDitoRecordFieldMapping>
+      </recordFieldMappings>
+    </jDitoRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/Stock_entity/Stock_entity.aod b/entity/Stock_entity/Stock_entity.aod
index 79a929f5a6b9403a98d9b9d03c1d6c07c7401b98..b77312e1cbbab6ba451690e9148c7d54e1ff5c67 100644
--- a/entity/Stock_entity/Stock_entity.aod
+++ b/entity/Stock_entity/Stock_entity.aod
@@ -53,6 +53,12 @@
     <entityProvider>
       <name>Stocks</name>
       <recordContainer>db</recordContainer>
+      <children>
+        <entityParameter>
+          <name>ProductId_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>aa9264c8-2c96-4a7a-94c7-e38bc0ae7df3</name>
@@ -67,12 +73,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>ProductId_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityField>
       <name>IMAGE</name>
@@ -95,11 +95,6 @@
     </entityProvider>
     <entityConsumer>
       <name>KeywordWarehouses</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -107,6 +102,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/Stock_entity/recordcontainers/db/conditionProcess.js b/entity/Stock_entity/recordcontainers/db/conditionProcess.js
index eb881a660fe9112a6d7756fe734491ad20d45165..b0ca1d729b574c54f13543090012d62a9d8ca288 100644
--- a/entity/Stock_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Stock_entity/recordcontainers/db/conditionProcess.js
@@ -1,6 +1,5 @@
 import("system.result");
 import("Sql_lib");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(newWhereIfSet("STOCK.PRODUCT_ID", "$param.ProductId_param")
                 .toString());
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/SupportTicket_entity.aod b/entity/SupportTicket_entity/SupportTicket_entity.aod
index a289e1083cc46db17d59d4a393a87e5537cb64f2..4b3790f99674dd10365dab4146a709f622f5e355 100644
--- a/entity/SupportTicket_entity/SupportTicket_entity.aod
+++ b/entity/SupportTicket_entity/SupportTicket_entity.aod
@@ -5,6 +5,7 @@
   <documentation>%aditoprj%/entity/SupportTicket_entity/documentation.adoc</documentation>
   <title>Support Ticket</title>
   <contentTitleProcess>%aditoprj%/entity/SupportTicket_entity/contentTitleProcess.js</contentTitleProcess>
+  <contentDescriptionProcess>%aditoprj%/entity/SupportTicket_entity/contentDescriptionProcess.js</contentDescriptionProcess>
   <afterUiInit>%aditoprj%/entity/SupportTicket_entity/afterUiInit.js</afterUiInit>
   <onValidation>%aditoprj%/entity/SupportTicket_entity/onValidation.js</onValidation>
   <useFavorites v="true" />
@@ -127,27 +128,22 @@
     </entityParameter>
     <entityConsumer>
       <name>Links</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>TaskLink_entity</entityName>
-        <fieldName>Link</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>TaskId_param</name>
           <valueProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/links/children/taskid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>TaskLink_entity</entityName>
+        <fieldName>Link</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Attributes</name>
       <stateProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/attributes/stateProcess.js</stateProcess>
       <onValidation>%aditoprj%/entity/SupportTicket_entity/entityfields/attributes/onValidation.js</onValidation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>AttributeRelation_entity</entityName>
-        <fieldName>AttributeRelations</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectRowId_param</name>
@@ -170,15 +166,15 @@
           <valueProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/attributes/children/displaysimplename_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AttributeRelation_entity</entityName>
+        <fieldName>AttributeRelations</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>MainDocuments</name>
       <stateProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/maindocuments/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>MainDocuments</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -189,15 +185,15 @@
           <valueProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/maindocuments/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>Documents</name>
-      <selectionMode>MULTI</selectionMode>
       <dependency>
         <name>dependency</name>
         <entityName>Document_entity</entityName>
-        <fieldName>Documents</fieldName>
+        <fieldName>MainDocuments</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>Documents</name>
+      <selectionMode>MULTI</selectionMode>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -208,20 +204,25 @@
           <valueProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>LogHistories</name>
       <dependency>
         <name>dependency</name>
-        <entityName>LogHistory_entity</entityName>
-        <fieldName>LogHistoryProvider</fieldName>
+        <entityName>Document_entity</entityName>
+        <fieldName>Documents</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>LogHistories</name>
       <children>
         <entityParameter>
           <name>tablenames_param</name>
           <valueProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>LogHistory_entity</entityName>
+        <fieldName>LogHistoryProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>TASK_PROGRESS</name>
@@ -233,17 +234,17 @@
     </entityField>
     <entityConsumer>
       <name>KeywordProgress</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/keywordprogress/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>TICKETTYPE</name>
@@ -273,25 +274,20 @@
     </entityField>
     <entityConsumer>
       <name>KeywordTickettype</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/keywordtickettype/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordTaskState</name>
       <dependency>
         <name>dependency</name>
         <entityName>KeywordEntry_entity</entityName>
         <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordTaskState</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -302,6 +298,11 @@
           <valueProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/keywordtaskstate/children/whitelistids_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>TicketType_param</name>
@@ -310,17 +311,17 @@
     </entityParameter>
     <entityConsumer>
       <name>KeywordTaskPriority</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/keywordtaskpriority/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>ContactEditors</name>
@@ -353,11 +354,6 @@
     </entityActionField>
     <entityConsumer>
       <name>ModuleTrees</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>ModuleTree_entity</entityName>
-        <fieldName>TreeProviders</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContextName_param</name>
@@ -368,6 +364,11 @@
           <valueProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/moduletrees/children/id_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>ModuleTree_entity</entityName>
+        <fieldName>TreeProviders</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>TASK_PARENT_ID</name>
@@ -459,6 +460,12 @@
       <name>TASK_ICON_COLOR</name>
       <valueProcess>%aditoprj%/entity/SupportTicket_entity/entityfields/task_icon_color/valueProcess.js</valueProcess>
     </entityField>
+    <entityField>
+      <name>DATE_NEW</name>
+    </entityField>
+    <entityField>
+      <name>ACTIVE</name>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
@@ -597,6 +604,14 @@
           <recordfield>TICKET.TICKETID</recordfield>
           <aggregateType>COUNT</aggregateType>
         </aggregateFieldDbMapping>
+        <dbRecordFieldMapping>
+          <name>DATE_NEW.value</name>
+          <recordfield>TASK.START_DATE</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>ACTIVE.value</name>
+          <expression>%aditoprj%/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js</expression>
+        </dbRecordFieldMapping>
       </recordFieldMappings>
       <filterExtensions>
         <filterExtension>
diff --git a/entity/SupportTicket_entity/contentDescriptionProcess.js b/entity/SupportTicket_entity/contentDescriptionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..1d91623c4ae8f611109db99446b52adabd903dfd
--- /dev/null
+++ b/entity/SupportTicket_entity/contentDescriptionProcess.js
@@ -0,0 +1,18 @@
+import("KeywordRegistry_basic");
+import("Keyword_lib");
+import("system.translate");
+import("system.datetime");
+import("system.vars");
+import("system.result");
+
+var res = [];
+
+if(vars.get("$field.TASK_EDITOR_CONTACT_ID"))
+    res = [translate.text("{$TICKET_EDITOR}") + ": " + vars.get("$field.TASK_EDITOR_CONTACT_ID.displayValue")];
+    
+  res.push(translate.text("Maturity") + ": " + datetime.toDate(vars.get("$field.TASK_MATURITY_DATE"), translate.text("dd.MM.yyyy")));
+  res.push(translate.text("Progress") + ": " + KeywordUtils.getViewValue($KeywordRegistry.taskProgress(), vars.get("$field.TASK_PROGRESS")));
+  res.push(translate.text("Creation date") + ": " + datetime.toDate(vars.get("$field.DATE_NEW"), translate.text("dd.MM.yyyy")));
+
+result.string(res.join(" | "));
+    
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/contentTitleProcess.js b/entity/SupportTicket_entity/contentTitleProcess.js
index aae1064b78ee311afec427a24872f4136046df42..626ec76cac0a3020000f229da4e128040bd21cd7 100644
--- a/entity/SupportTicket_entity/contentTitleProcess.js
+++ b/entity/SupportTicket_entity/contentTitleProcess.js
@@ -1,4 +1,9 @@
+import("KeywordRegistry_basic");
+import("Keyword_lib");
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$field.TASK_SUBJECT"))
\ No newline at end of file
+
+var res = [vars.get("$field.TASK_SUBJECT"), vars.get("$field.TASK_STATUS.displayValue")];
+
+result.string(res.join(" | "))
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/recordcontainers/db/conditionProcess.js b/entity/SupportTicket_entity/recordcontainers/db/conditionProcess.js
index 1cc6eb48ac1da6603edbdb729d16af958c269aa5..058d0ec06940cfc36ccf27bfc13ed7dc8b315518 100644
--- a/entity/SupportTicket_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/SupportTicket_entity/recordcontainers/db/conditionProcess.js
@@ -31,5 +31,4 @@ if (vars.get("$param.RowId_param") && vars.get("$param.ObjectId_param"))
 cond.andIfSet("TASK.PARENT_ID", "$param.ParentId_param");
 cond.andIfSet("TASK.PARENT_CONTEXT", "$param.ParentContext_param");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js b/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..26673fbc448c10ccc7ef9e1e6bc5fc11d1fed04d
--- /dev/null
+++ b/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js
@@ -0,0 +1,7 @@
+import("Context_lib");
+import("system.result");
+import("KeywordRegistry_basic");
+
+var activArr = [$KeywordRegistry.taskStatus$new(), $KeywordRegistry.taskStatus$unassigned(),  $KeywordRegistry.taskStatus$assigned(),
+$KeywordRegistry.taskStatus$inProgress(), $KeywordRegistry.taskStatus$waiting(), $KeywordRegistry.taskStatus$customerChecks()];
+result.string(ContextUtils.buildActiveCaseWhen(activArr, "TASK.STATUS"));
\ No newline at end of file
diff --git a/entity/TaskLink_entity/TaskLink_entity.aod b/entity/TaskLink_entity/TaskLink_entity.aod
index 759282daf39bbcbd59b7a37223e1c9d4873dfaca..90fc5bd337839eda64e940dc36f318a771e74a2b 100644
--- a/entity/TaskLink_entity/TaskLink_entity.aod
+++ b/entity/TaskLink_entity/TaskLink_entity.aod
@@ -39,6 +39,12 @@
       <targetIdField>OBJECT_ROWID</targetIdField>
       <documentation>%aditoprj%/entity/TaskLink_entity/entityfields/link/documentation.adoc</documentation>
       <recordContainer>db</recordContainer>
+      <children>
+        <entityParameter>
+          <name>TaskId_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>40cc8bcd-c178-4a77-a968-642e1d8e1f70</name>
@@ -53,12 +59,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>TaskId_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>TaskId_param</name>
@@ -75,17 +75,17 @@
     </entityConsumer>
     <entityConsumer>
       <name>Objects</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Object_entity</entityName>
-        <fieldName>AllObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ObjectType_param</name>
           <valueProcess>%aditoprj%/entity/TaskLink_entity/entityfields/objects/children/objecttype_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Object_entity</entityName>
+        <fieldName>AllObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/TaskLink_entity/entityfields/object_rowid/displayValueProcess.js b/entity/TaskLink_entity/entityfields/object_rowid/displayValueProcess.js
index c87f4789fa9fd244ebff4881a6a8e59bffe58040..23f715a5e9d43ac6b18f2b7d009a7742eef77d34 100644
--- a/entity/TaskLink_entity/entityfields/object_rowid/displayValueProcess.js
+++ b/entity/TaskLink_entity/entityfields/object_rowid/displayValueProcess.js
@@ -6,5 +6,5 @@ import("Context_lib");
 
 if(vars.get("$field.OBJECT_ROWID") && vars.get("$field.OBJECT_TYPE"))
 {
-    result.string(db.cell(ContextUtils.getNameSql(vars.get("$field.OBJECT_TYPE"), vars.get("$field.OBJECT_ROWID"))));
+    result.string(ContextUtils.getTitleByContext(vars.get("$field.OBJECT_TYPE"), vars.get("$field.OBJECT_ROWID")));
 }
\ No newline at end of file
diff --git a/entity/TaskLink_entity/recordcontainers/db/conditionProcess.js b/entity/TaskLink_entity/recordcontainers/db/conditionProcess.js
index 1b4535c9556a37f6e69084f7570ea2fde14e7e6d..2b98b257ac0a7f777b4ccfab082c730b8681128e 100644
--- a/entity/TaskLink_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/TaskLink_entity/recordcontainers/db/conditionProcess.js
@@ -3,5 +3,4 @@ import("Sql_lib");
 
 var cond = newWhereIfSet("TASKLINK.TASK_ID", "$param.TaskId_param");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/Task_entity/Task_entity.aod b/entity/Task_entity/Task_entity.aod
index 0ed30f9267ac826ee8fa702c136cbdb52ddb1502..45f3ee0f0cf0c4079ae2e8cbc05a6560bf58e0a7 100644
--- a/entity/Task_entity/Task_entity.aod
+++ b/entity/Task_entity/Task_entity.aod
@@ -6,6 +6,7 @@
   <title>Task</title>
   <grantDeleteProcess>%aditoprj%/entity/Task_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/Task_entity/contentTitleProcess.js</contentTitleProcess>
+  <contentDescriptionProcess>%aditoprj%/entity/Task_entity/contentDescriptionProcess.js</contentDescriptionProcess>
   <afterUiInit>%aditoprj%/entity/Task_entity/afterUiInit.js</afterUiInit>
   <onValidation>%aditoprj%/entity/Task_entity/onValidation.js</onValidation>
   <initFilterProcess>%aditoprj%/entity/Task_entity/initFilterProcess.js</initFilterProcess>
@@ -96,10 +97,10 @@
     </entityField>
     <entityField>
       <name>PROTECTIONLEVEL</name>
-      <title>Protected</title>
       <contentType>BOOLEAN</contentType>
       <contentTypeProcess>%aditoprj%/entity/Task_entity/entityfields/protectionlevel/contentTypeProcess.js</contentTypeProcess>
       <dropDownProcess>%aditoprj%/entity/Task_entity/entityfields/protectionlevel/dropDownProcess.js</dropDownProcess>
+      <titleProcess>%aditoprj%/entity/Task_entity/entityfields/protectionlevel/titleProcess.js</titleProcess>
       <valueProcess>%aditoprj%/entity/Task_entity/entityfields/protectionlevel/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
@@ -127,11 +128,6 @@
     <entityConsumer>
       <name>MainDocuments</name>
       <stateProcess>%aditoprj%/entity/Task_entity/entityfields/maindocuments/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>#PROVIDER</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -142,14 +138,14 @@
           <valueProcess>%aditoprj%/entity/Task_entity/entityfields/maindocuments/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>KeywordStates</name>
       <dependency>
         <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
+        <entityName>Document_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>KeywordStates</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -161,14 +157,14 @@
           <valueProcess>%aditoprj%/entity/Task_entity/entityfields/keywordstates/children/whitelistids_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>ModuleTrees</name>
       <dependency>
         <name>dependency</name>
-        <entityName>ModuleTree_entity</entityName>
-        <fieldName>TreeProviders</fieldName>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>ModuleTrees</name>
       <children>
         <entityParameter>
           <name>ID_param</name>
@@ -183,6 +179,11 @@
           <mandatory v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>ModuleTree_entity</entityName>
+        <fieldName>TreeProviders</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>PARENT_CONTEXT</name>
@@ -229,11 +230,6 @@
     </entityParameter>
     <entityConsumer>
       <name>KeywordPriorities</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -241,6 +237,11 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionField>
       <name>newOffer</name>
@@ -259,36 +260,58 @@
     </entityField>
     <entityConsumer>
       <name>KeywordProgress</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/Task_entity/entityfields/keywordprogress/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Links</name>
       <state>EDITABLE</state>
-      <dependency>
-        <name>dependency</name>
-        <entityName>TaskLink_entity</entityName>
-        <fieldName>Link</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>TaskId_param</name>
           <valueProcess>%aditoprj%/entity/Task_entity/entityfields/links/children/taskid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>TaskLink_entity</entityName>
+        <fieldName>Link</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>Tasks</name>
       <documentation>%aditoprj%/entity/Task_entity/entityfields/tasks/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>RowId_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>PresetLinks_param</name>
+          <expose v="true" />
+        </entityParameter>
+        <entityParameter>
+          <name>ParentId_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>ParentContext_param</name>
+          <expose v="false" />
+        </entityParameter>
+        <entityParameter>
+          <name>ObjectId_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>dd79df43-264c-494b-9c92-cadf19e61db6</name>
@@ -357,28 +380,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>RowId_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>PresetLinks_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>ParentId_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>ParentContext_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>ObjectId_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>PresetLinks_param</name>
@@ -407,26 +408,21 @@
     </entityField>
     <entityConsumer>
       <name>LogHistories</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>LogHistory_entity</entityName>
-        <fieldName>LogHistoryProvider</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>tablenames_param</name>
           <valueProcess>%aditoprj%/entity/Task_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>LogHistory_entity</entityName>
+        <fieldName>LogHistoryProvider</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>Documents</name>
       <selectionMode>MULTI</selectionMode>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>Documents</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentRowId_param</name>
@@ -437,6 +433,11 @@
           <valueProcess>%aditoprj%/entity/Task_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>Documents</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>TYPE</name>
@@ -503,6 +504,9 @@
       <name>ICON_COLOR</name>
       <valueProcess>%aditoprj%/entity/Task_entity/entityfields/icon_color/valueProcess.js</valueProcess>
     </entityField>
+    <entityField>
+      <name>DATE_NEW</name>
+    </entityField>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/Task_entity/contentDescriptionProcess.js b/entity/Task_entity/contentDescriptionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b07a72fe7cc543e3bedc5d5604f12f28769ffb6b
--- /dev/null
+++ b/entity/Task_entity/contentDescriptionProcess.js
@@ -0,0 +1,5 @@
+import("system.translate");
+import("system.datetime");
+import("system.vars");
+import("system.result");
+result.string(datetime.toDate(vars.get("$field.DATE_NEW"), translate.text("dd.MM.yyyy")));
\ No newline at end of file
diff --git a/entity/Task_entity/entityfields/priority/valueProcess.js b/entity/Task_entity/entityfields/priority/valueProcess.js
index 0639e8287e8797db0bd0a19c31781facd3409367..ee23436dbb536eaf7196891941f62bb15384741c 100644
--- a/entity/Task_entity/entityfields/priority/valueProcess.js
+++ b/entity/Task_entity/entityfields/priority/valueProcess.js
@@ -4,5 +4,7 @@ import("system.neon");
 import("system.vars");
 import("KeywordRegistry_basic");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+{
     result.string($KeywordRegistry.taskPriority$low());
+}
\ No newline at end of file
diff --git a/entity/Task_entity/entityfields/protectionlevel/titleProcess.js b/entity/Task_entity/entityfields/protectionlevel/titleProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c2997149287a6b22c3e22a5d4bc48d145b314f25
--- /dev/null
+++ b/entity/Task_entity/entityfields/protectionlevel/titleProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.translate");
+
+//We already changed this title serveral times
+//This will be the last time and it's called "Private". Period.
+//The reason why this is in a titleProcess and not in the title property is just to write this comment you're reading.
+//Note: Whithin a porject feel free to change the title
+result.string(translate.text("Private"));
\ No newline at end of file
diff --git a/entity/Task_entity/recordcontainers/db/conditionProcess.js b/entity/Task_entity/recordcontainers/db/conditionProcess.js
index d8acb4d11fe9b9f26e89c697f74bf887f928b04c..c74072623eb5c8a5bed06b76d70c73084a0815bd 100644
--- a/entity/Task_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Task_entity/recordcontainers/db/conditionProcess.js
@@ -48,6 +48,5 @@ else
     }
     cond.and(protectionLevelCondition);
   
-    //TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
     result.string(cond.toString());
 }
\ No newline at end of file
diff --git a/entity/Timetracking_entity/Timetracking_entity.aod b/entity/Timetracking_entity/Timetracking_entity.aod
index fc202492285ba2545d3502221077c49200a9f2cf..f4b7bc526823c1c31110183136f7e949a2f5e8ce 100644
--- a/entity/Timetracking_entity/Timetracking_entity.aod
+++ b/entity/Timetracking_entity/Timetracking_entity.aod
@@ -75,14 +75,6 @@
     <entityProvider>
       <name>Timetrackings</name>
       <recordContainer>db</recordContainer>
-      <dependencies>
-        <entityDependency>
-          <name>3636c414-fbc9-4144-a8b1-8e4ca0a146b2</name>
-          <entityName>Salesproject_entity</entityName>
-          <fieldName>Timetrackings</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>ObjectId_param</name>
@@ -93,6 +85,14 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>3636c414-fbc9-4144-a8b1-8e4ca0a146b2</name>
+          <entityName>Salesproject_entity</entityName>
+          <fieldName>Timetrackings</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityConsumer>
       <name>Employees</name>
diff --git a/entity/Timetracking_entity/recordcontainers/db/conditionProcess.js b/entity/Timetracking_entity/recordcontainers/db/conditionProcess.js
index 958be5716236ef7cd77321a1cd61ca0e15d31be5..9b3b9ce651860d82a5e85c54ee239ed3b615d424 100644
--- a/entity/Timetracking_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/Timetracking_entity/recordcontainers/db/conditionProcess.js
@@ -3,7 +3,6 @@ import("system.db");
 import("system.result");
 import("Sql_lib");
 
-//TODO: use a preparedCondition (.build instead of .toString) when available #1030812 #1034026
 result.string(newWhereIfSet("TIMETRACKING.OBJECT_ID", "$param.ObjectId_param")
                 .andIfSet("TIMETRACKING.ROW_ID", "$param.RowId_param")
                 .toString());
diff --git a/entity/TurnoverTree_entity/TurnoverTree_entity.aod b/entity/TurnoverTree_entity/TurnoverTree_entity.aod
index d275ce95c96dde9bf3a79215960a2701d79a014d..d8624334458293fd8c90bf4b4dedf67e728e894e 100644
--- a/entity/TurnoverTree_entity/TurnoverTree_entity.aod
+++ b/entity/TurnoverTree_entity/TurnoverTree_entity.aod
@@ -57,6 +57,12 @@
     <entityProvider>
       <name>FilteredTurnovers</name>
       <documentation>%aditoprj%/entity/TurnoverTree_entity/entityfields/filteredturnovers/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>YearCountToShow_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>0ea4ad47-985b-4a9c-81d8-946be324ae04</name>
@@ -65,12 +71,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>YearCountToShow_param</name>
-          <expose v="true" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityField>
       <name>PARENT</name>
diff --git a/entity/Turnover_entity/Turnover_entity.aod b/entity/Turnover_entity/Turnover_entity.aod
index 0737e151be2ff946ccf52770b97fc832bbae30ea..81fdfb8dd00879d70df1b70c4d3ccdf8b770b99f 100644
--- a/entity/Turnover_entity/Turnover_entity.aod
+++ b/entity/Turnover_entity/Turnover_entity.aod
@@ -54,14 +54,6 @@
     <entityProvider>
       <name>FilteredTurnovers</name>
       <documentation>%aditoprj%/entity/Turnover_entity/entityfields/filteredturnovers/documentation.adoc</documentation>
-      <dependencies>
-        <entityDependency>
-          <name>51106aba-bd82-4ac5-8de6-fc56d53c6117</name>
-          <entityName>Salesproject_entity</entityName>
-          <fieldName>SalesprojectForecastCharts</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
       <children>
         <entityParameter>
           <name>MaxYear_param</name>
@@ -72,14 +64,17 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>51106aba-bd82-4ac5-8de6-fc56d53c6117</name>
+          <entityName>Salesproject_entity</entityName>
+          <fieldName>SalesprojectForecastCharts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityConsumer>
       <name>Turnover_tree</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>TurnoverTree_entity</entityName>
-        <fieldName>FilteredTurnovers</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>MaxYear_param</name>
@@ -98,6 +93,11 @@
           <valueProcess>%aditoprj%/entity/Turnover_entity/entityfields/turnover_tree/children/showturnover_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>TurnoverTree_entity</entityName>
+        <fieldName>FilteredTurnovers</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>SalesprojectId_param</name>
diff --git a/entity/Turnover_entity/recordcontainers/jdito/contentProcess.js b/entity/Turnover_entity/recordcontainers/jdito/contentProcess.js
index bd20eceda69bc4ed288c1090ba77ee4918831b57..fd0e3bd7a6f2c7518d54d02f9351a842f3d25d9b 100644
--- a/entity/Turnover_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/Turnover_entity/recordcontainers/jdito/contentProcess.js
@@ -27,8 +27,8 @@ import("system.translate");
  */
 
 
-var turnoverCategory = translate.text('Turnover');
-var forecastCategory = translate.text('Forecast');
+var turnoverCategory = translate.text("Turnover");
+var forecastCategory = translate.text("Forecast");
 
 var maxYear = parseInt(vars.get("$param.MaxYear_param"));
 var yearCountToShow = parseInt(vars.get("$param.YearCountToShow_param"));
diff --git a/entity/UniversalFileProcessor_entity/UniversalFileProcessor_entity.aod b/entity/UniversalFileProcessor_entity/UniversalFileProcessor_entity.aod
index 1abb59ffc8bc30f70492cbe64475651d62da62a8..57fdcb96a603fd37d3f7cf3566b93109223ad307 100644
--- a/entity/UniversalFileProcessor_entity/UniversalFileProcessor_entity.aod
+++ b/entity/UniversalFileProcessor_entity/UniversalFileProcessor_entity.aod
@@ -24,17 +24,17 @@
     </entityParameter>
     <entityConsumer>
       <name>Activities</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Activity_entity</entityName>
-        <fieldName>LinkedObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ActivityIDs_param</name>
           <valueProcess>%aditoprj%/entity/UniversalFileProcessor_entity/entityfields/activities/children/activityids_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Activity_entity</entityName>
+        <fieldName>LinkedObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/UnlinkedMailMappingWrapper_entity/UnlinkedMailMappingWrapper_entity.aod b/entity/UnlinkedMailMappingWrapper_entity/UnlinkedMailMappingWrapper_entity.aod
index 42eb73a718ae614066df3597d25cc982dc96b69b..29ba9b689d57567d2aadb708693d3217d916ec15 100644
--- a/entity/UnlinkedMailMappingWrapper_entity/UnlinkedMailMappingWrapper_entity.aod
+++ b/entity/UnlinkedMailMappingWrapper_entity/UnlinkedMailMappingWrapper_entity.aod
@@ -49,17 +49,17 @@
     <entityConsumer>
       <name>UnlinkedMailMappingLinks</name>
       <documentation>%aditoprj%/entity/UnlinkedMailMappingWrapper_entity/entityfields/unlinkedmailmappinglinks/documentation.adoc</documentation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>UnlinkedMailMappingLink_entity</entityName>
-        <fieldName>#PROVIDER</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>MailAsText_param</name>
           <valueProcess>%aditoprj%/entity/UnlinkedMailMappingWrapper_entity/entityfields/unlinkedmailmappinglinks/children/mailastext_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>UnlinkedMailMappingLink_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/UserhelpResources/UserhelpResources.aod b/entity/UserhelpResources_entity/UserhelpResources_entity.aod
similarity index 70%
rename from entity/UserhelpResources/UserhelpResources.aod
rename to entity/UserhelpResources_entity/UserhelpResources_entity.aod
index 7775d3fd5a4ba8d43ec112062c7772b437bd68c9..32f253d41162e3e5c8b4e33f1bcba45bdc803965 100644
--- a/entity/UserhelpResources/UserhelpResources.aod
+++ b/entity/UserhelpResources_entity/UserhelpResources_entity.aod
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
-  <name>UserhelpResources</name>
+  <name>UserhelpResources_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
-  <documentation>%aditoprj%/entity/UserhelpResources/documentation.adoc</documentation>
+  <documentation>%aditoprj%/entity/UserhelpResources_entity/documentation.adoc</documentation>
   <entityFields>
     <entityProvider>
       <name>#PROVIDER</name>
@@ -12,21 +12,21 @@
     </entityField>
     <entityConsumer>
       <name>Documents</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Document_entity</entityName>
-        <fieldName>Documents</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>AssignmentTable_param</name>
-          <valueProcess>%aditoprj%/entity/UserhelpResources/entityfields/documents/children/assignmenttable_param/valueProcess.js</valueProcess>
+          <valueProcess>%aditoprj%/entity/UserhelpResources_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js</valueProcess>
         </entityParameter>
         <entityParameter>
           <name>AssignmentRowId_param</name>
-          <valueProcess>%aditoprj%/entity/UserhelpResources/entityfields/documents/children/assignmentrowid_param/valueProcess.js</valueProcess>
+          <valueProcess>%aditoprj%/entity/UserhelpResources_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Document_entity</entityName>
+        <fieldName>Documents</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/UserhelpResources/documentation.adoc b/entity/UserhelpResources_entity/documentation.adoc
similarity index 100%
rename from entity/UserhelpResources/documentation.adoc
rename to entity/UserhelpResources_entity/documentation.adoc
diff --git a/entity/UserhelpResources/entityfields/documents/children/assignmentrowid_param/valueProcess.js b/entity/UserhelpResources_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js
similarity index 100%
rename from entity/UserhelpResources/entityfields/documents/children/assignmentrowid_param/valueProcess.js
rename to entity/UserhelpResources_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js
diff --git a/entity/UserhelpResources/entityfields/documents/children/assignmenttable_param/valueProcess.js b/entity/UserhelpResources_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js
similarity index 100%
rename from entity/UserhelpResources/entityfields/documents/children/assignmenttable_param/valueProcess.js
rename to entity/UserhelpResources_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js
diff --git a/entity/VisitPlanEmployeeWeek_entity/VisitPlanEmployeeWeek_entity.aod b/entity/VisitPlanEmployeeWeek_entity/VisitPlanEmployeeWeek_entity.aod
index 63130c5f63deebc3bc36702245a2755785fe4a50..d7e664a23695770a983a66ae5599360454629498 100644
--- a/entity/VisitPlanEmployeeWeek_entity/VisitPlanEmployeeWeek_entity.aod
+++ b/entity/VisitPlanEmployeeWeek_entity/VisitPlanEmployeeWeek_entity.aod
@@ -82,11 +82,6 @@
     </entityConsumer>
     <entityConsumer>
       <name>Entries</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>VisitPlanEntry_entity</entityName>
-        <fieldName>Entries</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>Entries_param</name>
@@ -94,6 +89,11 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>VisitPlanEntry_entity</entityName>
+        <fieldName>Entries</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
@@ -136,10 +136,6 @@
           <name>CONTACT_ID.value</name>
           <recordfield>VISITPLANEMPLOYEEWEEK.CONTACT_ID</recordfield>
         </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>CONTACT_ID.displayValue</name>
-          <expression>%aditoprj%/entity/VisitPlanEmployeeWeek_entity/recordcontainers/db/recordfieldmappings/person_id.displayvalue/expression.js</expression>
-        </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
   </recordContainers>
diff --git a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod
index f059c7a9862bda4da4b6708cac9b114e81fd9423..bdb4144e03c7d3d3c6c658e28403f3bc6eb03818 100644
--- a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod
+++ b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod
@@ -119,11 +119,6 @@
     <entityConsumer>
       <name>KeywordVisitPlanEntryStatus</name>
       <documentation>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/keywordvisitplanentrystatus/documentation.adoc</documentation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -131,6 +126,11 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>Entries_param</name>
@@ -186,11 +186,6 @@
     </entityField>
     <entityConsumer>
       <name>Persons</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Person_entity</entityName>
-        <fieldName>Contacts</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ExcludedContactIds_param</name>
@@ -201,6 +196,11 @@
           <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/persons/children/onlyshowcontactids_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Person_entity</entityName>
+        <fieldName>Contacts</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ContactId_param</name>
diff --git a/entity/VisitPlanEntry_entity/recordcontainers/jdito/contentProcess.js b/entity/VisitPlanEntry_entity/recordcontainers/jdito/contentProcess.js
index ce8bb62314fa0a0ae0023f81b31d95a3871bd812..ae8d3918edde1c772c1f09bb3623506cce40cdc1 100644
--- a/entity/VisitPlanEntry_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/VisitPlanEntry_entity/recordcontainers/jdito/contentProcess.js
@@ -46,19 +46,19 @@ if(entryData.length > 0)
 {
     for(var i = 0; i < entryData.length; i++)
     {
-        var entryDateRaw, visitPlanEntryId, beginn_time, end_time, organisationContact_id, contact_id, status, visitplanemployeeweek_id, appointmentid;
-        [entryDateRaw, visitPlanEntryId, beginn_time, end_time, organisationContact_id, contact_id, status, visitplanemployeeweek_id, appointmentid] = entryData[i]
+        var entryDateRaw, visitPlanEntryId, beginTime, endTime, organisationContactId, contactId, status, visitplanEmployeeWeekId, appointmentid;
+        [entryDateRaw, visitPlanEntryId, beginTime, endTime, organisationContactId, contactId, status, visitplanEmployeeWeekId, appointmentid] = entryData[i]
         
-        var contactname = db.cell(PersUtils.getResolvingDisplaySubSql("'" + contact_id + "'"));
-        var orgname = OrganisationUtils.getNameByContactId(organisationContact_id);
+        var contactname = ContactUtils.getTitleByContactId(contactId);
+        var orgname = OrganisationUtils.getNameByContactId(organisationContactId);
         var parentName = translate.text(datetime.toDate(entryDateRaw, "EEEE"));
         entryDate = datetime.toDate(entryDateRaw, "dd.MM.yyyy");
 
         var statusDisplay = KeywordUtils.getViewValue($KeywordRegistry.visitPlanEntryStatus(), status)
         var alias = SqlUtils.getSystemAlias();
 
-        items.push([visitPlanEntryId, false, parentName + "#" + entryDate, "",  beginn_time
-            , end_time, organisationContact_id, orgname, contact_id, contactname, entryDateRaw, status, visitplanemployeeweek_id, appointmentid, statusDisplay]);
+        items.push([visitPlanEntryId, false, parentName + "#" + entryDate, "",  beginTime
+            , endTime, organisationContactId, orgname, contactId, contactname, entryDateRaw, status, visitplanEmployeeWeekId, appointmentid, statusDisplay]);
 
         if(!vars.get("$local.idvalues"))
         {
diff --git a/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod b/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod
index 6010af8787908086fb34aeabc91e2b53396345e4..bccac7cc31663c0452590bb08c4720db354a761b 100644
--- a/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod
+++ b/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod
@@ -89,11 +89,6 @@
     <entityConsumer>
       <name>KeywordVisitRecommendationPriority</name>
       <documentation>%aditoprj%/entity/VisitRecommendation_entity/entityfields/keywordvisitrecommendationpriority/documentation.adoc</documentation>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
@@ -101,6 +96,11 @@
           <expose v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityConsumer>
       <name>OrganisationConsumer</name>
@@ -112,11 +112,6 @@
     </entityConsumer>
     <entityConsumer>
       <name>PersonConsumer</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Person_entity</entityName>
-        <fieldName>#PROVIDER</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContactId_param</name>
@@ -124,6 +119,11 @@
           <mandatory v="true" />
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Person_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ContactId_param</name>
@@ -164,17 +164,17 @@
     </entityProvider>
     <entityConsumer>
       <name>KeywordVisitRecommendationSource</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/keywordvisitrecommendationsource/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>ADDRESS_ZIP</name>
diff --git a/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js b/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js
index 7effd511c0a20b96a072e8df4ba4e7650ede81c9..42fecc4e3d198603e333edf0c71beed523ff615a 100644
--- a/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js
+++ b/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js
@@ -271,7 +271,7 @@ function _getPrioByDueDateSubSql (pDueDateField, pPriorityField)
 {
     var currentDate = datetime.date();
     var sqlMasker = new SqlMaskingUtils();
-    
+    //!SqlBuilder
     var subSql = "case when " + pDueDateField + " < ? then '" + $KeywordRegistry.visitRecommendationPriority$critical()
         + "' when " + pDueDateField + " < ? then '" + $KeywordRegistry.visitRecommendationPriority$veryHigh()
         + "' when " + pDueDateField + " < ? then '" + $KeywordRegistry.visitRecommendationPriority$high()
diff --git a/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod b/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod
index ab10357478fbae31e30b3f5762444275d68cb28d..b523e8b8d09e3810d231cab32aa37701e5ec5046 100644
--- a/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod
+++ b/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod
@@ -77,17 +77,17 @@
     <entityConsumer>
       <name>Instances</name>
       <selectionMode>MULTI</selectionMode>
-      <dependency>
-        <name>dependency</name>
-        <entityName>WorkflowInstance_entity</entityName>
-        <fieldName>InstancesOfWorkflow</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>WorkflowDefinitionKey_param</name>
           <valueProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/instances/children/workflowdefinitionkey_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>WorkflowInstance_entity</entityName>
+        <fieldName>InstancesOfWorkflow</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>KEY</name>
@@ -135,11 +135,6 @@
     </entityParameter>
     <entityConsumer>
       <name>OtherVersions</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>WorkflowDefinition_entity</entityName>
-        <fieldName>WorkflowVersions</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ProcessDefinitionKey_param</name>
@@ -150,9 +145,15 @@
           <valueProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/otherversions/children/currentversion_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>WorkflowDefinition_entity</entityName>
+        <fieldName>WorkflowVersions</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>WorkflowVersions</name>
+      <documentation>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/workflowversions/documentation.adoc</documentation>
       <titlePlural>Other versions</titlePlural>
       <children>
         <entityParameter>
@@ -171,17 +172,17 @@
     </entityField>
     <entityConsumer>
       <name>StartConfigs</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>WorkflowStartConfig_entity</entityName>
-        <fieldName>StartConfig</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ProcessDefinitionKey_param</name>
           <valueProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/startconfigs/children/processdefinitionkey_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>WorkflowStartConfig_entity</entityName>
+        <fieldName>StartConfig</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>Context_param</name>
@@ -195,11 +196,6 @@
     </entityActionField>
     <entityConsumer>
       <name>Signals</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>WorkflowSignal_entity</entityName>
-        <fieldName>ProcessDefinitionSignals</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ProcessDefinitionId_param</name>
@@ -210,6 +206,11 @@
           <valueProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/signals/children/processdefinitionkey_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>WorkflowSignal_entity</entityName>
+        <fieldName>ProcessDefinitionSignals</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>VERSION_TITLE</name>
@@ -231,17 +232,17 @@
     </entityField>
     <entityConsumer>
       <name>CategoryKeyword</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/categorykeyword/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/WorkflowDefinition_entity/entityfields/workflowversions/documentation.adoc b/entity/WorkflowDefinition_entity/entityfields/workflowversions/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..3ea3eb5f375dd862f274e73030cd1c6a8124f24b
--- /dev/null
+++ b/entity/WorkflowDefinition_entity/entityfields/workflowversions/documentation.adoc
@@ -0,0 +1,4 @@
+= WorkflowVersions
+
+Loads all other versions of a workflow definition to show the version history. For that, the process key (ProcessDefinitionKey_param) is required and
+the CurrentVersion_param can be used for excluding the currently opened version from the list.
\ No newline at end of file
diff --git a/entity/WorkflowInstanceHistory_entity/WorkflowInstanceHistory_entity.aod b/entity/WorkflowInstanceHistory_entity/WorkflowInstanceHistory_entity.aod
index 8c35ddbe8c30a3772342c03d9a04d3f9c1b60dd4..4b33d427532d30ddafb627ea0089fbae66a6bd11 100644
--- a/entity/WorkflowInstanceHistory_entity/WorkflowInstanceHistory_entity.aod
+++ b/entity/WorkflowInstanceHistory_entity/WorkflowInstanceHistory_entity.aod
@@ -51,6 +51,7 @@
       <name>HistoryForWorkflowInstance</name>
       <targetContextField>TARGET_CONTEXT</targetContextField>
       <targetIdField>TASK_ID</targetIdField>
+      <documentation>%aditoprj%/entity/WorkflowInstanceHistory_entity/entityfields/historyforworkflowinstance/documentation.adoc</documentation>
       <titlePlural>History</titlePlural>
       <dependencies>
         <entityDependency>
@@ -77,17 +78,17 @@
     </entityField>
     <entityConsumer>
       <name>ActivityTypeKeyword</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/WorkflowInstanceHistory_entity/entityfields/activitytypekeyword/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/WorkflowInstanceHistory_entity/entityfields/historyforworkflowinstance/documentation.adoc b/entity/WorkflowInstanceHistory_entity/entityfields/historyforworkflowinstance/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..8e0c3662b7605dd70bfacb74cf74d55afa61d099
--- /dev/null
+++ b/entity/WorkflowInstanceHistory_entity/entityfields/historyforworkflowinstance/documentation.adoc
@@ -0,0 +1,3 @@
+= HistoryForWorkflowInstance
+
+Provides a history of the given workflow instance. This includes all the finished activities and tasks of that workflow.
\ No newline at end of file
diff --git a/entity/WorkflowInstance_entity/WorkflowInstance_entity.aod b/entity/WorkflowInstance_entity/WorkflowInstance_entity.aod
index 566506952d10531e4a485461d611e30d6eea4e6a..baf0056902e1eada308214db5fdd0f30d9c05c91 100644
--- a/entity/WorkflowInstance_entity/WorkflowInstance_entity.aod
+++ b/entity/WorkflowInstance_entity/WorkflowInstance_entity.aod
@@ -18,6 +18,7 @@
     </entityField>
     <entityProvider>
       <name>InstancesOfWorkflow</name>
+      <documentation>%aditoprj%/entity/WorkflowInstance_entity/entityfields/instancesofworkflow/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>96f047cf-7f3b-417e-ac08-9dc231c5d0ac</name>
@@ -79,31 +80,31 @@
     </entityField>
     <entityConsumer>
       <name>Tasks</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>WorkflowTask_entity</entityName>
-        <fieldName>InstanceTasks</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>WorkflowInstanceId_param</name>
           <valueProcess>%aditoprj%/entity/WorkflowInstance_entity/entityfields/tasks/children/workflowinstanceid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>WorkflowDefinitions</name>
       <dependency>
         <name>dependency</name>
-        <entityName>WorkflowDefinition_entity</entityName>
-        <fieldName>#PROVIDER</fieldName>
+        <entityName>WorkflowTask_entity</entityName>
+        <fieldName>InstanceTasks</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>WorkflowDefinitions</name>
       <children>
         <entityParameter>
           <name>Context_param</name>
           <valueProcess>%aditoprj%/entity/WorkflowInstance_entity/entityfields/workflowdefinitions/children/context_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>WorkflowDefinition_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>ProcessVariables_param</name>
@@ -131,11 +132,6 @@
     </entityActionField>
     <entityConsumer>
       <name>FinishedTasks</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>WorkflowTask_entity</entityName>
-        <fieldName>FinishedInstanceTasks</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>WorkflowInstanceId_param</name>
@@ -146,6 +142,11 @@
           <valueProcess>%aditoprj%/entity/WorkflowInstance_entity/entityfields/finishedtasks/children/includeservicetasks_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>WorkflowTask_entity</entityName>
+        <fieldName>FinishedInstanceTasks</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>ICON</name>
@@ -153,17 +154,17 @@
     </entityField>
     <entityConsumer>
       <name>History</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>WorkflowInstanceHistory_entity</entityName>
-        <fieldName>HistoryForWorkflowInstance</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>ProcessInstanceId_param</name>
           <valueProcess>%aditoprj%/entity/WorkflowInstance_entity/entityfields/history/children/processinstanceid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>WorkflowInstanceHistory_entity</entityName>
+        <fieldName>HistoryForWorkflowInstance</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>ISFINISHED</name>
@@ -174,17 +175,17 @@
     <entityConsumer>
       <name>Variables</name>
       <stateProcess>%aditoprj%/entity/WorkflowInstance_entity/entityfields/variables/stateProcess.js</stateProcess>
-      <dependency>
-        <name>dependency</name>
-        <entityName>WorkflowVariableValue_entity</entityName>
-        <fieldName>VariablesOfInstance</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>WorkflowInstanceId_param</name>
           <valueProcess>%aditoprj%/entity/WorkflowInstance_entity/entityfields/variables/children/workflowinstanceid_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>WorkflowVariableValue_entity</entityName>
+        <fieldName>VariablesOfInstance</fieldName>
+      </dependency>
     </entityConsumer>
     <entityField>
       <name>DIAGRAM</name>
diff --git a/entity/WorkflowInstance_entity/entityfields/instancesofworkflow/documentation.adoc b/entity/WorkflowInstance_entity/entityfields/instancesofworkflow/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..41f9fecfaece367623551c7bfbb8e010271017c8
--- /dev/null
+++ b/entity/WorkflowInstance_entity/entityfields/instancesofworkflow/documentation.adoc
@@ -0,0 +1,3 @@
+= InstancesOfWorkflow
+
+Provider for all workflow instances started from a specific workflow definition
\ No newline at end of file
diff --git a/entity/WorkflowLauncher_entity/WorkflowLauncher_entity.aod b/entity/WorkflowLauncher_entity/WorkflowLauncher_entity.aod
index f1640dc1aacfcbb6ebd9de2ce5afb3d6ca8b92c9..cb1c24289be4239a3071a00dcf8f9193b8038421 100644
--- a/entity/WorkflowLauncher_entity/WorkflowLauncher_entity.aod
+++ b/entity/WorkflowLauncher_entity/WorkflowLauncher_entity.aod
@@ -2,6 +2,7 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.17" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.17">
   <name>WorkflowLauncher_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/entity/WorkflowLauncher_entity/documentation.adoc</documentation>
   <recordContainer>dataLess</recordContainer>
   <entityFields>
     <entityProvider>
@@ -61,17 +62,17 @@
     </entityProvider>
     <entityConsumer>
       <name>WorkflowDefinitions</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>WorkflowDefinition_entity</entityName>
-        <fieldName>#PROVIDER</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>Context_param</name>
           <valueProcess>%aditoprj%/entity/WorkflowLauncher_entity/entityfields/workflowdefinitions/children/context_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>WorkflowDefinition_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
     </entityConsumer>
     <entityParameter>
       <name>Validationerrors_param</name>
@@ -88,6 +89,7 @@
   <recordContainers>
     <datalessRecordContainer>
       <name>dataLess</name>
+      <alias>Data_alias</alias>
     </datalessRecordContainer>
   </recordContainers>
 </entity>
diff --git a/entity/WorkflowLauncher_entity/documentation.adoc b/entity/WorkflowLauncher_entity/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..2b9731f8a4e9eb04904c5ee2bd479878bdbd39b4
--- /dev/null
+++ b/entity/WorkflowLauncher_entity/documentation.adoc
@@ -0,0 +1,3 @@
+= WorkflowLauncher_entity
+
+An entity with dataless recordcontainer to create a dialog that starts workflow instances.
\ No newline at end of file
diff --git a/entity/WorkflowLauncher_entity/entityfields/launchworkflows/onActionProcess.js b/entity/WorkflowLauncher_entity/entityfields/launchworkflows/onActionProcess.js
index 7e0756271a92383e5130ad6aeb18ef79a715b0af..71d4a69dc83979fcc497fddddee58f56273c8f59 100644
--- a/entity/WorkflowLauncher_entity/entityfields/launchworkflows/onActionProcess.js
+++ b/entity/WorkflowLauncher_entity/entityfields/launchworkflows/onActionProcess.js
@@ -17,10 +17,9 @@ if (!Utils.isNullOrEmpty(startFormResult))
 
 targets.forEach(function ([targetId, targetContext, processVariables])
 {
-    /* Caution: If 'variables' is used, then 'processVariables' is only a reference to 'variables'. 
-       Currently that's fine, but keep it in mind when you change this code. */
     if (!processVariables)
-        processVariables = variables;
+        processVariables = {};
+    Object.assign(processVariables, variables);
     processVariables[WorkflowVariables.TARGET_ID()] = targetId;
     processVariables[WorkflowVariables.TARGET_CONTEXT()] = targetContext || context;
 
diff --git a/entity/WorkflowSignal_entity/WorkflowSignal_entity.aod b/entity/WorkflowSignal_entity/WorkflowSignal_entity.aod
index 0482a952cde7ed445aa8048cbb38c08eaee58570..1e857118e9c07f4b1ac03110221c77f1c07688be 100644
--- a/entity/WorkflowSignal_entity/WorkflowSignal_entity.aod
+++ b/entity/WorkflowSignal_entity/WorkflowSignal_entity.aod
@@ -47,11 +47,6 @@
     </entityField>
     <entityConsumer>
       <name>Contexts</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Context_entity</entityName>
-        <fieldName>Exclusive</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>Blacklist_param</name>
@@ -62,23 +57,29 @@
           <valueProcess>%aditoprj%/entity/WorkflowSignal_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>TriggerKeyword</name>
       <dependency>
         <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
+        <entityName>Context_entity</entityName>
+        <fieldName>Exclusive</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>TriggerKeyword</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/WorkflowSignal_entity/entityfields/triggerkeyword/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>ProcessDefinitionSignals</name>
+      <documentation>%aditoprj%/entity/WorkflowSignal_entity/entityfields/processdefinitionsignals/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>f08ff63c-296a-4b1f-8264-b6b1e6c1d748</name>
diff --git a/entity/WorkflowSignal_entity/entityfields/processdefinitionsignals/documentation.adoc b/entity/WorkflowSignal_entity/entityfields/processdefinitionsignals/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..7d279f26c91439041be487d34adf21ab2f4d322a
--- /dev/null
+++ b/entity/WorkflowSignal_entity/entityfields/processdefinitionsignals/documentation.adoc
@@ -0,0 +1,3 @@
+= ProcessDefinitionSignals
+
+Provides all signals defined in the given workflow definition.
\ No newline at end of file
diff --git a/entity/WorkflowStartConfig_entity/WorkflowStartConfig_entity.aod b/entity/WorkflowStartConfig_entity/WorkflowStartConfig_entity.aod
index beafceffdfe067862b2781e806816b8aaf9ef50d..2d30eb85c0a2d04e62f73c1d8b354bb72d86d52f 100644
--- a/entity/WorkflowStartConfig_entity/WorkflowStartConfig_entity.aod
+++ b/entity/WorkflowStartConfig_entity/WorkflowStartConfig_entity.aod
@@ -49,11 +49,6 @@
     </entityProvider>
     <entityConsumer>
       <name>Contexts</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Context_entity</entityName>
-        <fieldName>Exclusive</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>Blacklist_param</name>
@@ -63,25 +58,26 @@
           <name>InvertBlacklist_param</name>
           <valueProcess>%aditoprj%/entity/WorkflowStartConfig_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js</valueProcess>
         </entityParameter>
-        <entityParameter>
-          <name>GetAllContexts_param</name>
-          <valueProcess>%aditoprj%/entity/WorkflowStartConfig_entity/entityfields/contexts/children/getallcontexts_param/valueProcess.js</valueProcess>
-        </entityParameter>
       </children>
-    </entityConsumer>
-    <entityConsumer>
-      <name>TriggerKeyword</name>
       <dependency>
         <name>dependency</name>
-        <entityName>KeywordEntry_entity</entityName>
-        <fieldName>SpecificContainerKeywords</fieldName>
+        <entityName>Context_entity</entityName>
+        <fieldName>Exclusive</fieldName>
       </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>TriggerKeyword</name>
       <children>
         <entityParameter>
           <name>ContainerName_param</name>
           <valueProcess>%aditoprj%/entity/WorkflowStartConfig_entity/entityfields/triggerkeyword/children/containername_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>KeywordEntry_entity</entityName>
+        <fieldName>SpecificContainerKeywords</fieldName>
+      </dependency>
     </entityConsumer>
     <entityProvider>
       <name>#PROVIDER_AGGREGATES</name>
diff --git a/entity/WorkflowTask_entity/WorkflowTask_entity.aod b/entity/WorkflowTask_entity/WorkflowTask_entity.aod
index 96272fe5f1d9bb562efd850639fc9254cccf61e6..5a9cabd4bea5789fa4b4cc7f5c4e3ebddde6571d 100644
--- a/entity/WorkflowTask_entity/WorkflowTask_entity.aod
+++ b/entity/WorkflowTask_entity/WorkflowTask_entity.aod
@@ -76,14 +76,7 @@
     </entityField>
     <entityProvider>
       <name>InstanceTasks</name>
-      <dependencies>
-        <entityDependency>
-          <name>5913327f-1bb4-48b8-846e-639274290cee</name>
-          <entityName>WorkflowInstance_entity</entityName>
-          <fieldName>Tasks</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
+      <documentation>%aditoprj%/entity/WorkflowTask_entity/entityfields/instancetasks/documentation.adoc</documentation>
       <children>
         <entityParameter>
           <name>OnlyFinishedTasks_param</name>
@@ -94,6 +87,14 @@
           <expose v="false" />
         </entityParameter>
       </children>
+      <dependencies>
+        <entityDependency>
+          <name>5913327f-1bb4-48b8-846e-639274290cee</name>
+          <entityName>WorkflowInstance_entity</entityName>
+          <fieldName>Tasks</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
     </entityProvider>
     <entityParameter>
       <name>WorkflowInstanceId_param</name>
@@ -183,6 +184,14 @@
     </entityParameter>
     <entityProvider>
       <name>FinishedInstanceTasks</name>
+      <documentation>%aditoprj%/entity/WorkflowTask_entity/entityfields/finishedinstancetasks/documentation.adoc</documentation>
+      <children>
+        <entityParameter>
+          <name>OnlyFinishedTasks_param</name>
+          <valueProcess>%aditoprj%/entity/WorkflowTask_entity/entityfields/finishedinstancetasks/children/onlyfinishedtasks_param/valueProcess.js</valueProcess>
+          <expose v="false" />
+        </entityParameter>
+      </children>
       <dependencies>
         <entityDependency>
           <name>d5d39281-0183-42fa-960a-01347cddc85a</name>
@@ -191,13 +200,6 @@
           <isConsumer v="false" />
         </entityDependency>
       </dependencies>
-      <children>
-        <entityParameter>
-          <name>OnlyFinishedTasks_param</name>
-          <valueProcess>%aditoprj%/entity/WorkflowTask_entity/entityfields/finishedinstancetasks/children/onlyfinishedtasks_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-        </entityParameter>
-      </children>
     </entityProvider>
     <entityParameter>
       <name>IncludeServiceTasks_param</name>
@@ -205,17 +207,17 @@
     </entityParameter>
     <entityConsumer>
       <name>LinkedObject</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>ObjectProxy_entity</entityName>
-        <fieldName>FilteredObjects</fieldName>
-      </dependency>
       <children>
         <entityParameter>
           <name>Entity_param</name>
           <valueProcess>%aditoprj%/entity/WorkflowTask_entity/entityfields/linkedobject/children/entity_param/valueProcess.js</valueProcess>
         </entityParameter>
       </children>
+      <dependency>
+        <name>dependency</name>
+        <entityName>ObjectProxy_entity</entityName>
+        <fieldName>FilteredObjects</fieldName>
+      </dependency>
     </entityConsumer>
     <entityActionGroup>
       <name>tableActions</name>
diff --git a/entity/WorkflowTask_entity/afterSave.js b/entity/WorkflowTask_entity/afterSave.js
index 68fae8b0d2432769e1c21ae7d594d02fd20cdb87..61b54c53434b45f42ffd7184e88c153966cfac5c 100644
--- a/entity/WorkflowTask_entity/afterSave.js
+++ b/entity/WorkflowTask_entity/afterSave.js
@@ -30,9 +30,9 @@ if (entityData["FORMRESULT"])
     else
     {
         var params = {
-            "TaskTitle_param" : rowData["NAME.value"]
+            "TaskTitle_param": entityData["NAME"]
         };
         //if you try to open the task now, it will display "Task done"
-        neon.openContext("WorkflowTask", "WorkflowTaskPreview_view", [rowData["UID.value"]], neon.OPERATINGSTATE_VIEW, params);
+        neon.openContext("WorkflowTask", "WorkflowTaskPreview_view", [entityData["UID"]], neon.OPERATINGSTATE_VIEW, params);
     }
 }
\ No newline at end of file
diff --git a/entity/WorkflowTask_entity/entityfields/finishedinstancetasks/documentation.adoc b/entity/WorkflowTask_entity/entityfields/finishedinstancetasks/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..9c6e27a4c533764cf77525c919d49975460d37a4
--- /dev/null
+++ b/entity/WorkflowTask_entity/entityfields/finishedinstancetasks/documentation.adoc
@@ -0,0 +1,3 @@
+= FinishedInstanceTasks
+
+Provides all finished tasks for one process instance.
\ No newline at end of file
diff --git a/entity/WorkflowTask_entity/entityfields/instancetasks/documentation.adoc b/entity/WorkflowTask_entity/entityfields/instancetasks/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..1d64bc1c9b05d07e6da7b2687f01784fceed7a69
--- /dev/null
+++ b/entity/WorkflowTask_entity/entityfields/instancetasks/documentation.adoc
@@ -0,0 +1,3 @@
+= InstanceTasks
+
+Provides all active tasks for one workflow instance.
\ No newline at end of file
diff --git a/entity/WorkflowVariableValue_entity/WorkflowVariableValue_entity.aod b/entity/WorkflowVariableValue_entity/WorkflowVariableValue_entity.aod
index df6d2af4a4fbaaefe03d95087d1f7062bfbb4ff3..21b68b882b86779e038b545bdde94320daa33713 100644
--- a/entity/WorkflowVariableValue_entity/WorkflowVariableValue_entity.aod
+++ b/entity/WorkflowVariableValue_entity/WorkflowVariableValue_entity.aod
@@ -31,6 +31,7 @@
     </entityParameter>
     <entityProvider>
       <name>VariablesOfInstance</name>
+      <documentation>%aditoprj%/entity/WorkflowVariableValue_entity/entityfields/variablesofinstance/documentation.adoc</documentation>
       <dependencies>
         <entityDependency>
           <name>b10924d7-0ba4-4268-8b2f-383e7cf6045c</name>
diff --git a/entity/WorkflowVariableValue_entity/entityfields/variablesofinstance/documentation.adoc b/entity/WorkflowVariableValue_entity/entityfields/variablesofinstance/documentation.adoc
new file mode 100644
index 0000000000000000000000000000000000000000..a65691e2574d4bcb759568834d2154665042a0a9
--- /dev/null
+++ b/entity/WorkflowVariableValue_entity/entityfields/variablesofinstance/documentation.adoc
@@ -0,0 +1,3 @@
+= VariablesOfInstance
+
+Provides all variables contained in a specific workflow instance.
\ No newline at end of file
diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
index bee7fd6513ec22226a7dec19b5ee03fd0a3c2cdf..375e6f269678c8240a93bfc520ffd0c42045ac97 100644
--- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
+++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
@@ -61,7 +61,7 @@
       <key>Female</key>
     </entry>
     <entry>
-      <key>Contactmanagement</key>
+      <key>Contact Management</key>
     </entry>
     <entry>
       <key>Office address</key>
@@ -646,7 +646,7 @@
       <key>Orderitems</key>
     </entry>
     <entry>
-      <key>Sent receipts</key>
+      <key>Sent Receipts</key>
     </entry>
     <entry>
       <key>Copy receipt</key>
@@ -664,7 +664,7 @@
       <key>Turnover</key>
     </entry>
     <entry>
-      <key>Sent offers</key>
+      <key>Sent Offers</key>
     </entry>
     <entry>
       <key>Show all activities</key>
@@ -733,7 +733,7 @@
       <key>Show all salesprojects</key>
     </entry>
     <entry>
-      <key>Open salesprojects</key>
+      <key>Open Salesprojects</key>
     </entry>
     <entry>
       <key>July</key>
@@ -2374,7 +2374,7 @@
       <key>{$ADDRESS_IDENTIFIER}</key>
     </entry>
     <entry>
-      <key>Salesproject phases</key>
+      <key>Salesproject Phases</key>
     </entry>
     <entry>
       <key>Add to Campaign</key>
@@ -2392,7 +2392,7 @@
       <key>Add participants to Campaign</key>
     </entry>
     <entry>
-      <key>Key figures</key>
+      <key>Key Figures</key>
     </entry>
     <entry>
       <key>Delete all usage</key>
@@ -4105,7 +4105,7 @@
       <key>Show my campaigns</key>
     </entry>
     <entry>
-      <key>My campaigns</key>
+      <key>My Campaigns</key>
     </entry>
     <entry>
       <key>Add to Bulkmail</key>
@@ -4297,7 +4297,7 @@
       <key>Unknown incoming call from %0 to %1</key>
     </entry>
     <entry>
-      <key>All unlinked mails</key>
+      <key>All Unlinked Mails</key>
     </entry>
     <entry>
       <key>hour</key>
@@ -4309,7 +4309,7 @@
       <key>Incoming call from %0 (%1) to %2</key>
     </entry>
     <entry>
-      <key>import mails</key>
+      <key>Import Mails</key>
     </entry>
     <entry>
       <key>Unknown accepted call from %0 to %1, duration: %2</key>
@@ -4546,7 +4546,7 @@
       <key>Campaign management</key>
     </entry>
     <entry>
-      <key>Campaign costs</key>
+      <key>Campaign Costs</key>
     </entry>
     <entry>
       <key>Shows all campaigns</key>
@@ -4777,7 +4777,7 @@
       <key>Credit</key>
     </entry>
     <entry>
-      <key>My tickets</key>
+      <key>My Tickets</key>
     </entry>
     <entry>
       <key>Replacement name</key>
@@ -4933,13 +4933,13 @@
       <key>Show my contacts</key>
     </entry>
     <entry>
-      <key>My contacts</key>
+      <key>My Contacts</key>
     </entry>
     <entry>
       <key>Show my organisations</key>
     </entry>
     <entry>
-      <key>My organisations</key>
+      <key>My Organisations</key>
     </entry>
     <entry>
       <key>Custom template</key>
@@ -4971,18 +4971,12 @@
     <entry>
       <key>Has sales approved this step?</key>
     </entry>
-    <entry>
-      <key>"</key>
-    </entry>
     <entry>
       <key>Import Date</key>
     </entry>
     <entry>
       <key>Import Data</key>
     </entry>
-    <entry>
-      <key>;</key>
-    </entry>
     <entry>
       <key>Standard mail</key>
     </entry>
@@ -5333,9 +5327,6 @@
     <entry>
       <key>Mobility, Transport and Logistics</key>
     </entry>
-    <entry>
-      <key>Sales Project</key>
-    </entry>
     <entry>
       <key>Load data</key>
     </entry>
@@ -5688,7 +5679,7 @@
       <key>No letters</key>
     </entry>
     <entry>
-      <key>Own workflow tasks</key>
+      <key>My Workflow Tasks</key>
     </entry>
     <entry>
       <key>My workflow tasks</key>
@@ -6066,7 +6057,7 @@
       <key>Workflow management</key>
     </entry>
     <entry>
-      <key>my visit planning</key>
+      <key>My Visit Planning</key>
     </entry>
     <entry>
       <key>Update offer</key>
@@ -6290,9 +6281,6 @@
     <entry>
       <key>Lead Import</key>
     </entry>
-    <entry>
-      <key>Contact Management</key>
-    </entry>
     <entry>
       <key>Campaign Planning</key>
     </entry>
@@ -6521,9 +6509,6 @@
     <entry>
       <key>Full details</key>
     </entry>
-    <entry>
-      <key>Sales Projects</key>
-    </entry>
     <entry>
       <key>set Read</key>
     </entry>
@@ -6705,7 +6690,7 @@
       <key>{SENT_MAIL}</key>
     </entry>
     <entry>
-      <key>The Sales Project can only be filled when a company has been specified</key>
+      <key>The Salesproject can only be filled when a company has been specified</key>
     </entry>
     <entry>
       <key>The workflow could not be deployed</key>
@@ -7293,6 +7278,315 @@
     <entry>
       <key>Standard Zip</key>
     </entry>
+    <entry>
+      <key>Outstanding Amount</key>
+    </entry>
+    <entry>
+      <key>Start marketing mailing</key>
+    </entry>
+    <entry>
+      <key>Email address</key>
+    </entry>
+    <entry>
+      <key>#rememberme</key>
+    </entry>
+    <entry>
+      <key>#login</key>
+    </entry>
+    <entry>
+      <key>Last change</key>
+    </entry>
+    <entry>
+      <key>Knowledge entries</key>
+    </entry>
+    <entry>
+      <key>Newsfeed (Preview)</key>
+    </entry>
+    <entry>
+      <key>Edited on</key>
+    </entry>
+    <entry>
+      <key>Created on</key>
+    </entry>
+    <entry>
+      <key>Discussion</key>
+    </entry>
+    <entry>
+      <key>Newsfeed (Full)</key>
+    </entry>
+    <entry>
+      <key>Closed</key>
+    </entry>
+    <entry>
+      <key>Text content</key>
+    </entry>
+    <entry>
+      <key>Reply</key>
+    </entry>
+    <entry>
+      <key>All Knowledge Entries</key>
+    </entry>
+    <entry>
+      <key>Export HTML</key>
+    </entry>
+    <entry>
+      <key>Publishing level</key>
+    </entry>
+    <entry>
+      <key>Discussions</key>
+    </entry>
+    <entry>
+      <key>Knowledge Management</key>
+    </entry>
+    <entry>
+      <key>List news articles</key>
+    </entry>
+    <entry>
+      <key>Knowledge Role</key>
+    </entry>
+    <entry>
+      <key>Shows complete news articles</key>
+    </entry>
+    <entry>
+      <key>Knowledge</key>
+    </entry>
+    <entry>
+      <key>Toggle status</key>
+    </entry>
+    <entry>
+      <key>Add app</key>
+    </entry>
+    <entry>
+      <key>Open Teams</key>
+    </entry>
+    <entry>
+      <key>Choose Team</key>
+    </entry>
+    <entry>
+      <key>Delete Team</key>
+    </entry>
+    <entry>
+      <key>Restore Team</key>
+    </entry>
+    <entry>
+      <key>Create Team</key>
+    </entry>
+    <entry>
+      <key>Team role</key>
+    </entry>
+    <entry>
+      <key>Edit Team</key>
+    </entry>
+    <entry>
+      <key>Sales Project</key>
+    </entry>
+    <entry>
+      <key>Channels</key>
+    </entry>
+    <entry>
+      <key>Private</key>
+    </entry>
+    <entry>
+      <key>Rechnungsbetrag</key>
+    </entry>
+    <entry>
+      <key>[TEST] Sql_lib - SqlMaskingUtils</key>
+    </entry>
+    <entry>
+      <key>Knowledgebase</key>
+    </entry>
+    <entry>
+      <key>Marketing workflow</key>
+    </entry>
+    <entry>
+      <key>Token</key>
+    </entry>
+    <entry>
+      <key>Edited by</key>
+    </entry>
+    <entry>
+      <key>Sales Project Analyses</key>
+    </entry>
+    <entry>
+      <key>Sales Project Id</key>
+    </entry>
+    <entry>
+      <key>Sales Project Convertion Rates</key>
+    </entry>
+    <entry>
+      <key>Set Campaign Step</key>
+    </entry>
+    <entry>
+      <key>Member</key>
+    </entry>
+    <entry>
+      <key>Tags</key>
+    </entry>
+    <entry>
+      <key>[TEST] Sql_lib - SqlBuilder</key>
+    </entry>
+    <entry>
+      <key>Feed</key>
+    </entry>
+    <entry>
+      <key>[TEST] KeywordAttribute_lib</key>
+    </entry>
+    <entry>
+      <key>Messages</key>
+    </entry>
+    <entry>
+      <key>Channel Name</key>
+    </entry>
+    <entry>
+      <key>Sales Project Phases</key>
+    </entry>
+    <entry>
+      <key>Start workflows</key>
+    </entry>
+    <entry>
+      <key>edited</key>
+    </entry>
+    <entry>
+      <key>Channel</key>
+    </entry>
+    <entry>
+      <key>Import from Teams</key>
+    </entry>
+    <entry>
+      <key>Invitation</key>
+    </entry>
+    <entry>
+      <key>send as mail</key>
+    </entry>
+    <entry>
+      <key>User token</key>
+    </entry>
+    <entry>
+      <key>Team name</key>
+    </entry>
+    <entry>
+      <key>Knowledge Roles</key>
+    </entry>
+    <entry>
+      <key>Valid</key>
+    </entry>
+    <entry>
+      <key>Audit Logs</key>
+    </entry>
+    <entry>
+      <key>Editorial</key>
+    </entry>
+    <entry>
+      <key>KnowledgeRoles</key>
+    </entry>
+    <entry>
+      <key>Remove from Campaign</key>
+    </entry>
+    <entry>
+      <key>Message</key>
+    </entry>
+    <entry>
+      <key>Add members</key>
+    </entry>
+    <entry>
+      <key>[TEST] .All</key>
+    </entry>
+    <entry>
+      <key>Newsfeed (Complete Article)</key>
+    </entry>
+    <entry>
+      <key>Notification</key>
+    </entry>
+    <entry>
+      <key>Load older messages</key>
+    </entry>
+    <entry>
+      <key>Newsletter</key>
+    </entry>
+    <entry>
+      <key>Adds an answer to the selected discussion</key>
+    </entry>
+    <entry>
+      <key>LinkedIn (Person)</key>
+    </entry>
+    <entry>
+      <key>Newsfeed Timeline</key>
+    </entry>
+    <entry>
+      <key>MS Teams</key>
+    </entry>
+    <entry>
+      <key>User tokens</key>
+    </entry>
+    <entry>
+      <key>[TEST] Keyword_lib</key>
+    </entry>
+    <entry>
+      <key>News</key>
+    </entry>
+    <entry>
+      <key>Sales Projects</key>
+    </entry>
+    <entry>
+      <key>Team</key>
+    </entry>
+    <entry>
+      <key>Created by</key>
+    </entry>
+    <entry>
+      <key>Employee count</key>
+    </entry>
+    <entry>
+      <key>Toggles the status of  selected discussion between open and closed</key>
+    </entry>
+    <entry>
+      <key>Synchronize documents</key>
+    </entry>
+    <entry>
+      <key>AuditLogs</key>
+    </entry>
+    <entry>
+      <key>Audit Log</key>
+    </entry>
+    <entry>
+      <key>Admin</key>
+    </entry>
+    <entry>
+      <key>Show all audits</key>
+    </entry>
+    <entry>
+      <key>Sales Project milestone Id</key>
+    </entry>
+    <entry>
+      <key>LinkedIn (Organisation)</key>
+    </entry>
+    <entry>
+      <key>[TEST] UnitTest_lib</key>
+    </entry>
+    <entry>
+      <key>Exports the knowledge entry as a html file</key>
+    </entry>
+    <entry>
+      <key>The max participants count can not be equal or less then 0</key>
+    </entry>
+    <entry>
+      <key>Illegal Parent Operator in buildFilterObj-Function:</key>
+    </entry>
+    <entry>
+      <key>My campaigns</key>
+    </entry>
+    <entry>
+      <key>Subcategory</key>
+    </entry>
+    <entry>
+      <key>Campaign costs</key>
+    </entry>
+    <entry>
+      <key>Verantwortlicher</key>
+    </entry>
+    <entry>
+      <key>The team must have at least one owner</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 b3d003710b7d14ec99d63e66bbfcee469231a149..9efeb9f1343cec8f101ffd7f4549154d2659e3f7 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -6,10 +6,46 @@
   <country></country>
   <variant></variant>
   <keyValueMap>
+    <entry>
+      <key>The max participants count can not be equal or less then 0</key>
+      <value>Die maximale Teilnehmerzahl muss größer 0 sein!</value>
+    </entry>
+    <entry>
+      <key>Illegal Parent Operator in buildFilterObj-Function:</key>
+      <value>Übergebener Operator ungültig in Funktion "buildFilterObj"</value>
+    </entry>
     <entry>
       <key>Probability AI</key>
       <value>Wahrscheinlichkeit KI</value>
     </entry>
+    <entry>
+      <key>Delete Team</key>
+      <value>Team löschen</value>
+    </entry>
+    <entry>
+      <key>Open Teams</key>
+      <value>Teams öffnen</value>
+    </entry>
+    <entry>
+      <key>Restore Team</key>
+      <value>Team wiederherstellen</value>
+    </entry>
+    <entry>
+      <key>Choose Team</key>
+      <value>Team auswählen</value>
+    </entry>
+    <entry>
+      <key>Private</key>
+      <value>Privat</value>
+    </entry>
+    <entry>
+      <key>Add app</key>
+      <value>App hinzufügen</value>
+    </entry>
+    <entry>
+      <key>Edit Team</key>
+      <value>Team bearbeiten</value>
+    </entry>
     <entry>
       <key>The start date has to be before the end date.</key>
       <value>Das Startdatum muss vor dem Enddatum sein.</value>
@@ -38,10 +74,18 @@
       <key>Favoritegroup</key>
       <value>Favoritengruppe</value>
     </entry>
+    <entry>
+      <key>The team must have at least one owner</key>
+      <value>Das Team muss mindestens einen Besitzer haben</value>
+    </entry>
     <entry>
       <key>Data imported. Contact not found.</key>
       <value>Daten importiert. Keine weiteren Personendaten gefunden.</value>
     </entry>
+    <entry>
+      <key>Last change</key>
+      <value>Letzte Änderung</value>
+    </entry>
     <entry>
       <key>Variables</key>
       <value>Variablen</value>
@@ -50,6 +94,10 @@
       <key>Finished</key>
       <value>Fertig</value>
     </entry>
+    <entry>
+      <key>Knowledge Management</key>
+      <value>Wissensmanagement</value>
+    </entry>
     <entry>
       <key>Show my organisations</key>
       <value>Meine Firmen anzeigen</value>
@@ -58,6 +106,10 @@
       <key>Radius Search</key>
       <value>Umkreissuche</value>
     </entry>
+    <entry>
+      <key>Discussion</key>
+      <value>Diskussion</value>
+    </entry>
     <entry>
       <key>${FILTER_DYNAMIC_VALUE_ME}</key>
       <value>Ich</value>
@@ -83,7 +135,7 @@
       <value>Keine E-Mails</value>
     </entry>
     <entry>
-      <key>My organisations</key>
+      <key>My Organisations</key>
       <value>Meine Firmen</value>
     </entry>
     <entry>
@@ -259,7 +311,7 @@
       <value>Eigenschaftsgruppen können nicht verwendet werden</value>
     </entry>
     <entry>
-      <key>My contacts</key>
+      <key>My Contacts</key>
       <value>Meine Kontakte</value>
     </entry>
     <entry>
@@ -407,7 +459,7 @@
       <value>Priorität</value>
     </entry>
     <entry>
-      <key>Salesproject phases</key>
+      <key>Salesproject Phases</key>
       <value>Vertriebsprojektphasen</value>
     </entry>
     <entry>
@@ -914,6 +966,10 @@
       <key>Contacts</key>
       <value>Kontakte</value>
     </entry>
+    <entry>
+      <key>Channels</key>
+      <value>Kanäle</value>
+    </entry>
     <entry>
       <key>Address</key>
       <value>Adresse</value>
@@ -1028,7 +1084,7 @@
       <value>Teilnehmer/innen</value>
     </entry>
     <entry>
-      <key>Contactmanagement</key>
+      <key>Contact Management</key>
       <value>Kontaktmanagement</value>
     </entry>
     <entry>
@@ -1371,6 +1427,10 @@
       <key>IN</key>
       <value>EIN</value>
     </entry>
+    <entry>
+      <key>Knowledge</key>
+      <value>Wissen</value>
+    </entry>
     <entry>
       <key>OUT</key>
       <value>AUS</value>
@@ -1435,6 +1495,10 @@
       <key>Order</key>
       <value>Bestellung</value>
     </entry>
+    <entry>
+      <key>Team role</key>
+      <value>Teamrolle</value>
+    </entry>
     <entry>
       <key>Postponed</key>
       <value>Vertagt</value>
@@ -1686,6 +1750,10 @@
       <key>Role</key>
       <value>Rolle</value>
     </entry>
+    <entry>
+      <key>Closed</key>
+      <value>Geschlossen</value>
+    </entry>
     <entry>
       <key>End date</key>
       <value>Enddatum</value>
@@ -1763,7 +1831,7 @@
       <value>Niedrigpreisstrategie</value>
     </entry>
     <entry>
-      <key>Sent offers</key>
+      <key>Sent Offers</key>
       <value>Versendete Angebote</value>
     </entry>
     <entry>
@@ -1787,7 +1855,7 @@
       <value>Vertriebsprojekte</value>
     </entry>
     <entry>
-      <key>Open salesprojects</key>
+      <key>Open Salesprojects</key>
       <value>Offene Vertriebsprojekte</value>
     </entry>
     <entry>
@@ -2016,7 +2084,7 @@
       <value>Belegposten</value>
     </entry>
     <entry>
-      <key>Sent receipts</key>
+      <key>Sent Receipts</key>
       <value>Versendete Belege</value>
     </entry>
     <entry>
@@ -2200,7 +2268,7 @@
       <value>Vertriebsdashboard</value>
     </entry>
     <entry>
-      <key>Key figures</key>
+      <key>Key Figures</key>
       <value>Kennzahlen</value>
     </entry>
     <entry>
@@ -2795,6 +2863,10 @@
       <key>new</key>
       <value>neu</value>
     </entry>
+    <entry>
+      <key>Start marketing mailing</key>
+      <value>Marketing Mailing starten</value>
+    </entry>
     <entry>
       <key>Adviser</key>
       <value>Berater</value>
@@ -2983,6 +3055,10 @@
       <key>Georgia</key>
       <value>Georgia</value>
     </entry>
+    <entry>
+      <key>Publishing level</key>
+      <value>Veröffentlichung</value>
+    </entry>
     <entry>
       <key>Saint Kitts and Nevis</key>
       <value>St. Kitts und Nevis</value>
@@ -3067,6 +3143,10 @@
       <key>Kgs</key>
       <value>Kg</value>
     </entry>
+    <entry>
+      <key>Email address</key>
+      <value>E-Mail Adresse</value>
+    </entry>
     <entry>
       <key>Australia</key>
       <value>Australien</value>
@@ -3163,6 +3243,10 @@
       <key>Project manager</key>
       <value>Projektmanager</value>
     </entry>
+    <entry>
+      <key>List news articles</key>
+      <value>News-Artikel auflisten</value>
+    </entry>
     <entry>
       <key>Singapore</key>
       <value>Singapur</value>
@@ -4435,6 +4519,10 @@
       <key>Relation Title</key>
       <value>Beziehungstitel</value>
     </entry>
+    <entry>
+      <key>Knowledge entries</key>
+      <value>Wissenseinträge</value>
+    </entry>
     <entry>
       <key>%0 \"%1\"</key>
     </entry>
@@ -4446,10 +4534,18 @@
       <key>Data executed</key>
       <value>Daten ausgeführt</value>
     </entry>
+    <entry>
+      <key>Export HTML</key>
+      <value>HTML exportieren</value>
+    </entry>
     <entry>
       <key>Indexsearch</key>
       <value>Indexsuche</value>
     </entry>
+    <entry>
+      <key>Edited on</key>
+      <value>Bearbeitet am</value>
+    </entry>
     <entry>
       <key>Appointment link Id</key>
       <value>Terminverknüpfungs Id</value>
@@ -4474,6 +4570,10 @@
       <key>Int value</key>
       <value>Zahlenwert</value>
     </entry>
+    <entry>
+      <key>Text content</key>
+      <value>Textinhalt</value>
+    </entry>
     <entry>
       <key>Object 2 row Id</key>
       <value>Objekt 2 Row Id</value>
@@ -4614,9 +4714,13 @@
       <key>Address addition</key>
       <value>Adresszusatz</value>
     </entry>
+    <entry>
+      <key>Shows complete news articles</key>
+      <value>Zeigt News-Artikel vollständig an</value>
+    </entry>
     <entry>
       <key>the \"%0\" table is configured to get logged but this is the logging-stoarge itself and cannot be monitored</key>
-      <value>Die "% 0" -Tabelle ist so konfiguriert, dass sie protokolliert wird. Dies ist jedoch der Protokollierspeicher selbst und kann nicht überwacht werden</value>
+      <value>Die "%0" -Tabelle ist so konfiguriert, dass sie protokolliert wird. Dies ist jedoch der Protokollierspeicher selbst und kann nicht überwacht werden</value>
     </entry>
     <entry>
       <key>Attribute usage Id</key>
@@ -5286,6 +5390,10 @@
       <key>Minimal count must be a positive whole number</key>
       <value>Minimale Anzahl muss eine positive, ganze Zahl sein</value>
     </entry>
+    <entry>
+      <key>All Knowledge Entries</key>
+      <value>Alle Wissenseinträge</value>
+    </entry>
     <entry>
       <key>Maximal count must be one or higher</key>
       <value>Maximale Anzahl muss eins oder höher sein</value>
@@ -5330,6 +5438,10 @@
       <key>Privacy agreement</key>
       <value>Datenschutzabkommen</value>
     </entry>
+    <entry>
+      <key>Newsfeed (Preview)</key>
+      <value>Newsfeed (Vorschau)</value>
+    </entry>
     <entry>
       <key>Commodity group A</key>
       <value>Warengruppe A</value>
@@ -6142,7 +6254,7 @@
       <value>Keine Kontakte ausgewählt</value>
     </entry>
     <entry>
-      <key>My campaigns</key>
+      <key>My Campaigns</key>
       <value>Meine Kampagnen</value>
     </entry>
     <entry>
@@ -6235,7 +6347,7 @@
       <value>eine Datei ignoriert</value>
     </entry>
     <entry>
-      <key>All unlinked mails</key>
+      <key>All Unlinked Mails</key>
       <value>Alle unverknüpften E-Mails</value>
     </entry>
     <entry>
@@ -6251,7 +6363,7 @@
       <value>Eingehender Anruf von %0 (%1) nach %2</value>
     </entry>
     <entry>
-      <key>import mails</key>
+      <key>Import Mails</key>
       <value>E-Mails importieren</value>
     </entry>
     <entry>
@@ -6455,7 +6567,7 @@
       <value>Kampagnenmanagement</value>
     </entry>
     <entry>
-      <key>Campaign costs</key>
+      <key>Campaign Costs</key>
       <value>Kampagnenkosten</value>
     </entry>
     <entry>
@@ -6548,7 +6660,7 @@
     </entry>
     <entry>
       <key>Order number</key>
-      <value>Belegsnummer</value>
+      <value>Belegnummer</value>
     </entry>
     <entry>
       <key>Permission Action</key>
@@ -6568,7 +6680,7 @@
     </entry>
     <entry>
       <key>Print reminder</key>
-      <value>Mahnung drucken</value>
+      <value>Mahnung anzeigen</value>
     </entry>
     <entry>
       <key>Rech.-Betrag</key>
@@ -6576,7 +6688,7 @@
     </entry>
     <entry>
       <key>Order date</key>
-      <value>Belegsdatum</value>
+      <value>Belegdatum</value>
     </entry>
     <entry>
       <key>Due date</key>
@@ -6628,7 +6740,7 @@
     </entry>
     <entry>
       <key>This error should never appear - contact administrator (PermissionDetail_entity.PermissionAction.onValidation).</key>
-      <value>Dieser Fehler sollte nie erscheinen - kontaktieren sie einen Administrator (PermissionDetail_entity.PermissionAction.onValidation).</value>
+      <value>Dieser Fehler sollte nie erscheinen - kontaktieren Sie einen Administrator (PermissionDetail_entity.PermissionAction.onValidation).</value>
     </entry>
     <entry>
       <key>Empty actions are invalid!</key>
@@ -6730,7 +6842,7 @@
     </entry>
     <entry>
       <key>Only .odt files are supported for bulkletters.</key>
-      <value>Für Serienbriefe werden nur.odt Dateien unterstützt</value>
+      <value>Für Serienbriefe werden nur .odt Dateien unterstützt</value>
     </entry>
     <entry>
       <key>Show tickets where I am the editor</key>
@@ -6745,7 +6857,7 @@
       <value>Vorlagen-Anhänge verwenden</value>
     </entry>
     <entry>
-      <key>My tickets</key>
+      <key>My Tickets</key>
       <value>Meine Tickets</value>
     </entry>
     <entry>
@@ -6873,6 +6985,10 @@
       <key>Faroe Islands</key>
       <value>Färöer</value>
     </entry>
+    <entry>
+      <key>Discussions</key>
+      <value>Diskussionen</value>
+    </entry>
     <entry>
       <key>${CONTRACT_STATUS}</key>
       <value>Vertragsstatus</value>
@@ -6956,10 +7072,6 @@
     <entry>
       <key>yyyyMMdd</key>
     </entry>
-    <entry>
-      <key>Sales Project</key>
-      <value>Vertriebsprojekt</value>
-    </entry>
     <entry>
       <key>closed</key>
       <value>geschlossen</value>
@@ -7112,6 +7224,10 @@
       <key>Column 7</key>
       <value>Spalte 7</value>
     </entry>
+    <entry>
+      <key>Reply</key>
+      <value>Antworten</value>
+    </entry>
     <entry>
       <key>Column 6</key>
       <value>Spalte 6</value>
@@ -7180,6 +7296,10 @@
       <key>Lead</key>
       <value>Lead </value>
     </entry>
+    <entry>
+      <key>Toggle status</key>
+      <value>Status ändern</value>
+    </entry>
     <entry>
       <key>Company name</key>
       <value>Firmenname</value>
@@ -7408,6 +7528,10 @@
       <key>Nein</key>
       <value>Nein</value>
     </entry>
+    <entry>
+      <key>Create Team</key>
+      <value>Team erstellen</value>
+    </entry>
     <entry>
       <key>Use for duplicate search</key>
       <value>Für Duplettensuche benutzen</value>
@@ -7786,13 +7910,7 @@ Bitte Datumseingabe prüfen</value>
       <value>Nur Eigene anzeigen</value>
     </entry>
     <entry>
-      <key>"</key>
-    </entry>
-    <entry>
-      <key>;</key>
-    </entry>
-    <entry>
-      <key>Own workflow tasks</key>
+      <key>My Workflow Tasks</key>
       <value>Meine Workflow Aufgaben</value>
     </entry>
     <entry>
@@ -7861,6 +7979,10 @@ Bitte Datumseingabe prüfen</value>
       <key>${CANCELLED}</key>
       <value>Abgebrochen</value>
     </entry>
+    <entry>
+      <key>Newsfeed (Full)</key>
+      <value>Newsfeed (Vollständig)</value>
+    </entry>
     <entry>
       <key>Workflow signal</key>
       <value>Workflow Signal</value>
@@ -8001,6 +8123,10 @@ Bitte Datumseingabe prüfen</value>
       <key>Senderphone</key>
       <value>Sendertelefonnummer</value>
     </entry>
+    <entry>
+      <key>Sales Project</key>
+      <value>Vertriebsprojekt</value>
+    </entry>
     <entry>
       <key>Sendername</key>
       <value>Sendername</value>
@@ -8210,7 +8336,7 @@ Bitte Datumseingabe prüfen</value>
       <value>Workflow management</value>
     </entry>
     <entry>
-      <key>my visit planning</key>
+      <key>My Visit Planning</key>
       <value>Meine Besuchsplanung</value>
     </entry>
     <entry>
@@ -8253,6 +8379,9 @@ Bitte Datumseingabe prüfen</value>
       <key>The radius has to be %0 or lesser.</key>
       <value>Der Radius muss %0 km oder weniger betragen.</value>
     </entry>
+    <entry>
+      <key>Subcategory</key>
+    </entry>
     <entry>
       <key>The radius has to be at least %0.</key>
       <value>Der Radius muss mindestens %0 km betragen.</value>
@@ -8545,10 +8674,6 @@ Bitte Datumseingabe prüfen</value>
       <key>Lead Import</key>
       <value>Leadimport</value>
     </entry>
-    <entry>
-      <key>Contact Management</key>
-      <value>Kontaktmanagement</value>
-    </entry>
     <entry>
       <key>Campaign Planning</key>
       <value>Kampagnenplanung</value>
@@ -8557,6 +8682,10 @@ Bitte Datumseingabe prüfen</value>
       <key>Bulk Mail</key>
       <value>Serienmail</value>
     </entry>
+    <entry>
+      <key>Knowledge Role</key>
+      <value>Wissensrolle</value>
+    </entry>
     <entry>
       <key>Workflow Definition</key>
       <value>Workflowdefinition</value>
@@ -8717,6 +8846,10 @@ Bitte Datumseingabe prüfen</value>
       <key>Read and Write Permission</key>
       <value>Volle Lese- und Schreibberechtigung</value>
     </entry>
+    <entry>
+      <key>Created on</key>
+      <value>Erstellt am</value>
+    </entry>
     <entry>
       <key>Synchronize calendar permissions from Exchange to ADITO</key>
       <value>Synchronisiere Kalenderberechtigungen von Exchange nach ADITO</value>
@@ -8745,10 +8878,6 @@ Bitte Datumseingabe prüfen</value>
       <key>Not created yet</key>
       <value>Noch nicht erstellt</value>
     </entry>
-    <entry>
-      <key>Sales Projects</key>
-      <value>Vertriebsprojekte</value>
-    </entry>
     <entry>
       <key>set Read</key>
       <value>Gelesen setzen</value>
@@ -9265,7 +9394,7 @@ Bitte Datumseingabe prüfen</value>
       <value>Punkte</value>
     </entry>
     <entry>
-      <key>The Sales Project can only be filled when a company has been specified</key>
+      <key>The Salesproject can only be filled when a company has been specified</key>
       <value>vertriebsprojekt darf nur gefüllt sein wenn eine Firma festgelegt wurde.</value>
     </entry>
     <entry>
@@ -9430,16 +9559,16 @@ Bitte Datumseingabe prüfen</value>
       </value>
     </entry>
     <entry>
-      <key>LinkedIn (Person)</key>
-      <value>LinkedIn (Person)</value>
+      <key>Linked in (Person)</key>
+      <value>Linked In (Person)</value>
     </entry>
     <entry>
       <key>Mobile number (Organisation)</key>
       <value>Handynummer (Organisation)</value>
     </entry>
     <entry>
-      <key>LinkedIn (Organisation)</key>
-      <value>LinkedIn (Organisation)</value>
+      <key>Linked in (Organisation)</key>
+      <value>Linked In (Organisation)</value>
     </entry>
     <entry>
       <key>Xing (Organisation)</key>
@@ -9644,7 +9773,7 @@ Bitte Datumseingabe prüfen</value>
     </entry>
     <entry>
       <key>Mailbridge failed: user '%0' is unknown, contact an administrator.</key>
-      <value>Mailbridge fehlgeschlagen: Benutzer '%0' ist unbekannt, kontaktieren sie einen Administrator.</value>
+      <value>Mailbridge fehlgeschlagen: Benutzer '%0' ist unbekannt, kontaktieren Sie einen Administrator.</value>
     </entry>
     <entry>
       <key>Count Chart</key>
@@ -9674,6 +9803,10 @@ Bitte Datumseingabe prüfen</value>
       <key>Standard Zip</key>
       <value>Standart Plz</value>
     </entry>
+    <entry>
+      <key>Outstanding Amount</key>
+      <value>Offener Betrag</value>
+    </entry>
     <entry>
       <key>#rememberme</key>
       <value>Angemeldet bleiben</value>
@@ -9682,6 +9815,196 @@ Bitte Datumseingabe prüfen</value>
       <key>#login</key>
       <value>Login Token</value>
     </entry>
+    <entry>
+      <key>Rechnungsbetrag</key>
+    </entry>
+    <entry>
+      <key>[TEST] Sql_lib - SqlMaskingUtils</key>
+    </entry>
+    <entry>
+      <key>Knowledgebase</key>
+    </entry>
+    <entry>
+      <key>Marketing workflow</key>
+    </entry>
+    <entry>
+      <key>Token</key>
+    </entry>
+    <entry>
+      <key>Edited by</key>
+    </entry>
+    <entry>
+      <key>Sales Project Analyses</key>
+    </entry>
+    <entry>
+      <key>Sales Project Id</key>
+    </entry>
+    <entry>
+      <key>Sales Project Convertion Rates</key>
+    </entry>
+    <entry>
+      <key>Set Campaign Step</key>
+    </entry>
+    <entry>
+      <key>Member</key>
+    </entry>
+    <entry>
+      <key>Tags</key>
+    </entry>
+    <entry>
+      <key>[TEST] Sql_lib - SqlBuilder</key>
+    </entry>
+    <entry>
+      <key>Feed</key>
+    </entry>
+    <entry>
+      <key>[TEST] KeywordAttribute_lib</key>
+    </entry>
+    <entry>
+      <key>Messages</key>
+    </entry>
+    <entry>
+      <key>Channel Name</key>
+    </entry>
+    <entry>
+      <key>Sales Project Phases</key>
+    </entry>
+    <entry>
+      <key>Start workflows</key>
+      <value>Workflows starten</value>
+    </entry>
+    <entry>
+      <key>edited</key>
+    </entry>
+    <entry>
+      <key>Channel</key>
+    </entry>
+    <entry>
+      <key>Import from Teams</key>
+    </entry>
+    <entry>
+      <key>Invitation</key>
+    </entry>
+    <entry>
+      <key>send as mail</key>
+    </entry>
+    <entry>
+      <key>User token</key>
+    </entry>
+    <entry>
+      <key>Team name</key>
+    </entry>
+    <entry>
+      <key>Knowledge Roles</key>
+    </entry>
+    <entry>
+      <key>Valid</key>
+    </entry>
+    <entry>
+      <key>Audit Logs</key>
+    </entry>
+    <entry>
+      <key>Editorial</key>
+    </entry>
+    <entry>
+      <key>KnowledgeRoles</key>
+    </entry>
+    <entry>
+      <key>Remove from Campaign</key>
+    </entry>
+    <entry>
+      <key>Message</key>
+    </entry>
+    <entry>
+      <key>Add members</key>
+    </entry>
+    <entry>
+      <key>[TEST] .All</key>
+    </entry>
+    <entry>
+      <key>Newsfeed (Complete Article)</key>
+    </entry>
+    <entry>
+      <key>Notification</key>
+    </entry>
+    <entry>
+      <key>Load older messages</key>
+    </entry>
+    <entry>
+      <key>Newsletter</key>
+    </entry>
+    <entry>
+      <key>Adds an answer to the selected discussion</key>
+    </entry>
+    <entry>
+      <key>LinkedIn (Person)</key>
+    </entry>
+    <entry>
+      <key>Newsfeed Timeline</key>
+    </entry>
+    <entry>
+      <key>MS Teams</key>
+    </entry>
+    <entry>
+      <key>User tokens</key>
+    </entry>
+    <entry>
+      <key>[TEST] Keyword_lib</key>
+    </entry>
+    <entry>
+      <key>News</key>
+    </entry>
+    <entry>
+      <key>Sales Projects</key>
+    </entry>
+    <entry>
+      <key>Team</key>
+    </entry>
+    <entry>
+      <key>Created by</key>
+    </entry>
+    <entry>
+      <key>Employee count</key>
+    </entry>
+    <entry>
+      <key>Toggles the status of  selected discussion between open and closed</key>
+    </entry>
+    <entry>
+      <key>Synchronize documents</key>
+    </entry>
+    <entry>
+      <key>AuditLogs</key>
+    </entry>
+    <entry>
+      <key>Audit Log</key>
+    </entry>
+    <entry>
+      <key>Admin</key>
+    </entry>
+    <entry>
+      <key>Show all audits</key>
+    </entry>
+    <entry>
+      <key>Sales Project milestone Id</key>
+    </entry>
+    <entry>
+      <key>LinkedIn (Organisation)</key>
+    </entry>
+    <entry>
+      <key>[TEST] UnitTest_lib</key>
+    </entry>
+    <entry>
+      <key>Exports the knowledge entry as a html file</key>
+    </entry>
+    <entry>
+      <key>My campaigns</key>
+    </entry>
+    <entry>
+      <key>Campaign costs</key>
+    </entry>
+    <entry>
+      <key>Verantwortlicher</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
index 5cdb447d6f2e8ede8872d869542c99486b40818c..e27607261acb9a472b6febcf29b79d1b6aebb970 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -86,7 +86,7 @@
       <key>Female</key>
     </entry>
     <entry>
-      <key>Contactmanagement</key>
+      <key>Contact Management</key>
     </entry>
     <entry>
       <key>Office address</key>
@@ -679,7 +679,7 @@
       <key>Orderitems</key>
     </entry>
     <entry>
-      <key>Sent receipts</key>
+      <key>Sent Receipts</key>
     </entry>
     <entry>
       <key>Copy receipt</key>
@@ -697,7 +697,7 @@
       <key>Turnover</key>
     </entry>
     <entry>
-      <key>Sent offers</key>
+      <key>Sent Offers</key>
     </entry>
     <entry>
       <key>Show all activities</key>
@@ -766,7 +766,7 @@
       <key>Show all salesprojects</key>
     </entry>
     <entry>
-      <key>Open salesprojects</key>
+      <key>Open Salesprojects</key>
     </entry>
     <entry>
       <key>July</key>
@@ -2426,7 +2426,7 @@
       <value>Identifier</value>
     </entry>
     <entry>
-      <key>Salesproject phases</key>
+      <key>Salesproject Phases</key>
     </entry>
     <entry>
       <key>Add to Campaign</key>
@@ -2444,7 +2444,7 @@
       <key>Add participants to Campaign</key>
     </entry>
     <entry>
-      <key>Key figures</key>
+      <key>Key Figures</key>
     </entry>
     <entry>
       <key>Hierarchy</key>
@@ -4215,7 +4215,7 @@
       <key>Show my campaigns</key>
     </entry>
     <entry>
-      <key>My campaigns</key>
+      <key>My Campaigns</key>
     </entry>
     <entry>
       <key>Add to Bulkmail</key>
@@ -4374,7 +4374,7 @@
       <key>Unknown incoming call from %0 to %1</key>
     </entry>
     <entry>
-      <key>All unlinked mails</key>
+      <key>All Unlinked Mails</key>
     </entry>
     <entry>
       <key>hour</key>
@@ -4386,7 +4386,7 @@
       <key>Incoming call from %0 (%1) to %2</key>
     </entry>
     <entry>
-      <key>import mails</key>
+      <key>Import Mails</key>
     </entry>
     <entry>
       <key>Unknown accepted call from %0 to %1, duration: %2</key>
@@ -4623,7 +4623,7 @@
       <key>Add the selection to a serial letter</key>
     </entry>
     <entry>
-      <key>Campaign costs</key>
+      <key>Campaign Costs</key>
     </entry>
     <entry>
       <key>Shows all campaigns</key>
@@ -4869,7 +4869,7 @@
       <key>Use template attachments</key>
     </entry>
     <entry>
-      <key>My tickets</key>
+      <key>My Tickets</key>
     </entry>
     <entry>
       <key>HTML template - Only for .html</key>
@@ -5010,13 +5010,13 @@
       <key>Show my contacts</key>
     </entry>
     <entry>
-      <key>My contacts</key>
+      <key>My Contacts</key>
     </entry>
     <entry>
       <key>Show my organisations</key>
     </entry>
     <entry>
-      <key>My organisations</key>
+      <key>My Organisations</key>
     </entry>
     <entry>
       <key>Custom template</key>
@@ -5048,18 +5048,12 @@
     <entry>
       <key>Has sales approved this step?</key>
     </entry>
-    <entry>
-      <key>"</key>
-    </entry>
     <entry>
       <key>Import Date</key>
     </entry>
     <entry>
       <key>Import Data</key>
     </entry>
-    <entry>
-      <key>;</key>
-    </entry>
     <entry>
       <key>Standard mail</key>
     </entry>
@@ -5410,9 +5404,6 @@
     <entry>
       <key>Mobility, Transport and Logistics</key>
     </entry>
-    <entry>
-      <key>Sales Project</key>
-    </entry>
     <entry>
       <key>Load data</key>
     </entry>
@@ -5765,7 +5756,7 @@
       <key>No letters</key>
     </entry>
     <entry>
-      <key>Own workflow tasks</key>
+      <key>My Workflow Tasks</key>
     </entry>
     <entry>
       <key>My workflow tasks</key>
@@ -6134,7 +6125,7 @@
       <key>Workflow management</key>
     </entry>
     <entry>
-      <key>my visit planning</key>
+      <key>My Visit Planning</key>
     </entry>
     <entry>
       <key>Update offer</key>
@@ -6363,9 +6354,6 @@
     <entry>
       <key>Lead Import</key>
     </entry>
-    <entry>
-      <key>Contact Management</key>
-    </entry>
     <entry>
       <key>Campaign Planning</key>
     </entry>
@@ -6606,9 +6594,6 @@
     <entry>
       <key>Invalid file type; only .html, .eml and .txt are allowed</key>
     </entry>
-    <entry>
-      <key>Sales Projects</key>
-    </entry>
     <entry>
       <key>set Read</key>
     </entry>
@@ -6788,7 +6773,7 @@
       <key>Workflow Model</key>
     </entry>
     <entry>
-      <key>The Sales Project can only be filled when a company has been specified</key>
+      <key>The Salesproject can only be filled when a company has been specified</key>
     </entry>
     <entry>
       <key>{SEND_MAIL}</key>
@@ -7374,13 +7359,314 @@
     <entry>
       <key>Standard Zip</key>
     </entry>
+    <entry>
+      <key>Outstanding Amount</key>
+    </entry>
+    <entry>
+      <key>Start marketing mailing</key>
+    </entry>
+    <entry>
+      <key>Email address</key>
+    </entry>
     <entry>
       <key>#rememberme</key>
-      <value>Stay logged in</value>
     </entry>
     <entry>
       <key>#login</key>
-      <value>Login token</value>
+    </entry>
+    <entry>
+      <key>Last change</key>
+    </entry>
+    <entry>
+      <key>Knowledge entries</key>
+    </entry>
+    <entry>
+      <key>Newsfeed (Preview)</key>
+    </entry>
+    <entry>
+      <key>Edited on</key>
+    </entry>
+    <entry>
+      <key>Created on</key>
+    </entry>
+    <entry>
+      <key>Discussion</key>
+    </entry>
+    <entry>
+      <key>Newsfeed (Full)</key>
+    </entry>
+    <entry>
+      <key>Closed</key>
+    </entry>
+    <entry>
+      <key>Text content</key>
+    </entry>
+    <entry>
+      <key>Reply</key>
+    </entry>
+    <entry>
+      <key>All Knowledge Entries</key>
+    </entry>
+    <entry>
+      <key>Export HTML</key>
+    </entry>
+    <entry>
+      <key>Publishing level</key>
+    </entry>
+    <entry>
+      <key>Discussions</key>
+    </entry>
+    <entry>
+      <key>Knowledge Management</key>
+    </entry>
+    <entry>
+      <key>List news articles</key>
+    </entry>
+    <entry>
+      <key>Knowledge Role</key>
+    </entry>
+    <entry>
+      <key>Shows complete news articles</key>
+    </entry>
+    <entry>
+      <key>Knowledge</key>
+    </entry>
+    <entry>
+      <key>Toggle status</key>
+    </entry>
+    <entry>
+      <key>Add app</key>
+    </entry>
+    <entry>
+      <key>Open Teams</key>
+    </entry>
+    <entry>
+      <key>Choose Team</key>
+    </entry>
+    <entry>
+      <key>Delete Team</key>
+    </entry>
+    <entry>
+      <key>Restore Team</key>
+    </entry>
+    <entry>
+      <key>Create Team</key>
+    </entry>
+    <entry>
+      <key>Team role</key>
+    </entry>
+    <entry>
+      <key>Edit Team</key>
+    </entry>
+    <entry>
+      <key>Sales Project</key>
+    </entry>
+    <entry>
+      <key>Channels</key>
+    </entry>
+    <entry>
+      <key>Private</key>
+    </entry>
+    <entry>
+      <key>Rechnungsbetrag</key>
+    </entry>
+    <entry>
+      <key>[TEST] Sql_lib - SqlMaskingUtils</key>
+    </entry>
+    <entry>
+      <key>Knowledgebase</key>
+    </entry>
+    <entry>
+      <key>Marketing workflow</key>
+    </entry>
+    <entry>
+      <key>Token</key>
+    </entry>
+    <entry>
+      <key>Edited by</key>
+    </entry>
+    <entry>
+      <key>Sales Project Analyses</key>
+    </entry>
+    <entry>
+      <key>Sales Project Id</key>
+    </entry>
+    <entry>
+      <key>Sales Project Convertion Rates</key>
+    </entry>
+    <entry>
+      <key>Set Campaign Step</key>
+    </entry>
+    <entry>
+      <key>Member</key>
+    </entry>
+    <entry>
+      <key>Tags</key>
+    </entry>
+    <entry>
+      <key>[TEST] Sql_lib - SqlBuilder</key>
+    </entry>
+    <entry>
+      <key>Feed</key>
+    </entry>
+    <entry>
+      <key>[TEST] KeywordAttribute_lib</key>
+    </entry>
+    <entry>
+      <key>Messages</key>
+    </entry>
+    <entry>
+      <key>Channel Name</key>
+    </entry>
+    <entry>
+      <key>Sales Project Phases</key>
+    </entry>
+    <entry>
+      <key>Start workflows</key>
+    </entry>
+    <entry>
+      <key>edited</key>
+    </entry>
+    <entry>
+      <key>Channel</key>
+    </entry>
+    <entry>
+      <key>Import from Teams</key>
+    </entry>
+    <entry>
+      <key>Invitation</key>
+    </entry>
+    <entry>
+      <key>send as mail</key>
+    </entry>
+    <entry>
+      <key>User token</key>
+    </entry>
+    <entry>
+      <key>Team name</key>
+    </entry>
+    <entry>
+      <key>Knowledge Roles</key>
+    </entry>
+    <entry>
+      <key>Valid</key>
+    </entry>
+    <entry>
+      <key>Audit Logs</key>
+    </entry>
+    <entry>
+      <key>Editorial</key>
+    </entry>
+    <entry>
+      <key>KnowledgeRoles</key>
+    </entry>
+    <entry>
+      <key>Remove from Campaign</key>
+    </entry>
+    <entry>
+      <key>Message</key>
+    </entry>
+    <entry>
+      <key>Add members</key>
+    </entry>
+    <entry>
+      <key>[TEST] .All</key>
+    </entry>
+    <entry>
+      <key>Newsfeed (Complete Article)</key>
+    </entry>
+    <entry>
+      <key>Notification</key>
+    </entry>
+    <entry>
+      <key>Load older messages</key>
+    </entry>
+    <entry>
+      <key>Newsletter</key>
+    </entry>
+    <entry>
+      <key>Adds an answer to the selected discussion</key>
+    </entry>
+    <entry>
+      <key>LinkedIn (Person)</key>
+    </entry>
+    <entry>
+      <key>Newsfeed Timeline</key>
+    </entry>
+    <entry>
+      <key>MS Teams</key>
+    </entry>
+    <entry>
+      <key>User tokens</key>
+    </entry>
+    <entry>
+      <key>[TEST] Keyword_lib</key>
+    </entry>
+    <entry>
+      <key>News</key>
+    </entry>
+    <entry>
+      <key>Sales Projects</key>
+    </entry>
+    <entry>
+      <key>Team</key>
+    </entry>
+    <entry>
+      <key>Created by</key>
+    </entry>
+    <entry>
+      <key>Employee count</key>
+    </entry>
+    <entry>
+      <key>Toggles the status of  selected discussion between open and closed</key>
+    </entry>
+    <entry>
+      <key>Synchronize documents</key>
+    </entry>
+    <entry>
+      <key>AuditLogs</key>
+    </entry>
+    <entry>
+      <key>Audit Log</key>
+    </entry>
+    <entry>
+      <key>Admin</key>
+    </entry>
+    <entry>
+      <key>Show all audits</key>
+    </entry>
+    <entry>
+      <key>Sales Project milestone Id</key>
+    </entry>
+    <entry>
+      <key>LinkedIn (Organisation)</key>
+    </entry>
+    <entry>
+      <key>[TEST] UnitTest_lib</key>
+    </entry>
+    <entry>
+      <key>Exports the knowledge entry as a html file</key>
+    </entry>
+    <entry>
+      <key>The max participants count can not be equal or less then 0</key>
+    </entry>
+    <entry>
+      <key>Illegal Parent Operator in buildFilterObj-Function:</key>
+    </entry>
+    <entry>
+      <key>My campaigns</key>
+    </entry>
+    <entry>
+      <key>Subcategory</key>
+    </entry>
+    <entry>
+      <key>Campaign costs</key>
+    </entry>
+    <entry>
+      <key>Verantwortlicher</key>
+    </entry>
+    <entry>
+      <key>The team must have at least one owner</key>
     </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
diff --git a/neonContext/CampaignParticipant/CampaignParticipant.aod b/neonContext/CampaignParticipant/CampaignParticipant.aod
index 503b93a8e3b3e870f039f08335ed0dc5832ddd77..80eda39dc4dbe253de00d07452e67dcbd28658f1 100644
--- a/neonContext/CampaignParticipant/CampaignParticipant.aod
+++ b/neonContext/CampaignParticipant/CampaignParticipant.aod
@@ -4,7 +4,6 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterView>CampaignParticipantFilter_view</filterView>
   <editView>CampaignParticipantEdit_view</editView>
-  <previewView>CampaignParticipantPreview_view</previewView>
   <entity>CampaignParticipant_entity</entity>
   <references>
     <neonViewReference>
diff --git a/neonContext/KnowledgeDiscussion/KnowledgeDiscussion.aod b/neonContext/KnowledgeDiscussion/KnowledgeDiscussion.aod
new file mode 100644
index 0000000000000000000000000000000000000000..4c1a61df497a69008899a8952069e9e0e7e9b92c
--- /dev/null
+++ b/neonContext/KnowledgeDiscussion/KnowledgeDiscussion.aod
@@ -0,0 +1,24 @@
+<?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>KnowledgeDiscussion</name>
+  <title>Discussion</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterView>KnowledgeDiscussionTree_view</filterView>
+  <editView>KnowledgeDiscussionEdit_view</editView>
+  <previewView>KnowledgeDiscussionPreview_view</previewView>
+  <entity>KnowledgeDiscussion_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>a400341e-5b6b-4952-a0fe-1f88c3e55027</name>
+      <view>KnowledgeDiscussionTree_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>fbb4d64f-5167-4d8f-b9ac-4cdb4f1ceb59</name>
+      <view>KnowledgeDiscussionPreview_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>05aa5ff8-7204-4949-b19c-f6fd15dc24fd</name>
+      <view>KnowledgeDiscussionEdit_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/KnowledgeLink/KnowledgeLink.aod b/neonContext/KnowledgeLink/KnowledgeLink.aod
new file mode 100644
index 0000000000000000000000000000000000000000..e7b3b4c531d925a137257cdecadb254aec2dfe0a
--- /dev/null
+++ b/neonContext/KnowledgeLink/KnowledgeLink.aod
@@ -0,0 +1,27 @@
+<?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>KnowledgeLink</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterView>KnowledgeLinkLookup_view</filterView>
+  <editView>KnowledgeLinkEdit_view</editView>
+  <lookupView>KnowledgeLinkLookup_view</lookupView>
+  <entity>KnowledgeLink_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>04a5480c-7327-46e8-8835-db77de3c6994</name>
+      <view>KnowledgeLinkLookup_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>7c4b7964-6668-4cfb-a2b3-9ca63dc10741</name>
+      <view>KnowledgeLinkActionList_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>51436b95-a74b-406a-8029-ab5113eedfa3</name>
+      <view>KnowledgeLinkEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>051675e5-f526-4588-9b5c-72d9b4de00ab</name>
+      <view>KnowledgeLinkMultiEdit_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/KnowledgeManagement/KnowledgeManagement.aod b/neonContext/KnowledgeManagement/KnowledgeManagement.aod
new file mode 100644
index 0000000000000000000000000000000000000000..392aeb6cef2557a829bdbf58b76fe76597e5061f
--- /dev/null
+++ b/neonContext/KnowledgeManagement/KnowledgeManagement.aod
@@ -0,0 +1,52 @@
+<?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>KnowledgeManagement</name>
+  <title>Knowledge Management</title>
+  <description>&lt;null value&gt;</description>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <icon>VAADIN:ACADEMY_CAP</icon>
+  <mainView>KnowledgeManagementMain_view</mainView>
+  <filterView>KnowledgeManagementFilter_view</filterView>
+  <editView>KnowledgeManagementEdit_view</editView>
+  <previewView>KnowledgeManagementPreview_view</previewView>
+  <lookupView>KnowledgeManagementLookup_view</lookupView>
+  <entity>KnowledgeManagement_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>37f60641-26b3-4fbd-b2fa-b69169de0cfe</name>
+      <view>KnowledgeManagementMain_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>aa5aab07-8093-4c3f-802e-3c5e2f15a307</name>
+      <view>KnowledgeManagementFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>1c97f522-d463-42ce-ae31-2973b48f9be4</name>
+      <view>KnowledgeManagementPreview_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>3977743f-ab3a-472e-bb80-cea475f48aaa</name>
+      <view>KnowledgeManagementEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>d6960882-2d57-40e1-b5bf-bf317e0ca9f4</name>
+      <view>KnowledgeManagementDetails_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>d94d09f3-b02c-4b8d-849e-c15d3fcbb393</name>
+      <view>KnowledgeManagementLookup_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>d94d09f3-b02c-4b8d-849e-c15d3fcbb394</name>
+      <view>KnowledgeManagementTimeline_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>4e903d37-f2ac-4368-99aa-aee2492a03dc</name>
+      <view>KnowledgeManagementRole_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>be95c2fc-b29b-4d46-a8fc-0d79c09f67b6</name>
+      <view>KnowledgeManagementContent_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/KnowledgeManagementTagList/KnowledgeManagementTagList.aod b/neonContext/KnowledgeManagementTagList/KnowledgeManagementTagList.aod
new file mode 100644
index 0000000000000000000000000000000000000000..979843a0d36ef659b596db11b4c04db6a524268e
--- /dev/null
+++ b/neonContext/KnowledgeManagementTagList/KnowledgeManagementTagList.aod
@@ -0,0 +1,6 @@
+<?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>KnowledgeManagementTagList</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <entity>KnowledgeManagementTagList_entity</entity>
+</neonContext>
diff --git a/neonContext/KnowledgeManagementTags/KnowledgeManagementTags.aod b/neonContext/KnowledgeManagementTags/KnowledgeManagementTags.aod
new file mode 100644
index 0000000000000000000000000000000000000000..038ba14e3878092dbc7720df38e3a45229b70518
--- /dev/null
+++ b/neonContext/KnowledgeManagementTags/KnowledgeManagementTags.aod
@@ -0,0 +1,16 @@
+<?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>KnowledgeManagementTags</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <entity>KnowledgeManagementTags_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>019050b1-db8f-4900-9ad1-d412cc9ec5b5</name>
+      <view>KnowledgeTagList_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>82e1dc21-123d-41f1-b9b7-cdd0a3c3d4c9</name>
+      <view>KnowledgeTagList_GenMult_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/KnowledgeNewsFeed/KnowledgeNewsFeed.aod b/neonContext/KnowledgeNewsFeed/KnowledgeNewsFeed.aod
new file mode 100644
index 0000000000000000000000000000000000000000..f9bc4fdec879bae657a1d1d6613c07276dd8475d
--- /dev/null
+++ b/neonContext/KnowledgeNewsFeed/KnowledgeNewsFeed.aod
@@ -0,0 +1,14 @@
+<?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>KnowledgeNewsFeed</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <mainView>KnowledgeNewsFeed_view</mainView>
+  <filterView>KnowledgeNewsFeed_view</filterView>
+  <entity>KnowledgeNewsFeed_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>a6965156-ab52-4520-a3be-1351eacd863d</name>
+      <view>KnowledgeNewsFeed_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/KnowledgeRole/KnowledgeRole.aod b/neonContext/KnowledgeRole/KnowledgeRole.aod
new file mode 100644
index 0000000000000000000000000000000000000000..a41da5ae918b712afae42092d543094a77a81188
--- /dev/null
+++ b/neonContext/KnowledgeRole/KnowledgeRole.aod
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>KnowledgeRole</name>
+  <title>Knowledge Role</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <entity>KnowledgeRole_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>d36e2044-65ed-4055-89ad-e8488f43123d</name>
+      <view>KnowledgeRoleEdit_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/MSTTeam/MSTTeam.aod b/neonContext/MSTTeam/MSTTeam.aod
new file mode 100644
index 0000000000000000000000000000000000000000..7f715ccd447d45dbce5deed363aebf485646fab9
--- /dev/null
+++ b/neonContext/MSTTeam/MSTTeam.aod
@@ -0,0 +1,22 @@
+<?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>MSTTeam</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <editView>MSTTeamEdit_view</editView>
+  <previewView>MSTTeamPreview_view</previewView>
+  <entity>MSTTeam_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>357c290b-bf6a-4628-a6d9-f81a97ea843e</name>
+      <view>MSTTeamEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>c13c234d-ee98-4a26-b7b1-8ee3a3829284</name>
+      <view>MSTTeamPreview_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>b1e14c73-f48f-43a7-a459-2aa0172d015b</name>
+      <view>MSTTeamEditMembers_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/MSTTeamLink/MSTTeamLink.aod b/neonContext/MSTTeamLink/MSTTeamLink.aod
new file mode 100644
index 0000000000000000000000000000000000000000..d0d6d646fe31690e5c9d26697ec9adf9f471f40c
--- /dev/null
+++ b/neonContext/MSTTeamLink/MSTTeamLink.aod
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>MSTTeamLink</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <editView>MSTTeamLinkEdit_view</editView>
+  <entity>MSTTeamLink_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>a165469f-eea5-4427-b5ba-4477fe7e04e6</name>
+      <view>MSTTeamLinkEdit_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/MSTTeamMember/MSTTeamMember.aod b/neonContext/MSTTeamMember/MSTTeamMember.aod
new file mode 100644
index 0000000000000000000000000000000000000000..bfb06f7c7f593614d9e07e748111ba5c42b7a708
--- /dev/null
+++ b/neonContext/MSTTeamMember/MSTTeamMember.aod
@@ -0,0 +1,16 @@
+<?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>MSTTeamMember</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <entity>MSTTeamMember_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>61588d12-3c0d-4181-93ae-90d7ad50ed6b</name>
+      <view>MSTTeamMemberMultiEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>b740066a-2d33-4bc4-ba5f-3e4a68418575</name>
+      <view>MSTTeamMemberList_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/MSTeamsActivityImport/MSTeamsActivityImport.aod b/neonContext/MSTeamsActivityImport/MSTeamsActivityImport.aod
new file mode 100644
index 0000000000000000000000000000000000000000..847aef4a0cd215fb0ebb2cb68a0783a137481b6b
--- /dev/null
+++ b/neonContext/MSTeamsActivityImport/MSTeamsActivityImport.aod
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>MSTeamsActivityImport</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <editView>MSTeamsActivityImportEdit_view</editView>
+  <entity>MSTeamsActivityImport_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>05e9f542-dd4f-4895-9d0d-d38d57c62735</name>
+      <view>MSTeamsActivityImportEdit_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/MSTeamsChannel/MSTeamsChannel.aod b/neonContext/MSTeamsChannel/MSTeamsChannel.aod
new file mode 100644
index 0000000000000000000000000000000000000000..f8986b6e98648117b4b4b1539e4fe498331e11f4
--- /dev/null
+++ b/neonContext/MSTeamsChannel/MSTeamsChannel.aod
@@ -0,0 +1,12 @@
+<?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>MSTeamsChannel</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <entity>MSTeamsChannel_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>01e5e126-8d14-4dec-a468-0de13b920900</name>
+      <view>MSTeamsChannelList_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/MSTeamsDocument/MSTeamsDocument.aod b/neonContext/MSTeamsDocument/MSTeamsDocument.aod
new file mode 100644
index 0000000000000000000000000000000000000000..a7125b105f4e8b6a8fd0cc3288d6a87a674773b7
--- /dev/null
+++ b/neonContext/MSTeamsDocument/MSTeamsDocument.aod
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>MSTeamsDocument</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <editView>MSTeamsDocumentEdit_view</editView>
+  <entity>MSTeamsDocument_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>167cee11-55bd-4988-838b-d9c784da01e2</name>
+      <view>MSTeamsDocumentEdit_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/MSTeamsMessage/MSTeamsMessage.aod b/neonContext/MSTeamsMessage/MSTeamsMessage.aod
new file mode 100644
index 0000000000000000000000000000000000000000..ecf21a7e76897a9415073d8108020d36522d2d4d
--- /dev/null
+++ b/neonContext/MSTeamsMessage/MSTeamsMessage.aod
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1">
+  <name>MSTeamsMessage</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterView>MSTeamsMessageFilter_view</filterView>
+  <entity>MSTeamsMessage_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>db5e4380-458f-438a-8945-b8b8463e81d4</name>
+      <view>MSTeamsMessageFilter_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/MarketingWorkflowLauncher/MarketingWorkflowLauncher.aod b/neonContext/MarketingWorkflowLauncher/MarketingWorkflowLauncher.aod
index bad0c03850983d94a74b3d3af4896308fb1e2086..e200a8a70f878ecb8c691752d3585cf3880e5bef 100644
--- a/neonContext/MarketingWorkflowLauncher/MarketingWorkflowLauncher.aod
+++ b/neonContext/MarketingWorkflowLauncher/MarketingWorkflowLauncher.aod
@@ -1,7 +1,7 @@
 <?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>MarketingWorkflowLauncher</name>
-  <title>f</title>
+  <title>Marketing workflow</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <entity>MarketingWorkflowLauncher_entity</entity>
   <references>
diff --git a/neonContext/Member/Member.aod b/neonContext/Member/Member.aod
index 35fc63e30202d49291cc8baac99a5bf003189f3d..a2915648a320f4a2b4443eeb27f203f329d7cbfd 100644
--- a/neonContext/Member/Member.aod
+++ b/neonContext/Member/Member.aod
@@ -4,6 +4,7 @@
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterView>MemberFilter_view</filterView>
   <editView>MemberEdit_view</editView>
+  <lookupView>MemberLookup_view</lookupView>
   <entity>Member_entity</entity>
   <references>
     <neonViewReference>
@@ -18,6 +19,10 @@
       <name>61eb4778-61aa-4419-8c8b-5ad69d86a4bb</name>
       <view>MemberDrawer_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>9a36b4d9-5861-442b-84f3-8662e8069740</name>
+      <view>MemberLookup_view</view>
+    </neonViewReference>
   </references>
   <viewmodeProvider>
     <staticContentEntry>
diff --git a/neonContext/Offer/Offer.aod b/neonContext/Offer/Offer.aod
index e8a6d8d34e56933b89b40bd124432ff6e1a89d0c..271bdfa9b499295cc511d6c1a464eb8afb50a3fd 100644
--- a/neonContext/Offer/Offer.aod
+++ b/neonContext/Offer/Offer.aod
@@ -44,5 +44,8 @@
       <name>136dceaa-0eca-452a-9757-132fd54e8c55</name>
       <view>OfferPreviewMultiple_view</view>
     </neonViewReference>
+    <webserviceReference>
+      <name>277d4493-9a49-4e68-b00c-29d3d0e0b9d2</name>
+    </webserviceReference>
   </references>
 </neonContext>
diff --git a/neonContext/SupportTicket/SupportTicket.aod b/neonContext/SupportTicket/SupportTicket.aod
index 5115f0e09bb42d0a96db18a81d8e858ec4705c14..b0233b40612590203cef68266f2313ff595f7974 100644
--- a/neonContext/SupportTicket/SupportTicket.aod
+++ b/neonContext/SupportTicket/SupportTicket.aod
@@ -4,6 +4,7 @@
   <title>Support Ticket</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/neonContext/SupportTicket/documentation.adoc</documentation>
+  <icon>VAADIN:CHAT</icon>
   <mainView>SupportTicketMain_view</mainView>
   <filterView>SupportTicketFilter_view</filterView>
   <editView>SupportTicketEdit_view</editView>
diff --git a/neonContext/Userhelp/Userhelp.aod b/neonContext/Userhelp/Userhelp.aod
index 435de68c2c1e230ca426a074593bb1004a7ebf6d..057b38dda494f9366cb2e2f617314104f8fd2dd3 100644
--- a/neonContext/Userhelp/Userhelp.aod
+++ b/neonContext/Userhelp/Userhelp.aod
@@ -3,7 +3,7 @@
   <name>Userhelp</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterView>Userhelp_FilterView</filterView>
-  <entity>UserhelpResources</entity>
+  <entity>UserhelpResources_entity</entity>
   <references>
     <neonViewReference>
       <name>2a1dd62b-0f30-442b-aa1d-969b46312d2a</name>
diff --git a/neonDashboard/Home/Home.aod b/neonDashboard/Home/Home.aod
index 1c0ccc5e306c4f553765da6e33024c3e674d6899..dc01fbf1ec3b9201eac0bc318ee53f98e8c0a568 100644
--- a/neonDashboard/Home/Home.aod
+++ b/neonDashboard/Home/Home.aod
@@ -8,7 +8,7 @@
   <editRoles />
   <defaultDashlets>
     <neonDashlet>
-      <name>Dashlet2</name>
+      <name>AllContactsDashlet</name>
       <viewName>PersonFilter_view</viewName>
       <configName>AllContactsDashlet</configName>
       <uiConfiguration>
@@ -20,7 +20,7 @@
       </uiConfiguration>
     </neonDashlet>
     <neonDashlet>
-      <name>Dashlet3</name>
+      <name>AditoTwitterDashlet</name>
       <viewName>TwitterTimeline_view</viewName>
       <configName>AditoTwitterDashlet</configName>
       <uiConfiguration>
@@ -32,7 +32,7 @@
       </uiConfiguration>
     </neonDashlet>
     <neonDashlet>
-      <name>Dashlet</name>
+      <name>MytasksDashlet</name>
       <viewName>TaskFilter_view</viewName>
       <configName>mytasks</configName>
       <uiConfiguration>
@@ -44,7 +44,7 @@
       </uiConfiguration>
     </neonDashlet>
     <neonDashlet>
-      <name>Dashlet4</name>
+      <name>InformationDashlet</name>
       <viewName>MyDashboardScoreCard_view</viewName>
       <configName>Information</configName>
       <uiConfiguration>
@@ -56,7 +56,7 @@
       </uiConfiguration>
     </neonDashlet>
     <neonDashlet>
-      <name>Dashlet5</name>
+      <name>NotificationDashlet</name>
       <viewName>NotificationFilter_view</viewName>
       <configName>NotificationDashletConfiguration</configName>
       <uiConfiguration>
diff --git a/neonDashboard/Vertriebsdashboard/Vertriebsdashboard.aod b/neonDashboard/Vertriebsdashboard/Vertriebsdashboard.aod
index 870d8ef2f23bf7f719d7a43c0dc70deec2075f06..b6750436bad8af3a5e84c77d972166a4c2977519 100644
--- a/neonDashboard/Vertriebsdashboard/Vertriebsdashboard.aod
+++ b/neonDashboard/Vertriebsdashboard/Vertriebsdashboard.aod
@@ -11,7 +11,7 @@
   </editRoles>
   <defaultDashlets>
     <neonDashlet>
-      <name>Dashlet</name>
+      <name>KeyFiguresDashlet</name>
       <viewName>SalesprojectScoreCard_view</viewName>
       <configName>KeyFigures</configName>
       <uiConfiguration>
@@ -23,7 +23,7 @@
       </uiConfiguration>
     </neonDashlet>
     <neonDashlet>
-      <name>Dashlet4</name>
+      <name>AllOrgsDashlet</name>
       <viewName>OrganisationFilter_view</viewName>
       <configName>AllOrgsDashlet</configName>
       <uiConfiguration>
@@ -35,7 +35,7 @@
       </uiConfiguration>
     </neonDashlet>
     <neonDashlet>
-      <name>Dashlet2</name>
+      <name>OpenSalesprojectsDashlet</name>
       <viewName>SalesprojectFilter_view</viewName>
       <configName>OpenSalesprojectsDashlet</configName>
       <uiConfiguration>
@@ -47,7 +47,7 @@
       </uiConfiguration>
     </neonDashlet>
     <neonDashlet>
-      <name>Dashlet3</name>
+      <name>SalesprojectPhasesDashlet</name>
       <viewName>SalesprojectAnalyses_view</viewName>
       <configName>SalesprojectPhases</configName>
       <uiConfiguration>
@@ -59,7 +59,7 @@
       </uiConfiguration>
     </neonDashlet>
     <neonDashlet>
-      <name>Dashlet6</name>
+      <name>ConvertionRatesDashlet</name>
       <viewName>SalesprojectConversionRate_view</viewName>
       <configName>ConvertionRates</configName>
       <uiConfiguration>
@@ -71,7 +71,7 @@
       </uiConfiguration>
     </neonDashlet>
     <neonDashlet>
-      <name>Dashlet7</name>
+      <name>AnalysesChartDashlet</name>
       <viewName>ActivityAnalyses_view</viewName>
       <configName>analysesChart</configName>
       <uiConfiguration>
diff --git a/neonNotificationType/News/News.aod b/neonNotificationType/News/News.aod
new file mode 100644
index 0000000000000000000000000000000000000000..239ea9b1feb37d6ba9407cd6ff015dd715abaa08
--- /dev/null
+++ b/neonNotificationType/News/News.aod
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonNotificationType xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonNotificationType/1.1.0">
+  <name>News</name>
+  <title>News</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <icon>VAADIN:NEWSPAPER</icon>
+</neonNotificationType>
diff --git a/neonView/360DegreeFilter_view/360DegreeFilter_view.aod b/neonView/360DegreeFilter_view/360DegreeFilter_view.aod
index fcb25887036ae11c5a7be2a6c77d2efe26ad5056..5bc07ac524def8c194dcbfd82a0293952b194784 100644
--- a/neonView/360DegreeFilter_view/360DegreeFilter_view.aod
+++ b/neonView/360DegreeFilter_view/360DegreeFilter_view.aod
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>360DegreeFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
-  <filterable v="false" />
+  <filterable v="true" />
   <layout>
     <groupLayout>
       <name>layout</name>
@@ -10,22 +10,24 @@
   </layout>
   <children>
     <treeViewTemplate>
-      <name>Treetable</name>
+      <name>Tree</name>
       <favoriteActionGroup2>newModule</favoriteActionGroup2>
       <titleField>TITLE</titleField>
-      <descriptionField>DATE</descriptionField>
+      <descriptionField>DESCRIPTION</descriptionField>
       <iconField>ICON</iconField>
+      <hideContentSearch v="false" />
       <entityField>#ENTITY</entityField>
       <defaultGroupFields>
-        <element>ENTITY_NAME</element>
+        <element>GROUP</element>
       </defaultGroupFields>
+      <fixedFilterFields />
     </treeViewTemplate>
     <timelineViewTemplate>
       <name>Timeline</name>
       <favoriteActionGroup2>newModule</favoriteActionGroup2>
-      <dateField>DATE</dateField>
+      <dateField>DATE_NEW</dateField>
       <titleField>TITLE</titleField>
-      <descriptionField>ENTITY_NAME</descriptionField>
+      <descriptionField>GROUP</descriptionField>
       <iconIdField>ICON</iconIdField>
       <hideContentSearch v="false" />
       <entityField>#ENTITY</entityField>
diff --git a/neonView/ActivityAnalyses_view/ActivityAnalyses_view.aod b/neonView/ActivityAnalyses_view/ActivityAnalyses_view.aod
index 606d13134ae41b3962b0b2c53d81c3d7c9e4a9ca..cb982f79c428d8fb7ba3162078ae95e24850197f 100644
--- a/neonView/ActivityAnalyses_view/ActivityAnalyses_view.aod
+++ b/neonView/ActivityAnalyses_view/ActivityAnalyses_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ActivityAnalyses_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/ActivityDetail_view/ActivityDetail_view.aod b/neonView/ActivityDetail_view/ActivityDetail_view.aod
index 870b77975c3fde5e3c371ff98ac417bc4d57b598..559c6a6620b642c48d34a44656ea06a6961c05d8 100644
--- a/neonView/ActivityDetail_view/ActivityDetail_view.aod
+++ b/neonView/ActivityDetail_view/ActivityDetail_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ActivityDetail_view</name>
   <title>Description</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/ActivityDrawer_view/ActivityDrawer_view.aod b/neonView/ActivityDrawer_view/ActivityDrawer_view.aod
index b7d3bb7f8fcfb8ebfd38e4c4af6004b8f00ca7d3..eeacf167c5eed8c60fe59b20ac9c6705763c9e62 100644
--- a/neonView/ActivityDrawer_view/ActivityDrawer_view.aod
+++ b/neonView/ActivityDrawer_view/ActivityDrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ActivityDrawer_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ActivityEdit_view/ActivityEdit_view.aod b/neonView/ActivityEdit_view/ActivityEdit_view.aod
index 955128744e3c02f1cc7e83bef1f2ea5537d11db4..2c8b44325c1533b44c0a6eb4d28b1137725a912f 100644
--- a/neonView/ActivityEdit_view/ActivityEdit_view.aod
+++ b/neonView/ActivityEdit_view/ActivityEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ActivityEdit_view</name>
   <title>Activity</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/ActivityFilter_view/ActivityFilter_view.aod b/neonView/ActivityFilter_view/ActivityFilter_view.aod
index a94234cc3f8111fcfbd178556efd0d9f5b4be5a6..35d2314683c8416e27e7e3ff1b4ef45d442f662c 100644
--- a/neonView/ActivityFilter_view/ActivityFilter_view.aod
+++ b/neonView/ActivityFilter_view/ActivityFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ActivityFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
@@ -16,7 +16,7 @@
       <categories>
         <neonDashletCategory>
           <name>contactmanagement</name>
-          <title>Contactmanagement</title>
+          <title>Contact Management</title>
         </neonDashletCategory>
       </categories>
     </neonDashletConfiguration>
@@ -31,7 +31,7 @@
       <categories>
         <neonDashletCategory>
           <name>contactmanagement</name>
-          <title>Contactmanagement</title>
+          <title>Contact Management</title>
         </neonDashletCategory>
       </categories>
       <parameters>
@@ -50,6 +50,7 @@
   <children>
     <timelineViewTemplate>
       <name>ActivitiesTimeline</name>
+      <favoriteActionGroup2>MSTeamsActions</favoriteActionGroup2>
       <dateField>entryDateDateFormat</dateField>
       <titleField>SUBJECT_DETAILS</titleField>
       <descriptionField>INFO</descriptionField>
@@ -59,6 +60,7 @@
     </timelineViewTemplate>
     <tableViewTemplate>
       <name>ActivitiesTable</name>
+      <favoriteActionGroup2>MSTeamsActions</favoriteActionGroup2>
       <iconField>#IMAGE</iconField>
       <titleField>SUBJECT</titleField>
       <subtitleField>ENTRYDATE</subtitleField>
@@ -92,6 +94,7 @@
     </tableViewTemplate>
     <treeTableViewTemplate>
       <name>ActivitiesTreeTable</name>
+      <favoriteActionGroup2>MSTeamsActions</favoriteActionGroup2>
       <entityField>#ENTITY</entityField>
       <columns>
         <neonTreeTableColumn>
diff --git a/neonView/ActivityLinkFilter_view/ActivityLinkFilter_view.aod b/neonView/ActivityLinkFilter_view/ActivityLinkFilter_view.aod
index b5fff0f4acee7b41242f8fa1e6a29f92e971fb03..cd41eab6d6697bdcecbda5672f7be9b89f9945e2 100644
--- a/neonView/ActivityLinkFilter_view/ActivityLinkFilter_view.aod
+++ b/neonView/ActivityLinkFilter_view/ActivityLinkFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ActivityLinkFilter_view</name>
   <title>Connections</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/ActivityLinkMultiEdit_view/ActivityLinkMultiEdit_view.aod b/neonView/ActivityLinkMultiEdit_view/ActivityLinkMultiEdit_view.aod
index e19f1da0f82985fe301ad938c70cd9df35f5b7cf..519a822a81ea71a2e352c8dc883bb6e00decd177 100644
--- a/neonView/ActivityLinkMultiEdit_view/ActivityLinkMultiEdit_view.aod
+++ b/neonView/ActivityLinkMultiEdit_view/ActivityLinkMultiEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ActivityLinkMultiEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ActivityLinkPreviewList_view/ActivityLinkPreviewList_view.aod b/neonView/ActivityLinkPreviewList_view/ActivityLinkPreviewList_view.aod
index dab9bccb0a84bf22f2cda551e76107d1dce31107..a34c9e28d9fce5933352e59ba23dce3384e3e896 100644
--- a/neonView/ActivityLinkPreviewList_view/ActivityLinkPreviewList_view.aod
+++ b/neonView/ActivityLinkPreviewList_view/ActivityLinkPreviewList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ActivityLinkPreviewList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ActivityLinkPreview_view/ActivityLinkPreview_view.aod b/neonView/ActivityLinkPreview_view/ActivityLinkPreview_view.aod
index 5327f5fd86e2440636c94a44cf3c3a557c94b8a2..ecea997484bf7fa0c1e38f56f5325ba030cc92be 100644
--- a/neonView/ActivityLinkPreview_view/ActivityLinkPreview_view.aod
+++ b/neonView/ActivityLinkPreview_view/ActivityLinkPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ActivityLinkPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ActivityMain_view/ActivityMain_view.aod b/neonView/ActivityMain_view/ActivityMain_view.aod
index 8dd7d3f4f2f73d4fdab425fab12e4150eb2250fe..39972c2097c29e5324346dea1a57b55de993088f 100644
--- a/neonView/ActivityMain_view/ActivityMain_view.aod
+++ b/neonView/ActivityMain_view/ActivityMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ActivityMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ActivityMultiEdit_view/ActivityMultiEdit_view.aod b/neonView/ActivityMultiEdit_view/ActivityMultiEdit_view.aod
index 6d74561374a3574953ba099fef208111f2cc9a2a..d9b91e1b27b2dc1721c68ff721f654a61ee434eb 100644
--- a/neonView/ActivityMultiEdit_view/ActivityMultiEdit_view.aod
+++ b/neonView/ActivityMultiEdit_view/ActivityMultiEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ActivityMultiEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ActivityPreview_view/ActivityPreview_view.aod b/neonView/ActivityPreview_view/ActivityPreview_view.aod
index 7b82a42582a8444dbfbc726077467d458358ae33..b02a9a3bed585dc7b0bcf844da5735baf701a741 100644
--- a/neonView/ActivityPreview_view/ActivityPreview_view.aod
+++ b/neonView/ActivityPreview_view/ActivityPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ActivityPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ActivityUniversalFileProcessorFilter_view/ActivityUniversalFileProcessorFilter_view.aod b/neonView/ActivityUniversalFileProcessorFilter_view/ActivityUniversalFileProcessorFilter_view.aod
index eaec7e7ddba0db1de1262c4b98c9c9bb7202877e..3b8adc8d670298ed7d6780ea1b2f44c5aea102bf 100644
--- a/neonView/ActivityUniversalFileProcessorFilter_view/ActivityUniversalFileProcessorFilter_view.aod
+++ b/neonView/ActivityUniversalFileProcessorFilter_view/ActivityUniversalFileProcessorFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ActivityUniversalFileProcessorFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/AddressList_view/AddressList_view.aod b/neonView/AddressList_view/AddressList_view.aod
index bd5826a7da483c1146e31ec6f855bb07bf3458cc..409bae01d2f23a34db9c07163fa223978bc452e6 100644
--- a/neonView/AddressList_view/AddressList_view.aod
+++ b/neonView/AddressList_view/AddressList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AddressList_view</name>
   <description>Org addresses</description>
   <majorModelMode>DISTRIBUTED</majorModelMode>
@@ -62,10 +62,6 @@
           <name>aafc58cf-7dbb-42cb-b04c-d0869e58d09a</name>
           <entityField>STATE</entityField>
         </neonTitledListTableColumn>
-        <neonTitledListTableColumn>
-          <name>29dbb3f5-6f80-4100-aed3-334ac0b9cc48</name>
-          <entityField>REGION</entityField>
-        </neonTitledListTableColumn>
         <neonTitledListTableColumn>
           <name>6e369a01-965f-41d9-9b0a-6128a3827e47</name>
           <entityField>ADDRESSADDITION</entityField>
diff --git a/neonView/AddressLookup_view/AddressLookup_view.aod b/neonView/AddressLookup_view/AddressLookup_view.aod
index 904f60c6b30424011bcd655ffff8642be2ee6f4e..42904c5f4c1d46ae54104732a610fa9e2d68e53a 100644
--- a/neonView/AddressLookup_view/AddressLookup_view.aod
+++ b/neonView/AddressLookup_view/AddressLookup_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AddressLookup_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/AddressOrgMultiEdit_view/AddressOrgMultiEdit_view.aod b/neonView/AddressOrgMultiEdit_view/AddressOrgMultiEdit_view.aod
index dd7ee5507e2bd5b56d4987b657bd9069fdf4ca56..faa7531a91085f2022c567441aaa0c9a089d8507 100644
--- a/neonView/AddressOrgMultiEdit_view/AddressOrgMultiEdit_view.aod
+++ b/neonView/AddressOrgMultiEdit_view/AddressOrgMultiEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AddressOrgMultiEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/AddressValidationLookup_view/AddressValidationLookup_view.aod b/neonView/AddressValidationLookup_view/AddressValidationLookup_view.aod
index 7372c60c7af018c61811155bd1f4ad7eb39c7725..c785e09dc8d920c3d053df91cb460f4767f637ff 100644
--- a/neonView/AddressValidationLookup_view/AddressValidationLookup_view.aod
+++ b/neonView/AddressValidationLookup_view/AddressValidationLookup_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AddressValidationLookup_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/AdminViewRow_view/AdminViewRow_view.aod b/neonView/AdminViewRow_view/AdminViewRow_view.aod
index ddb44338654f0ae8150274622336ec6b45bba50e..77687eeb449caccd5a06c77147bd6a7cb9b39241 100644
--- a/neonView/AdminViewRow_view/AdminViewRow_view.aod
+++ b/neonView/AdminViewRow_view/AdminViewRow_view.aod
@@ -1,24 +1,18 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AdminViewRow_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
-    <noneLayout>
+    <boxLayout>
       <name>layout</name>
-    </noneLayout>
+    </boxLayout>
   </layout>
   <children>
-    <titledListViewTemplate>
-      <name>TitledList</name>
+    <actionListViewTemplate>
+      <name>ActionList</name>
       <titleField>TITLE</titleField>
-      <fixedDrawer v="true" />
-      <entityField>#ENTITY</entityField>
-      <columns>
-        <neonTitledListTableColumn>
-          <name>d42ddaa4-1996-41b3-be19-2f3c721f9536</name>
-          <entityField>VALUE</entityField>
-        </neonTitledListTableColumn>
-      </columns>
-    </titledListViewTemplate>
+      <descriptionField>VALUE</descriptionField>
+      <entryAction>copyValueToClipboard</entryAction>
+    </actionListViewTemplate>
   </children>
 </neonView>
diff --git a/neonView/AdressMultiEdit_view/AdressMultiEdit_view.aod b/neonView/AdressMultiEdit_view/AdressMultiEdit_view.aod
index b4612adcf1a8e53a8a8019260f542eb8d0d76905..72a12761582aceb0ca1b492f8c2f91fab00c0f1d 100644
--- a/neonView/AdressMultiEdit_view/AdressMultiEdit_view.aod
+++ b/neonView/AdressMultiEdit_view/AdressMultiEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AdressMultiEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/AnyContactDuplicates_view/AnyContactDuplicates_view.aod b/neonView/AnyContactDuplicates_view/AnyContactDuplicates_view.aod
index ff719ed37110b4efdcbba745efc705ea856e2e85..a4d400cb1bbad50cb2927efa6e19b04cff113387 100644
--- a/neonView/AnyContactDuplicates_view/AnyContactDuplicates_view.aod
+++ b/neonView/AnyContactDuplicates_view/AnyContactDuplicates_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AnyContactDuplicates_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/AnyContactLookup_view/AnyContactLookup_view.aod b/neonView/AnyContactLookup_view/AnyContactLookup_view.aod
index 4a06e39e312f5786ac5fc224eafa3a45d7bbabc4..f7d62ecfdeb75651e1422b92e00aa3ab1f15260f 100644
--- a/neonView/AnyContactLookup_view/AnyContactLookup_view.aod
+++ b/neonView/AnyContactLookup_view/AnyContactLookup_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AnyContactLookup_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/AppointmentCheckUp_view/AppointmentCheckUp_view.aod b/neonView/AppointmentCheckUp_view/AppointmentCheckUp_view.aod
index 2f0e9199d4d5ce506786750e9240645d9517f6d3..2f0d24434258b16044f8fdc29140eebe92826d47 100644
--- a/neonView/AppointmentCheckUp_view/AppointmentCheckUp_view.aod
+++ b/neonView/AppointmentCheckUp_view/AppointmentCheckUp_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AppointmentCheckUp_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <dashletConfigurations>
diff --git a/neonView/AppointmentEdit_view/AppointmentEdit_view.aod b/neonView/AppointmentEdit_view/AppointmentEdit_view.aod
index 5b5def3ba12aa516e0da7c4a8a60cdbe653b690b..6a2413b69536c3aba9a3aeb49a639b66ffe12c27 100644
--- a/neonView/AppointmentEdit_view/AppointmentEdit_view.aod
+++ b/neonView/AppointmentEdit_view/AppointmentEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AppointmentEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/neonView/AppointmentEdit_view/documentation.adoc</documentation>
diff --git a/neonView/AppointmentFilterDashlet_view/AppointmentFilterDashlet_view.aod b/neonView/AppointmentFilterDashlet_view/AppointmentFilterDashlet_view.aod
index e0d50c9bd43ba9ecdde48c9a59c5cfcf6e5b94aa..216efdb870d880a44a1b1eacf3a291780a934001 100644
--- a/neonView/AppointmentFilterDashlet_view/AppointmentFilterDashlet_view.aod
+++ b/neonView/AppointmentFilterDashlet_view/AppointmentFilterDashlet_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AppointmentFilterDashlet_view</name>
   <title>Linked Appointments</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/AppointmentFilter_view/AppointmentFilter_view.aod b/neonView/AppointmentFilter_view/AppointmentFilter_view.aod
index 75dfc0953f85dd44c26ce48b4acf531aba9fc5e2..b21399ee35fb4f60d3c0bdbcbb32f33681b19f6d 100644
--- a/neonView/AppointmentFilter_view/AppointmentFilter_view.aod
+++ b/neonView/AppointmentFilter_view/AppointmentFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AppointmentFilter_view</name>
   <title>Linked Appointments</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/AppointmentLinkEdit_view/AppointmentLinkEdit_view.aod b/neonView/AppointmentLinkEdit_view/AppointmentLinkEdit_view.aod
index 1d1f735b094af28a500960cc3e6b870a138549e1..58da5f40fd75a4a096016e09943143685ce1606e 100644
--- a/neonView/AppointmentLinkEdit_view/AppointmentLinkEdit_view.aod
+++ b/neonView/AppointmentLinkEdit_view/AppointmentLinkEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AppointmentLinkEdit_view</name>
   <title>relations</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/AppointmentLinkFilter_view/AppointmentLinkFilter_view.aod b/neonView/AppointmentLinkFilter_view/AppointmentLinkFilter_view.aod
index 7ecded1820ef9fb269701f406730349b3042e922..993d5d1ea5fe1fdca1a894199dfcab87f0f5b696 100644
--- a/neonView/AppointmentLinkFilter_view/AppointmentLinkFilter_view.aod
+++ b/neonView/AppointmentLinkFilter_view/AppointmentLinkFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AppointmentLinkFilter_view</name>
   <title>relations</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/AppointmentPreview_view/AppointmentPreview_view.aod b/neonView/AppointmentPreview_view/AppointmentPreview_view.aod
index 727a644d89918b72ba8e573978d45cf9f7118157..ccd565c6be34430650ef372a40ab483f3e631ea0 100644
--- a/neonView/AppointmentPreview_view/AppointmentPreview_view.aod
+++ b/neonView/AppointmentPreview_view/AppointmentPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AppointmentPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/neonView/AppointmentPreview_view/documentation.adoc</documentation>
diff --git a/neonView/AroundLocationHeader_view/AroundLocationHeader_view.aod b/neonView/AroundLocationHeader_view/AroundLocationHeader_view.aod
index ce86ba2afd585215bb100fec728104b427bdfd4c..0dbf0677ac4c6abd92ea9311253263ad5621255b 100644
--- a/neonView/AroundLocationHeader_view/AroundLocationHeader_view.aod
+++ b/neonView/AroundLocationHeader_view/AroundLocationHeader_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AroundLocationHeader_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/AroundOrganisationFooter_view/AroundOrganisationFooter_view.aod b/neonView/AroundOrganisationFooter_view/AroundOrganisationFooter_view.aod
index 74bac1d84439489938b5751fe465909d5128e69d..72811993d340e51288512b2d4313511206a334cc 100644
--- a/neonView/AroundOrganisationFooter_view/AroundOrganisationFooter_view.aod
+++ b/neonView/AroundOrganisationFooter_view/AroundOrganisationFooter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AroundOrganisationFooter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/AroundOrganisationLocation_view/AroundOrganisationLocation_view.aod b/neonView/AroundOrganisationLocation_view/AroundOrganisationLocation_view.aod
index 6ee6f9459fd4bc34294cfec67617be540463888a..7fa9102fcc0309b2ee211c02104f57fe737431ce 100644
--- a/neonView/AroundOrganisationLocation_view/AroundOrganisationLocation_view.aod
+++ b/neonView/AroundOrganisationLocation_view/AroundOrganisationLocation_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AroundOrganisationLocation_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="false" />
diff --git a/neonView/AttributeEdit_view/AttributeEdit_view.aod b/neonView/AttributeEdit_view/AttributeEdit_view.aod
index f0540f0420d82a95401fb023d144ebba72f28923..310d74e958e46165116b54c31513c5a2e8981c6e 100644
--- a/neonView/AttributeEdit_view/AttributeEdit_view.aod
+++ b/neonView/AttributeEdit_view/AttributeEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AttributeEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/AttributeFilter_view/AttributeFilter_view.aod b/neonView/AttributeFilter_view/AttributeFilter_view.aod
index 573f26dd7d27579936a03fb6c149dd3318390280..7b18cb006369111f800f4074ef01c108c27bdac4 100644
--- a/neonView/AttributeFilter_view/AttributeFilter_view.aod
+++ b/neonView/AttributeFilter_view/AttributeFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AttributeFilter_view</name>
   <title>Attributes</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/AttributeList_view/AttributeList_view.aod b/neonView/AttributeList_view/AttributeList_view.aod
index 167cf43d52b6481ab3ad36f745aa899f2e53cc3f..71c6f4b999eb1b236ec46fbbf47bfbef4a687404 100644
--- a/neonView/AttributeList_view/AttributeList_view.aod
+++ b/neonView/AttributeList_view/AttributeList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AttributeList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/AttributeLookup_view/AttributeLookup_view.aod b/neonView/AttributeLookup_view/AttributeLookup_view.aod
index d1c1580870ec1c39e6eb8bddc18661e5d17f3d67..0abd15c3e222b22856bf2739b43e74c3df745ce4 100644
--- a/neonView/AttributeLookup_view/AttributeLookup_view.aod
+++ b/neonView/AttributeLookup_view/AttributeLookup_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AttributeLookup_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/AttributeMultiEdit_view/AttributeMultiEdit_view.aod b/neonView/AttributeMultiEdit_view/AttributeMultiEdit_view.aod
index 21e86a1d4deaeeb08225ddcb0e05d793de0d5381..ce138e8b5931ab5063dfad9d296ae76ba693093d 100644
--- a/neonView/AttributeMultiEdit_view/AttributeMultiEdit_view.aod
+++ b/neonView/AttributeMultiEdit_view/AttributeMultiEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AttributeMultiEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/AttributePreview_view/AttributePreview_view.aod b/neonView/AttributePreview_view/AttributePreview_view.aod
index f7164ab6941bd0255686fb2ac2d85837af4371c1..6677b9e8eca6962141fecf6285803a687474150e 100644
--- a/neonView/AttributePreview_view/AttributePreview_view.aod
+++ b/neonView/AttributePreview_view/AttributePreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AttributePreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/AttributeRelationMultiEdit_view/AttributeRelationMultiEdit_view.aod b/neonView/AttributeRelationMultiEdit_view/AttributeRelationMultiEdit_view.aod
index fab8b8d5f075e070364a482acd84c0fb8cb0b914..4996c55d00b9223ac199753962c4f84c6580062a 100644
--- a/neonView/AttributeRelationMultiEdit_view/AttributeRelationMultiEdit_view.aod
+++ b/neonView/AttributeRelationMultiEdit_view/AttributeRelationMultiEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AttributeRelationMultiEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/AttributeRelationPreviewList/AttributeRelationPreviewList.aod b/neonView/AttributeRelationPreviewList/AttributeRelationPreviewList.aod
index 3ecddbf8b499e01439f931aece466f54b8294985..4fd119eb2a4756d7b56e037eb05b1acc80adfa75 100644
--- a/neonView/AttributeRelationPreviewList/AttributeRelationPreviewList.aod
+++ b/neonView/AttributeRelationPreviewList/AttributeRelationPreviewList.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AttributeRelationPreviewList</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
@@ -18,6 +18,10 @@
           <name>ec5ceac7-a2d4-4912-b04b-adc83d3e9589</name>
           <entityField>VALUE</entityField>
         </neonTitledListTableColumn>
+        <neonTitledListTableColumn>
+          <name>2ec9274b-a800-4a38-8139-418543161be2</name>
+          <entityField>VALUE_LOOKUP</entityField>
+        </neonTitledListTableColumn>
       </columns>
     </titledListViewTemplate>
   </children>
diff --git a/neonView/AttributeRelationTreeDrawer_view/AttributeRelationTreeDrawer_view.aod b/neonView/AttributeRelationTreeDrawer_view/AttributeRelationTreeDrawer_view.aod
index 872e755c6588e156d1cf6abc8fcb4373f453bb13..0a721f3a75692ec7537302096fa8986c77497c92 100644
--- a/neonView/AttributeRelationTreeDrawer_view/AttributeRelationTreeDrawer_view.aod
+++ b/neonView/AttributeRelationTreeDrawer_view/AttributeRelationTreeDrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AttributeRelationTreeDrawer_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/AttributeRelationTreeEdit_view/AttributeRelationTreeEdit_view.aod b/neonView/AttributeRelationTreeEdit_view/AttributeRelationTreeEdit_view.aod
index bcc1303d8a36c78c9f778bd192efafa8e184bf9a..11f0be4ad61e05a80a9778f4d4f7ecba84700008 100644
--- a/neonView/AttributeRelationTreeEdit_view/AttributeRelationTreeEdit_view.aod
+++ b/neonView/AttributeRelationTreeEdit_view/AttributeRelationTreeEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AttributeRelationTreeEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/AttributeRelationTree_view/AttributeRelationTree_view.aod b/neonView/AttributeRelationTree_view/AttributeRelationTree_view.aod
index f0161b804b5aa9a8a7856e36eb5e3b557878e0c0..de545b59667e67ac2df0c71fe272f22c93b987fa 100644
--- a/neonView/AttributeRelationTree_view/AttributeRelationTree_view.aod
+++ b/neonView/AttributeRelationTree_view/AttributeRelationTree_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AttributeRelationTree_view</name>
   <title>Attributes</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/AttributeTree_view/AttributeTree_view.aod b/neonView/AttributeTree_view/AttributeTree_view.aod
index aa5ab7c094358f33387e21a89713b033915237e5..4485456b82f897c0def869129ff57d4745d00833 100644
--- a/neonView/AttributeTree_view/AttributeTree_view.aod
+++ b/neonView/AttributeTree_view/AttributeTree_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AttributeTree_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/AttributeUsageList_view/AttributeUsageList_view.aod b/neonView/AttributeUsageList_view/AttributeUsageList_view.aod
index 35e765c64583145f4ad366088348df56d2ba814a..856a329d1ef536aadb3ec8961168ee06bc63a381 100644
--- a/neonView/AttributeUsageList_view/AttributeUsageList_view.aod
+++ b/neonView/AttributeUsageList_view/AttributeUsageList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AttributeUsageList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/AttributeUsageMultiEdit_view/AttributeUsageMultiEdit_view.aod b/neonView/AttributeUsageMultiEdit_view/AttributeUsageMultiEdit_view.aod
index 96ed51fb9564dbf9e11fffd6819e173a3b4c5973..5bb2bc37b0d7aa7aab449cf02625ab90e588b9c7 100644
--- a/neonView/AttributeUsageMultiEdit_view/AttributeUsageMultiEdit_view.aod
+++ b/neonView/AttributeUsageMultiEdit_view/AttributeUsageMultiEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AttributeUsageMultiEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/AuditLogHistoryFilter_view/AuditLogHistoryFilter_view.aod b/neonView/AuditLogHistoryFilter_view/AuditLogHistoryFilter_view.aod
index 87d730da51efd42cef56757ad691f7ab84a21e57..c29afae20f977acca16667a0de832a6496ceccfe 100644
--- a/neonView/AuditLogHistoryFilter_view/AuditLogHistoryFilter_view.aod
+++ b/neonView/AuditLogHistoryFilter_view/AuditLogHistoryFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>AuditLogHistoryFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/BulkMailAddRecipientsEdit_view/BulkMailAddRecipientsEdit_view.aod b/neonView/BulkMailAddRecipientsEdit_view/BulkMailAddRecipientsEdit_view.aod
index 3e391de817552197a795d56eae398c21e37f0fdf..2eef718c2b4bf2c5415a4b885ffc5877d801e29c 100644
--- a/neonView/BulkMailAddRecipientsEdit_view/BulkMailAddRecipientsEdit_view.aod
+++ b/neonView/BulkMailAddRecipientsEdit_view/BulkMailAddRecipientsEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>BulkMailAddRecipientsEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/BulkMailContent_view/BulkMailContent_view.aod b/neonView/BulkMailContent_view/BulkMailContent_view.aod
index ba5614086a9060c864343e558d20284f0d70387e..6c3878a60912960b18273a5a0ceef34152cc1993 100644
--- a/neonView/BulkMailContent_view/BulkMailContent_view.aod
+++ b/neonView/BulkMailContent_view/BulkMailContent_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>BulkMailContent_view</name>
   <title>Content</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/BulkMailEdit_view/BulkMailEdit_view.aod b/neonView/BulkMailEdit_view/BulkMailEdit_view.aod
index 48c0705557962ee3317b30ee2f5ff18bb7c52438..6677a955a9bf2d440e06de8270bf4992b5e42bb3 100644
--- a/neonView/BulkMailEdit_view/BulkMailEdit_view.aod
+++ b/neonView/BulkMailEdit_view/BulkMailEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>BulkMailEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/BulkMailFilter_view/BulkMailFilter_view.aod b/neonView/BulkMailFilter_view/BulkMailFilter_view.aod
index daa8da26604c40f86011da64ebbabbc35e24bdb8..fafdd0a86a999ba4e641abd7f1762cbe76aabf1f 100644
--- a/neonView/BulkMailFilter_view/BulkMailFilter_view.aod
+++ b/neonView/BulkMailFilter_view/BulkMailFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>BulkMailFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/BulkMailMain_view/BulkMailMain_view.aod b/neonView/BulkMailMain_view/BulkMailMain_view.aod
index 5c3d99ce8a8ab59e419574c23b7bee838b8889ae..91a0c16c22f12b5341e7c0d28018026667aee5ca 100644
--- a/neonView/BulkMailMain_view/BulkMailMain_view.aod
+++ b/neonView/BulkMailMain_view/BulkMailMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>BulkMailMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/BulkMailPreview_view/BulkMailPreview_view.aod b/neonView/BulkMailPreview_view/BulkMailPreview_view.aod
index 7e3f5b4804e41dc7046fcb805cb520328e2d6ba6..42fee67eccdd9e73f5f422e67c71af9328ea912a 100644
--- a/neonView/BulkMailPreview_view/BulkMailPreview_view.aod
+++ b/neonView/BulkMailPreview_view/BulkMailPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>BulkMailPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/BulkMailRecipientEdit_view/BulkMailRecipientEdit_view.aod b/neonView/BulkMailRecipientEdit_view/BulkMailRecipientEdit_view.aod
index 1ad8a7d50ee24f76d4d1f2a0c43c82e2841a28c2..5ea684474bebb516e1c7d4ed97b7c1695fab391a 100644
--- a/neonView/BulkMailRecipientEdit_view/BulkMailRecipientEdit_view.aod
+++ b/neonView/BulkMailRecipientEdit_view/BulkMailRecipientEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>BulkMailRecipientEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod b/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod
index 5f4bc454fb6344b87ddf7931df64a3643da870ea..5a52f85478b83025dc9063d798f92c0c5de2022a 100644
--- a/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod
+++ b/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>BulkMailRecipientFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/BulkMailStatusChart_view/BulkMailStatusChart_view.aod b/neonView/BulkMailStatusChart_view/BulkMailStatusChart_view.aod
index ca3081b8e4008fbf8490f4b9f6f162fb9bb4abe7..17be87967675725ddc46ee71bd989a498454c4e2 100644
--- a/neonView/BulkMailStatusChart_view/BulkMailStatusChart_view.aod
+++ b/neonView/BulkMailStatusChart_view/BulkMailStatusChart_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>BulkMailStatusChart_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/BulkMailTesting_view/BulkMailTesting_view.aod b/neonView/BulkMailTesting_view/BulkMailTesting_view.aod
index d3a8fa5c4e91d33df9a3b0e52819cd55bb5810de..2fda589cb414b4c3d63f6da34ecc882fdca5f9cd 100644
--- a/neonView/BulkMailTesting_view/BulkMailTesting_view.aod
+++ b/neonView/BulkMailTesting_view/BulkMailTesting_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>BulkMailTesting_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/CampaignAddParticipantsEdit_view/CampaignAddParticipantsEdit_view.aod b/neonView/CampaignAddParticipantsEdit_view/CampaignAddParticipantsEdit_view.aod
index c5448b2e2f2a2ff8b9012a77e0ebae80c3056c21..c4d7749e7fa28515b77617fc62dc2bfc7c680337 100644
--- a/neonView/CampaignAddParticipantsEdit_view/CampaignAddParticipantsEdit_view.aod
+++ b/neonView/CampaignAddParticipantsEdit_view/CampaignAddParticipantsEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignAddParticipantsEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/CampaignCharts_view/CampaignCharts_view.aod b/neonView/CampaignCharts_view/CampaignCharts_view.aod
index e17db141336eb902c719c77a685a4a738aa7b0ca..1ca293d2d748851cc6e22a38d0cc93b4bc9be876 100644
--- a/neonView/CampaignCharts_view/CampaignCharts_view.aod
+++ b/neonView/CampaignCharts_view/CampaignCharts_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignCharts_view</name>
   <title>Overview</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/CampaignCostAnalysis_view/CampaignCostAnalysis_view.aod b/neonView/CampaignCostAnalysis_view/CampaignCostAnalysis_view.aod
index 8f82f69de82d5daed997666d6fa4684f6f2e15e3..4405b5b2479c44065d0ee0e23104b0ae1771ee47 100644
--- a/neonView/CampaignCostAnalysis_view/CampaignCostAnalysis_view.aod
+++ b/neonView/CampaignCostAnalysis_view/CampaignCostAnalysis_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignCostAnalysis_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/CampaignCostChart_view/CampaignCostChart_view.aod b/neonView/CampaignCostChart_view/CampaignCostChart_view.aod
index 9c8daa4a4eb3d5133e1831909f0c9f0c7b9712f8..7250ffc8f373110a85c77e339b0becab8b491d21 100644
--- a/neonView/CampaignCostChart_view/CampaignCostChart_view.aod
+++ b/neonView/CampaignCostChart_view/CampaignCostChart_view.aod
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignCostChart_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <dashletConfigurations>
     <neonDashletConfiguration>
       <name>CampaignCostsChart</name>
-      <title>Campaign costs</title>
+      <title>Campaign Costs</title>
       <description>Shows campaing costs graphically processed</description>
       <fragment>Campaign/full</fragment>
       <singleton v="true" />
diff --git a/neonView/CampaignCostEdit_view/CampaignCostEdit_view.aod b/neonView/CampaignCostEdit_view/CampaignCostEdit_view.aod
index cb1f3d2f26abe217b3d0c4d8aec538aacee07795..82b672034ded4cf58a884abd7326d3630ebe7516 100644
--- a/neonView/CampaignCostEdit_view/CampaignCostEdit_view.aod
+++ b/neonView/CampaignCostEdit_view/CampaignCostEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignCostEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/CampaignCostExtendedFilter_view/CampaignCostExtendedFilter_view.aod b/neonView/CampaignCostExtendedFilter_view/CampaignCostExtendedFilter_view.aod
index 15bdd074a0c4ec70dd41d030bdea0595e3f72cfe..c70e6577f7002cfc7067bd6cdcbd521846aa9ba8 100644
--- a/neonView/CampaignCostExtendedFilter_view/CampaignCostExtendedFilter_view.aod
+++ b/neonView/CampaignCostExtendedFilter_view/CampaignCostExtendedFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignCostExtendedFilter_view</name>
   <title>Stop costs</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
@@ -13,6 +13,8 @@
     <tableViewTemplate>
       <name>CampaignCost</name>
       <entityField>#ENTITY</entityField>
+      <linkedColumns />
+      <fixedFilterFields />
       <columns>
         <neonTableColumn>
           <name>5202d410-fc4d-4109-93b1-8743954a25e2</name>
diff --git a/neonView/CampaignCostFilter_view/CampaignCostFilter_view.aod b/neonView/CampaignCostFilter_view/CampaignCostFilter_view.aod
index 1cfa11b98bd196b97633c48a548cfd3c00abf4a4..61d578cc42cc3ccae4ac3235a1af1c325f67e1ac 100644
--- a/neonView/CampaignCostFilter_view/CampaignCostFilter_view.aod
+++ b/neonView/CampaignCostFilter_view/CampaignCostFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignCostFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="false" />
@@ -12,6 +12,8 @@
     <tableViewTemplate>
       <name>CampaignCost</name>
       <entityField>#ENTITY</entityField>
+      <linkedColumns />
+      <fixedFilterFields />
       <columns>
         <neonTableColumn>
           <name>651c5bd4-8f87-40d4-9d1f-38549b1e5fdf</name>
@@ -26,6 +28,9 @@
     <treeTableViewTemplate>
       <name>Treetable</name>
       <entityField>#ENTITY</entityField>
+      <linkedColumns />
+      <defaultGroupFields />
+      <fixedFilterFields />
       <columns>
         <neonTreeTableColumn>
           <name>9d36a33f-b619-4922-9811-acd73bf67b22</name>
diff --git a/neonView/CampaignCostFix_view/CampaignCostFix_view.aod b/neonView/CampaignCostFix_view/CampaignCostFix_view.aod
index 4397f42cbf18230de40eb4ebb24f8505ada8c7a8..1576e6582d2caafebc70908b12c23451a0ccafaa 100644
--- a/neonView/CampaignCostFix_view/CampaignCostFix_view.aod
+++ b/neonView/CampaignCostFix_view/CampaignCostFix_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignCostFix_view</name>
   <title>Fix costs</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
@@ -14,6 +14,8 @@
     <tableViewTemplate>
       <name>CampaignCostFix</name>
       <entityField>#ENTITY</entityField>
+      <linkedColumns />
+      <fixedFilterFields />
       <columns>
         <neonTableColumn>
           <name>1b2b3ce3-eaff-472b-a873-5e054adac89a</name>
diff --git a/neonView/CampaignCostVariable_view/CampaignCostVariable_view.aod b/neonView/CampaignCostVariable_view/CampaignCostVariable_view.aod
index c29615b901e9d02f3a1e4ec26a3249bdcecaa4d3..babaed199bb42483f9b2aee02481cd8865c43911 100644
--- a/neonView/CampaignCostVariable_view/CampaignCostVariable_view.aod
+++ b/neonView/CampaignCostVariable_view/CampaignCostVariable_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignCostVariable_view</name>
   <title>Step costs</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
@@ -15,9 +15,11 @@
     <treeTableViewTemplate>
       <name>CostTreeTable</name>
       <entityField>#ENTITY</entityField>
+      <linkedColumns />
       <defaultGroupFields>
         <element>CAMPAIGNSTEP_ID</element>
       </defaultGroupFields>
+      <fixedFilterFields />
       <columns>
         <neonTreeTableColumn>
           <name>457caff8-0403-425f-839c-62e5d05fe3a1</name>
@@ -26,10 +28,12 @@
         <neonTreeTableColumn>
           <name>2adbd887-f1df-43ff-bde9-12c8273af7a9</name>
           <entityField>NET</entityField>
+          <aggregateEntityField>NET_aggregate</aggregateEntityField>
         </neonTreeTableColumn>
         <neonTreeTableColumn>
           <name>f8c6439c-9536-477b-af19-26719902e12e</name>
           <entityField>netPerParticipant</entityField>
+          <aggregateEntityField>NETPERPARTICIPANT_aggregate</aggregateEntityField>
         </neonTreeTableColumn>
         <neonTreeTableColumn>
           <name>8239e81b-d69c-4ea9-b55d-83e79d1693cf</name>
diff --git a/neonView/CampaignCost_view/CampaignCost_view.aod b/neonView/CampaignCost_view/CampaignCost_view.aod
index 03ccab3dbb9ccba29ba81793ec30f82fa684d0b2..1272ec645f226370acb5d1322215e46687483b09 100644
--- a/neonView/CampaignCost_view/CampaignCost_view.aod
+++ b/neonView/CampaignCost_view/CampaignCost_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignCost_view</name>
   <title>Cost</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/CampaignEdit_view/CampaignEdit_view.aod b/neonView/CampaignEdit_view/CampaignEdit_view.aod
index 4636fbdffb1c079793fdc18ffea90285a8c6a508..a7271844b7a7c6b676be570c1d16eaf3acd4af0a 100644
--- a/neonView/CampaignEdit_view/CampaignEdit_view.aod
+++ b/neonView/CampaignEdit_view/CampaignEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignEdit_view</name>
   <title>Campaign</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/CampaignFilter_view/CampaignFilter_view.aod b/neonView/CampaignFilter_view/CampaignFilter_view.aod
index 0dcb198305db9a4021ace200c99df40b0018904d..251fae2fce511b41454347cd8e36810d33a77f71 100644
--- a/neonView/CampaignFilter_view/CampaignFilter_view.aod
+++ b/neonView/CampaignFilter_view/CampaignFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignFilter_view</name>
   <title>Campaign</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
@@ -8,7 +8,7 @@
   <dashletConfigurations>
     <neonDashletConfiguration>
       <name>CurrentUsersOwnedCampaigns</name>
-      <title>My campaigns</title>
+      <title>My Campaigns</title>
       <description>Show my campaigns</description>
       <fragment>Campaign/filter</fragment>
       <singleton v="true" />
diff --git a/neonView/CampaignMain_view/CampaignMain_view.aod b/neonView/CampaignMain_view/CampaignMain_view.aod
index 789dbfbf94383dc63337e0c41af2e4bfe7c662f5..9c190085b1289d13e896abcf2315afc8a7052d36 100644
--- a/neonView/CampaignMain_view/CampaignMain_view.aod
+++ b/neonView/CampaignMain_view/CampaignMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignMain_view</name>
   <title>Campaign</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
@@ -46,11 +46,6 @@
       <entityField>Activities</entityField>
       <view>ActivityFilter_view</view>
     </neonViewReference>
-    <neonViewReference>
-      <name>e28e5598-9366-4f5a-be8f-70dd3cc0399a</name>
-      <entityField>Tasks</entityField>
-      <view>TaskFilter_view</view>
-    </neonViewReference>
     <neonViewReference>
       <name>3b87a113-aa39-4d20-8902-ad2a9f6aba5f</name>
       <entityField>Documents</entityField>
diff --git a/neonView/CampaignOverview_view/CampaignOverview_view.aod b/neonView/CampaignOverview_view/CampaignOverview_view.aod
index b3d627a88d497a6b3b88396476540d40ce9f4609..d0855732e6dbbaca022b1c820cedfedb1018fd7b 100644
--- a/neonView/CampaignOverview_view/CampaignOverview_view.aod
+++ b/neonView/CampaignOverview_view/CampaignOverview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignOverview_view</name>
   <title>Overview</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/CampaignParticipantChart_view/CampaignParticipantChart_view.aod b/neonView/CampaignParticipantChart_view/CampaignParticipantChart_view.aod
index ca3630fb2bd2f59c71daef9ad7c94bca5c9535e2..33766f0cf1bf4193794f4f8e66d5849dfc492762 100644
--- a/neonView/CampaignParticipantChart_view/CampaignParticipantChart_view.aod
+++ b/neonView/CampaignParticipantChart_view/CampaignParticipantChart_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignParticipantChart_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/CampaignParticipantEdit_view/CampaignParticipantEdit_view.aod b/neonView/CampaignParticipantEdit_view/CampaignParticipantEdit_view.aod
index 6539d7a4d36249efc9252b43feb7ab58483090cf..3c1d934a73af10746e84e1b78b137249a85dcef7 100644
--- a/neonView/CampaignParticipantEdit_view/CampaignParticipantEdit_view.aod
+++ b/neonView/CampaignParticipantEdit_view/CampaignParticipantEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignParticipantEdit_view</name>
   <title>Add participant to Campaign</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
@@ -14,6 +14,7 @@
   <children>
     <scoreCardViewTemplate>
       <name>CampaignStepInfos_Score</name>
+      <fieldActions />
       <entityField>#ENTITY</entityField>
       <fields>
         <entityFieldLink>
@@ -41,9 +42,13 @@
           <entityField>CAMPAIGNSTEP_ID</entityField>
         </entityFieldLink>
         <entityFieldLink>
-          <name>94aa9a4d-e2e5-4a1b-b6f8-4d5aed87fe53</name>
+          <name>65fd8c83-7990-4109-8a08-5c0c56cb3426</name>
           <entityField>CONTACT_ID</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>572ffba6-15c8-4d82-8f78-7e03ca1215ce</name>
+          <entityField>RESPONSIBLE_CONTACT_ID</entityField>
+        </entityFieldLink>
       </fields>
     </genericViewTemplate>
   </children>
diff --git a/neonView/CampaignParticipantFilter_view/CampaignParticipantFilter_view.aod b/neonView/CampaignParticipantFilter_view/CampaignParticipantFilter_view.aod
index 0f7b7272655670436b4f21df4c6f9c78f65cb426..c37810db65a190013ac7672d37a925b258774bec 100644
--- a/neonView/CampaignParticipantFilter_view/CampaignParticipantFilter_view.aod
+++ b/neonView/CampaignParticipantFilter_view/CampaignParticipantFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignParticipantFilter_view</name>
   <title></title>
   <description></description>
@@ -15,6 +15,8 @@
       <name>ParticipantsTable</name>
       <favoriteActionGroup1>FilterViewActionGroup</favoriteActionGroup1>
       <entityField>#ENTITY</entityField>
+      <linkedColumns />
+      <fixedFilterFields />
       <isCreatable v="true" />
       <isEditable v="true" />
       <columns>
@@ -24,12 +26,20 @@
         </neonTableColumn>
         <neonTableColumn>
           <name>0b6dd644-a692-4c1a-9ab7-c38608e63eac</name>
-          <entityField>CONTACT_ID</entityField>
+          <entityField>PERSON_CONTACT_ID</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>74ef2d05-72d0-4406-915d-0c0facd351c2</name>
+          <entityField>ORGANISATION_CONTACT_ID</entityField>
         </neonTableColumn>
         <neonTableColumn>
           <name>1649e2e9-e3b3-4a41-960d-39002cb6b2d8</name>
           <entityField>CAMPAIGNSTEP_ID</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>19da14e0-31c5-4a2a-9291-d0b5b4bd0fc4</name>
+          <entityField>RESPONSIBLE_CONTACT_ID</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>20c9aed5-cf30-484b-a68b-c1f6ca0459db</name>
           <entityField>STANDARD_EMAIL_COMMUNICATION</entityField>
@@ -44,6 +54,9 @@
       <name>Treetable</name>
       <favoriteActionGroup1>FilterViewActionGroup</favoriteActionGroup1>
       <entityField>#ENTITY</entityField>
+      <linkedColumns />
+      <defaultGroupFields />
+      <fixedFilterFields />
       <columns>
         <neonTreeTableColumn>
           <name>9ded1920-58ef-4fc1-ac92-07522c7c06d4</name>
@@ -51,12 +64,20 @@
         </neonTreeTableColumn>
         <neonTreeTableColumn>
           <name>f406134b-b1c3-4fae-9f6d-771827d0fb01</name>
-          <entityField>CONTACT_ID</entityField>
+          <entityField>PERSON_CONTACT_ID</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>4c485b2e-bf95-4205-8e01-bcf4edbc5a03</name>
+          <entityField>ORGANISATION_CONTACT_ID</entityField>
         </neonTreeTableColumn>
         <neonTreeTableColumn>
           <name>c7831772-15e4-49bb-ba84-647136c3002e</name>
           <entityField>CAMPAIGNSTEP_ID</entityField>
         </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>8c5c3311-0127-4977-af27-8ab582d08733</name>
+          <entityField>RESPONSIBLE_CONTACT_ID</entityField>
+        </neonTreeTableColumn>
         <neonTreeTableColumn>
           <name>664cb6d0-48f9-48bf-9934-2fdb40501771</name>
           <entityField>STANDARD_EMAIL_COMMUNICATION</entityField>
diff --git a/neonView/CampaignParticipantPreview_view/CampaignParticipantPreview_view.aod b/neonView/CampaignParticipantPreview_view/CampaignParticipantPreview_view.aod
index 0fe2fda33811029c2e330ce8bb88ef64c4d97e4d..6a33444d49977194c61460ba92cb8f6cf0a5bb63 100644
--- a/neonView/CampaignParticipantPreview_view/CampaignParticipantPreview_view.aod
+++ b/neonView/CampaignParticipantPreview_view/CampaignParticipantPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignParticipantPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/CampaignPlanning_view/CampaignPlanning_view.aod b/neonView/CampaignPlanning_view/CampaignPlanning_view.aod
index ac3d466a4be4d31181dbd6d6dede592366f663e4..3a6df29eef7cad1a1e0de0e479314247d4a6495f 100644
--- a/neonView/CampaignPlanning_view/CampaignPlanning_view.aod
+++ b/neonView/CampaignPlanning_view/CampaignPlanning_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignPlanning_view</name>
   <title>Campaign planning</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/CampaignPreview_view/CampaignPreview_view.aod b/neonView/CampaignPreview_view/CampaignPreview_view.aod
index 6cbe20bbb71cbf84ade1963352435ae8982265bd..0433154d474e0d4ed5091ea98468fba6a54c6ec6 100644
--- a/neonView/CampaignPreview_view/CampaignPreview_view.aod
+++ b/neonView/CampaignPreview_view/CampaignPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignPreview_view</name>
   <title>Campaign</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/CampaignStepAddParticipants_view/CampaignStepAddParticipants_view.aod b/neonView/CampaignStepAddParticipants_view/CampaignStepAddParticipants_view.aod
index 975475f46305254376b82932f589d15c80d3f7c1..245fb496dc22e1e771f27f4f30abf58f1057dc2d 100644
--- a/neonView/CampaignStepAddParticipants_view/CampaignStepAddParticipants_view.aod
+++ b/neonView/CampaignStepAddParticipants_view/CampaignStepAddParticipants_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignStepAddParticipants_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/CampaignStepAnalysis_view/CampaignStepAnalysis_view.aod b/neonView/CampaignStepAnalysis_view/CampaignStepAnalysis_view.aod
index 138d00449398c5432ae4fbda57e1cbf11b8a303b..0404e066350dfa13fae736238af9060fcf7068cf 100644
--- a/neonView/CampaignStepAnalysis_view/CampaignStepAnalysis_view.aod
+++ b/neonView/CampaignStepAnalysis_view/CampaignStepAnalysis_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignStepAnalysis_view</name>
   <title>Evaluation</title>
   <description>Charts als Ãœbersicht der Kosten des Kampagnenschrittes</description>
diff --git a/neonView/CampaignStepEdit_view/CampaignStepEdit_view.aod b/neonView/CampaignStepEdit_view/CampaignStepEdit_view.aod
index 930baab2cbd6a0b9e3c993bfb014837b126262dc..af0403664b91272e1fca35e46255dca705b400b4 100644
--- a/neonView/CampaignStepEdit_view/CampaignStepEdit_view.aod
+++ b/neonView/CampaignStepEdit_view/CampaignStepEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignStepEdit_view</name>
   <title>New campaign step</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/CampaignStepFilter_view/CampaignStepFilter_view.aod b/neonView/CampaignStepFilter_view/CampaignStepFilter_view.aod
index dc45eb0e658ba1ae7eba7072fac749bc7051813d..98348e6043ac3b302394c2f486bc72bb0ab7b46a 100644
--- a/neonView/CampaignStepFilter_view/CampaignStepFilter_view.aod
+++ b/neonView/CampaignStepFilter_view/CampaignStepFilter_view.aod
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignStepFilter_view</name>
   <title>Campaign steps </title>
   <description></description>
   <majorModelMode>DISTRIBUTED</majorModelMode>
-  <filterable v="false" />
+  <filterable v="true" />
   <layout>
     <groupLayout>
       <name>layout</name>
@@ -13,7 +13,6 @@
   <children>
     <tableViewTemplate>
       <name>StepsTable</name>
-      <inlineEdit v="true" />
       <entityField>#ENTITY</entityField>
       <isEditable v="true" />
       <autoNewRow v="true" />
@@ -30,6 +29,10 @@
           <name>d9ca59de-1441-494a-91f0-1cff91c575de</name>
           <entityField>NAME</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>166b2a17-1142-4c1d-b403-362afb227469</name>
+          <entityField>PREDECESSORSTEP_ID</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>75d15a06-1591-4f5c-9be6-df98e32e3834</name>
           <entityField>EMPLOYEE_CONTACT_ID</entityField>
diff --git a/neonView/CampaignStepLookup_view/CampaignStepLookup_view.aod b/neonView/CampaignStepLookup_view/CampaignStepLookup_view.aod
index 9f87ec7120123809f585d39d02f75e538b2765f0..85ad77be17803e737e71d50126ae5460489ccfeb 100644
--- a/neonView/CampaignStepLookup_view/CampaignStepLookup_view.aod
+++ b/neonView/CampaignStepLookup_view/CampaignStepLookup_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignStepLookup_view</name>
   <title>Caimpaignsteps</title>
   <description></description>
diff --git a/neonView/CampaignStepMain_view/CampaignStepMain_view.aod b/neonView/CampaignStepMain_view/CampaignStepMain_view.aod
index 7bf5acbf61bde94ec6922b7cb22739d71992177c..461ae82601ef81afc8cbe003078b613d26173309 100644
--- a/neonView/CampaignStepMain_view/CampaignStepMain_view.aod
+++ b/neonView/CampaignStepMain_view/CampaignStepMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignStepMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/CampaignStepMembers_view/CampaignStepMembers_view.aod b/neonView/CampaignStepMembers_view/CampaignStepMembers_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..716e6056c13245d50742cfbd4ff3af2e575a7329
--- /dev/null
+++ b/neonView/CampaignStepMembers_view/CampaignStepMembers_view.aod
@@ -0,0 +1,10 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>CampaignStepMembers_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+</neonView>
diff --git a/neonView/CampaignStepParticipnatsPerStep_view/CampaignStepParticipnatsPerStep_view.aod b/neonView/CampaignStepParticipnatsPerStep_view/CampaignStepParticipnatsPerStep_view.aod
index cee2045769f117ae07f14d1b8ebef69d3e1e792d..7b1fbeae783c482a6acb628d28cb691a584dac3f 100644
--- a/neonView/CampaignStepParticipnatsPerStep_view/CampaignStepParticipnatsPerStep_view.aod
+++ b/neonView/CampaignStepParticipnatsPerStep_view/CampaignStepParticipnatsPerStep_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignStepParticipnatsPerStep_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/CampaignStepPreview_view/CampaignStepPreview_view.aod b/neonView/CampaignStepPreview_view/CampaignStepPreview_view.aod
index 51d4713e5249fc70b65903eaa490f618d7a9031a..d171410b977d6f6c4ae4e094d6680713d03973a1 100644
--- a/neonView/CampaignStepPreview_view/CampaignStepPreview_view.aod
+++ b/neonView/CampaignStepPreview_view/CampaignStepPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignStepPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
@@ -50,19 +50,12 @@
           <name>f7ddecfb-60bc-4a94-8905-7da729b32acd</name>
           <entityField>STEPMEDIUM</entityField>
         </entityFieldLink>
-      </fields>
-    </genericViewTemplate>
-    <genericViewTemplate>
-      <name>CampaignId</name>
-      <editMode v="false" />
-      <entityField>#ENTITY</entityField>
-      <fields>
         <entityFieldLink>
-          <name>cee78c4b-bbac-458a-ab1c-53734ea8c7f0</name>
+          <name>4056e92a-6c5c-4a24-b0f6-dc2a5aa798d4</name>
           <entityField>CAMPAIGN_ID</entityField>
         </entityFieldLink>
         <entityFieldLink>
-          <name>0bffa6f8-cb18-47f8-a8f4-08cf9d718114</name>
+          <name>32c55d58-72c7-4af0-9236-a019149656d4</name>
           <entityField>CampaignStatus</entityField>
         </entityFieldLink>
       </fields>
diff --git a/neonView/CampaignStepsGantt_view/CampaignStepsGantt_view.aod b/neonView/CampaignStepsGantt_view/CampaignStepsGantt_view.aod
index bc3590f6e3babfe2dd017f6c1ba1b5f2af7f224f..3219f78a4aa76843ad6a8e0f1c6bddfac9f35e9d 100644
--- a/neonView/CampaignStepsGantt_view/CampaignStepsGantt_view.aod
+++ b/neonView/CampaignStepsGantt_view/CampaignStepsGantt_view.aod
@@ -1,8 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CampaignStepsGantt_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
-  <filterable v="true" />
   <layout>
     <noneLayout>
       <name>layout</name>
@@ -19,13 +18,13 @@
       <predecessorIdField>PREDECESSORSTEP_ID</predecessorIdField>
       <entityField>#ENTITY</entityField>
       <isDeletable v="true" />
-      <isEditable v="true" />
       <title></title>
       <devices>
         <element>TABLET</element>
         <element>DESKTOP</element>
       </devices>
       <isCreatable v="true" />
+      <isEditable v="true" />
       <columns>
         <neonTableColumn>
           <name>9469e2f2-35ac-4f87-a4a7-959b47a5e7bb</name>
diff --git a/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod b/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod
index 43fd31c31ab964d4bd4d7d0ef08b179b70d9c9e0..b3c80308e0208093dbb468c21c5f2a227db7c5ac 100644
--- a/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod
+++ b/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ClassificationAdminEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/ClassificationAdminFilter_view/ClassificationAdminFilter_view.aod b/neonView/ClassificationAdminFilter_view/ClassificationAdminFilter_view.aod
index 616066188353b8e65c14944886f0d9e36692ef62..66bc95107a363eda4d20e2da950fd06c3a332987 100644
--- a/neonView/ClassificationAdminFilter_view/ClassificationAdminFilter_view.aod
+++ b/neonView/ClassificationAdminFilter_view/ClassificationAdminFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ClassificationAdminFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ClassificationGradingMultipleEdit_view/ClassificationGradingMultipleEdit_view.aod b/neonView/ClassificationGradingMultipleEdit_view/ClassificationGradingMultipleEdit_view.aod
index 6ba9ff49effd10c4f9e1292bf94f92e3070303d7..2a66faca02e59683ff6ea9d27365ea4c6b92cffd 100644
--- a/neonView/ClassificationGradingMultipleEdit_view/ClassificationGradingMultipleEdit_view.aod
+++ b/neonView/ClassificationGradingMultipleEdit_view/ClassificationGradingMultipleEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ClassificationGradingMultipleEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/ClassificationGroupPreview_view/ClassificationGroupPreview_view.aod b/neonView/ClassificationGroupPreview_view/ClassificationGroupPreview_view.aod
index ac701fd79bb19e0d3b9afcee91964fda6b03c8d7..07009fa6f7cadc75d53362d8c339f7fa798dc4c0 100644
--- a/neonView/ClassificationGroupPreview_view/ClassificationGroupPreview_view.aod
+++ b/neonView/ClassificationGroupPreview_view/ClassificationGroupPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ClassificationGroupPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ClassificationPreview_view/ClassificationPreview_view.aod b/neonView/ClassificationPreview_view/ClassificationPreview_view.aod
index 8c55fe145f75d6653dc2ba4968b158c6dcf796ed..099382a2e2dccd5a9ec78daef6edf2a29b74b84d 100644
--- a/neonView/ClassificationPreview_view/ClassificationPreview_view.aod
+++ b/neonView/ClassificationPreview_view/ClassificationPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ClassificationPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <isOverlay v="false" />
diff --git a/neonView/ClassificationScoreMultipleEdit_view/ClassificationScoreMultipleEdit_view.aod b/neonView/ClassificationScoreMultipleEdit_view/ClassificationScoreMultipleEdit_view.aod
index add9fa38736033c557315fd3b6920b080be9e10f..20524c3da830f14a171723be27f487813ccf31f4 100644
--- a/neonView/ClassificationScoreMultipleEdit_view/ClassificationScoreMultipleEdit_view.aod
+++ b/neonView/ClassificationScoreMultipleEdit_view/ClassificationScoreMultipleEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ClassificationScoreMultipleEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ClassificationTree_view/ClassificationTree_view.aod b/neonView/ClassificationTree_view/ClassificationTree_view.aod
index ca36f8fd5fa5bb784aa2111d11e4981e1bf01081..7c7200def91c52a3759349f831010d700606509f 100644
--- a/neonView/ClassificationTree_view/ClassificationTree_view.aod
+++ b/neonView/ClassificationTree_view/ClassificationTree_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ClassificationTree_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ClassificationTypePreview_View/ClassificationTypePreview_View.aod b/neonView/ClassificationTypePreview_View/ClassificationTypePreview_View.aod
index 9b7072fc51941a61d42ed0f8044da5e86732ddc1..e9a3e74a76cb8ed1dfd9e3524065853bf9910330 100644
--- a/neonView/ClassificationTypePreview_View/ClassificationTypePreview_View.aod
+++ b/neonView/ClassificationTypePreview_View/ClassificationTypePreview_View.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ClassificationTypePreview_View</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/CommRestrictionDrawer_view/CommRestrictionDrawer_view.aod b/neonView/CommRestrictionDrawer_view/CommRestrictionDrawer_view.aod
index e764fb225134a5ce61892cd2d44d4bfbd8a19c34..62e73d65f64768e597fb8feaefb5ea1289dc5e3f 100644
--- a/neonView/CommRestrictionDrawer_view/CommRestrictionDrawer_view.aod
+++ b/neonView/CommRestrictionDrawer_view/CommRestrictionDrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CommRestrictionDrawer_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/CommRestrictionFilter_view/CommRestrictionFilter_view.aod b/neonView/CommRestrictionFilter_view/CommRestrictionFilter_view.aod
index 8a4ff768fa40e083af9a83ea9d76df586d9e6df3..118d5059636491300e732fb203a1077f93f3bcba 100644
--- a/neonView/CommRestrictionFilter_view/CommRestrictionFilter_view.aod
+++ b/neonView/CommRestrictionFilter_view/CommRestrictionFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CommRestrictionFilter_view</name>
   <title>Restrictions</title>
   <description>Restrictions</description>
diff --git a/neonView/CommRestrictionPreview_view/CommRestrictionPreview_view.aod b/neonView/CommRestrictionPreview_view/CommRestrictionPreview_view.aod
index 58f971c0f6bce48c1ae298834eb5af6774088a51..e740f6b2c740a4fad9e8135fe09e43d7aed32d67 100644
--- a/neonView/CommRestrictionPreview_view/CommRestrictionPreview_view.aod
+++ b/neonView/CommRestrictionPreview_view/CommRestrictionPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CommRestrictionPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/CommRestrictionSmallEdit_view/CommRestrictionSmallEdit_view.aod b/neonView/CommRestrictionSmallEdit_view/CommRestrictionSmallEdit_view.aod
index fc757ef341327759a27d89928ef0fd23ffbd64a3..03d88f6cc6c6592cc60f944ab9fdabbe29b133dd 100644
--- a/neonView/CommRestrictionSmallEdit_view/CommRestrictionSmallEdit_view.aod
+++ b/neonView/CommRestrictionSmallEdit_view/CommRestrictionSmallEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CommRestrictionSmallEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/CommunicationEdit_view/CommunicationEdit_view.aod b/neonView/CommunicationEdit_view/CommunicationEdit_view.aod
index 051e7e5fcbee5bc3d1e929138cd04f41d374e057..3fa9900fd7e5a5f7c8223e3cf6ed9e107337644a 100644
--- a/neonView/CommunicationEdit_view/CommunicationEdit_view.aod
+++ b/neonView/CommunicationEdit_view/CommunicationEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CommunicationEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/CommunicationFilter_view/CommunicationFilter_view.aod b/neonView/CommunicationFilter_view/CommunicationFilter_view.aod
index 18c53dad65ec9f0029c712c2fd48522d8c07db53..a0ae2fccad5d7d8534c666ceaf6b65c15b5979ff 100644
--- a/neonView/CommunicationFilter_view/CommunicationFilter_view.aod
+++ b/neonView/CommunicationFilter_view/CommunicationFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CommunicationFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/CommunicationList_view/CommunicationList_view.aod b/neonView/CommunicationList_view/CommunicationList_view.aod
index cf84440573f272b268eda67ae367dcf697586a1a..e646c71d4f7c30721587a8b4153b896e7bb89305 100644
--- a/neonView/CommunicationList_view/CommunicationList_view.aod
+++ b/neonView/CommunicationList_view/CommunicationList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CommunicationList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/CommunicationMultiEdit_view/CommunicationMultiEdit_view.aod b/neonView/CommunicationMultiEdit_view/CommunicationMultiEdit_view.aod
index ab9ecb3265622ccc290a266d456fa092032f831b..8022b2d402ace5343316e5fa9121ffe9fd15c99d 100644
--- a/neonView/CommunicationMultiEdit_view/CommunicationMultiEdit_view.aod
+++ b/neonView/CommunicationMultiEdit_view/CommunicationMultiEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CommunicationMultiEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/CompetitionDrawer_view/CompetitionDrawer_view.aod b/neonView/CompetitionDrawer_view/CompetitionDrawer_view.aod
index de151174dc88a3a19c66fbfe5cd0902f86066b28..469f6a0b536f202e16fda72914d7687a4032b757 100644
--- a/neonView/CompetitionDrawer_view/CompetitionDrawer_view.aod
+++ b/neonView/CompetitionDrawer_view/CompetitionDrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CompetitionDrawer_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/CompetitionEdit_view/CompetitionEdit_view.aod b/neonView/CompetitionEdit_view/CompetitionEdit_view.aod
index 2dc804c8fa5e5cc62683314a6c0c390457b807f1..c752afc16e26e416dd3680aad681e865b73d90ab 100644
--- a/neonView/CompetitionEdit_view/CompetitionEdit_view.aod
+++ b/neonView/CompetitionEdit_view/CompetitionEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CompetitionEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/CompetitionFilter_view/CompetitionFilter_view.aod b/neonView/CompetitionFilter_view/CompetitionFilter_view.aod
index cc9122ea36d33e6cc79642c9fa3fd7ae08a91eae..9dd7bb664440f6dea9a6baad7e3d19c4cd04910c 100644
--- a/neonView/CompetitionFilter_view/CompetitionFilter_view.aod
+++ b/neonView/CompetitionFilter_view/CompetitionFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CompetitionFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/CompetitionPreview_view/CompetitionPreview_view.aod b/neonView/CompetitionPreview_view/CompetitionPreview_view.aod
index 789733a343d48eed24863c61762bba34334101a6..9c39a12fda86ea82b8ecaee889307845c46af1a9 100644
--- a/neonView/CompetitionPreview_view/CompetitionPreview_view.aod
+++ b/neonView/CompetitionPreview_view/CompetitionPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CompetitionPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ContactEdit_view/ContactEdit_view.aod b/neonView/ContactEdit_view/ContactEdit_view.aod
index 1ba399ccaff87cb177e8025ad93c7fd3e0740864..b085859245f16128047e90264baf3f8329ccd2ce 100644
--- a/neonView/ContactEdit_view/ContactEdit_view.aod
+++ b/neonView/ContactEdit_view/ContactEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ContactEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ContactList_view/ContactList_view.aod b/neonView/ContactList_view/ContactList_view.aod
index 182533d0196cee3df21b5a2b72ce151a5e1a66dd..f9394214646cb91de251b078ce31118135cbed0c 100644
--- a/neonView/ContactList_view/ContactList_view.aod
+++ b/neonView/ContactList_view/ContactList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ContactList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ContactTitledList_view/ContactTitledList_view.aod b/neonView/ContactTitledList_view/ContactTitledList_view.aod
index 9e0050c6a15d4a1eca4753578d1a79bf491a935a..c980c83ab37d6e0c68640936144f73c7ca1a1386 100644
--- a/neonView/ContactTitledList_view/ContactTitledList_view.aod
+++ b/neonView/ContactTitledList_view/ContactTitledList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ContactTitledList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ContractEdit_view/ContractEdit_view.aod b/neonView/ContractEdit_view/ContractEdit_view.aod
index 1721da28721b123e7b62d35b18e6d7920d45cbfe..67d330efcd5a3898f54f2c3842c6d1a16b0ed550 100644
--- a/neonView/ContractEdit_view/ContractEdit_view.aod
+++ b/neonView/ContractEdit_view/ContractEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ContractEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ContractFilter_view/ContractFilter_view.aod b/neonView/ContractFilter_view/ContractFilter_view.aod
index b43c2f7fa56d7f2d30204d9369376914532022b8..08b326cef29975aa6983fe5b92098df727bd4dfb 100644
--- a/neonView/ContractFilter_view/ContractFilter_view.aod
+++ b/neonView/ContractFilter_view/ContractFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ContractFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/ContractMain_view/ContractMain_view.aod b/neonView/ContractMain_view/ContractMain_view.aod
index cc12eb8162421398d1d8010c9539ce9e01f634c7..ccf52a59c9a3d142fad573919cee3f521341562c 100644
--- a/neonView/ContractMain_view/ContractMain_view.aod
+++ b/neonView/ContractMain_view/ContractMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ContractMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ContractPreview_view/ContractPreview_view.aod b/neonView/ContractPreview_view/ContractPreview_view.aod
index d825a03fee18e23e58567ec90ac565079048fae9..f7fad6eb7055a66d1e3fe19c3bf45c181e9e2ba1 100644
--- a/neonView/ContractPreview_view/ContractPreview_view.aod
+++ b/neonView/ContractPreview_view/ContractPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ContractPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/CountriesPreview_view/CountriesPreview_view.aod b/neonView/CountriesPreview_view/CountriesPreview_view.aod
index 7b61d0e9d937d18afaecd2be4a88ecaf1826a34f..e7c4eb2ccb925fa6b3388e50b9dd6306fd3a39b4 100644
--- a/neonView/CountriesPreview_view/CountriesPreview_view.aod
+++ b/neonView/CountriesPreview_view/CountriesPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CountriesPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/CountriesTable_view/CountriesTable_view.aod b/neonView/CountriesTable_view/CountriesTable_view.aod
index be33402167b8d87c7baceacfe49e93927cd7eba4..15bdadcf67b83575947e09b6a02d018d5857794c 100644
--- a/neonView/CountriesTable_view/CountriesTable_view.aod
+++ b/neonView/CountriesTable_view/CountriesTable_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>CountriesTable_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DSGVODrawer_view/DSGVODrawer_view.aod b/neonView/DSGVODrawer_view/DSGVODrawer_view.aod
index 867b93a2dd963ad62f2d3bae5e734f7c7ed29dca..ae0732836008d38205b457067263edf3fe54ae87 100644
--- a/neonView/DSGVODrawer_view/DSGVODrawer_view.aod
+++ b/neonView/DSGVODrawer_view/DSGVODrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DSGVODrawer_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DSGVOEdit_view/DSGVOEdit_view.aod b/neonView/DSGVOEdit_view/DSGVOEdit_view.aod
index b10ce1465adaebeadf62b7a025c6c08c50e0961c..7a2e36dcd0dd930f931f5bd831d0099cf3d24b02 100644
--- a/neonView/DSGVOEdit_view/DSGVOEdit_view.aod
+++ b/neonView/DSGVOEdit_view/DSGVOEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DSGVOEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/DSGVOFilter_view/DSGVOFilter_view.aod b/neonView/DSGVOFilter_view/DSGVOFilter_view.aod
index 0be528e00a0be5d48a8357a58e729bad5f6475db..3129f4f17bea114ba27ff6c2d4875dbcf51883cd 100644
--- a/neonView/DSGVOFilter_view/DSGVOFilter_view.aod
+++ b/neonView/DSGVOFilter_view/DSGVOFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DSGVOFilter_view</name>
   <title>Data Privacy</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/DSGVOInfoEdit_view/DSGVOInfoEdit_view.aod b/neonView/DSGVOInfoEdit_view/DSGVOInfoEdit_view.aod
index 322834185a83b93efde46f10ee93dcc1f9c66f96..5adffc8c9c2fc00f0938be8e3cc3c1fd28d2b988 100644
--- a/neonView/DSGVOInfoEdit_view/DSGVOInfoEdit_view.aod
+++ b/neonView/DSGVOInfoEdit_view/DSGVOInfoEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DSGVOInfoEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/DSGVOPreviewAnonym_view/DSGVOPreviewAnonym_view.aod b/neonView/DSGVOPreviewAnonym_view/DSGVOPreviewAnonym_view.aod
index 16b162e36e1f40868b649f8033af7cd7ef25bf23..658b57846745083a3af5e8b89d7285c35e158b15 100644
--- a/neonView/DSGVOPreviewAnonym_view/DSGVOPreviewAnonym_view.aod
+++ b/neonView/DSGVOPreviewAnonym_view/DSGVOPreviewAnonym_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DSGVOPreviewAnonym_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/DSGVOPreview_view/DSGVOPreview_view.aod b/neonView/DSGVOPreview_view/DSGVOPreview_view.aod
index 89ff9d67426a5603c64b734f7a6e53d70efdb10b..f39f20c924ef610992540387af4d45b4e2136697 100644
--- a/neonView/DSGVOPreview_view/DSGVOPreview_view.aod
+++ b/neonView/DSGVOPreview_view/DSGVOPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DSGVOPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DSGVOReport_view/DSGVOReport_view.aod b/neonView/DSGVOReport_view/DSGVOReport_view.aod
index 3835fcb15b87bf51c774399be84dcfd926d76757..08abe1b52b49e8bf9e1c84658dd0b9dcdbf8c50c 100644
--- a/neonView/DSGVOReport_view/DSGVOReport_view.aod
+++ b/neonView/DSGVOReport_view/DSGVOReport_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DSGVOReport_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DefaultAdminView_view/DefaultAdminView_view.aod b/neonView/DefaultAdminView_view/DefaultAdminView_view.aod
index dbd985c9477eb4df3b09527182866eddc41f9fb9..e44c460bd85f33274c34ba128bf81c9e4e26f184 100644
--- a/neonView/DefaultAdminView_view/DefaultAdminView_view.aod
+++ b/neonView/DefaultAdminView_view/DefaultAdminView_view.aod
@@ -1,15 +1,25 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DefaultAdminView_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
   <overlayOrientation>PORTRAIT</overlayOrientation>
   <layout>
-    <noneLayout>
+    <boxLayout>
       <name>layout</name>
-    </noneLayout>
+    </boxLayout>
   </layout>
   <children>
+    <genericViewTemplate>
+      <name>EntityInfo</name>
+      <isEditable v="false" />
+      <fields>
+        <entityFieldLink>
+          <name>09fb02da-699a-431b-8a5c-a22396ddf5b5</name>
+          <entityField>ENTITY</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
     <neonViewReference>
       <name>80206d15-7132-45c1-9cf5-e2236d0f2fdb</name>
       <entityField>Rows</entityField>
diff --git a/neonView/DefaultLookup_view/DefaultLookup_view.aod b/neonView/DefaultLookup_view/DefaultLookup_view.aod
index 13bbd8a0990a47a6af2f62af96ad0e4a85ba800f..70e53f68709139a84f5eec212d760c9d9baab990 100644
--- a/neonView/DefaultLookup_view/DefaultLookup_view.aod
+++ b/neonView/DefaultLookup_view/DefaultLookup_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DefaultLookup_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DescriptionTranslationEdit_view/DescriptionTranslationEdit_view.aod b/neonView/DescriptionTranslationEdit_view/DescriptionTranslationEdit_view.aod
index 88a2787707419ee251f0cca03aaf2c71c4e68e11..9c24230a7351177dc053a9e2be598667c9d0d927 100644
--- a/neonView/DescriptionTranslationEdit_view/DescriptionTranslationEdit_view.aod
+++ b/neonView/DescriptionTranslationEdit_view/DescriptionTranslationEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DescriptionTranslationEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/DescriptionTranslationFilter_view/DescriptionTranslationFilter_view.aod b/neonView/DescriptionTranslationFilter_view/DescriptionTranslationFilter_view.aod
index 4d86b266dc54aa4f1a2a8439b5740339593201e3..004c88356e0483968d15fd1b5929d6fe57a99472 100644
--- a/neonView/DescriptionTranslationFilter_view/DescriptionTranslationFilter_view.aod
+++ b/neonView/DescriptionTranslationFilter_view/DescriptionTranslationFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DescriptionTranslationFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DescriptionTranslationPreview_view/DescriptionTranslationPreview_view.aod b/neonView/DescriptionTranslationPreview_view/DescriptionTranslationPreview_view.aod
index 1e491d1379d406b41850f3f08303c0c441e89730..11b5fc210b212cbb9d0d58609909e89a860f1e54 100644
--- a/neonView/DescriptionTranslationPreview_view/DescriptionTranslationPreview_view.aod
+++ b/neonView/DescriptionTranslationPreview_view/DescriptionTranslationPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DescriptionTranslationPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/DistrictEdit_view/DistrictEdit_view.aod b/neonView/DistrictEdit_view/DistrictEdit_view.aod
index ef598ae5665601c0ec565416dd283b994c2c4db6..ba7b2fa93c09ebe118b6ebd7f16b732bd335f919 100644
--- a/neonView/DistrictEdit_view/DistrictEdit_view.aod
+++ b/neonView/DistrictEdit_view/DistrictEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DistrictEdit_view</name>
   <title>Responsible Districts</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/DistrictFilter_view/DistrictFilter_view.aod b/neonView/DistrictFilter_view/DistrictFilter_view.aod
index 0ae033d2346776a6bb816ef83e21f016045031e5..d60e76db2624cc64e91b5d37cc50042ccbab2324 100644
--- a/neonView/DistrictFilter_view/DistrictFilter_view.aod
+++ b/neonView/DistrictFilter_view/DistrictFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DistrictFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/DistrictList_view/DistrictList_view.aod b/neonView/DistrictList_view/DistrictList_view.aod
index 161c81303a534d682d1517acae5abfef351e9904..45225faadb9410677d433a529a1d287105aa26a2 100644
--- a/neonView/DistrictList_view/DistrictList_view.aod
+++ b/neonView/DistrictList_view/DistrictList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DistrictList_view</name>
   <title>Responsible Districts</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/DistrictMain_view/DistrictMain_view.aod b/neonView/DistrictMain_view/DistrictMain_view.aod
index 2babd2f4b0b697301ad2cc98105a9779c53e8da9..f6d39a27cd5aefdf998581597e296bdcfca4301a 100644
--- a/neonView/DistrictMain_view/DistrictMain_view.aod
+++ b/neonView/DistrictMain_view/DistrictMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DistrictMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DistrictPreview_view/DistrictPreview_view.aod b/neonView/DistrictPreview_view/DistrictPreview_view.aod
index 4f778e75402704706fecfd07dcc094377db9573c..8b7243f1f4ea2d428510b3c729c45e92093e6b80 100644
--- a/neonView/DistrictPreview_view/DistrictPreview_view.aod
+++ b/neonView/DistrictPreview_view/DistrictPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DistrictPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/DistrictResponsibleList_view/DistrictResponsibleList_view.aod b/neonView/DistrictResponsibleList_view/DistrictResponsibleList_view.aod
index cab52b315c31f6310d25a10e0194a3df1d0f478b..fc2f1135c999d224c788a81c63c2c75a68554030 100644
--- a/neonView/DistrictResponsibleList_view/DistrictResponsibleList_view.aod
+++ b/neonView/DistrictResponsibleList_view/DistrictResponsibleList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DistrictResponsibleList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DistrictResponsibleMultiEdit_view/DistrictResponsibleMultiEdit_view.aod b/neonView/DistrictResponsibleMultiEdit_view/DistrictResponsibleMultiEdit_view.aod
index 9e04ed897b7285c86d4739354d426155106d40dc..a6f18a1dfd082e7a2fd60a501b1f7bbb6b03f582 100644
--- a/neonView/DistrictResponsibleMultiEdit_view/DistrictResponsibleMultiEdit_view.aod
+++ b/neonView/DistrictResponsibleMultiEdit_view/DistrictResponsibleMultiEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DistrictResponsibleMultiEdit_view</name>
   <title></title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/DistrictResponsiblePreviewList_view/DistrictResponsiblePreviewList_view.aod b/neonView/DistrictResponsiblePreviewList_view/DistrictResponsiblePreviewList_view.aod
index c1deba893d69a31f4656fc0959d7510422c5171a..d7166fc927682f5413acbf372e987ff311f79eb8 100644
--- a/neonView/DistrictResponsiblePreviewList_view/DistrictResponsiblePreviewList_view.aod
+++ b/neonView/DistrictResponsiblePreviewList_view/DistrictResponsiblePreviewList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DistrictResponsiblePreviewList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DocumentDrawer_view/DocumentDrawer_view.aod b/neonView/DocumentDrawer_view/DocumentDrawer_view.aod
index 330a76e993c45739cc8f63f3b4e3e31bb3978b10..95a6fb06859233c46fc7356e42183dbafee6984e 100644
--- a/neonView/DocumentDrawer_view/DocumentDrawer_view.aod
+++ b/neonView/DocumentDrawer_view/DocumentDrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DocumentDrawer_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DocumentEdit_view/DocumentEdit_view.aod b/neonView/DocumentEdit_view/DocumentEdit_view.aod
index 987ec495b6dacc5a0a19666e7985ebcdee26acee..b6d671776a6e9161b70bde8589354629ad3a25b7 100644
--- a/neonView/DocumentEdit_view/DocumentEdit_view.aod
+++ b/neonView/DocumentEdit_view/DocumentEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DocumentEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/DocumentFilter_view/DocumentFilter_view.aod b/neonView/DocumentFilter_view/DocumentFilter_view.aod
index 76cd35ba1dd74738a81b81d788111977d4922aea..c3418d0bcfe730773886b07b72d05300eca2aa97 100644
--- a/neonView/DocumentFilter_view/DocumentFilter_view.aod
+++ b/neonView/DocumentFilter_view/DocumentFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DocumentFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="false" />
@@ -24,6 +24,7 @@
     <tableViewTemplate>
       <name>Documents</name>
       <favoriteActionGroup1>Document_actions</favoriteActionGroup1>
+      <favoriteActionGroup2>MSTeam</favoriteActionGroup2>
       <iconField>PREVIEW_IMAGE</iconField>
       <titleField>NAME</titleField>
       <subtitleField>TYPE</subtitleField>
diff --git a/neonView/DocumentList_view/DocumentList_view.aod b/neonView/DocumentList_view/DocumentList_view.aod
index 01bb0076767b1ddfcf62e8091024e42adedc1635..b3f9d671bc13590e2845b15a3edfcaa4d409fecd 100644
--- a/neonView/DocumentList_view/DocumentList_view.aod
+++ b/neonView/DocumentList_view/DocumentList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DocumentList_view</name>
   <title>Errorlogs</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/DocumentMultipleEdit_view/DocumentMultipleEdit_view.aod b/neonView/DocumentMultipleEdit_view/DocumentMultipleEdit_view.aod
index f7e201e275a6c8f3fbbad0a3506a24138646e58e..150915177eceace53489926f2a4ad6a6c58ba299 100644
--- a/neonView/DocumentMultipleEdit_view/DocumentMultipleEdit_view.aod
+++ b/neonView/DocumentMultipleEdit_view/DocumentMultipleEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DocumentMultipleEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DocumentPreview_view/DocumentPreview_view.aod b/neonView/DocumentPreview_view/DocumentPreview_view.aod
index d0d0b9825940d3ed6e9b00d63e85b111e7bfd5f9..a6a451190e3680ad6565ffa69689ca30e9ba753d 100644
--- a/neonView/DocumentPreview_view/DocumentPreview_view.aod
+++ b/neonView/DocumentPreview_view/DocumentPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DocumentPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DocumentTemplateEdit_view/DocumentTemplateEdit_view.aod b/neonView/DocumentTemplateEdit_view/DocumentTemplateEdit_view.aod
index c21e2204ae06b424af7e208eca0e948088608de8..9f8b7600fd030bd7890e496b940203e0f639d361 100644
--- a/neonView/DocumentTemplateEdit_view/DocumentTemplateEdit_view.aod
+++ b/neonView/DocumentTemplateEdit_view/DocumentTemplateEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DocumentTemplateEdit_view</name>
   <title>Document Template</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/DocumentTemplateFilterSmall_view/DocumentTemplateFilterSmall_view.aod b/neonView/DocumentTemplateFilterSmall_view/DocumentTemplateFilterSmall_view.aod
index fae9c9be8a773334223fe011c34141db1c3700cc..c72049158c8d2071b59212eef5b1e04be27dcc24 100644
--- a/neonView/DocumentTemplateFilterSmall_view/DocumentTemplateFilterSmall_view.aod
+++ b/neonView/DocumentTemplateFilterSmall_view/DocumentTemplateFilterSmall_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DocumentTemplateFilterSmall_view</name>
   <title>Document Template</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/DocumentTemplateFilter_view/DocumentTemplateFilter_view.aod b/neonView/DocumentTemplateFilter_view/DocumentTemplateFilter_view.aod
index 7eadad0864f0131a237c2304c05dd0e4c5de519b..06232462d05b6b76da1f7c954166044b37ca3721 100644
--- a/neonView/DocumentTemplateFilter_view/DocumentTemplateFilter_view.aod
+++ b/neonView/DocumentTemplateFilter_view/DocumentTemplateFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DocumentTemplateFilter_view</name>
   <title>Document Template</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/DocumentTemplateLinkList_view/DocumentTemplateLinkList_view.aod b/neonView/DocumentTemplateLinkList_view/DocumentTemplateLinkList_view.aod
index 3358d6c6e41e5473359d11b5a6088ef684e73862..7838782e1468d30388241c734c40c3816d369ff1 100644
--- a/neonView/DocumentTemplateLinkList_view/DocumentTemplateLinkList_view.aod
+++ b/neonView/DocumentTemplateLinkList_view/DocumentTemplateLinkList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DocumentTemplateLinkList_view</name>
   <title>Attachments</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/DocumentTemplateLinkMultiEdit_view/DocumentTemplateLinkMultiEdit_view.aod b/neonView/DocumentTemplateLinkMultiEdit_view/DocumentTemplateLinkMultiEdit_view.aod
index 58a2713ae97f46313edbf39f9f3c47c765bac855..daa83967839260c2881ab118da3b7417bf07ec8e 100644
--- a/neonView/DocumentTemplateLinkMultiEdit_view/DocumentTemplateLinkMultiEdit_view.aod
+++ b/neonView/DocumentTemplateLinkMultiEdit_view/DocumentTemplateLinkMultiEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DocumentTemplateLinkMultiEdit_view</name>
   <title>Attachments</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/DocumentTemplatePlaceOfUseList_view/DocumentTemplatePlaceOfUseList_view.aod b/neonView/DocumentTemplatePlaceOfUseList_view/DocumentTemplatePlaceOfUseList_view.aod
index 1ed442ea7033795d86100aecf6ee2be72dc91e4c..0dd0dd675f19953d60002fdd086a84da0ebe6cac 100644
--- a/neonView/DocumentTemplatePlaceOfUseList_view/DocumentTemplatePlaceOfUseList_view.aod
+++ b/neonView/DocumentTemplatePlaceOfUseList_view/DocumentTemplatePlaceOfUseList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DocumentTemplatePlaceOfUseList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DocumentTemplatePlaceOfUseMultiEdit_view/DocumentTemplatePlaceOfUseMultiEdit_view.aod b/neonView/DocumentTemplatePlaceOfUseMultiEdit_view/DocumentTemplatePlaceOfUseMultiEdit_view.aod
index 63f2c9dd13712b349690318fe2b5d8dde8dae0db..9e422e2b62ee00cc4b0b04df0df5c3a1200926d9 100644
--- a/neonView/DocumentTemplatePlaceOfUseMultiEdit_view/DocumentTemplatePlaceOfUseMultiEdit_view.aod
+++ b/neonView/DocumentTemplatePlaceOfUseMultiEdit_view/DocumentTemplatePlaceOfUseMultiEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DocumentTemplatePlaceOfUseMultiEdit_view</name>
   <title>Documenttemplate Place Of Use</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/DocumentTemplatePlaceOfUseTitledList_view/DocumentTemplatePlaceOfUseTitledList_view.aod b/neonView/DocumentTemplatePlaceOfUseTitledList_view/DocumentTemplatePlaceOfUseTitledList_view.aod
index c625c14dd3cf49d68af90686c21d80f9cd1849c6..bf02efdec2454e084c6b072d8810cdf326f9e74f 100644
--- a/neonView/DocumentTemplatePlaceOfUseTitledList_view/DocumentTemplatePlaceOfUseTitledList_view.aod
+++ b/neonView/DocumentTemplatePlaceOfUseTitledList_view/DocumentTemplatePlaceOfUseTitledList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DocumentTemplatePlaceOfUseTitledList_view</name>
   <title>Documenttemplate Place Of Use</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/DocumentTemplatePreview_view/DocumentTemplatePreview_view.aod b/neonView/DocumentTemplatePreview_view/DocumentTemplatePreview_view.aod
index 5c4100bd63747c9cbadff7297a9429ef795eb354..7ce305ce1818da026a0bbce34ee9085e4b1edb02 100644
--- a/neonView/DocumentTemplatePreview_view/DocumentTemplatePreview_view.aod
+++ b/neonView/DocumentTemplatePreview_view/DocumentTemplatePreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DocumentTemplatePreview_view</name>
   <title>Document Template</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/DocumentTemplateTypeCategoryFilter_view/DocumentTemplateTypeCategoryFilter_view.aod b/neonView/DocumentTemplateTypeCategoryFilter_view/DocumentTemplateTypeCategoryFilter_view.aod
index 8cd2d326b934eeaef7f180c4ea90f8daff30d3ff..8412c83ab2b78866d4bc6689be057e27f67fdaa7 100644
--- a/neonView/DocumentTemplateTypeCategoryFilter_view/DocumentTemplateTypeCategoryFilter_view.aod
+++ b/neonView/DocumentTemplateTypeCategoryFilter_view/DocumentTemplateTypeCategoryFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DocumentTemplateTypeCategoryFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DocumentWithIdFilter_view/DocumentWithIdFilter_view.aod b/neonView/DocumentWithIdFilter_view/DocumentWithIdFilter_view.aod
index 3cafd27757d6dac8dd51c5ceb17fc1219e7bc3a0..8021657957e712f16dedf8d093e6ef858d64a8aa 100644
--- a/neonView/DocumentWithIdFilter_view/DocumentWithIdFilter_view.aod
+++ b/neonView/DocumentWithIdFilter_view/DocumentWithIdFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DocumentWithIdFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DuplicateScannerEdit_view/DuplicateScannerEdit_view.aod b/neonView/DuplicateScannerEdit_view/DuplicateScannerEdit_view.aod
index 684c65d5dc6ece746f72a21d0c72a255d3a84a08..a47a045257ebee14b3c49d5eaf809500a0906bd4 100644
--- a/neonView/DuplicateScannerEdit_view/DuplicateScannerEdit_view.aod
+++ b/neonView/DuplicateScannerEdit_view/DuplicateScannerEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DuplicateScannerEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DuplicateScannerFilter_view/DuplicateScannerFilter_view.aod b/neonView/DuplicateScannerFilter_view/DuplicateScannerFilter_view.aod
index e70f21cbb44614edea2bbb1dec7a060ff47f0450..922b7beb129d83791c4e1985161128cf899df1bd 100644
--- a/neonView/DuplicateScannerFilter_view/DuplicateScannerFilter_view.aod
+++ b/neonView/DuplicateScannerFilter_view/DuplicateScannerFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DuplicateScannerFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DuplicateScannerPreview_view/DuplicateScannerPreview_view.aod b/neonView/DuplicateScannerPreview_view/DuplicateScannerPreview_view.aod
index a14a89ccf1bc4bf3f0e094c557b068445931d87b..e1d655cdbf312b757cef568457cc8bc785cb7d87 100644
--- a/neonView/DuplicateScannerPreview_view/DuplicateScannerPreview_view.aod
+++ b/neonView/DuplicateScannerPreview_view/DuplicateScannerPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DuplicateScannerPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DuplicateScannerResultFieldConfigEdit_view/DuplicateScannerResultFieldConfigEdit_view.aod b/neonView/DuplicateScannerResultFieldConfigEdit_view/DuplicateScannerResultFieldConfigEdit_view.aod
index 576c3d38332567589e6d9bd6c4084ba8114e8ee6..1689d8f9fc314b41ce48850a859bf6de2f482bf0 100644
--- a/neonView/DuplicateScannerResultFieldConfigEdit_view/DuplicateScannerResultFieldConfigEdit_view.aod
+++ b/neonView/DuplicateScannerResultFieldConfigEdit_view/DuplicateScannerResultFieldConfigEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DuplicateScannerResultFieldConfigEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DuplicatesOverview_view/DuplicatesOverview_view.aod b/neonView/DuplicatesOverview_view/DuplicatesOverview_view.aod
index c019d199c2141122933552eb068b217994355a2a..0f2a6ce1c5fd46294fb6c4a17e6ea7fff6c74904 100644
--- a/neonView/DuplicatesOverview_view/DuplicatesOverview_view.aod
+++ b/neonView/DuplicatesOverview_view/DuplicatesOverview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DuplicatesOverview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DuplicatesUnrelatedCluster_view/DuplicatesUnrelatedCluster_view.aod b/neonView/DuplicatesUnrelatedCluster_view/DuplicatesUnrelatedCluster_view.aod
index f0ead2ebdc80aecda0abac4c7c0b92f49fcee8f3..fd2c40f8a36476ae6f4c574930fbe84cb1b556ac 100644
--- a/neonView/DuplicatesUnrelatedCluster_view/DuplicatesUnrelatedCluster_view.aod
+++ b/neonView/DuplicatesUnrelatedCluster_view/DuplicatesUnrelatedCluster_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DuplicatesUnrelatedCluster_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DuplicatesUnrelatedOrganisationFilter_view/DuplicatesUnrelatedOrganisationFilter_view.aod b/neonView/DuplicatesUnrelatedOrganisationFilter_view/DuplicatesUnrelatedOrganisationFilter_view.aod
index 9a595daa534c8876f4c20b7b578bc0a1d3d4c61f..d7fafa1ae896abd3eea28a53fa9fcbb8b7058c87 100644
--- a/neonView/DuplicatesUnrelatedOrganisationFilter_view/DuplicatesUnrelatedOrganisationFilter_view.aod
+++ b/neonView/DuplicatesUnrelatedOrganisationFilter_view/DuplicatesUnrelatedOrganisationFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DuplicatesUnrelatedOrganisationFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/DuplicatesUnrelatedPersonFilter_view/DuplicatesUnrelatedPersonFilter_view.aod b/neonView/DuplicatesUnrelatedPersonFilter_view/DuplicatesUnrelatedPersonFilter_view.aod
index 4ba98a70931bba60aeab6a46a6c5c2e9ae2be801..3e9a45ecbbbfff22110b739d518816b835bbf750 100644
--- a/neonView/DuplicatesUnrelatedPersonFilter_view/DuplicatesUnrelatedPersonFilter_view.aod
+++ b/neonView/DuplicatesUnrelatedPersonFilter_view/DuplicatesUnrelatedPersonFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>DuplicatesUnrelatedPersonFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/EmailEdit_view/EmailEdit_view.aod b/neonView/EmailEdit_view/EmailEdit_view.aod
index 0606c5788a5daf17f8e709d6cf7311fc0628a307..4d54a0c3938ec04693ac0a9284652d198448e9fa 100644
--- a/neonView/EmailEdit_view/EmailEdit_view.aod
+++ b/neonView/EmailEdit_view/EmailEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>EmailEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/EmployeeEdit_view/EmployeeEdit_view.aod b/neonView/EmployeeEdit_view/EmployeeEdit_view.aod
index 8ddd860527f7492638d46cd5d4144cec197630ea..1042e95db5c0ac321b4814de446693dab8d33432 100644
--- a/neonView/EmployeeEdit_view/EmployeeEdit_view.aod
+++ b/neonView/EmployeeEdit_view/EmployeeEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>EmployeeEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/EmployeeFilter_view/EmployeeFilter_view.aod b/neonView/EmployeeFilter_view/EmployeeFilter_view.aod
index 7cb12f6d37d22a149b3a90ccb9c7ea1aceea89ba..e26d5d132deb990922398f0ffa3a499a089eceee 100644
--- a/neonView/EmployeeFilter_view/EmployeeFilter_view.aod
+++ b/neonView/EmployeeFilter_view/EmployeeFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>EmployeeFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/EmployeeLookup_view/EmployeeLookup_view.aod b/neonView/EmployeeLookup_view/EmployeeLookup_view.aod
index a213204aaa00a839ea88781d343c6b88b01d0cb8..3e33d83a90b9259be4fc451c19e6c69dcd3efd57 100644
--- a/neonView/EmployeeLookup_view/EmployeeLookup_view.aod
+++ b/neonView/EmployeeLookup_view/EmployeeLookup_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>EmployeeLookup_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/EmployeeMain_view/EmployeeMain_view.aod b/neonView/EmployeeMain_view/EmployeeMain_view.aod
index 94d73c9fd2ed4bcec0c7792bdfd856e732d35ea0..b997a79e7c272d496acecb6938631a1dcf7f1730 100644
--- a/neonView/EmployeeMain_view/EmployeeMain_view.aod
+++ b/neonView/EmployeeMain_view/EmployeeMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>EmployeeMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/EmployeePassword_view/EmployeePassword_view.aod b/neonView/EmployeePassword_view/EmployeePassword_view.aod
index 9309f0b748f33a80f026f36212d45d6dfadcb3fe..24cd4cab6c10517554778da33328f4ebb2739b61 100644
--- a/neonView/EmployeePassword_view/EmployeePassword_view.aod
+++ b/neonView/EmployeePassword_view/EmployeePassword_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>EmployeePassword_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/EmployeePermission_view/EmployeePermission_view.aod b/neonView/EmployeePermission_view/EmployeePermission_view.aod
index 6bfd87a53c7531a89f16009ef3b4696142301ae8..a25dbbf2be76a77e69f44f9720661d770b59d5ac 100644
--- a/neonView/EmployeePermission_view/EmployeePermission_view.aod
+++ b/neonView/EmployeePermission_view/EmployeePermission_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>EmployeePermission_view</name>
   <title>Permission</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/EmployeePreview_view/EmployeePreview_view.aod b/neonView/EmployeePreview_view/EmployeePreview_view.aod
index 576e510759eb4062d5692c752cee3607986eed20..0e0ae8dfbaa7b4fcbc716433003a6a83fc324b99 100644
--- a/neonView/EmployeePreview_view/EmployeePreview_view.aod
+++ b/neonView/EmployeePreview_view/EmployeePreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>EmployeePreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/EmployeeRoleEdit_view/EmployeeRoleEdit_view.aod b/neonView/EmployeeRoleEdit_view/EmployeeRoleEdit_view.aod
index a7b67bdd57e314e3bf08e166dab14883974cb666..f50141d69c271df57f36c9bb15e6dd8a2ae94f52 100644
--- a/neonView/EmployeeRoleEdit_view/EmployeeRoleEdit_view.aod
+++ b/neonView/EmployeeRoleEdit_view/EmployeeRoleEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>EmployeeRoleEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/EmployeeRoleFilter_view/EmployeeRoleFilter_view.aod b/neonView/EmployeeRoleFilter_view/EmployeeRoleFilter_view.aod
index 92618fbb9cb53540380f007f2f59a5cc92903a57..9fdfc39524c508bd19aaf0bba2b6df0d580f1e3e 100644
--- a/neonView/EmployeeRoleFilter_view/EmployeeRoleFilter_view.aod
+++ b/neonView/EmployeeRoleFilter_view/EmployeeRoleFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>EmployeeRoleFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/EmployeeRoleGenericEdit_view/EmployeeRoleGenericEdit_view.aod b/neonView/EmployeeRoleGenericEdit_view/EmployeeRoleGenericEdit_view.aod
index 28e2345dee0299e75b7ad8b9a69c7625554c7edb..675bac8f95f58995035bfa418955980782a3bd0a 100644
--- a/neonView/EmployeeRoleGenericEdit_view/EmployeeRoleGenericEdit_view.aod
+++ b/neonView/EmployeeRoleGenericEdit_view/EmployeeRoleGenericEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>EmployeeRoleGenericEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/EmployeeTokenEdit_view/EmployeeTokenEdit_view.aod b/neonView/EmployeeTokenEdit_view/EmployeeTokenEdit_view.aod
index 9a0bad8cead47190e646443b59d950cd3120f835..284bcdb7387a72e86f487d020615aa096d9e9f10 100644
--- a/neonView/EmployeeTokenEdit_view/EmployeeTokenEdit_view.aod
+++ b/neonView/EmployeeTokenEdit_view/EmployeeTokenEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>EmployeeTokenEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/EmployeeTokenFilter_view/EmployeeTokenFilter_view.aod b/neonView/EmployeeTokenFilter_view/EmployeeTokenFilter_view.aod
index 852a0eed7cce66f29cb3aeebab709d526a7898a7..166cc2ab1e6cb8dc75097a5f131d48efab6192f2 100644
--- a/neonView/EmployeeTokenFilter_view/EmployeeTokenFilter_view.aod
+++ b/neonView/EmployeeTokenFilter_view/EmployeeTokenFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>EmployeeTokenFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/ExportTemplateEdit_view/ExportTemplateEdit_view.aod b/neonView/ExportTemplateEdit_view/ExportTemplateEdit_view.aod
index eae6477e9a3e0d2881e9df8426ca6740508534af..1738cd09ed80663b5c93d9ca074a058ece9456fa 100644
--- a/neonView/ExportTemplateEdit_view/ExportTemplateEdit_view.aod
+++ b/neonView/ExportTemplateEdit_view/ExportTemplateEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ExportTemplateEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ExportTemplateFieldList_view/ExportTemplateFieldList_view.aod b/neonView/ExportTemplateFieldList_view/ExportTemplateFieldList_view.aod
index c76b3911ada32f3151a5bbe762c0f71609619c60..fe3355e3394b2e52c75d930924cd72997a59cdfc 100644
--- a/neonView/ExportTemplateFieldList_view/ExportTemplateFieldList_view.aod
+++ b/neonView/ExportTemplateFieldList_view/ExportTemplateFieldList_view.aod
@@ -1,13 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ExportTemplateFieldList_view</name>
   <title>Field and Position</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="false" />
   <layout>
-    <boxLayout>
+    <noneLayout>
       <name>layout</name>
-    </boxLayout>
+    </noneLayout>
   </layout>
   <children>
     <titledListViewTemplate>
diff --git a/neonView/ExportTemplateFieldMultiEdit_view/ExportTemplateFieldMultiEdit_view.aod b/neonView/ExportTemplateFieldMultiEdit_view/ExportTemplateFieldMultiEdit_view.aod
index 32fe782b9baef53197521cc23aa5602e4f0460db..985ff2fd25859f802c8c90da0a0a96dfe24045f1 100644
--- a/neonView/ExportTemplateFieldMultiEdit_view/ExportTemplateFieldMultiEdit_view.aod
+++ b/neonView/ExportTemplateFieldMultiEdit_view/ExportTemplateFieldMultiEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ExportTemplateFieldMultiEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ExportTemplateFilter_view/ExportTemplateFilter_view.aod b/neonView/ExportTemplateFilter_view/ExportTemplateFilter_view.aod
index 8291821119db91fcd12efa43e385320d1f3f7cc1..71913d29b932f2eab5d76675f19e212225deec36 100644
--- a/neonView/ExportTemplateFilter_view/ExportTemplateFilter_view.aod
+++ b/neonView/ExportTemplateFilter_view/ExportTemplateFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ExportTemplateFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/ExportTemplatePlaceOfUseList_view/ExportTemplatePlaceOfUseList_view.aod b/neonView/ExportTemplatePlaceOfUseList_view/ExportTemplatePlaceOfUseList_view.aod
index 45306dbb7234ea9b481ded9d1608679fed3d7cac..71cfd8f47117bbf3c98617d26f0f179a2a566a48 100644
--- a/neonView/ExportTemplatePlaceOfUseList_view/ExportTemplatePlaceOfUseList_view.aod
+++ b/neonView/ExportTemplatePlaceOfUseList_view/ExportTemplatePlaceOfUseList_view.aod
@@ -1,16 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ExportTemplatePlaceOfUseList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
-    <boxLayout>
+    <noneLayout>
       <name>layout</name>
-    </boxLayout>
+    </noneLayout>
   </layout>
   <children>
     <titledListViewTemplate>
       <name>titledList</name>
       <titleField>PLACEOFUSE</titleField>
+      <titleFieldFullWidth v="true" />
       <entityField>#ENTITY</entityField>
     </titledListViewTemplate>
   </children>
diff --git a/neonView/ExportTemplatePlaceOfUseMultiEdit_view/ExportTemplatePlaceOfUseMultiEdit_view.aod b/neonView/ExportTemplatePlaceOfUseMultiEdit_view/ExportTemplatePlaceOfUseMultiEdit_view.aod
index 3bb9efc85f45fd404c7e51c946b5fd4516a9e292..23b08531c9141f6002b38c5a019efacecb008792 100644
--- a/neonView/ExportTemplatePlaceOfUseMultiEdit_view/ExportTemplatePlaceOfUseMultiEdit_view.aod
+++ b/neonView/ExportTemplatePlaceOfUseMultiEdit_view/ExportTemplatePlaceOfUseMultiEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ExportTemplatePlaceOfUseMultiEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ExportTemplatePreview_view/ExportTemplatePreview_view.aod b/neonView/ExportTemplatePreview_view/ExportTemplatePreview_view.aod
index 06bcfe9edfd98a79a7c86135b7977b02f32da4d3..79cb37d665fd21b99c77dbc73d26d6d466e6eee4 100644
--- a/neonView/ExportTemplatePreview_view/ExportTemplatePreview_view.aod
+++ b/neonView/ExportTemplatePreview_view/ExportTemplatePreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ExportTemplatePreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
@@ -24,6 +24,8 @@
     </favoriteViewTemplate>
     <genericViewTemplate>
       <name>generic</name>
+      <showDrawer v="true" />
+      <drawerCaption>Details</drawerCaption>
       <entityField>#ENTITY</entityField>
       <fields>
         <entityFieldLink>
diff --git a/neonView/ExportTemplateSelectionEdit_view/ExportTemplateSelectionEdit_view.aod b/neonView/ExportTemplateSelectionEdit_view/ExportTemplateSelectionEdit_view.aod
index 3886dffb7b0ba7f28718efe0bd922ab036e71352..439c760013d28b5266efd85987147ec4b5917f32 100644
--- a/neonView/ExportTemplateSelectionEdit_view/ExportTemplateSelectionEdit_view.aod
+++ b/neonView/ExportTemplateSelectionEdit_view/ExportTemplateSelectionEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ExportTemplateSelectionEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/FacebookTimeline_view/FacebookTimeline_view.aod b/neonView/FacebookTimeline_view/FacebookTimeline_view.aod
index c9270765ff02fd1ea409d4cdc47c43162cd7169d..63c8a443c7d9df1867467e8f6096974016f8d624 100644
--- a/neonView/FacebookTimeline_view/FacebookTimeline_view.aod
+++ b/neonView/FacebookTimeline_view/FacebookTimeline_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>FacebookTimeline_view</name>
   <title>Facebook</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/FavoriteFilter_view/FavoriteFilter_view.aod b/neonView/FavoriteFilter_view/FavoriteFilter_view.aod
index 61070f4ce2ce005795b193ab22e3432174b1d8db..9e9c42e217c913758cc81b9467a8f1bc32187497 100644
--- a/neonView/FavoriteFilter_view/FavoriteFilter_view.aod
+++ b/neonView/FavoriteFilter_view/FavoriteFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>FavoriteFilter_view</name>
   <title>FavoriteFilter_view</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/FavoritePreview_view/FavoritePreview_view.aod b/neonView/FavoritePreview_view/FavoritePreview_view.aod
index 25f98d8ef427973cf9b81bb09087a39d1da92522..c022ed08740c37e07db57fe0dc74d7f3c80c0c1e 100644
--- a/neonView/FavoritePreview_view/FavoritePreview_view.aod
+++ b/neonView/FavoritePreview_view/FavoritePreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>FavoritePreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ForecastDrawer_view/ForecastDrawer_view.aod b/neonView/ForecastDrawer_view/ForecastDrawer_view.aod
index ef5388b84258b92686f7fddba1707facd1c94af6..552f0439fb70b646d8b67b4735de20d383ff46bd 100644
--- a/neonView/ForecastDrawer_view/ForecastDrawer_view.aod
+++ b/neonView/ForecastDrawer_view/ForecastDrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ForecastDrawer_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ForecastEdit_view/ForecastEdit_view.aod b/neonView/ForecastEdit_view/ForecastEdit_view.aod
index 28debe56d0facef0164efd638b4d84b4c099a437..9934ef36ef5f52a8512cf278151602d2ab4bdf60 100644
--- a/neonView/ForecastEdit_view/ForecastEdit_view.aod
+++ b/neonView/ForecastEdit_view/ForecastEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ForecastEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/ForecastFilter_view/ForecastFilter_view.aod b/neonView/ForecastFilter_view/ForecastFilter_view.aod
index ffa08904f6bad6d9c86b4f0b7c64718d0bae3851..b048b1260ed99e1cb67af7886a751e95a29ed936 100644
--- a/neonView/ForecastFilter_view/ForecastFilter_view.aod
+++ b/neonView/ForecastFilter_view/ForecastFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ForecastFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/ForecastPreview_view/ForecastPreview_view.aod b/neonView/ForecastPreview_view/ForecastPreview_view.aod
index f13e83a74c95a132bdef8323d23003ff102363f4..229641c2b8319890b54282f40cabf49644687cc8 100644
--- a/neonView/ForecastPreview_view/ForecastPreview_view.aod
+++ b/neonView/ForecastPreview_view/ForecastPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ForecastPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ImportFieldEdit_view/ImportFieldEdit_view.aod b/neonView/ImportFieldEdit_view/ImportFieldEdit_view.aod
index 4bcc0eda9db13670681a509f2a80c3314cf743b9..fcf56cc9a05ed9c6cc4c5d5145a7d0b3bd430c41 100644
--- a/neonView/ImportFieldEdit_view/ImportFieldEdit_view.aod
+++ b/neonView/ImportFieldEdit_view/ImportFieldEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ImportFieldEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/ImportFieldFilterMapping_view/ImportFieldFilterMapping_view.aod b/neonView/ImportFieldFilterMapping_view/ImportFieldFilterMapping_view.aod
index 29a4e8be88bff2ea8e3aa2288698aa80d504f755..b9d17d1d3cd003da3f1995392aa089745358cd46 100644
--- a/neonView/ImportFieldFilterMapping_view/ImportFieldFilterMapping_view.aod
+++ b/neonView/ImportFieldFilterMapping_view/ImportFieldFilterMapping_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ImportFieldFilterMapping_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ImportFieldFilter_view/ImportFieldFilter_view.aod b/neonView/ImportFieldFilter_view/ImportFieldFilter_view.aod
index ee18157579207f465825d5d80ba93a4958f77494..2528d1aea75e41755dcfa4e7f0e96edee41a0685 100644
--- a/neonView/ImportFieldFilter_view/ImportFieldFilter_view.aod
+++ b/neonView/ImportFieldFilter_view/ImportFieldFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ImportFieldFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/IndexSearchView/IndexSearchView.aod b/neonView/IndexSearchView/IndexSearchView.aod
index c1a8c71fd037cd07a80b1aea8be782bbf7f2a17a..e1b5c1f412830766e168675952817d5f9cf0c6fd 100644
--- a/neonView/IndexSearchView/IndexSearchView.aod
+++ b/neonView/IndexSearchView/IndexSearchView.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>IndexSearchView</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <dashletConfigurations>
diff --git a/neonView/KeywordAttributeEdit_view/KeywordAttributeEdit_view.aod b/neonView/KeywordAttributeEdit_view/KeywordAttributeEdit_view.aod
index 1e906c4ad4030738fcf891530a0ac48e06760f73..f273fb416fe5206b652bfdfd90276a5a87b42689 100644
--- a/neonView/KeywordAttributeEdit_view/KeywordAttributeEdit_view.aod
+++ b/neonView/KeywordAttributeEdit_view/KeywordAttributeEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>KeywordAttributeEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/KeywordAttributeFilter_view/KeywordAttributeFilter_view.aod b/neonView/KeywordAttributeFilter_view/KeywordAttributeFilter_view.aod
index 9072b6df51f606f4caae6ec016e30d5ad94ab6be..fdbdca90e0e0d5db3929d7a244eb036b4cfc8435 100644
--- a/neonView/KeywordAttributeFilter_view/KeywordAttributeFilter_view.aod
+++ b/neonView/KeywordAttributeFilter_view/KeywordAttributeFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>KeywordAttributeFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/KeywordAttributeRelationRows_view/KeywordAttributeRelationRows_view.aod b/neonView/KeywordAttributeRelationRows_view/KeywordAttributeRelationRows_view.aod
index 3c349095ff8191de19bfb4e469b95a4815efff2f..b6ce5f6117a861aa955edc8c917857ad6994661a 100644
--- a/neonView/KeywordAttributeRelationRows_view/KeywordAttributeRelationRows_view.aod
+++ b/neonView/KeywordAttributeRelationRows_view/KeywordAttributeRelationRows_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>KeywordAttributeRelationRows_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="false" />
diff --git a/neonView/KeywordAttriubteRelationTitled_view/KeywordAttriubteRelationTitled_view.aod b/neonView/KeywordAttriubteRelationTitled_view/KeywordAttriubteRelationTitled_view.aod
index 35a025815b8d51cd1b65304a528de14ec8f5e51d..7d6ae096e0e1cf2ef9693ff3983cde057471b068 100644
--- a/neonView/KeywordAttriubteRelationTitled_view/KeywordAttriubteRelationTitled_view.aod
+++ b/neonView/KeywordAttriubteRelationTitled_view/KeywordAttriubteRelationTitled_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>KeywordAttriubteRelationTitled_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/KeywordEntryEdit_view/KeywordEntryEdit_view.aod b/neonView/KeywordEntryEdit_view/KeywordEntryEdit_view.aod
index d759384a7067f6e2324dd206641fda2bf2ace168..d272c79418943825c6b5dab7eab3821960cf3957 100644
--- a/neonView/KeywordEntryEdit_view/KeywordEntryEdit_view.aod
+++ b/neonView/KeywordEntryEdit_view/KeywordEntryEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>KeywordEntryEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod b/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod
index 874bbf3c62f6c5150f3e208f50c825539a94715a..8f78ef984bbdc413eaaabec6059d2888654ed04e 100644
--- a/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod
+++ b/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>KeywordEntryFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/KeywordEntryPreview_view/KeywordEntryPreview_view.aod b/neonView/KeywordEntryPreview_view/KeywordEntryPreview_view.aod
index 75d472d2485aee715ee438b4a1df85e96cc5ced4..e73858d8214b91d818d2db42bb5a5d62fc2035dd 100644
--- a/neonView/KeywordEntryPreview_view/KeywordEntryPreview_view.aod
+++ b/neonView/KeywordEntryPreview_view/KeywordEntryPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>KeywordEntryPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/KnowledgeDiscussionEdit_view/KnowledgeDiscussionEdit_view.aod b/neonView/KnowledgeDiscussionEdit_view/KnowledgeDiscussionEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..9e22618d2ed86833d4fde2df6c28d39c0ce27934
--- /dev/null
+++ b/neonView/KnowledgeDiscussionEdit_view/KnowledgeDiscussionEdit_view.aod
@@ -0,0 +1,27 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeDiscussionEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <editMode v="true" />
+      <drawerCaption>Discussion</drawerCaption>
+      <fixedDrawer v="true" />
+      <hideLabels v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>c87217ce-184e-4436-9b58-0d20b218c864</name>
+          <entityField>DISCUSSIONTEXT</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/KnowledgeDiscussionPreview_view/KnowledgeDiscussionPreview_view.aod b/neonView/KnowledgeDiscussionPreview_view/KnowledgeDiscussionPreview_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..a63d8a4035d9ff408c139a82080490701cb732a5
--- /dev/null
+++ b/neonView/KnowledgeDiscussionPreview_view/KnowledgeDiscussionPreview_view.aod
@@ -0,0 +1,37 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeDiscussionPreview_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Text</name>
+      <editMode v="false" />
+      <drawerCaption>Discussion</drawerCaption>
+      <fixedDrawer v="true" />
+      <hideLabels v="true" />
+      <entityField>#ENTITY</entityField>
+      <title>Discussion</title>
+      <devices>
+        <element>MOBILE</element>
+        <element>TABLET</element>
+        <element>DESKTOP</element>
+      </devices>
+      <fields>
+        <entityFieldLink>
+          <name>672eae9f-abfb-4256-879b-6ceb945bff4d</name>
+          <entityField>discussionTitle</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>c0ff5819-7bb6-4e7b-b051-bb4d74fe10c1</name>
+          <entityField>DISCUSSIONTEXT</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/KnowledgeDiscussionTree_view/KnowledgeDiscussionTree_view.aod b/neonView/KnowledgeDiscussionTree_view/KnowledgeDiscussionTree_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..4a2b372258ad84e1f3092e0ca087b7816fb52a30
--- /dev/null
+++ b/neonView/KnowledgeDiscussionTree_view/KnowledgeDiscussionTree_view.aod
@@ -0,0 +1,34 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeDiscussionTree_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <treeTableViewTemplate>
+      <name>Treetable</name>
+      <parentField>PARENTENTRY</parentField>
+      <favoriteActionGroup1>Edit_ActionGroup</favoriteActionGroup1>
+      <entityField>#ENTITY</entityField>
+      <title>Discussions</title>
+      <columns>
+        <neonTreeTableColumn>
+          <name>0462213d-ce08-44e8-9a78-8fd761ca13ce</name>
+          <entityField>#ICON</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>be38dc3a-7295-407b-afa3-a409348985c8</name>
+          <entityField>DISCUSSIONTEXT</entityField>
+        </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>924ee584-22b6-4fa8-9b7d-a22b45e05c10</name>
+          <entityField>discussionTitle</entityField>
+        </neonTreeTableColumn>
+      </columns>
+    </treeTableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/AnyObjectRelationTree_view0/AnyObjectRelationTree_view0.aod b/neonView/KnowledgeLinkActionList_view/KnowledgeLinkActionList_view.aod
similarity index 52%
rename from neonView/AnyObjectRelationTree_view0/AnyObjectRelationTree_view0.aod
rename to neonView/KnowledgeLinkActionList_view/KnowledgeLinkActionList_view.aod
index 83a01661633e785d759e782e99804b36ca9f26c1..a54f0dfcf89c265ca7b58ecec40bb77fd73ad3d2 100644
--- a/neonView/AnyObjectRelationTree_view0/AnyObjectRelationTree_view0.aod
+++ b/neonView/KnowledgeLinkActionList_view/KnowledgeLinkActionList_view.aod
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
-  <name>AnyObjectRelationTree_view0</name>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeLinkActionList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
     <boxLayout>
@@ -8,12 +8,12 @@
     </boxLayout>
   </layout>
   <children>
-    <treeViewTemplate>
-      <name>AnyObjectRelations</name>
-      <parentField>AnyObjectType</parentField>
-      <titleField>AnyObjectRowid</titleField>
+    <actionListViewTemplate>
+      <name>ActionList</name>
+      <titleField>ROW_ID</titleField>
+      <descriptionField>OBJECT_TYPE</descriptionField>
+      <iconField>#ICON</iconField>
       <entityField>#ENTITY</entityField>
-      <title></title>
-    </treeViewTemplate>
+    </actionListViewTemplate>
   </children>
 </neonView>
diff --git a/neonView/KnowledgeLinkEdit_view/KnowledgeLinkEdit_view.aod b/neonView/KnowledgeLinkEdit_view/KnowledgeLinkEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..7f554eb698f59c2f647bd6db202de5caf9dcafd4
--- /dev/null
+++ b/neonView/KnowledgeLinkEdit_view/KnowledgeLinkEdit_view.aod
@@ -0,0 +1,31 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeLinkEdit_view</name>
+  <title>Links</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Edit</name>
+      <editMode v="true" />
+      <drawerCaption>Link</drawerCaption>
+      <hideEmptyFields v="false" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>4dce246e-8ac8-491f-bc77-fc2d6ef9f62d</name>
+          <entityField>OBJECT_TYPE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>7fedd111-a1d3-4159-b206-11d11d80c769</name>
+          <entityField>ROW_ID</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/KnowledgeLinkLookup_view/KnowledgeLinkLookup_view.aod b/neonView/KnowledgeLinkLookup_view/KnowledgeLinkLookup_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..2750e5349551a00f08938f96b2f01dd6afde5ae4
--- /dev/null
+++ b/neonView/KnowledgeLinkLookup_view/KnowledgeLinkLookup_view.aod
@@ -0,0 +1,27 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeLinkLookup_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>TableLooukup</name>
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTableColumn>
+          <name>5e32fe5d-6932-4c68-b5fd-2c995ba8fbd2</name>
+          <entityField>OBJECT_TYPE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>a180c48b-1e09-4e84-ad4d-92aeeb4b6542</name>
+          <entityField>ROW_ID</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/KnowledgeLinkMultiEdit_view/KnowledgeLinkMultiEdit_view.aod b/neonView/KnowledgeLinkMultiEdit_view/KnowledgeLinkMultiEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..10006b4dc77078fdccc2f2ed356ea73057fe9f7a
--- /dev/null
+++ b/neonView/KnowledgeLinkMultiEdit_view/KnowledgeLinkMultiEdit_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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeLinkMultiEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+      <autoHeight v="true" />
+    </boxLayout>
+  </layout>
+  <children>
+    <genericMultipleViewTemplate>
+      <name>MultiEdit</name>
+      <entityField>#ENTITY</entityField>
+      <title>Links</title>
+      <columns>
+        <neonGenericMultipleTableColumn>
+          <name>eb1bc3cb-3cf0-479c-901f-906a7ddde485</name>
+          <entityField>OBJECT_TYPE</entityField>
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>331a348d-efdd-4a1b-a140-2c0b2adc27f0</name>
+          <entityField>ROW_ID</entityField>
+        </neonGenericMultipleTableColumn>
+      </columns>
+    </genericMultipleViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/KnowledgeManagementContent_view/KnowledgeManagementContent_view.aod b/neonView/KnowledgeManagementContent_view/KnowledgeManagementContent_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..243f07da31771f3a4bc59d55b0bd445911a56cb2
--- /dev/null
+++ b/neonView/KnowledgeManagementContent_view/KnowledgeManagementContent_view.aod
@@ -0,0 +1,17 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeManagementContent_view</name>
+  <title>Content</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <webContentViewTemplate>
+      <name>htmlContent</name>
+      <entityField>htmlView</entityField>
+    </webContentViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/KnowledgeManagementDetails_view/KnowledgeManagementDetails_view.aod b/neonView/KnowledgeManagementDetails_view/KnowledgeManagementDetails_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..0cd4bf137430b421db8c12326956979a1ae433bf
--- /dev/null
+++ b/neonView/KnowledgeManagementDetails_view/KnowledgeManagementDetails_view.aod
@@ -0,0 +1,61 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeManagementDetails_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+      <header>KnowledgeDetails</header>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <cardViewTemplate>
+      <name>KnowledgeDetails</name>
+      <iconField>#ICON</iconField>
+      <titleField>TITLE</titleField>
+      <subtitleField>LastChange</subtitleField>
+      <entityField>#ENTITY</entityField>
+      <isEditable v="false" />
+    </cardViewTemplate>
+    <favoriteViewTemplate>
+      <name>favorites</name>
+      <objectType>KNOWLEDGEMANAGEMENT_OBJECTTYPE</objectType>
+      <rowId>#UID</rowId>
+      <entityField>#ENTITY</entityField>
+      <title>Favorites</title>
+    </favoriteViewTemplate>
+    <genericViewTemplate>
+      <name>Details</name>
+      <showDrawer v="true" />
+      <drawerCaption>Details</drawerCaption>
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>2ed87edf-4aed-42cd-9ebe-f206810c86a7</name>
+          <entityField>AUTHOR_CONTACT_ID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>e9d5fe54-9261-4ca4-9c20-c839c8d26395</name>
+          <entityField>RESPONSIBLE_CONTACT_ID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>1248f0fc-e370-42e5-8d64-6d89da366580</name>
+          <entityField>DATE_NEW</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>59c020ac-3b20-45b4-83ce-d0e7bb9372ad</name>
+          <entityField>DATE_EDIT</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>6252c147-e35f-4c54-8e9c-f65eee2d5283</name>
+          <entityField>PUBLISH</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>9322369a-d82b-402e-aaff-dedac00d1971</name>
+      <entityField>TagsByKnowledgeId</entityField>
+      <view>KnowledgeTagList_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/KnowledgeManagementEdit_view/KnowledgeManagementEdit_view.aod b/neonView/KnowledgeManagementEdit_view/KnowledgeManagementEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..59ba4694d9e5f78eb08a32cd8e786c84bb700f1b
--- /dev/null
+++ b/neonView/KnowledgeManagementEdit_view/KnowledgeManagementEdit_view.aod
@@ -0,0 +1,86 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeManagementEdit_view</name>
+  <title>Knowledge</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <icon>VAADIN:ACADEMY_CAP</icon>
+  <size>NORMAL</size>
+  <quickEntry v="6" />
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+      <autoHeight v="true" />
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Details</name>
+      <editMode v="true" />
+      <drawerCaption></drawerCaption>
+      <entityField>#ENTITY</entityField>
+      <title></title>
+      <devices>
+        <element>MOBILE</element>
+        <element>TABLET</element>
+        <element>DESKTOP</element>
+      </devices>
+      <fields>
+        <entityFieldLink>
+          <name>7be58130-991a-47e3-89d7-d01fc531ddd6</name>
+          <entityField>TITLE</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>59c18990-a0e2-4cbd-b728-f156a421081f</name>
+          <entityField>CONTENT</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>781765cb-93a4-431e-bc92-9bef2a17e39f</name>
+          <entityField>AUTHOR_CONTACT_ID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>776ee39f-b666-4168-a758-0c17a3ed41a5</name>
+          <entityField>RESPONSIBLE_CONTACT_ID</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>bfa39723-52e1-45e5-945c-cc1db1c81b81</name>
+          <entityField>PUBLISH</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>a62e4251-76b5-427c-b758-ae57bcdf5956</name>
+      <entityField>TagsByKnowledgeId</entityField>
+      <view>KnowledgeTagList_GenMult_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>6ac6f960-eaf3-4196-acc8-f516184215f1</name>
+      <entityField>LinksByKnowledgeId</entityField>
+      <view>KnowledgeLinkMultiEdit_view</view>
+    </neonViewReference>
+    <genericViewTemplate>
+      <name>genericc</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>a753ed28-28fa-402e-a98f-5fa0301158b2</name>
+          <entityField>isNewsMark</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>54f5adf2-800e-4dae-a4a0-7a9fb16ed083</name>
+          <entityField>notificationMark</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>2649f436-3025-4f0b-bbd4-580e5dcf2cba</name>
+      <entityField>KnowledgeRoles</entityField>
+      <view>KnowledgeRoleEdit_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>ed706714-6290-4d6b-9e59-7e8833e8936f</name>
+      <entityField>LinkedDocuments</entityField>
+      <view>DocumentMultipleEdit_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/KnowledgeManagementFilter_view/KnowledgeManagementFilter_view.aod b/neonView/KnowledgeManagementFilter_view/KnowledgeManagementFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..1a3e3cc6271239aa99187fb13a71b60c626ba071
--- /dev/null
+++ b/neonView/KnowledgeManagementFilter_view/KnowledgeManagementFilter_view.aod
@@ -0,0 +1,57 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeManagementFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <dashletConfigurations>
+    <neonDashletConfiguration>
+      <name>Knowledge</name>
+      <title>Knowledge</title>
+      <description>All Knowledge Entries</description>
+      <fragment>KnowledgeManagement/filter</fragment>
+      <icon>VAADIN:ACADEMY_CAP</icon>
+      <categories>
+        <neonDashletCategory>
+          <name>knowledge</name>
+          <title>Knowledge</title>
+        </neonDashletCategory>
+      </categories>
+    </neonDashletConfiguration>
+  </dashletConfigurations>
+  <layout>
+    <groupLayout>
+      <name>layout</name>
+    </groupLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>FilterTable</name>
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTableColumn>
+          <name>6536f7bc-b655-4011-b8ce-20b27fb0f656</name>
+          <entityField>#ICON</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>6a5fd77d-537b-4f27-a372-93838a76ff2e</name>
+          <entityField>TITLE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>69905c5d-27c4-49aa-a10c-589fee93b67b</name>
+          <entityField>AUTHOR_CONTACT_ID</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>6f9daef0-872f-486c-8d1b-19fbde27efff</name>
+          <entityField>LastChange</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+    <timelineViewTemplate>
+      <name>Timeline</name>
+      <dateField>LastChange</dateField>
+      <titleField>TITLE</titleField>
+      <descriptionField>CONTENT</descriptionField>
+      <subdescriptionField>AUTHOR_CONTACT_ID</subdescriptionField>
+    </timelineViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/KnowledgeManagementLookup_view/KnowledgeManagementLookup_view.aod b/neonView/KnowledgeManagementLookup_view/KnowledgeManagementLookup_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..5c6be963d83b75afffdc663d7598c8b19babb87e
--- /dev/null
+++ b/neonView/KnowledgeManagementLookup_view/KnowledgeManagementLookup_view.aod
@@ -0,0 +1,30 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeManagementLookup_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>LookupTable</name>
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTableColumn>
+          <name>5a7ab4ba-48a5-47bf-95e9-5631938af5b2</name>
+          <entityField>#IMAGE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>4176e200-836f-475c-bc35-ae9c27bf1ed9</name>
+          <entityField>TITLE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>0afc1762-3889-4eb5-bef9-4c14cd648eb6</name>
+          <entityField>CONTENTDECODED</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/KnowledgeManagementMain_view/KnowledgeManagementMain_view.aod b/neonView/KnowledgeManagementMain_view/KnowledgeManagementMain_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..ce38d5f1f8603393001360efd7cb312d6c2ae900
--- /dev/null
+++ b/neonView/KnowledgeManagementMain_view/KnowledgeManagementMain_view.aod
@@ -0,0 +1,43 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeManagementMain_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <masterSlaveLayout>
+      <name>layout</name>
+      <master>88686b9f-0333-4f8b-a24d-c1018bcf394b</master>
+    </masterSlaveLayout>
+  </layout>
+  <children>
+    <neonViewReference>
+      <name>88686b9f-0333-4f8b-a24d-c1018bcf394b</name>
+      <entityField>#ENTITY</entityField>
+      <view>KnowledgeManagementDetails_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>0c32cd6f-82a6-466a-9a71-16eeeb9c6890</name>
+      <entityField>#ENTITY</entityField>
+      <view>KnowledgeManagementContent_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>79fcef8e-c0ba-4463-a239-6faf332b6bc9</name>
+      <entityField>DiscussionsByKnowledgeId</entityField>
+      <view>KnowledgeDiscussionTree_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>914652b1-891f-4d79-a9e8-766a792da539</name>
+      <entityField>LinkedDocuments</entityField>
+      <view>DocumentFilter_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>b03ac69f-ed82-4a90-87b0-89d1822c749a</name>
+      <entityField>LinksByKnowledgeId</entityField>
+      <view>KnowledgeLinkLookup_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>40b21927-4fb9-46f3-8e99-682b1a114d19</name>
+      <entityField>LogHistories</entityField>
+      <view>LogHistoryFilter_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/KnowledgeManagementPreview_view/KnowledgeManagementPreview_view.aod b/neonView/KnowledgeManagementPreview_view/KnowledgeManagementPreview_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..f7f259faa3660933793d78943ffa7e2ac9142b41
--- /dev/null
+++ b/neonView/KnowledgeManagementPreview_view/KnowledgeManagementPreview_view.aod
@@ -0,0 +1,17 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeManagementPreview_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <webContentViewTemplate>
+      <name>PreviewHTML</name>
+      <height v="6000" />
+      <entityField>htmlView</entityField>
+    </webContentViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/KnowledgeManagementRole_view/KnowledgeManagementRole_view.aod b/neonView/KnowledgeManagementRole_view/KnowledgeManagementRole_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..d4f7b37a1a2952ff8042e87966bb066201ae40e9
--- /dev/null
+++ b/neonView/KnowledgeManagementRole_view/KnowledgeManagementRole_view.aod
@@ -0,0 +1,33 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeManagementRole_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+      <autoHeight v="true" />
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Roles</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>f339bf74-1d3e-4584-8961-eebb730221dd</name>
+          <entityField>isNewsMark</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>6c6c1ee1-421c-4102-9ed4-a2770f8cc58c</name>
+          <entityField>notificationMark</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>15f19382-186c-4ca7-b3f6-e7efa11a7edb</name>
+      <entityField>KnowledgeRoles</entityField>
+      <view>KnowledgeRoleEdit_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/KnowledgeManagementTimeline_view/KnowledgeManagementTimeline_view.aod b/neonView/KnowledgeManagementTimeline_view/KnowledgeManagementTimeline_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..adf88a24fbe440fb6a89c003b1612ebd50bb5225
--- /dev/null
+++ b/neonView/KnowledgeManagementTimeline_view/KnowledgeManagementTimeline_view.aod
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeManagementTimeline_view</name>
+  <title>Newsfeed (Preview)</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <filterable v="true" />
+  <dashletConfigurations>
+    <neonDashletConfiguration>
+      <name>timelineDashletConfig</name>
+      <title>Newsfeed (Preview)</title>
+      <fragment>KnowledgeManagement/filter</fragment>
+      <icon>NEON:TIMELINE</icon>
+      <categories>
+        <neonDashletCategory>
+          <name>knowledge</name>
+          <title>Knowledge</title>
+        </neonDashletCategory>
+      </categories>
+      <parameters>
+        <neonDashletParameter>
+          <name>isDashlet_param</name>
+          <value>true</value>
+        </neonDashletParameter>
+      </parameters>
+    </neonDashletConfiguration>
+  </dashletConfigurations>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <timelineViewTemplate>
+      <name>time</name>
+      <dateField>LastChange</dateField>
+      <titleField>TITLE</titleField>
+      <descriptionField>CONTENT</descriptionField>
+      <subdescriptionField>AUTHOR_CONTACT_ID</subdescriptionField>
+      <entityField>#ENTITY</entityField>
+      <isDeletable v="false" />
+      <isEditable v="false" />
+      <title>Newsfeed Timeline</title>
+      <isCreatable v="false" />
+    </timelineViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/KnowledgeNewsFeed_view/KnowledgeNewsFeed_view.aod b/neonView/KnowledgeNewsFeed_view/KnowledgeNewsFeed_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..75fc94ad122f62b35fc670aba4699d3762a29f03
--- /dev/null
+++ b/neonView/KnowledgeNewsFeed_view/KnowledgeNewsFeed_view.aod
@@ -0,0 +1,37 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeNewsFeed_view</name>
+  <title>Newsfeed (Complete Article)</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <dashletConfigurations>
+    <neonDashletConfiguration>
+      <name>knowledgeNewsFeed_dashletConfig</name>
+      <title>Newsfeed (Full)</title>
+      <description>Shows complete news articles</description>
+      <fragment>KnowledgeNewsFeed/filter</fragment>
+      <icon>VAADIN:NEWSPAPER</icon>
+      <categories>
+        <neonDashletCategory>
+          <name>knowledge</name>
+          <title>Knowledge</title>
+        </neonDashletCategory>
+      </categories>
+    </neonDashletConfiguration>
+  </dashletConfigurations>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <webContentViewTemplate>
+      <name>WebContent</name>
+      <entityField>HTMLContent</entityField>
+      <devices>
+        <element>MOBILE</element>
+        <element>TABLET</element>
+        <element>DESKTOP</element>
+      </devices>
+    </webContentViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/KnowledgeRoleEdit_view/KnowledgeRoleEdit_view.aod b/neonView/KnowledgeRoleEdit_view/KnowledgeRoleEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..a73902b995791516df67c02df9dc437cbb7bb41d
--- /dev/null
+++ b/neonView/KnowledgeRoleEdit_view/KnowledgeRoleEdit_view.aod
@@ -0,0 +1,30 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeRoleEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+      <autoHeight v="true" />
+    </boxLayout>
+  </layout>
+  <children>
+    <genericMultipleViewTemplate>
+      <name>GenericMultiple</name>
+      <entityField>#ENTITY</entityField>
+      <title>Roles</title>
+      <columns>
+        <neonGenericMultipleTableColumn>
+          <name>8fc4c848-f071-4c9d-b764-8d03e750937a</name>
+          <entityField>ROLES</entityField>
+          <fullWidth v="true" />
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>23bbcd15-8d81-4d82-82c8-890a0091ccff</name>
+          <entityField>KNOWLEDGEMANAGMENT_ID</entityField>
+          <fullWidth v="false" />
+        </neonGenericMultipleTableColumn>
+      </columns>
+    </genericMultipleViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/KnowledgeTagList_GenMult_view/KnowledgeTagList_GenMult_view.aod b/neonView/KnowledgeTagList_GenMult_view/KnowledgeTagList_GenMult_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..da077b8269e8934bf550aa8f58d0a86fff88677e
--- /dev/null
+++ b/neonView/KnowledgeTagList_GenMult_view/KnowledgeTagList_GenMult_view.aod
@@ -0,0 +1,27 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeTagList_GenMult_view</name>
+  <title>Tags</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+      <autoHeight v="true" />
+    </boxLayout>
+  </layout>
+  <children>
+    <genericMultipleViewTemplate>
+      <name>TagList</name>
+      <entityField>#ENTITY</entityField>
+      <title>Tags</title>
+      <columns>
+        <neonGenericMultipleTableColumn>
+          <name>7a59bcdd-e807-44db-9b5e-7b389ab10db8</name>
+          <entityField>TAG</entityField>
+          <fullWidth v="true" />
+        </neonGenericMultipleTableColumn>
+      </columns>
+    </genericMultipleViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/KnowledgeTagList_view/KnowledgeTagList_view.aod b/neonView/KnowledgeTagList_view/KnowledgeTagList_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..101604a2f8fa8190a17ed99d3708afa4493756ce
--- /dev/null
+++ b/neonView/KnowledgeTagList_view/KnowledgeTagList_view.aod
@@ -0,0 +1,25 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>KnowledgeTagList_view</name>
+  <title>Tags</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <titledListViewTemplate>
+      <name>TagList</name>
+      <entityField>#ENTITY</entityField>
+      <title>Tags</title>
+      <columns>
+        <neonTitledListTableColumn>
+          <name>03ec809f-d410-4247-98a8-50022222c785</name>
+          <entityField>TAG</entityField>
+          <fullWidth v="true" />
+        </neonTitledListTableColumn>
+      </columns>
+    </titledListViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/LeadFilter_view/LeadFilter_view.aod b/neonView/LeadFilter_view/LeadFilter_view.aod
index 75dc1286e761b80a2542f345752bc68373da2343..bf7495c315c6ac60494154f069f32f8cf8040f6e 100644
--- a/neonView/LeadFilter_view/LeadFilter_view.aod
+++ b/neonView/LeadFilter_view/LeadFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LeadFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/LeadLogFilterDrawer_view/LeadLogFilterDrawer_view.aod b/neonView/LeadLogFilterDrawer_view/LeadLogFilterDrawer_view.aod
index 1463636384ef61e9a23e5af4775d6e344d902b33..db90a45194aa8fe489bf299e0eb5eda68c8b6709 100644
--- a/neonView/LeadLogFilterDrawer_view/LeadLogFilterDrawer_view.aod
+++ b/neonView/LeadLogFilterDrawer_view/LeadLogFilterDrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LeadLogFilterDrawer_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/LeadLogFilter_view/LeadLogFilter_view.aod b/neonView/LeadLogFilter_view/LeadLogFilter_view.aod
index 7faeebe7aacecb268bf2574b6a5cb577026418dc..b20013103d1378bdbe3e7b0135556c4ab2208df1 100644
--- a/neonView/LeadLogFilter_view/LeadLogFilter_view.aod
+++ b/neonView/LeadLogFilter_view/LeadLogFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LeadLogFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/LeadLogPreview_view/LeadLogPreview_view.aod b/neonView/LeadLogPreview_view/LeadLogPreview_view.aod
index 1db69ba776878b4ac1aeaeb4d18d9bda2dee0ad9..60042c599721fb140d2628f25adeb8b94ed998eb 100644
--- a/neonView/LeadLogPreview_view/LeadLogPreview_view.aod
+++ b/neonView/LeadLogPreview_view/LeadLogPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LeadLogPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/LeadPreview_view/LeadPreview_view.aod b/neonView/LeadPreview_view/LeadPreview_view.aod
index dcd3b2353828fb0da8b71e3b42b3bcd4658be49a..1398c08aa47d910f750f11adc69085eb6eb39379 100644
--- a/neonView/LeadPreview_view/LeadPreview_view.aod
+++ b/neonView/LeadPreview_view/LeadPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LeadPreview_view</name>
   <title>Lead preview</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/LeadTempFilter_view/LeadTempFilter_view.aod b/neonView/LeadTempFilter_view/LeadTempFilter_view.aod
index 8b51e246b49096fc00023045ca8855480f10c4c9..942e0084fb6b0327e98b6236d8021489a448bb5e 100644
--- a/neonView/LeadTempFilter_view/LeadTempFilter_view.aod
+++ b/neonView/LeadTempFilter_view/LeadTempFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LeadTempFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/LeadimportDocEdit_view/LeadimportDocEdit_view.aod b/neonView/LeadimportDocEdit_view/LeadimportDocEdit_view.aod
index 32007efecfefdc5c8a42ac23ccfa18e73b30d8c9..f586b8f0c945b5c66e7bd701bb84195e70a875a2 100644
--- a/neonView/LeadimportDocEdit_view/LeadimportDocEdit_view.aod
+++ b/neonView/LeadimportDocEdit_view/LeadimportDocEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LeadimportDocEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/LeadimportEdit_view/LeadimportEdit_view.aod b/neonView/LeadimportEdit_view/LeadimportEdit_view.aod
index 317814aa5adab84fd8ba7cbcc93bac9046d35a67..349c644cebfa472d11c72813ff520fb9026f14d1 100644
--- a/neonView/LeadimportEdit_view/LeadimportEdit_view.aod
+++ b/neonView/LeadimportEdit_view/LeadimportEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LeadimportEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/LeadimportFilter_view/LeadimportFilter_view.aod b/neonView/LeadimportFilter_view/LeadimportFilter_view.aod
index 111d9ee2c1cdce3a3c7b90663c78d668a22e4538..3593bf9b43010284d5638031b2f739dfad5b394d 100644
--- a/neonView/LeadimportFilter_view/LeadimportFilter_view.aod
+++ b/neonView/LeadimportFilter_view/LeadimportFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LeadimportFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/LeadimportLeadFilter_view/LeadimportLeadFilter_view.aod b/neonView/LeadimportLeadFilter_view/LeadimportLeadFilter_view.aod
index 5d7859d4cc1718a63c414706f9a2348d1f51d310..3712b09ea7a03ce83b57c5fe8acf2133e547560b 100644
--- a/neonView/LeadimportLeadFilter_view/LeadimportLeadFilter_view.aod
+++ b/neonView/LeadimportLeadFilter_view/LeadimportLeadFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LeadimportLeadFilter_view</name>
   <title>Transfer data</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/LeadimportLeadTempFilter_view/LeadimportLeadTempFilter_view.aod b/neonView/LeadimportLeadTempFilter_view/LeadimportLeadTempFilter_view.aod
index 6ec6b4bb48e5c1e8656ee8b9726dcf7454385642..43ffd5910d65d23a079c695b398ffe7f1382a3eb 100644
--- a/neonView/LeadimportLeadTempFilter_view/LeadimportLeadTempFilter_view.aod
+++ b/neonView/LeadimportLeadTempFilter_view/LeadimportLeadTempFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LeadimportLeadTempFilter_view</name>
   <title>Import Daten</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/LeadimportLog_view/LeadimportLog_view.aod b/neonView/LeadimportLog_view/LeadimportLog_view.aod
index 950120edca9d3838192fb9df1c7ad2447fb4c5c0..f86a57699c0648cb464c5da951f7db54a55701ad 100644
--- a/neonView/LeadimportLog_view/LeadimportLog_view.aod
+++ b/neonView/LeadimportLog_view/LeadimportLog_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LeadimportLog_view</name>
   <title>Logs</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/LeadimportMain_view/LeadimportMain_view.aod b/neonView/LeadimportMain_view/LeadimportMain_view.aod
index 3cbee3d28bfd15e87892add5f422caf6f7d3116e..e544314e6eec0d0c13516e4fc76a17e2c6643b57 100644
--- a/neonView/LeadimportMain_view/LeadimportMain_view.aod
+++ b/neonView/LeadimportMain_view/LeadimportMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LeadimportMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/LeadimportMappingAssistantFilter_view/LeadimportMappingAssistantFilter_view.aod b/neonView/LeadimportMappingAssistantFilter_view/LeadimportMappingAssistantFilter_view.aod
index 0a32f33679c773b9301205153d56d3e8daf8c631..631a0af57666a7bf3cf19b2d37a15893127d89ae 100644
--- a/neonView/LeadimportMappingAssistantFilter_view/LeadimportMappingAssistantFilter_view.aod
+++ b/neonView/LeadimportMappingAssistantFilter_view/LeadimportMappingAssistantFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LeadimportMappingAssistantFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/LeadimportPreview_view/LeadimportPreview_view.aod b/neonView/LeadimportPreview_view/LeadimportPreview_view.aod
index 4e376d9f72a06e405dcbb8f176b68e93d5ecc93e..51dde1c3ce2a2c8ba0adbe0ebb354419b8853239 100644
--- a/neonView/LeadimportPreview_view/LeadimportPreview_view.aod
+++ b/neonView/LeadimportPreview_view/LeadimportPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LeadimportPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="false" />
diff --git a/neonView/LetterEdit_view/LetterEdit_view.aod b/neonView/LetterEdit_view/LetterEdit_view.aod
index 5f77590bb269118a0a01ecfdee2b6b0f8f969432..dedcb0a85823ad0a1a902650cdd4a0f699002ae6 100644
--- a/neonView/LetterEdit_view/LetterEdit_view.aod
+++ b/neonView/LetterEdit_view/LetterEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LetterEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/LetterRecipientEdit_view/LetterRecipientEdit_view.aod b/neonView/LetterRecipientEdit_view/LetterRecipientEdit_view.aod
index 6bb0a1766a827bc1c3aca1b73ee207cc58d96acf..9e7b7028a13688738d9421e9649c24eb46d79b19 100644
--- a/neonView/LetterRecipientEdit_view/LetterRecipientEdit_view.aod
+++ b/neonView/LetterRecipientEdit_view/LetterRecipientEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LetterRecipientEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/LetterRecipientFilter_view/LetterRecipientFilter_view.aod b/neonView/LetterRecipientFilter_view/LetterRecipientFilter_view.aod
index 2527705649e2aacea831bb62b2f8c4f1d4618b92..2f84db092a8a44cac4cf2d957ccb398f37897c20 100644
--- a/neonView/LetterRecipientFilter_view/LetterRecipientFilter_view.aod
+++ b/neonView/LetterRecipientFilter_view/LetterRecipientFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LetterRecipientFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/LogHistoryFilterDrawer_view/LogHistoryFilterDrawer_view.aod b/neonView/LogHistoryFilterDrawer_view/LogHistoryFilterDrawer_view.aod
index 0c329f2bd4dbfc96cf6f22562fbada815a3a91b3..bd094e6c4278df0cd9c5891937d635a8f8059ca4 100644
--- a/neonView/LogHistoryFilterDrawer_view/LogHistoryFilterDrawer_view.aod
+++ b/neonView/LogHistoryFilterDrawer_view/LogHistoryFilterDrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LogHistoryFilterDrawer_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/LogHistoryFilter_view/LogHistoryFilter_view.aod b/neonView/LogHistoryFilter_view/LogHistoryFilter_view.aod
index 046d2f8787fa44504542c665a131526969cb6c25..94171bdc4e4febf21937bf3a8f87bb443367162e 100644
--- a/neonView/LogHistoryFilter_view/LogHistoryFilter_view.aod
+++ b/neonView/LogHistoryFilter_view/LogHistoryFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LogHistoryFilter_view</name>
   <title>Log</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/LogHistoryPreview_view/LogHistoryPreview_view.aod b/neonView/LogHistoryPreview_view/LogHistoryPreview_view.aod
index 3ea10300b8edfe35b2ce7d5a8691ccf43db2dfb5..3da1a6d76e7468b83076cf7cf19c8bd9958fb3a5 100644
--- a/neonView/LogHistoryPreview_view/LogHistoryPreview_view.aod
+++ b/neonView/LogHistoryPreview_view/LogHistoryPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>LogHistoryPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/MSTTeamChannelEdit_view/MSTTeamChannelEdit_view.aod b/neonView/MSTTeamChannelEdit_view/MSTTeamChannelEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..c27de99f55906a641c7d83d2d9f2d6ccd2c87ad4
--- /dev/null
+++ b/neonView/MSTTeamChannelEdit_view/MSTTeamChannelEdit_view.aod
@@ -0,0 +1,10 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>MSTTeamChannelEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+</neonView>
diff --git a/neonView/MSTTeamEditMembers_view/MSTTeamEditMembers_view.aod b/neonView/MSTTeamEditMembers_view/MSTTeamEditMembers_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..9474c7ad093b9a3e6592715960256f06ef00abcd
--- /dev/null
+++ b/neonView/MSTTeamEditMembers_view/MSTTeamEditMembers_view.aod
@@ -0,0 +1,28 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>MSTTeamEditMembers_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Teamname</name>
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>b17446e0-ad87-4098-8bd2-de716a8e12ae</name>
+          <entityField>TEAMNAME</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>189bbef9-e646-416a-835f-6348199dbd24</name>
+      <entityField>TeamMembers</entityField>
+      <view>MSTTeamMemberMultiEdit_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/MSTTeamEdit_view/MSTTeamEdit_view.aod b/neonView/MSTTeamEdit_view/MSTTeamEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..9d1ffde69b9be3c4c3413cce830aa9b651457370
--- /dev/null
+++ b/neonView/MSTTeamEdit_view/MSTTeamEdit_view.aod
@@ -0,0 +1,33 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>MSTTeamEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Teamname</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>b69c563c-6230-4bb5-b543-236e0fdc791c</name>
+          <entityField>TEAMNAME</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>258beab2-60c4-4639-a343-3ac67c82dd5a</name>
+          <entityField>DESCRIPTION</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>702fea38-849e-43c3-82e5-06e7c1251c7f</name>
+      <entityField>TeamMembers</entityField>
+      <view>MSTTeamMemberMultiEdit_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/MSTTeamLinkEdit_view/MSTTeamLinkEdit_view.aod b/neonView/MSTTeamLinkEdit_view/MSTTeamLinkEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..7afbe62185e7b41e7c711a01e0222beeae1112fa
--- /dev/null
+++ b/neonView/MSTTeamLinkEdit_view/MSTTeamLinkEdit_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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>MSTTeamLinkEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>TeamSelection</name>
+      <editMode v="true" />
+      <fields>
+        <entityFieldLink>
+          <name>1b10e15e-0774-430d-8b76-36307abdff33</name>
+          <entityField>TEAM_ID_AND_NAME</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/MSTTeamMemberList_view/MSTTeamMemberList_view.aod b/neonView/MSTTeamMemberList_view/MSTTeamMemberList_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..168947cdb474ce3c82ebdfe7a23fd8a6a1b0af30
--- /dev/null
+++ b/neonView/MSTTeamMemberList_view/MSTTeamMemberList_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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>MSTTeamMemberList_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <titledListViewTemplate>
+      <name>List</name>
+      <entityField>#ENTITY</entityField>
+      <isDeletable v="false" />
+      <isEditable v="false" />
+      <isCreatable v="false" />
+      <columns>
+        <neonTitledListTableColumn>
+          <name>ea5cdf04-7476-46f0-9df7-41d66e24acad</name>
+          <entityField>ROLE</entityField>
+        </neonTitledListTableColumn>
+        <neonTitledListTableColumn>
+          <name>20efb592-e94f-4f2c-87b5-fea410c4c28a</name>
+          <entityField>CONTACT_ID</entityField>
+        </neonTitledListTableColumn>
+      </columns>
+    </titledListViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/MSTTeamMemberMultiEdit_view/MSTTeamMemberMultiEdit_view.aod b/neonView/MSTTeamMemberMultiEdit_view/MSTTeamMemberMultiEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..5fe30d6a86a9e4a8e02757f6092a8a3592e4f4ab
--- /dev/null
+++ b/neonView/MSTTeamMemberMultiEdit_view/MSTTeamMemberMultiEdit_view.aod
@@ -0,0 +1,42 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>MSTTeamMemberMultiEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <genericMultipleViewTemplate>
+      <name>GenericMultiple</name>
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonGenericMultipleTableColumn>
+          <name>a01d6a4e-1ac4-426c-a891-890bd3e9a4d0</name>
+          <entityField>CONTACT_ID</entityField>
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>467ab169-f46a-4036-9e5e-5c480bd947a6</name>
+          <entityField>ROLE</entityField>
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>b85c25c8-09dd-4f9a-b0b4-31c0b8a8f12c</name>
+          <entityField>INVITE</entityField>
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>82cdb323-6c1a-428f-a01e-e29da9f338ec</name>
+          <entityField>AZUREID</entityField>
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>3f766fe4-119d-40df-b071-b7a578af2a71</name>
+          <entityField>AZUREUPN</entityField>
+        </neonGenericMultipleTableColumn>
+        <neonGenericMultipleTableColumn>
+          <name>0b3ac2a1-91ad-4761-9a1d-7231d5b55169</name>
+          <entityField>ISEXTERN</entityField>
+        </neonGenericMultipleTableColumn>
+      </columns>
+    </genericMultipleViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/MSTTeamPreview_view/MSTTeamPreview_view.aod b/neonView/MSTTeamPreview_view/MSTTeamPreview_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..fbc295e90e4782a9d183aea6f834ff02e5b5bade
--- /dev/null
+++ b/neonView/MSTTeamPreview_view/MSTTeamPreview_view.aod
@@ -0,0 +1,43 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>MSTTeamPreview_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+      <header>Card</header>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <cardViewTemplate>
+      <name>Card</name>
+      <titleField>TEAMNAME</titleField>
+      <descriptionField>DESCRIPTION</descriptionField>
+      <entityField>#ENTITY</entityField>
+      <isEditable v="false" />
+    </cardViewTemplate>
+    <genericViewTemplate>
+      <name>Info</name>
+      <showDrawer v="true" />
+      <drawerCaption>Details</drawerCaption>
+      <entityField>#ENTITY</entityField>
+      <isEditable v="false" />
+      <fields>
+        <entityFieldLink>
+          <name>2a40804f-ea89-4345-b075-a6eef5fe9961</name>
+          <entityField>ISARCHIVED</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>b8eda051-1e6f-4c8f-8ef2-2b14d95d90c8</name>
+      <entityField>TeamMembers</entityField>
+      <view>MSTTeamMemberList_view</view>
+    </neonViewReference>
+    <neonViewReference>
+      <name>500dd7ba-366e-4b01-9d28-ebe4672c7380</name>
+      <entityField>Channels</entityField>
+      <view>MSTeamsChannelList_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/neonView/MSTeamsActivityImportEdit_view/MSTeamsActivityImportEdit_view.aod b/neonView/MSTeamsActivityImportEdit_view/MSTeamsActivityImportEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..c089822821e52c011004d916fe196c0d3f2b61f0
--- /dev/null
+++ b/neonView/MSTeamsActivityImportEdit_view/MSTeamsActivityImportEdit_view.aod
@@ -0,0 +1,37 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>MSTeamsActivityImportEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>NORMAL</size>
+  <isOverlay v="true" />
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>ChannelSelection</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>099e61f6-6cb8-4390-8b79-8943640bce9f</name>
+          <entityField>CHANNEL_ID</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>e486a1bb-5deb-432a-aa28-c3872f0f88fc</name>
+      <entityField>Messages</entityField>
+      <view>MSTeamsMessageFilter_view</view>
+    </neonViewReference>
+    <actionsViewTemplate>
+      <name>Actions</name>
+      <actions>
+        <element>loadNextMessages</element>
+      </actions>
+      <entityField>#ENTITY</entityField>
+    </actionsViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/MSTeamsChannelList_view/MSTeamsChannelList_view.aod b/neonView/MSTeamsChannelList_view/MSTeamsChannelList_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..253fe017d8f7b990e4b5f487db407e9ea2814090
--- /dev/null
+++ b/neonView/MSTeamsChannelList_view/MSTeamsChannelList_view.aod
@@ -0,0 +1,25 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>MSTeamsChannelList_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <titledListViewTemplate>
+      <name>ChannelList</name>
+      <entityField>#ENTITY</entityField>
+      <isDeletable v="false" />
+      <isEditable v="false" />
+      <isCreatable v="false" />
+      <columns>
+        <neonTitledListTableColumn>
+          <name>04b88bd4-22f4-4640-a4ff-26d90bc48437</name>
+          <entityField>CHANNELNAME</entityField>
+        </neonTitledListTableColumn>
+      </columns>
+    </titledListViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/MSTeamsDocumentEdit_view/MSTeamsDocumentEdit_view.aod b/neonView/MSTeamsDocumentEdit_view/MSTeamsDocumentEdit_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..017eb32c7d626d7b970a03ed7ff4ff2e479a56f1
--- /dev/null
+++ b/neonView/MSTeamsDocumentEdit_view/MSTeamsDocumentEdit_view.aod
@@ -0,0 +1,30 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>MSTeamsDocumentEdit_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <size>SMALL</size>
+  <isOverlay v="false" />
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Documents</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <title>Documents</title>
+      <fields>
+        <entityFieldLink>
+          <name>6b122227-6e23-4f25-b66c-05f90e991005</name>
+          <entityField>CHANNEL</entityField>
+        </entityFieldLink>
+        <entityFieldLink>
+          <name>9a0986dd-68b2-422e-b9b3-27d35640b44b</name>
+          <entityField>DOCUMENTS</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/MSTeamsMessageFilter_view/MSTeamsMessageFilter_view.aod b/neonView/MSTeamsMessageFilter_view/MSTeamsMessageFilter_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..469ba0bec31d6149eecec43077644d0625eb7ecf
--- /dev/null
+++ b/neonView/MSTeamsMessageFilter_view/MSTeamsMessageFilter_view.aod
@@ -0,0 +1,31 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>MSTeamsMessageFilter_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <noneLayout>
+      <name>layout</name>
+    </noneLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>Table</name>
+      <hideActions v="true" />
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTableColumn>
+          <name>5db624ad-16d0-4374-be55-1a423fcddefc</name>
+          <entityField>FROM</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>89e753a1-4917-4493-b1c3-3c9d7884b217</name>
+          <entityField>CREATED_DATE_TIME</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>bc343936-a59c-4eb0-b056-c8dc35303385</name>
+          <entityField>MESSAGE</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/MarketingWorkflowLauncherEdit_view/MarketingWorkflowLauncherEdit_view.aod b/neonView/MarketingWorkflowLauncherEdit_view/MarketingWorkflowLauncherEdit_view.aod
index 8fe83127e05c62b24ba0fc5ec71929cea5e39df0..4f1e6c027e81b174f0d013dd70bf385818c74c61 100644
--- a/neonView/MarketingWorkflowLauncherEdit_view/MarketingWorkflowLauncherEdit_view.aod
+++ b/neonView/MarketingWorkflowLauncherEdit_view/MarketingWorkflowLauncherEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>MarketingWorkflowLauncherEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/MemberDrawer_view/MemberDrawer_view.aod b/neonView/MemberDrawer_view/MemberDrawer_view.aod
index cfe7ea4229c7d1b0262ef5d40c9162c3d3e9a2d9..945f0f153b3b0aa745f70ca17d5c84be6a2e613d 100644
--- a/neonView/MemberDrawer_view/MemberDrawer_view.aod
+++ b/neonView/MemberDrawer_view/MemberDrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>MemberDrawer_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/MemberEdit_view/MemberEdit_view.aod b/neonView/MemberEdit_view/MemberEdit_view.aod
index d87d067090a65f8cfca284782ffe693ce7d5de51..68fe23e3d3629907ea6899a19697125d98fe018f 100644
--- a/neonView/MemberEdit_view/MemberEdit_view.aod
+++ b/neonView/MemberEdit_view/MemberEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>MemberEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/MemberFilter_view/MemberFilter_view.aod b/neonView/MemberFilter_view/MemberFilter_view.aod
index 1d4faccbdb00791a08aed0d4aa59df802695a131..8ca569b5ded3b525eeeb0c28f654c0f40ebde595 100644
--- a/neonView/MemberFilter_view/MemberFilter_view.aod
+++ b/neonView/MemberFilter_view/MemberFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>MemberFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
@@ -11,11 +11,15 @@
   <children>
     <tableViewTemplate>
       <name>Members</name>
+      <favoriteActionGroup1></favoriteActionGroup1>
+      <favoriteActionGroup2>MSTeamsActionGroup</favoriteActionGroup2>
       <iconField>IMAGE</iconField>
       <titleField>PERSON_FULL_NAME</titleField>
       <subtitleField>CONTACTROLE</subtitleField>
       <descriptionField>ORGANISATION_NAME</descriptionField>
       <entityField>#ENTITY</entityField>
+      <linkedColumns />
+      <fixedFilterFields />
       <columns>
         <neonTableColumn>
           <name>8b6b6eeb-6246-414f-95f6-453b71e4a9db</name>
@@ -45,6 +49,10 @@
           <name>bea82980-0639-405a-ab3f-92e45f97090e</name>
           <entityField>MEMBERROLE</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>2a1a3331-5374-4da0-b15d-ede11a691e0a</name>
+          <entityField>MST_MEMBERROLE</entityField>
+        </neonTableColumn>
       </columns>
     </tableViewTemplate>
     <treeTableViewTemplate>
diff --git a/neonView/MemberLookup_view/MemberLookup_view.aod b/neonView/MemberLookup_view/MemberLookup_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..03833892bc29db34b9975df0977e40cfdaf9edc0
--- /dev/null
+++ b/neonView/MemberLookup_view/MemberLookup_view.aod
@@ -0,0 +1,32 @@
+<?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.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
+  <name>MemberLookup_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <boxLayout>
+      <name>layout</name>
+    </boxLayout>
+  </layout>
+  <children>
+    <tableViewTemplate>
+      <name>Table</name>
+      <entityField>#ENTITY</entityField>
+      <linkedColumns />
+      <fixedFilterFields />
+      <columns>
+        <neonTableColumn>
+          <name>e3a82f5d-2eee-43bc-8140-e995b23481df</name>
+          <entityField>IMAGE</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>1ecfa8b4-05a7-43c8-ac1d-ba4afe8acde0</name>
+          <entityField>PERSON_FULL_NAME</entityField>
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>5819e0e0-cd6d-4259-b64d-b0ce016f7892</name>
+          <entityField>ORGANISATION_NAME</entityField>
+        </neonTableColumn>
+      </columns>
+    </tableViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/ModuleTree_view/ModuleTree_view.aod b/neonView/ModuleTree_view/ModuleTree_view.aod
index 837a6f7608c0ec636eae13e5d835a763c0c8d283..28e2e351e68e45ac572f5fb3e86f45639a7775a9 100644
--- a/neonView/ModuleTree_view/ModuleTree_view.aod
+++ b/neonView/ModuleTree_view/ModuleTree_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ModuleTree_view</name>
   <title>Tree</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/MyDashboardScoreCard_view/MyDashboardScoreCard_view.aod b/neonView/MyDashboardScoreCard_view/MyDashboardScoreCard_view.aod
index 723a24964e2f2b1d78bb42e38728212ea9c257c8..e8375e035d436aabcfbef4615b397f5a1f845527 100644
--- a/neonView/MyDashboardScoreCard_view/MyDashboardScoreCard_view.aod
+++ b/neonView/MyDashboardScoreCard_view/MyDashboardScoreCard_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>MyDashboardScoreCard_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <dashletConfigurations>
@@ -13,7 +13,7 @@
       <categories>
         <neonDashletCategory>
           <name>contactmanagement</name>
-          <title>Contactmanagement</title>
+          <title>Contact Management</title>
         </neonDashletCategory>
       </categories>
     </neonDashletConfiguration>
diff --git a/neonView/MyTurnoverForecastScoreCard_view/MyTurnoverForecastScoreCard_view.aod b/neonView/MyTurnoverForecastScoreCard_view/MyTurnoverForecastScoreCard_view.aod
index 7285d5d827657d2b559f8420f5e0156e946f74a5..6aa096872dd77a5ad2b2a1416dc24cf84c5a2ad9 100644
--- a/neonView/MyTurnoverForecastScoreCard_view/MyTurnoverForecastScoreCard_view.aod
+++ b/neonView/MyTurnoverForecastScoreCard_view/MyTurnoverForecastScoreCard_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>MyTurnoverForecastScoreCard_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <dashletConfigurations>
diff --git a/neonView/NotificationFilter_view/NotificationFilter_view.aod b/neonView/NotificationFilter_view/NotificationFilter_view.aod
index 26ee281b76cf7f73fedf86b0c739a12798fa9393..9e1d0f42f38202cf07d20df264743e304c0b779b 100644
--- a/neonView/NotificationFilter_view/NotificationFilter_view.aod
+++ b/neonView/NotificationFilter_view/NotificationFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>NotificationFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
@@ -32,7 +32,7 @@
       <dateField>CREATEDAY</dateField>
       <titleField>CAPTION</titleField>
       <descriptionField>DESCRIPTION</descriptionField>
-      <subdescriptionField>CREATEDATE</subdescriptionField>
+      <subdescriptionField>SUBCATEGORY</subdescriptionField>
       <iconIdField>ICON</iconIdField>
       <additionalInfoField>STATE</additionalInfoField>
       <entityField>#ENTITY</entityField>
@@ -50,6 +50,7 @@
       <entityField>#ENTITY</entityField>
       <isEditable v="false" />
       <isSaveable v="false" />
+      <informationField>SUBCATEGORY</informationField>
       <columns>
         <neonTableColumn>
           <name>1cff3be1-523d-4a5a-b7d1-389d7cbb726f</name>
@@ -67,6 +68,10 @@
           <name>ff33a6c1-7ac6-4acd-a083-e56a36f89977</name>
           <entityField>DESCRIPTION</entityField>
         </neonTableColumn>
+        <neonTableColumn>
+          <name>0e3756eb-05f6-4ab2-a6e9-984f5215f542</name>
+          <entityField>SUBCATEGORY</entityField>
+        </neonTableColumn>
         <neonTableColumn>
           <name>5cb09de4-4413-41e5-8a7c-4970a3cf6a62</name>
           <entityField>STATE</entityField>
@@ -95,6 +100,10 @@
           <name>446c3d62-efa4-4f1a-85d4-e4f6a45019c7</name>
           <entityField>DESCRIPTION</entityField>
         </neonTreeTableColumn>
+        <neonTreeTableColumn>
+          <name>6caff937-2e67-4b28-b630-ae1dd5860f3b</name>
+          <entityField>SUBCATEGORY</entityField>
+        </neonTreeTableColumn>
         <neonTreeTableColumn>
           <name>4c82b79e-4c15-4298-bfbb-186c76fc5189</name>
           <entityField>STATE</entityField>
diff --git a/neonView/NotificationPreview_view/NotificationPreview_view.aod b/neonView/NotificationPreview_view/NotificationPreview_view.aod
index e67f2f5699062888c2367683d63acd087f924809..dab06ac7ddc3ac1140edb2d4c92ddc3d1ccd867b 100644
--- a/neonView/NotificationPreview_view/NotificationPreview_view.aod
+++ b/neonView/NotificationPreview_view/NotificationPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>NotificationPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="false" />
diff --git a/neonView/ObjectRelationTypeEdit_view/ObjectRelationTypeEdit_view.aod b/neonView/ObjectRelationTypeEdit_view/ObjectRelationTypeEdit_view.aod
index e354b3573f2c0e6a617136a1983c8b456b77cfa6..1d293530d8adbece302fd7d78f19a8cbab02cea0 100644
--- a/neonView/ObjectRelationTypeEdit_view/ObjectRelationTypeEdit_view.aod
+++ b/neonView/ObjectRelationTypeEdit_view/ObjectRelationTypeEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ObjectRelationTypeEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/ObjectRelationTypeFilter_view/ObjectRelationTypeFilter_view.aod b/neonView/ObjectRelationTypeFilter_view/ObjectRelationTypeFilter_view.aod
index 9e6fa80dafd8382e7d758b5a939012c86d664edd..cfec0b8f5146c6f2dc3f23eaaab6c5562666f0f4 100644
--- a/neonView/ObjectRelationTypeFilter_view/ObjectRelationTypeFilter_view.aod
+++ b/neonView/ObjectRelationTypeFilter_view/ObjectRelationTypeFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ObjectRelationTypeFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ObjectTreeEdit_view/ObjectTreeEdit_view.aod b/neonView/ObjectTreeEdit_view/ObjectTreeEdit_view.aod
index 922ada4bc69f3589ee407b648469eb3d281f7fb2..70ad4cf406d502a6387199bc1526a14c7fbedf3a 100644
--- a/neonView/ObjectTreeEdit_view/ObjectTreeEdit_view.aod
+++ b/neonView/ObjectTreeEdit_view/ObjectTreeEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ObjectTreeEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/ObjectTreeFilter_view/ObjectTreeFilter_view.aod b/neonView/ObjectTreeFilter_view/ObjectTreeFilter_view.aod
index 3497cce9b4d21634068d93c6e65c3f3135056f3c..b846b67b19f115f0ac4c8400e16829cb6b6f4781 100644
--- a/neonView/ObjectTreeFilter_view/ObjectTreeFilter_view.aod
+++ b/neonView/ObjectTreeFilter_view/ObjectTreeFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ObjectTreeFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/OfferCoverLetter_view/OfferCoverLetter_view.aod b/neonView/OfferCoverLetter_view/OfferCoverLetter_view.aod
index 667dadc02c646fcc7a5246c0375ab24cd93235c2..8e3b80d75be7463ddd1b1a807871e9ee218dd2cd 100644
--- a/neonView/OfferCoverLetter_view/OfferCoverLetter_view.aod
+++ b/neonView/OfferCoverLetter_view/OfferCoverLetter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OfferCoverLetter_view</name>
   <title>Cover letter</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/OfferDrawer_view/OfferDrawer_view.aod b/neonView/OfferDrawer_view/OfferDrawer_view.aod
index b6445f06f7144f29b40eb72b946f40352c23901b..ad0f760504de95d61784caacc0ce8f11916d7eee 100644
--- a/neonView/OfferDrawer_view/OfferDrawer_view.aod
+++ b/neonView/OfferDrawer_view/OfferDrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OfferDrawer_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OfferEdit_view/OfferEdit_view.aod b/neonView/OfferEdit_view/OfferEdit_view.aod
index 5bacbaaaf3210c985a93785da25639a707bac134..3d4de5a7dc5fefa2bd15b025468a6082e10f171d 100644
--- a/neonView/OfferEdit_view/OfferEdit_view.aod
+++ b/neonView/OfferEdit_view/OfferEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OfferEdit_view</name>
   <title>Offer</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/OfferFilter_view/OfferFilter_view.aod b/neonView/OfferFilter_view/OfferFilter_view.aod
index dcfe1e8da8909c739b4d2d7d7cfad05ed4272a66..d53c98d2e7d6a5b995bf8f1f99126b6da7dc7ac6 100644
--- a/neonView/OfferFilter_view/OfferFilter_view.aod
+++ b/neonView/OfferFilter_view/OfferFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OfferFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
@@ -25,7 +25,7 @@
     </neonDashletConfiguration>
     <neonDashletConfiguration>
       <name>SendOffersDashlet</name>
-      <title>Sent offers</title>
+      <title>Sent Offers</title>
       <description>Show all sent offers</description>
       <fragment>Offer/filter</fragment>
       <singleton v="true" />
diff --git a/neonView/OfferMain_view/OfferMain_view.aod b/neonView/OfferMain_view/OfferMain_view.aod
index 1c956c7b763c8ea4be3abbe0fc903910b3d6da8e..ef774fd7b7ce0ed91956057023266193f30b3f8f 100644
--- a/neonView/OfferMain_view/OfferMain_view.aod
+++ b/neonView/OfferMain_view/OfferMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OfferMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OfferPreviewMultiple_view/OfferPreviewMultiple_view.aod b/neonView/OfferPreviewMultiple_view/OfferPreviewMultiple_view.aod
index 44610fe33c49fdcfb14991a4786f970603a8d240..399345116e27363f14cf691481a5240c6cdec799 100644
--- a/neonView/OfferPreviewMultiple_view/OfferPreviewMultiple_view.aod
+++ b/neonView/OfferPreviewMultiple_view/OfferPreviewMultiple_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OfferPreviewMultiple_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OfferPreview_view/OfferPreview_view.aod b/neonView/OfferPreview_view/OfferPreview_view.aod
index 7b78909905af090ebc923109ba2ed9bdcb0492dd..5cff758218dd6ff41acd29eef9b95cb8b4a985bf 100644
--- a/neonView/OfferPreview_view/OfferPreview_view.aod
+++ b/neonView/OfferPreview_view/OfferPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OfferPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OfferReport_view/OfferReport_view.aod b/neonView/OfferReport_view/OfferReport_view.aod
index 6ac54d910d1596b8adc0956163c2e779e27efd33..043f3d17d2bb6c8b1798323b2e1741aebc01c485 100644
--- a/neonView/OfferReport_view/OfferReport_view.aod
+++ b/neonView/OfferReport_view/OfferReport_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OfferReport_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OfferitemEdit_view/OfferitemEdit_view.aod b/neonView/OfferitemEdit_view/OfferitemEdit_view.aod
index b249c4127083a8fe0539db54d714c517a64e5081..d63f165363ed9bd54ee5428ec64eef4672e6bfaa 100644
--- a/neonView/OfferitemEdit_view/OfferitemEdit_view.aod
+++ b/neonView/OfferitemEdit_view/OfferitemEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OfferitemEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/OfferitemFilter_view/OfferitemFilter_view.aod b/neonView/OfferitemFilter_view/OfferitemFilter_view.aod
index cd9156a57cc2dd16a96648a25f31a705d7f0ca8e..d98159492edc13fe8e7a1afd14a512839b14fb4d 100644
--- a/neonView/OfferitemFilter_view/OfferitemFilter_view.aod
+++ b/neonView/OfferitemFilter_view/OfferitemFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OfferitemFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/OfferitemMultiEdit_view/OfferitemMultiEdit_view.aod b/neonView/OfferitemMultiEdit_view/OfferitemMultiEdit_view.aod
index 7e027e2fc7fd8c34af2db43345aa8149874824be..faa26adb3f7b5be1a23b88ad77e308919265913b 100644
--- a/neonView/OfferitemMultiEdit_view/OfferitemMultiEdit_view.aod
+++ b/neonView/OfferitemMultiEdit_view/OfferitemMultiEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OfferitemMultiEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OfferitemPreview_view/OfferitemPreview_view.aod b/neonView/OfferitemPreview_view/OfferitemPreview_view.aod
index 3805f9a7120e5a727b9aae12a093697b62eaf9b8..2b977d802eae4d59aecd4bab71e5be3da4d745e9 100644
--- a/neonView/OfferitemPreview_view/OfferitemPreview_view.aod
+++ b/neonView/OfferitemPreview_view/OfferitemPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OfferitemPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OrderDetail_view/OrderDetail_view.aod b/neonView/OrderDetail_view/OrderDetail_view.aod
index df64544990c9918c2e4521789a5b07ced99f9587..aadbb8453e7f449e2358def60654727a7f525055 100644
--- a/neonView/OrderDetail_view/OrderDetail_view.aod
+++ b/neonView/OrderDetail_view/OrderDetail_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrderDetail_view</name>
   <title>Cover letter</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/OrderDunning_view/OrderDunning_view.aod b/neonView/OrderDunning_view/OrderDunning_view.aod
index 0a20b0fdb87726636ef6602445cb916027492bb3..4f843d3eba3e55c17e6a6da305cc168428798836 100644
--- a/neonView/OrderDunning_view/OrderDunning_view.aod
+++ b/neonView/OrderDunning_view/OrderDunning_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrderDunning_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/OrderEdit_view/OrderEdit_view.aod b/neonView/OrderEdit_view/OrderEdit_view.aod
index e11f3390c8995c5511064190da120587eeb7c7ea..a19c19a685ef148cf0de02f16532f8db5a1befd6 100644
--- a/neonView/OrderEdit_view/OrderEdit_view.aod
+++ b/neonView/OrderEdit_view/OrderEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrderEdit_view</name>
   <title>Receipt</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/OrderFilter_view/OrderFilter_view.aod b/neonView/OrderFilter_view/OrderFilter_view.aod
index 31110f64b91a482ce3b2a3122f0c45fd722a81d9..329fad392be076770b345315d413a0bc5777bf07 100644
--- a/neonView/OrderFilter_view/OrderFilter_view.aod
+++ b/neonView/OrderFilter_view/OrderFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrderFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
@@ -25,7 +25,7 @@
     </neonDashletConfiguration>
     <neonDashletConfiguration>
       <name>SendOrdersDashlet</name>
-      <title>Sent receipts</title>
+      <title>Sent Receipts</title>
       <description>Show all sent receipts</description>
       <fragment>Order/filter?search=eyJ0eXBlIjoiZ3JvdXAiLCJvcGVyYXRvciI6IkFORCIsImNoaWxkcyI6W3sidHlwZSI6InJvdyIsIm5hbWUiOiJPUkRFUlNUQVRVUyIsIm9wZXJhdG9yIjoiQ09OVEFJTlMiLCJ2YWx1ZSI6IkphIiwia2V5IjoiMSIsImNvbnRlbnR0eXBlIjoiQk9PTEVBTiJ9XX0%3D</fragment>
       <singleton v="false" />
@@ -102,11 +102,11 @@
     </tableViewTemplate>
     <treeTableViewTemplate>
       <name>tree</name>
-      <defaultGroupFields />
       <entityField>#ENTITY</entityField>
       <linkedColumns>
         <element>SALESORDERCODE</element>
       </linkedColumns>
+      <defaultGroupFields />
       <fixedFilterFields />
       <columns>
         <neonTreeTableColumn>
diff --git a/neonView/OrderLink_view/OrderLink_view.aod b/neonView/OrderLink_view/OrderLink_view.aod
index f959375bf36879a1b1b3a4f7553eb962f4ad39d4..8bb4173a323b3f449ad361f27790d0adb694f0ec 100644
--- a/neonView/OrderLink_view/OrderLink_view.aod
+++ b/neonView/OrderLink_view/OrderLink_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrderLink_view</name>
   <title>Links</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/OrderMain_view/OrderMain_view.aod b/neonView/OrderMain_view/OrderMain_view.aod
index 428d0c02e07af523318e7f24d35f87230edab64f..a5a11844e394930740a0a69ca77d4b3e3a7c3653 100644
--- a/neonView/OrderMain_view/OrderMain_view.aod
+++ b/neonView/OrderMain_view/OrderMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrderMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OrderPaid_view/OrderPaid_view.aod b/neonView/OrderPaid_view/OrderPaid_view.aod
index 67d17a1b948fe34f88e3f50b5fdab14d543d8b4a..e40f7e8d39c7000059825f4f7e6ae47636815e2f 100644
--- a/neonView/OrderPaid_view/OrderPaid_view.aod
+++ b/neonView/OrderPaid_view/OrderPaid_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrderPaid_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/OrderPreview_view/OrderPreview_view.aod b/neonView/OrderPreview_view/OrderPreview_view.aod
index 449cb53093e44483cf3aa756620e62102d37d113..65d6f80528d1e6d8634e01378f820dac5cd4b2b8 100644
--- a/neonView/OrderPreview_view/OrderPreview_view.aod
+++ b/neonView/OrderPreview_view/OrderPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrderPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OrderReminderReport_view/OrderReminderReport_view.aod b/neonView/OrderReminderReport_view/OrderReminderReport_view.aod
index 8c0ed255d69772395ea09018326fa4259b6eb61c..3f14cbe374f95d2b11ac4ab00381148cc597a727 100644
--- a/neonView/OrderReminderReport_view/OrderReminderReport_view.aod
+++ b/neonView/OrderReminderReport_view/OrderReminderReport_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrderReminderReport_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OrderReport_view/OrderReport_view.aod b/neonView/OrderReport_view/OrderReport_view.aod
index 0f3487512ac3b724cd6ca4aaba79f0e7c92b5def..19703e6ddebd96c97ff069df76d5ea088e71ab4d 100644
--- a/neonView/OrderReport_view/OrderReport_view.aod
+++ b/neonView/OrderReport_view/OrderReport_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrderReport_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OrderitemEdit_view/OrderitemEdit_view.aod b/neonView/OrderitemEdit_view/OrderitemEdit_view.aod
index bcc6e174805d9a3f9f6d9289302c4141db0d380d..c0c38570eadee29252d37ced1eef7dfd4ac9ea2b 100644
--- a/neonView/OrderitemEdit_view/OrderitemEdit_view.aod
+++ b/neonView/OrderitemEdit_view/OrderitemEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrderitemEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/OrderitemFilter_view/OrderitemFilter_view.aod b/neonView/OrderitemFilter_view/OrderitemFilter_view.aod
index 4c6e8a7eac674bd309fbe4aefe1f9bda7c40bba0..1f043a66f89ee7a6146dccc272855b0e3ea56a94 100644
--- a/neonView/OrderitemFilter_view/OrderitemFilter_view.aod
+++ b/neonView/OrderitemFilter_view/OrderitemFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrderitemFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/OrderitemMultiEdit_view/OrderitemMultiEdit_view.aod b/neonView/OrderitemMultiEdit_view/OrderitemMultiEdit_view.aod
index fd4c03d14d1b7bd3d8e75c28b0b66b0719acceca..3226af5f67569e45bdfb2df0b3b30201011b4a5e 100644
--- a/neonView/OrderitemMultiEdit_view/OrderitemMultiEdit_view.aod
+++ b/neonView/OrderitemMultiEdit_view/OrderitemMultiEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrderitemMultiEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OrderitemPreview_view/OrderitemPreview_view.aod b/neonView/OrderitemPreview_view/OrderitemPreview_view.aod
index 40a1e0eac488119ca9355c53de89d7ebaf82c856..285683df9678c5cd06c1b8360393d941cacc51f0 100644
--- a/neonView/OrderitemPreview_view/OrderitemPreview_view.aod
+++ b/neonView/OrderitemPreview_view/OrderitemPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrderitemPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OrganisationAttributeRestriction_view/OrganisationAttributeRestriction_view.aod b/neonView/OrganisationAttributeRestriction_view/OrganisationAttributeRestriction_view.aod
index b817d9e5a5762152b634d66afd7be95e41bdcf93..0142bb641ca7347a91c0910c619f6fa4f0402a2a 100644
--- a/neonView/OrganisationAttributeRestriction_view/OrganisationAttributeRestriction_view.aod
+++ b/neonView/OrganisationAttributeRestriction_view/OrganisationAttributeRestriction_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrganisationAttributeRestriction_view</name>
   <title>Attributes</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/OrganisationClassification/OrganisationClassification.aod b/neonView/OrganisationClassification/OrganisationClassification.aod
index 9019bf34d2fc9a1c046f10134326513ba14eef59..e52d32adb6d25b1e3f46521c93f3e5c3b8ed0484 100644
--- a/neonView/OrganisationClassification/OrganisationClassification.aod
+++ b/neonView/OrganisationClassification/OrganisationClassification.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrganisationClassification</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OrganisationClassificationDrawer_view/OrganisationClassificationDrawer_view.aod b/neonView/OrganisationClassificationDrawer_view/OrganisationClassificationDrawer_view.aod
index 3f81db3f2e4ff280a021b5b2b8b9271c3ebd5f19..fd336c3f6c11c08086375316f52928aef8c0230d 100644
--- a/neonView/OrganisationClassificationDrawer_view/OrganisationClassificationDrawer_view.aod
+++ b/neonView/OrganisationClassificationDrawer_view/OrganisationClassificationDrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrganisationClassificationDrawer_view</name>
   <title>Classifications</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/OrganisationClusterMain_view/OrganisationClusterMain_view.aod b/neonView/OrganisationClusterMain_view/OrganisationClusterMain_view.aod
index 22a28e8cd4062a26a185d95e7672eb386af80b47..a4d2c1cc14c96ff3837c9357d80d80eae79bfb04 100644
--- a/neonView/OrganisationClusterMain_view/OrganisationClusterMain_view.aod
+++ b/neonView/OrganisationClusterMain_view/OrganisationClusterMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrganisationClusterMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OrganisationConditionPricelist_view/OrganisationConditionPricelist_view.aod b/neonView/OrganisationConditionPricelist_view/OrganisationConditionPricelist_view.aod
index 73db76aeba54cc11a95504d9e29ea58e7369873f..d8b313f05e71ea55979012b5c4a2580bab76f432 100644
--- a/neonView/OrganisationConditionPricelist_view/OrganisationConditionPricelist_view.aod
+++ b/neonView/OrganisationConditionPricelist_view/OrganisationConditionPricelist_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrganisationConditionPricelist_view</name>
   <title>Conditions</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/OrganisationCondition_view/OrganisationCondition_view.aod b/neonView/OrganisationCondition_view/OrganisationCondition_view.aod
index b17a49016c29dd4507a2ffe907de216bf2dba92c..854ba3f3278ad26ebf9b8af357ae94fd610a8344 100644
--- a/neonView/OrganisationCondition_view/OrganisationCondition_view.aod
+++ b/neonView/OrganisationCondition_view/OrganisationCondition_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrganisationCondition_view</name>
   <title>Conditions</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/OrganisationDuplicatesFilter_view/OrganisationDuplicatesFilter_view.aod b/neonView/OrganisationDuplicatesFilter_view/OrganisationDuplicatesFilter_view.aod
index dfe48ea0e80130096144fb4c611eb7691a16094e..9ca2b13a95ae2fa9e7d38071f3c72205625443f3 100644
--- a/neonView/OrganisationDuplicatesFilter_view/OrganisationDuplicatesFilter_view.aod
+++ b/neonView/OrganisationDuplicatesFilter_view/OrganisationDuplicatesFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrganisationDuplicatesFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OrganisationDuplicatesTab_view/OrganisationDuplicatesTab_view.aod b/neonView/OrganisationDuplicatesTab_view/OrganisationDuplicatesTab_view.aod
index 6ca9948b472ab1c99e2a53242a35ae95c902ff81..c6f447f92c419a924c84f78c1b082744439540ff 100644
--- a/neonView/OrganisationDuplicatesTab_view/OrganisationDuplicatesTab_view.aod
+++ b/neonView/OrganisationDuplicatesTab_view/OrganisationDuplicatesTab_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrganisationDuplicatesTab_view</name>
   <title>Organisation duplicates</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/OrganisationEditDefaults_view/OrganisationEditDefaults_view.aod b/neonView/OrganisationEditDefaults_view/OrganisationEditDefaults_view.aod
index 70cc47cbd63e649e23277ff71e0c73332b0493fc..84a9507a937c0dc7ec2b5391f6d062b04c74a32a 100644
--- a/neonView/OrganisationEditDefaults_view/OrganisationEditDefaults_view.aod
+++ b/neonView/OrganisationEditDefaults_view/OrganisationEditDefaults_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrganisationEditDefaults_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/OrganisationEdit_view/OrganisationEdit_view.aod b/neonView/OrganisationEdit_view/OrganisationEdit_view.aod
index 5a59c451c77ae1572ed36fc92ae2d97c156fa020..c76fe9d45886f48246d9396d33efdd8ee2bd970b 100644
--- a/neonView/OrganisationEdit_view/OrganisationEdit_view.aod
+++ b/neonView/OrganisationEdit_view/OrganisationEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrganisationEdit_view</name>
   <title>Company</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/OrganisationFilter_view/OrganisationFilter_view.aod b/neonView/OrganisationFilter_view/OrganisationFilter_view.aod
index 1cbde0c53092405404ec0d317720691ca55d14e3..352cf6a5b00464ee39750c73cf87a69e13911931 100644
--- a/neonView/OrganisationFilter_view/OrganisationFilter_view.aod
+++ b/neonView/OrganisationFilter_view/OrganisationFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrganisationFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
@@ -15,13 +15,13 @@
       <categories>
         <neonDashletCategory>
           <name>contactmanagement</name>
-          <title>Contactmanagement</title>
+          <title>Contact Management</title>
         </neonDashletCategory>
       </categories>
     </neonDashletConfiguration>
     <neonDashletConfiguration>
       <name>OwnSupervisedOrganisations</name>
-      <title>My organisations</title>
+      <title>My Organisations</title>
       <description>Show my organisations</description>
       <fragment>Organisation/filter</fragment>
       <singleton v="false" />
@@ -30,7 +30,7 @@
       <categories>
         <neonDashletCategory>
           <name>contactmanagement</name>
-          <title>Contactmanagement</title>
+          <title>Contact Management</title>
         </neonDashletCategory>
       </categories>
       <parameters>
diff --git a/neonView/OrganisationLesserNoiseTable_view/OrganisationLesserNoiseTable_view.aod b/neonView/OrganisationLesserNoiseTable_view/OrganisationLesserNoiseTable_view.aod
index 5b29deefbee8b04a8e679b25b99f4ec3e47866df..374a165f329d05571c9838e6bcef86e13fd3f9f4 100644
--- a/neonView/OrganisationLesserNoiseTable_view/OrganisationLesserNoiseTable_view.aod
+++ b/neonView/OrganisationLesserNoiseTable_view/OrganisationLesserNoiseTable_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrganisationLesserNoiseTable_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OrganisationLookup_view/OrganisationLookup_view.aod b/neonView/OrganisationLookup_view/OrganisationLookup_view.aod
index 0d9e7c9051b8045e5203369c54659ef9dd9c564a..9c93c1e04a657dbc86a7d95e082a0363d5927299 100644
--- a/neonView/OrganisationLookup_view/OrganisationLookup_view.aod
+++ b/neonView/OrganisationLookup_view/OrganisationLookup_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrganisationLookup_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OrganisationMain_view/OrganisationMain_view.aod b/neonView/OrganisationMain_view/OrganisationMain_view.aod
index df9be823dfc7638ea6bb6f126911731ad6b90784..03d6b384c21ee408aa5c686a7c07557fb2ac1516 100644
--- a/neonView/OrganisationMain_view/OrganisationMain_view.aod
+++ b/neonView/OrganisationMain_view/OrganisationMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrganisationMain_view</name>
   <title>Attribute</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/OrganisationNoNoiseTable_view/OrganisationNoNoiseTable_view.aod b/neonView/OrganisationNoNoiseTable_view/OrganisationNoNoiseTable_view.aod
index 2648fff358054098d3c837b50e09de889fb596c7..e77f5e397f23984b2ef9bd2e187ed776a5c62499 100644
--- a/neonView/OrganisationNoNoiseTable_view/OrganisationNoNoiseTable_view.aod
+++ b/neonView/OrganisationNoNoiseTable_view/OrganisationNoNoiseTable_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrganisationNoNoiseTable_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OrganisationPreview_view/OrganisationPreview_view.aod b/neonView/OrganisationPreview_view/OrganisationPreview_view.aod
index b3ee90540321ac60fbcac02169f6db1862ecfc9f..f357dbb8e3613828085c984a75cd5f785487e14b 100644
--- a/neonView/OrganisationPreview_view/OrganisationPreview_view.aod
+++ b/neonView/OrganisationPreview_view/OrganisationPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrganisationPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OrganisationReport_view/OrganisationReport_view.aod b/neonView/OrganisationReport_view/OrganisationReport_view.aod
index 0c10fa2a0be68aabbdb477fce16f1adda9c1b55f..7207ac709a06fb112851a1229acfd313304e14a3 100644
--- a/neonView/OrganisationReport_view/OrganisationReport_view.aod
+++ b/neonView/OrganisationReport_view/OrganisationReport_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrganisationReport_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/OrganisationTaskAppointment_view/OrganisationTaskAppointment_view.aod b/neonView/OrganisationTaskAppointment_view/OrganisationTaskAppointment_view.aod
index 9fb952b77a2bad5dc51f3da28bb7353f40994d68..e03f03491883a41e93458fa9f8d9417be34c6f85 100644
--- a/neonView/OrganisationTaskAppointment_view/OrganisationTaskAppointment_view.aod
+++ b/neonView/OrganisationTaskAppointment_view/OrganisationTaskAppointment_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrganisationTaskAppointment_view</name>
   <title>ToDo</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/OrganisationUnrelatedDuplicates_view/OrganisationUnrelatedDuplicates_view.aod b/neonView/OrganisationUnrelatedDuplicates_view/OrganisationUnrelatedDuplicates_view.aod
index e8da741d067812b8edb6a0ac8c979cb76fb37051..882d51ed0ac05f2bdc396118e68d2b168552a3e7 100644
--- a/neonView/OrganisationUnrelatedDuplicates_view/OrganisationUnrelatedDuplicates_view.aod
+++ b/neonView/OrganisationUnrelatedDuplicates_view/OrganisationUnrelatedDuplicates_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>OrganisationUnrelatedDuplicates_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/PermissionActionEdit_view/PermissionActionEdit_view.aod b/neonView/PermissionActionEdit_view/PermissionActionEdit_view.aod
index ab4ce87a232c2c483b2c81404cf0d24397da68d4..023dc0ac7bb87b078826fff776b9ccfcac8eaea9 100644
--- a/neonView/PermissionActionEdit_view/PermissionActionEdit_view.aod
+++ b/neonView/PermissionActionEdit_view/PermissionActionEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PermissionActionEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/PermissionActionFilter_view/PermissionActionFilter_view.aod b/neonView/PermissionActionFilter_view/PermissionActionFilter_view.aod
index 38481861ae2a8cc4905adeae38f659cf0c1084a2..b6bacb05021e0f3bd500c3295ca6611db913a017 100644
--- a/neonView/PermissionActionFilter_view/PermissionActionFilter_view.aod
+++ b/neonView/PermissionActionFilter_view/PermissionActionFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PermissionActionFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/PermissionActionList_view/PermissionActionList_view.aod b/neonView/PermissionActionList_view/PermissionActionList_view.aod
index 5019e2d1b3739a17d7c80a9b64da998da4e7d437..653f3fdae87a779a85bbf230fe5096368bd8a50d 100644
--- a/neonView/PermissionActionList_view/PermissionActionList_view.aod
+++ b/neonView/PermissionActionList_view/PermissionActionList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PermissionActionList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/PermissionCalendarEdit_view/PermissionCalendarEdit_view.aod b/neonView/PermissionCalendarEdit_view/PermissionCalendarEdit_view.aod
index 60c76072d2afc883a3e23ecccea591e5f236dfab..1908377c0268b4d64040d0ea88c08ba1e1313a7d 100644
--- a/neonView/PermissionCalendarEdit_view/PermissionCalendarEdit_view.aod
+++ b/neonView/PermissionCalendarEdit_view/PermissionCalendarEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PermissionCalendarEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/PermissionCalendarFilterDrawer_view/PermissionCalendarFilterDrawer_view.aod b/neonView/PermissionCalendarFilterDrawer_view/PermissionCalendarFilterDrawer_view.aod
index bea5b5d3b4c83c14236e3e3ee1164389370c87fd..1c9bf9635927fc795a5f2a14fffaf695a1acf009 100644
--- a/neonView/PermissionCalendarFilterDrawer_view/PermissionCalendarFilterDrawer_view.aod
+++ b/neonView/PermissionCalendarFilterDrawer_view/PermissionCalendarFilterDrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PermissionCalendarFilterDrawer_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/PermissionCalendarFilterReverse_view/PermissionCalendarFilterReverse_view.aod b/neonView/PermissionCalendarFilterReverse_view/PermissionCalendarFilterReverse_view.aod
index c70bb0052949f5d742d12db7048ec520710913bf..c283d5663990a70fa5aa899d4edb3c5c95ba6dfa 100644
--- a/neonView/PermissionCalendarFilterReverse_view/PermissionCalendarFilterReverse_view.aod
+++ b/neonView/PermissionCalendarFilterReverse_view/PermissionCalendarFilterReverse_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PermissionCalendarFilterReverse_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/neonView/PermissionCalendarFilterReverse_view/documentation.adoc</documentation>
diff --git a/neonView/PermissionCalendarFilter_view/PermissionCalendarFilter_view.aod b/neonView/PermissionCalendarFilter_view/PermissionCalendarFilter_view.aod
index ffca2d78c9c23630df69eec76e2f882cd943872e..e018328dd3420f4f4847c6b5ec3536efa4cbc808 100644
--- a/neonView/PermissionCalendarFilter_view/PermissionCalendarFilter_view.aod
+++ b/neonView/PermissionCalendarFilter_view/PermissionCalendarFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PermissionCalendarFilter_view</name>
   <title>Their Permissions</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/PermissionCalendarPreview_view/PermissionCalendarPreview_view.aod b/neonView/PermissionCalendarPreview_view/PermissionCalendarPreview_view.aod
index 8671d21b95c8bc5d16f7bdcc597f4d6a0924cfb7..8614108694e8ff481877cb77ddc5a9b025969869 100644
--- a/neonView/PermissionCalendarPreview_view/PermissionCalendarPreview_view.aod
+++ b/neonView/PermissionCalendarPreview_view/PermissionCalendarPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PermissionCalendarPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/PermissionDetailEdit_view/PermissionDetailEdit_view.aod b/neonView/PermissionDetailEdit_view/PermissionDetailEdit_view.aod
index b38046275b1de3d27e9720088053b6cac8503ca9..8324836e120a4ed202d674e94c79cf0831ff7c35 100644
--- a/neonView/PermissionDetailEdit_view/PermissionDetailEdit_view.aod
+++ b/neonView/PermissionDetailEdit_view/PermissionDetailEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PermissionDetailEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/PermissionDetailFilter_view/PermissionDetailFilter_view.aod b/neonView/PermissionDetailFilter_view/PermissionDetailFilter_view.aod
index 2a069a4c9a5e0e924b01a1cba372741585254201..a82c84b80dd495eab74cecef2215ea4dc517823f 100644
--- a/neonView/PermissionDetailFilter_view/PermissionDetailFilter_view.aod
+++ b/neonView/PermissionDetailFilter_view/PermissionDetailFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PermissionDetailFilter_view</name>
   <title>Permission Detail</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/PermissionDetailPreview_view/PermissionDetailPreview_view.aod b/neonView/PermissionDetailPreview_view/PermissionDetailPreview_view.aod
index 949bb12b7ab6e2ef39917b4b59593a621c981f2f..58b70e10223f062a157149e0e71cca42ec0372d0 100644
--- a/neonView/PermissionDetailPreview_view/PermissionDetailPreview_view.aod
+++ b/neonView/PermissionDetailPreview_view/PermissionDetailPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PermissionDetailPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/PermissionMetaDataFilter_view/PermissionMetaDataFilter_view.aod b/neonView/PermissionMetaDataFilter_view/PermissionMetaDataFilter_view.aod
index 9644e50cf2d1d009ffd09a0981d86df7ac8493e7..b28164f6d9dccb95fbd013c00da4103101c8a0bb 100644
--- a/neonView/PermissionMetaDataFilter_view/PermissionMetaDataFilter_view.aod
+++ b/neonView/PermissionMetaDataFilter_view/PermissionMetaDataFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PermissionMetaDataFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/PermissionMetaDataMain_view/PermissionMetaDataMain_view.aod b/neonView/PermissionMetaDataMain_view/PermissionMetaDataMain_view.aod
index 53e8f0b956cb34f64e1ee26eb4e70ea50d888a65..e668f8fe5ef9e110ccd4c83aefcd1d7a0d90e93b 100644
--- a/neonView/PermissionMetaDataMain_view/PermissionMetaDataMain_view.aod
+++ b/neonView/PermissionMetaDataMain_view/PermissionMetaDataMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PermissionMetaDataMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/PermissionMetaDataPreview_view/PermissionMetaDataPreview_view.aod b/neonView/PermissionMetaDataPreview_view/PermissionMetaDataPreview_view.aod
index 1f323f20aab7cc59e0d8266ecddfcb8e6db74a8a..a734740b8e8e13106763e284c2f460463465cf3e 100644
--- a/neonView/PermissionMetaDataPreview_view/PermissionMetaDataPreview_view.aod
+++ b/neonView/PermissionMetaDataPreview_view/PermissionMetaDataPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PermissionMetaDataPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/PermissionOverviewFilter_view/PermissionOverviewFilter_view.aod b/neonView/PermissionOverviewFilter_view/PermissionOverviewFilter_view.aod
index 7e1ea7f0faabad4a01b7a16f121d93a8de2ff4eb..54950c54a2d7b9aa72a0c2baebf7d90d96bc00de 100644
--- a/neonView/PermissionOverviewFilter_view/PermissionOverviewFilter_view.aod
+++ b/neonView/PermissionOverviewFilter_view/PermissionOverviewFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PermissionOverviewFilter_view</name>
   <title>Permission  Overview</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/PersonAttributeRestriction_view/PersonAttributeRestriction_view.aod b/neonView/PersonAttributeRestriction_view/PersonAttributeRestriction_view.aod
index 11f7b639939fc66ab3721c8f217d2c248246be36..0954af14d6b3bfcf30f9f6efbb231eb216f439f1 100644
--- a/neonView/PersonAttributeRestriction_view/PersonAttributeRestriction_view.aod
+++ b/neonView/PersonAttributeRestriction_view/PersonAttributeRestriction_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PersonAttributeRestriction_view</name>
   <title>Attributes</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/PersonClusterMain_view/PersonClusterMain_view.aod b/neonView/PersonClusterMain_view/PersonClusterMain_view.aod
index 7ed8cea878e5c243e36fe87981e8d0b3240a7339..026835113050c6ad2e78420b38c13d0b88e98804 100644
--- a/neonView/PersonClusterMain_view/PersonClusterMain_view.aod
+++ b/neonView/PersonClusterMain_view/PersonClusterMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PersonClusterMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/PersonClusterPreview_view/PersonClusterPreview_view.aod b/neonView/PersonClusterPreview_view/PersonClusterPreview_view.aod
index 7465d9548b1552e7720bf332414658905f588dbf..8751b422c1507d1fd3988d1a11b50314e08163b2 100644
--- a/neonView/PersonClusterPreview_view/PersonClusterPreview_view.aod
+++ b/neonView/PersonClusterPreview_view/PersonClusterPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PersonClusterPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/PersonDetail_view/PersonDetail_view.aod b/neonView/PersonDetail_view/PersonDetail_view.aod
index bf877ec44c102df4803f41d11075dacecf76123c..52653526a4c50a578452aa2ee6c1a6f96584c923 100644
--- a/neonView/PersonDetail_view/PersonDetail_view.aod
+++ b/neonView/PersonDetail_view/PersonDetail_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PersonDetail_view</name>
   <title>Details</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/PersonDublicatesTab_view/PersonDublicatesTab_view.aod b/neonView/PersonDublicatesTab_view/PersonDublicatesTab_view.aod
index 2099e5c6ee57a9a7fbef13bfbf16b15f8298c108..eba26d6001879a4e335aa662e47348ff2caabeaa 100644
--- a/neonView/PersonDublicatesTab_view/PersonDublicatesTab_view.aod
+++ b/neonView/PersonDublicatesTab_view/PersonDublicatesTab_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PersonDublicatesTab_view</name>
   <title>Person duplicates</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/PersonDuplicateEditview_view/PersonDuplicateEditview_view.aod b/neonView/PersonDuplicateEditview_view/PersonDuplicateEditview_view.aod
index 23c70461d00820365c981737e76d5a410961cc4d..476077463fccae17b7899bd4e9672051e2637b08 100644
--- a/neonView/PersonDuplicateEditview_view/PersonDuplicateEditview_view.aod
+++ b/neonView/PersonDuplicateEditview_view/PersonDuplicateEditview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PersonDuplicateEditview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/PersonDuplicatesFilter_view/PersonDuplicatesFilter_view.aod b/neonView/PersonDuplicatesFilter_view/PersonDuplicatesFilter_view.aod
index 94e88b257d1b94e481ef9fc6350931d736155286..867d991080fbfffa62fafe77c220f81520c6c3c3 100644
--- a/neonView/PersonDuplicatesFilter_view/PersonDuplicatesFilter_view.aod
+++ b/neonView/PersonDuplicatesFilter_view/PersonDuplicatesFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PersonDuplicatesFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/PersonEditDefaults_view/PersonEditDefaults_view.aod b/neonView/PersonEditDefaults_view/PersonEditDefaults_view.aod
index 4be76fd469771d104f909dba2d23f4379c4e8218..2c5a319e4dcf1d40bb2f09bf1c3ba851b978584f 100644
--- a/neonView/PersonEditDefaults_view/PersonEditDefaults_view.aod
+++ b/neonView/PersonEditDefaults_view/PersonEditDefaults_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PersonEditDefaults_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/PersonEdit_view/PersonEdit_view.aod b/neonView/PersonEdit_view/PersonEdit_view.aod
index c31dd51b7ff66255b6c949a7082332d5e5196728..68a42fbd3c07c2a996e944274166e17599c4e5bb 100644
--- a/neonView/PersonEdit_view/PersonEdit_view.aod
+++ b/neonView/PersonEdit_view/PersonEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PersonEdit_view</name>
   <title>Contact</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/PersonFilter_view/PersonFilter_view.aod b/neonView/PersonFilter_view/PersonFilter_view.aod
index 721f83815ee9106aa481022db138b8fcf77e11cb..e4483a7e82c92994013c98bd07d87f12d6f485b2 100644
--- a/neonView/PersonFilter_view/PersonFilter_view.aod
+++ b/neonView/PersonFilter_view/PersonFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PersonFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
@@ -15,13 +15,13 @@
       <categories>
         <neonDashletCategory>
           <name>contactmanagement</name>
-          <title>Contactmanagement</title>
+          <title>Contact Management</title>
         </neonDashletCategory>
       </categories>
     </neonDashletConfiguration>
     <neonDashletConfiguration>
       <name>OwnSupervisedContacts</name>
-      <title>My contacts</title>
+      <title>My Contacts</title>
       <description>Show my contacts</description>
       <fragment>Person/filter</fragment>
       <singleton v="false" />
@@ -30,7 +30,7 @@
       <categories>
         <neonDashletCategory>
           <name>contactmanagement</name>
-          <title>Contactmanagement</title>
+          <title>Contact Management</title>
         </neonDashletCategory>
       </categories>
       <parameters>
diff --git a/neonView/PersonLookup_view/PersonLookup_view.aod b/neonView/PersonLookup_view/PersonLookup_view.aod
index 5877a1ee07ad8d0e4968e57e21c196804d0f67f0..8189598556fa8ca040015c925a825370e7085599 100644
--- a/neonView/PersonLookup_view/PersonLookup_view.aod
+++ b/neonView/PersonLookup_view/PersonLookup_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PersonLookup_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/PersonMain_view/PersonMain_view.aod b/neonView/PersonMain_view/PersonMain_view.aod
index 7e88568ac761047866b5e5bfc6167662e731a85b..8ec9c55885ac9df41ea0ee360e7ebd0e64ddaf02 100644
--- a/neonView/PersonMain_view/PersonMain_view.aod
+++ b/neonView/PersonMain_view/PersonMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PersonMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/PersonMultiEditQuickEntry_view/PersonMultiEditQuickEntry_view.aod b/neonView/PersonMultiEditQuickEntry_view/PersonMultiEditQuickEntry_view.aod
index 5b15646ad0ca10ce8dcbdfdc9b3dbf1b240aafc0..725d0fe4e9e4b5dcc7548fb6848869810224a648 100644
--- a/neonView/PersonMultiEditQuickEntry_view/PersonMultiEditQuickEntry_view.aod
+++ b/neonView/PersonMultiEditQuickEntry_view/PersonMultiEditQuickEntry_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PersonMultiEditQuickEntry_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/PersonMultiEdit_view/PersonMultiEdit_view.aod b/neonView/PersonMultiEdit_view/PersonMultiEdit_view.aod
index 511bdae7953a5858e68ec0d570820e2499ac494e..b6cc77de5ba37f1265d55b03eb8f0a6aade1bb22 100644
--- a/neonView/PersonMultiEdit_view/PersonMultiEdit_view.aod
+++ b/neonView/PersonMultiEdit_view/PersonMultiEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PersonMultiEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/PersonPreview_view/PersonPreview_view.aod b/neonView/PersonPreview_view/PersonPreview_view.aod
index c0ecb2926bd1a2d73e4b9c1e9fe738a39265244e..bcbe4a50630ba341e2be3502d4b98a5717ddb07b 100644
--- a/neonView/PersonPreview_view/PersonPreview_view.aod
+++ b/neonView/PersonPreview_view/PersonPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PersonPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/PersonSimpleList_view/PersonSimpleList_view.aod b/neonView/PersonSimpleList_view/PersonSimpleList_view.aod
index 2f1efab373407d466ee9246b6bd8f3321e996c04..0407e8cccc2832026d26d3165dd50b138f109fd5 100644
--- a/neonView/PersonSimpleList_view/PersonSimpleList_view.aod
+++ b/neonView/PersonSimpleList_view/PersonSimpleList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PersonSimpleList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
@@ -17,7 +17,10 @@
       <subtitleField>LANGUAGE</subtitleField>
       <descriptionField>DEPARTMENT</descriptionField>
       <entityField>#ENTITY</entityField>
-      <linkedColumns />
+      <linkedColumns>
+        <element>FIRSTNAME</element>
+        <element>LASTNAME</element>
+      </linkedColumns>
       <fixedFilterFields />
       <columns>
         <neonTableColumn>
@@ -66,7 +69,10 @@
       <name>tree</name>
       <favoriteActionGroup1>filterViewActionGroup</favoriteActionGroup1>
       <entityField>#ENTITY</entityField>
-      <linkedColumns />
+      <linkedColumns>
+        <element>FIRSTNAME</element>
+        <element>LASTNAME</element>
+      </linkedColumns>
       <defaultGroupFields />
       <fixedFilterFields />
       <columns>
diff --git a/neonView/PersonTaskAppointment_view/PersonTaskAppointment_view.aod b/neonView/PersonTaskAppointment_view/PersonTaskAppointment_view.aod
index d23833c4c20d8838144196a95c81cd8ec57fa29f..655e857c6ede9c4a5f55865ab81729fb8f7b786e 100644
--- a/neonView/PersonTaskAppointment_view/PersonTaskAppointment_view.aod
+++ b/neonView/PersonTaskAppointment_view/PersonTaskAppointment_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PersonTaskAppointment_view</name>
   <title>ToDo</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/PrivatePersonFilter_view/PrivatePersonFilter_view.aod b/neonView/PrivatePersonFilter_view/PrivatePersonFilter_view.aod
index 3e106ebb254d6d7ae3657a443f0d6ca9241484f3..e794fe6574244ec5acbcee07cbf4b77a557b56ea 100644
--- a/neonView/PrivatePersonFilter_view/PrivatePersonFilter_view.aod
+++ b/neonView/PrivatePersonFilter_view/PrivatePersonFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PrivatePersonFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/PrivatePersonPreview_view/PrivatePersonPreview_view.aod b/neonView/PrivatePersonPreview_view/PrivatePersonPreview_view.aod
index 13f2b9fd014f79514b2417b247f8e079b5cee39a..51fe925b724839743ded63ea77cd62a24630ac3e 100644
--- a/neonView/PrivatePersonPreview_view/PrivatePersonPreview_view.aod
+++ b/neonView/PrivatePersonPreview_view/PrivatePersonPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>PrivatePersonPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/Prod2ProdEdit_view/Prod2ProdEdit_view.aod b/neonView/Prod2ProdEdit_view/Prod2ProdEdit_view.aod
index 6048f3f0bdfefff3c4b9228280e9fbd8580946eb..e6bb87875619a9f4abdb677bb4fc2b1c7d55f96c 100644
--- a/neonView/Prod2ProdEdit_view/Prod2ProdEdit_view.aod
+++ b/neonView/Prod2ProdEdit_view/Prod2ProdEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>Prod2ProdEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/Prod2prodFilter_view/Prod2prodFilter_view.aod b/neonView/Prod2prodFilter_view/Prod2prodFilter_view.aod
index e5bac593a143711913ac4408d3e13e45be910ef5..ff851bb55876efbd21049f0a5fdbc25231515877 100644
--- a/neonView/Prod2prodFilter_view/Prod2prodFilter_view.aod
+++ b/neonView/Prod2prodFilter_view/Prod2prodFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>Prod2prodFilter_view</name>
   <title>Parts list</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/ProductEdit_view/ProductEdit_view.aod b/neonView/ProductEdit_view/ProductEdit_view.aod
index 768f479d12d49821655426ff6908c69d9824cc27..9b3843d6625e17015dc6ca0bbcbf2ce3b71ec258 100644
--- a/neonView/ProductEdit_view/ProductEdit_view.aod
+++ b/neonView/ProductEdit_view/ProductEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ProductEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ProductFilter_view/ProductFilter_view.aod b/neonView/ProductFilter_view/ProductFilter_view.aod
index 87133854a0bf04645764e64768e6037d069b48b9..326ff54ed32004e8b87f9624e9d530a63f6d2daf 100644
--- a/neonView/ProductFilter_view/ProductFilter_view.aod
+++ b/neonView/ProductFilter_view/ProductFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ProductFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/ProductLookup_view/ProductLookup_view.aod b/neonView/ProductLookup_view/ProductLookup_view.aod
index e038ed3765c689f36212619cc246abf2196bd6f9..36f27e8de47cda7be24e5b9cec345ac9314ad878 100644
--- a/neonView/ProductLookup_view/ProductLookup_view.aod
+++ b/neonView/ProductLookup_view/ProductLookup_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ProductLookup_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/neonView/ProductLookup_view/documentation.adoc</documentation>
diff --git a/neonView/ProductMain_view/ProductMain_view.aod b/neonView/ProductMain_view/ProductMain_view.aod
index e284252e8f4b346b4d4a2269780e427e3fb13911..485f0f3903371e3a299f061354b64a4ca5aa99cc 100644
--- a/neonView/ProductMain_view/ProductMain_view.aod
+++ b/neonView/ProductMain_view/ProductMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ProductMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ProductPreview_view/ProductPreview_view.aod b/neonView/ProductPreview_view/ProductPreview_view.aod
index 61b9a8f77cd8b031702ff6bd1345c5950d7a79f2..f54cbe7485233114ad92b6bb0e3f25a605b5be67 100644
--- a/neonView/ProductPreview_view/ProductPreview_view.aod
+++ b/neonView/ProductPreview_view/ProductPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ProductPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ProductpriceEdit_view/ProductpriceEdit_view.aod b/neonView/ProductpriceEdit_view/ProductpriceEdit_view.aod
index f2c6e8dac43e719b5612feb930cdb341f50861df..9e99957324c3dc14566e94bcbf85eaacc6324759 100644
--- a/neonView/ProductpriceEdit_view/ProductpriceEdit_view.aod
+++ b/neonView/ProductpriceEdit_view/ProductpriceEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ProductpriceEdit_view</name>
   <title>Price list</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/ProductpriceFilter_view/ProductpriceFilter_view.aod b/neonView/ProductpriceFilter_view/ProductpriceFilter_view.aod
index f19f9c4d30be0d8b0db3961e302d3af219e437cb..13e9c8af8f143a58c18df8f906b2ec74f92a5a7b 100644
--- a/neonView/ProductpriceFilter_view/ProductpriceFilter_view.aod
+++ b/neonView/ProductpriceFilter_view/ProductpriceFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ProductpriceFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/ProductpriceForProductFilter_view/ProductpriceForProductFilter_view.aod b/neonView/ProductpriceForProductFilter_view/ProductpriceForProductFilter_view.aod
index 181e22f1cc5e9073ca8db6c1dfaafa913c95a38c..7bc95e10fa1a928b95dcf05bf834a9cdf8309b62 100644
--- a/neonView/ProductpriceForProductFilter_view/ProductpriceForProductFilter_view.aod
+++ b/neonView/ProductpriceForProductFilter_view/ProductpriceForProductFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ProductpriceForProductFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/ProductpricePreview_view/ProductpricePreview_view.aod b/neonView/ProductpricePreview_view/ProductpricePreview_view.aod
index bb516112119a7134549491a865cba256ce618926..3a26703ba701303d135ea2e88634e3c7eeb0c3ab 100644
--- a/neonView/ProductpricePreview_view/ProductpricePreview_view.aod
+++ b/neonView/ProductpricePreview_view/ProductpricePreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ProductpricePreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/ProductpriceRelation_view/ProductpriceRelation_view.aod b/neonView/ProductpriceRelation_view/ProductpriceRelation_view.aod
index 9d054a7e57691b5b48be9092463cbc2dc7cbf86a..fa3d850171314d13ecb551fd4763a5d89cba15ac 100644
--- a/neonView/ProductpriceRelation_view/ProductpriceRelation_view.aod
+++ b/neonView/ProductpriceRelation_view/ProductpriceRelation_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>ProductpriceRelation_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/QuickEntryEdit_view/QuickEntryEdit_view.aod b/neonView/QuickEntryEdit_view/QuickEntryEdit_view.aod
index 9598c3420b1a7b9b9a6128c50848a370f9f61a62..5947deaa524c6d7df96960848e32206aa11fbdb5 100644
--- a/neonView/QuickEntryEdit_view/QuickEntryEdit_view.aod
+++ b/neonView/QuickEntryEdit_view/QuickEntryEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>QuickEntryEdit_view</name>
   <title>Quick Entry</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/RoleChildrenEdit_view/RoleChildrenEdit_view.aod b/neonView/RoleChildrenEdit_view/RoleChildrenEdit_view.aod
index 8dd7cd21a6314df94d3d7ef2882f6ec6f442e9d9..4ba793b4c4ab7586cc8f827015b8c23d057311de 100644
--- a/neonView/RoleChildrenEdit_view/RoleChildrenEdit_view.aod
+++ b/neonView/RoleChildrenEdit_view/RoleChildrenEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>RoleChildrenEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/RoleChildrenList_view/RoleChildrenList_view.aod b/neonView/RoleChildrenList_view/RoleChildrenList_view.aod
index ada141eeefbfbf0e0e287e56ad32182a097eabaa..149c223100cad88892c6fb383da176b690ca0a30 100644
--- a/neonView/RoleChildrenList_view/RoleChildrenList_view.aod
+++ b/neonView/RoleChildrenList_view/RoleChildrenList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>RoleChildrenList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/RoleEdit_view/RoleEdit_view.aod b/neonView/RoleEdit_view/RoleEdit_view.aod
index 55cdf1755635363d6cf92304033ea876a309e5a5..48efe4546a64c0e146d9c6bcb5464612aae6047c 100644
--- a/neonView/RoleEdit_view/RoleEdit_view.aod
+++ b/neonView/RoleEdit_view/RoleEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>RoleEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/RoleFilter_view/RoleFilter_view.aod b/neonView/RoleFilter_view/RoleFilter_view.aod
index 612096e53f13856ffecdd786ed760b697a96d532..41cdd7eb8720909b3d33774e577d596082afe6f6 100644
--- a/neonView/RoleFilter_view/RoleFilter_view.aod
+++ b/neonView/RoleFilter_view/RoleFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>RoleFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/RoleMain_view/RoleMain_view.aod b/neonView/RoleMain_view/RoleMain_view.aod
index f63cba1a93f91c381f83b8027fad0e5de2c79602..435f4e497dc2c38cbce0befdb5b78646e2e2d94f 100644
--- a/neonView/RoleMain_view/RoleMain_view.aod
+++ b/neonView/RoleMain_view/RoleMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>RoleMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/RoleParentList_view/RoleParentList_view.aod b/neonView/RoleParentList_view/RoleParentList_view.aod
index 2a2073e31961aeda39ace51d84243065d475c40b..357f92e53732c38b1de3f682ce6dff5fe3cab63d 100644
--- a/neonView/RoleParentList_view/RoleParentList_view.aod
+++ b/neonView/RoleParentList_view/RoleParentList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>RoleParentList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/RolePreview_view/RolePreview_view.aod b/neonView/RolePreview_view/RolePreview_view.aod
index 5f62a43c2caaa2c4fd4bdd68748bc809f3efe66c..1c58e0710e0bdc8b9a1ec2c7b7b5ef2c6ebaf53a 100644
--- a/neonView/RolePreview_view/RolePreview_view.aod
+++ b/neonView/RolePreview_view/RolePreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>RolePreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/SalesprojectAnalysesPhases_view/SalesprojectAnalysesPhases_view.aod b/neonView/SalesprojectAnalysesPhases_view/SalesprojectAnalysesPhases_view.aod
index 86524aca75abcc6f73c19fd30aee8cc986ead6b1..585ee4502b9063d4bed17224a54eb0de6691353a 100644
--- a/neonView/SalesprojectAnalysesPhases_view/SalesprojectAnalysesPhases_view.aod
+++ b/neonView/SalesprojectAnalysesPhases_view/SalesprojectAnalysesPhases_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectAnalysesPhases_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/SalesprojectAnalyses_view/SalesprojectAnalyses_view.aod b/neonView/SalesprojectAnalyses_view/SalesprojectAnalyses_view.aod
index 1228d3cc49bdac80030aec42937bcdb4fc9c643a..31cd51c26b8a97b080e8c01fafaf48c5457215b7 100644
--- a/neonView/SalesprojectAnalyses_view/SalesprojectAnalyses_view.aod
+++ b/neonView/SalesprojectAnalyses_view/SalesprojectAnalyses_view.aod
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectAnalyses_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
   <dashletConfigurations>
     <neonDashletConfiguration>
       <name>SalesprojectPhases</name>
-      <title>Salesproject phases</title>
+      <title>Sales Project Phases</title>
       <description>Shows how many sales projects are in the various sales phases</description>
-      <fragment>Salesproject/filter?search=eyJ0eXBlIjoiZ3JvdXAiLCJvcGVyYXRvciI6IkFORCIsImNoaWxkcyI6W3sidHlwZSI6InJvdyIsIm5hbWUiOiJQSEFTRSIsIm9wZXJhdG9yIjoiTk9UX0VRVUFMIiwidmFsdWUiOiJOZWdvdGlhdGlvbiIsImtleSI6IlNBTFBST0pQSEFTRU5FR08iLCJjb250ZW50dHlwZSI6IlRFWFQifV19&amp;axes=COUNT&amp;grouping=%23EXTENSION.Phase_filterExtention.Phase_filterExtention%23TEXT</fragment>
+      <fragment>Salesproject/filter?search=eyJ0eXBlIjoiZ3JvdXAiLCJvcGVyYXRvciI6IkFORCIsImNoaWxkcyI6W3sidHlwZSI6InJvdyIsIm5hbWUiOiJQSEFTRSIsIm9wZXJhdG9yIjoiTk9UX0VRVUFMIiwidmFsdWUiOiJOZWdvdGlhdGlvbiIsImtleSI6IlNBTFBST0pQSEFTRU5FR08iLCJjb250ZW50dHlwZSI6IlRFWFQifSx7InR5cGUiOiJyb3ciLCJuYW1lIjoiU1RBVFVTIiwib3BlcmF0b3IiOiJFUVVBTCIsInZhbHVlIjoiT2ZmZW4iLCJrZXkiOiJTQUxQUk9KU1RBVE9QRU4iLCJjb250ZW50dHlwZSI6IlRFWFQifV19&amp;axes=COUNT&amp;grouping=%23EXTENSION.Phase_filterExtention.Phase_filterExtention%23TEXT</fragment>
       <singleton v="true" />
       <storeRoles>
         <element>PROJECT_FieldStaff</element>
diff --git a/neonView/SalesprojectConversionRate_view/SalesprojectConversionRate_view.aod b/neonView/SalesprojectConversionRate_view/SalesprojectConversionRate_view.aod
index dfb2ef2e310f8697d97db79098d64d03f61f8b7f..23306b3f473e21cf166464ba3c879b7b70eea253 100644
--- a/neonView/SalesprojectConversionRate_view/SalesprojectConversionRate_view.aod
+++ b/neonView/SalesprojectConversionRate_view/SalesprojectConversionRate_view.aod
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectConversionRate_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
   <dashletConfigurations>
     <neonDashletConfiguration>
       <name>ConvertionRates</name>
-      <title>Salesproject Convertion Rates</title>
+      <title>Sales Project Convertion Rates</title>
       <description>Shows the different conversion rates of the sales project phases</description>
       <fragment>SalesprojectConversionRate/filter?search=eyJ0eXBlIjoiZ3JvdXAiLCJvcGVyYXRvciI6IkFORCIsImNoaWxkcyI6W3sidHlwZSI6InJvdyIsIm5hbWUiOiIjRVhURU5TSU9OLkRBVEVfU1RBUlQuREFURV9TVEFSVCNEQVRFIiwib3BlcmF0b3IiOiJUSU1FRlJBTUVfRVFVQUwiLCJ2YWx1ZSI6IkRpZXNlcyBKYWhyIiwia2V5IjoiUkVMPUFESlVTVEVEO1VOSVQ9WUVBUiIsImNvbnRlbnR0eXBlIjoiREFURSJ9XX0%3D&amp;axes=conversionRate&amp;grouping=AB_KEYWORD_ENTRYID_KEYID%2C%23EXTENSION.Month.Month%23NUMBER</fragment>
       <singleton v="true" />
diff --git a/neonView/SalesprojectEdit_view/SalesprojectEdit_view.aod b/neonView/SalesprojectEdit_view/SalesprojectEdit_view.aod
index afcbeee47f90b46c036d3b0a22e5a903640b6dd7..4481932076af4ee1851c16be69a4c154f4455e83 100644
--- a/neonView/SalesprojectEdit_view/SalesprojectEdit_view.aod
+++ b/neonView/SalesprojectEdit_view/SalesprojectEdit_view.aod
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectEdit_view</name>
-  <title>Salesproject</title>
+  <title>Sales Project</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <icon>VAADIN:FILTER</icon>
   <quickEntry v="6" />
diff --git a/neonView/SalesprojectFilter_view/SalesprojectFilter_view.aod b/neonView/SalesprojectFilter_view/SalesprojectFilter_view.aod
index c055908d5269a0ba8e895e831523b86782eda5a0..6a613d6f1d48c3c725635e204ddbdf21dbcdce35 100644
--- a/neonView/SalesprojectFilter_view/SalesprojectFilter_view.aod
+++ b/neonView/SalesprojectFilter_view/SalesprojectFilter_view.aod
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
   <dashletConfigurations>
     <neonDashletConfiguration>
       <name>AllSalesprojectDashlet</name>
-      <title>Salesprojects</title>
+      <title>Sales Projects</title>
       <description>Show all salesprojects</description>
       <fragment>Salesproject/filter</fragment>
       <singleton v="true" />
@@ -25,7 +25,7 @@
     </neonDashletConfiguration>
     <neonDashletConfiguration>
       <name>OpenSalesprojectsDashlet</name>
-      <title>Open salesprojects</title>
+      <title>Open Salesprojects</title>
       <description>Show open salesprojects</description>
       <fragment>Salesproject/filter?search=eyJ0eXBlIjoiZ3JvdXAiLCJvcGVyYXRvciI6IkFORCIsImNoaWxkcyI6W3sidHlwZSI6InJvdyIsIm5hbWUiOiJTVEFUVVMiLCJvcGVyYXRvciI6IkVRVUFMIiwidmFsdWUiOiJPZmZlbiIsImtleSI6IlNBTFBST0pTVEFUT1BFTiAgICAgICAgICAgICAgICAgICAgICIsImNvbnRlbnR0eXBlIjoiVEVYVCJ9XX0%253D</fragment>
       <singleton v="true" />
diff --git a/neonView/SalesprojectForecastDrawer_view/SalesprojectForecastDrawer_view.aod b/neonView/SalesprojectForecastDrawer_view/SalesprojectForecastDrawer_view.aod
index 734f3f44872a286e5ef96bd6b0ca0cb6e4ce2a72..ef00bdc11ab18400b4c337c04b8282e0af7b4075 100644
--- a/neonView/SalesprojectForecastDrawer_view/SalesprojectForecastDrawer_view.aod
+++ b/neonView/SalesprojectForecastDrawer_view/SalesprojectForecastDrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectForecastDrawer_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/SalesprojectFurtherInfo_view/SalesprojectFurtherInfo_view.aod b/neonView/SalesprojectFurtherInfo_view/SalesprojectFurtherInfo_view.aod
index d222b3f65922dbbc72d07b5fbd006edaf3b70049..eb51c7978c5b83cf2c135d4f5b32258314100817 100644
--- a/neonView/SalesprojectFurtherInfo_view/SalesprojectFurtherInfo_view.aod
+++ b/neonView/SalesprojectFurtherInfo_view/SalesprojectFurtherInfo_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectFurtherInfo_view</name>
   <title>Further informations</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/SalesprojectMain_view/SalesprojectMain_view.aod b/neonView/SalesprojectMain_view/SalesprojectMain_view.aod
index 9098e124f358def2d86451abbac946a00b6cd0aa..aa59a86526931e5d4dd148565544cbf8abb1da59 100644
--- a/neonView/SalesprojectMain_view/SalesprojectMain_view.aod
+++ b/neonView/SalesprojectMain_view/SalesprojectMain_view.aod
@@ -1,19 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
     <masterSlaveLayout>
       <name>layout</name>
-      <master>04b5a305-b2a6-481a-83a5-1d94bee08143</master>
+      <master>eaee3a77-a3d8-4f0c-969a-da232b0c9537</master>
     </masterSlaveLayout>
   </layout>
   <children>
-    <neonViewReference>
-      <name>04b5a305-b2a6-481a-83a5-1d94bee08143</name>
-      <entityField>#ENTITY</entityField>
-      <view>SalesprojectPreview_view</view>
-    </neonViewReference>
     <neonViewReference>
       <name>673a34c7-5781-4c72-b0c8-944f1e5de9c6</name>
       <entityField>#ENTITY</entityField>
@@ -69,5 +64,10 @@
       <entityField>LogHistories</entityField>
       <view>LogHistoryFilter_view</view>
     </neonViewReference>
+    <neonViewReference>
+      <name>eaee3a77-a3d8-4f0c-969a-da232b0c9537</name>
+      <entityField>#ENTITY</entityField>
+      <view>SalesprojectPreview_view</view>
+    </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/SalesprojectMemberActivity_view/SalesprojectMemberActivity_view.aod b/neonView/SalesprojectMemberActivity_view/SalesprojectMemberActivity_view.aod
index 98ba3483820636c06b23c3d811f64035ae0143c3..f66c853a872bfe29fb2773fc4ab8b65afc62faaa 100644
--- a/neonView/SalesprojectMemberActivity_view/SalesprojectMemberActivity_view.aod
+++ b/neonView/SalesprojectMemberActivity_view/SalesprojectMemberActivity_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectMemberActivity_view</name>
   <title>Project</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/SalesprojectMilestoneChartPhase_view/SalesprojectMilestoneChartPhase_view.aod b/neonView/SalesprojectMilestoneChartPhase_view/SalesprojectMilestoneChartPhase_view.aod
index 2d7a4e08733c7f80c86a9ccc230bf382dfd1f231..8902d3ad1159832dc955e0d0bcb6026ac5fbb30e 100644
--- a/neonView/SalesprojectMilestoneChartPhase_view/SalesprojectMilestoneChartPhase_view.aod
+++ b/neonView/SalesprojectMilestoneChartPhase_view/SalesprojectMilestoneChartPhase_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectMilestoneChartPhase_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/SalesprojectMilestoneChartState_view/SalesprojectMilestoneChartState_view.aod b/neonView/SalesprojectMilestoneChartState_view/SalesprojectMilestoneChartState_view.aod
index 504c39d8affce88311959a90641cb9caf6572156..6509031c9d4a4679a223793017b98a8738421f3a 100644
--- a/neonView/SalesprojectMilestoneChartState_view/SalesprojectMilestoneChartState_view.aod
+++ b/neonView/SalesprojectMilestoneChartState_view/SalesprojectMilestoneChartState_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectMilestoneChartState_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/SalesprojectMilestoneInfo_view/SalesprojectMilestoneInfo_view.aod b/neonView/SalesprojectMilestoneInfo_view/SalesprojectMilestoneInfo_view.aod
index 178eb3816ff68e66731ce8faa605c31de9295f53..ab5a53fc87ece63bfae6f35cfdfcd5feab9e09e8 100644
--- a/neonView/SalesprojectMilestoneInfo_view/SalesprojectMilestoneInfo_view.aod
+++ b/neonView/SalesprojectMilestoneInfo_view/SalesprojectMilestoneInfo_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectMilestoneInfo_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/SalesprojectMilestoneSource_view/SalesprojectMilestoneSource_view.aod b/neonView/SalesprojectMilestoneSource_view/SalesprojectMilestoneSource_view.aod
index 91f395b0f3c43bdd0ebfe9286f8716dbbba1b49e..0d8d9846cb0a1f542382e7b0a12d167343614d80 100644
--- a/neonView/SalesprojectMilestoneSource_view/SalesprojectMilestoneSource_view.aod
+++ b/neonView/SalesprojectMilestoneSource_view/SalesprojectMilestoneSource_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectMilestoneSource_view</name>
   <title>Occurrences</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/SalesprojectMilestone_view/SalesprojectMilestone_view.aod b/neonView/SalesprojectMilestone_view/SalesprojectMilestone_view.aod
index 990d8b1506642f35cb21cbf2d441417a1fdefcc9..94e96382d7df7b9abe57c38ede0122cdf84eb4cb 100644
--- a/neonView/SalesprojectMilestone_view/SalesprojectMilestone_view.aod
+++ b/neonView/SalesprojectMilestone_view/SalesprojectMilestone_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectMilestone_view</name>
   <title></title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/SalesprojectMultiEdit_view/SalesprojectMultiEdit_view.aod b/neonView/SalesprojectMultiEdit_view/SalesprojectMultiEdit_view.aod
index 898af789d603f74dcafa0f8fa4937dc8ceeafb2f..4e60e5354ec052d79548231412552b16666b172b 100644
--- a/neonView/SalesprojectMultiEdit_view/SalesprojectMultiEdit_view.aod
+++ b/neonView/SalesprojectMultiEdit_view/SalesprojectMultiEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectMultiEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/SalesprojectOfferForecastChart_view/SalesprojectOfferForecastChart_view.aod b/neonView/SalesprojectOfferForecastChart_view/SalesprojectOfferForecastChart_view.aod
index 3423f5ee4f8b7bf6a08760be462a70e5d493c36b..80f3892c0d5b0f8d80ecbb03c6a68a36ad0c70bb 100644
--- a/neonView/SalesprojectOfferForecastChart_view/SalesprojectOfferForecastChart_view.aod
+++ b/neonView/SalesprojectOfferForecastChart_view/SalesprojectOfferForecastChart_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectOfferForecastChart_view</name>
   <title>Forecast</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/SalesprojectOfferForecast_view/SalesprojectOfferForecast_view.aod b/neonView/SalesprojectOfferForecast_view/SalesprojectOfferForecast_view.aod
index 2136aaa7a4b41cb8fe1dba81d552181f68c34498..417bad86b86fd87bc15e89b4b188cfef01dba944 100644
--- a/neonView/SalesprojectOfferForecast_view/SalesprojectOfferForecast_view.aod
+++ b/neonView/SalesprojectOfferForecast_view/SalesprojectOfferForecast_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectOfferForecast_view</name>
   <title></title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/SalesprojectOverview_view/SalesprojectOverview_view.aod b/neonView/SalesprojectOverview_view/SalesprojectOverview_view.aod
index 9a84bbb876ca23e4febca4440f2caaddaf6c263b..0485dce3b2893fefcff1a71c4e844df640faafef 100644
--- a/neonView/SalesprojectOverview_view/SalesprojectOverview_view.aod
+++ b/neonView/SalesprojectOverview_view/SalesprojectOverview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectOverview_view</name>
   <title>Overview</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/SalesprojectPhaseStep_view/SalesprojectPhaseStep_view.aod b/neonView/SalesprojectPhaseStep_view/SalesprojectPhaseStep_view.aod
index 4d42cd968e9def7411f919c6ffd7bf9ef8412832..eef84fe84ee45c0c49d1525652b53d27a72e3acb 100644
--- a/neonView/SalesprojectPhaseStep_view/SalesprojectPhaseStep_view.aod
+++ b/neonView/SalesprojectPhaseStep_view/SalesprojectPhaseStep_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectPhaseStep_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/SalesprojectPhase_view/SalesprojectPhase_view.aod b/neonView/SalesprojectPhase_view/SalesprojectPhase_view.aod
index 108a0a83781c41cb6fb918c83c504547cd29f3ed..b00f3193429bf48db4d1b872bac8f9fe3dfeb0f3 100644
--- a/neonView/SalesprojectPhase_view/SalesprojectPhase_view.aod
+++ b/neonView/SalesprojectPhase_view/SalesprojectPhase_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectPhase_view</name>
   <title>Phase</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/SalesprojectPreview_view/SalesprojectPreview_view.aod b/neonView/SalesprojectPreview_view/SalesprojectPreview_view.aod
index fcabc60c03fecf7634d1b6317d0fba64e5e7b11c..18e8b14dc7b017b2c4fdfb3652ec0a04ff46993c 100644
--- a/neonView/SalesprojectPreview_view/SalesprojectPreview_view.aod
+++ b/neonView/SalesprojectPreview_view/SalesprojectPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
@@ -73,6 +73,10 @@
           <name>bf7ecf7a-3d7f-4ec8-867a-c10ced346343</name>
           <entityField>TIMETRACKINGSUM</entityField>
         </entityFieldLink>
+        <entityFieldLink>
+          <name>9379bf8c-32a3-4255-92db-5336e9b2c948</name>
+          <entityField>MST_TEAM_ID</entityField>
+        </entityFieldLink>
       </fields>
     </genericViewTemplate>
     <genericViewTemplate>
diff --git a/neonView/SalesprojectScoreCard_view/SalesprojectScoreCard_view.aod b/neonView/SalesprojectScoreCard_view/SalesprojectScoreCard_view.aod
index d56d4278c12fe6fee75cb02baca95041ecd617f9..b67ff0f9c15d416e4218167b42334e028067034d 100644
--- a/neonView/SalesprojectScoreCard_view/SalesprojectScoreCard_view.aod
+++ b/neonView/SalesprojectScoreCard_view/SalesprojectScoreCard_view.aod
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectScoreCard_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <dashletConfigurations>
     <neonDashletConfiguration>
       <name>KeyFigures</name>
-      <title>Key figures</title>
+      <title>Key Figures</title>
       <description>Most important salse key figures</description>
       <fragment>SalesprojectAnalyses/full</fragment>
       <singleton v="true" />
diff --git a/neonView/SalesprojectSourceDrawer_view/SalesprojectSourceDrawer_view.aod b/neonView/SalesprojectSourceDrawer_view/SalesprojectSourceDrawer_view.aod
index 7bdd751a12baaa39512875c500cbaf49e5247b50..abcf6c15c2cf73f3b534325404064d78cda80142 100644
--- a/neonView/SalesprojectSourceDrawer_view/SalesprojectSourceDrawer_view.aod
+++ b/neonView/SalesprojectSourceDrawer_view/SalesprojectSourceDrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectSourceDrawer_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/SalesprojectSourceEdit_view/SalesprojectSourceEdit_view.aod b/neonView/SalesprojectSourceEdit_view/SalesprojectSourceEdit_view.aod
index 056fcc4af211527fda469af4fa6ae96e8a8abdd9..8eae1eea4db9a8177d89abd1d09ff435440f5dd2 100644
--- a/neonView/SalesprojectSourceEdit_view/SalesprojectSourceEdit_view.aod
+++ b/neonView/SalesprojectSourceEdit_view/SalesprojectSourceEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectSourceEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/SalesprojectSourceFilter_view/SalesprojectSourceFilter_view.aod b/neonView/SalesprojectSourceFilter_view/SalesprojectSourceFilter_view.aod
index ca41ad24d87b50d8d5ab56b98bc517506176fc93..1573062e0f5267f09a2ea942104d50214b42b571 100644
--- a/neonView/SalesprojectSourceFilter_view/SalesprojectSourceFilter_view.aod
+++ b/neonView/SalesprojectSourceFilter_view/SalesprojectSourceFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectSourceFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/SalesprojectSourcePreview_view/SalesprojectSourcePreview_view.aod b/neonView/SalesprojectSourcePreview_view/SalesprojectSourcePreview_view.aod
index b71758441e628d82806f8c5df2622c71f7d3fbbf..e95fd39683b473ea306e83bf882772047304de6d 100644
--- a/neonView/SalesprojectSourcePreview_view/SalesprojectSourcePreview_view.aod
+++ b/neonView/SalesprojectSourcePreview_view/SalesprojectSourcePreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalesprojectSourcePreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/SalutationEdit_view/SalutationEdit_view.aod b/neonView/SalutationEdit_view/SalutationEdit_view.aod
index 3179d62093fcc07b1f389b13d5cb250ba2706d28..3b05b5cf8a19bc82bfc88167e24b5e83c9f39754 100644
--- a/neonView/SalutationEdit_view/SalutationEdit_view.aod
+++ b/neonView/SalutationEdit_view/SalutationEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalutationEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/SalutationFilter_view/SalutationFilter_view.aod b/neonView/SalutationFilter_view/SalutationFilter_view.aod
index d424e3369026a46a995b7a418cbf838ac36568c2..97206dab2459f0e9c92a37ddd5543dd8da87d729 100644
--- a/neonView/SalutationFilter_view/SalutationFilter_view.aod
+++ b/neonView/SalutationFilter_view/SalutationFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SalutationFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/SerialLetterAddRecipientsEdit_view/SerialLetterAddRecipientsEdit_view.aod b/neonView/SerialLetterAddRecipientsEdit_view/SerialLetterAddRecipientsEdit_view.aod
index cc896e3f349b75903b76419669dc8a6114b1dbd8..7e51a80a470e653c2f6c30c8dd65ea8870f92643 100644
--- a/neonView/SerialLetterAddRecipientsEdit_view/SerialLetterAddRecipientsEdit_view.aod
+++ b/neonView/SerialLetterAddRecipientsEdit_view/SerialLetterAddRecipientsEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SerialLetterAddRecipientsEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/SerialLetterEdit_view/SerialLetterEdit_view.aod b/neonView/SerialLetterEdit_view/SerialLetterEdit_view.aod
index f5d1223b1ab523e83dc460aa673a453ea907aeed..4ffcf6004ca765546cbbf164895c9977e6f29323 100644
--- a/neonView/SerialLetterEdit_view/SerialLetterEdit_view.aod
+++ b/neonView/SerialLetterEdit_view/SerialLetterEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SerialLetterEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/SerialLetterFilter_view/SerialLetterFilter_view.aod b/neonView/SerialLetterFilter_view/SerialLetterFilter_view.aod
index b95fda0d5aa82fbe89860b1c2df7197bdfa39a30..45ba687a677384da11a8a7434ae28991ecd293c9 100644
--- a/neonView/SerialLetterFilter_view/SerialLetterFilter_view.aod
+++ b/neonView/SerialLetterFilter_view/SerialLetterFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SerialLetterFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/SerialLetterMain_view/SerialLetterMain_view.aod b/neonView/SerialLetterMain_view/SerialLetterMain_view.aod
index 1c9cdf0b094bc41c4fc264dd198c2ac56591c065..2c7a25adb74fd3598f77d1590f572caf8739702e 100644
--- a/neonView/SerialLetterMain_view/SerialLetterMain_view.aod
+++ b/neonView/SerialLetterMain_view/SerialLetterMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SerialLetterMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/SerialLetterPreview_view/SerialLetterPreview_view.aod b/neonView/SerialLetterPreview_view/SerialLetterPreview_view.aod
index 14abcef6de4adcdc3e866f711d2b2df2d6d9a7af..38949d8ec56ee5dcb6c082d3897784297e63820a 100644
--- a/neonView/SerialLetterPreview_view/SerialLetterPreview_view.aod
+++ b/neonView/SerialLetterPreview_view/SerialLetterPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SerialLetterPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/StockCount_view/StockCount_view.aod b/neonView/StockCount_view/StockCount_view.aod
index 20dd00eaeeb153506498a266e54d8e63495a4c0c..ace71cf33101c853f465866cc8df870d33056852 100644
--- a/neonView/StockCount_view/StockCount_view.aod
+++ b/neonView/StockCount_view/StockCount_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>StockCount_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/StockEdit_view/StockEdit_view.aod b/neonView/StockEdit_view/StockEdit_view.aod
index d82707019442985242b16ff9a393312e2b45493f..227ab14331f8f89ab39b2ebdf5c5cfc7d77268f0 100644
--- a/neonView/StockEdit_view/StockEdit_view.aod
+++ b/neonView/StockEdit_view/StockEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>StockEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/StockFilter_view/StockFilter_view.aod b/neonView/StockFilter_view/StockFilter_view.aod
index cad57413e4d53e58c0299304425d869b393aaa75..f5c09966799986e6fcc8262addf213c9675e6274 100644
--- a/neonView/StockFilter_view/StockFilter_view.aod
+++ b/neonView/StockFilter_view/StockFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>StockFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/SupportTicketEdit_view/SupportTicketEdit_view.aod b/neonView/SupportTicketEdit_view/SupportTicketEdit_view.aod
index aa9a3396de0262e9f69752d5a73aded63596ce0f..b78c65c1ded5d7eff3dd736a8699d3df1006e274 100644
--- a/neonView/SupportTicketEdit_view/SupportTicketEdit_view.aod
+++ b/neonView/SupportTicketEdit_view/SupportTicketEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SupportTicketEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/SupportTicketFilter_view/SupportTicketFilter_view.aod b/neonView/SupportTicketFilter_view/SupportTicketFilter_view.aod
index 6dc1c376ae6f99ba2a9c57624194e4b709e1365a..97892017ec83aa58850ddf21f0eee546f860d714 100644
--- a/neonView/SupportTicketFilter_view/SupportTicketFilter_view.aod
+++ b/neonView/SupportTicketFilter_view/SupportTicketFilter_view.aod
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SupportTicketFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
   <dashletConfigurations>
     <neonDashletConfiguration>
       <name>mytickets</name>
-      <title>My tickets</title>
+      <title>My Tickets</title>
       <description>Show tickets where I am the editor</description>
       <fragment>SupportTicket/filter</fragment>
       <singleton v="true" />
diff --git a/neonView/SupportTicketMain_view/SupportTicketMain_view.aod b/neonView/SupportTicketMain_view/SupportTicketMain_view.aod
index 529d000dc9df0098eb2e4ade7ef43fb483b06d04..8950edb1d40a24bda53be12a73d2b0091e7204aa 100644
--- a/neonView/SupportTicketMain_view/SupportTicketMain_view.aod
+++ b/neonView/SupportTicketMain_view/SupportTicketMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SupportTicketMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/SupportTicketPreview_view/SupportTicketPreview_view.aod b/neonView/SupportTicketPreview_view/SupportTicketPreview_view.aod
index 48b48a2a48f8e708592ca947d409de64ffa6243f..2495b76bd10974dd0de7b545a412cb688445c65a 100644
--- a/neonView/SupportTicketPreview_view/SupportTicketPreview_view.aod
+++ b/neonView/SupportTicketPreview_view/SupportTicketPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>SupportTicketPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/TaskEdit_view/TaskEdit_view.aod b/neonView/TaskEdit_view/TaskEdit_view.aod
index c71ca1b6b43b2522f704cd4bacf0e368e715fa34..c5c8e8e10919f377c08d3def4936a5f43df4b7bd 100644
--- a/neonView/TaskEdit_view/TaskEdit_view.aod
+++ b/neonView/TaskEdit_view/TaskEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TaskEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/TaskFilter_view/TaskFilter_view.aod b/neonView/TaskFilter_view/TaskFilter_view.aod
index e42baf0ab3dbc846a09889295e65fd2bf9e2df07..51c579c8f6067b0201dd1a6a38aa1dbae5def381 100644
--- a/neonView/TaskFilter_view/TaskFilter_view.aod
+++ b/neonView/TaskFilter_view/TaskFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TaskFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
@@ -16,7 +16,7 @@
       <categories>
         <neonDashletCategory>
           <name>contactmanagement</name>
-          <title>Contactmanagement</title>
+          <title>Contact Management</title>
         </neonDashletCategory>
       </categories>
       <parameters>
diff --git a/neonView/TaskLinkFilter_view/TaskLinkFilter_view.aod b/neonView/TaskLinkFilter_view/TaskLinkFilter_view.aod
index f9e1e3aa8a206dd68d46341407e4d7091065f3e3..aff539498effc88b6aa7e7df2c6d06ff9fa79c3d 100644
--- a/neonView/TaskLinkFilter_view/TaskLinkFilter_view.aod
+++ b/neonView/TaskLinkFilter_view/TaskLinkFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TaskLinkFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/TaskLinkMultiEdit_view/TaskLinkMultiEdit_view.aod b/neonView/TaskLinkMultiEdit_view/TaskLinkMultiEdit_view.aod
index 04ab701524e9f56f8011af05f37ed687724ae34d..01b6cf513e96b3833d133cc74e9a11518c6ae97c 100644
--- a/neonView/TaskLinkMultiEdit_view/TaskLinkMultiEdit_view.aod
+++ b/neonView/TaskLinkMultiEdit_view/TaskLinkMultiEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TaskLinkMultiEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/TaskLinkPreviewList_view/TaskLinkPreviewList_view.aod b/neonView/TaskLinkPreviewList_view/TaskLinkPreviewList_view.aod
index 4427da0dd67d159beda9dabc88707711ad649aea..2cdff7d706296f0c3b6693743e684be1540d51b2 100644
--- a/neonView/TaskLinkPreviewList_view/TaskLinkPreviewList_view.aod
+++ b/neonView/TaskLinkPreviewList_view/TaskLinkPreviewList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TaskLinkPreviewList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/TaskLinkPreview_view/TaskLinkPreview_view.aod b/neonView/TaskLinkPreview_view/TaskLinkPreview_view.aod
index 14b9249b2862a6f1e2b60d7f229a4b7ae5003e8c..843b7a8efa97cb8796d0079499631f77132e47f4 100644
--- a/neonView/TaskLinkPreview_view/TaskLinkPreview_view.aod
+++ b/neonView/TaskLinkPreview_view/TaskLinkPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TaskLinkPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/TaskMain_view/TaskMain_view.aod b/neonView/TaskMain_view/TaskMain_view.aod
index ad38b461f3fc3cf9f54cacc711137d64e6c816f7..a2521203f37e786f6ea4daf6947729759df6debf 100644
--- a/neonView/TaskMain_view/TaskMain_view.aod
+++ b/neonView/TaskMain_view/TaskMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TaskMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/TaskPreview_view/TaskPreview_view.aod b/neonView/TaskPreview_view/TaskPreview_view.aod
index 82ac185b0f1e9de45ce3d8e6fcd7ce38489c488e..57ad1bd7618b2e123264c4ddd9f5a04678709078 100644
--- a/neonView/TaskPreview_view/TaskPreview_view.aod
+++ b/neonView/TaskPreview_view/TaskPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TaskPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/TimetrackingAnalysesDrawer_view/TimetrackingAnalysesDrawer_view.aod b/neonView/TimetrackingAnalysesDrawer_view/TimetrackingAnalysesDrawer_view.aod
index 17633107ed9899637cc94a15779f8aecdf3f2a43..fe8b4ddcb0bd914b31d1191913d0733a9b58ef60 100644
--- a/neonView/TimetrackingAnalysesDrawer_view/TimetrackingAnalysesDrawer_view.aod
+++ b/neonView/TimetrackingAnalysesDrawer_view/TimetrackingAnalysesDrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TimetrackingAnalysesDrawer_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/TimetrackingAnalyses_view/TimetrackingAnalyses_view.aod b/neonView/TimetrackingAnalyses_view/TimetrackingAnalyses_view.aod
index 2ea1d75c892375e2370252cfd070543b4f9386c9..eeddd0f26c96522a0632d0632a7b611ba1d2f966 100644
--- a/neonView/TimetrackingAnalyses_view/TimetrackingAnalyses_view.aod
+++ b/neonView/TimetrackingAnalyses_view/TimetrackingAnalyses_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TimetrackingAnalyses_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/TimetrackingDrawer_view/TimetrackingDrawer_view.aod b/neonView/TimetrackingDrawer_view/TimetrackingDrawer_view.aod
index 228cf5d6e7ed661a7bdf84fb2f01f6b1c6088ea9..b6bead1d562ef3518abab668271b3c238fcf9042 100644
--- a/neonView/TimetrackingDrawer_view/TimetrackingDrawer_view.aod
+++ b/neonView/TimetrackingDrawer_view/TimetrackingDrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TimetrackingDrawer_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/TimetrackingEdit_view/TimetrackingEdit_view.aod b/neonView/TimetrackingEdit_view/TimetrackingEdit_view.aod
index 231020b4962ac1c21622fe25641624037f7c1caa..fda8ae851dbd856d8437517806b3eabd2a84fe46 100644
--- a/neonView/TimetrackingEdit_view/TimetrackingEdit_view.aod
+++ b/neonView/TimetrackingEdit_view/TimetrackingEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TimetrackingEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/TimetrackingFilterAnalyses/TimetrackingFilterAnalyses.aod b/neonView/TimetrackingFilterAnalyses/TimetrackingFilterAnalyses.aod
index c0befff541865182bae70f41c7ab2914b5fc9982..6339c82f7e9e566f2080ca52ae1199e61496f597 100644
--- a/neonView/TimetrackingFilterAnalyses/TimetrackingFilterAnalyses.aod
+++ b/neonView/TimetrackingFilterAnalyses/TimetrackingFilterAnalyses.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TimetrackingFilterAnalyses</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/TimetrackingFilter_view/TimetrackingFilter_view.aod b/neonView/TimetrackingFilter_view/TimetrackingFilter_view.aod
index c05c5db874a747d5fb6c8e5803fafd6a5aea9c8a..6957ae22e8325b2bcd5e28c08088821c02793e0a 100644
--- a/neonView/TimetrackingFilter_view/TimetrackingFilter_view.aod
+++ b/neonView/TimetrackingFilter_view/TimetrackingFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TimetrackingFilter_view</name>
   <title>Timetracking</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/TimetrackingPreview_view/TimetrackingPreview_view.aod b/neonView/TimetrackingPreview_view/TimetrackingPreview_view.aod
index 1a76cbc61d1c1efc7b2d69f8775969944940d270..42f42a0e537aab4f104f9873c76bb7b69f7de2a1 100644
--- a/neonView/TimetrackingPreview_view/TimetrackingPreview_view.aod
+++ b/neonView/TimetrackingPreview_view/TimetrackingPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TimetrackingPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/TimetrackingScore_view/TimetrackingScore_view.aod b/neonView/TimetrackingScore_view/TimetrackingScore_view.aod
index 1efd3641c31f865130d06335522cd7f0c1c24e7b..c372f639c0327d404c9e839f4e9ea08e4e1634f3 100644
--- a/neonView/TimetrackingScore_view/TimetrackingScore_view.aod
+++ b/neonView/TimetrackingScore_view/TimetrackingScore_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TimetrackingScore_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/TurnoverChartForcastDrawer_view/TurnoverChartForcastDrawer_view.aod b/neonView/TurnoverChartForcastDrawer_view/TurnoverChartForcastDrawer_view.aod
index 602bf1fed837fbcd4c6261374cc0e939e716664c..7a404cd983357c2f88c453198178df2ee7e3fb9d 100644
--- a/neonView/TurnoverChartForcastDrawer_view/TurnoverChartForcastDrawer_view.aod
+++ b/neonView/TurnoverChartForcastDrawer_view/TurnoverChartForcastDrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TurnoverChartForcastDrawer_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/TurnoverChartForecast_view/TurnoverChartForecast_view.aod b/neonView/TurnoverChartForecast_view/TurnoverChartForecast_view.aod
index 962a05e05a00d3a8e3b14c9c13155b0e291e4191..87500b99d683f8d0001384ba295d1a366e199ad3 100644
--- a/neonView/TurnoverChartForecast_view/TurnoverChartForecast_view.aod
+++ b/neonView/TurnoverChartForecast_view/TurnoverChartForecast_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TurnoverChartForecast_view</name>
   <title>Forecast</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/TurnoverChart_view/TurnoverChart_view.aod b/neonView/TurnoverChart_view/TurnoverChart_view.aod
index 09c915ae244fe4d5a1f755ef287ef850ef2cd3c4..cbee81a152bb6881933cb9e535b541d9591ca5be 100644
--- a/neonView/TurnoverChart_view/TurnoverChart_view.aod
+++ b/neonView/TurnoverChart_view/TurnoverChart_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TurnoverChart_view</name>
   <title></title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/TurnoverTree_view/TurnoverTree_view.aod b/neonView/TurnoverTree_view/TurnoverTree_view.aod
index b8e357571efbdf7dba180bb5021456caba0582d7..baa0832aab033a184b4618ca2531c6fb85187447 100644
--- a/neonView/TurnoverTree_view/TurnoverTree_view.aod
+++ b/neonView/TurnoverTree_view/TurnoverTree_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TurnoverTree_view</name>
   <title>Tree</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/TwitterTimeline_view/TwitterTimeline_view.aod b/neonView/TwitterTimeline_view/TwitterTimeline_view.aod
index 167eb2982e309c2928a18e105d42ba7f84a93c40..7addad6331caf5831e8c6f491b1ff5e968c1faf5 100644
--- a/neonView/TwitterTimeline_view/TwitterTimeline_view.aod
+++ b/neonView/TwitterTimeline_view/TwitterTimeline_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>TwitterTimeline_view</name>
   <title>Twitter</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/UniversalFileProcessorDropzone_view/UniversalFileProcessorDropzone_view.aod b/neonView/UniversalFileProcessorDropzone_view/UniversalFileProcessorDropzone_view.aod
index 8072435ed1e7c2dd82d0177d949b9d1fea218418..8c66fbfacdd6d28d6d0ff3a1c92f57018f1a8f99 100644
--- a/neonView/UniversalFileProcessorDropzone_view/UniversalFileProcessorDropzone_view.aod
+++ b/neonView/UniversalFileProcessorDropzone_view/UniversalFileProcessorDropzone_view.aod
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>UniversalFileProcessorDropzone_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <dashletConfigurations>
     <neonDashletConfiguration>
       <name>MailDropzone</name>
-      <title>import mails</title>
+      <title>Import Mails</title>
       <description>Drop area for creating activities from mails</description>
       <fragment>UniversalFileProcessor/dropzone</fragment>
       <preview></preview>
diff --git a/neonView/UnlinkedMailFilter_view/UnlinkedMailFilter_view.aod b/neonView/UnlinkedMailFilter_view/UnlinkedMailFilter_view.aod
index 6b4b8b73154e60819b752b795acd9e93de7f23b5..819837d79cba717b39de586398655aa11e5719ee 100644
--- a/neonView/UnlinkedMailFilter_view/UnlinkedMailFilter_view.aod
+++ b/neonView/UnlinkedMailFilter_view/UnlinkedMailFilter_view.aod
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>UnlinkedMailFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <dashletConfigurations>
     <neonDashletConfiguration>
       <name>allUnlinkedMailsDashlet</name>
-      <title>All unlinked mails</title>
+      <title>All Unlinked Mails</title>
       <description>All mails that could not automatically linked are displayed here</description>
       <fragment>UnlinkedMail/filter</fragment>
       <icon>VAADIN:AT</icon>
diff --git a/neonView/UnlinkedMailMappingLinkList_view/UnlinkedMailMappingLinkList_view.aod b/neonView/UnlinkedMailMappingLinkList_view/UnlinkedMailMappingLinkList_view.aod
index 6be9cc5af6fe0afb70008e328e9c1c371239ac21..e6af4ffd56dae488afc4aa61c46401ab8c0d9e18 100644
--- a/neonView/UnlinkedMailMappingLinkList_view/UnlinkedMailMappingLinkList_view.aod
+++ b/neonView/UnlinkedMailMappingLinkList_view/UnlinkedMailMappingLinkList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>UnlinkedMailMappingLinkList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/UnlinkedMailMappingWrapperMapping_view/UnlinkedMailMappingWrapperMapping_view.aod b/neonView/UnlinkedMailMappingWrapperMapping_view/UnlinkedMailMappingWrapperMapping_view.aod
index dec9ecc2091d723dd1c8cc91780346fe776c9b53..c7ba9b2d1e72175cbaa81845e87210e0f0925f7b 100644
--- a/neonView/UnlinkedMailMappingWrapperMapping_view/UnlinkedMailMappingWrapperMapping_view.aod
+++ b/neonView/UnlinkedMailMappingWrapperMapping_view/UnlinkedMailMappingWrapperMapping_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>UnlinkedMailMappingWrapperMapping_view</name>
   <title>Link e-mail addresses to contacts</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/Userhelp_FilterView/Userhelp_FilterView.aod b/neonView/Userhelp_FilterView/Userhelp_FilterView.aod
index 88b815cc8abf6bce8158d4c51a19641f4f8dfb38..f49695009f37880d39cc452bc751d2f4d8e8093a 100644
--- a/neonView/Userhelp_FilterView/Userhelp_FilterView.aod
+++ b/neonView/Userhelp_FilterView/Userhelp_FilterView.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>Userhelp_FilterView</name>
   <title>Userhelp Ressources</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/UsersettingsEdit_view/UsersettingsEdit_view.aod b/neonView/UsersettingsEdit_view/UsersettingsEdit_view.aod
index 4a500fdf7246e1762edf965f7bb31092bfd8dd13..acf9e28696c70df383af74e953dbacfcc380e5be 100644
--- a/neonView/UsersettingsEdit_view/UsersettingsEdit_view.aod
+++ b/neonView/UsersettingsEdit_view/UsersettingsEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>UsersettingsEdit_view</name>
   <title>Settings</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/VisitPlanEmployeeWeekEdit_view/VisitPlanEmployeeWeekEdit_view.aod b/neonView/VisitPlanEmployeeWeekEdit_view/VisitPlanEmployeeWeekEdit_view.aod
index f4bb8a7d21fd3c6fb354e0a481161cc9ea5b7d59..f03e6f119f02094a0d9da7001fbd23b2fe6bb52d 100644
--- a/neonView/VisitPlanEmployeeWeekEdit_view/VisitPlanEmployeeWeekEdit_view.aod
+++ b/neonView/VisitPlanEmployeeWeekEdit_view/VisitPlanEmployeeWeekEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>VisitPlanEmployeeWeekEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/VisitPlanEmployeeWeekFilter_view/VisitPlanEmployeeWeekFilter_view.aod b/neonView/VisitPlanEmployeeWeekFilter_view/VisitPlanEmployeeWeekFilter_view.aod
index 6de254467a3bcc67474914322890efc32e456afb..bcbed30d9f5fe37b6f0a77b8831fd8d3a854f9dc 100644
--- a/neonView/VisitPlanEmployeeWeekFilter_view/VisitPlanEmployeeWeekFilter_view.aod
+++ b/neonView/VisitPlanEmployeeWeekFilter_view/VisitPlanEmployeeWeekFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>VisitPlanEmployeeWeekFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="false" />
diff --git a/neonView/VisitPlanEmployeeWeekMain_view/VisitPlanEmployeeWeekMain_view.aod b/neonView/VisitPlanEmployeeWeekMain_view/VisitPlanEmployeeWeekMain_view.aod
index 6bd22ba2b15c5b858651e3df4a95f1b69100c5d1..efed26c73422fb753624709735744f7d9e9d9fd9 100644
--- a/neonView/VisitPlanEmployeeWeekMain_view/VisitPlanEmployeeWeekMain_view.aod
+++ b/neonView/VisitPlanEmployeeWeekMain_view/VisitPlanEmployeeWeekMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>VisitPlanEmployeeWeekMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/VisitPlanEmployeeWeekPreview_view/VisitPlanEmployeeWeekPreview_view.aod b/neonView/VisitPlanEmployeeWeekPreview_view/VisitPlanEmployeeWeekPreview_view.aod
index ec7824e9dea6a39448816cd25514e31cd7b79504..4ecd6b51c19d3f68d1408be97dbdfbb9dd3e308b 100644
--- a/neonView/VisitPlanEmployeeWeekPreview_view/VisitPlanEmployeeWeekPreview_view.aod
+++ b/neonView/VisitPlanEmployeeWeekPreview_view/VisitPlanEmployeeWeekPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>VisitPlanEmployeeWeekPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/VisitPlanEntryEdit_view/VisitPlanEntryEdit_view.aod b/neonView/VisitPlanEntryEdit_view/VisitPlanEntryEdit_view.aod
index 4a216530f8c322ab9d408cf5e305e0423d473f33..4538a67ca213ef3211f832ad3d82c9471c1f3b19 100644
--- a/neonView/VisitPlanEntryEdit_view/VisitPlanEntryEdit_view.aod
+++ b/neonView/VisitPlanEntryEdit_view/VisitPlanEntryEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>VisitPlanEntryEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/VisitPlanEntryFilter_view/VisitPlanEntryFilter_view.aod b/neonView/VisitPlanEntryFilter_view/VisitPlanEntryFilter_view.aod
index 4233a41959165dbc19972cf740ef8fab1fdbece6..b514c136189ee96998f977ad5b170060dee690b0 100644
--- a/neonView/VisitPlanEntryFilter_view/VisitPlanEntryFilter_view.aod
+++ b/neonView/VisitPlanEntryFilter_view/VisitPlanEntryFilter_view.aod
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>VisitPlanEntryFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="false" />
   <dashletConfigurations>
     <neonDashletConfiguration>
       <name>currentWeek</name>
-      <title>my visit planning</title>
+      <title>My Visit Planning</title>
       <description>show visit planning of the week</description>
       <fragment>VisitPlanEntry/filter</fragment>
       <singleton v="true" />
diff --git a/neonView/VisitRecommendationEdit_view/VisitRecommendationEdit_view.aod b/neonView/VisitRecommendationEdit_view/VisitRecommendationEdit_view.aod
index d58550498e10e16ee96233d559788ae0c579063b..1c9a8ce3e804c6a74cf5734705451f6e1b4de277 100644
--- a/neonView/VisitRecommendationEdit_view/VisitRecommendationEdit_view.aod
+++ b/neonView/VisitRecommendationEdit_view/VisitRecommendationEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>VisitRecommendationEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/VisitRecommendationFilter_view/VisitRecommendationFilter_view.aod b/neonView/VisitRecommendationFilter_view/VisitRecommendationFilter_view.aod
index c841039215a5b2ef2c4b23d68650e385f56a3bcf..73cb8599d027fdde37a5abd28a12b7baef17c8d1 100644
--- a/neonView/VisitRecommendationFilter_view/VisitRecommendationFilter_view.aod
+++ b/neonView/VisitRecommendationFilter_view/VisitRecommendationFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>VisitRecommendationFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/WorkflowDefinitionDiagram_view/WorkflowDefinitionDiagram_view.aod b/neonView/WorkflowDefinitionDiagram_view/WorkflowDefinitionDiagram_view.aod
index 2cc729ddd7c65cdf2f1965a277e0c690b856fd7a..397400ecf304340d32603fa3a7097fdd2b3a904c 100644
--- a/neonView/WorkflowDefinitionDiagram_view/WorkflowDefinitionDiagram_view.aod
+++ b/neonView/WorkflowDefinitionDiagram_view/WorkflowDefinitionDiagram_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowDefinitionDiagram_view</name>
   <title>Diagram</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/WorkflowDefinitionEdit_view/WorkflowDefinitionEdit_view.aod b/neonView/WorkflowDefinitionEdit_view/WorkflowDefinitionEdit_view.aod
index d0aaeebbaa361abc7c40f805605710e08afe8167..aaaeeeef4d9a1dbf72aa1cf6da8d3ce28c7b59e8 100644
--- a/neonView/WorkflowDefinitionEdit_view/WorkflowDefinitionEdit_view.aod
+++ b/neonView/WorkflowDefinitionEdit_view/WorkflowDefinitionEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowDefinitionEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/WorkflowDefinitionFilter_view/WorkflowDefinitionFilter_view.aod b/neonView/WorkflowDefinitionFilter_view/WorkflowDefinitionFilter_view.aod
index 41ffef96290756599469bfd2da5878612c27a6d2..1dbcd14a3d241b0d3e04f5a75c7afc4fc452398b 100644
--- a/neonView/WorkflowDefinitionFilter_view/WorkflowDefinitionFilter_view.aod
+++ b/neonView/WorkflowDefinitionFilter_view/WorkflowDefinitionFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowDefinitionFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/WorkflowDefinitionMain_view/WorkflowDefinitionMain_view.aod b/neonView/WorkflowDefinitionMain_view/WorkflowDefinitionMain_view.aod
index 29de742a06ef3ab1002a499e8505752240873397..dcb755770f402a7c1f797babaa533c6cc1abdfb1 100644
--- a/neonView/WorkflowDefinitionMain_view/WorkflowDefinitionMain_view.aod
+++ b/neonView/WorkflowDefinitionMain_view/WorkflowDefinitionMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowDefinitionMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/WorkflowDefinitionPreview_view/WorkflowDefinitionPreview_view.aod b/neonView/WorkflowDefinitionPreview_view/WorkflowDefinitionPreview_view.aod
index 7f955c5616034ee3bc71ca328f071c2c5857c6cb..1a6d0acf0cfaace809129ad4cac82ca4386769b8 100644
--- a/neonView/WorkflowDefinitionPreview_view/WorkflowDefinitionPreview_view.aod
+++ b/neonView/WorkflowDefinitionPreview_view/WorkflowDefinitionPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowDefinitionPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/WorkflowInstanceDiagram_view/WorkflowInstanceDiagram_view.aod b/neonView/WorkflowInstanceDiagram_view/WorkflowInstanceDiagram_view.aod
index 98f6b6921707a9308b2a03fe386a4d951cf77197..3098a8033b510c3a4f8eb898338adfe5794742f8 100644
--- a/neonView/WorkflowInstanceDiagram_view/WorkflowInstanceDiagram_view.aod
+++ b/neonView/WorkflowInstanceDiagram_view/WorkflowInstanceDiagram_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowInstanceDiagram_view</name>
   <title>Diagram</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/WorkflowInstanceEdit_view/WorkflowInstanceEdit_view.aod b/neonView/WorkflowInstanceEdit_view/WorkflowInstanceEdit_view.aod
index 0d3e0c89b95fed64001f0f0b1f4314bb85eae42e..0f8aee6fc8c9f922bd2e48f634267fe81ccccb8d 100644
--- a/neonView/WorkflowInstanceEdit_view/WorkflowInstanceEdit_view.aod
+++ b/neonView/WorkflowInstanceEdit_view/WorkflowInstanceEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowInstanceEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/WorkflowInstanceFilter_view/WorkflowInstanceFilter_view.aod b/neonView/WorkflowInstanceFilter_view/WorkflowInstanceFilter_view.aod
index 4a851422779112622824df0992f1cea32e752166..fb3eb00201464f3daea0036102070b5f728583a1 100644
--- a/neonView/WorkflowInstanceFilter_view/WorkflowInstanceFilter_view.aod
+++ b/neonView/WorkflowInstanceFilter_view/WorkflowInstanceFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowInstanceFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/WorkflowInstanceHistoryFilter_view/WorkflowInstanceHistoryFilter_view.aod b/neonView/WorkflowInstanceHistoryFilter_view/WorkflowInstanceHistoryFilter_view.aod
index ff969c13fd5106db0abe14c18565a1da7b8d87d6..b823e3040909d66c3acb0bfa839c6f27769c359e 100644
--- a/neonView/WorkflowInstanceHistoryFilter_view/WorkflowInstanceHistoryFilter_view.aod
+++ b/neonView/WorkflowInstanceHistoryFilter_view/WorkflowInstanceHistoryFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowInstanceHistoryFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/WorkflowInstanceMain_view/WorkflowInstanceMain_view.aod b/neonView/WorkflowInstanceMain_view/WorkflowInstanceMain_view.aod
index 0511dbbb5dc37a9eea053915860b5ae314943c86..238558d5d61b83adcc93562fe393831ce39e43af 100644
--- a/neonView/WorkflowInstanceMain_view/WorkflowInstanceMain_view.aod
+++ b/neonView/WorkflowInstanceMain_view/WorkflowInstanceMain_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowInstanceMain_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/WorkflowInstancePreview_view/WorkflowInstancePreview_view.aod b/neonView/WorkflowInstancePreview_view/WorkflowInstancePreview_view.aod
index 6e02ae567d135a0da41e10c0d71ccdd96ccf1278..dfe0c117d85e19b1e34051c9df4150b8cfce9e67 100644
--- a/neonView/WorkflowInstancePreview_view/WorkflowInstancePreview_view.aod
+++ b/neonView/WorkflowInstancePreview_view/WorkflowInstancePreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowInstancePreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/WorkflowInstanceTasks_view/WorkflowInstanceTasks_view.aod b/neonView/WorkflowInstanceTasks_view/WorkflowInstanceTasks_view.aod
index 9755c12f76bf1d83ae8a510e83787ce387973138..29da6b3f7d6512f35153cdcfe3eab89dd672d20c 100644
--- a/neonView/WorkflowInstanceTasks_view/WorkflowInstanceTasks_view.aod
+++ b/neonView/WorkflowInstanceTasks_view/WorkflowInstanceTasks_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowInstanceTasks_view</name>
   <title>Tasks</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/neonView/WorkflowLauncherEdit_view/WorkflowLauncherEdit_view.aod b/neonView/WorkflowLauncherEdit_view/WorkflowLauncherEdit_view.aod
index 8445a151ff66a24ce57c908ad7f86bdd1d3094dd..db773e993fdb156c48c225f17ecff726183f917e 100644
--- a/neonView/WorkflowLauncherEdit_view/WorkflowLauncherEdit_view.aod
+++ b/neonView/WorkflowLauncherEdit_view/WorkflowLauncherEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowLauncherEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/WorkflowModelEdit_view/WorkflowModelEdit_view.aod b/neonView/WorkflowModelEdit_view/WorkflowModelEdit_view.aod
index b03c3813ded7ad328d49edd4da3f22ecd3656dac..9d0b6b9271e3504cc03625c27710f4e45d8672fe 100644
--- a/neonView/WorkflowModelEdit_view/WorkflowModelEdit_view.aod
+++ b/neonView/WorkflowModelEdit_view/WorkflowModelEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowModelEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/WorkflowModelLookup_view/WorkflowModelLookup_view.aod b/neonView/WorkflowModelLookup_view/WorkflowModelLookup_view.aod
index 051bb98fe84d47bcf0d18813b114e93eedf42076..cabc52d8e4857047e0f6a5fd8a71af4f31776e54 100644
--- a/neonView/WorkflowModelLookup_view/WorkflowModelLookup_view.aod
+++ b/neonView/WorkflowModelLookup_view/WorkflowModelLookup_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowModelLookup_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/WorkflowSignalEdit_view/WorkflowSignalEdit_view.aod b/neonView/WorkflowSignalEdit_view/WorkflowSignalEdit_view.aod
index 43ae59380522779a39c44e344ba411241ee7fe88..443eeb0d5e4cadadac035b615a124d7790133bcc 100644
--- a/neonView/WorkflowSignalEdit_view/WorkflowSignalEdit_view.aod
+++ b/neonView/WorkflowSignalEdit_view/WorkflowSignalEdit_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowSignalEdit_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/WorkflowSignalFilter_view/WorkflowSignalFilter_view.aod b/neonView/WorkflowSignalFilter_view/WorkflowSignalFilter_view.aod
index 3bfbce1fac88a64f8fb7643d021bd282331e970a..e0fe81e1c7622739a80d38d105f284b76a39fc49 100644
--- a/neonView/WorkflowSignalFilter_view/WorkflowSignalFilter_view.aod
+++ b/neonView/WorkflowSignalFilter_view/WorkflowSignalFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowSignalFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/WorkflowSignalPreview_view/WorkflowSignalPreview_view.aod b/neonView/WorkflowSignalPreview_view/WorkflowSignalPreview_view.aod
index fa81d16b1e25cdab434ad9aa1bd942e5fad4792c..1ab2d17c6529a917608707c3ee5623542d3e5231 100644
--- a/neonView/WorkflowSignalPreview_view/WorkflowSignalPreview_view.aod
+++ b/neonView/WorkflowSignalPreview_view/WorkflowSignalPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowSignalPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/WorkflowStartConfigFilter_view/WorkflowStartConfigFilter_view.aod b/neonView/WorkflowStartConfigFilter_view/WorkflowStartConfigFilter_view.aod
index cdac1faccf7f16acf27044fd57f434dea9502e3c..6bfaae55e6cc43112696ed07c5bdff43f7e9ef10 100644
--- a/neonView/WorkflowStartConfigFilter_view/WorkflowStartConfigFilter_view.aod
+++ b/neonView/WorkflowStartConfigFilter_view/WorkflowStartConfigFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowStartConfigFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/WorkflowTaskDrawer_view/WorkflowTaskDrawer_view.aod b/neonView/WorkflowTaskDrawer_view/WorkflowTaskDrawer_view.aod
index 7d975c492d0c8cc63d1e3bf227bc9d7897f0c539..5f2d8f1a150b19668684fa27ba246f08a2b945cd 100644
--- a/neonView/WorkflowTaskDrawer_view/WorkflowTaskDrawer_view.aod
+++ b/neonView/WorkflowTaskDrawer_view/WorkflowTaskDrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowTaskDrawer_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/WorkflowTaskFilter_view/WorkflowTaskFilter_view.aod b/neonView/WorkflowTaskFilter_view/WorkflowTaskFilter_view.aod
index e767b57ecab4a5860104fa431687defd3a610220..2165a6d4beccefa789150e0f90f1892512098b57 100644
--- a/neonView/WorkflowTaskFilter_view/WorkflowTaskFilter_view.aod
+++ b/neonView/WorkflowTaskFilter_view/WorkflowTaskFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowTaskFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
diff --git a/neonView/WorkflowTaskFinishedDrawer_view/WorkflowTaskFinishedDrawer_view.aod b/neonView/WorkflowTaskFinishedDrawer_view/WorkflowTaskFinishedDrawer_view.aod
index f2147948b2e3f2231d986577e6c79958260698bc..f14afb6e132c8dd3e14539e63182acf9c1e2ec0a 100644
--- a/neonView/WorkflowTaskFinishedDrawer_view/WorkflowTaskFinishedDrawer_view.aod
+++ b/neonView/WorkflowTaskFinishedDrawer_view/WorkflowTaskFinishedDrawer_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowTaskFinishedDrawer_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/WorkflowTaskFinishedList_view/WorkflowTaskFinishedList_view.aod b/neonView/WorkflowTaskFinishedList_view/WorkflowTaskFinishedList_view.aod
index 7cb5d6287d7c38fab8267ab2c47449d60d2af24b..babb19cdf098d15cf67560f94e2e79d7f325365e 100644
--- a/neonView/WorkflowTaskFinishedList_view/WorkflowTaskFinishedList_view.aod
+++ b/neonView/WorkflowTaskFinishedList_view/WorkflowTaskFinishedList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowTaskFinishedList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/WorkflowTaskForm_view/WorkflowTaskForm_view.aod b/neonView/WorkflowTaskForm_view/WorkflowTaskForm_view.aod
index e25ada40292a5745c12a15e959f0f61700355c2b..956ea0c55e698c71f45e9942bc3f96692b455037 100644
--- a/neonView/WorkflowTaskForm_view/WorkflowTaskForm_view.aod
+++ b/neonView/WorkflowTaskForm_view/WorkflowTaskForm_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowTaskForm_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/WorkflowTaskList_view/WorkflowTaskList_view.aod b/neonView/WorkflowTaskList_view/WorkflowTaskList_view.aod
index f58afc252c8715a699ecaa2adc131548ab18fc21..3f84a4ee80022dafeaf33196618b5ab328183672 100644
--- a/neonView/WorkflowTaskList_view/WorkflowTaskList_view.aod
+++ b/neonView/WorkflowTaskList_view/WorkflowTaskList_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowTaskList_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/neonView/WorkflowTaskOwn_view/WorkflowTaskOwn_view.aod b/neonView/WorkflowTaskOwn_view/WorkflowTaskOwn_view.aod
index 9e0e3392f9574849928895ee78ac1cdea5d68aa7..1c914a6a6fe83cf0a129f61943fa53b5620ac678 100644
--- a/neonView/WorkflowTaskOwn_view/WorkflowTaskOwn_view.aod
+++ b/neonView/WorkflowTaskOwn_view/WorkflowTaskOwn_view.aod
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowTaskOwn_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <filterable v="true" />
   <dashletConfigurations>
     <neonDashletConfiguration>
       <name>OwnWorkflowTasks</name>
-      <title>Own workflow tasks</title>
+      <title>My Workflow Tasks</title>
       <description>My workflow tasks</description>
       <fragment>WorkflowTask/filter</fragment>
       <icon>VAADIN:CHECK_SQUARE_O</icon>
diff --git a/neonView/WorkflowTaskPreview_view/WorkflowTaskPreview_view.aod b/neonView/WorkflowTaskPreview_view/WorkflowTaskPreview_view.aod
index bf61df8ebf51aed671e004a5ee13daa2663b5512..d6e7dc40366d63d5097d3335b64559b9c9afb87e 100644
--- a/neonView/WorkflowTaskPreview_view/WorkflowTaskPreview_view.aod
+++ b/neonView/WorkflowTaskPreview_view/WorkflowTaskPreview_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowTaskPreview_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <size>SMALL</size>
diff --git a/neonView/WorkflowVariableValueFilter_view/WorkflowVariableValueFilter_view.aod b/neonView/WorkflowVariableValueFilter_view/WorkflowVariableValueFilter_view.aod
index 6de8d6e623ef5a4ee8afe8d150bf74c01b486bcd..be4b8f4662f32ef8902873427a8573176c1001eb 100644
--- a/neonView/WorkflowVariableValueFilter_view/WorkflowVariableValueFilter_view.aod
+++ b/neonView/WorkflowVariableValueFilter_view/WorkflowVariableValueFilter_view.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.6">
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.7">
   <name>WorkflowVariableValueFilter_view</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
diff --git a/others/genJsdoc.bat b/others/genJsdoc.bat
deleted file mode 100644
index db0775bbbb307e47f3b77efabb48da3851945d61..0000000000000000000000000000000000000000
--- a/others/genJsdoc.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-SET mypath=%~dp0
-
-jsdoc -r %mypath:~0,-1%\..\process -d %mypath:~0,-1%\jsdocOut
\ No newline at end of file
diff --git a/others/guide/CodingGuidelines.adoc b/others/guide/CodingGuidelines.adoc
deleted file mode 100644
index 7fbd1bf92c5ecca6d93d8ffe076b933618cb861b..0000000000000000000000000000000000000000
--- a/others/guide/CodingGuidelines.adoc
+++ /dev/null
@@ -1,8 +0,0 @@
-= Sample Document
-Doc Writer <doc.writer@asciidoc.org>; John Smith <john.smith@asciidoc.org>
-v1.0, 2013-05-20: First draft
-:title: Sample Document
-:tags: [document, example]
-
-
-Preamble...
diff --git a/others/guide/CreateJsDoc.adoc b/others/guide/CreateJsDoc.adoc
deleted file mode 100644
index d428b85c65aabfc70a1247a8a3a2e443811d571d..0000000000000000000000000000000000000000
--- a/others/guide/CreateJsDoc.adoc
+++ /dev/null
@@ -1,40 +0,0 @@
-How to build js-doc out of the lib-comments
-===========================================
-:toc2: left
-:numbered:
-
-== installation ==
-1. Nodejs:
-https://nodejs.org/en/
-LTS-version (aktuell 10.15.0)
-
-download and install
-
-2. install jsdoc 
-
-open CMD
-[source]
-----
-npm install -g jsdoc
-----
-
-== generate jsdoc ==
-
-=== manually ===
-1. open CMD
-2. navigate into the project-folder. e.g.
-[source]
-----
-C:
-cd C:\Users\M.Mustermann\Documents\AditoProjects\xRM-Basic5.1
-----
-3. run command
-[source]
-----
-jsdoc -r process -d others\jsdocOut
-----
-4. Open others\jsdocOut\index.html with a webbrowser
-
-=== with script in designer (Windows) ===
-1. In the Designer right click on others\genJsdoc.bat -> "Open in System"
-2. Right click on others\jsdocOut\index.html -> "View"
\ No newline at end of file
diff --git a/others/guide/Loghistory.adoc b/others/guide/Loghistory.adoc
deleted file mode 100644
index 6a2f284bf89acfae821ba92a33e572343952c9f3..0000000000000000000000000000000000000000
--- a/others/guide/Loghistory.adoc
+++ /dev/null
@@ -1,87 +0,0 @@
-configure Loghistory
-====================
-:DATA_ALIAS: Data_alias
-:EDITOR_ALIAS_DEFINITION: AliasDefinition-Editor
-
-== the concept ==
-//TODO: extend the concept description
-Stoarge: Database-table: `AB_LOGHISTORY`
-
-Collecting Data:
-----
-Audit -> process_audit -> Loghistory_lib: LogHistoryExecutor 
-----
-
-Data is collected and pre-translated. Therefor only one Language can be applied for logging.
-Because the loghistory is written via the auditing, only changes that are done with the proper Jdito-Methods will be logged.
-
-== prerequisites ==
-
-Auditing has to be activated for all tables you want to log.
-
-.prerequisites of enabling Audit in general
-* Auditing has to be enabled in your Server
-* Auditing has to be enabled for your alias (default: +{DATA_ALIAS}+)
-* Tables that shall be logged need some configs in the _{EDITOR_ALIAS_DEFINITION}_
-** property `idColumn` has to be set (a primary key is needed therefore)
-** `auditMode` has to be set -Standard, -CLOB, or -BLOB (chosse the one you really need)
-
-
-== activate writing into loghistory ==
-
-Assuming that the 
-
-* required database-tables exist 
-* JDito-processes already exist
-* audit has been activated in general
-
-you are ready to configure _which_ column shall be logged and _how_.
-
-=== configure columns for logging ===
-
-There are several properties (custom and pre-exisiting) that can be set for configuring the logging:
-
-.configuration options per column
-[options="header"]
-|=======
-|property |purpose |property-type
-|+title+ |text that is used to display which column has been modified|pre-exisiting
-|+log+ |defines whether a column needs to be logged or not; not exisisting equals `false` |custom: Booelan
-|+tableRef+ |references table for automatically grouping data. This is usefull for ForeignKeys, e.g. a +OFFERITEM.OFFER_ID+ column could have a +tableRef+ "OFFER"|custom: String
-|+primaryKey+ |this is not only used to enable auditing generally, but it's used to resolve +tableRef+ values correctly|pre-exisiting
-|+keyword+ |defines a keyword contianer that should be used to transform a +KEYID+ into a display value|custom: String
-|+autoMapTrueFalse4Log+ |if `true` the loghistory-executor tries to automatically translate a value into a "yes"/"no"-display value|custom: Booelan
-|+translate4Log+ |defines a process to transform a technical value into a display value |custom: JDito
-|=======
-
-+translate4Log+ is a mighty possibility to translate a ID-value into a displayvalue. However, you should keep several important things in mind:
-
-* translate text if necessary via the locale-parameter
-* the process is called each time a change to that column is applied - keep it fast and simple
-
-.translate4Log example (skip imports for better readability)
-[source,javascript]
-----
-var params = Translate4LogParams.load();// <1>
-var countryName = CountryUtils.getLatinNameByIso2(params.value, params.locale); // <2>
-result.string(countryName);// <3>
-----
-<1> load the parameters in a easy and fail-proof way
-<2> locale is passed to the resolving function and in that function a translation is applied
-<3> always return a string
-
-=== configure a consumer for retrieving the loghistory ===
-
-.Exampel for the +tablenames_param+ process
-----
-import("system.vars");
-import("system.result");
-import("Context_lib");
-
-var res = [];
-res.push({id: vars.get("$field.CONTACTID"), tableNames: ["CONTACT", "COMMUNICATION", "ADDRESS", "AB_ATTRIBUTERELATION"]});
-res.push({id: vars.get("$field.PERSONID"), tableNames: ["PERSON"]});
-
-res = JSON.stringify(res);//currently only strings  can be passed as param
-result.object(res);
-----
\ No newline at end of file
diff --git a/others/guide/PersonOrganisationContact.adoc b/others/guide/PersonOrganisationContact.adoc
deleted file mode 100644
index 7d7a1b33f971b107ef28b8f4a6a5885a9e10a3f5..0000000000000000000000000000000000000000
--- a/others/guide/PersonOrganisationContact.adoc
+++ /dev/null
@@ -1,39 +0,0 @@
-Person, Organisation, Contact
-=============================
-:toc2: left
-:numbered:
-
-== Differences to old Adito ==
-
-The old Adito basic had:
-
-- Pers
-- Org
-- Relation
-
-They are not gone, just renamed:
-
-- Pers = Person
-- Org = Organisation
-- Relation = Contact
-
-TODO: doku erweitern
-erson, Organisation, Contact
-===========================================
-:toc2: left
-:numbered:
-
-== Differences to old Adito ==
-
-The old Adito basic had:
-
-- Pers
-- Org
-- Relation
-
-They are not gone, just renamed:
-
-- Pers = Person
-- Org = Organisation
-- Relation = Contact
-
diff --git a/others/guide/ProviderConsumerParameter.adoc b/others/guide/ProviderConsumerParameter.adoc
deleted file mode 100644
index ee9ff59bc7d051dc069cd0ba1a409887036f8f8c..0000000000000000000000000000000000000000
--- a/others/guide/ProviderConsumerParameter.adoc
+++ /dev/null
@@ -1,92 +0,0 @@
-Provider - Consumer
-===================
-:toc2: left
-:numbered:
-
-=== Provider ===
-Is the old dfi.
-
-==== Purpose ====
-The provider provides access to an entity.
-You can get data of another entity by connecting a consumer to a provider.
-
-==== Naming ====
-The names should provide information about *what the provider provides*.
-
-For example:
-Communication_entity has 3 providers:
-
-- *AllCommunications*
-- *EmailCommunications*
-- *PhoneCommunications*
-
-If you connect to *AllCommunications* you get *all* communication types of a contact.
-If you connect to *EmailCommunications* you get *only the Email* communication type of a contact.
-If you connect to *PhoneCommunications* you get *only the Phone* communication type of a contact.
-
-*Important:*
-*Do not always create a new provider when connecting a new entity. Maybe you can use an already existing provider.*
-*Try to reuse providers if you need similar data for two dependencies*
-
-=== Consumer ===
-Is the old dfo.
-
-=== Purpose ===
-The Consumer *consumes* the data a provider provides.
-It can be connected to a provider and fill the parameters of the provider.
-
-=== Naming ===
-Most of the time you get a list of "something" so you should call it the plural of what you get.
-
-Example:
-Persons
-Organisations
-
-If you have two Consumer to the same Entity, you should use speaking names. 
-
-Example:
-Documents (e.g. for all documents of a person)
-MainDocuments (e.g. for only the main documents of a person)
-
-If you know you get only one row, you can use the singular.
-
-Example:
-Person
-
-=== Parameter ===
-Parameters provide a way to tell a provider *what exactly you need*.
-
-==== Properties ====
-The most important properties are
-code, exposed, triggerRecalculation and mandatory
-
-Parameters work with a fallback mechanism.
-This means that if you set the code on the parameter directly then this is executed *only if you did not* provide the code on the parameter at the *provider* and/or *consumer*.
-Likewise if you set the code on a parameter at the provider it will only be executed if a *consumer* which connects to this provider *has no code set* at the parameter.
-
-Here some examples for the *code* property:
-
-[options="header"]
-|========================================================================================================================================================================================================================================================
-| Parameter | Provider | Consumer | Result                       | Notes                                                                                                                                                                                 
-| default   | default  | default  | Nothing executed             |                                                                                                                                                                                       
-| default   | default  | code set | Code from consumer executed  | This is the mostly used  scenario.                                                                                                                                                    
-| default   | code set | default  | Code from provider executed  | This is used if you need a default value for a parameter which is different on each provider. e.g. used by the Document_entity to determine if it should show main documents or not.  
-| code set  | default  | default  | Code from parameter executed |                                                                                                                                                                                       
-|========================================================================================================================================================================================================================================================
-
-The checkbox-parameters can have *three* states: default, checked, unchecked. Default means the property is *gray* and the value from the previous instance is used. Checked and unchecked overwrite always the previous instance.
-
-The exposed property is a way to decide if a parameter should be visible by the next instance
-Here some examples for the *exposed* property:
-
-[options="header"]
-|========================================================================================================================================================
-| Parameter | Provider | Result      | Notes                                                                                                             
-| default   | default  | NOT Exposed | because the default for exposed is: NOT exposed. -> the parameter won't be visible on the provider and consumer! 
-| set       | set      | Exposed     | This means that the parameter can be set by the consumer.                                                         
-| set       | UNset    | NOT Exposed | This will disable the parameter for one specific provider.                                                        
-| set       | default  | Exposed     |                                                                                                                   
-|========================================================================================================================================================
-
-*Note that there are currently (13.02.2019) some bugs and the handling of parameters with the default #PROVIDER may change.*
\ No newline at end of file
diff --git a/others/guide/TargetContext.adoc b/others/guide/TargetContext.adoc
deleted file mode 100644
index 1d466a0da9c53953491cf301711f745d6d8478e4..0000000000000000000000000000000000000000
--- a/others/guide/TargetContext.adoc
+++ /dev/null
@@ -1,19 +0,0 @@
-Target Context
-==============
-
-toc2: left
-:numbered:
-
-== What? ==
-The target context is for forwarding the preview and the klick-action to another context.
-
-== Why? ==
-For example the ObjectRelation entity uses this feature to open the linked object directly.
-
-== Where? == 
-It is configured by two properties of the providers.
-
-* targetContextField
-* targetIdField
-
-You can provide an entity-field for each of them which contains the contextId (currently the contextName 13.02.2019) and the rowId (UID) which should be used to open the preview or main view.
\ No newline at end of file
diff --git a/others/guide/how to write JDito code.adoc b/others/guide/how to write JDito code.adoc
deleted file mode 100644
index 9dbbdb19d290d4cffad377c7a19ea1354a52d536..0000000000000000000000000000000000000000
--- a/others/guide/how to write JDito code.adoc	
+++ /dev/null
@@ -1,261 +0,0 @@
-How to wirte JDito code
-=======================
-:toc2: left
-:numbered:
-
-== basics ==
-* Keep everything english. Every title, caption, messages, comments, etc. should be english. Add german translation to the languages if necessary.
-* in JavaScript-Strings use `"` instead of `'` - even if its only 1 character. `'` is for SQL (within JS-Strings)
-* Parameters should start with p.
-
-== code structure ==
-=== vars and others (var, let) ===
-* avoid `let` as much as possible because you cannot debug these variables
-
-=== brackets ===
-* `{` are placed on a new line
- 
-Example:
-[source,javascript]
-----
-for (i = 0, i < dataLen; i++) 
-{
-    //code here
-}
-
-myArray.forEach(function(pItem) 
-{
-    // Do something
-});
-----
-
-=== loops ===
-nested loops should be defined with replicated indexer variables.
-Therefore it's easy to see in which level of the counter you are.
-Even better would be a good and describing name.
-
-Example:
-[source,javascript]
-----
-for (i = 0, i < dataLen; i++) 
-{
-    for (ii = 0, ii < dataLen[i].length; ii++) 
-    {
-        //code...
-    }
-}
-
-for (row = 0, row < dataLen; row++) 
-{
-    for (col = 0, col < dataLen[row].length; col++) 
-    {
-        //code...
-    }
-}
-----
-
-
-== Functions - overview of different "types" ==
-This sections covers how to define different "types" of functions in libraries.
-
-=== by using static methods ===
-This will be mostly utility functions where there is no need to instantiate an object. You'll need this probably the most time.
-
--> Static object with static functions.
-
-
-Definition:
-[source,javascript]
-----
-/**
- * provides static methods for validation of communication data
- * do not create an instance of this
- * @static
- * @class
- */
-function CommValidationUtil(){}<1>
-
-/**
- * returns a blueprint for validation extensions; these extensions are needed for validating comm data and can be passed to other functions
- * @return {object} a object with properties that have a specific default value; normally you want to overwrite that value
- */
-CommValidationUtil.getExtensionsBlueprint = function() <2>
-{
-    return {
-        countryCode: null
-    };
-}
-----
-<1> the function-object that keeps everything together - this function should never be actually called (no direct call, no indirect call)
-<2> an actual function that can be called
-
-And how to use it:
-[source,javascript]
-----
-import("Comm_lib");
-
-var additionals = CommValidationUtil.getExtensionsBlueprint();
-----
-
-=== by creating an object with functions ===
-
-You may want to hold data and create objects where methods share that data. 
-
-Here is an example for an object that can be created:
-[source,javascript]
-----
-/**
- * object that provides featrues for a single keyword attribute; initalizes itself on creation with a specific keyword-attribute
- * 
- * @param {String} pContainerName specifies the type of the keyword and therefore the list elements;
- *                                  e.g. "COUNTRY"; use an entry of the $KeywordRegistry here
- * @param {String} pAttributeName the name of the keyword attribute that shall be initalized
- * @param {String} [pDefault=undefined] the default value -> Does not throw an error, if default value exists.
- * 
- * @class
- */
-function KeywordAttribute(pContainerName, pAttributeName, pDefault)
-{
-    this.container = pContainerName;
-    this.attribute = pAttributeName;
-    this.defaultValue = pDefault;
-
-    var keywordAttrData = newSelect("AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_ATTRIBUTEID, AB_KEYWORD_ATTRIBUTE.KIND")
-        .from("AB_KEYWORD_ATTRIBUTE")
-        .where("AB_KEYWORD_ATTRIBUTE.CONTAINER", pContainerName)
-        .and("AB_KEYWORD_ATTRIBUTE.NAME", pAttributeName)
-        .arrayRow();
-    
-    if (keywordAttrData.length > 0) 
-    {
-        this.id = keywordAttrData[0];
-        this.type = keywordAttrData[1];
-        this.dbField = this.type.trim();
-    }
-    else if(pDefault == undefined)
-    {
-        throw new Error(translate.withArguments("no keyword attribute \"%0\" found in keyword container \"%1\"", [this.attribute, this.container]));
-    }
-}
-
-/**
- * get the value for a specific keyId.
- * Error if the keyword container does not have the attribute at all (you can check this with .exists())
- * Error if the attribute does not exist at the provided keyId and you have not specified a default
- * 
- * @param {String} pKeyId the keyId
- * 
- * @return {String} the loaded value (or the default)
- */
-KeywordAttribute.prototype.getValue = function(pKeyId)
-{
-    if (this.exists()) 
-    {
-        var attrValue = newSelect(this.dbField)
-            .from("AB_KEYWORD_ENTRY")
-            .join("AB_KEYWORD_ATTRIBUTERELATION", "AB_KEYWORD_ENTRY.AB_KEYWORD_ENTRYID = AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ENTRY_ID")
-            .where("AB_KEYWORD_ENTRY.CONTAINER", this.container)
-            .and("AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ATTRIBUTE_ID", this.id)
-            .and("AB_KEYWORD_ENTRY.KEYID", pKeyId)
-            .cell();
-
-        if (attrValue)
-            return attrValue;
-        
-        if (this.defaultValue)
-            return this.defaultValue;
-        
-        throw new Error(translate.withArguments("no keyword attribute \"%0\" found in keyword \"%1\" from container \"%2\"", [this.attribute, pKeyId, this.container]));
-    }
-    else if (this.defaultValue == undefined)
-        throw new Error(translate.withArguments("no keyword attribute \"%0\" found in keyword container \"%1\"", [this.attribute, this.container]));
-    else
-        return this.defaultValue;
-}
-
-/**
- * get a SqlBuilder object for this keyword attribute. You can easily add additional conditions to it.
- * 
- * @return {SqlBuilder} a SqlBuilder which contains a select for the entry-id's, joins to entry and attribute 
- *                      and conditions for the container and the attribute-name.
- */
-KeywordAttribute.prototype.getSqlBuilderSelect = function() 
-{
-    return newSelect("AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ENTRY_ID")
-        .from("AB_KEYWORD_ATTRIBUTERELATION")
-        .join("AB_KEYWORD_ENTRY", "AB_KEYWORD_ENTRYID = AB_KEYWORD_ENTRY_ID", "attrEntry")
-        .join("AB_KEYWORD_ATTRIBUTE", "AB_KEYWORD_ATTRIBUTEID = AB_KEYWORD_ATTRIBUTE_ID")
-        .where(["AB_KEYWORD_ENTRY", "CONTAINER", "attrEntry"], this.container)
-        .and("AB_KEYWORD_ATTRIBUTE.NAME", this.attribute)
-}
-
-/**
- * check if the Container can have the attribute.
- * @return {Boolean} true if it exists, false if not
- */
-KeywordAttribute.prototype.exists = function()
-{
-    return this.id != undefined && this.type != undefined && this.dbField != undefined;
-}
-
-----
-
-=== private functions ===
-
-
-Private functions would be possible but make everything much more complicate.
-So just start your functions / methods name with a _ if you need private methods.
-
---> do not use functions which start with a _ outside of the class!
-
-Add @ignore to the comment of those functions to prevent showing them in the generated jsdoc.
-
-== JS-Doc ==
-
-<1> JS-Doc comment: http://usejsdoc.org/
-<2> jsdoc-blocks have to start with /&#x002A;&#x002A; otherwise JSDoc cannot generate a documentation
-<3> use the correct form for optional/required parameters: http://usejsdoc.org/tags-param.html
-Optional parameter: [alias=the current alias]
-Required parameter: alias
-Classes: @class
-[source,javascript]
-----
-/**
- * Description...
- * ...
- *  
- * @param {String} [pAlias=the current alias] the database alias where the condition shall be executed later (important for column types of preparedStatements)
- * @example Here is an example
- * @class
- */
-function SqlCondition(pAlias) 
-{
-...
-}
-----
-<4> examples are useful on more complex functions
-<5> constructor function; init properties (do not set functions ("methods") here!)
-<6> add functions ("methods") to the prototype, they are available through the prototype chain
-
-And how to use it (normally you'd want to use preparedStatements but for the sake of an easy example it's a bit shorter here)
-See also HowToSqlConditionLib.adoc for a full documentation.
-[source,javascript]
-----
-import("system.vars");
-import("system.result");
-import("Sql_lib");
-import("Comm_lib");
-
-var cond = new SqlCondition();
-
-var mediumIds = CommExtensions.getContextualMediumIds();
-if (mediumIds.length > 0)
-    cond.and("COMM.MEDIUM_ID in (" + mediumIds.join(", ") + ")");
-
-var idVal = vars.get("$local.idvalue");
-if (uids.length > 0)
-    cond.and("COMM.COMMID = '" + idVal + "' ");
-
-result.string(cond.toString("COMM.OPTIONAL = 't'"));
-----
-
diff --git a/others/guide/instanceableLibExample.adoc b/others/guide/instanceableLibExample.adoc
deleted file mode 100644
index 66dfc0a312e467be87afcf97921691c4e8f61090..0000000000000000000000000000000000000000
--- a/others/guide/instanceableLibExample.adoc
+++ /dev/null
@@ -1,62 +0,0 @@
-= Example for a instanceable Lib =
-:toc2: left
-:numbered:
-
-Remember to always change the comments to fit your class! +
-Use speaking names for ALL variables, classes and functions!
-
-[source,javascript]
-----
-import("...");
-
-/**
- * instanceable example Utility class;
- * 
- * @param {String} pParam1 is for ...
- * 
- * @example var myUtil = new UtilClass("-");
- * @class
- */
-function UtilClass(pParam1) 
-{
-    // here is the constructor.
-    // create class variables like this:
-    this.myVariable = pParam1;
-}
-
-/**
- * a public function
- * 
- * @param {String} pParam1 is for ...
- * @param {String} pParam2 is for ...
- * 
- * @example var myResult = myUtil.myFunction("p1", "p2");
- * 
- * @return {String} a result
- */
-UtilClass.prototype.myFunction = function(pParam1, pParam2) 
-{
-    return this._privateStaticFunction1(pParam1, pParam2, this.myVariable);
-}
-
-/**
- * a private function
- * 
- * @param {String} pParam1 is for ...
- * @param {String} pParam2 is for ...
- * @param {String} pParam3 is for ...
- * 
- * @return {String} a result
- * @ignore
- */
-UtilClass.prototype._myPrivateFunction = function(pParam1, pParam2, pParam3) 
-{
-    if(pParam1 && pParam2 && pParam3) 
-    {
-        ...
-        return pParam1 + pParam3 + pParam2;
-    }
-
-    return "";
-}
-----
\ No newline at end of file
diff --git a/others/guide/staticLibExample.adoc b/others/guide/staticLibExample.adoc
deleted file mode 100644
index d48e2eba91fc0a15fd515826424dbf631ede54e4..0000000000000000000000000000000000000000
--- a/others/guide/staticLibExample.adoc
+++ /dev/null
@@ -1,57 +0,0 @@
-= Example for a static Lib =
-:toc2: left
-:numbered:
-
-Remember to always change the comments to fit your class! +
-Use speaking names for ALL variables, classes and functions!  
-
-[source,javascript]
-----
-import("...");
-
-/**
- * a static Example Utility class
- * 
- * Do not create an instance of this!
- * @class
- */
-function ExampleUtils() {} // leave this function empty! A constructor is not needed for static functions.
-
-/**
- * a public static function
- * 
- * @param {String} pParam1 is for ...
- * @param {String} pParam2 is for ...
- * 
- * @example var myResult = ExampleUtils.staticFunction1("p1", "p2");
- * 
- * @return {String} a result
- */
-ExampleUtils.staticFunction1 = function(pParam1, pParam2) 
-{
-    return this._privateStaticFunction1(pParam1, pParam2, "-")
-}
-
-/**
- * a private static function
- * 
- * Do not use outside of ExampleUtils!
- * 
- * @param {String} pParam1 is for ...
- * @param {String} pParam2 is for ...
- * @param {String} pParam3 is for ...
- * 
- * @return {String} a result
- * @ignore
- */
-ExampleUtils._privateStaticFunction1 = function(pParam1, pParam2, pParam3) 
-{
-    if(pParam1 && pParam2 && pParam3) 
-    {
-        ...
-        return pParam1 + pParam3 + pParam2;
-    }
-
-    return "";
-}
-----
\ No newline at end of file
diff --git a/others/guide/whichDatatype.adoc b/others/guide/whichDatatype.adoc
deleted file mode 100644
index 092ae1bf6ae5c02d56ced4bf133b5e956a8f23e2..0000000000000000000000000000000000000000
--- a/others/guide/whichDatatype.adoc
+++ /dev/null
@@ -1,105 +0,0 @@
-Overview over datatypes
-=======================
-:toc2: left
-:numbered:
-
-This is a simple overview about when to to use which datatype.
-
-== Boolean ==
-=== Datatype ===
-----
-TINYINT
-----
-=== Usage ===
-0 => false
-1 => true
-
-Add nullable="false" constraint, because for boolean null makes no sense and complicates searches and validations.
-
-== Text ==
-Text should be saved as Unicode. For this prefix the datatype with a 'N' (there are some exceptions like the UUID)
-
-=== Big text ===
-For informations, descriptions, ...
-----
-NCLOB
-----
-
-=== Small / Normal text ===
-For Names, ...
-
-You have to define the maximum length.
-----
-NVARCHAR(50)
-----
-
-=== Fixed size text ===
-If you are sure that the length is always fixed and will not change.
-
-You have to define the length.
-----
-NCHAR(5)
-----
-
-=== UUID's, standardized codes  ===
-For them unicode is mostly not needed. Only use unicode here if you are sure, it is needed.
-
-For UUID's, standardized codes (language codes), ...
-
-You have to define the length.
-----
-CHAR(5)
-----
-
-UUID needs length 36:
-----
-CHAR(36)
-----
-
-=== Decimal numbers ===
-If precision and fixed decimals (Nachkommastellen) are needed, use DECIMAL.
-For prices, ...
-----
-NUMERIC(10, 2)
-----
-
-Else you can use double. 
-----
-DOUBLE
-----
-
-=== Integer numbers ===
-In normal cases just use INTEGER
-
-If you know that very big integers or only very small Integers are needed, you can also use
-
-Byte count may not be the same on all databases.
-
-8 Byte
-
-----
-BIGINT
-----
-
-4 Byte 
-
-----
-INTEGER
-----
-
-2 Byte 
-
-----
-SMALLINT
-----
-
-1 Byte
-
-----
-TINYINT
-----
-
-=== Binary data ===
-----
-BLOB
-----
\ No newline at end of file
diff --git a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod
index 3e9db3204aca942b5356a3023b17716a739754cf..602795eafd86b0cb8892febafb6c1a9d7de3624d 100644
--- a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod
+++ b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod
@@ -30,7 +30,7 @@
   <recordContainerCachingAlias>RecordContainerCache</recordContainerCachingAlias>
   <clientSearchOptimizedForSpeed v="true" />
   <clientSearchExcludeForIgnorecase v="true" />
-  <neonClientPermissionsEnabled v="false" />
+  <neonClientPermissionsEnabled v="true" />
   <clientFeedbackMailaddress />
   <blobHandlingMethod>DATABASE</blobHandlingMethod>
   <databaseAuditGetOldValueLobs v="false" />
@@ -41,6 +41,7 @@
   <indexsearchIncrementingIndexerEnabled v="true" />
   <indexsearchIncrementingIndexerInterval v="1000" />
   <indexsearchIncrementingIndexerBunchSize v="250" />
+  <userdirectoryAlias>_____SYSTEMALIAS</userdirectoryAlias>
   <mailBridgeMailserver>
     <mailbridgeMailserver>
       <name>abfa63d1-a47e-41f6-a87d-138bf04adc1e</name>
diff --git a/process/AISalesproject_lib/AISalesproject_lib.aod b/process/AISalesproject_lib/AISalesproject_lib.aod
index 13b8a275db57d71b190f905695f39072a7756756..a6f99a40249dc800e535938f99bcf7dff042bbf1 100644
--- a/process/AISalesproject_lib/AISalesproject_lib.aod
+++ b/process/AISalesproject_lib/AISalesproject_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>AISalesproject_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/AISalesproject_lib/process.js</process>
diff --git a/process/AI_lib/AI_lib.aod b/process/AI_lib/AI_lib.aod
index 153e8fc6b66bfd5d8016c8a0a22521c04ad0e209..7ae40f7d1ad20b3763a454857962bf66ec77e35f 100644
--- a/process/AI_lib/AI_lib.aod
+++ b/process/AI_lib/AI_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>AI_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/AI_lib/process.js</process>
diff --git a/process/ActivityTask_lib/ActivityTask_lib.aod b/process/ActivityTask_lib/ActivityTask_lib.aod
index 141c9c3f9344db9b60ff2be3992885545ebcb96a..75bb8811f6e3483be857978d6ee10456e7e79d25 100644
--- a/process/ActivityTask_lib/ActivityTask_lib.aod
+++ b/process/ActivityTask_lib/ActivityTask_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>ActivityTask_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/ActivityTask_lib/process.js</process>
diff --git a/process/AddressEntity_lib/AddressEntity_lib.aod b/process/AddressEntity_lib/AddressEntity_lib.aod
index 4ecf49e2e70d3882be5ed8a66b3ec91a4d509593..432deaa1e5b6a1e7a0e8e82e339e76cb9e0b83a5 100644
--- a/process/AddressEntity_lib/AddressEntity_lib.aod
+++ b/process/AddressEntity_lib/AddressEntity_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>AddressEntity_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/AddressEntity_lib/process.js</process>
diff --git a/process/Address_lib/Address_lib.aod b/process/Address_lib/Address_lib.aod
index dc170bb2e025b240f859db1cdca75dd3eb7d972c..8b4c8d490fcd065fdca889e0daa3282dddcc239b 100644
--- a/process/Address_lib/Address_lib.aod
+++ b/process/Address_lib/Address_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Address_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/Address_lib/documentation.adoc</documentation>
diff --git a/process/Appointment_lib/Appointment_lib.aod b/process/Appointment_lib/Appointment_lib.aod
index 5b832c601af4bab0a69bff58acf1c2427be6911c..048b24bb7449670791195d1c9710d5fa9f858ec9 100644
--- a/process/Appointment_lib/Appointment_lib.aod
+++ b/process/Appointment_lib/Appointment_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Appointment_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Appointment_lib/process.js</process>
diff --git a/process/AttributeFilter_lib/AttributeFilter_lib.aod b/process/AttributeFilter_lib/AttributeFilter_lib.aod
index 57e3edcba2b142a37bc925f7db45a4cbf4006464..0e96ad73bb494c36ab2a394571a7a27946ccccb6 100644
--- a/process/AttributeFilter_lib/AttributeFilter_lib.aod
+++ b/process/AttributeFilter_lib/AttributeFilter_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>AttributeFilter_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/AttributeFilter_lib/process.js</process>
diff --git a/process/AttributeFilter_lib/process.js b/process/AttributeFilter_lib/process.js
index d64df9664bf2c4ac8519540ede2e36266b2d5323..0e9a44920eed7e6875ee71fec0b1f268187ee71d 100644
--- a/process/AttributeFilter_lib/process.js
+++ b/process/AttributeFilter_lib/process.js
@@ -87,21 +87,33 @@ function AttributeFilterExtensionMaker() {}
 AttributeFilterExtensionMaker.getFilterFields = function(pObjectType) 
 {
     var res = [];
+    var sqlMask = new SqlMaskingUtils();
 
     var loadingConfig = entities.createConfigForLoadingRows().entity("Attribute_entity")
         .provider("SpecificFilterAttributes")
-        .fields(["UID", "FULL_ATTRIBUTE_NAME", "ATTRIBUTE_TYPE"])
+        .fields(["UID", "FULL_ATTRIBUTE_NAME", "ATTRIBUTE_TYPE", "DROPDOWNDEFINITION"])
         .addParameter("ObjectType_param", pObjectType);
 
     var attributeRows = entities.getRows(loadingConfig);
     attributeRows.forEach(function(row){
-        var attributeType = row["ATTRIBUTE_TYPE"];
+        var attributeType = row["ATTRIBUTE_TYPE"].trim();
         var contentType = AttributeTypeUtil.getContentType(attributeType);
+        var groupedRecordField = AttributeTypeUtil.getDatabaseField(attributeType);
+        var getTitleRecordFieldFn = AttributeTypeUtil.getDisplayValueSqlFn(attributeType);
+        var titleRecordField = getTitleRecordFieldFn({
+            attributeId: row["UID"],
+            dropDownDefinition: row["DROPDOWNDEFINITION"]
+        });
         
-        if (attributeType.trim() == AttributeTypes.VOID())
+        if (attributeType == AttributeTypes.VOID())
         {
             contentType = "BOOLEAN";
+            groupedRecordField = SqlBuilder.caseWhen("AB_ATTRIBUTE_ID is not null").thenString("1").toString();
+            titleRecordField = SqlBuilder.caseWhen("AB_ATTRIBUTE_ID is not null").thenString(translate.text("Yes")).toString();
         }
+        
+        if (titleRecordField == "INT_VALUE" || titleRecordField == "NUMBER_VALUE")
+            titleRecordField = sqlMask.cast(titleRecordField, SQLTYPES.VARCHAR, 50);
 
         if (contentType)
         {
@@ -111,7 +123,10 @@ AttributeFilterExtensionMaker.getFilterFields = function(pObjectType)
                 title: row["FULL_ATTRIBUTE_NAME"],
                 //workaround since we do not have a "UNKNOWN"-contentType in the filter-definition
                 contentType: contentType == "UNKNOWN" ? "TEXT" : contentType,
-                hasDropDownValues: contentType == "UNKNOWN" || contentType == "BOOLEAN" ? true : false//TODO: determine this somehow else
+                hasDropDownValues: contentType == "UNKNOWN" || contentType == "BOOLEAN",//TODO: determine this somehow else
+                isGroupable: true,
+                groupedRecordField: groupedRecordField,//groupedRecordField
+                titleRecordField: sqlMask.isNull(titleRecordField, "'"+translate.text("unassigned")+"'")
             });
         }
     });
@@ -258,3 +273,64 @@ AttributeFilterExtensionMaker.makeFilterConditionSql = function()
         uidInfo.table, uidInfo.column, columnPlaceholder);
     return res;
 };
+
+/**
+ * fetches attributes that are groupable and transofms them into Groupings
+ * 
+ * @param {String} pFrom             The Value of the fromClauseProcess (if not used, then the "Main" Table)
+ * 
+ * @see AttributeFilterExtensionMaker.getFilterGroupQuery for more details
+ */
+AttributeFilterExtensionMaker.makeFilterGroupQuery = function(pFrom)
+{
+    var attributeName = vars.get("$local.name");
+    var condition = vars.get("$local.condition").trim(); //can have multiple space characters
+    var groupColumnList = vars.get("$local.columnlist");
+    var order = vars.get("$local.order");
+    var count = vars.get("$local.count");
+    var uidInfo = vars.get("$sys.uidcolumn");
+    var res = AttributeFilterExtensionMaker.getFilterGroupQuery(attributeName, condition, groupColumnList, order, count, uidInfo, pFrom);
+    return res;
+};
+
+
+/**
+ * 
+ * @param {String} pAttributeName       The Attribute-name contains various data of the attribute as a encoded string
+ * @param {String} pCondition           Contains the local Condition
+ * @param {String} pColumnList          Contains various Columns for the group Select
+ * @param {String} pOrder               In which order the results should be displayed
+ * @param {String} pCount               Indicates if u need to count or not, TRUE and FALSE
+ * @param {String} pUidColumn           The Column that is linked with AB_ATTRIBUTERELATION.OBJECT_ROWID
+ * @param {String} pFrom                The From part is needed to use the Condition right in every way
+ *                                      
+ * @return {String}                     <p/> SQL-Statemente for grouping
+ *                                      It returns the count or the Group Values
+ * @static 
+ */
+AttributeFilterExtensionMaker.getFilterGroupQuery = function(pAttributeName, pCondition, pColumnList, pOrder, pCount, pUidColumn, pFrom) 
+{
+
+    var name =  AttributeSearchNameCoder.decode(pAttributeName);
+
+    var attributeId = name.id;
+    var attrType = name.type;
+    var valuefield = AttributeTypeUtil.getDatabaseField(attrType);
+    
+    if (attrType == AttributeTypes.VOID())
+        valuefield = "AB_ATTRIBUTE_ID";
+
+
+    var stmt = newSelect(pCount ? "1" : pColumnList).from(pFrom)
+    .leftJoin("AB_ATTRIBUTERELATION", newWhere("AB_ATTRIBUTERELATION.OBJECT_ROWID = "+pUidColumn).and("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", attributeId));
+            
+    if(pCondition)
+        stmt.where(pCondition);
+        
+    stmt.groupBy(valuefield);
+        
+    if(pOrder)   
+        stmt.orderBy(pOrder);
+
+    return stmt.toString();
+};
\ No newline at end of file
diff --git a/process/AttributeRegistry_basic/AttributeRegistry_basic.aod b/process/AttributeRegistry_basic/AttributeRegistry_basic.aod
index d4917ea14ea0bb20d46d5ca2680e75daa034ce5c..3ed840c1e53f66ed4c7fa01b61bdd16433537664 100644
--- a/process/AttributeRegistry_basic/AttributeRegistry_basic.aod
+++ b/process/AttributeRegistry_basic/AttributeRegistry_basic.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>AttributeRegistry_basic</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/AttributeRegistry_basic/process.js</process>
diff --git a/process/Attribute_lib/Attribute_lib.aod b/process/Attribute_lib/Attribute_lib.aod
index 7d9936e818274c5e11dd7fec0c27953f2d32d4e9..0d46a6a7dc9b186e465727e6fa1806abfad13f58 100644
--- a/process/Attribute_lib/Attribute_lib.aod
+++ b/process/Attribute_lib/Attribute_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Attribute_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Attribute_lib/process.js</process>
diff --git a/process/Attribute_lib/process.js b/process/Attribute_lib/process.js
index 938efc90998d5f52bcbc92c00ff68697d17137d6..a5a3d2b7a68cb7a398fdc24b771f9a9fe500931b 100644
--- a/process/Attribute_lib/process.js
+++ b/process/Attribute_lib/process.js
@@ -859,10 +859,16 @@ Object.assign(AttributeTypes.BOOLEAN, {
     contentType: "BOOLEAN", 
     databaseField: "INT_VALUE",
     singleSelection: true,
+    getDisplayValueSql: function (pAttributeData)
+    {
+        var valueField = "AB_ATTRIBUTERELATION." + this.databaseField;
+        return SqlBuilder.caseWhen(valueField, "1").thenString(translate.text("Yes"))
+            .when(valueField, "0").thenString(translate.text("No"));
+    },
     getViewValue: function (pValue)
-        {
-            return pValue == "1" ? translate.text("Yes") : translate.text("No");
-        }
+    {
+        return Utils.toBoolean(pValue) ? translate.text("Yes") : translate.text("No");
+    }
 });
 Object.assign(AttributeTypes.COMBO, {
     toString: function () {return this();},
@@ -870,15 +876,30 @@ Object.assign(AttributeTypes.COMBO, {
     databaseField: "ID_VALUE",
     possibleChildren: [AttributeTypes.COMBOVALUE()],
     //in most cases the view value of this attribute type is loaded via a direct sql join for less queries and better performance
-    getViewValue: function (pValue)
+    getDisplayValueSql: function (pAttributeData)
+    {
+        var valueField = "AB_ATTRIBUTERELATION." + this.databaseField;
+        var values = newSelect(["AB_ATTRIBUTEID", "ATTRIBUTE_NAME"])
+            .from("AB_ATTRIBUTE")
+            .where("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", pAttributeData.attributeId)
+            .and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", AttributeTypes.COMBOVALUE())
+            .table();
+        var sql = SqlBuilder.caseStatement(values, valueField);
+        values.forEach(function ([key, value])
         {
-            var viewValue = newSelect("AB_ATTRIBUTE.ATTRIBUTE_NAME")
-                .from("AB_ATTRIBUTE")
-                .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", pValue)
-                .and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", AttributeTypes.COMBOVALUE())
-                .cell();
-            return viewValue ? translate.text(viewValue) : viewValue;
-        }
+            sql.when(valueField, key).thenString(translate.text(value));
+        });
+        return sql.toString();
+    },
+    getViewValue: function (pValue)
+    {
+        var viewValue = newSelect("AB_ATTRIBUTE.ATTRIBUTE_NAME")
+            .from("AB_ATTRIBUTE")
+            .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", pValue)
+            .and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", AttributeTypes.COMBOVALUE())
+            .cell();
+        return viewValue ? translate.text(viewValue) : viewValue;
+    }
 });
 Object.assign(AttributeTypes.COMBOVALUE, {
     toString: function () {return this();},
@@ -907,18 +928,23 @@ Object.assign(AttributeTypes.KEYWORD, {
     toString: function () {return this();},
     contentType: "UNKNOWN", 
     databaseField: "ID_VALUE", 
+    getDisplayValueSql: function (pAttributeData)
+    {
+        var valueField = "AB_ATTRIBUTERELATION." + this.databaseField;
+        return KeywordUtils.getResolvedTitleSqlPart(pAttributeData.dropDownDefinition, valueField);
+    },
     getViewValue: function (pValue, pKeyword)
-        {
-            return KeywordUtils.getViewValue(pKeyword, pValue);
-        },
+    {
+        return KeywordUtils.getViewValue(pKeyword, pValue);
+    },
     dropDownDefinitionTitle: "Keyword",
     getDropDownDefinitions: function ()
+    {
+        return KeywordUtils.getContainerNames().map(function (e)
         {
-            return KeywordUtils.getContainerNames().map(function (e)
-            {
-                return [e, e];//currently the first column is ID, second view value - which is the same because there is no ID for keyword-containers
-            });
-        }
+            return [e, e];//currently the first column is ID, second view value - which is the same because there is no ID for keyword-containers
+        });
+    }
 });
 Object.assign(AttributeTypes.VOID, {
     toString: function () {return this();},
@@ -1096,6 +1122,22 @@ AttributeTypeUtil.getDropDownDefinitionTitle = function (pAttributeType)
     return AttributeTypeUtil._getProperty(pAttributeType, "dropDownDefinitionTitle", "");
 }
 
+AttributeTypeUtil.getDisplayValueSqlFn = function (pAttributeType)
+{
+    if (!pAttributeType)
+        return null;
+    
+    pAttributeType = pAttributeType.trim();
+    var attributeType = AttributeTypes[pAttributeType];
+    if (!attributeType)
+        return null;
+    var displayValueSqlFn = attributeType.getDisplayValueSql || function () 
+    {
+        return this.databaseField;
+    };
+    return displayValueSqlFn.bind(attributeType);
+}
+
 /**
  * Compare the given pAttributeType with the attribute type string
  * "OBJECTSELECTION".
@@ -1459,8 +1501,6 @@ function AttributeRelationQuery (pObjectRowId, pAttributeId, pObjectType)
     this._attributeTypes = null;
     this._includeFullAttributeName = false;
     this._includeDisplayValue = false;
-    
-    return this;
 }
 
 /**
@@ -1669,6 +1709,41 @@ AttributeRelationQuery.prototype.getAttributeCount = function ()
         .cell() || 0);
 }
 
+AttributeRelationQuery.prototype.getMaxCount = function ()
+{
+    if (!this._objectType || !this._rowId)
+        throw new Error("AttributeRelationQuery: Object type and row id are required");
+    if (!this._attributeIds || this._attributeIds.length !== 1)
+        throw new Error("AttributeRelationQuery: You have to specify a single attribute id");
+    
+    var attributeId = this._attributeIds[0];
+    
+    var maxCount = newSelect("MAX_COUNT")
+        .from("AB_ATTRIBUTEUSAGE")
+        .where("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", attributeId)
+        .and("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", this._objectType)
+        .cell();
+    if (maxCount)
+        return Number(maxCount) || null;
+    return null;
+}
+
+AttributeRelationQuery.prototype.getMinCount = function ()
+{
+    if (!this._objectType || !this._rowId)
+        throw new Error("AttributeRelationQuery: Object type and row id are required");
+    if (!this._attributeIds || this._attributeIds.length !== 1)
+        throw new Error("AttributeRelationQuery: You have to specify a single attribute id");
+    
+    var attributeId = this._attributeIds[0];
+    
+    return Number(newSelect("MIN_COUNT")
+        .from("AB_ATTRIBUTEUSAGE")
+        .where("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", attributeId)
+        .and("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", this._objectType)
+        .cell());
+}
+
 /**
  * Inserts a new attribute relation.
  * 
@@ -1692,17 +1767,8 @@ AttributeRelationQuery.prototype.insertAttribute = function (pValue, pOmitValida
     
     if (!pOmitValidation)
     {
-        var maxCount = newSelect("MAX_COUNT")
-            .from("AB_ATTRIBUTEUSAGE")
-            .where("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", attributeId)
-            .and("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", this._objectType)
-            .arrayColumn();
-
-        if (maxCount.length == 0)
-            return false;
-
-        maxCount = maxCount[0];
-        if (maxCount && maxCount != 0)
+        var maxCount = this.getMaxCount();
+        if (maxCount)
         {
             let timesUsed = this.getAttributeCount();
             if (timesUsed >= maxCount)
@@ -1805,15 +1871,12 @@ AttributeRelation.prototype.deleteAttribute = function (pOmitValidation)
 {
     if (!pOmitValidation)
     {
-        var minCount = newSelect("MIN_COUNT")
-            .from("AB_ATTRIBUTEUSAGE")
-            .where("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", this.attributeId)
-            .and("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", this.objectType)
-            .cell();
-
-        if (minCount && minCount != 0)
+        var attributeQuery = new AttributeRelationQuery(this.objectRowId, this.attributeId, this.objectType);
+        var minCount = attributeQuery.getMinCount();
+        
+        if (minCount)
         {
-            let timesUsed = new AttributeRelationQuery(this.objectRowId, this.attributeId, this.objectType).getAttributeCount();
+            let timesUsed = attributeQuery.getAttributeCount();
             if (timesUsed <= minCount)
                 return false;
         }
diff --git a/process/Binary_lib/Binary_lib.aod b/process/Binary_lib/Binary_lib.aod
index 39de483b5c216084257d95a007b355a11c1d53c0..338211a33b61dfeed03e065d60e6eabb1f67ed0c 100644
--- a/process/Binary_lib/Binary_lib.aod
+++ b/process/Binary_lib/Binary_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Binary_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Binary_lib/process.js</process>
diff --git a/process/Bulkmail_lib/Bulkmail_lib.aod b/process/Bulkmail_lib/Bulkmail_lib.aod
index 0befb2a734840466905596858a7e558a4052f232..6bc2e64de1b4da7172b3984b996837925bf07c10 100644
--- a/process/Bulkmail_lib/Bulkmail_lib.aod
+++ b/process/Bulkmail_lib/Bulkmail_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Bulkmail_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Bulkmail_lib/process.js</process>
diff --git a/process/CachedRecordContainer_lib/CachedRecordContainer_lib.aod b/process/CachedRecordContainer_lib/CachedRecordContainer_lib.aod
index 07b3e2150f48a91844aeada49cb40dfbb5d04cf1..7257f6acb059c410783b52c8e68da1637a4d111f 100644
--- a/process/CachedRecordContainer_lib/CachedRecordContainer_lib.aod
+++ b/process/CachedRecordContainer_lib/CachedRecordContainer_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>CachedRecordContainer_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/CachedRecordContainer_lib/process.js</process>
diff --git a/process/CachedRecordContainer_lib/process.js b/process/CachedRecordContainer_lib/process.js
index e44f4dfa90c436f711c74ec22c5c4ad01d9942f2..f7d4ea84563fcc60f9606e7ad2efbd8de6cc27c4 100644
--- a/process/CachedRecordContainer_lib/process.js
+++ b/process/CachedRecordContainer_lib/process.js
@@ -161,7 +161,14 @@ CachedRecordContainerUtils.getKey = function(pVariable1, pVariableN) {
     varsToCheck.forEach(function (varToCheck){
         if (vars.exists(varToCheck))
         {
-            var value = vars.getString(varToCheck);
+            var value = vars.get(varToCheck);
+            if (value && Utils.isObject(value))
+            {
+                if (varToCheck === "$local.filters" && _isEmptyFilter(value))
+                    value = null;
+                else
+                    value = JSON.stringify(value);
+            }
             if (value != null)
                 key.push(value);
             else
@@ -174,4 +181,10 @@ CachedRecordContainerUtils.getKey = function(pVariable1, pVariableN) {
     });
     
     return key.join(".");
+    
+    function _isEmptyFilter (pFilter)
+    {
+        var childs = pFilter.childs;
+        return Utils.isNullOrEmpty(childs) || (childs.length === 1 && childs[0].operator === "CONTAINS" && !childs[0].key);
+    }
 };
\ No newline at end of file
diff --git a/process/Calendar_lib/Calendar_lib.aod b/process/Calendar_lib/Calendar_lib.aod
index ba466c5bf5fc50d099a4c5de79e3808744b53b56..657f6034dea6a1ee813d796025e4c9861432d484 100644
--- a/process/Calendar_lib/Calendar_lib.aod
+++ b/process/Calendar_lib/Calendar_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Calendar_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Calendar_lib/process.js</process>
diff --git a/process/Calendar_lib/process.js b/process/Calendar_lib/process.js
index 0a9a4b99e7c0c1abbe9d41af4f6ca2b2a734cab1..e9f96a4a9089f1ff65bb69dfb21ff41063f90ab8 100644
--- a/process/Calendar_lib/process.js
+++ b/process/Calendar_lib/process.js
@@ -538,4 +538,113 @@ CalendarUtil.getCalendarSystemType = function(pScope)
 
     // Everything is none
     return calendars.BACKEND_NONE;
+}
+
+CalendarUtil.buildEntriesFromUids = function(appointmentUids) 
+{
+    var entryArray = new Array(appointmentUids.length);
+    
+    for(var i = 0; i < appointmentUids.length; i++)
+    {
+        var hasPermission = true;
+        
+        if(vars.get("$param.ErrorOnPermissionDenied") == "false" || vars.getString("$param.LinkedAppointmentsFromDashlet_param"))
+            hasPermission = hasUserPermissionForReadingEntry(getEntryOwnerCn(appointmentUids[i]));
+       
+        if(hasPermission)
+            entryArray[i] = CalendarUtil.buildEntry(calendars.getEntry(appointmentUids[i], null, null), null);
+    }
+    
+    //filter out all null
+    var filteredEntryArray = entryArray.filter(function (el) {
+        return el != null;
+    });
+    
+    return filteredEntryArray;
+}
+
+
+CalendarUtil.countEntriesFromUids = function(appointmentUids) 
+{
+    return CalendarUtil.buildEntriesFromUids(appointmentUids).length;
+}
+
+CalendarUtil.buildEntry = function (pEntry, pMasterentry)
+{
+    var uid = pEntry[calendars.ID];    
+    var summary = pEntry[calendars.SUMMARY];
+    var attendees = pEntry[calendars.AFFECTEDUSERS];
+    var startdate = pEntry[calendars.DTSTART];
+    var enddate = pEntry[calendars.DTEND];
+    var links = pEntry[calendars.LINKS];
+    var description = pEntry[calendars.DESCRIPTION];
+    if(pEntry[calendars.ORGANIZER2] != undefined)
+        var organizer = pEntry[calendars.ORGANIZER2]["paramvalue"];
+    if(pEntry[calendars.USER2] != undefined)
+        var owner = JSON.stringify(pEntry[calendars.USER2]);
+    var status = pEntry[calendars.STATUS];
+    var location = pEntry[calendars.LOCATION];
+    var reminder = pEntry[calendars.REMINDER_DURATION];
+    var remindercheck = pEntry[calendars.HASREMINDER]
+    var classification = pEntry[calendars.CLASSIFICATION];
+    var transparency = pEntry[calendars.TRANSPARENCY];
+    var categories = pEntry[calendars.CATEGORIES];
+    var isAllDay = pEntry["X-ADITO-ISALLDAYEVENT"] != null ? pEntry["X-ADITO-ISALLDAYEVENT"] : "FALSE";
+    
+    var masterBegin = pMasterentry != null ? pMasterentry[calendars.DTSTART] : null
+    var masterEnd = pMasterentry != null ? pMasterentry[calendars.DTEND] : null
+    
+    // Recurrence
+    var recurrenceID = pEntry[calendars.RECURRENCEID];
+    var rrule = null;
+    if (pMasterentry != null) { // Entry is a recurrence exception, therefore get rrule from master
+        rrule = pMasterentry[calendars.RRULE] != null ? pMasterentry[calendars.RRULE][0] : null;
+    } else {
+        rrule = pEntry[calendars.RRULE] != null ? pEntry[calendars.RRULE][0] : null;
+    }
+    
+    return [
+            uid, 
+            attendees.length, 
+            startdate, 
+            enddate, 
+            summary, 
+            organizer,
+            owner,
+            attendees, 
+            status,  
+            description, 
+            location, 
+            '', 
+            isAllDay,
+            classification,
+            transparency, 
+            categories, 
+            reminder, 
+            remindercheck, 
+            rrule, 
+            recurrenceID, 
+            null, 
+            masterBegin, 
+            masterEnd,
+            null
+        ];
+}
+
+
+function hasUserPermissionForReadingEntry(calUserCn)
+{
+    return calendars.hasPermission(calUserCn, calendars.VEVENT, "READ");
+}
+
+function getEntryOwnerCn(appointmentUid)
+{
+    
+    var owner = newSelect("ASYS_CALENDARBACKEND.OWNER", "_____SYSTEMALIAS")
+        .from("ASYS_CALENDARBACKEND")
+        .whereIfSet("ASYS_CALENDARBACKEND.ELEMENTUID", appointmentUid)
+        .cell(true);
+        
+    var ownerArr = text.decodeMS(owner);
+    return ownerArr[1].split(":")[1];
 }
\ No newline at end of file
diff --git a/process/Campaign_lib/Campaign_lib.aod b/process/Campaign_lib/Campaign_lib.aod
index 6cff8443c7403caa3bbdc859ee356e248dc54018..1018469206a67ad0b29b351669b2b1882538d96a 100644
--- a/process/Campaign_lib/Campaign_lib.aod
+++ b/process/Campaign_lib/Campaign_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Campaign_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Campaign_lib/process.js</process>
diff --git a/process/Campaign_lib/process.js b/process/Campaign_lib/process.js
index 7c893948d7f1a576518e469721ae1dbec4a50ec2..f3934b933660f8cb2ba2fe7b756d1b0094b87e7f 100644
--- a/process/Campaign_lib/process.js
+++ b/process/Campaign_lib/process.js
@@ -170,12 +170,16 @@ CampaignUtils.getCampaignStatusByCampaignId = function(pCampaignId)
  */
 CampaignUtils.createLogEntry = function(pCampaignId, pCampaignStepId, pCampaignParticipantId, pPreviousCampaignStepId)
 {
-    let colsCampaignParticipantLog = CampaignUtils.getParticipantLogInsertColumnNames();
+    var rowCount = new SqlBuilder().insertFields({
+        "CAMPAIGN_ID": pCampaignId, 
+        "CAMPAIGNSTEP_ID": pCampaignStepId, 
+        "CAMPAIGNPARTICIPANT_ID": pCampaignParticipantId, 
+        "USER_NEW": vars.get("$sys.user"), 
+        "DATE_NEW": vars.get("$sys.date"), 
+        "PREVIOUS_CAMPAIGNSTEP_ID": pPreviousCampaignStepId
+    }, "CAMPAIGNPARTICIPANTLOG", "CAMPAIGNPARTICIPANTLOGID");
     
-    let valsCampaignParticipantLog = new Array(util.getNewUUID(), pCampaignId, pCampaignStepId, pCampaignParticipantId, vars.get("$sys.user"), vars.get("$sys.date"), pPreviousCampaignStepId);
-    
-    let rows = db.insertData("CAMPAIGNPARTICIPANTLOG", colsCampaignParticipantLog, null, valsCampaignParticipantLog);
-    return (rows == 1);
+    return rowCount > 0;
 }
 
 /**
@@ -204,12 +208,11 @@ CampaignUtils.getParticipantLogInsertColumnNames = function()
 CampaignUtils.openSetCampaignStepViewByRowIds = function(pParticipantIds, pCampaignId, pCampaignStepId)
 {
     var params = {
-        "campaignParticipantsRowIds_param":pParticipantIds,
-        "currentCampaignId_param":pCampaignId,
-        "currentCampaignStepId_param":pCampaignStepId,
-        "isUpdate_param":true
+        "campaignParticipantsRowIds_param": pParticipantIds,
+        "currentCampaignId_param": pCampaignId,
+        "currentCampaignStepId_param": pCampaignStepId,
+        "isUpdate_param": true
     };
-    
     neon.openContext("CampaignAddParticipants", "CampaignAddParticipantsEdit_view", null, neon.OPERATINGSTATE_VIEW, params);
 }
 
@@ -226,12 +229,12 @@ CampaignUtils.openSetCampaignStepViewByRowIds = function(pParticipantIds, pCampa
  */
 CampaignUtils.openSetCampaignStepViewByCondition = function(pCondition, pCampaignId, pCampaignStepId)
 {
-    var params = {};
-    params["campaignParticipantsCondition_param"] = pCondition;
-    params["currentCampaignId_param"] = pCampaignId;
-    params["currentCampaignStepId_param"] = pCampaignStepId;
-    params["isUpdate_param"] = true;
-    
+    var params = {
+        "campaignParticipantsCondition_param": pCondition,
+        "currentCampaignId_param": pCampaignId,
+        "currentCampaignStepId_param": pCampaignStepId,
+        "isUpdate_param": true
+    };
     neon.openContext("CampaignAddParticipants", "CampaignAddParticipantsEdit_view", null, neon.OPERATINGSTATE_VIEW, params);
 }
 
@@ -244,11 +247,10 @@ CampaignUtils.openSetCampaignStepViewByCondition = function(pCondition, pCampaig
  */
 CampaignUtils.openNewCampaignStepView = function(pCampaignId)
 {
-    var params = {};
-    
-    params["campaignId_param"] = pCampaignId;
-    params["campaignSelectionVisible_param"] = true;
-
+    var params = {
+        "campaignId_param": pCampaignId,
+        "campaignSelectionVisible_param": true
+    };
     neon.openContext("CampaignStep", "CampaignStepEdit_view", null, neon.OPERATINGSTATE_NEW, params);
 }
 
@@ -258,9 +260,7 @@ CampaignUtils.openNewCampaignStepView = function(pCampaignId)
  */
 CampaignUtils.openNewCampaignView = function()
 {
-    var params = {};
-    
-    neon.openContext("Campaign", "CampaignEdit_view", null, neon.OPERATINGSTATE_NEW, params);
+    neon.openContext("Campaign", "CampaignEdit_view", null, neon.OPERATINGSTATE_NEW, {});
 }
 
 /**
@@ -343,19 +343,19 @@ CampaignUtils.getMaxParticipantsValidationMessage = function()
  */
 CampaignUtils.deleteCampaignStepData = function(pCampaignStepId)
 {
-    if(pCampaignStepId == null || pCampaignStepId == "")
+    if (!pCampaignStepId)
         return;
-    
-    let queries = [];
 
     newWhere("CAMPAIGNSTEP.PREDECESSORSTEP_ID", pCampaignStepId)
-        .updateData(true, ["PREDECESSORSTEP_ID"], null, [""]);
+        .updateFields({"PREDECESSORSTEP_ID": ""});
     
-    queries.push(new Array("CAMPAIGNPARTICIPANTLOG", newWhere("CAMPAIGNPARTICIPANTLOG.CAMPAIGNSTEP_ID", pCampaignStepId).build()));
-    queries.push(new Array("CAMPAIGNPARTICIPANT", newWhere("CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID", pCampaignStepId).build()));
-    queries.push(new Array("CAMPAIGNCOST", newWhere("CAMPAIGNCOST.CAMPAIGNSTEP_ID", pCampaignStepId).build()));
-    queries.push(new Array("CAMPAIGNSTEP", newWhere("CAMPAIGNSTEP.CAMPAIGNSTEPID", pCampaignStepId).build()));
-    db.deletes(queries)
+    var deleteStatements = [
+        newWhere("CAMPAIGNPARTICIPANTLOG.CAMPAIGNSTEP_ID", pCampaignStepId).buildDeleteStatement(),
+        newWhere("CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID", pCampaignStepId).buildDeleteStatement(),
+        newWhere("CAMPAIGNCOST.CAMPAIGNSTEP_ID", pCampaignStepId).buildDeleteStatement(),
+        newWhere("CAMPAIGNSTEP.CAMPAIGNSTEPID", pCampaignStepId).buildDeleteStatement()
+    ];
+    db.deletes(deleteStatements);
 }
 
 /**
@@ -372,24 +372,22 @@ CampaignUtils.deleteCampaignStepData = function(pCampaignStepId)
  */
 CampaignUtils.deleteCampaignData = function(pCampaignId)
 {
-    if(pCampaignId == null || pCampaignId == "")
+    if (!pCampaignId)
         return;
     
-    let campaignStepIds = newSelect("CAMPAIGNSTEPID")
+    var campaignStepIds = newSelect("CAMPAIGNSTEPID")
                             .from("CAMPAIGNSTEP")
                             .where("CAMPAIGNSTEP.CAMPAIGN_ID", pCampaignId)
                             .arrayColumn();
     
-    campaignStepIds.forEach(function (campaignStepId) 
-    {
-        CampaignUtils.deleteCampaignStepData(campaignStepId)
-    });
+    campaignStepIds.forEach(CampaignUtils.deleteCampaignStepData);
     
-    let campaignRelated = [];
-    campaignRelated.push(new Array("CAMPAIGNCOST", newWhere("CAMPAIGNCOST.CAMPAIGN_ID", pCampaignId).build()));
-    campaignRelated.push(new Array("CAMPAIGN", newWhere("CAMPAIGN.CAMPAIGNID", pCampaignId).build()));
+    var campaignRelated = [
+        newWhere("CAMPAIGNCOST.CAMPAIGN_ID", pCampaignId).buildDeleteStatement(),
+        newWhere("CAMPAIGN.CAMPAIGNID", pCampaignId).buildDeleteStatement()
+    ];
     
-    db.deletes(campaignRelated)
+    db.deletes(campaignRelated);
 }
 
 /**
@@ -404,14 +402,14 @@ CampaignUtils.deleteCampaignData = function(pCampaignId)
  */
 CampaignUtils.updateCampaignStep = function(pCampaignStepId, pDateStart, pDateEnd)
 {
-    if(pCampaignStepId == null || pCampaignStepId == "")
+    if (!pCampaignStepId)
         return;
     
-    let columnsToUpdate = ["DATE_START", "DATE_END"];
-    let newValues = [pDateStart, pDateEnd];
-    let campaignStepIdCondition = newWhere("CAMPAIGNSTEP.CAMPAIGNSTEPID", pCampaignStepId);
-    
-    campaignStepIdCondition.updateData(true, "CAMPAIGNSTEP", columnsToUpdate, null, newValues);
+    newWhere("CAMPAIGNSTEP.CAMPAIGNSTEPID", pCampaignStepId)
+        .updateFields({
+            "DATE_START": pDateStart, 
+            "DATE_END": pDateEnd
+        });
 }
 
 /**
@@ -629,13 +627,20 @@ CampaignUtils.GetContactCountByCondition = function(pCondition, pLookInCampaignO
  */
 CampaignUtils.copyCampaign = function(pCampaignid, pDescription, pEmplContactId, pName, pState)
 {
-    var params = {
-        "originalCampaignIdCopy_param" : pCampaignid,
-        "description_param" : pDescription,
-        "emplContactId_param" : pEmplContactId,
-        "name_param" : pName || "",
-        "state_param" : pState || ""
-    };
+    var fieldValues = {}
+    var preSetValues = {}
+    var params = {}
+
+    preSetValues["$field.DESCRIPTION"] = pDescription
+    preSetValues["$field.EMPLOYEE_CONTACT_ID"] = pEmplContactId
+    preSetValues["$field.NAME"] = pName
+    preSetValues["$field.STATUS"] = pState
+
+    fieldValues["FIELDS"] = preSetValues
+    fieldValues["CAMPAIGNID"] = pCampaignid
+    params["Copy_param"] = JSON.stringify(fieldValues)
+    
+    
     neon.openContext("Campaign", null, null, neon.OPERATINGSTATE_NEW, params);
 }
 
diff --git a/process/ClassificationFilter_lib/ClassificationFilter_lib.aod b/process/ClassificationFilter_lib/ClassificationFilter_lib.aod
index 9b182044a8785df3037df931f0df656d095ae109..705efe2d6620d1a37bc4b723a9615acc23895e35 100644
--- a/process/ClassificationFilter_lib/ClassificationFilter_lib.aod
+++ b/process/ClassificationFilter_lib/ClassificationFilter_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>ClassificationFilter_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/ClassificationFilter_lib/process.js</process>
diff --git a/process/ClassificationFilter_lib/process.js b/process/ClassificationFilter_lib/process.js
index e2200e6e6e8ad55b95fa5fbfdf8cf38c71884677..bf593e707733064fa47d17aa6fb2534d5785eec1 100644
--- a/process/ClassificationFilter_lib/process.js
+++ b/process/ClassificationFilter_lib/process.js
@@ -239,8 +239,15 @@ ClassificationGroupFilterUtils.getFilterFields = function(pObjectType)
     classificationGroups.forEach(function(classificationGroup, idx){
         var classificationGroupId = classificationGroup["CLASSIFICATIONGROUPID"];
         var classificationGroupTitle = classificationGroup["#CONTENTTITLE"];
-        
-        var representingSqlExpression = sqlHelper.substring("CLASSIFICATIONVALUE", idx+1, 1);
+
+        //"case when" needed since we want to group both the ones that have no classification for said classificationgroup ("-") 
+        //and the ones that have null as the value (since not all datasets have a CLASSIFICATIONSTORAGE dataset) together
+        // since both don't have an classification for that group
+        var representingSqlExpression = SqlBuilder.caseWhen(newWhere("CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE is null"))
+                                                            .thenString("-")
+                                                            .elseValue(sqlHelper.substring("CLASSIFICATIONVALUE", idx+1, 1))
+                                                            .toString();
+                                                            
         var name = ClassificationGroupFilterNameCoder.encode(classificationGroupId, representingSqlExpression);
         res.push({
             name: name,
@@ -318,7 +325,12 @@ ClassificationGroupFilterUtils.getFilterCondition = function(pObjectType, pFilte
 {
     var decodedFilterName = ClassificationGroupFilterNameCoder.decode(pFilterName);
     var condition = StringUtils.replaceAll(pCondition, pColumnPlaceholder, decodedFilterName.representingSqlExpression);
-            
+    
+    //"case when" needed since we want to filter both the ones that have no classification for said classificationgroup ("-") 
+    //and the ones that have null as the value (since not all datasets have a CLASSIFICATIONSTORAGE dataset) the same way
+    // since both don't have an classification for that group
+    if(pOperatorName == "IS NULL")
+        condition += " OR " + decodedFilterName.representingSqlExpression +"='-'";
     return condition;
 };
 
diff --git a/process/Classification_lib/Classification_lib.aod b/process/Classification_lib/Classification_lib.aod
index 659223c9d3b507cfadcd0a8e6a6d0b71f1efe0e5..5b4114c59eaaabf71c169a9f4cd0582cfa6ab60b 100644
--- a/process/Classification_lib/Classification_lib.aod
+++ b/process/Classification_lib/Classification_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Classification_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Classification_lib/process.js</process>
diff --git a/process/Classification_lib/process.js b/process/Classification_lib/process.js
index 756e30fa5384e32bccb6c7e32ebe001c6987c9eb..b0a5a6830003d7b1ec3ffc91cccd9c6897221938 100644
--- a/process/Classification_lib/process.js
+++ b/process/Classification_lib/process.js
@@ -369,7 +369,6 @@ ClassificationUtils.insertEmptyClassification = function(pUids, pObjectType)
             "OBJECT_ROWID",
             "OBJECT_TYPE"
             ];
-    var types = db.getColumnTypes("CLASSIFICATIONSTORAGE", columns);//load once for better performance
     var inserts = [];
     var values;
     for (var i = 0; i < pUids.length; i++) 
@@ -378,7 +377,7 @@ ClassificationUtils.insertEmptyClassification = function(pUids, pObjectType)
                 classificationvalue,
                 pUids[i],
                 pObjectType];
-        inserts.push(["CLASSIFICATIONSTORAGE", columns, types, values]);
+        inserts.push(["CLASSIFICATIONSTORAGE", columns, null, values]);
     }
     db.inserts(inserts);
 }
diff --git a/process/Communication_lib/Communication_lib.aod b/process/Communication_lib/Communication_lib.aod
index a69299aa2aa56c2a3a2b1a4321e8779ff438187b..1bc1f16ef819bc6d5e27a7223595440cbc1e0d54 100644
--- a/process/Communication_lib/Communication_lib.aod
+++ b/process/Communication_lib/Communication_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Communication_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Communication_lib/process.js</process>
diff --git a/process/Contact_lib/Contact_lib.aod b/process/Contact_lib/Contact_lib.aod
index ea8e5020017153333df78eddfd6bfd9c415e7208..3f85ffbdb21af8da880c9506eb12cdb42083f393 100644
--- a/process/Contact_lib/Contact_lib.aod
+++ b/process/Contact_lib/Contact_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Contact_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Contact_lib/process.js</process>
diff --git a/process/Contact_lib/process.js b/process/Contact_lib/process.js
index 627ec11b149a9b0ef93163901dda95b23f7f98b9..7bbafdc693adac2eb70bf75da3d35f24790c6560 100644
--- a/process/Contact_lib/process.js
+++ b/process/Contact_lib/process.js
@@ -434,6 +434,26 @@ ContactUtils.getFullContactString = function()
          + " left join ADDRESS on ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID";
 }
 
+/**
+ * Returns a SqlBuilder for selecting a contact with organisation, person and address. 
+ * 
+ * @param {String|Array|SqlBuilder} [pSelectFields] The select-part to set for the query, if it is omitted, no select will be set.
+ * @return {SqlBuilder}
+ */
+ContactUtils.getFullContactSqlBuilder = function (pSelectFields)
+{
+    var sql = new SqlBuilder()
+        .from("CONTACT")
+        .join("ORGANISATION", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
+        .leftJoin("PERSON", "PERSON.PERSONID = CONTACT.PERSON_ID")
+        .leftJoin("ADDRESS", "ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID");
+        
+    if (pSelectFields)
+        sql.select(pSelectFields);
+    
+    return sql;
+}
+
 /**
  * get the addressid of the default address
  *
@@ -528,11 +548,41 @@ ContactUtils.getActiveCommRestrictionsSubselect = function()
                             .and(newWhere()
                                     .or("COMMRESTRICTION.CONTACT_ID = CONTACT.CONTACTID")
                                     .or("COMMRESTRICTION.CONTACT_ID", orgContactSubselect));
-
+        //!SqlBuilder
         parts.push("case when exists(" + subquery.toString() + ") then '" + pMedium[1] + "' else '' end");
     })
 
-    return sqlMasking.concat(parts, " ", false);
+    return sqlMasking.concatWithSeparator(parts, " ", false);
+}
+
+/**
+ * returns a sql subselect which counts all Commrestrictions from a Person and his Organisation.
+ * The select needs the CONTACT.CONTACTID column.
+ * 
+ * @return {String} the resulting subselect
+ */
+ContactUtils.getCommRestrictionCount = function(pMedium, pStartDate)
+{
+    if (!pStartDate && pStartDate !== 0)
+        pStartDate = datetime.date();
+    var firstLevel = new SqlBuilder()
+        .select("count(*)")
+        .from("COMMRESTRICTION")
+        .whereIfSet("COMMRESTRICTION.MEDIUM", pMedium)
+        .and("COMMRESTRICTION.STARTDATE", pStartDate, SqlBuilder.LESS_OR_EQUAL())
+        .and("COMMRESTRICTION.CONTACT_ID = CONTACT.CONTACTID");
+        
+    var secondLevel = new SqlBuilder()
+        .select("count(*)")
+        .from("COMMRESTRICTION")
+        .whereIfSet("COMMRESTRICTION.MEDIUM", pMedium)
+        .and("COMMRESTRICTION.STARTDATE", pStartDate, SqlBuilder.LESS_OR_EQUAL())
+        .and("COMMRESTRICTION.CONTACT_ID", newSelect("c1.CONTACTID").from("CONTACT", "c1")
+                                          .join("CONTACT", "c2.ORGANISATION_ID = c1.ORGANISATION_ID and c1.PERSON_ID is null", "c2")
+                                          .where("c2.CONTACTID = CONTACT.CONTACTID")
+        , SqlBuilder.IN());
+            
+    return firstLevel.toString() +") + ("+secondLevel.toString(); 
 }
 
 /**
@@ -659,12 +709,12 @@ function ContactTitleRenderer(pContact, pOptions)
     //function that renders the contact into a sql expression (e.g. for a subselect)
     this._asSqlFn = function(){
         var maskingUtil = new SqlMaskingUtils();
-        var res = maskingUtil.concat([this.contact.salutation, this.contact.title, this.contact.firstname, this.contact.middlename, this.contact.lastname].filter(function (e){
+        var res = maskingUtil.concatWithSeparator([this.contact.salutation, this.contact.title, this.contact.firstname, this.contact.middlename, this.contact.lastname].filter(function (e){
             return e != "";
-        }), " ");
+        }), " ", false);
         //binary AND check for possibility to check serveral options
         if (this._options & ContactTitleRenderer.OPTIONS.IncludeOrganisation && this.contact.organisationName)
-            res = maskingUtil.concat([res, this.contact.organisationName], " | ");
+            res = maskingUtil.concatWithSeparator([res, this.contact.organisationName], " | ");
         return res;
     };
     
diff --git a/process/Context_lib/Context_lib.aod b/process/Context_lib/Context_lib.aod
index 88f0211eacad5423f96a78a8ceaa903a1bf72cdb..85bdd8cc4de7cbecc8feed39e346e5769e89a853 100644
--- a/process/Context_lib/Context_lib.aod
+++ b/process/Context_lib/Context_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Context_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Context_lib/process.js</process>
diff --git a/process/Context_lib/process.js b/process/Context_lib/process.js
index 31d608284325922fc657f5e9388ee3782d68e8eb..a938c5d286655fc03057e7d612d9727b01f34294 100644
--- a/process/Context_lib/process.js
+++ b/process/Context_lib/process.js
@@ -1,3 +1,5 @@
+import("system.logging");
+import("Util_lib");
 import("system.entities");
 import("system.tools");
 import("system.neon");
@@ -28,7 +30,7 @@ function ContextUtils() {}
  */
 ContextUtils.getCurrentContextId = function()
 {
-   return   vars.getString("$sys.currentcontextname");
+    return vars.getString("$sys.currentcontextname");
 }
 
 /**
@@ -85,6 +87,27 @@ ContextUtils.getEntity = function (pContextId)
     return project.getContextStructure(pContextId).entity;
 }
 
+/**
+ * Returns the context associated with the entity
+ * 
+ * @param {String} pEntity the name of the Entity
+ * @return {String} the context
+ */
+ContextUtils.getContextId = function (pEntity)
+{
+    if (!pEntity)
+        return null;
+    
+    let contexte = ContextUtils.getContexts(false, [], false);
+    
+    for (let i = 0; i < contexte.length; i++) {
+        if (ContextUtils.getEntity(contexte[i][0]) == pEntity)
+            return contexte[i][0];
+    }
+    return null;
+    
+}
+
 /**
  * Returns the title of the entity associated with the context
  * 
@@ -144,7 +167,7 @@ ContextUtils.getContextConsumer = function(pContextId)
         case ContextUtils.getContextName("PrivatePerson"):
             return "PrivatePersons";
         case ContextUtils.getContextName("Leadimport"):
-            return "Leadimport";
+            return "Leadimports";
         case ContextUtils.getContextName("Task"):
             return "Tasks";
         case ContextUtils.getContextName("SupportTicket"):
@@ -170,9 +193,9 @@ ContextUtils.loadContentTitle = function(pEntity, pUid, pProvider)
         return "";
 
     var conf = entities.createConfigForLoadingRows()
-        .entity(pEntity)
-        .uid(pUid)
-        .fields(["#CONTENTTITLE"]);
+    .entity(pEntity)
+    .uid(pUid)
+    .fields(["#CONTENTTITLE"]);
 
     if (pProvider)
         conf.provider(pProvider);
@@ -181,35 +204,107 @@ ContextUtils.loadContentTitle = function(pEntity, pUid, pProvider)
     return rows.length === 1 ? rows[0]["#CONTENTTITLE"] : "";
 }
 
+
+/**
+ * loads the contentdescription by using entities.getRow
+ * @param {String} pEntity The entity name you want to load the title for
+ * @param {String} pUid the uid for which to load the title
+ * @param {String} [pProvider] providername when instead of the default provider another provider shall be used
+ * 
+ * @return the #CONTENTDESCRIPTION or ""
+ */
+ContextUtils.loadContentDescription = function(pEntity, pUid, pProvider)
+{
+    if (!pUid)
+        return "";
+
+    var conf = entities.createConfigForLoadingRows()
+    .entity(pEntity)
+    .uid(pUid)
+    .fields(["#CONTENTDESCRIPTION"]);
+
+    if (pProvider)
+        conf.provider(pProvider);
+    
+    var rows = entities.getRows(conf);
+    return rows.length === 1 ? rows[0]["#CONTENTDESCRIPTION"] : "";
+}
+
+/**
+ * loads specified Fields for one Row by using entities.getRow
+ * @param {String} pEntity The entity name you want to load the title for
+ * @param {String[]} [pUid] the uids for which to load the content
+ * @param {String[]} [pFields] fields you want as result
+ * @param {String[]} [pExcludeIDs] uids you want to exclude from the list
+ * @param {String} pProvider providername when instead of the default provider another provider shall be used
+ * 
+ * @return the Values of the Fields
+ */
+ContextUtils.loadContent = function(pEntity, pUid, pFields, pExcludeIDs, pProvider)
+{
+    if (!pEntity)
+        return [];
+
+    var conf = entities.createConfigForLoadingRows()
+    .entity(pEntity)
+    .uids(pUid)
+    .fields(pFields);
+
+    if (pProvider)
+        conf.provider(pProvider);
+
+    if (pExcludeIDs)
+    {
+        var childsArray = [{
+            "type":"row",
+            "name":"#UID",
+            "operator":"NOT_IN",
+            "value": JSON.stringify(pExcludeIDs),
+            "key": JSON.stringify(pExcludeIDs),
+            "contenttype":"TEXT"
+        }];
+
+
+        var pFilterParent = {
+            "type":"group",
+            "operator":"OR",
+            "childs": childsArray
+        };
+        
+        conf.filter(JSON.stringify(pFilterParent));
+    }
+    
+    var rows = entities.getRows(conf);
+    return rows && rows.length > 0 ? rows : [];
+}
+
+
 /**
  *
- * @param {Boolean} [pFilter=false] filter only for contexts which have a mapping in ContextUtils.getSelectMap 
- * @param {String[]} [pBlacklist] contextIds that shall not be included (so this is a additional filter to the pFilter param)
+ * @param {String[]} [pBlacklist] contextIds that shall not be included
  * @param {Boolean} [pInvertBlacklist=false] decides whether the items in pBlacklist are excluded (false) or
  *                      everything that is NOT in pBlacklist is excluded (true) 
  *                      (-> if it is a whitelist or blacklist)
  *
  * @return {String[][]} the contexts [[contextId, contextName, contextTitle], [... ], ...]
  */
-ContextUtils.getContexts = function(pFilter, pBlacklist, pInvertBlacklist)
+ContextUtils.getContexts = function(pBlacklist, pInvertBlacklist)
 {
-    if (pFilter == undefined)
-        pFilter = false;
     if (pInvertBlacklist == undefined)
         pInvertBlacklist = false;
 
+
     var contexts = project.getDataModels(project.DATAMODEL_KIND_CONTEXT);
+    var contextsStandardList = ["Organisation", "Person", "PrivatePerson", "Activity", "Salesproject", "Contract", "Offer", "Order", "Product", "Task",
+    "Campaign", "CampaignStep", "SupportTicket", "Leadimport"];
 
-    if (pFilter)
-    {
-        contexts = contexts.filter(function(pContext) {
-            if (pBlacklist && pBlacklist.indexOf(pContext[0]) > -1 != pInvertBlacklist)
-                return false;
-            // filter only contexts which have defined mappings in Context_lib
-            return ContextUtils.getSelectMap ()[pContext[0]] != undefined;
-        });
-    }
-    else if (pBlacklist)
+    contexts = contexts.filter(function(pContext) {
+        if (contextsStandardList.indexOf(pContext[0]) > -1)
+            return true;
+        return false;
+    });
+
+    if (pBlacklist)
     {
         contexts = contexts.filter(function(pContext) {
             if (pBlacklist && pBlacklist.indexOf(pContext[0]) > -1 != pInvertBlacklist)
@@ -219,16 +314,16 @@ ContextUtils.getContexts = function(pFilter, pBlacklist, pInvertBlacklist)
     }
 
     return contexts.map(ContextUtils._contextDataMapping).sort(function(pContext1, pContext2)
-        {
-            // sort after ContextTitle
-            if (pContext1[2] > pContext2[2])
-                return 1;
+    {
+        // sort after ContextTitle
+        if (pContext1[2] > pContext2[2])
+            return 1;
 
-            if (pContext1[2] < pContext2[2])
-                return -1;
+        if (pContext1[2] < pContext2[2])
+            return -1;
 
-            return 0;
-        });
+        return 0;
+    });
 }
 
 /**
@@ -258,483 +353,136 @@ ContextUtils._contextDataMapping = function(pContext)
     return [pContext[0], contextName, (pContext[1] ? pContext[1] : contextName)];
 }
 
+
 /**
- * represents a single context selection for one context
- * this is usefull for objectlinks and 360° definition
- * most properties are read only and can only be written with a setter
+ * gets the Title for a specific Context
  * 
- * @param {String} [pTableName] presets the matching property of the object
- * @param {String} [pIdField] presets the matching property of the object
- * @param {String} [pTitleExpression] presets the matching property of the object
+ * @param {String} pContextId the name of the context
+ * @param {String} pRowId Uid of certain Context
  * 
- * TODO: mostly temporary function until you can get fields from another Entity
- *
- * @class
+ * @return {String} The #CONTENTTITLE
  */
-function ContextSelector(pTableName, pIdField, pTitleExpression)
+ContextUtils.getTitleByContext = function(pContextId, pRowId)
 {
-    //the >>this.propertyX = null;<< is for autocomplete in the designer
-    
-    /**
-     * title-definition; db-column or another sql-expression (like concating fields) as long as it returns one field
-     * read-only property; set it with a matching setter
-     * @property titleExpression
-     */
-    this.titleExpression = null; ProtoPropertyUtils.makeSemiReadOnly(this, "titleExpression");
-    this.setTitleExpression(pTitleExpression);
-
-    /**
-     * name of the database-table
-     * read-only property; set it with a matching setter
-     * @property tableName
-     */
-    this.tableName = null; ProtoPropertyUtils.makeSemiReadOnly(this, "tableName");
-    this.setTableName(pTableName);
-    
-    /**
-     * db-field for the ID of one record (UID of matching context)
-     * read-only property; set it with a matching setter
-     * @property idField
-     */
-    this.idField = null; ProtoPropertyUtils.makeSemiReadOnly(this, "idField");
-    this.setIdField(pIdField);
-    
-    /**
-     * expression for additional joins to be made (addotopmaö pt table-name)
-     * read-only property; set it with a matching setter
-     * @property joinExpression
-     */
-    this.joinExpression = null; ProtoPropertyUtils.makeSemiReadOnly(this, "joinExpression");
-    /**
-     * db-field for the ID of the relation to a CONTACT-record
-     * read-only property; set it with a matching setter
-     * @property contactIdField
-     */
-    this.contactIdField = null; ProtoPropertyUtils.makeSemiReadOnly(this, "contactIdField");
-    /**
-     * db-field that represents the date of creation
-     * read-only property; set it with a matching setter
-     * @property creationDateField
-     */
-    this.creationDateField = null; ProtoPropertyUtils.makeSemiReadOnly(this, "creationDateField");
-    /**
-     * db-field where the STATE-information (active/inactive) is stored (see the activeStates-property)
-     * read-only property; set it with a matching setter
-     * @property stateField
-     */
-    this.stateField = null; ProtoPropertyUtils.makeSemiReadOnly(this, "stateField");
-    /**
-     * array that contains IDs of states that represent an "active"-state
-     * read-only property; set it with a matching setter
-     * @property activeStates
-     */
-    this.activeStates = null; ProtoPropertyUtils.makeSemiReadOnly(this, "activeStates");
-    this.condition = null; ProtoPropertyUtils.makeSemiReadOnly(this, "condition");
-    /**
-     * db-field that will be used as groubBy
-     * read-only property; set it with a matching setter
-     * @property groupBy
-     */
-    this.groupBy = null; ProtoPropertyUtils.makeSemiReadOnly(this, "groupBy");
-    /**
-     * an object which contains the subcontexts and the prepared select to get the contactIds of them.
-     *                                                                                
-     * {                       V-- SqlBuilder with all conditions needed                                 V-IdCollumn name (with Tablename!)    V-the contexts to show for this subcontext
-     *   "Person": "Person": [newSelect("CONTACTID").from("CONTACT").where("PERSON_ID is not null"), "CONTACT.ORGANISATION_ID", ["Offer", "Order", "Contract", "SupportTicket"]],
-     * 
-     *   "Offer" ... // you can add as many subcontexts as you wish
-     * }
-     * read-only property; set it with a matching setter
-     * @property subContexts
-     */
-    this.subContexts = null; ProtoPropertyUtils.makeSemiReadOnly(this, "subContexts");
+    return ContextUtils.loadContentTitle(ContextUtils.getEntity(pContextId), pRowId);
 }
+
+
 /**
- * creates a new instance of a ContextSelector and returns it 
- * if given it also sets some properties (property names with matching function-parameters)
- * @static
- */
-ContextSelector.create = function(pTableName, pIdField, pTitleExpression)
-{
-    return new ContextSelector(pTableName, pIdField, pTitleExpression);
-};
-/**
- * @param {String} pField the fieldname that shall be returned as full string
- * @return {String} full field containing tablename and the column; if the column itself is already a full qualified field that field is returned
- */
-ContextSelector.prototype.getFullField = function(pField)
-{
-    //always keep undefined (and null) just undefined since it's never a fullQualifier and tablename.undefined is useless
-    if (pField == undefined)
-        return undefined;
-    if (SqlUtils.isFullFieldQualifier(pField))
-        return pField;
-    else
-        return this.tableName + "." + pField;
-};
-/**
- * @return {String} full id field containing tablename and column; if the column itself is already a full qualified field that field is returned
- */
-ContextSelector.prototype.getFullIdField = function()
-{
-    return this.getFullField(this.idField);
-};
-/**
- * @return {String} full from-expression with tablename and join-part
- */
-ContextSelector.prototype.getFullFromClause = function()
-{
-    if (this.joinExpression)
-        return " " + this.tableName + " " + this.joinExpression + " ";
-    else
-        return this.tableName;
-        
-};
-/**
- * @return {Object} in the following format: 
- *                  {
- *                      "{contactid1}": [SqlBuilder, ContextArray],
- *                      ...
- *                      ...
- *                  }
+ * gets Data from a specific Context with entities. Functions
+ * 
+ * @param {String} pContextId the title of the context
+ * @param {String[]} [pContextConfig] Config defined in the Provider Parameter
+ * @param {Object} [pFilterObj] prepeared Filter Object
+ * @param {String[]} [pContactId] Array of all the Contactids you want to search through
+ * 
+ * @return {String[][]} An Array of Fields (["#UID", "#TITLE", "#MAPPING", "#CONTENTDESCRIPTION", "#CONTENTTITLE", CONNECTIONFIELD, "DATE_NEW"]) for a certain Context
  */
-ContextSelector.prototype.getSubContexts = function(pParentRowId)
-{
-    if (this.subContexts)
+ContextUtils.getContextDataViaReadEntity = function(pContextId, pContextConfig, pFilterObj, pContactId)
+{     
+
+    var connectionField = "CONTACT_ID";
+    if(pContextConfig.connectionField)
+        connectionField = pContextConfig.connectionField;
+
+    if(pContextConfig.childField && pContextConfig.parentField && pContextConfig.contactIdField && pContextConfig.subContext)
     {
-        var sqls = {};
-        for (let contextId in this.subContexts)
-        {
-            // Copy the builder to prevent modifying the builder in this.subContexts
-            var select = this.subContexts[contextId][0].copy();
-            
-            // add id-condition
-            if (select.whereWasCalled())
-            {
-                select.and(this.subContexts[contextId][1], pParentRowId);
-            }
-            else
-            {
-                select.where(this.subContexts[contextId][1], pParentRowId);
-            }
-            
-            sqls[contextId] = [select, this.subContexts[contextId][2]];
-        }
+        var prefilter = Utils.buildFilterObj({}, pContextConfig.contactIdField, "IN", "TEXT", JSON.stringify(pContactId), JSON.stringify(pContactId), "OR");
+        var resObj = [];
+
+        var subConf = entities.createConfigForLoadingRows()
+        .entity(ContextUtils.getEntity(pContextConfig.subContext))
+        .fields([pContextConfig.childField])
+        .filter(JSON.stringify(prefilter.filter))
         
-        return sqls;
+        var subRes = entities.getRows(subConf);
+        for(var id in subRes)
+            resObj.push(subRes[id][pContextConfig.childField]);
+           
+        pFilterObj = Utils.buildFilterObj(pFilterObj, pContextConfig.parentField, "IN", "TEXT", JSON.stringify(resObj), JSON.stringify(resObj), "AND");
     }
     else
-        return {};
-        
-};
-//setters which to nothing special; no need to document them
-ContextSelector.prototype.setTitleExpression = function(pValue)
-{
-    this._titleExpression = pValue;
-    return this;
-};
-ContextSelector.prototype.setTableName = function(pValue)
-{
-    this._tableName = pValue;
-    return this;
-};
-ContextSelector.prototype.setIdField = function(pValue)
-{
-    this._idField = pValue;
-    return this;
-};
-ContextSelector.prototype.setJoinExpression = function(pValue)
-{
-    this._joinExpression = pValue;
-    return this;
-};
-ContextSelector.prototype.setContactIdField = function(pValue)
-{
-    this._contactIdField = pValue;
-    return this;
-};
-ContextSelector.prototype.setCreationDateField = function(pValue)
-{
-    this._creationDateField = pValue;
-    return this;
-};
-ContextSelector.prototype.setStateField = function(pValue)
-{
-    this._stateField = pValue;
-    return this;
-};
-ContextSelector.prototype.setActiveStates = function(pValue)
-{
-    this._activeStates = pValue;
-    return this;
-};
-/**
- * sets the condition property of a ContextSelector-object
- * @param {SqlBuilder} pSqlBuilder condition as SqlBuilder-object
- */
-ContextSelector.prototype.setCondition = function(pSqlBuilder)
-{
-    this._condition = pSqlBuilder;
-    return this;
-};
-ContextSelector.prototype.setSubContexts = function(pContexts)
-{
-    this._subContexts = pContexts;
-    return this;
-};
-ContextSelector.prototype.setGroupBy = function(pValue)
-{
-    this._groupBy = pValue;
-    return this;
-};
-
-/**
- * TODO: !!!temporary function until you can get fields from another Entity!!!
- */
-ContextUtils.getSelectMap  = function()
-{
-    var maskingUtils = new SqlMaskingUtils();
-    return {
-            "Organisation": ContextSelector.create("ORGANISATION", "CONTACT.CONTACTID", "ORGANISATION.NAME")
-                                       .setJoinExpression("join CONTACT on ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID and CONTACT.PERSON_ID is null")
-                                       .setCondition(newWhere("ORGANISATION.ORGANISATIONID != '0'"))
-                                       .setSubContexts({
-                                           "Person": [newSelect("CONTACTID").from("CONTACT").where("PERSON_ID is not null"), "CONTACT.ORGANISATION_ID", ["Offer", "Order", "Contract", "SupportTicket"]]
-                                       })
-            ,"Person": ContextSelector.create("CONTACT", "CONTACTID")
-                                      .setTitleExpression(maskingUtils.concat([
-                                                new ContactTitleRenderer(Contact.createWithColumnPreset()).asSql()
-                                                ,"' - '"//looks pretty bad; TODO: workaround till Lookups can be loaded over a link-entity; then use displayProc
-                                                ,"defaultAddress.ADDRESS", "defaultAddress.BUILDINGNO"
-                                                ,"' - '"
-                                                ,"defaultAddress.COUNTRY", "defaultAddress.ZIP", "defaultAddress.CITY"
-                                               ]," "))
-                                      .setJoinExpression("join PERSON on PERSON.PERSONID = CONTACT.PERSON_ID "
-                                                       + " join ORGANISATION on ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID "
-                                                       + " left join ADDRESS defaultAddress on defaultAddress.ADDRESSID = CONTACT.ADDRESS_ID")
-            ,"PrivatePerson": ContextSelector.create("PERSON", "PERSONID")
-                                      .setTitleExpression(maskingUtils.concat([
-                                                new ContactTitleRenderer(Contact.createWithColumnPresetForPrivatePerson()).asSql()
-                                                ,"' - '"//looks pretty bad; TODO: workaround till Lookups can be loaded over a link-entity; then use displayProc
-                                                ,"defaultAddress.ADDRESS", "defaultAddress.BUILDINGNO"
-                                                ,"' - '"
-                                                ,"defaultAddress.COUNTRY", "defaultAddress.ZIP", "defaultAddress.CITY"
-                                               ]," "))
-                                      .setJoinExpression("left join CONTACT on PERSON.PERSONID = CONTACT.PERSON_ID and CONTACT.ORGANISATION_ID = '0' left join ADDRESS defaultAddress on defaultAddress.ADDRESSID = CONTACT.ADDRESS_ID")
-                                      .setContactIdField("CONTACT.CONTACTID")
-            ,"Activity": ContextSelector.create("ACTIVITY", "ACTIVITYID", "SUBJECT")
-            ,"Salesproject": ContextSelector.create("SALESPROJECT", "SALESPROJECTID")
-                                            .setTitleExpression(maskingUtils.concat([
-                                                                "'" + translate.text("Salesproject") + "'",
-                                                                "' '",
-                                                                maskingUtils.cast("PROJECTCODE", SQLTYPES.VARCHAR, 10),
-                                                                "' | '",
-                                                                "PROJECTTITLE"
-                                                                ], "", false))
-                                            .setContactIdField("CONTACT_ID")
-                                            .setCreationDateField("STARTDATE")
-                                            .setStateField("STATUS")
-                                            .setActiveStates([$KeywordRegistry.salesprojectState$open(), $KeywordRegistry.salesprojectState$postponed()])
-            ,"Contract": ContextSelector.create("CONTRACT", "CONTRACTID")
-                                        .setTitleExpression(maskingUtils.concat([
-                                                                KeywordUtils.getResolvedTitleSqlPart("ContractType", "CONTRACTTYPE"),
-                                                                maskingUtils.cast("CONTRACTCODE", SQLTYPES.VARCHAR, 10)
-                                                                ], " "))
-                                        .setContactIdField("CONTACT_ID")
-                                        .setCreationDateField("CONTRACTSTART")
-                                        .setStateField("CONTRACTSTATUS")
-                                        .setActiveStates([$KeywordRegistry.contractState$validLimited(), $KeywordRegistry.contractState$validUnlimited(), $KeywordRegistry.contractState$notSigned()])
-            ,"Offer": ContextSelector.create("OFFER", "OFFERID")
-                                     .setTitleExpression(maskingUtils.concat([
-                                                "'" + translate.text("Offer") + "'",
-                                                "' '",
-                                                maskingUtils.cast("OFFERCODE", SQLTYPES.VARCHAR, 10),
-                                                "'-'",
-                                                maskingUtils.cast("VERSNR", SQLTYPES.VARCHAR, 10)
-                                                ], "", false))
-                                     .setContactIdField("CONTACT_ID")
-                                     .setCreationDateField("OFFERDATE")
-                                     .setStateField("STATUS")
-                                     .setActiveStates([$KeywordRegistry.offerStatus$open(), $KeywordRegistry.offerStatus$checked(), $KeywordRegistry.offerStatus$sent()])
-            ,"Order": ContextSelector.create("SALESORDER", "SALESORDERID")
-                                     .setTitleExpression(maskingUtils.concat([
-                                                        KeywordUtils.getResolvedTitleSqlPart("OrderType", "ORDERTYPE"),
-                                                        maskingUtils.cast("SALESORDERCODE", SQLTYPES.VARCHAR, 10)
-                                                        ], " "))
-                                     .setContactIdField("CONTACT_ID")
-                                     .setCreationDateField("SALESORDERDATE")
-                                     .setStateField("ORDERSTATUS")
-                                     .setActiveStates([0, 1])
-            ,"Product": ContextSelector.create("PRODUCT", "PRODUCTID")
-                                       .setTitleExpression(maskingUtils.concat([
-                                            "PRODUCTCODE",
-                                            "' | '",
-                                            "PRODUCTNAME"
-                                            ], "", false))
-            ,"Task": ContextSelector.create("TASK", "TASKID", "SUBJECT")
-            ,"Campaign": ContextSelector.create("CAMPAIGN", "CAMPAIGNID")
-                         .setTitleExpression(maskingUtils.concat(["CAMPAIGN.NAME", "CAMPAIGNSTEP.NAME"], " - ", false))
-                         .setContactIdField("CAMPAIGNPARTICIPANT.CONTACT_ID")
-                         .setJoinExpression("left join CAMPAIGNPARTICIPANT on CAMPAIGNPARTICIPANT.CAMPAIGN_ID = CAMPAIGN.CAMPAIGNID " +
-                                            "left join CAMPAIGNSTEP on CAMPAIGNSTEP.CAMPAIGNSTEPID = CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID")
-                        .setCreationDateField("CAMPAIGNSTEP.DATE_START")
-                        .setStateField("CAMPAIGN.STATUS")
-                        .setActiveStates([$KeywordRegistry.campaignState$planning(), $KeywordRegistry.campaignState$approved()])
-            ,"CampaignStep" : ContextSelector.create("CAMPAIGNSTEP", "CAMPAIGNSTEPID", "NAME")
-            ,"SupportTicket": ContextSelector.create("TICKET", "TICKETID", "TASK.SUBJECT")
-                        .setJoinExpression("left join TASK on TASK.TASKID = TICKET.TASK_ID left join TASKLINK on TASKLINK.TASK_ID = TASK.TASKID")
-                        .setCondition(newWhere("TICKET.TICKETTYPE", $KeywordRegistry.ticketType$supportTicket()))
-                        .setContactIdField("TASKLINK.OBJECT_ROWID")
-                        .setStateField("TASK.STATUS")
-                        .setActiveStates([
-                            $KeywordRegistry.taskStatus$new(),
-                            $KeywordRegistry.taskStatus$unassigned(),
-                            $KeywordRegistry.taskStatus$assigned(),
-                            $KeywordRegistry.taskStatus$inProgress(),
-                            $KeywordRegistry.taskStatus$waiting(),
-                            $KeywordRegistry.taskStatus$customerChecks(),
-                        ])
-                        .setCreationDateField("TASK.START_DATE")
-            ,"BulkMail" : ContextSelector.create("BULKMAIL", "BULKMAILID", "NAME")
-            ,"SerialLetter" : ContextSelector.create("SERIALLETTER", "SERIALLETTERID", "TITLE")
-            ,"Leadimport": ContextSelector.create("LEADIMPORT", "LEADIMPORTID")
-                        .setTitleExpression("LEADIMPORT.NAME")
+    {
+        pFilterObj = Utils.buildFilterObj(pFilterObj, connectionField, "IN", "TEXT", JSON.stringify(pContactId), JSON.stringify(pContactId), "AND"); 
     }
-}
-
-/**
- * TODO: !!!temporary function until you can get fields from another Entity!!!
- */
-ContextUtils.getNameSubselectSql = function(pContextIdDbField, pRowIdDbField)
-{
-    // TODO: prepared?
     
-    var select = "(case " + pContextIdDbField + " ";
-
-    var selectMap = ContextUtils.getSelectMap ()
-    for (let contextId in selectMap)
+    var fields = ["#UID", "#TITLE", "#MAPPING", "#CONTENTDESCRIPTION", "#CONTENTTITLE", connectionField, "DATE_NEW", "ACTIVE"];
+    if(pContextConfig.setGroupBy)
+        fields.push(pContextConfig.setGroupBy);
+    
+    
+    var conf = entities.createConfigForLoadingRows()
+    .entity(ContextUtils.getEntity(pContextId))
+    .fields(fields)
+    
+    if(pFilterObj)
+        conf.filter(JSON.stringify(pFilterObj.filter))
+    
+    var res = [];
+    try//if Permissions prevent the user to read data from this context, entites.getRows throws an error. But we still wanna see the other Contexts
     {
-        select += "when '" + contextId + "' then (select " + selectMap[contextId].titleExpression + " from " + selectMap[contextId].getFullFromClause() + (pRowIdDbField ? " where " + selectMap[contextId].getFullIdField() + " = " + pRowIdDbField : " ") + ") ";
+        res = entities.getRows(conf);
     }
-
-    select += "else 'Not defined in ContextUtils.getNameSql()!'";
-    select += "end)";
-
-    return select;
-}
-
-/**
- * TODO: !!!temporary function until you can get fields from another Entity!!!
- */
-ContextUtils.getNameSql = function(pContextId, pRowId)
-{
-    var selectMap = ContextUtils.getSelectMap ()
-    if (selectMap[pContextId] != undefined)
+    catch(ex)
     {
-        return newSelect(selectMap[pContextId].titleExpression)
-                    .from(selectMap[pContextId].getFullFromClause())
-                    .whereIfSet(selectMap[pContextId].getFullIdField(), pRowId)
-                    .build(SqlBuilder.NORESULT_CONDITION());
+        logging.log(ex)
     }
-    else
-        return "select 1 from person where 1=2";
+    if(res.length > 0)
+    {
+        if(pContextConfig.subContext)
+        {
+            if(res[0]["#UID"] == undefined || res[0]["#TITLE"] == undefined || res[0]["#MAPPING"] == undefined || res[0]["#CONTENTDESCRIPTION"] == undefined 
+                || res[0]["#CONTENTTITLE"] == undefined || res[0]["DATE_NEW"] == undefined || res[0]["ACTIVE"] == undefined)
+                throw new Error(translate.text("Some prereserved EntityFields which are necessary fot 360° are not available. Context: "+pContextId
+                    +" Data: "+JSON.stringify(res)));
+        }
+        else if(res[0][connectionField] == undefined)
+            throw new Error(translate.text(connectionField+" is not defined! Context: "+pContextId));
+    }
+    return res;
 }
 
 /**
- * TODO: !!!temporary function until you can get fields from another Entity!!!
+ * gets the ContactId by using ContextUtils.loadContent()
+ * @param {String} pContextId The Context name
+ * @param {String} pRowId the uid for which to get the Contactid
+ * 
+ * @return the Contactid of certain Context and Uid
  */
 ContextUtils.getContactId = function(pContextId, pRowId)
 {
-    var selectMap = ContextUtils.getSelectMap()
-    if (selectMap[pContextId] != undefined && selectMap[pContextId].contactIdField)
-    {
-        return newSelect(selectMap[pContextId].contactIdField)
-                    .from(selectMap[pContextId].tableName)
-                    .where(selectMap[pContextId].getFullIdField(), pRowId)
-                    .cell();
-    }
-    else
-        return "";
+    var res = ContextUtils.loadContent(ContextUtils.getEntity(pContextId), [pRowId], ["CONTACT_ID"])[0]["CONTACT_ID"];
+    return res;
 }
 
+
 /**
- * TODO: !!!temporary function until you can get fields from another Entity!!!
- * nur 360
+ * gets the Count of Connections by Contactid
+ * @param {String} pContextId The Context name
+ * @param {String} pContactId The Contactid
  * 
+ * @return count of datasets for that specific Context
  */
-ContextUtils.getContextDataSql = function(pContextId, pContactId, pWithDate, pActive, pWithState, pWithGroupBy, pUidsForFiltering, pExcludeIds)
+ContextUtils.getCountByContactId = function(pContextId, pContactId)
 {
-    var selectMap = ContextUtils.getSelectMap();
-    var ownContextSelector = selectMap[pContextId];
-    var columns = [ownContextSelector.getFullIdField(), ownContextSelector.titleExpression];
-    
-    if (pWithDate === true)
-        columns.push(ownContextSelector.getFullField(ownContextSelector.creationDateField) || "''");
-
-    if (pWithState === true)
-    {
-        if (ownContextSelector.stateField)
-            columns.push(ownContextSelector.getFullField(ownContextSelector.stateField) || "''");
-        else
-            columns.push("''");
-    }
-    
-    if (pWithGroupBy === true)
-    {
-        if (ownContextSelector.groupBy)
-            columns.push(ownContextSelector.getFullField(ownContextSelector.groupBy) || "''");
-        else
-            columns.push("''");
-    }
-
-    var contextDataSelect = newSelect( columns.join(", ") )
-                                .from(ownContextSelector.getFullFromClause())
-                                .where(ownContextSelector.getFullField(ownContextSelector.contactIdField), pContactId, SqlBuilder.IN())
-                                .andIfSet(ownContextSelector.getFullIdField(), pUidsForFiltering, SqlBuilder.IN())
-                                .andIfSet(ownContextSelector.getFullIdField(), pExcludeIds, SqlBuilder.NOT_IN());
-    
-    if (pActive != undefined)
-    {
-        var activeStates = ownContextSelector.activeStates;
-        if(activeStates != null && activeStates.length > 0)
-        {
-            var condSub = newWhere();
-            activeStates.forEach(function (state) 
-            {   
-                if (ownContextSelector.stateField)
-                {
-                    if(pActive)
-                        condSub.or(ownContextSelector.getFullField(ownContextSelector.stateField), state)
-                    else
-                        condSub.and(ownContextSelector.getFullField(ownContextSelector.stateField), state, SqlBuilder.NOT_EQUAL())
-                }
-                
-            });
-            contextDataSelect.andIfSet(condSub);  
-        }
-    }    
-    contextDataSelect.andIfSet(ownContextSelector.condition);    
-    return contextDataSelect.build();
+    return ContextUtils.getContextDataViaReadEntity(pContextId, pContactId).length;
 }
 
 /**
- * TODO: !!!temporary function until you can get fields from another Entity!!!
+ * decides if a record is activ or not
+ * @param {String[]} pActiveStates, 1-dimensional Array of Active States
+ * @param {String} pDBFieldName, a DBField for comparison
+ * 
+ * @return a case when that resolves the active states to true and everything else to false in that Column
  */
-ContextUtils.getCountByContactId = function(pContextId, pContactId)
+ContextUtils.buildActiveCaseWhen = function(pActiveStates, pDBFieldName)
 {
-    var contextObject = ContextUtils.getSelectMap()[pContextId];
-    var tableName = contextObject.tableName;
-    var contactField = contextObject.getFullField(contextObject.contactIdField)
-    var join = contextObject.joinExpression;
-    if (tableName && contactField)
-    {
-        return newSelect("count(*)")
-                        .from(tableName + (join ? join : ""))
-                        .where(contactField, pContactId)
-                        .cell(true, "0");
-        return count;
-    }
-    return 0;
+    var extendedStates = [];
+    for(var i = 0; i < pActiveStates.length; i++)
+        extendedStates.push([pActiveStates[i], 'true']);
+    
+    //As default value we choose false, so we only have true or false and therefore we can filter more easily
+    return SqlUtils.translateStatementWithQuotes(SqlUtils.getResolvingCaseWhen(extendedStates, pDBFieldName, false)).replace("else '' end", "else 'false' end");
 }
 
 function AdminViewUtils () {}
@@ -748,31 +496,45 @@ function AdminViewUtils () {}
  */
 AdminViewUtils.open = function (pUidField, pFields)
 {
+    if (!AdminViewUtils.userHasAdminRole)
+        return;
     var uid = vars.get("$sys.uid");
     if (!pUidField)
         pUidField = "UID";
     else
         pUidField += " (UID)";
     var rows = [
-        [pUidField, pUidField, uid, "TEXT"]
+    [pUidField, pUidField, uid, "TEXT"]
     ];
     if (pFields)
     {
         pFields.forEach(function (field)
         {
-            rows.push([field[0], field[0], field[1], field[2] || "TEXT"]);
+            if (Utils.isString(field))
+            {
+                var fieldVar = field.startsWith("$") ? field : "$field." + field;
+                rows.push([field, field, vars.get(fieldVar), "TEXT"]);
+            }
+            else
+                rows.push([field[0], field[0], field[1], field[2] || "TEXT"]);
         });
     }
     var params = {
-        "Uid_param" : uid,
-        "Rows_param" : JSON.stringify(rows)
+        "Uid_param": uid,
+        "Rows_param": JSON.stringify(rows),
+        "Entity_param": vars.get("$sys.currententityname")
     };
     neon.openContext("DefaultAdminView", "DefaultAdminView_view", [uid], neon.OPERATINGSTATE_VIEW, params);
 }
 
 AdminViewUtils.getActionState = function ()
 {
-    if (tools.currentUserHasRole("INTERNAL_ADMINISTRATOR"))
+    if (AdminViewUtils.userHasAdminRole())
         return neon.COMPONENTSTATE_EDITABLE;
     return neon.COMPONENTSTATE_INVISIBLE;
+}
+
+AdminViewUtils.userHasAdminRole = function ()
+{
+    return tools.currentUserHasRole("INTERNAL_ADMINISTRATOR");
 }
\ No newline at end of file
diff --git a/process/Contract_lib/Contract_lib.aod b/process/Contract_lib/Contract_lib.aod
index f7e066be340112fbe6298f410624cc9ba6284dad..080920179a585c383923d1e2176a995de2bb6c7a 100644
--- a/process/Contract_lib/Contract_lib.aod
+++ b/process/Contract_lib/Contract_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Contract_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Contract_lib/process.js</process>
diff --git a/process/CountryInfoData_lib/CountryInfoData_lib.aod b/process/CountryInfoData_lib/CountryInfoData_lib.aod
index d1612a9f77a923a06489237005292a2055f0cd74..ecc2eedbcd9ecf42c4b0af0be9586e5f1181c9e7 100644
--- a/process/CountryInfoData_lib/CountryInfoData_lib.aod
+++ b/process/CountryInfoData_lib/CountryInfoData_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>CountryInfoData_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/CountryInfoData_lib/process.js</process>
diff --git a/process/CountryInfo_lib/CountryInfo_lib.aod b/process/CountryInfo_lib/CountryInfo_lib.aod
index d078970229a859484e2ed6c577f386f33d404ae5..69b0a804f393c38451118b8bb66a7dcb8544aa82 100644
--- a/process/CountryInfo_lib/CountryInfo_lib.aod
+++ b/process/CountryInfo_lib/CountryInfo_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>CountryInfo_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/CountryInfo_lib/process.js</process>
diff --git a/process/CreateActivity_workflowService/CreateActivity_workflowService.aod b/process/CreateActivity_workflowService/CreateActivity_workflowService.aod
index 0241a4b95bb97c496d2b06b83887d46045fa7058..d58e85470416d18524f0b384981b5fb1e19eea60 100644
--- a/process/CreateActivity_workflowService/CreateActivity_workflowService.aod
+++ b/process/CreateActivity_workflowService/CreateActivity_workflowService.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>CreateActivity_workflowService</name>
   <title>Create activity</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/process/CreateNotification_workflowService/CreateNotification_workflowService.aod b/process/CreateNotification_workflowService/CreateNotification_workflowService.aod
index e6455f2cd5a5798b87d51712a6bc525e434c0a78..d2630a2a5638fa17a1526a519952b9c564f3c3e4 100644
--- a/process/CreateNotification_workflowService/CreateNotification_workflowService.aod
+++ b/process/CreateNotification_workflowService/CreateNotification_workflowService.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>CreateNotification_workflowService</name>
   <title>Create notification</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/process/CreateNotification_workflowService/process.js b/process/CreateNotification_workflowService/process.js
index 458f665d71468ee51ec06ffda4a690cbcd472a4e..3aa7508f4b63e62ec47537b94837d14d29ef296a 100644
--- a/process/CreateNotification_workflowService/process.js
+++ b/process/CreateNotification_workflowService/process.js
@@ -6,7 +6,6 @@ var variables = JSON.parse(vars.get("$local.value"));
 var config = notification.createConfig()
     .notificationType("WorkflowNotification")
     .addUsersWithIds([variables.notificationUser || variables.USER_ID])
-    .initialState(notification.STATE_UNSEEN)
     .caption(variables.notificationCaption || "")
     .description(variables.notificationDescription || "");
     
diff --git a/process/CreateSalesprojectTouchpoint_workflowService/CreateSalesprojectTouchpoint_workflowService.aod b/process/CreateSalesprojectTouchpoint_workflowService/CreateSalesprojectTouchpoint_workflowService.aod
index df1d296af52649bba991103fa19f6839afd86f3a..6e44f166f6448deeff7b7dea82ab256e34aa16c3 100644
--- a/process/CreateSalesprojectTouchpoint_workflowService/CreateSalesprojectTouchpoint_workflowService.aod
+++ b/process/CreateSalesprojectTouchpoint_workflowService/CreateSalesprojectTouchpoint_workflowService.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>CreateSalesprojectTouchpoint_workflowService</name>
   <title>Create salesproject touchpoint</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/process/CreateSalesproject_workflowService/CreateSalesproject_workflowService.aod b/process/CreateSalesproject_workflowService/CreateSalesproject_workflowService.aod
index 8b41b437136f9d92113d9f4cb310c3c127239e78..fa5f2a849d62b5144be2eb954f8460569e2c05ab 100644
--- a/process/CreateSalesproject_workflowService/CreateSalesproject_workflowService.aod
+++ b/process/CreateSalesproject_workflowService/CreateSalesproject_workflowService.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>CreateSalesproject_workflowService</name>
   <title>Create salesproject</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/process/CustomPlaceholder_lib/CustomPlaceholder_lib.aod b/process/CustomPlaceholder_lib/CustomPlaceholder_lib.aod
index 8e915687a2ad2cdd2fcdcc75bb67e37635191fdc..1a6e6266888b8ffbfd7e375eb395198a87f6b30f 100644
--- a/process/CustomPlaceholder_lib/CustomPlaceholder_lib.aod
+++ b/process/CustomPlaceholder_lib/CustomPlaceholder_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>CustomPlaceholder_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/CustomPlaceholder_lib/process.js</process>
diff --git a/process/DataCaching_lib/DataCaching_lib.aod b/process/DataCaching_lib/DataCaching_lib.aod
index 732c9784be4434a3a4776c4865536eaeb260e280..06e4baffd563073f815edf70cc7164ad632a7e5e 100644
--- a/process/DataCaching_lib/DataCaching_lib.aod
+++ b/process/DataCaching_lib/DataCaching_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>DataCaching_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/DataCaching_lib/process.js</process>
diff --git a/process/DataPrivacy_lib/DataPrivacy_lib.aod b/process/DataPrivacy_lib/DataPrivacy_lib.aod
index 87e4a73a1b3e1111ba777f8296eda926464c7777..229eb4f89658803f65a7b693a026cfb3709db9a0 100644
--- a/process/DataPrivacy_lib/DataPrivacy_lib.aod
+++ b/process/DataPrivacy_lib/DataPrivacy_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>DataPrivacy_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/DataPrivacy_lib/process.js</process>
diff --git a/process/DataPrivacy_lib/process.js b/process/DataPrivacy_lib/process.js
index da986784dd28531ee4e18bfb071b17937fc31e4f..009bd8c7c52fb1a6d1363219791c80756df4528f 100644
--- a/process/DataPrivacy_lib/process.js
+++ b/process/DataPrivacy_lib/process.js
@@ -200,7 +200,7 @@ DataPrivacyType.get = function(pKey)
         // TODO: update and fix Address_lib and use it (and remove format-functions in PostalAddress_lib)
         var entityConfig = entities.createConfigForLoadingRows()
                                    .entity("Address_entity")
-                                   .fields(["ADDRESSID", "ADDRESS", "ADDRESSADDITION", "ADDRIDENTIFIER", "BUILDINGNO", "ZIP", "CITY", "COUNTRY", "DISTRICT", "REGION", "PROVINCE"]);
+                                   .fields(["ADDRESSID", "ADDRESS", "ADDRESSADDITION", "ADDRIDENTIFIER", "BUILDINGNO", "ZIP", "CITY", "COUNTRY", "DISTRICT", "PROVINCE"]);
 
         if (pAddressId)
         {
diff --git a/process/Data_lib/Data_lib.aod b/process/Data_lib/Data_lib.aod
index 7e6dc0e007d710b42680bd618e2e6e4889e0296d..316134e4f970129928126e6cc33547d76b580e79 100644
--- a/process/Data_lib/Data_lib.aod
+++ b/process/Data_lib/Data_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Data_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Data_lib/process.js</process>
diff --git a/process/Date_lib/Date_lib.aod b/process/Date_lib/Date_lib.aod
index 9833cb86c53bc720131800ef98c93138e6b61db2..4442988df03042c92262a00d87308c4785e62828 100644
--- a/process/Date_lib/Date_lib.aod
+++ b/process/Date_lib/Date_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Date_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Date_lib/process.js</process>
diff --git a/process/Dependency_lib/Dependency_lib.aod b/process/Dependency_lib/Dependency_lib.aod
new file mode 100644
index 0000000000000000000000000000000000000000..be3eec18d19dfe0ecd4abba618560bb14d59a086
--- /dev/null
+++ b/process/Dependency_lib/Dependency_lib.aod
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
+  <name>Dependency_lib</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/Dependency_lib/process.js</process>
+  <variants>
+    <element>LIBRARY</element>
+  </variants>
+</process>
diff --git a/process/Dependency_lib/process.js b/process/Dependency_lib/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..1f4e1267a8ed2a749d255f6560ec704e5fec1d28
--- /dev/null
+++ b/process/Dependency_lib/process.js
@@ -0,0 +1,103 @@
+
+function Dependency(){}
+
+/**
+ * This function is the template for the getUIDsfn-Function in the Dependency.mapping
+ */
+Dependency.templateFunction = function (pTableField) {
+    return function (pRowData, pChangedData) {
+        let res = [];
+        if (pRowData[pTableField])
+            res.push(pRowData[pTableField])
+        if (pChangedData[pTableField] && pChangedData[pTableField] != pRowData[pTableField])
+            res.push(pChangedData[pTableField])
+        return res;
+    }
+}
+
+/**
+ * Returns the Mapping of the Dependencies.
+ * 
+ * The mapping is structured as follows: <br>
+ *  
+ * @example { "Entity_entity" : { "Dependency_entity": { "getUIDsfn" : fucntion (pRowData, pChangedData) {return //the IDs of the EntityField } } } }
+ * 
+ * @return {Object}
+ */
+Dependency.mapping = function ()
+{
+    return {
+        "Address_entity": {
+            "Organisation_entity" : {
+                "options" : {
+                    "isObservable" : true
+                },
+                "getUIDsfn" : function (pRowData, pChangedData) {
+                    var tableField = "ADDRESS.CONTACT_ID";
+                    var res = [];
+                    if (pRowData[tableField])
+                        res.push(pRowData[tableField])
+                    if (pChangedData[tableField] && pChangedData[tableField] != pRowData[tableField])
+                        res.push(pChangedData[tableField])
+                    return res;
+                }
+            }
+        }
+    };
+};
+
+/**
+ * Returns the dependencies on the entity
+ * 
+ * @param {String} [pEntity] the name of the entity
+ * @param {Object} [pOptionFilter] the Object must be handed over in the format: { "option" : true/false }
+ * 
+ * @example
+ * Dependency.getDependency("Organisation_entity", {"isObservable" : true });
+ * @example
+ * Dependency.getDependency("Organisation_entity", {}));
+ * @example
+ * Dependency.getDependency("Organisation_entity"));
+ * 
+ * @return {String[]} the founded Dependencies. If no one is found, you get an empty Array
+ */
+Dependency.getDependency = function (pEntity, pOptionFilter) {
+    if (Dependency.mapping()[pEntity]) 
+    {
+        return Object.keys(Dependency.mapping()[pEntity]).filter(function (key) {
+            return (!pOptionFilter || Object.keys(pOptionFilter).every(function (pOption) {
+                let option = Dependency.mapping()[pEntity][key]["options"][pOption]
+                return option && pOptionFilter[pOption] == option;
+            }));
+        });
+    }
+    
+    
+    return [];
+};
+
+/**
+ * Returns the dependencies that this entity has on others
+ * 
+ * @param {String} [pEntity] the name of the entity
+ * @param {Object} [pOptionFilter] the Object must be handed over in the format: { "option" : true/false }
+ * 
+ * @example
+ * Dependency.getReverseDependency("Organisation_entity", {"isObservable" : true });
+ * @example
+ * Dependency.getReverseDependency("Organisation_entity", {}));
+ * @example
+ * Dependency.getReverseDependency("Organisation_entity"));
+ * 
+ * @return {String[]} the founded Dependencies. If no one is found, you get an empty Array
+ */
+Dependency.getReverseDependency = function (pEntity, pOptionFilter) {
+    return Object.keys(Dependency.mapping()).filter(function (key) {
+        return Dependency.mapping()[key][pEntity] && (!pOptionFilter || Object.keys(pOptionFilter).every(function (pOption){
+            let option = Dependency.mapping()[key][pEntity]["options"][pOption]
+            return option && pOptionFilter[pOption] == option;
+        }));
+    });
+}
+
+
diff --git a/process/DocumentTemplate_lib/DocumentTemplate_lib.aod b/process/DocumentTemplate_lib/DocumentTemplate_lib.aod
index f7dede09487b8661444e1673ef88ecca8b415c21..65a45cc2df2f4d6e372ede48d756207df60b06fd 100644
--- a/process/DocumentTemplate_lib/DocumentTemplate_lib.aod
+++ b/process/DocumentTemplate_lib/DocumentTemplate_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>DocumentTemplate_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/DocumentTemplate_lib/documentation.adoc</documentation>
diff --git a/process/DocumentTemplate_lib/process.js b/process/DocumentTemplate_lib/process.js
index 68621c5eef9d557f3fe3168e8f131f3c8cd69adf..2f1507904e3a4016dab89bd39b365c77ef59b0b7 100644
--- a/process/DocumentTemplate_lib/process.js
+++ b/process/DocumentTemplate_lib/process.js
@@ -745,10 +745,10 @@ DocumentTemplate.prototype._getReplacedODT = function (pReplacements, pTableData
             var bodybegin = contentXml.indexOf("<office:body>");
             var bodyend =  contentXml.indexOf("</office:body>") + 14;
             
-            var bodyTemplate = contentXml.substring(bodybegin, bodyend);
+            var bodyTemplate = contentXml.slice(bodybegin, bodyend);
             var fullBody = "";  //body that contains all pages (required when the replacing is done for several contacts)
-            var beforeBody = contentXml.substring(0, bodybegin);
-            var afterBody = contentXml.substr(bodyend);
+            var beforeBody = contentXml.slice(0, bodybegin);
+            var afterBody = contentXml.slice(bodyend);
             
             for (let i = 0, l = pReplacements.length; i < l; i++)
             {
@@ -767,27 +767,30 @@ DocumentTemplate.prototype._getReplacedODT = function (pReplacements, pTableData
                 
                 
                 let tables = pTableData[i] || [];
-                let fromIndex = 0;
+                let tableEnd = 0;
                 for (let tblIndex = 0; tblIndex < tables.length; tblIndex++) //iterate over all tables in the document
                 {
                     let tableData = tables[tblIndex];
                     if (tableData && tableData.length > 0)
                     {
-                        fromIndex = currentBody.indexOf("</table:table>", fromIndex) + 14;
-                        if (fromIndex === -1) //stop if there is no table
+                        tableEnd = currentBody.indexOf("</table:table>", tableEnd) + 14;
+                        if (tableEnd === -1) //stop if there is no table
                             break;
                         
-                        let rowBegin = currentBody.lastIndexOf("<table:table-row", fromIndex);
+                        let rowBegin = currentBody.slice(0, tableEnd).lastIndexOf("<table:table-row");
                         let rowEnd =  currentBody.indexOf("</table:table-row>", rowBegin) + 18;
                         
-                        let afterTable = currentBody.substr(rowEnd);
-                        let tableRow = currentBody.substring(rowBegin, rowEnd);
-                        currentBody = currentBody.substring(0, rowBegin);
+                        let afterTable = currentBody.slice(rowEnd);
+                        let tableRow = currentBody.slice(rowBegin, rowEnd);
+                        tableEnd -= tableRow.length;
+                        currentBody = currentBody.slice(0, rowBegin);
                         
                         for (let rowIndex = 0; rowIndex < tableData.length; rowIndex++)
                         {
                             let tableRowData = tableData[rowIndex];
-                            currentBody += that._replaceText(tableRow, tableRowData);
+                            let replacedRow = that._replaceText(tableRow, tableRowData);
+                            currentBody += replacedRow;
+                            tableEnd += replacedRow.length;
                         }
                         currentBody += afterTable;
                     }
diff --git a/process/Document_lib/Document_lib.aod b/process/Document_lib/Document_lib.aod
index 9f2ede3e40f379602f2d598e9027e4605ab4044c..cc120d3f86f8378ebbaeb9f71e07b807bcc2b1b8 100644
--- a/process/Document_lib/Document_lib.aod
+++ b/process/Document_lib/Document_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Document_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Document_lib/process.js</process>
diff --git a/process/DocxTemplater_lib/DocxTemplater_lib.aod b/process/DocxTemplater_lib/DocxTemplater_lib.aod
index 3c96ec6b8264873a8317f644ec78bb7e59cd268b..8dfbdd5ebc9fd32efaff4ea00e28b127598ba762 100644
--- a/process/DocxTemplater_lib/DocxTemplater_lib.aod
+++ b/process/DocxTemplater_lib/DocxTemplater_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>DocxTemplater_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/DocxTemplater_lib/process.js</process>
diff --git a/process/DuplicateScanner_lib/DuplicateScanner_lib.aod b/process/DuplicateScanner_lib/DuplicateScanner_lib.aod
index 17d38fd00ac39e96737a745e8e7ce109efd1e8ad..6b45659f204354af0a6d1a39a810a6f008eda16c 100644
--- a/process/DuplicateScanner_lib/DuplicateScanner_lib.aod
+++ b/process/DuplicateScanner_lib/DuplicateScanner_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>DuplicateScanner_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/DuplicateScanner_lib/process.js</process>
diff --git a/process/EmailUtil_lib/EmailUtil_lib.aod b/process/EmailUtil_lib/EmailUtil_lib.aod
index 04b24ec7e102599577d29f2cea0cc85e7c4f048d..694639f440cc39e293d9a1960e890fdeb056aedb 100644
--- a/process/EmailUtil_lib/EmailUtil_lib.aod
+++ b/process/EmailUtil_lib/EmailUtil_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>EmailUtil_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/EmailUtil_lib/process.js</process>
diff --git a/process/Email_lib/Email_lib.aod b/process/Email_lib/Email_lib.aod
index 6022256dea0248db39f796a2a79b0e55178d4044..d1b4a5a2f481c273f871c407b1018c4dbbae2a98 100644
--- a/process/Email_lib/Email_lib.aod
+++ b/process/Email_lib/Email_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Email_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Email_lib/process.js</process>
diff --git a/process/Employee_lib/Employee_lib.aod b/process/Employee_lib/Employee_lib.aod
index 1a08f91b6ef81042668340de79dfea0687a520e6..bf491daa912ecb65c240d820ce73baac879246c8 100644
--- a/process/Employee_lib/Employee_lib.aod
+++ b/process/Employee_lib/Employee_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Employee_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Employee_lib/process.js</process>
diff --git a/process/Employee_lib/process.js b/process/Employee_lib/process.js
index 34e15d5760485d03481f9a69ca15c32428554da5..40db215e8d07d55f15352bf242cb9140f5ffa5ca 100644
--- a/process/Employee_lib/process.js
+++ b/process/Employee_lib/process.js
@@ -146,8 +146,14 @@ EmployeeUtils.hasRelations = function (pContactId)
  */
 EmployeeUtils.isUser = function (pContactId)
 {
-    var user = tools.getUserByAttribute(tools.CONTACTID, pContactId);
-    return user != null;
+    return EmployeeUtils.getUserByContactId(pContactId) != null;
+}
+
+EmployeeUtils.getUserByContactId = function (pContactId)
+{
+    if (!pContactId)
+        return null;
+    return tools.getUserByAttribute(tools.CONTACTID, pContactId);
 }
 
 /**
diff --git a/process/Entity_lib/Entity_lib.aod b/process/Entity_lib/Entity_lib.aod
index d106b77a163c3a6f9266ffd622878cd794b9699a..81c2102218a1279f39ab1d8cb6516a0de085512f 100644
--- a/process/Entity_lib/Entity_lib.aod
+++ b/process/Entity_lib/Entity_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Entity_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Entity_lib/process.js</process>
diff --git a/process/EwsClient_lib/EwsClient_lib.aod b/process/EwsClient_lib/EwsClient_lib.aod
index 6343b20344c5462d4d714e1bb7cc697669244611..988c9f615a2ca71f5859f8ec0253be800cdf9b83 100644
--- a/process/EwsClient_lib/EwsClient_lib.aod
+++ b/process/EwsClient_lib/EwsClient_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>EwsClient_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/EwsClient_lib/process.js</process>
diff --git a/process/ExportTemplate_lib/ExportTemplate_lib.aod b/process/ExportTemplate_lib/ExportTemplate_lib.aod
index 7caa047e49c2fef06484706319038c76196b7408..347c2bddef076b805409a78895a51a36914f6f32 100644
--- a/process/ExportTemplate_lib/ExportTemplate_lib.aod
+++ b/process/ExportTemplate_lib/ExportTemplate_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>ExportTemplate_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/ExportTemplate_lib/process.js</process>
diff --git a/process/Favorites_lib/Favorites_lib.aod b/process/Favorites_lib/Favorites_lib.aod
index cae0fb68babcc9bc0d63f870308e1571808c527b..1512c3b435da8286670c2c886d709582b7b5e4c7 100644
--- a/process/Favorites_lib/Favorites_lib.aod
+++ b/process/Favorites_lib/Favorites_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Favorites_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Favorites_lib/process.js</process>
diff --git a/process/FilterCondition_lib/FilterCondition_lib.aod b/process/FilterCondition_lib/FilterCondition_lib.aod
index 501b03729ea169b526cad1548517b937c6dfab68..a69dbb1ec7562964c049d98c602b3e2fc523d214 100644
--- a/process/FilterCondition_lib/FilterCondition_lib.aod
+++ b/process/FilterCondition_lib/FilterCondition_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>FilterCondition_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/FilterCondition_lib/process.js</process>
diff --git a/process/FilterViewAction_lib/FilterViewAction_lib.aod b/process/FilterViewAction_lib/FilterViewAction_lib.aod
index 48c19eee90b9f6d0af7eef5c7d56053ce1cbb706..83be35832aac8118a4ea6c6f5303da92279e165d 100644
--- a/process/FilterViewAction_lib/FilterViewAction_lib.aod
+++ b/process/FilterViewAction_lib/FilterViewAction_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>FilterViewAction_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/FilterViewAction_lib/process.js</process>
diff --git a/process/FilterViewAction_lib/process.js b/process/FilterViewAction_lib/process.js
index b0fa04291d03107498b6eaf03adbe5aa17326186..afd89d4d6d45e7afbd01146356a20eadd053896f 100644
--- a/process/FilterViewAction_lib/process.js
+++ b/process/FilterViewAction_lib/process.js
@@ -40,7 +40,7 @@ FilterViewActionUtils.getUidsByEntityFilter = function (pContext, pFilter)
     {
         return new SqlBuilder()
             .selectDistinct("CONTACT.CONTACTID")
-            .from("PERSON")
+            .from("ORGANISATION")
             .join("CONTACT", newWhere("ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID").and("CONTACT.PERSON_ID is null"))
             .leftJoin("ADDRESS", "ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID")
             .leftJoin("CLASSIFICATIONSTORAGE", "CLASSIFICATIONSTORAGE.OBJECT_ROWID = CONTACT.CONTACTID")
@@ -52,7 +52,10 @@ FilterViewActionUtils.getUidsByEntityFilter = function (pContext, pFilter)
     var loadRowsConfig = entities.createConfigForLoadingRows()
         .entity(ContextUtils.getEntity(pContext))
         .fields(["#UID"])
-        .filter(JSON.stringify(pFilter.filter || pFilter));
+    if (pFilter.filter)
+        loadRowsConfig.filter(JSON.stringify(pFilter.filter));
+    else if (pFilter)
+        loadRowsConfig.filter(JSON.stringify(pFilter));
         
     return entities.getRows(loadRowsConfig).map(function (row)
     {
diff --git a/process/Html_lib/Html_lib.aod b/process/Html_lib/Html_lib.aod
new file mode 100644
index 0000000000000000000000000000000000000000..52d9fb2676cc9bd5c6830314d4ea3dc03f5c77bb
--- /dev/null
+++ b/process/Html_lib/Html_lib.aod
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
+  <name>Html_lib</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/Html_lib/process.js</process>
+  <variants>
+    <element>LIBRARY</element>
+  </variants>
+</process>
diff --git a/process/Html_lib/process.js b/process/Html_lib/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..b12525e1ad245069dc619c664cc4621471a7c961
--- /dev/null
+++ b/process/Html_lib/process.js
@@ -0,0 +1,149 @@
+function SimpleHtmlObject(pHtmlString, pUpdateFunc, pUpdateId)
+{
+    this.htmlObj = {head:{headers:"",style:""}, body:{content:""}};
+    this.updateFunc = pUpdateFunc || null;
+    this.updateId = pUpdateId || null;
+    
+    if(pHtmlString && typeof pHtmlString === "string") 
+        this.readHTML(pHtmlString);
+}
+
+SimpleHtmlObject.getInstance = function(pHtmlString, pUpdateFunc, pUpdateId)
+{
+    return new SimpleHtmlObject(pHtmlString, pUpdateFunc, pUpdateId);
+}
+
+SimpleHtmlObject.prototype.style = function(pCss)
+{
+    this.htmlObj.head.style = (pCss) ? pCss : "";
+    return this;
+}
+
+SimpleHtmlObject.prototype.body = function(pContent)
+{
+    this.htmlObj.body.content = (pContent) ? pContent : "";
+    return this;
+}
+
+SimpleHtmlObject.prototype.headers = function(pHeaders)
+{
+    this.htmlObj.head.headers = (pHeaders) ? pHeaders : "";
+    return this;
+}
+
+SimpleHtmlObject.prototype.readTagContent = function (pIn, pTag)
+{    
+    var ret = null;
+    var openTag = new RegExp("<" + pTag + ">","i");
+    var closeTag = new RegExp("<\\/" + pTag + ">","i");
+    //If for some reason 
+    if(pIn.search(new RegExp("<" + pTag + ".*\\/>","i")) > 0)
+        ret = "";
+    else
+    {
+        var start = pIn.search(openTag);
+        var end = pIn.search(closeTag);
+        if(start > -1 && end > -1)
+            ret = pIn.substring(start+(pTag.length+2), end);
+    }
+
+    return ret;
+}
+
+SimpleHtmlObject.prototype.accumulateStyleTags = function(pIn)
+{
+    var htmlString = pIn;
+    var matches = htmlString.match(/<STYLE.*>.*<\/STYLE>/gi);
+    
+    var styles = "";
+    
+    for(let i = 0; matches && i < matches.length; i++)
+    {
+        styles += this.readTagContent(matches[i], "STYLE") + "\n";
+    }
+    
+    return styles;
+}
+
+SimpleHtmlObject.prototype.readHTML = function(pInput)
+{
+    var htmlString = pInput;
+    //if no HTML opening Tag is present, assume its pure body content
+    try
+    {
+        if(htmlString.search(/<HTML>/gi) < 0)
+            this.body(htmlString);
+        else
+        {
+            this.htmlObj.body.content = this.readTagContent(htmlString, "BODY");
+            //Getting Headers without style info, because we store them seperately
+            this.htmlObj.head.headers = this.readTagContent(htmlString, "HEAD").replace(/<STYLE.*>.*<\/STYLE>/gi,"");
+            this.htmlObj.head.style = this.accumulateStyleTags(htmlString);
+        }
+        
+        return
+    }
+    catch(ex)
+    {
+        var fixedHTML = HtmlFixer.getInstance(pInput).fixHtml();
+        if(this.updateFunc && typeof this.updateFunc == "function" && this.updateId)
+            this.updateFunc(fixedHTML, this.updateId);
+        
+        this.readHTML(fixedHTML);
+        return
+    }
+}
+
+SimpleHtmlObject.prototype.toString = function()
+{
+    return "<HTML>\n"
+                + "<HEAD>\n"
+                    + this.htmlObj.head.headers + (this.htmlObj.head.headers.length > 0 ? "\n" : "")
+                    + "<STYLE type='text/css'>" + this.htmlObj.head.style + "</STYLE>" + "\n"
+                + "</HEAD>\n"
+                + "<BODY>\n"
+                    + this.htmlObj.body.content + "\n"
+                + "</BODY>\n"
+            +"</HTML>";
+}
+
+SimpleHtmlObject.prototype.getBody = function()
+{
+    return this.htmlObj.body.content.slice(0);
+}
+
+SimpleHtmlObject.prototype.getStyle = function()
+{
+    return this.htmlObj.head.style.slice(0);
+}
+
+
+function HtmlFixer(pIn)
+{
+    this.htmlString = pIn || "";
+}
+
+HtmlFixer.getInstance = function(pIn)
+{
+    return new HtmlFixer(pIn);
+}
+
+HtmlFixer.prototype.fixHtml = function()
+{
+    var htmlObj = SimpleHtmlObject.getInstance();
+    var readTag = htmlObj.readTagContent; //borrow a function from another Object, so i don't have to code the same thing twice
+    
+    //get a copy of the HTML, so we can modify it without chainging the original
+    var toFix = this.htmlString.slice(0);
+    
+    var style = readTag(toFix,"STYLE");
+    var head = readTag(toFix,"HEAD");
+    var body = readTag(toFix,"BODY");
+    
+    if(!body)
+    {
+        body = toFix.replace(/<HEAD>.*<\/HEAD>/gi,"").replace(/(<HTML>|<\/HTML>)/gi,"");        
+    }
+
+    return htmlObj.headers(head).style(style).body(body).toString();
+}
\ No newline at end of file
diff --git a/process/ImporterCustomMappingFunctions_lib/ImporterCustomMappingFunctions_lib.aod b/process/ImporterCustomMappingFunctions_lib/ImporterCustomMappingFunctions_lib.aod
index bda7727edbe38bf67567ed6bf614368f276cacc6..e5e687932c1f9a7c032b98a697d4cce04b62c23e 100644
--- a/process/ImporterCustomMappingFunctions_lib/ImporterCustomMappingFunctions_lib.aod
+++ b/process/ImporterCustomMappingFunctions_lib/ImporterCustomMappingFunctions_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>ImporterCustomMappingFunctions_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/ImporterCustomMappingFunctions_lib/documentation.adoc</documentation>
diff --git a/process/ImporterMappingFunctions_lib/ImporterMappingFunctions_lib.aod b/process/ImporterMappingFunctions_lib/ImporterMappingFunctions_lib.aod
index 8a5c80a490d63a3c52aecaa1f3c2fd22e206c0e0..9c1fdace0d76d26c686e2696f82367c4b9520898 100644
--- a/process/ImporterMappingFunctions_lib/ImporterMappingFunctions_lib.aod
+++ b/process/ImporterMappingFunctions_lib/ImporterMappingFunctions_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>ImporterMappingFunctions_lib</name>
   <comment></comment>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/process/ImporterMappingFunctions_lib/process.js b/process/ImporterMappingFunctions_lib/process.js
index 1598b0c0d197065131f90b301d060411762ecb49..f85d4a3f1b1f45c8e8079a2efe776a0208d07e1c 100644
--- a/process/ImporterMappingFunctions_lib/process.js
+++ b/process/ImporterMappingFunctions_lib/process.js
@@ -142,7 +142,7 @@ function iAttribute(pObject)
             
             if (i == 0) 
             {
-                var parent = "NULL";
+                var parent = null;
                 // select ab_attributeid from AB_ATTRIBUTE where ATTRIBUTE_NAME = 'Subordinate campaign of' and attribute_parent_id is null
                 id = newSelect(ab_attributeId, alias).from(ab_attribute).where(attribute_name, attributes[i])
                         .and(attribute_parent_id + " is null").cell();
@@ -158,10 +158,18 @@ function iAttribute(pObject)
             {
                 id = util.getNewUUID();
                 if (attributes.length == i+1) type = attributeType;
+                
                 //TODO: add insertNoWait to instantly add AB_ATTRIBUTE records; 
                 //this ensures that nothing is in the funcBuffer that does not exist in the database
                 //TODO: check: are COMOB-values added automatically?
                 var values = [id, parent, attributes[i], type, "1"];
+                
+                if(parent == null)
+                {
+                    values = [id, attributes[i], type, "1"];
+                    columns = [ab_attributeId, attribute_name, attribute_type, attribute_active];
+                }
+                
                 this.insertData(ab_attribute, columns, null, values, alias);
             }   
             pathToFollow["childs"][attributes[i]]["id"] = id;   
diff --git a/process/ImporterTest_lib/ImporterTest_lib.aod b/process/ImporterTest_lib/ImporterTest_lib.aod
index e1204321106696757a47000f28e10cc890d73182..18c823d8efb53c2729837bed17354bcc5d518145 100644
--- a/process/ImporterTest_lib/ImporterTest_lib.aod
+++ b/process/ImporterTest_lib/ImporterTest_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>ImporterTest_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/ImporterTest_lib/process.js</process>
diff --git a/process/Importer_lib/Importer_lib.aod b/process/Importer_lib/Importer_lib.aod
index 157f0d47a73b0864183bb16bdd52a1df8aa60151..1d6a37d39b4020a34413b08f937d71f1b2aa6434 100644
--- a/process/Importer_lib/Importer_lib.aod
+++ b/process/Importer_lib/Importer_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Importer_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/Importer_lib/documentation.adoc</documentation>
diff --git a/process/IncomingCallExecutor_lib/IncomingCallExecutor_lib.aod b/process/IncomingCallExecutor_lib/IncomingCallExecutor_lib.aod
index 9d36946fdfeba69161bdfea00b2fb36fff5e9703..6659a5fab6a825cf1ac27042fa364121ef42d443 100644
--- a/process/IncomingCallExecutor_lib/IncomingCallExecutor_lib.aod
+++ b/process/IncomingCallExecutor_lib/IncomingCallExecutor_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>IncomingCallExecutor_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/IncomingCallExecutor_lib/process.js</process>
diff --git a/process/IncomingEmailExecutor_lib/IncomingEmailExecutor_lib.aod b/process/IncomingEmailExecutor_lib/IncomingEmailExecutor_lib.aod
index 1dbef1a882583c24721c0d35583dfdc1506ef5f4..5d940a9124d30b9cfdbfa030b459f3802d9e8139 100644
--- a/process/IncomingEmailExecutor_lib/IncomingEmailExecutor_lib.aod
+++ b/process/IncomingEmailExecutor_lib/IncomingEmailExecutor_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>IncomingEmailExecutor_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/IncomingEmailExecutor_lib/process.js</process>
diff --git a/process/IncomingEmailExecutor_lib/process.js b/process/IncomingEmailExecutor_lib/process.js
index 555f4f161b3e60e782158c1a1aa1a632a5733c50..18756c30f4dfb3005f0f0d06f5ea3ab27797acde 100644
--- a/process/IncomingEmailExecutor_lib/process.js
+++ b/process/IncomingEmailExecutor_lib/process.js
@@ -266,7 +266,23 @@ IncomingEmailExecutor.prototype._getProcessingFunction = function (pIsSender, pT
         }
         else
         {
-            var link = [(contactPersonId == "" ? "Organisation" : "Person"), contactId];
+            var context = contactPersonId == "" ? "Organisation" : "Person"
+         
+            if(context == "Person")//add Organisation to the Activity as Link
+            {
+                var orgData = newSelect(["CONTACT.CONTACTID", "CONTACT.STATUS"], this._alias)
+                                .from("CONTACT")
+                                .join("CONTACT", "anyContact.ORGANISATION_ID = CONTACT.ORGANISATION_ID and CONTACT.PERSON_ID is null", "anyContact")
+                                .whereIfSet(["CONTACT", "CONTACTID", "anyContact"], contactId)
+                                .arrayRow()
+                
+                if (orgData[1] == $KeywordRegistry.contactStatus$active())
+                    pTargetArray["prefered"].push(["Organisation", orgData[0]]);
+                else
+                    pTargetArray["failback"].push(["Organisation", orgData[0]]);
+            }
+         
+            var link = [context, contactId];
             if (isContactActive)
                 pTargetArray["prefered"].push(link);
             else
diff --git a/process/IndexSearch_lib/IndexSearch_lib.aod b/process/IndexSearch_lib/IndexSearch_lib.aod
index bfc314526ea673c93e94af2e8fae2d019e835386..b5a2aacd8c33062115f137291582acd7c0d8a36b 100644
--- a/process/IndexSearch_lib/IndexSearch_lib.aod
+++ b/process/IndexSearch_lib/IndexSearch_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>IndexSearch_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/IndexSearch_lib/process.js</process>
diff --git a/process/JditoFilter_lib/JditoFilter_lib.aod b/process/JditoFilter_lib/JditoFilter_lib.aod
index e6721ea4e24d19d56ce2a3054d799e994536ed7c..1276959dc464987cf335240fa6c934a9261a328c 100644
--- a/process/JditoFilter_lib/JditoFilter_lib.aod
+++ b/process/JditoFilter_lib/JditoFilter_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>JditoFilter_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/JditoFilter_lib/documentation.adoc</documentation>
diff --git a/process/JditoFilter_lib/process.js b/process/JditoFilter_lib/process.js
index 8480664cc40d733bd5b2630cdabfee9efb17de21..e6e2ec67865fb6d45cc71b1a70860547c96540f8 100644
--- a/process/JditoFilter_lib/process.js
+++ b/process/JditoFilter_lib/process.js
@@ -6,6 +6,110 @@ import("system.datetime");
 
 //@TODO: add support for permissions to the lib
 
+/**
+ * object representing a filter-condition
+ * 
+ * @param {Object} pGroup
+ */
+function FilterConditionGroup (pGroup)
+{
+    if (pGroup && "filter" in pGroup)
+        pGroup = pGroup.filter;
+        
+    var operator = pGroup ? pGroup.operator : "AND";
+    var childs = pGroup ? pGroup.childs : [];
+    this.type = "group";
+    this.operator = operator;
+    _removeEmptyGroups(childs);
+    this.childs = childs.map(function (child)
+    {
+        if (child.type === "group")
+            return new FilterConditionGroup(child);
+        return child;
+    });
+    
+    function _removeEmptyGroups (pCurrentArray)
+    {
+        for (let i = 0; i < pCurrentArray.length; i++)
+        {
+            let row = pCurrentArray[i];
+            if (row.type == "group")
+            {
+                _removeEmptyGroups(row.childs);
+                if (row.childs.length === 0)
+                    pCurrentArray.splice(i--, 1);
+            }
+        }
+    }
+}
+
+/**
+ * Calls the given function for every filter row/group and returns the value if the function returns something truthy
+ * 
+ * @param {Function} pCallbackFn  function that tests the values
+ * @return {Object} the first row/group that meets the conditions
+ */
+FilterConditionGroup.prototype.find = function (pCallbackFn)
+{
+    for (let i = 0; l = this.childs.length; i++)
+    {
+        let child = this.childs[i];
+        if (pCallbackFn(child))
+            return child;
+        if (child.type === "group")
+            return child.find(pCallbackFn);
+    }
+}
+
+/**
+ * Searches the filter for a row with the given name
+ * 
+ * @param {String} pName the name of the row
+ * @return {Object} the desired row, if found
+ */
+FilterConditionGroup.prototype.getRow = function (pName)
+{
+    return this.find(function (row)
+    {
+        return row.type === "row" && row.name == pName;
+    });
+}
+
+FilterConditionGroup.prototype.reduce = function (pRowCallbackFn, pAccumulatorGeneratorFn, pMergeFn)
+{
+    return _reduce(this);
+    
+    function _reduce (pRow, pAccumulator, pOperator)
+    {
+        if (pRow.type === "group")
+        {
+            var accumulator = pAccumulatorGeneratorFn();
+            for (let i = 0, l = pRow.childs.length; i < l; i++)
+            {
+                accumulator = _reduce(pRow.childs[i], accumulator, pRow.operator);
+            }
+            if (pAccumulator === undefined || pAccumulator === null)
+                return accumulator;
+            return pMergeFn(pAccumulator, accumulator, pRow.operator);
+        }
+        else if (pRow.type === "row")
+        {
+            return pRowCallbackFn(pAccumulator, pRow, pOperator);
+        }
+        return undefined;
+    }
+}
+
+/**
+ * Checks if the filter group is empty
+ * 
+ * @return {Boolean} true if the filter is empty
+ */
+FilterConditionGroup.prototype.isEmpty = function ()
+{
+    return this.childs.length === 0;
+}
+
 /**
  * object for filtering records
  * 
diff --git a/process/KeywordAttribute_test/KeywordAttribute_test.aod b/process/KeywordAttribute_test/KeywordAttribute_test.aod
new file mode 100644
index 0000000000000000000000000000000000000000..d22a7e77434dce92542facb54aabfd1a93d5a438
--- /dev/null
+++ b/process/KeywordAttribute_test/KeywordAttribute_test.aod
@@ -0,0 +1,12 @@
+<?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>KeywordAttribute_test</name>
+  <title>[TEST] KeywordAttribute_lib</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <icon>VAADIN:CHECK_CIRCLE</icon>
+  <process>%aditoprj%/process/KeywordAttribute_test/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>
diff --git a/process/KeywordAttribute_test/process.js b/process/KeywordAttribute_test/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..888e3a79bc304ec2fca6ccce31ec19b6cf546955
--- /dev/null
+++ b/process/KeywordAttribute_test/process.js
@@ -0,0 +1,144 @@
+import("system.result");
+import("system.translate");
+import("system.vars");
+import("Keyword_lib");
+import("UnitTest_lib");
+import("Sql_lib");
+
+
+var constructor = new TestSuite("KeywordAttribute.constructor", [
+    new Test("should throw error if no data is found and no default value is defined",
+        function(pTester) {
+            var exception = new Error(translate.withArguments("no keyword attribute \"%0\" found in keyword container \"%1\"", ["contacts", "AddressType"]));
+            pTester.expectThat(function() {
+                new KeywordAttribute("AddressType", "contacts");
+            }).throwsException(exception).assert();
+        }
+    ),
+
+    new Test("should not throw error if no data is found but default value is defined",
+        function(pTester) {
+            pTester.expectThat(function() {
+                new KeywordAttribute("AddressType", "contact", "testDefault");
+            }).not().throwsException().assert();
+        }
+    ),
+]);
+
+
+var getValue = new TestSuite("KeywordAttribute.getValue", [
+    new Test("should throw error if attribute does not exist in container and no default value is defined",
+        function(pTester) {
+            var exception = new Error(translate.withArguments("no keyword attribute \"%0\" found in keyword container \"%1\"", ["asdf", "AddressType"]));
+
+            pTester.expectThat(function() {
+                var ka = new KeywordAttribute("AddressType", "asdf");
+                ka.getValue("abc");
+            }).throwsException(exception).assert();
+        }
+    ),
+        
+    new Test("should throw error if attribute is not assigned to keyword and no default value is defined",
+        function(pTester) {
+            var exception = new Error(translate.withArguments("no keyword attribute \"%0\" found in keyword \"%1\" from container \"%2\"", ["contact", "abc", "AddressType"]));
+
+            pTester.expectThat(function() {
+                var ka = new KeywordAttribute("AddressType", "contact");
+                ka.getValue("abc");
+            }).throwsException(exception).assert();
+        }
+    ),
+
+    new Test("should return default value if defined but attribute does not exist in container",
+        function(pTester) {
+            var ka = new KeywordAttribute("AddressType", "asdf", "testDefault");
+            var actualValue = ka.getValue("HOMEADDR");
+
+            pTester.expectThat(actualValue).equals("testDefault").assert();
+        }
+    ),
+
+    new Test("should return default value if defined and attribute exists in container but is not assigned to keyword",
+        function(pTester) {
+            var ka = new KeywordAttribute("AddressType", "contact", "testDefault");
+            var actualValue = ka.getValue("abc");
+
+            pTester.expectThat(actualValue).equals("testDefault").assert();
+        }
+    ),
+
+    new Test("should return keywords boolean value (actually a number)",
+        function(pTester) {
+            var ka = new KeywordAttribute("AddressType", "organisation");
+            var actualValue = ka.getValue("HOMEADDR");
+
+            pTester.expectThat(actualValue).isNumeric().assert();
+            pTester.expectThat(actualValue).equals("0").assert();
+        }
+    ),
+
+    new Test("should return keywords number value (actually a string)",
+        function(pTester) {
+            var ka = new KeywordAttribute("PaymentTerm", "dayNumber");
+            var actualValue = ka.getValue("PAYTERM30");
+
+            pTester.expectThat(actualValue).isNumeric().assert();
+            pTester.expectThat(actualValue).isString().assert();
+            pTester.expectThat(actualValue).equals("30.00").assert();
+        }
+    ),
+        
+    new Test("should return keywords char value (string)",
+        function(pTester) {
+            var ka = new KeywordAttribute("TaskStatus", "icon");
+            var actualValue = ka.getValue("ASSIGNED");
+
+            pTester.expectThat(actualValue).isString().assert();
+            pTester.expectThat(actualValue).equals("NEON:STATUS_ASSIGNED").assert();
+        }
+    ),
+        
+    new Test("should return keywords long char value (string)",
+        function(pTester) {
+            var ka = new KeywordAttribute("TicketType", "attributes");
+            var actualValue = ka.getValue("SUPPORTTICKET");
+
+            pTester.expectThat(actualValue).isString().assert();
+            pTester.expectThat(actualValue).equals('["ff8b1caf-cf30-4edb-b5ca-a9a219ba8399"]').assert();
+        }
+    ),
+]);
+
+
+var getSqlBuilderSelect = new TestSuite("KeywordAttribute.getSqlBuilderSelect", [
+    new Test("should return a SqlBuilder instance",
+        function(pTester) {
+            var ka = new KeywordAttribute("MemberRole", "Intern");
+            /** @type {SqlBuilder} */
+            var actualValue = ka.getSqlBuilderSelect();
+            
+            var expectQueryResult = [
+                "039fd6ae-b4ad-431e-86bf-59ed2f4df0a9",
+                "8cb1b843-713a-4193-aa50-9f5ca06820f8",
+                "9c421b0b-8529-4e07-9463-28d59fd027b6",
+                "b72294cd-3a46-4f71-ab93-72824f63f7f4",
+                "f78f229f-f809-4bd2-aca8-24e2f82fa220",
+            ];
+            var actualQueryResult = actualValue.orderBy("AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ENTRY_ID").arrayColumn();
+
+            pTester.expectThat(actualValue).isInstanceOf("SqlBuilder").assert();
+            pTester.expectThat(actualQueryResult).equals(expectQueryResult).assert();
+        }
+    ),
+]);
+
+
+var tester = new Tester("Test KeywordAttribute_lib");
+tester.initCoverage(KeywordAttribute);
+tester.test(constructor);
+tester.test(getValue);
+tester.test(getSqlBuilderSelect);
+
+tester.summary();
+    
+result.object(tester.getResults());
diff --git a/process/KeywordData_lib/KeywordData_lib.aod b/process/KeywordData_lib/KeywordData_lib.aod
index a4aab38ec5e70adb742a4c84ca34d1428449465f..6955ec39f1f168d9c31fb731c2d6aa16fd02b00c 100644
--- a/process/KeywordData_lib/KeywordData_lib.aod
+++ b/process/KeywordData_lib/KeywordData_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>KeywordData_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/KeywordData_lib/process.js</process>
diff --git a/process/KeywordRegistry_basic/KeywordRegistry_basic.aod b/process/KeywordRegistry_basic/KeywordRegistry_basic.aod
index f16c2160c96dbf655bd3d9e8c09fa6cdf23fe58f..3e8c6225484280a86952143b84f07255692204c7 100644
--- a/process/KeywordRegistry_basic/KeywordRegistry_basic.aod
+++ b/process/KeywordRegistry_basic/KeywordRegistry_basic.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>KeywordRegistry_basic</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/KeywordRegistry_basic/process.js</process>
diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js
index aa1c2042a6007f78f2d2311d85b15f3e3e7db3c2..eaa206920ca8d3e012f686c6830db4b63d9942fd 100644
--- a/process/KeywordRegistry_basic/process.js
+++ b/process/KeywordRegistry_basic/process.js
@@ -296,3 +296,16 @@ $KeywordRegistry.workflowCategory = function(){return "WorkflowCategory";};
 $KeywordRegistry.notificationState = function(){ return "NotificationState";};
 $KeywordRegistry.notificationState$unseen = function(){return "UNSEEN";};
 $KeywordRegistry.notificationState$seen = function(){return "SEEN";};
+
+$KeywordRegistry.discussionStatus = function(){return "DiscussionStatus";}
+$KeywordRegistry.discussionStatus$acitve = function(){return "ACTIVE";}
+$KeywordRegistry.discussionStatus$closed = function(){return "CLOSED";}
+
+$KeywordRegistry.knowledgeType = function(){return "KnowledgeType";}
+$KeywordRegistry.knowledgeType$knowledgeBase = function(){return "KNOWLEDGEBASE";}
+$KeywordRegistry.knowledgeType$editorial = function(){return "EDITORIAL";}
+
+$KeywordRegistry.knowledgePublishLevel = function(){return "KnowledgePublishLevel";}
+$KeywordRegistry.knowledgePublishLevel$internal = function(){return "INTERNAL";}
+$KeywordRegistry.knowledgePublishLevel$partner = function(){return "PARTNER";}
+$KeywordRegistry.knowledgePublishLevel$public = function(){return "PUBLIC";}
\ No newline at end of file
diff --git a/process/Keyword_lib/Keyword_lib.aod b/process/Keyword_lib/Keyword_lib.aod
index 2dd2a647ff95df46a7e1b5d118e021129d1d30d7..641f19343bb3f869b69ebb3c2b0bfd8464c32229 100644
--- a/process/Keyword_lib/Keyword_lib.aod
+++ b/process/Keyword_lib/Keyword_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Keyword_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Keyword_lib/process.js</process>
diff --git a/process/Keyword_lib/process.js b/process/Keyword_lib/process.js
index ea1736e5c13412a67527ebff0a4ab5d4bdae0293..994fd55c07d07fda603f24db728838663dd844f2 100644
--- a/process/Keyword_lib/process.js
+++ b/process/Keyword_lib/process.js
@@ -107,6 +107,7 @@ KeywordUtils.getContainerNames = function()
     //do not cache this list since
     // a) the list can easly change when a new container is created
     // b) where this is called it's not relevant in terms of performance
+    //!SqlBuilder
     var list = db.array(db.COLUMN, "select distinct AB_KEYWORD_ENTRY.CONTAINER from AB_KEYWORD_ENTRY order by AB_KEYWORD_ENTRY.CONTAINER asc");
     return list;
 };
diff --git a/process/Keyword_test/Keyword_test.aod b/process/Keyword_test/Keyword_test.aod
new file mode 100644
index 0000000000000000000000000000000000000000..fa9513b2863452c919eb7342a1f1fd5b0d3cfd27
--- /dev/null
+++ b/process/Keyword_test/Keyword_test.aod
@@ -0,0 +1,12 @@
+<?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>Keyword_test</name>
+  <title>[TEST] Keyword_lib</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <icon>VAADIN:CHECK_CIRCLE</icon>
+  <process>%aditoprj%/process/Keyword_test/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>
diff --git a/process/Keyword_test/process.js b/process/Keyword_test/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..d1b1d910e9dfd985b8c089830f410b21f0151c25
--- /dev/null
+++ b/process/Keyword_test/process.js
@@ -0,0 +1,143 @@
+import("system.result");
+import("system.translate");
+import("system.vars");
+import("Keyword_lib");
+import("UnitTest_lib");
+
+//this test will not work currently 
+//TODO: renable and fix the tests
+
+//var getContainerNames = new TestSuite("KeywordUtils.getContainerNames", [
+//    new Test("should return an alphabetically ascending ordered list of all keyword containers",
+//        function(pTester) {
+//            var actualValue = KeywordUtils.getContainerNames();
+//
+//            pTester.expectThat(actualValue).isArray().assert();
+//            pTester.expectThat(actualValue).hasMinLength(1).assert();
+//            pTester.expectThat(actualValue).elementAt(0).equals("ActivityCategory").assert();
+//            pTester.expectThat(actualValue).elementAt(-1).equals("YesNo").assert();
+//        }
+//    )
+//]);
+//
+//
+//var getCategoryNameById = new TestSuite("KeywordUtils.getCategoryNameById", [
+//    new Test("should return existing keyword category name for correct uuid",
+//        function(pTester) {
+//            var actualValue = KeywordUtils.getCategoryNameById("a55654b1-6a19-4d0c-b08d-cfbc12b5f7b0");
+//
+//            pTester.expectThat(actualValue).equals("MemberRole").assert();
+//        }
+//    ),
+//
+//    new Test("should return non-existing keyword category name for wrong uuid",
+//        function(pTester) {
+//            var actualValue = KeywordUtils.getCategoryNameById("a55654b1-6a19-4d0c-b08d-cfbc12b5f7b1");
+//
+//            pTester.expectThat(actualValue).equals("<unknown>").assert();
+//        }
+//    ),
+//
+//    new Test("should return non-existing keyword category name for missing uuid",
+//        function(pTester) {
+//            var actualValue = KeywordUtils.getCategoryNameById();
+//
+//            pTester.expectThat(actualValue).equals("<unknown>").assert();
+//        }
+//    ),
+//]);
+//
+//
+//var getCategoryIdByName = new TestSuite("KeywordUtils.getCategoryIdByName", [
+//    new Test("should return existing keyword uuid for correct category name",
+//        function(pTester) {
+//            var actualValue = KeywordUtils.getCategoryIdByName("MemberRole");
+//
+//            pTester.expectThat(actualValue).equals("a55654b1-6a19-4d0c-b08d-cfbc12b5f7b0").assert();
+//        }
+//    ),
+//
+//    new Test("should throw exception for wrong keyword category name",
+//        function(pTester) {
+//            var exception = new Error(translate.withArguments("no keyword category \"%0\" found", ["AddressTypes"]));
+//            pTester.expectThat(function() {
+//                KeywordUtils.getCategoryIdByName("AddressTypes");
+//            }).throwsException(exception).assert();
+//        }
+//    ),
+//
+//    new Test("should throw exception for missing keyword category name",
+//        function(pTester) {
+//            var exception = new Error(translate.withArguments("no keyword category \"%0\" found", [""]));
+//            pTester.expectThat(function() {
+//                KeywordUtils.getCategoryIdByName();
+//            }).throwsException(exception).assert();
+//        }
+//    ),
+//]);
+//
+//
+//var getEntryNamesAndIdsByContainer = new TestSuite("KeywordUtils.getEntryNamesAndIdsByContainer", [
+//    new Test("should return an array of all keywords and their ID's for given container",
+//        function(pTester) {
+//            var actualValue = KeywordUtils.getEntryNamesAndIdsByContainer("ActivityDirection");
+//
+//            pTester.expectThat(actualValue).isArray().assert();
+//            pTester.expectThat(actualValue).hasMinLength(1, {name: "array"}).assert();
+//            pTester.expectThat(actualValue).elementAt(0).isArray().assert();
+//            pTester.expectThat(actualValue).elementAt(0).hasLength(2).assert();
+//        }
+//    ),
+//
+//    new Test("should return an empty array for non-existent container",
+//        function(pTester) {
+//            var actualValue = KeywordUtils.getEntryNamesAndIdsByContainer("Asdf");
+//
+//            pTester.expectThat(actualValue).isArray().assert();
+//            pTester.expectThat(actualValue).hasLength(0, {name: "array"}).assert();
+//        }
+//    ),
+//]);
+//
+//
+//var exists = new TestSuite("KeywordUtils.exists", [
+//    new Test("should return a boolean indicating that a known keyword in a known container exists",
+//        function(pTester) {
+//            var actualValue = KeywordUtils.exists("VISIT", "ActivityCategory");
+//
+//            pTester.expectThat(actualValue).isBoolean().assert();
+//            pTester.expectThat(actualValue).equals(true, "known keyword exists in known container").assert();
+//        }
+//    ),
+//
+//    new Test("should return a boolean indicating that an unknown keyword in a known container does not exist",
+//        function(pTester) {
+//            var actualValue = KeywordUtils.exists("ASDF", "ActivityCategory");
+//
+//            pTester.expectThat(actualValue).isBoolean().assert();
+//            pTester.expectThat(actualValue).equals(false, "unknown keyword does not exist in known container").assert();
+//        }
+//    ),
+//
+//    new Test("should return a boolean indicating that a known keyword in an unknown container does not exist",
+//        function(pTester) {
+//            var actualValue = KeywordUtils.exists("VISIT", "Asdf");
+//
+//            pTester.expectThat(actualValue).isBoolean().assert();
+//            pTester.expectThat(actualValue).equals(false, "known keyword does not exist in unknown container").assert();
+//        }
+//    ),
+//]);
+//
+//
+//var tester = new Tester("Test Keyword_lib");
+//tester.initCoverage(KeywordUtils);
+//tester.test(getContainerNames);
+//tester.test(getCategoryNameById);
+//tester.test(getCategoryIdByName);
+//tester.test(getEntryNamesAndIdsByContainer);
+//tester.test(exists);
+//
+//tester.summary();
+//    
+//result.object(tester.getResults());
\ No newline at end of file
diff --git a/process/KnowledgeManagement_lib/KnowledgeManagement_lib.aod b/process/KnowledgeManagement_lib/KnowledgeManagement_lib.aod
new file mode 100644
index 0000000000000000000000000000000000000000..38b9d6a998f6bef55bf0a50b487a124f62e6de18
--- /dev/null
+++ b/process/KnowledgeManagement_lib/KnowledgeManagement_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>KnowledgeManagement_lib</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/KnowledgeManagement_lib/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>LIBRARY</element>
+  </variants>
+</process>
diff --git a/process/KnowledgeManagement_lib/process.js b/process/KnowledgeManagement_lib/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..6abec985abdfb8fa7a47a556f2a19baeeb5f74c6
--- /dev/null
+++ b/process/KnowledgeManagement_lib/process.js
@@ -0,0 +1,1179 @@
+import("system.project");
+import("system.fileIO");
+import("system.translate");
+import("system.tools");
+import("system.util");
+import("system.datetime");
+import("system.vars");
+import("system.db");
+import("system.logging");
+import("Html_lib");
+import("Sql_lib");
+import("Attribute_lib");
+import("AttributeRegistry_basic");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+import("Util_lib");
+import("system.tools");
+import("system.neon");
+import("system.text");
+
+/**
+ * Object that contains function for displying the knowledge entries
+ * @param {String} pHtml HTML Script as string.
+ * @param {String} pKnowledgeId Id of the knowledge entry, that's represented by this object
+ */
+function KnowledgeManagementModel(pHtml, pKnowledgeId)
+{
+    this.knowledgeId = pKnowledgeId || null;
+    
+    var updFunc = function(pContent, pId)
+    {
+        newWhere("KNOWLEDGEMANAGEMENT.KNOWLEDGEMANAGEMENTID", pId)
+            .updateFields({
+                "CONTENT": pContent,
+                "CONTENTDECODED": text.html2text(pContent)
+            });
+    }
+    
+    //this turns a HTML String into an instance of SimpleHtmlObject for further processing
+    //or if an instance of SimpleHtmlObject is given in pHtml it uses the given Object
+    this.html = (typeof pHtml === "string")
+    ? SimpleHtmlObject.getInstance(pHtml, updFunc, this.knowledgeId)
+    : (
+        (pHtml instanceof SimpleHtmlObject)
+        ? pHtml
+        : null
+        );
+    //provides the knowledge entry with it's tags
+    this.knowledgeTagModel = KnowledgeManagementTagsModel.getInstance(this.knowledgeId);
+}
+/**
+ * Factory function of KnowledgeManagementModel
+ * @param {String} pHtml HTML Script as string.
+ * @param {String} pId Id of the knowledge entry, that's represented by this object
+ *
+ * @return {KnowledgeManagementModel}
+ */
+KnowledgeManagementModel.getInstance = function(pHtml, pId)
+{
+    return new KnowledgeManagementModel(pHtml, pId);
+}
+
+/**
+ * Function for setting a CSS Stylesheet for the knowledge entry
+ * @param pStyle {String|function} This parameter takes either a string or a function
+ *                                 the function has to return a CSS Stylesheet as String
+ * @param pArgs {Array} This parameter takes the arguments for calling a style function, Required if pStyle is of type function
+ *
+ * @return {this} return the instance of KnowledgeManagementModel to enable function chaining
+ */
+KnowledgeManagementModel.prototype.style = function(pStyle, pArgs)
+{
+    switch(typeof pStyle)
+    {
+        case "function":
+            let args = (pArgs && pArgs.length)? pArgs : [];
+            this.html.style(pStyle.apply(pStyle, args));
+            break;
+        case "string":
+            this.html.style(pStyle);
+            break;
+    }
+
+    return this;
+}
+
+KnowledgeManagementModel.prototype.headers = function(pHeaders)
+{
+    this.html.headers(pHeaders);
+    
+    return this;
+}
+
+/**
+ * Function for setting the content of the HTML Body for the knowledge entry
+ * @param pContent {String|function} This parameter takes either a string or a function
+ *                                   the function has to return the content of the HTML Body as String
+ * @param pArgs {Array} This parameter takes the arguments for calling a function, Required if pStyle is of type function
+ *
+ * @return {this} return the instance of KnowledgeManagementModel to enable function chaining
+ */
+KnowledgeManagementModel.prototype.content = function(pContent, pArgs)
+{
+    switch(typeof pContent)
+    {
+        case "function":
+            let args = (pArgs && pArgs.length)? pArgs : [];
+            this.html.body(pContent.apply(pContent, args));
+            break;
+        case "string":
+            this.html.body(pContent);
+            break;
+    }
+
+    return this;
+}
+/**
+ * Wrapper for SimpleHtmlObject.prototype.toString, which is overridden so it provides a HTML Script
+ * containing the content and style set by the respective functions
+ *
+ * @return {String} HTML Script
+ */
+KnowledgeManagementModel.prototype.buildHTML = function()
+{
+    return this.html.toString();
+}
+/**
+ * Returns the content of the HTML Body
+ * @return {String}
+ */
+KnowledgeManagementModel.prototype.getContent = function()
+{
+    return this.html.getBody();
+}
+/**
+ * Returns the contents of the set Style Tag
+ * @return {String}
+ */
+KnowledgeManagementModel.prototype.getStyle = function()
+{
+    return this.html.getStyle();
+}
+
+KnowledgeManagementModel.getFrameMapping = function(pFrame)
+{
+    switch(pFrame.toUpperCase())
+    {
+        case "KNOWLEDGEMANAGEMENT":
+            return "KnowledgeManagement";
+            break;
+        default:
+            return null;
+    }
+}
+/**
+ * Function for replacing the http://adito/ and http://aditoknowledge links with links to the neon client
+ * @return {this}
+ */
+KnowledgeManagementModel.prototype.replaceAditoLinks = function()
+{   
+    var clientUrl = project.getInstanceConfigValue("custom.aditoLink.clientUrl", "");
+    var content = this.getContent();
+    //RegExp for finding regular ADITO Links
+    var regExAditoLink = /href\s*=\s*["']http:\/\/adito\/(\w+)\/([\w-]{0,36})["']/gi;
+    //RegExp for finding aditoknowledge links
+    var regExEditorialLink = /href\s*=\s*["']http:\/\/aditoknowledge\/(.+?\.adoc)["']/gi;
+    
+    var match, frame, uid, gitPath;
+    
+    function _getNeonLink(pContext, pUid)
+    {
+        if(pContext)
+            return "href = '" + clientUrl + "client/" + pContext + "/full?id=" + pUid + "' target='_parent'";
+        else
+            return "CONTEXT NOT MAPPED";
+    }
+    
+    while ((match = regExAditoLink.exec(content)) !== null) 
+    {
+        [match, frame, uid] = match;
+        content = content.replace(match, _getNeonLink(KnowledgeManagementModel.getFrameMapping(frame), uid));
+    }
+    
+    var idSql;
+                
+    
+    while ((match = regExEditorialLink.exec(content)) !== null) 
+    {
+        [match, gitPath] = match;
+        idSql = new SqlBuilder().select("KNOWLEDGEMANAGEMENT.KNOWLEDGEMANAGEMENTID")
+        .from("KNOWLEDGEMANAGEMENT")
+        .where("KNOWLEDGEMANAGEMENT.GITPATH", gitPath).cell();
+                
+        content = content.replace(
+            match
+            , _getNeonLink("KnowledgeManagement"
+                , (idSql) ? idSql : "DOCUMENT-NOT-EXISTING"
+                )
+            );
+    }
+       
+    this.content(content);
+    
+    return this;
+}
+/**
+ * Object for gathering the tags of a knowledge entry
+ * @param {String} pKnowledgemanagementId Id of the knowledge entry for which the tags should be collected
+ */
+function KnowledgeManagementTagsModel(pKnowledgemanagementId)
+{
+    this.data = [];
+    this.existingTags = {
+        array:[],
+        ByIdMap:{},
+        ByNameMap:{}
+    };
+    this.knowledgeId = pKnowledgemanagementId || null;
+}
+
+/**
+ * Factory function of KnowledgeManagementTagsModel
+ * @return {KnowledgeManagementTagsModel}
+ */
+KnowledgeManagementTagsModel.getInstance = function(pId)
+{
+    return new KnowledgeManagementTagsModel(pId);
+}
+/**
+ * Function for getting the list of already existing tags
+ * @param {String} pLocalUid If the id is given only one entry is loaded
+ * @return {Object} returns an object containing three keys: array, ByIdMap, ByNameMap
+ *                  the latter two are maps for quick lookup of TagIDs by Name or Name by Id
+ */
+KnowledgeManagementTagsModel.prototype.getPossibleTags = function(pLocalUid)
+{
+    this.existingTags.array = new SqlBuilder()
+                                .select("KNOWLEDGETAGID, TAG")
+                                .from("KNOWLEDGETAG")
+                                .table();
+    
+    for(let i in this.existingTags.array)
+    {
+        this.existingTags.ByIdMap[this.existingTags.array[i][0]] = this.existingTags.array[i][1];
+        this.existingTags.ByNameMap[this.existingTags.array[i][1].toUpperCase()] = this.existingTags.array[i][0];
+        //if a single id is requested, return only that specific dataset
+        if(pLocalUid && pLocalUid == this.existingTags.array[i][0])
+        {
+            let singleReturn = {
+                array:[],
+                ByIdMap:{},
+                ByNameMap:{}
+            };
+            singleReturn.array = [this.existingTags.array[i]];
+            singleReturn.ByIdMap[this.existingTags.array[i][0]] = this.existingTags.array[i][1];
+            singleReturn.ByNameMap[this.existingTags.array[i][1].toUpperCase()] = this.existingTags.array[i][0]
+
+            return singleReturn;
+        }
+    }
+
+    return this.existingTags;
+}
+/**
+ * Function to collect the set tags of a knowledge entry
+ * If no Id is present in either the function parameter or the object itself, it returns an empty dataset
+ *
+ * @param {String} pKnowledgeId Id of the knowledge entry to gather the tags for.
+ * @param {Array} pIdValue If we get one id from the system, we only need to load this one dataset
+ *
+ * @return {this}
+ */
+KnowledgeManagementTagsModel.prototype.collectTags = function(pKnowledgeId, pIdValue)
+{
+    //if no ID is given either by pKnowledgeId or by the property of the this object
+    //it sets an empty dataset and returns this.
+    if(!pKnowledgeId && !this.knowledgeId)
+    {
+        this.data = db.createEmptyTable(3);
+        return this;
+    }
+
+    if(!this.knowledgeId)
+        this.knowledgeId = pKnowledgeId.slice(0);
+
+    var sqlString = new SqlBuilder()
+                        .select("KNOWLEDGETAGLINKID, KNOWLEDGETAG_ID, TAG")
+                        .from("KNOWLEDGETAGLINK")
+                        .join("KNOWLEDGETAG on KNOWLEDGETAGID = KNOWLEDGETAG_ID")
+                        .where("KNOWLEDGETAGLINK.KNOWLEDGEMANAGEMENT_ID", this.knowledgeId)
+
+    if(pIdValue)
+        sqlString.and("KNOWLEDGETAGLINK.KNOWLEDGETAGLINKID", pIdValue, SqlBuilder.IN());
+
+    this.data = sqlString.table();
+
+    return this;
+}
+/**
+ * Object for handling tags.
+ * I.e. adding, editing and deleting tags of an knowledge entry
+ *
+ * @param {String} pKnowledgeId
+ * @param {KnowledgeManagementTagsModel} pTagsModel If you already have an instance of the Tags Model, you can give it to the function
+ *                                       instead of creating a new instance
+ */
+function KnowledgeManagementTagsController(pKnowledgeId, pTagsModel)
+{
+    this.model = (pTagsModel instanceof KnowledgeManagementTagsModel)
+    ? pTagsModel
+    : KnowledgeManagementTagsModel.getInstance(pKnowledgeId);
+
+    this.knowledgeId = pKnowledgeId || null;
+}
+/**
+ * Factory fucntion for KnowledgeManagementTagsController
+ * @return {KnowledgeManagementTagsController}
+ */
+KnowledgeManagementTagsController.getInstance = function(pId, pModel)
+{
+    return new KnowledgeManagementTagsController(pId, pModel);
+}
+/**
+ * This function is used to add a new tag to a knowledge entry
+ * If the tag is already used on the given entry, it does nothing
+ * If a completely new tag is entered, it gets created in the Tags Attribute and then it gets added to the knowledge entry
+ *
+ * @param {String} pIdValue, id of the new AttributeRelation typically read from $local.idvalue
+ * @param {Array} pRowData, data of the new tag, typically read from $local.rowdata
+ * @param {Boolean} pFromUpdate
+ *
+ * @return {this}
+ */
+KnowledgeManagementTagsController.prototype.addTag = function(pIdValue, pRowData, pFromUpdate)
+{
+    if(!pRowData["TAG.value"] || !pRowData["TAG.value"].trim() || !pIdValue)
+        return this;
+    pRowData["TAG.value"] = pRowData["TAG.value"].trim();
+    //if we get an UUID, an existing tag was chosen and can be added directly
+    if(IdUtils.isUUID(pRowData["TAG.value"]))
+        _add.apply(this,[pIdValue, pRowData]);
+    else //else if get a new string, we have to create the tag in the attribute first
+    {
+        this.createNewTag(pIdValue, pRowData);
+    }
+    /**
+     * private function for adding the tag to the knowledge entry
+     * @param {String} pId, id of the new AttributeRelation typically read from $local.idvalue
+     * @param {Array} pData, data of the new tag, typically read from $local.rowdata
+     */
+    function _add(pId, pData)
+    {
+        //get all possible tags, to make sure the new tag is already registered
+        var existingTags = this.model.getPossibleTags();
+
+
+        var countSql = newSelect("count(*)")
+                            .from("KNOWLEDGETAGLINK")
+                            .where("KNOWLEDGETAGLINK.KNOWLEDGETAG_ID", pData["TAG.value"])
+                            .and("KNOWLEDGETAGLINK.KNOWLEDGEMANAGEMENT_ID", this.knowledgeId)
+                            .cell();
+
+        // if the tag is registered and isn't already used on this knowledge entry, add a attribute relation
+        if(existingTags.ByIdMap[pData["TAG.value"]] && Number(countSql) === 0 && !pFromUpdate)
+        {
+            var fields = ["KNOWLEDGETAGLINKID","KNOWLEDGEMANAGEMENT_ID","KNOWLEDGETAG_ID","USER_NEW","DATE_NEW"];//["AB_ATTRIBUTERELATIONID", "AB_ATTRIBUTE_ID", "OBJECT_ROWID", "OBJECT_TYPE", "ID_VALUE", "USER_NEW", "DATE_NEW"];
+            var values = [pId, this.knowledgeId, pData["TAG.value"], vars.get("$sys.user"), datetime.date()];
+
+            db.insertData("KNOWLEDGETAGLINK", fields, null, values);
+        }
+    }
+
+    return this;
+}
+/**
+ * Function for updating/editing an existing tag
+ * @param {String} pIdValue, id of the new AttributeRelation typically read from $local.idvalue
+ * @param {Array} pRowData, data of the new tag, typically read from $local.rowdata
+ *
+ * @return {this}
+ */
+KnowledgeManagementTagsController.prototype.editTag = function(pIdValue, pRowData)
+{
+    if(!pRowData["TAG.value"] || !pIdValue)
+        return this;
+
+    var existingTags = this.model.getPossibleTags();
+    //if we get an UUID and it is in the existing IDs Map, we can just update the database field
+    if(IdUtils.isUUID(data["TAG.value"]) && existingTags.ByIdMap[data["TAG.value"]])
+    {
+        _update.apply(this,[pIdValue, pRowData]);
+    }
+    else // if we get text, we have to get the old tags id, create the new tag and then check if the old tag is used somewhere else
+    {    // if it's not used anymore, it gets deleted from the attribute
+        var oldTag = new SqlBuilder()
+                            .select("KNOWLEDGETAG_ID")
+                            .from("KNOWLEDGETAGLINK")
+                            .where("KNOWLEDGETAGLINK.KNOWLEDGETAGLINKID", pIdValue)
+                            .cell();
+
+        var newTag = this.createNewTag(pIdValue, pRowData, true);
+        pRowData["TAG.value"] = newTag;
+
+        _clear.apply(this,[oldTag]);
+        _update.apply(this, [pIdValue, pRowData]);
+    }
+    /**
+     * private function for updating an AttributeRelation with the new tag
+     */
+    function _update(pId, pData)
+    {
+        var fields = ["KNOWLEDGETAG_ID", "USER_EDIT", "DATE_EDIT"];
+        var values = [pData["TAG.value"], vars.get("$sys.user"), datetime.date()];
+        var cond = newWhere("KNOWLEDGETAGLINK.KNOWLEDGETAGLINKID", pId).toString();
+
+        db.updateData("KNOWLEDGETAGLINK", fields, null, values, cond);
+    }
+    /**
+     * private function for checking, if an old tag is used anywhere else. If it's not used anymore, it gets deleted
+     */
+    function _clear(pOldValue)
+    {
+        var count = new SqlBuilder()
+                        .select("count(*)")
+                        .from("KNOWLEDGETAGLINK")
+                        .where("KNOWLEDGETAGLINK.KNOWLEDGETAG_ID", pOldValue)
+                        .cell();
+        if(count == 0)
+        {
+            db.deleteData("KNOWLEDGETAG", newWhere("KNOWLEDGETAG.KNOWLEDGETAGID", pOldValue).toString());
+        }
+    }
+
+    return this;
+}
+/**
+ * Function for deleting a tag from a knowledge entry
+ * If a tag isn't used anywhere else, it gets deleted from the list of existing tags
+ *
+ * @param {String} pIdValue Value of $local.idvalue in onDelete Process
+ * @param {[][]} pData Value of $local.rowdata in onDelete Process
+ *
+ * @return {this}
+ */
+KnowledgeManagementTagsController.prototype.deleteTag = function(pIdValue, pData)
+{
+    if(!pIdValue || !pData["TAG.value"])
+        return this;
+
+    db.deleteData("KNOWLEDGETAGLINK", newWhere("KNOWLEDGETAGLINK.KNOWLEDGETAGLINKID", pIdValue).toString());
+
+    var count = new SqlBuilder()
+                    .select("count(*)")
+                    .from("KNOWLEDGETAGLINK")
+                    .where("KNOWLEDGETAGLINK.KNOWLEDGETAG_ID", pData["TAG.value"])
+                    .cell();
+
+    if(count == 0)
+    {
+        db.deleteData("KNOWLEDGETAG", newWhere("KNOWLEDGETAG.KNOWLEDGETAGID", pData["TAG.value"]).toString());
+    }
+
+    return this;
+}
+/**
+ * Function to clear all tags from an entry
+ * Used in the Git Interface, to get rid of all tags and then newly create them
+ *
+ * @return {KnowledgeManagementTagsController} Returns this for chaining
+ */
+KnowledgeManagementTagsController.prototype.clearTags = function()
+{
+    this.model.collectTags(this.knowledgeId).data.forEach(
+        function(item)
+        {
+            let rowData = {};
+            rowData["TAG.value"] = item[1];
+
+            this.deleteTag(item[0], rowData);
+        }
+        ,this);
+
+    return this;
+}
+/**
+ * Fucntion for adding a new tag to the list of existing tags
+ * It adds it also to the table KNOWLEDGEMANAGEMENTTAGMODERATION where all new tags are stored for further moderation
+ *
+ * @param {String} pIdValue typically the $local.idvalue of the onInsert process, it is being used, if for some reason the entered tag is already existing.
+ *                          then a new AttributeRelation is created instead of the tag.
+ * @param {[][]} pData typically the $local.rowdata of the onInsert or onUpdate process
+ * @param {Boolean} pFromUpdate
+ *
+ * @return {String|null} returns the id of the new tag attribute or null, if it couldn't be created
+ */
+KnowledgeManagementTagsController.prototype.createNewTag = function(pIdValue, pData, pFromUpdate)
+{
+    if(!pData["TAG.value"] || !pIdValue)
+        throw "no Tag was passed or no pIdValue was passed";
+
+    var existingTags = this.model.getPossibleTags();
+    var tagFields = ["KNOWLEDGETAGID"
+                        ,"TAG"
+                        ,"DATE_NEW"
+                        ,"USER_NEW"];
+    var newAttrId;
+    var tagValues;
+
+    //If the user entered text without choosing a list entry, do a lookup on the existing tags by upper case and add tag by id, if it already exists
+    if(existingTags.ByNameMap[pData["TAG.value"].toUpperCase()])
+    {
+        pData["TAG.value"] = existingTags.ByNameMap[pData["TAG.value"].toUpperCase()];
+        this.addTag(pIdValue, pData);
+    }
+    else
+    {
+        newAttrId = util.getNewUUID();
+        tagValues = [newAttrId, pData["TAG.value"], datetime.date(), vars.get("$sys.user")];
+
+        db.insertData("KNOWLEDGETAG", tagFields, null, tagValues);
+        
+        pData["TAG.value"] = newAttrId;
+        
+        this.addTag(pIdValue, pData, pFromUpdate);
+
+        return newAttrId;
+    }
+
+    return null;
+}
+/**
+ * Object for handling the discussions
+ */
+function KnowledgeDiscussion(pKnowledgeId)
+{
+    this.knowledgeId = pKnowledgeId;
+    this.data = [];
+}
+/**
+ * Factory function of KnwoledgeDiscussion
+ * @param {String|null} pKnowledgeId UUID if only the discussion on on specific knowledge entry are needed, null if all discussions of all knowledge entries should be loaded.
+ */
+KnowledgeDiscussion.getInstance = function(pKnowledgeId)
+{
+    return new KnowledgeDiscussion(pKnowledgeId);
+}
+/**
+ * Function for getting the row count, uses less complex SQL and doesn't have the tree generation.
+ * It's used in the rowCountProcess of the RecordContainer of the KnowledgeDiscussion entity, to improve performance
+ *
+ * @param {SqlBuilder} pCondition sql condition
+ * @param {Array} pIdValues Takes an array of ids, typically one id with single selection, to only load the selected discusssion for the preview view
+ *
+ * @return {int} Total number of Datasets to load
+ */
+KnowledgeDiscussion.prototype.getDatasetCount = function(pCondition, pIdValues)
+{
+    var knowledgeSql = newSelect("count(*)").from("KNOWLEDGEMANAGEMENT").join("KNOWLEDGEDISCUSSION", "KNOWLEDGEMANAGEMENT.KNOWLEDGEMANAGEMENTID = KNOWLEDGEDISCUSSION.KNOWLEDGEMANAGEMENT_ID").where();
+
+    var knowledgeData = 0;
+
+    var discussionSql = newSelect("count(*)").from("KNOWLEDGEDISCUSSION").where();
+
+    if(pCondition)
+    {
+        discussionSql.andIfSet(pCondition);
+        knowledgeSql.andIfSet(pCondition);
+    }
+
+    if(pIdValues)
+    {
+        knowledgeSql.and("KNOWLEDGEMANAGEMENT.KNOWLEDGEMANAGEMENTID", pIdValues, SqlBuilder.IN());
+        discussionSql.and("KNOWLEDGEDISCUSSION.KNOWLEDGEDISCUSSIONID", pIdValues, SqlBuilder.IN());
+    }
+
+    //if we have a specific knowledge, we don't need all knowledge entries. Otherwise load all knowledge entries that have discussions
+    if(this.knowledgeId)
+        discussionSql.and("KNOWLEDGEDISCUSSION.KNOWLEDGEMANAGEMENT_ID", this.knowledgeId);
+    else
+        knowledgeData = knowledgeSql.table()
+    
+
+    var discussionData = discussionSql.table()
+
+    var sum = ((Number(knowledgeData) > 0) ? Number(knowledgeData) + Number(discussionData) : Number(discussionData));
+
+    return sum;
+}
+
+/**
+ * Complex function to build the DiscussionTree.
+ * Loads the data depending on this.knowledgeId, pMode and pIdValues and builds the tree out of the data
+ * The tree always gets sorted by the date of the most recent action. Either a new answer to an discussion or an edit of an discussion
+ * Data is retireved by reading the data property of your instance of KnowledgeDiscussion after running buildCompleteTree
+ *
+ * @param {SqlBuilder} pCondition sql condition
+ * @param {Array} pIdValues Takes an array of ids, typically one id with single selection, to only load the selected discusssion for the preview view
+ * @param {Boolean} pGetAll Switch, which determines if all discussions on all knowledge entries should be loaded or only the discussion for one specific knowledge.
+ *
+ * @return {this} returns the now filled instance of the object.
+ */
+KnowledgeDiscussion.prototype.buildCompleteTree = function(pCondition, pIdValues, pGetAll)
+{
+    var knowledgeSql = newSelect("KNOWLEDGEMANAGEMENT.KNOWLEDGEMANAGEMENTID, KNOWLEDGEMANAGEMENT.TITLE").from("KNOWLEDGEMANAGEMENT")
+    .join("KNOWLEDGEDISCUSSION", "KNOWLEDGEMANAGEMENT.KNOWLEDGEMANAGEMENTID = KNOWLEDGEDISCUSSION.KNOWLEDGEMANAGEMENT_ID")
+    .where()
+
+    var knowledgeData = null;
+
+    var discussionSql = newSelect("KNOWLEDGEDISCUSSIONID,PARENTENTRY,KNOWLEDGEMANAGEMENT_ID ,AUTHOR,DISCUSSIONTEXT,STATUS,'InsertKEyowrdSubselecthere' ,DATE_NEW,DATE_EDIT,USER_NEW,USER_EDIT")
+    .from("KNOWLEDGEDISCUSSION").where()
+    
+    var iconMap = { 
+        TOP:"VAADIN:PIN"
+        ,
+        ANSWER:"VAADIN:COMMENT_O"
+        ,
+        KNOWLEDGE:"VAADIN:ACADEMY_CAP"
+        ,
+        TOP_CLOSED:"VAADIN:LOCK"
+    };
+
+    if(pCondition && !(pIdValues && pIdValues.length == 1))
+    {
+        discussionSql.andIfSet(pCondition);
+        knowledgeSql.andIfSet(pCondition);
+    }
+
+    if(pIdValues)
+    {
+        discussionSql.and("KNOWLEDGEDISCUSSION.KNOWLEDGEDISCUSSIONID",  pIdValues, SqlBuilder.IN());
+    }
+
+    //if we have a specific knowledge, we don't need all knowledge entries. Otherwise load all knowledge entries that have discussions
+    if(pGetAll)
+        knowledgeData = knowledgeSql.table()
+    else if(this.knowledgeId)
+        discussionSql.and("KNOWLEDGEDISCUSSION.KNOWLEDGEMANAGEMENT_ID", this.knowledgeId);
+
+    var discussionData = discussionSql.table();
+    
+    //remove all parent-ids that can't be found in the array, otherwise these would not be included in the tree
+    //(if these entries were not included, the result from the rowCountProcess would be incorrect)
+    if (Utils.isNullOrEmpty(pIdValues))
+    {
+        var allDiscussionIds = new Set();
+        discussionData.forEach(function ([discussionId]) 
+        {
+            allDiscussionIds.add(discussionId);
+        });
+        discussionData.forEach(function (row) 
+        {
+            if (!allDiscussionIds.has(row[1]))
+                row[1] = ""; 
+        });
+    }
+    
+    var user, userTitle, discussionTitle;
+
+    //adding firstname and lastname from employee as author displayvalue and add icon
+    for(var i = 0; i < discussionData.length; i++)
+    {
+        discussionData[i][4] = discussionData[i][4].trim();
+        user = tools.getUser(discussionData[i][3]);
+        userTitle = _getNamefromUser(user);
+        //old icon code: KeywordUtils.getAttributeRelation(discussionData[i][5], "DiscussionStatus", "knowledgeDiscussionIcon")
+        discussionData[i].push(userTitle);
+        discussionData[i].push(_getIcon("D", discussionData[i][1].trim(), discussionData[i][5].trim()));
+        discussionData[i].push("D"); //Node type for discussions
+
+        discussionTitle = userTitle;
+        if(discussionData[i][7])
+            discussionTitle += " "+ translate.text("added on") +": " + datetime.toDate(discussionData[i][7], "dd.MM.yyyy");
+
+
+        if(discussionData[i][8])
+        {
+            if(discussionData[i][10] && discussionData[i][3] != discussionData[i][10])
+            {
+                user = tools.getUser(discussionData[i][10]);
+                userTitle = _getNamefromUser(user);
+            }
+            discussionTitle += ", " + userTitle + " " + translate.text("edited on") +": " + datetime.toDate(discussionData[i][8], "dd.MM.yyyy");
+        }
+
+        discussionData[i].push(discussionTitle);
+    }
+
+    //if something gets selected in the tree, only return those datasets
+    if(pIdValues && !this.knowledgeId && !discussionData.length)
+    {
+        this.data = knowledgeData;
+        return this;
+    }
+    else if(pIdValues && discussionData.length)
+    {
+        this.data = discussionData;
+        return this;
+    }
+
+    var tempTree = [];
+    //if a specific knowledge is given, then use the empty tree to fill with top parents
+    //, otherwise insert knowledge entries into the tree first via _fillKnowledge() and then add top parents to those
+    tempTree = _fillTopParents(((this.knowledgeId)
+        ? tempTree
+        : _fillKnowledge(tempTree, knowledgeData))
+    , discussionData
+    , this.knowledgeId);
+    //if we have a specific knowledgeId, we recursively add all children for each top parent.
+    if(this.knowledgeId)
+    {
+        for(let i = 0; i < tempTree.length; i++)
+        {
+            _fillInChildren(tempTree[i], discussionData, tempTree[i].id);
+            tempTree[i].date = _propagateMostRecentDate(tempTree[i]);
+        }
+        tempTree.sort(_sortByDateDesc);
+    }
+    else
+    {
+        for(let i = 0; i < tempTree.length; i++) // loop over knowledge
+        {
+            for(let ii = 0; ii < tempTree[i].children.length; ii++) // loop over opening threads
+            {
+                _fillInChildren(tempTree[i].children[ii], discussionData, tempTree[i].children[ii].id); //add children recursively to opening threads
+                tempTree[i].children[ii].date = _propagateMostRecentDate(tempTree[i].children[ii]);
+            }
+            tempTree[i].children.sort(_sortByDateDesc);
+            tempTree[i].date = tempTree[i].children[0].date;
+        }
+        tempTree.sort(_sortByDateDesc);
+    }
+
+    this.data = _buildArrayFromTree.apply(this, [tempTree]);
+
+    return this;
+
+    function _getIcon(pNodeType, pParentId, pStatus)
+    {           
+        if(pNodeType == "K")
+            return iconMap.KNOWLEDGE;
+        if(pNodeType == "D" && pStatus == $KeywordRegistry.discussionStatus$closed())
+            return iconMap.TOP_CLOSED;
+        if(pNodeType == "D" && pParentId == "")
+            return iconMap.TOP;
+        if(pNodeType == "D" && pParentId != "")
+            return iconMap.ANSWER;
+        
+        return "";
+    }
+
+    function _getNamefromUser(pUser)
+    {
+        return ((pUser && pUser[tools.PARAMS]) ? pUser[tools.PARAMS][tools.FIRSTNAME] + " " + pUser[tools.PARAMS][tools.LASTNAME] : null);
+    }
+
+    function _buildArrayFromTree(pTree)
+    {
+        var dataArray = [];
+
+        function __runLayers(pBranch)
+        {
+            dataArray.push(pBranch.data);
+
+            for(let i = 0; i < pBranch.children.length; i++)
+            {
+                __runLayers(pBranch.children[i]);
+            }
+        }
+
+        for(let i = 0; i < pTree.length; i++)
+        {
+            __runLayers.apply(this, [pTree[i]]);
+        }
+
+        return dataArray;
+    }
+
+    function _sortByDateDesc(a,b)
+    {
+        return b.date - a.date;
+    }
+
+    function _fillKnowledge(pTree, pData)
+    {
+        for(let i = 0; i < pData.length; i++)
+        {
+            pTree.push({
+                id:pData[i][0]
+                ,
+                parent:null
+                ,
+                data:[
+                pData[i][0]
+                ,null
+                ,null
+                ,null
+                ,pData[i][2]
+                ,null
+                ,null
+                ,null
+                ,null
+                ,null
+                ,null
+                ,null
+                ,""
+                ,"K"]
+                ,
+                children:[]
+            });
+            pData.splice(i--,1);
+        }
+
+        return pTree;
+    }
+
+    function _fillTopParents(pTree, pData, pHasSpecificKnowledge)
+    {
+        function __addNode(pTree, pNodeData, pNodeIndex, pSetAsParentId)
+        {
+            if(!pNodeIndex && !pSetAsParentId)
+            {
+                pTree.push({
+                    id:pNodeData[0]
+                    ,
+                    parent:null
+                    ,
+                    data:pNodeData
+                    ,
+                    nodeType:pNodeData[13]
+                    ,
+                    children:[]
+                });
+            }
+            else
+            {
+                pNodeData[1] = pSetAsParentId;
+                pTree[pNodeIndex].children.push({
+                    id:pNodeData[0]
+                    ,
+                    parent:pSetAsParentId
+                    ,
+                    data:pNodeData
+                    ,
+                    nodeType:pNodeData[13]
+                    ,
+                    children:[]
+                });
+            }
+        }
+
+        if(pHasSpecificKnowledge)
+        {
+            for(let i = 0; i < pData.length; i++)
+            {
+                if(!pData[i][1])
+                {
+                    __addNode(pTree, pData.splice(i--,1)[0]);
+                }
+            }
+        }
+        else
+        {
+            for(let i = 0; i < pTree.length; i++)
+            for(let ii = 0; ii < pData.length; ii++)
+            {
+                if(!pData[ii][1] && pData[ii][2] == pTree[i].id)
+                {
+                    __addNode(pTree, pData.splice(ii--,1)[0], i, pTree[i].id);
+                }
+            }
+        }
+
+        return pTree;
+    }
+
+    function _fillInChildren(pNode, pData, pParentId)
+    {
+        var tempNodes = [];
+        for(let i = 0; i < pData.length; i++)
+        {
+            let tempData = null;
+            if(pData[i][1] == pParentId)
+            {
+                tempData = pData.splice(i--,1)[0];
+                tempNodes.push({
+                    id:tempData[0]
+                    ,
+                    parent:tempData[1]
+                    ,
+                    data:tempData
+                    ,
+                    children:[]
+                    ,
+                    nodeType:tempData[13]
+                });
+            }
+        }
+
+        for(let i = 0; i < tempNodes.length; i++)
+        {
+            _fillInChildren(tempNodes[i], pData, tempNodes[i].id);
+            pNode.children.push(tempNodes[i]);
+        }
+    }
+
+    function _propagateMostRecentDate(pNode)
+    {
+        //this funcion takes n arguments, sorts them numerically descending
+        //, so the biggest and therefore most recent timestamp is on the first index
+        //, which then gets returned
+        function __getMostRecentDate()
+        {
+            return [].slice.call(arguments).sort(function(a, b){
+                return b - a;
+            })[0];
+        }
+
+        var propagatedDate = null;
+        //if we are on the last child, only get the most recent date of this child
+        if(!pNode.children.length)
+            propagatedDate = __getMostRecentDate(pNode.data[7], pNode.data[8]);
+        else
+        {
+            propagatedDate = []
+            //if we have children, we need to get the most recent date from the children and our current node.
+            for(let i = 0; i < pNode.children.length; i++)
+            {
+                propagatedDate.push(__getMostRecentDate(_propagateMostRecentDate(pNode.children[i]), pNode.data[7], pNode.data[8]));
+            }
+
+            propagatedDate = __getMostRecentDate.apply(null,propagatedDate);
+        }
+        //return the most recent date, which got propagated all the way through the tree branch
+        return propagatedDate;
+    }
+}
+/**
+ * Function for adding a new Discussion.
+ * Used in the onInsert process of the RecordContainer of the KnowledgeDiscussion entity
+ *
+ * @param {String} pDiscussionId $local.idvalue of the onInsert process
+ * @param {Array} pRowData $local.rowdata of the onInsert process
+ *
+ * @return {this}
+ */
+KnowledgeDiscussion.prototype.addDiscussion = function(pDiscussionId, pRowData)
+{
+    if(!pRowData["DISCUSSIONTEXT.value"])
+        return this;
+
+    if(!pDiscussionId)
+        pDiscussionId = "";
+
+    var fields = ["KNOWLEDGEDISCUSSIONID","PARENTENTRY"
+    ,"KNOWLEDGEMANAGEMENT_ID","DISCUSSIONTEXT"
+    ,"STATUS","AUTHOR"
+    ,"DATE_NEW","USER_NEW"];
+
+    var values = [
+    pRowData["UID.value"]
+    ,pDiscussionId.trim()
+    ,this.knowledgeId.trim()
+    ,pRowData["DISCUSSIONTEXT.value"]
+    ,pRowData["STATUS.value"]
+    ,pRowData["AUTHOR.value"].trim()
+    ,datetime.date()
+    ,vars.get("$sys.user").trim()
+    ];
+
+    db.insertData("KNOWLEDGEDISCUSSION", fields, null, values);
+
+    return this;
+}
+/**
+ * Function for editing an existing Discussion.
+ * Used in the onUpdate process of the RecordContainer of the KnowledgeDiscussion entity
+ *
+ * @param {String} pDiscussionId $local.idvalue of the onUpdate process
+ * @param {Array} pRowData $local.rowdata of the onUpdate process
+ * @param {Array} pChanged $local.changed of the onUpdate process
+ *
+ * @return {this}
+ */
+KnowledgeDiscussion.prototype.editDiscussion = function(pDiscussionId, pRowData, pChanged)
+{
+    if(!pDiscussionId)
+        return this;
+
+    var i;
+    var fields = [];
+    var values = [];
+
+    for(i = 0; i < pChanged.length; i++)
+    {
+        let field = pChanged[i];
+        values.push(pRowData[field]);
+        fields.push(field.split(".")[0]);
+    }
+
+
+    db.updateData("KNOWLEDGEDISCUSSION"
+        , fields
+        , null
+        , values
+        , newWhere("KNOWLEDGEDISCUSSION.KNOWLEDGEDISCUSSIONID", pDiscussionId)
+        .and("KNOWLEDGEDISCUSSION.KNOWLEDGEMANAGEMENT_ID", this.knowledgeId).toString());
+
+    return this;
+}
+/**
+ * Function for deleting an existing Discussion.
+ * Used in the onUpdate process of the RecordContainer of the KnowledgeDiscussion entity
+ *
+ * @param {String} pDiscussionId $local.idvalue of the onUpdate process
+ *
+ * @return {this}
+ */
+KnowledgeDiscussion.prototype.deleteDiscussion = function(pDiscussionId)
+{
+    if(!pDiscussionId)
+        return this;
+
+    db.deleteData("KNOWLEDGEDISCUSSION"
+        , newWhere("KNOWLEDGEDISCUSSION.KNOWLEDGEDISCUSSIONID", pDiscussionId)
+        .and("KNOWLEDGEDISCUSSION.KNOWLEDGEMANAGEMENT_ID", this.knowledgeId).toString());
+
+    return this;
+}
+/**
+ * Static function for checking if a discussion has children below itself
+ *
+ * @param {String} pId Id of the discussion to check
+ *
+ * @return {Boolean} true if number of children is greater than 0
+ */
+KnowledgeDiscussion.hasChildren = function(pId)
+{
+    return newSelect("count(*)").from("KNOWLEDGEDISCUSSION").where("KNOWLEDGEDISCUSSION.PARENTENTRY", pId).cell() > 0
+}
+
+/**
+ * Function for setting the status of a discussion AND its children
+ * @param {String} pDiscussionId The id of the discussion
+ * @param {String} pStatus $KeywordRegistry.discussionStatus$acitve() or $KeywordRegistry.discussionStatus$closed()
+ *
+ * @return {this}
+ */
+KnowledgeDiscussion.prototype.setDiscussionStatus = function(pDiscussionId, pStatus)
+{
+
+    if(!pDiscussionId || (pStatus !== $KeywordRegistry.discussionStatus$acitve() && pStatus !== $KeywordRegistry.discussionStatus$closed()))
+        return this;
+
+    let table = "KNOWLEDGEDISCUSSION";
+    let cols = ["STATUS"];
+    let updates = [];
+    let updateTemplate = [table, cols, null, [pStatus]];
+
+    _addChildrenToUpdates(pDiscussionId, pStatus);
+    let parentUpdate = [].slice.call(updateTemplate,0);
+    parentUpdate.push(table+"ID = '" + pDiscussionId + "'");
+    updates.push(parentUpdate);
+    
+    db.updates(updates);
+
+    function _addChildrenToUpdates(pId, pStatus)
+    {
+        var data = newSelect(["KNOWLEDGEDISCUSSIONID", "PARENTENTRY"])
+            .from("KNOWLEDGEDISCUSSION")
+            .where("KNOWLEDGEDISCUSSION.PARENTENTRY", pId)
+            .table();
+        if(!data.length)
+            return;
+
+        for(var i = 0; i < data.length; i++)
+        {
+            let upd = [].slice.call(updateTemplate,0);
+            upd.push(table+"ID = '" + data[i][0] + "'");
+            updates.push(upd);
+            //db.updateData(table, cols, colTypes, [pStatus], table+"ID = '" + data[i][0] + "'");
+            _addChildrenToUpdates(data[i][0], pStatus);
+        }
+    }
+
+    return this;
+}
+
+function KnowledgeIndexHelper(pKnowledgeId, pData)
+{
+    this.knowledgeId = pKnowledgeId || null;
+    this.data = pData || null;
+}
+
+KnowledgeIndexHelper.getInstance = function(pId, pData)
+{
+    return new KnowledgeIndexHelper(pId, pData);
+}
+
+KnowledgeIndexHelper.prototype.getDocumentsFromContent = function()
+{
+    var tempArray = [];
+    var content = newSelect("CONTENT")
+        .from("KNOWLEDGEMANAGEMENT")
+        .where("KNOWLEDGEMANAGEMENT.KNOWLEDGEMANAGEMENTID", this.knowledgeId)
+        .cell();
+    var invalidLink = false;
+    // the question mark quantifier is in (.*?) to make sure, that more than one file link can be present in one line!
+    var matches = content.match( new RegExp("<a href=\"file(.*?)((htm(l?))|(pdf)|(doc(x?)))\"", "gi") );
+    var i = 0;
+
+    if(matches)
+        matches.forEach(
+            function(match)
+            {
+                var data = null;
+                match = match.replace(/^(<a href="file:(\/*))/gi,"").replace(/"$/gi,"");
+
+                if(vars.get("$sys.serveros").indexOf("windows") != -1)
+                {
+                    match = match.replace(/[/\\]+FILER[/\\]publicshare\$/, "//filer/publicshare$", "gi").replace("S:", "//filer/publicshare$").replace(/\\/g, "/");
+                }
+                else
+                {
+                    match = match.replace(/[/\\]+FILER[/\\]publicshare\$/, "/mnt/filer_publicshare", "gi").replace("S:", "/mnt/filer_publicshare").replace(/\\/g, "/");
+                }
+
+                var decodedMatch = decodeURIComponent(match);
+
+                if(fileIO.exists(decodedMatch))
+                {
+                    //only get data, if it's not a directory. getData on a directory fails with an exception
+                    if(!fileIO.isDirectory(decodedMatch))
+                    {
+                        data = fileIO.getData(decodeURIComponent(decodedMatch), util.DATA_BINARY);
+                    }
+                }
+                else
+                {
+                    invalidLink = true;
+                }
+
+                if(data != null)
+                {
+                    tempArray.push(data);
+                }
+            }
+            ,this);
+            
+    this.data[8] = tempArray;
+
+    return this;
+}
+
+function KnowledgeUtils(){}
+
+KnowledgeUtils.getLocalIdValue = function()
+{
+    var id = vars.exists("$local.idvalues") && vars.get("$local.idvalues");
+    id = ( id && (typeof id == "object") && id.length == 1 ) ? id[0] : id;
+
+    return id;
+}
+
+KnowledgeUtils.isAcademy = function(pUser)
+{
+    let roles = tools.getRoles(pUser);
+    
+    for(let i = 0; i < roles.length; i++)
+    if(roles[i] == "PROJECT_Abt_Akademie")
+        return true;
+        
+    return false;
+}
+
+KnowledgeUtils.trimAndUp = function(pIn)
+{
+    return pIn.trim().toUpperCase();
+}
\ No newline at end of file
diff --git a/process/LeadQuickAcquisition_lib/LeadQuickAcquisition_lib.aod b/process/LeadQuickAcquisition_lib/LeadQuickAcquisition_lib.aod
index dd1aecc728e349ceced88023f48b3c214a33ca1b..2ac6bab47ac32ade4753eae8e051fe6d1e55b9f4 100644
--- a/process/LeadQuickAcquisition_lib/LeadQuickAcquisition_lib.aod
+++ b/process/LeadQuickAcquisition_lib/LeadQuickAcquisition_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>LeadQuickAcquisition_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/LeadQuickAcquisition_lib/process.js</process>
diff --git a/process/Leadimport_lib/Leadimport_lib.aod b/process/Leadimport_lib/Leadimport_lib.aod
index 2b0a6ccc76164c013c73ed247fdd212d3e8defb0..6426e09650258a2fbb87212c736d911eda3b40e4 100644
--- a/process/Leadimport_lib/Leadimport_lib.aod
+++ b/process/Leadimport_lib/Leadimport_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Leadimport_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Leadimport_lib/process.js</process>
diff --git a/process/Leadimport_lib/process.js b/process/Leadimport_lib/process.js
index ea0f5c14c0b084b0ecca76fceee7841a1b247a04..de9d13b2c7bb525960c5503b3e20eb28d9f2190d 100644
--- a/process/Leadimport_lib/process.js
+++ b/process/Leadimport_lib/process.js
@@ -794,7 +794,7 @@ LeadImportUtils.getLeadAttr = function(pImportDefID)
                     .from("AB_ATTRIBUTERELATION")
                     .join("AB_ATTRIBUTEUSAGE", "AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID")
                     .where("AB_ATTRIBUTERELATION.OBJECT_ROWID", pImportDefID)
-                    .and("AB_ATTRIBUTERELATION.OBJECT_TYPE = 'Leadimport'")
+                    .and("AB_ATTRIBUTERELATION.OBJECT_TYPE", "Leadimport")
                     .table()
     };
 }
diff --git a/process/Liquibase_lib/Liquibase_lib.aod b/process/Liquibase_lib/Liquibase_lib.aod
index 5fc68808e15f30333eeb59291fa318d56e028ac1..31fe997666b305a5ae1f926f766e79a14160fae0 100644
--- a/process/Liquibase_lib/Liquibase_lib.aod
+++ b/process/Liquibase_lib/Liquibase_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Liquibase_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Liquibase_lib/process.js</process>
diff --git a/process/Liquibase_lib/process.js b/process/Liquibase_lib/process.js
index 65cfed3485bd752f8321603ffde1ad9b411c99ac..e673139131bf77a542021c1aa60cf1a96aadd06a 100644
--- a/process/Liquibase_lib/process.js
+++ b/process/Liquibase_lib/process.js
@@ -148,7 +148,7 @@ LiquiUtils._getDataXml = function(pAuthor, pLobPath, pTableName, pColumns, pCond
     var changesetId;
     if (pGenerateChangeSetIdFromArguments)
     {
-        changesetId = Array.prototype.slice.call(arguments);//todo: use Array.from instead when supported (>= rhino 1.7.11) (#1038664)
+        changesetId = Array.from(arguments);
         changesetId = changesetId.reduce(function (accumulator, currentValue){
             return (currentValue !== null && currentValue !== undefined ? accumulator + JSON.stringify(currentValue) : accumulator);
         }, "");
diff --git a/process/Location_lib/Location_lib.aod b/process/Location_lib/Location_lib.aod
index 1a9a229f653f16af767f0c6193958ec831ea120c..812115767215451b35b717b2f7f88a8ff712ece7 100644
--- a/process/Location_lib/Location_lib.aod
+++ b/process/Location_lib/Location_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Location_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Location_lib/process.js</process>
diff --git a/process/Loghistory_lib/Loghistory_lib.aod b/process/Loghistory_lib/Loghistory_lib.aod
index 454f37cd2f2f3108e77c6eb547d95229067e1eca..bcbd876cc0fc2aa81d819bc2f8903ce6210b7eb2 100644
--- a/process/Loghistory_lib/Loghistory_lib.aod
+++ b/process/Loghistory_lib/Loghistory_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Loghistory_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Loghistory_lib/process.js</process>
diff --git a/process/Loghistory_lib/process.js b/process/Loghistory_lib/process.js
index 00ee5d28afd329d981a2d69ae461414c16e55134..c3cc279cd0ce02be2e2a65f83d13c5f9a7445c05 100644
--- a/process/Loghistory_lib/process.js
+++ b/process/Loghistory_lib/process.js
@@ -252,11 +252,10 @@ LogHistoryExecutor.prototype._addEntryForInsert = function (pTablename, pTablena
             statements: []
             ,cols: ["LOGTYPE","TABLENAME","TABLENAMEID","DESCRIPTION", "SOURCE_TABLENAME", "SOURCE_TABLENAMEID", "DATE_NEW","USER_NEW", "AB_LOGHISTORYID"]
         };
-        this.toInsert.types = db.getColumnTypes("AB_LOGHISTORY", this.toInsert.cols);//load only once for better performance
     }
 
     var vals = [this.sqlAction, pTablename, pTablenameId, pDescription, pSourceTablename, pSourceTablenameId, this.timestamp, this.triggeringUser, util.getNewUUID()];
-    this.toInsert.statements.push(["AB_LOGHISTORY", this.toInsert.cols, this.toInsert.types, vals]);
+    this.toInsert.statements.push(["AB_LOGHISTORY", this.toInsert.cols, null, vals]);
 };
 
 /*
diff --git a/process/SqlLib_tests/SqlLib_tests.aod b/process/MSTeams_lib/MSTeams_lib.aod
similarity index 64%
rename from process/SqlLib_tests/SqlLib_tests.aod
rename to process/MSTeams_lib/MSTeams_lib.aod
index 9f2866f8f91251c708400d6998ee92c248385334..8572851b599c49dd3565445c8acb5f2a5e7bc7b9 100644
--- a/process/SqlLib_tests/SqlLib_tests.aod
+++ b/process/MSTeams_lib/MSTeams_lib.aod
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
-  <name>SqlLib_tests</name>
+<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>MSTeams_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
-  <process>%aditoprj%/process/SqlLib_tests/process.js</process>
+  <process>%aditoprj%/process/MSTeams_lib/process.js</process>
   <alias>Data_alias</alias>
   <variants>
     <element>LIBRARY</element>
diff --git a/process/MSTeams_lib/process.js b/process/MSTeams_lib/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..98728cf49abc577ec16ae328b5fe1aec3c980ef2
--- /dev/null
+++ b/process/MSTeams_lib/process.js
@@ -0,0 +1,339 @@
+import("system.logging");
+import("system.neon");
+import("Util_lib");
+import("Communication_lib");
+import("system.translate");
+import("system.tools");
+import("Sql_lib");
+import("system.teams");
+import("system.project");
+
+/**
+ * Provides static functions for working with the MS-Teams integration
+ */
+function MSTeamsUtils () {}
+
+/**
+ * Checks if the MS Teams integration is enabled in the instance config
+ * 
+ * @return {Boolean} if Teams is enabled
+ */
+MSTeamsUtils.isTeamsEnabled = function ()
+{
+    return Utils.toBoolean(project.getInstanceConfigValue("teamsEnabled", "false"));
+}
+
+MSTeamsUtils.getImpersoAzureId = function ()
+{
+    return project.getInstanceConfigValue("teamsImpersoAzureId", "");
+}
+
+/**
+ * Contains the configuration for the possible contexts that can be used for teamLinks.
+ * 
+ * @return {Object} object with the context-names as keys and configuration-objects as values
+ */
+MSTeamsUtils.getTeamLinkContexts = function ()
+{
+    return {
+        "Salesproject": {singleLinkPerObject: true}
+    };
+}
+
+/**
+ * Opens a context for changing the linked team of the given object. This function also checks the configuration from
+ * MSTeamsUtils.getTeamLinkContexts to make sure the created teamLink is allowed
+ * 
+ * @param {String} pRowId       uid of the linked object
+ * @param {String} pObjectType  context of the linked object
+ */
+MSTeamsUtils.changeTeamsLink = function (pRowId, pObjectType)
+{
+    var linkConfig = MSTeamsUtils.getTeamLinkContexts()[pObjectType];
+    if (!linkConfig)
+        return;
+    
+    var existingTeamLinks = newSelect("MST_TEAMLINKID")
+        .from("MST_TEAMLINK")
+        .where("MST_TEAMLINK.OBJECT_ROWID", pRowId)
+        .and("MST_TEAMLINK.OBJECT_TYPE", pObjectType)
+        .arrayColumn();
+    var params = {
+        "ObjectRowId_param": pRowId,
+        "ObjectType_param": pObjectType
+    };
+    if (existingTeamLinks.length === 0 || !linkConfig.singleLinkPerObject)
+        neon.openContext("MSTTeamLink", null, null, neon.OPERATINGSTATE_NEW, params);
+    else
+        neon.openContext("MSTTeamLink", null, [existingTeamLinks[0]], neon.OPERATINGSTATE_EDIT, params);
+}
+
+/**
+ * Removes all teamLinks of the given object that are invalid.
+ * 
+ * @param {String} pRowId               uid of the linked object
+ * @param {String} pObjectType          context of the linked object
+ * @param {String} [pTeamLinkIdToKeep]  Only applies to contexts with 'singleLinkPerObject: true', if there are more than one teamLink, every
+ *                                      teamLink except one will be deleted. This param controls which one shouldn't be deleted.
+ */
+MSTeamsUtils.purgeCorruptTeamLinks = function (pRowId, pObjectType, pTeamLinkIdToKeep)
+{
+    var teamLinks = MSTeamsUtils.getLinkedTeams(pRowId, pObjectType).map(function (row)
+    {
+        return row.teamLinkId;
+    });
+    var linkConfig = MSTeamsUtils.getTeamLinkContexts()[pObjectType];
+    var removeLinks = [];
+    if (!linkConfig)
+        removeLinks = teamLinks;
+    else if (linkConfig.singleLinkPerObject && pTeamLinkIdToKeep)
+        removeLinks = teamLinks.filter(function (id) {return id != pTeamLinkIdToKeep;});
+    else if (linkConfig.singleLinkPerObject)
+        removeLinks = teamLinks.slice(1);
+    
+    if (removeLinks.length === 0)
+        return 0;
+    return newWhere("MST_TEAMLINK.MST_TEAMLINKID", removeLinks, SqlBuilder.IN()).deleteData();
+}
+
+/**
+ * Saves the given team in the database if it is not already present.
+ * 
+ * @param {Object} pTeam    An object containing the data of the team. Required properties:
+ *                          <ul>
+ *                              <li>teamId</li>
+ *                              <li>teamName</li>
+ *                          </ul>
+ *                          Optional properties (will be loaded automatically if not given):
+ *                          <ul>
+ *                              <li>generalChannelId</li>
+ *                              <li>webUrl</li>
+ *                          </ul>
+ * @return {Boolean} true if the team was inserted, false if it already exists
+ */
+MSTeamsUtils.insertTeamIfMissing = function (pTeam)
+{
+    var existsTeam = newSelect("count(*)")
+        .from("MST_TEAM")
+        .where("MST_TEAM.MST_TEAMID", pTeam.teamId)
+        .cell() > 0;
+    if (existsTeam)
+        return false;
+    
+    new SqlBuilder().insertFields({
+        "MST_TEAMID": pTeam.teamId,
+        "TEAMNAME": pTeam.teamName,
+        "GENERAL_CHANNELID": pTeam.generalChannelId || teams.getGeneralChannelId(pTeam.teamId),
+        "IS_ARCHIVED": 0,
+        "WEB_URL": pTeam.webUrl || teams.getWebUrl(pTeam.teamId)
+    }, "MST_TEAM");
+    
+    return true;
+}
+
+/**
+ * Creates a new teamLink.
+ * 
+ * @param {String} pTeamId      id of the team
+ * @param {String} pRowId       uid of the linked object
+ * @param {String} pObjectType  context of the linked object
+ */
+MSTeamsUtils.createTeamLink = function (pTeamId, pRowId, pObjectType)
+{
+    var currentTeamLink;
+    var contextConfig = MSTeamsUtils.getTeamLinkContexts()[pObjectType];
+    if (!contextConfig)
+        return;
+    
+    //if singleLinkPerObject is true, only one team link can be created for the given objectRowId
+    if (contextConfig.singleLinkPerObject)
+    {
+        currentTeamLink = MSTeamsUtils.getLinkedTeam(pRowId, pObjectType);
+    }
+    if (currentTeamLink)
+    {
+        newWhere("MST_TEAMLINK.MST_TEAMLINKID", currentTeamLink.teamLinkId).updateFields({
+            "MST_TEAM_ID": pTeamId
+        });
+    }
+    else
+    {
+        new SqlBuilder().insertFields({
+            "MST_TEAM_ID": pTeamId,
+            "OBJECT_ROWID": pRowId,
+            "OBJECT_TYPE": pObjectType
+        }, "MST_TEAMLINK", "MST_TEAMLINKID");
+    }
+}
+
+/**
+ * Gets all linked teams of an object
+ * 
+ * @param {String} pRowId       uid of the linked object
+ * @param {String} pObjectType  context of the linked object
+ * @return {Object[]} array of {teamLinkId, teamId}
+ */
+MSTeamsUtils.getLinkedTeams = function (pRowId, pObjectType)
+{
+    return newSelect(["MST_TEAMLINKID", "MST_TEAM_ID"])
+        .from("MST_TEAMLINK")
+        .where("MST_TEAMLINK.OBJECT_ROWID", pRowId)
+        .andIfSet("MST_TEAMLINK.OBJECT_TYPE", pObjectType)
+        .orderBy("MST_TEAMLINKID")
+        .table()
+        .map(function ([linkId, teamId])
+        {
+            return {
+                teamLinkId: linkId,
+                teamId: teamId
+            };
+        });
+    
+}
+
+/**
+ * Gets the linked team of an object
+ * 
+ * @param {String} pRowId       uid of the linked object
+ * @param {String} pObjectType  context of the linked object
+ * @return {String} id of the linked team, or null if ther is none
+ */
+MSTeamsUtils.getLinkedTeam = function (pRowId, pObjectType)
+{
+    var linkedTeams = MSTeamsUtils.getLinkedTeams(pRowId, pObjectType);
+    if (linkedTeams.length === 0)
+        return null;
+    return linkedTeams[0].teamId;
+}
+
+/**
+ * Loads the contactIds associated with the given azureIds
+ * 
+ * @param {String[]} pAzureIds      azureIds of the users
+ * @return {Object} object with the azureIds as keys and the corresponding contactIds as values
+ */
+MSTeamsUtils.getContactIdsByAzureIds = function (pAzureIds)
+{
+    if (pAzureIds.length === 0)
+        return {};
+    
+    var teamsUsers = tools.getUsersByAttribute(tools.TEAMS_AZUREID, pAzureIds);
+    var contactIdMap = {};
+    teamsUsers.forEach(function (user)
+    {
+        var azureId = user[tools.PARAMS][tools.TEAMS_AZUREID];
+        contactIdMap[azureId] = user[tools.PARAMS][tools.CONTACTID];
+    });
+    return contactIdMap;
+}
+
+/**
+ * Generates a sql expression to resolve the roles in a team for the contacts
+ * 
+ * @param {String} pTeamId          id of the team
+ * @param {String} pContactIdField  sql field that contains the contactId that is used for selecting the role
+ * @return {String} sql expression
+ */
+MSTeamsUtils.getTeamRoleSubSql = function (pTeamId, pContactIdField)
+{
+    if (!pTeamId)
+        return "''";
+    
+    try {
+        var ownerIds = Object.keys(teams.getAllOwners(pTeamId));
+        var ownerContactIds = MSTeamsUtils.getContactIdsByAzureIds(ownerIds);
+        ownerContactIds = Utils.objectValues(ownerContactIds);
+
+        var members = teams.getAllMembers(pTeamId);
+        var memberIds = Object.keys(members);
+        var memberContactIds = MSTeamsUtils.getContactIdsByAzureIds(memberIds);
+        memberContactIds = Utils.objectValues(memberContactIds);
+    } 
+    catch (err)
+    {
+        logging.log(err, logging.ERROR);
+        return "''";
+    }
+    
+    if (ownerContactIds.length === 0 && memberContactIds.length === 0)
+        return "''";
+    
+    var caseWhen = SqlBuilder.caseStatement();
+    if (ownerContactIds.length !== 0)
+        caseWhen.when(pContactIdField, ownerContactIds, SqlBuilder.IN()).thenString(translate.text("Owner"));
+    if (memberContactIds.length !== 0)
+        caseWhen.when(pContactIdField, memberContactIds, SqlBuilder.IN()).thenString(translate.text("Member"));
+    
+    //the SqlBuilder.IN() can't be used here because of the sub-sql string for the email
+    caseWhen.when("(" + CommUtil.getStandardSubSqlMail() + ") in ('" + Utils.objectValues(members).join("', '") + "')")
+        .thenString(translate.text("Guest")); 
+    
+    return caseWhen.elseString("").toString();
+}
+
+/**
+ * Checks if the user is an owner of the team
+ * 
+ * @param {String} pTeamId                  the id of the team
+ * @param {String} [pUserId=current user]   the userId of the user
+ * @return {Boolean} true if the user is an owner
+ */
+MSTeamsUtils.isUserTeamOwner = function (pTeamId, pUserId)
+{
+    var user;
+    if (!pUserId)
+        user = tools.getCurrentUser();
+    else
+        user = tools.getUserByAttribute(tools.NAME, pUserId);
+    
+    var azureId = user ? user[tools.PARAMS][tools.TEAMS_AZUREID] : null;
+    if (!azureId)
+        return false;
+    return azureId in teams.getAllOwners(pTeamId);
+}
+
+/**
+ * Loads the properties of the team from the database.
+ * 
+ * @param {String} pTeamId      the id of the team
+ * @return {Object} Object with these properties:
+ *  <ul>
+ *      <li>teamName</li>
+ *      <li>webUrl</li>
+ *      <li>serviceUrl</li>
+ *      <li>isArchived</li>
+ *      <li>generalChannelId</li>
+ *  </ul>
+ *  If the team was not found, null is returned.
+ */
+MSTeamsUtils.getTeamInfo = function (pTeamId)
+{
+    var teamInfo = new SqlBuilder("Data_alias")
+        .select(["TEAMNAME", "WEB_URL", "SERVICE_URL", "IS_ARCHIVED", "GENERAL_CHANNELID"])
+        .from("MST_TEAM")
+        .whereIfSet("MST_TEAM.MST_TEAMID", pTeamId)
+        .arrayRow(true);
+    
+    if (teamInfo.length === 0)
+        return null;
+    
+    return {
+        teamName: teamInfo[0],
+        webUrl: teamInfo[1],
+        serviceUrl: teamInfo[2],
+        isArchived: Utils.toBoolean(teamInfo[3]),
+        generalChannelId: teamInfo[4]
+    };
+}
+
+/**
+ * Checks if the team is active
+ * 
+ * @param {String} pTeamId      the id of the team
+ * @return {Boolean} true, if the team exists and is not archived
+ */
+MSTeamsUtils.isTeamActive = function (pTeamId)
+{
+    var teamInfo = MSTeamsUtils.getTeamInfo(pTeamId);
+    return teamInfo != null && !teamInfo.isArchived;
+}
\ No newline at end of file
diff --git a/process/MimeType_lib/MimeType_lib.aod b/process/MimeType_lib/MimeType_lib.aod
index 01ad226f611bd45cacf2aca4b7ad0649a439afea..dbc01a017d0133e40fe7301c12108f02e232ccf2 100644
--- a/process/MimeType_lib/MimeType_lib.aod
+++ b/process/MimeType_lib/MimeType_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>MimeType_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/MimeType_lib/process.js</process>
diff --git a/process/Money_lib/Money_lib.aod b/process/Money_lib/Money_lib.aod
index 9c27e1c6debbf49bc099056bddd3fe16f4243480..5232420c51a99d8a74ec92dfb5667b5f564993dc 100644
--- a/process/Money_lib/Money_lib.aod
+++ b/process/Money_lib/Money_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Money_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Money_lib/process.js</process>
diff --git a/process/Neon_lib/Neon_lib.aod b/process/Neon_lib/Neon_lib.aod
index ace4a1e8ec19c194c1d9e00326013f3656cd35b4..0a51cffca155b7298f9f83a18d71bfca25884031 100644
--- a/process/Neon_lib/Neon_lib.aod
+++ b/process/Neon_lib/Neon_lib.aod
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Neon_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/process/Neon_lib/documentation.adoc</documentation>
   <process>%aditoprj%/process/Neon_lib/process.js</process>
   <variants>
     <element>LIBRARY</element>
diff --git a/others/guide/how to copy objects with subitems.adoc b/process/Neon_lib/documentation.adoc
similarity index 100%
rename from others/guide/how to copy objects with subitems.adoc
rename to process/Neon_lib/documentation.adoc
diff --git a/process/Neon_lib/process.js b/process/Neon_lib/process.js
index b758e7db586995f24a7a3051427e610e5e053b7f..4d7d910d5d98598a85aec882756dd42d87cc0693 100644
--- a/process/Neon_lib/process.js
+++ b/process/Neon_lib/process.js
@@ -177,12 +177,11 @@ CopyModuleUtils.copyModule = function(pInputMapping)
 
             var ModuleColumnsStructure = AliasDefinitionStructure.tables[pModule].columns;
             var cols = Object.keys(ModuleColumnsStructure);
-
-            var condition = "1=1";
+            var dataQuery = newSelect(cols).from(pModule);
             if(pCondition != undefined)
-                condition = pCondition;
+                dataQuery.where(pCondition)
 
-            var dbData = newSelect(cols).from(pModule).where(condition).table();
+            var dbData = dataQuery.table();
 
             //map 2d-Array to Object { $rowNumber$: { $columnName$: { value: "valueInDB" } } }
             var DataObj = {};
@@ -304,23 +303,15 @@ CopyModuleUtils.copyModule = function(pInputMapping)
                 }
                 break;
                 case "OFFERLINK":
-                {
-
-                    }
                 default:
                 {
 
-                    }
-
-
+                }
             }
 
             return ModuleRowMapping;
         }
 
-
-
-
         function _columnMapping(pNewValue, pOldValue, pDestinationColumn)
         {
             return {
@@ -329,7 +320,6 @@ CopyModuleUtils.copyModule = function(pInputMapping)
                 destinationColumn: pDestinationColumn
             };
         }
-
     }
 
     /**
@@ -356,33 +346,26 @@ CopyModuleUtils.copyModule = function(pInputMapping)
 
             for(var subModule in pMapping.SubModules)
             {
-
                 for(var row in pMapping.SubModules[subModule].DataRows)
                 {
                     statements.push(_statement(pMapping.SubModules[subModule].DataRows[row]));
                 }
-
                 _subordinatedStatements(pMapping.SubModules[subModule]);
             }
-
         }
 
         function _statement(pRowMapping)
         {
-            var cols = [];
-            var vals = [];
+            var fieldValues = new Map();
             var destTable = pRowMapping.ModuleMapping.destinationModuleName;
             var colMapping = pRowMapping.ColumnMapping;
 
-            for(var col in colMapping)
+            for (let col in colMapping)
             {
-                cols.push(colMapping[col].destinationColumn);
-                vals.push(colMapping[col].newValue.toString());
+                fieldValues.set(colMapping[col].destinationColumn, colMapping[col].newValue)
             }
 
-            var colTypes = db.getColumnTypes(destTable, cols)//load once for better performance
-
-            return [destTable, cols, colTypes, vals];
+            return new SqlBuilder().buildInsertStatement(fieldValues, destTable);
         }
     }
 }
diff --git a/process/NewsSystem_lib/NewsSystem_lib.aod b/process/NewsSystem_lib/NewsSystem_lib.aod
new file mode 100644
index 0000000000000000000000000000000000000000..8c226c330e0ee283d37c6ea4421bc4e6a12d0b02
--- /dev/null
+++ b/process/NewsSystem_lib/NewsSystem_lib.aod
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
+  <name>NewsSystem_lib</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/NewsSystem_lib/process.js</process>
+  <variants>
+    <element>LIBRARY</element>
+  </variants>
+</process>
diff --git a/process/NewsSystem_lib/process.js b/process/NewsSystem_lib/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..08af9ed2029b68510491acd2341584bd452e5703
--- /dev/null
+++ b/process/NewsSystem_lib/process.js
@@ -0,0 +1,91 @@
+import("Sql_lib");
+import("system.vars");
+import("system.util");
+import("KnowledgeManagement_lib");
+import("system.entities");
+import("system.text");
+import("system.notification");
+import("system.tools");
+
+function NewsSystem() {}
+
+/*
+ * Returns the selected users with the given role/s.
+ * 
+ * @param {Array} roleArray req roles, that need to are selected.
+ * 
+ * @return {Array} User internal name of user model.
+ */
+NewsSystem.getUsersWithRoles = function(roleArray) 
+{
+    var users = tools.getUsers(tools.getUsersWithAnyRole(roleArray), tools.PROFILE_FULL);
+    var arr = [];
+    
+    for(var i = 0; i < users.length; i++)
+    {
+        arr.push(users[i][tools.NAME]);
+    }
+    
+    return arr;
+}
+
+/*
+ * Creates a news notification for the selected users.
+ * 
+ * @param {String} description req The description of the news.
+ * @param {String} caption req The title of the news.
+ * @param {Array} users req Selected users.
+ * @param {String} id req KnowledgemanagementID to connect the notification.
+ * 
+ * @return {void}
+ */
+NewsSystem.createNewsNotification = function(description, caption, users, id) 
+{
+    var config = notification.createConfig()
+    .notificationType("News")
+    .description(description)
+    .caption(caption)
+    .linkInfo(text.encodeMS(["KnowledgeManagement", id]))
+    .initialState(notification.STATE_UNSEEN)
+    .addUsersWithIds(users);
+    
+    notification.addNotificationWith(config);
+}
+
+/*
+ * Returns a sub-sql for the translated Roles.
+ * 
+ * @return {String} Returns a sub-sql for the translated Roles.
+ */
+NewsSystem.getDisplayValue = function() 
+{
+    var resultSet = SqlBuilder.caseStatement();
+    var allRolesObject = tools.getAllRoles();
+
+    for (let role in allRolesObject)
+    {
+        let currentRoleObject = allRolesObject[role];
+        resultSet.when("KNOWLEDGEROLES.ROLENAME", currentRoleObject[3]).thenString(currentRoleObject[0]);
+    }
+    
+    return resultSet.toString();
+}
+
+NewsSystem.setAsNews = function(pKnowledgeID, pNotification, pIsNews)
+{
+    if(pNotification) //check if the field "mark" is ticked
+    {
+        vars.set("$context.setNotificationMark", true); //set context variable true to trigger the afterOperatingState process
+    }
+
+    if(pIsNews) //check if the field "isNewsMark" is ticked
+    {
+        var knowledgeId = pKnowledgeID;
+        var data = {};  
+        data["TAG.value"] = "News";
+        
+        KnowledgeManagementTagsController
+        .getInstance(knowledgeId)
+        .addTag(util.getNewUUID(), data); //set the "news"-tag to the current data set
+    }
+}
diff --git a/process/Notification_lib/Notification_lib.aod b/process/Notification_lib/Notification_lib.aod
index 41cd1071d9d966bb2f65b117d6604310ee061511..28beacbb0d89e042930c765435f9356d30159cd6 100644
--- a/process/Notification_lib/Notification_lib.aod
+++ b/process/Notification_lib/Notification_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Notification_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Notification_lib/process.js</process>
diff --git a/process/ObjectRelationTypeRegistry_basic/ObjectRelationTypeRegistry_basic.aod b/process/ObjectRelationTypeRegistry_basic/ObjectRelationTypeRegistry_basic.aod
index fe86c4d1f97ec9f9611d761f65c14d51c27e3f02..65ad5b0b0b220dad46352ae8b2c3e5abb8f2a7f7 100644
--- a/process/ObjectRelationTypeRegistry_basic/ObjectRelationTypeRegistry_basic.aod
+++ b/process/ObjectRelationTypeRegistry_basic/ObjectRelationTypeRegistry_basic.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>ObjectRelationTypeRegistry_basic</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/ObjectRelationTypeRegistry_basic/process.js</process>
diff --git a/process/ObjectRelation_lib/ObjectRelation_lib.aod b/process/ObjectRelation_lib/ObjectRelation_lib.aod
index e5a4d95eb356b4bf2900d50e7b7a62ed22355697..b48e1daede58b2cf8d4d1abee0a5bc749e4088a8 100644
--- a/process/ObjectRelation_lib/ObjectRelation_lib.aod
+++ b/process/ObjectRelation_lib/ObjectRelation_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>ObjectRelation_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/ObjectRelation_lib/process.js</process>
diff --git a/process/ObjectRelation_lib/process.js b/process/ObjectRelation_lib/process.js
index 93063469bb275bf252eac8485933805cea091570..c99e2322413f0dda7eb287c8dfd033f048066895 100644
--- a/process/ObjectRelation_lib/process.js
+++ b/process/ObjectRelation_lib/process.js
@@ -37,6 +37,7 @@ ObjectRelationUtils.getPossibleRelationTypes = function(pObjectTypes, pFullInfo,
     // only id and title:
     if (pFullInfo)
     {
+        //!SqlBuilder
         fields = fields.concat([
             "main.RELATION_TYPE",
             "case when type2.AB_OBJECTRELATIONTYPEID is null then 'same' \n\
diff --git a/process/OfferOrder_lib/OfferOrder_lib.aod b/process/OfferOrder_lib/OfferOrder_lib.aod
index 0df9d9a624d014c6b4583935732acbdea2b2b99e..353cb8ca017b884d62b217dec8fb764c6d08b6f5 100644
--- a/process/OfferOrder_lib/OfferOrder_lib.aod
+++ b/process/OfferOrder_lib/OfferOrder_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>OfferOrder_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/OfferOrder_lib/process.js</process>
diff --git a/process/Offer_lib/Offer_lib.aod b/process/Offer_lib/Offer_lib.aod
index 41247d62423c487255eb9fe234106031fd8a1b6f..d1f79adeeb65335a2c2652db92555530fb3e2403 100644
--- a/process/Offer_lib/Offer_lib.aod
+++ b/process/Offer_lib/Offer_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Offer_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Offer_lib/process.js</process>
diff --git a/process/Offer_lib/process.js b/process/Offer_lib/process.js
index 7c9504fa26da75fa05ae7753f287070f922dd250..78ea329bfc0de71f18965d80cc03b82397687b0e 100644
--- a/process/Offer_lib/process.js
+++ b/process/Offer_lib/process.js
@@ -319,29 +319,24 @@ OfferUtils.openOfferReport = function (pOfferID)
  * opens an offer in NEW mode with values from an offer
  * 
  * @param {String} pOfferId of the offer
- * @param {String} pContactId
- * @param {String} pLanguage
- * @param {String} [pCurrency=""]
- * @param {String} [pHeader=""]
- * @param {String} [pFooter=""]
- * @param {String} [pDeliveryTerm=""]
- * @param {String} [pPaymentTerm=""]
- * @param {String} [pObjectType=""]
- * @param {String} [pRowId=""]
+ * @param {Object} [pOfferData={}] additional offer properties: 
+ *                      contactId, language, currency, header, footer, deliveryTerm, paymentTerm, objectType, objectRowId
  */
-OfferUtils.copyOffer = function (pOfferId, pContactId, pLanguage, pCurrency, pHeader, pFooter, pDeliveryTerm, pPaymentTerm, pObjectType, pRowId)
+OfferUtils.copyOffer = function (pOfferId, pOfferData)
 {
+    if (!pOfferData)
+        pOfferData = {};
     var params = {
-        "ContactId_param" : pContactId,
-        "OfferLanguage_param" : pLanguage,
-        "OfferOriginal_Id_param" : pOfferId,
-        "OfferCurrency_param" : pCurrency || "",
-        "OfferHeader_param" : pHeader || "",
-        "OfferFooter_param" : pFooter || "",
-        "OfferDeliveryTerm_param" : pDeliveryTerm || "",
-        "OfferPaymentTerm_param" : pPaymentTerm || "",
-        "ObjectType_param" : pObjectType || "",
-        "ObjectRowId_param" : pRowId || ""
+        "OfferOriginal_Id_param": pOfferId,
+        "ContactId_param": pOfferData.contactId,
+        "OfferLanguage_param": pOfferData.language,
+        "OfferCurrency_param": pOfferData.currency || "",
+        "OfferHeader_param": pOfferData.header || "",
+        "OfferFooter_param": pOfferData.footer || "",
+        "OfferDeliveryTerm_param": pOfferData.deliveryTerm || "",
+        "OfferPaymentTerm_param": pOfferData.paymentTerm || "",
+        "ObjectType_param": pOfferData.objectType || "",
+        "ObjectRowId_param": pOfferData.objectRowId || ""
     };
     neon.openContext("Offer", null, null, neon.OPERATINGSTATE_NEW, params);
 }
@@ -354,24 +349,26 @@ OfferUtils.copyOffer = function (pOfferId, pContactId, pLanguage, pCurrency, pHe
  */
 OfferUtils.copyOfferItems = function (pSourceOfferId, pTargetOfferId)
 {
-    var InputMapping = {
+    var inputMapping = {
         "OFFERITEM": {
-            condition: newWhereIfSet("OFFERITEM.OFFER_ID", pSourceOfferId).orderBy("ITEMSORT").toString(SqlBuilder.NORESULT_CONDITION(), true),
+            condition: newWhere("OFFERITEM.OFFER_ID", pSourceOfferId),
             ValueMapping: {
-                "OFFER_ID" : pTargetOfferId
+                "OFFER_ID": pTargetOfferId
             }
         }
     };
-    CopyModuleUtils.copyModule(InputMapping);
+    CopyModuleUtils.copyModule(inputMapping);
     
     var oiUtils = new OfferItemUtils(pTargetOfferId);
     
     //update order price
-    cols = ["NET", "VAT"];
-    var vals = oiUtils.getNetAndVat();
+    var [netPrice, vat] = oiUtils.getNetAndVat();
     
     newWhere("OFFER.OFFERID", pTargetOfferId)
-        .updateData(true, "OFFER", cols, null, vals);
+        .updateFields({
+            "NET": netPrice,
+            "VAT": vat
+        });
 }
 
 /**
@@ -502,7 +499,7 @@ OfferItemUtils.prototype.insertPartsList = function(pProductId, pAssignedTo, pCu
                             "( " + newSelect("DESCRIPTION")
                                 .from("DESCRIPTIONTRANSLATION")
                                 .where("DESCRIPTIONTRANSLATION.OBJECT_ROWID = PRODUCT.PRODUCTID")
-                                .and("DESCRIPTIONTRANSLATION.OBJECT_TYPE = 'Product'")
+                                .and("DESCRIPTIONTRANSLATION.OBJECT_TYPE", "Product")
                                 .and("DESCRIPTIONTRANSLATION.LANG", pLanguage)
                                 .toString() + ")"]]]]);
                                   
diff --git a/process/Order_lib/Order_lib.aod b/process/Order_lib/Order_lib.aod
index 3e225851b15f65e8d77e15182de060a04aee4878..5f4e4c315b81d7aad9b321298486d9d4591e66ac 100644
--- a/process/Order_lib/Order_lib.aod
+++ b/process/Order_lib/Order_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Order_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Order_lib/process.js</process>
diff --git a/process/Order_lib/process.js b/process/Order_lib/process.js
index d6938458c59687ef679f1d437661ec456e01f2e8..74651b5982c20b9ef43762491a29380d7dea1902 100644
--- a/process/Order_lib/process.js
+++ b/process/Order_lib/process.js
@@ -97,32 +97,42 @@ OrderUtils.createNewOrder = function(pContextId, pRowId, pRelationId)
     neon.openContext("Order", null, null, neon.OPERATINGSTATE_NEW, params);
 }
 
-OrderUtils.copyOrder = function (pSourceOfferId, pContactId, pOrderType, pLanguage, pCurrency, pHeader, pFooter, pDeliveryTerm, pPaymentTerm, pPaymentAddress, pDeliveryAddress, pObjectType, pRowId, pDunningDate, pDunningLevel, pCancellation, pOrderStatus)
+/**
+ * Opens a new Order copy
+ * 
+ * @param {String} pSourceOrderId id of the source order
+ * @param {Object} [pOrderData] the field values to preset, possible properties: contactId, orderType, language, offerId, currency, 
+ *      header, footer, deliveryTerm, paymentTerm, paymentAddress, deliveryAddress, objectType, objectRowId, 
+ *      dunningDate, dunningLevel, cancellation, orderStatus
+ */
+OrderUtils.copyOrder = function (pSourceOrderId, pOrderData)
 {
-    
+    if (!pOrderData)
+        pOrderData = {};
     var fieldparams = {
-        "$field.CONTACT_ID" : pContactId,
-        "$field.ORDERTYPE" : pOrderType,
-        "$field.ISOLANGUAGE" : pLanguage,
-        "$field.OFFER_ID" : pSourceOfferId,
-        "$field.CURRENCY" : pCurrency || "",
-        "$field.HEADER" : pHeader || "",
-        "$field.FOOTER" : pFooter || "",
-        "$field.DELIVERYTERMS" : pDeliveryTerm || "",
-        "$field.PAYMENTTERMS" : pPaymentTerm || "",
-        "$field.PAYMENTADDRESS" : pPaymentAddress || "",
-        "$field.DELIVERYADDRESS" : pDeliveryAddress || "",
-        "$field.OBJECT_TYPE" : pObjectType || "",
-        "$field.OBJECT_ROWID" : pRowId || "",
-        "$field.DUNNINGDATE" : pDunningDate || "",
-        "$field.DUNNINGLEVEL" : pDunningLevel || "",
-        "$field.CANCELLATION" : pCancellation || "",
-        "$field.ORDERSTATUS" : pOrderStatus || ""
+        "$field.CONTACT_ID": pOrderData.contactId,
+        "$field.ORDERTYPE": pOrderData.orderType,
+        "$field.ISOLANGUAGE": pOrderData.language,
+        "$field.OFFER_ID": pOrderData.offerId,
+        "$field.CURRENCY": pOrderData.currency || "",
+        "$field.HEADER": pOrderData.header || "",
+        "$field.FOOTER": pOrderData.footer || "",
+        "$field.DELIVERYTERMS": pOrderData.deliveryTerm || "",
+        "$field.PAYMENTTERMS": pOrderData.paymentTerm || "",
+        "$field.PAYMENTADDRESS": pOrderData.paymentAddress || "",
+        "$field.DELIVERYADDRESS": pOrderData.deliveryAddress || "",
+        "$field.OBJECT_TYPE": pOrderData.objectType || "",
+        "$field.OBJECT_ROWID": pOrderData.objectRowId || "",
+        "$field.DUNNINGDATE": pOrderData.dunningDate || "",
+        "$field.DUNNINGLEVEL": pOrderData.dunningLevel || "",
+        "$field.CANCELLATION": pOrderData.cancellation || "",
+        "$field.ORDERSTATUS": pOrderData.orderStatus || ""
     };
     
-    var params = {};
-    params["Copy_param"] = JSON.stringify(fieldparams);
-    params["OfferId_param"] = pSourceOfferId;
+    var params = {
+        "Copy_param": JSON.stringify(fieldparams),
+        "SourceOrderId_param": pSourceOrderId
+    };
     
     neon.openContext("Order", null, null, neon.OPERATINGSTATE_NEW, params);
 }
@@ -174,6 +184,36 @@ OrderUtils.copyOfferItemsToOrder = function (pSourceOfferId, pOrderId)
         .updateData(true, "SALESORDER", cols, null, vals);
 }
 
+/**
+ * copies all orderItems and creates orderItems for an order
+ * 
+ * @param {String} pSourceOrderId the order to get the items from
+ * @param {String} pTargetOrderId the order to create the items for
+ */
+OrderUtils.copyOrderItems = function (pSourceOrderId, pTargetOrderId)
+{
+    var inputMapping = {
+        "SALESORDERITEM": {
+            condition: newWhere("SALESORDERITEM.SALESORDER_ID", pSourceOrderId),
+            ValueMapping: {
+                "SALESORDER_ID": pTargetOrderId
+            }
+        }
+    };
+    CopyModuleUtils.copyModule(inputMapping);
+    
+    var oiUtils = new OrderItemUtils(pTargetOrderId);
+    
+    //update order price
+    var [netValue, vat] = oiUtils.getNetAndVat();
+    
+    newWhere("SALESORDER.SALESORDERID", pTargetOrderId)
+        .updateFields({
+            "NET": netValue,
+            "VAT": vat
+        });
+}
+
 /**
  * Will build the order report for the given order.
  * 
@@ -343,7 +383,7 @@ OrderUtils.buildOrderReport = function (pOrderID)
         "SUMITEMSUM" : sumItemSum,
         "TOTAL" : text.formatDouble(total, "#,##0.00", true),
         "printDiscount" : printDiscount ? "1" : "0",
-        "Person" : db.cell(ContextUtils.getNameSql(vars.get("$field.OBJECT_TYPE"), vars.get("$field.OBJECT_ROWID")))
+        "Person" : ContextUtils.getTitleByContext(vars.get("$field.OBJECT_TYPE"), vars.get("$field.OBJECT_ROWID"))
     };
     
     
@@ -545,7 +585,8 @@ OrderUtils.buildReminderReport = function (pOrderID)
         "Ordernumber": translate.text("Order number",language),
         "Orderdate": translate.text("Order date",language),
         "Orderamount": translate.text("Order amount",language),
-        "Dunninglevel": translate.text("Dunning level",language)  
+        "Dunninglevel": translate.text("Dunning level",language),
+        "OutstandingAmount": translate.text("Outstanding Amount",language)
     };
     
     
diff --git a/process/Organisation_lib/Organisation_lib.aod b/process/Organisation_lib/Organisation_lib.aod
index 47bca652458c91d875f43aa22721999afeb471e7..1f0d01aabbddda8eb361bc70f337f423e640d513 100644
--- a/process/Organisation_lib/Organisation_lib.aod
+++ b/process/Organisation_lib/Organisation_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Organisation_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Organisation_lib/process.js</process>
diff --git a/process/Organisation_lib/process.js b/process/Organisation_lib/process.js
index 5532a6817dbac7d0f8a0e0a70dd26c7237f9725d..6a5b4e22bf0a04f89b6eb8b302a09ae76ec1b04f 100644
--- a/process/Organisation_lib/process.js
+++ b/process/Organisation_lib/process.js
@@ -236,3 +236,18 @@ OrgUtils.openOrgReport = function(pContactId)
 {
     neon.openContext("Organisation", "OrganisationReport_view", [pContactId], neon.OPERATINGSTATE_VIEW, null);
 }
+
+/**
+ * creates an subSql for resolving a org into one string of text
+ * useful for example in an displayValue-expression to resolave a references (which is chosen by Lookups)
+ * 
+ * @param {String} pRelationIdField fieldname for the CONTACTID-condition as TABLEALIAS.COLUMNALIAS;
+ * @return {String} a subsql (without bracets) that can be placed within an SQL
+ */
+OrgUtils.getResolvingDisplaySubSql = function(pRelationIdField)
+{
+    //TODO: verify if there is a better solution for the usage of this as a displayValueExpression --> automatic use of #TITLE | waiting for implementation
+    return newSelect("NAME").from("ORGANISATION")
+        .join("CONTACT", "ORGANISATIONID = ORGANISATION_ID")
+        .where("PERSON_ID is null").and("CONTACT.CONTACTID = "+ pRelationIdField).toString();
+}
diff --git a/process/PermissionCalendar_lib/PermissionCalendar_lib.aod b/process/PermissionCalendar_lib/PermissionCalendar_lib.aod
index 8f5c6970ce7e043c67c775b033e685acbb4ac8a8..1b2ab4f46514eb141579af4444ec1bbbcf7bd4f0 100644
--- a/process/PermissionCalendar_lib/PermissionCalendar_lib.aod
+++ b/process/PermissionCalendar_lib/PermissionCalendar_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>PermissionCalendar_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/PermissionCalendar_lib/process.js</process>
diff --git a/process/Permission_lib/Permission_lib.aod b/process/Permission_lib/Permission_lib.aod
index 00dceca975179d33311ba7f807e5800a2f748d98..642b9b00218b040d6b833530810f5439a0effc75 100644
--- a/process/Permission_lib/Permission_lib.aod
+++ b/process/Permission_lib/Permission_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Permission_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Permission_lib/process.js</process>
diff --git a/process/Permission_lib/process.js b/process/Permission_lib/process.js
index fcb7a7086c7058d276aea897d12d898781e1d61f..9a4b05adcacf8a765e7c19149128ec2e34ed7a90 100644
--- a/process/Permission_lib/process.js
+++ b/process/Permission_lib/process.js
@@ -704,6 +704,21 @@ function PermissionUtil () {}
         }
         return false;
     }
+    
+    /**
+     * Returns all child role ids and names of the given role.
+     * 
+     * @param {String} pRoleName parent role name, mandatory
+     * 
+     * @result {String[]} array with ids and names of child roles
+     */
+    PermissionUtil.getChildRoles = function(pRoleName) {
+        // hierarchies where pRoleName is parent
+        return newSelect("ID, CHILD_ROLE", alias)
+        .from("ASYS_ROLES_CHILDREN")
+        .where("ASYS_ROLES_CHILDREN.PARENT_ROLE", pRoleName)
+        .table();
+    }
 
     /**
      * Delete all links to child roles of pRoleName.
diff --git a/process/Person_lib/Person_lib.aod b/process/Person_lib/Person_lib.aod
index 04c0795c9a2fcb6fcdd7f580da9ffe3a2be374e9..80e4dc8248fca9713ea9c6419d8e9ff647956527 100644
--- a/process/Person_lib/Person_lib.aod
+++ b/process/Person_lib/Person_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Person_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Person_lib/process.js</process>
diff --git a/process/Placeholder_lib/Placeholder_lib.aod b/process/Placeholder_lib/Placeholder_lib.aod
index 1cc12d42bd4091664def57971f81d140c9dcc0e2..2af9f3a9ab189e4a59216d944a9d9703eb9880f6 100644
--- a/process/Placeholder_lib/Placeholder_lib.aod
+++ b/process/Placeholder_lib/Placeholder_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Placeholder_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Placeholder_lib/process.js</process>
diff --git a/process/Placeholder_lib/process.js b/process/Placeholder_lib/process.js
index 2c1cb9d8214a5b5ca9d0698a3d7dc14d345cdf64..a162fc7ee5d7514746718d5054fa10f7cb73df71 100644
--- a/process/Placeholder_lib/process.js
+++ b/process/Placeholder_lib/process.js
@@ -53,10 +53,10 @@ PlaceholderUtils.getPlaceholders = function (pLocale, pIsExportTemplateField)
     _addSqlPart("title", "PERSON.TITLE", null , translate.text("Title", locale));
     _addSqlPart("phone", CommUtil.getStandardSubSqlPhone(), null , translate.text("Phone", locale));
     _addSqlPart("email", CommUtil.getStandardSubSqlMail(), null , translate.text("Email", locale));
-    _addSqlPart("name", sqlUtil.concat(["SALUTATION", "TITLE", "FIRSTNAME", "LASTNAME"]), null , translate.text("Name", locale));
+    _addSqlPart("name", sqlUtil.concatWithSeparator(["SALUTATION", "TITLE", "FIRSTNAME", "LASTNAME"]), null , translate.text("Name", locale));
     _addSqlPart("senderPhone", CommUtil.getStandardSubSqlPhone(), Placeholder.targets.SENDER, null);
     _addSqlPart("senderEmail", CommUtil.getStandardSubSqlMail(), Placeholder.targets.SENDER, null);
-    _addSqlPart("senderName", sqlUtil.concat(["SALUTATION", "TITLE", "FIRSTNAME", "LASTNAME"]), Placeholder.targets.SENDER, null);
+    _addSqlPart("senderName", sqlUtil.concatWithSeparator(["SALUTATION", "TITLE", "FIRSTNAME", "LASTNAME"]), Placeholder.targets.SENDER, null);
     _addSqlPart("date", "'" + datetime.toDate(vars.get("sys.date"), translate.text("dd.MM.yyyy")) + "'", Placeholder.targets.SENDER, null);
     
     
diff --git a/process/PostalAddress_lib/PostalAddress_lib.aod b/process/PostalAddress_lib/PostalAddress_lib.aod
index f7af81f2c9b9cb3ab8b20c4faa523894b5df10f7..a07348310e4c97fb5da2bf3bdd9b86e56994aaed 100644
--- a/process/PostalAddress_lib/PostalAddress_lib.aod
+++ b/process/PostalAddress_lib/PostalAddress_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>PostalAddress_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/PostalAddress_lib/process.js</process>
diff --git a/process/PostalAddress_lib/process.js b/process/PostalAddress_lib/process.js
index b7cf917b59474c3ae70496de43be1554e4b28aea..996991dd07a980a6ba91ed1851171b0d2a8ce9f2 100644
--- a/process/PostalAddress_lib/process.js
+++ b/process/PostalAddress_lib/process.js
@@ -42,7 +42,7 @@ AddressUtils.formatOnelineSql = function ()
 {
     //request (and resulting change) was made here to NOT include Country int othe title
     var maskingHelper = new SqlMaskingUtils();
-        var sqlExpression = maskingHelper.concat(["ADDRESS.ADDRESS", "ADDRESS.BUILDINGNO", "'-'", "ADDRESS.COUNTRY", "ADDRESS.ZIP", "ADDRESS.CITY", "ADDRESS.ADDRIDENTIFIER"]);
+        var sqlExpression = maskingHelper.concatWithSeparator(["ADDRESS.ADDRESS", "ADDRESS.BUILDINGNO", "'-'", "ADDRESS.COUNTRY", "ADDRESS.ZIP", "ADDRESS.CITY", "ADDRESS.ADDRIDENTIFIER"]);
     return sqlExpression;
 };
 
diff --git a/process/Product_lib/Product_lib.aod b/process/Product_lib/Product_lib.aod
index 9c72fa0f0cdb72396fc83c73d54fadb87bcfd7ad..a1197452b9288cb8d7c3224f2e669f0d47505649 100644
--- a/process/Product_lib/Product_lib.aod
+++ b/process/Product_lib/Product_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Product_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Product_lib/process.js</process>
diff --git a/process/Proto_lib/Proto_lib.aod b/process/Proto_lib/Proto_lib.aod
index dd8841dc7aba84fa95c02f339956908458bb7307..ce167574ad6d6a97588312e3f6cbc5d0156933ae 100644
--- a/process/Proto_lib/Proto_lib.aod
+++ b/process/Proto_lib/Proto_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Proto_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Proto_lib/process.js</process>
diff --git a/process/RebuildAllDuplicateCaches_serverProcess/RebuildAllDuplicateCaches_serverProcess.aod b/process/RebuildAllDuplicateCaches_serverProcess/RebuildAllDuplicateCaches_serverProcess.aod
index 7d7d887aa097e608434cd4b22d55986a75d7f33b..11432054cc7356358ef25e9d7b657ca5973bba2f 100644
--- a/process/RebuildAllDuplicateCaches_serverProcess/RebuildAllDuplicateCaches_serverProcess.aod
+++ b/process/RebuildAllDuplicateCaches_serverProcess/RebuildAllDuplicateCaches_serverProcess.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>RebuildAllDuplicateCaches_serverProcess</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/RebuildAllDuplicateCaches_serverProcess/process.js</process>
diff --git a/process/RebuildDuplicatesCache_serverProcess/RebuildDuplicatesCache_serverProcess.aod b/process/RebuildDuplicatesCache_serverProcess/RebuildDuplicatesCache_serverProcess.aod
index 21d0559480699c819f719274c88863094991a05d..078550c7200171ccff2e26f2515a616016da481a 100644
--- a/process/RebuildDuplicatesCache_serverProcess/RebuildDuplicatesCache_serverProcess.aod
+++ b/process/RebuildDuplicatesCache_serverProcess/RebuildDuplicatesCache_serverProcess.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>RebuildDuplicatesCache_serverProcess</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/RebuildDuplicatesCache_serverProcess/process.js</process>
diff --git a/process/RemoveFromCampaign_workflowService/RemoveFromCampaign_workflowService.aod b/process/RemoveFromCampaign_workflowService/RemoveFromCampaign_workflowService.aod
new file mode 100644
index 0000000000000000000000000000000000000000..9a2e06c6e7128e5448ad661af163c5f1ff23986d
--- /dev/null
+++ b/process/RemoveFromCampaign_workflowService/RemoveFromCampaign_workflowService.aod
@@ -0,0 +1,12 @@
+<?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>RemoveFromCampaign_workflowService</name>
+  <title>Remove from Campaign</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/RemoveFromCampaign_workflowService/process.js</process>
+  <alias>Data_alias</alias>
+  <serviceTaskParameterProcess>%aditoprj%/process/RemoveFromCampaign_workflowService/serviceTaskParameterProcess.js</serviceTaskParameterProcess>
+  <variants>
+    <element>WORKFLOW</element>
+  </variants>
+</process>
diff --git a/process/RemoveFromCampaign_workflowService/process.js b/process/RemoveFromCampaign_workflowService/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..c7552ccfed53d9ef5f0f2b5a34540548e0ff4177
--- /dev/null
+++ b/process/RemoveFromCampaign_workflowService/process.js
@@ -0,0 +1,12 @@
+import("system.util");
+import("Sql_lib");
+import("system.vars");
+
+var variables = JSON.parse(vars.get("$local.value"));
+
+var contactId = variables.contactId || variables.targetId;
+var campaignId = variables.campaignId;
+
+newWhere("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", campaignId)
+    .and("CAMPAIGNPARTICIPANT.CONTACT_ID", contactId)
+    .deleteData();
\ No newline at end of file
diff --git a/process/RemoveFromCampaign_workflowService/serviceTaskParameterProcess.js b/process/RemoveFromCampaign_workflowService/serviceTaskParameterProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..cc949e7c1051a706a6f73fd1be401a450e17956c
--- /dev/null
+++ b/process/RemoveFromCampaign_workflowService/serviceTaskParameterProcess.js
@@ -0,0 +1,23 @@
+import("system.result");
+import("system.vars");
+import("Sql_lib");
+import("Workflow_lib");
+
+var currentValues = JSON.parse(vars.get("$local.value"));
+
+var campaigns = newSelect(["CAMPAIGNID", "NAME"])
+    .from("CAMPAIGN")
+    .table()
+    .map(function ([id, name])
+    {
+        return {
+            id: id,
+            name: name
+        };
+    });
+
+var parameters = [
+    new WorkflowServiceTaskParameter("campaignId", "Campaign", WorkflowServiceTaskParameter.ENUM(), campaigns)
+];
+
+result.object(parameters);
\ No newline at end of file
diff --git a/process/Report_lib/Report_lib.aod b/process/Report_lib/Report_lib.aod
index b847e04de6288a50fd822dffef554f45c285423f..a7caa94038945e9aa86704ab525dc5dc21b037e5 100644
--- a/process/Report_lib/Report_lib.aod
+++ b/process/Report_lib/Report_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Report_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Report_lib/process.js</process>
diff --git a/process/Salesproject_lib/Salesproject_lib.aod b/process/Salesproject_lib/Salesproject_lib.aod
index 06956e427082baea872c1f395aca9c5337032e42..32fb545354a53bee2209d60d4cdbf64074e24a55 100644
--- a/process/Salesproject_lib/Salesproject_lib.aod
+++ b/process/Salesproject_lib/Salesproject_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Salesproject_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Salesproject_lib/process.js</process>
diff --git a/process/Salesproject_lib/process.js b/process/Salesproject_lib/process.js
index 53974b0854233bf64338f7423e1ac1c2bb6f5e0d..c88cd30a425644445654b840b169eccb24206c30 100644
--- a/process/Salesproject_lib/process.js
+++ b/process/Salesproject_lib/process.js
@@ -1,3 +1,6 @@
+import("system.datetime");
+import("system.logging");
+import("KeywordData_lib");
 import("Sql_lib");
 import("system.neon");
 import("system.vars");
@@ -156,7 +159,10 @@ Salesproject.updateSalesprojectPhase = function(pSalesprojectId, pPhase)
  * 
  * @class
  */
-function SalesprojectConversionRate() {}
+function SalesprojectConversionRate() {
+    this.MILESTONES = {};
+    this.isGrouping = null;
+}
 
 /**
  * Returns the Mapping of the Fields and FilterExtention for the grouping 
@@ -177,11 +183,11 @@ SalesprojectConversionRate.groupMapping = function (pRightOneTables)
         }
     }
     
-    let dateStartYear = sqlHelper.yearFromDate("DATA.DATE_START");
-    let dateStartMonth = sqlHelper.monthFromDate("DATA.DATE_START");
+    let dateStartYear = sqlHelper.yearFromDate("SALESPROJECT_MILESTONE.DATE_START");
+    let dateStartMonth = sqlHelper.monthFromDate("SALESPROJECT_MILESTONE.DATE_START");
     
     return {
-        "AB_KEYWORD_ENTRYID_KEYID": ["DATA.KEYID", "DATA.TITLE", "DATA.SORTING"], 
+        "AB_KEYWORD_ENTRYID_KEYID": ["AB_KEYWORD_ENTRY.KEYID", "AB_KEYWORD_ENTRY.TITLE", "AB_KEYWORD_ENTRY.SORTING"], 
         "#EXTENSION.Year.Year#NUMBER" : [dateStartYear, dateStartYear, dateStartYear], 
         "#EXTENSION.Month.Month#NUMBER" : [dateStartMonth, dateStartMonth, dateStartMonth]
     }
@@ -249,4 +255,156 @@ SalesprojectConversionRate.filterMapping = function(pField, pIsAll, pTable)
     
 }
 
+/**
+ * Returns the Phases Keywordkeys
+ * 
+ * @return {Array} Phases Keywordkeys
+ */
+SalesprojectConversionRate.prototype.PHASE = function () {
+    return KeywordData.getSimpleData($KeywordRegistry.salesprojectPhase()).map(function (r) {
+        return r[0];
+    });
+}
 
+/**
+ * Add Milestones to the Phases of the given Grouping. 
+ * The Milestone is adding to the given and overlying Phases.
+ * 
+ * @param {String} [pSalesprojectID] the ID of the Salesproject
+ * @param {String} [pPhase] the phase of the milestone
+ * @param {String} [pGrouping] the grouping Field
+ */
+SalesprojectConversionRate.prototype.insertMilestone = function (pSalesprojectID, pPhase, pGrouping) {
+    let logDetail = ["SALESPROJECT_MILESTONEID: " + pSalesprojectID, "PHASE: " + pPhase, "GROUPING: " + pGrouping]
+    let indexPhase = this.PHASE().indexOf(pPhase)
+    if (indexPhase > -1) {
+        let tempPhases;
+        if (pGrouping)
+        {
+            if ((!this.isGrouping) && this.isGrouping != null){
+                logging.log(translate.text("The grouping is not active, but there is one given!"), logging.ERROR, logDetail);
+                return;
+            }
+            if (!this.MILESTONES[pGrouping])
+                this.MILESTONES[pGrouping] = {};
+            this.isGrouping = true;
+            tempPhases = this.MILESTONES[pGrouping];
+        }
+        else if (this.isGrouping && this.isGrouping != null)
+        {
+            logging.log(translate.text("The grouping is active, but there is no one given!"), logging.ERROR, logDetail);
+            return;
+        }
+        else 
+        {
+            tempPhases = this.MILESTONES;
+            this.isGrouping = false;
+        }
+                
+            
+        if (!tempPhases[pPhase])
+        {
+            tempPhases[pPhase] = {};
+            tempPhases[pPhase].size = 0;
+        } 
+            
+        if (!tempPhases[pPhase][pSalesprojectID])
+        {
+            tempPhases[pPhase][pSalesprojectID] = true;
+            tempPhases[pPhase].size++;
+        }
+            
+        if (indexPhase - 1 != -1)
+            this.insertMilestone(pSalesprojectID, this.PHASE()[indexPhase - 1], pGrouping);
+    }
+    else 
+    {
+        logging.log(translate.withArguments("The given Phase \"%0\" can not be found.", [pPhase]), logging.ERROR, logDetail);
+    }
+}
+
+/**
+ * Calculates the Conversion Rate for evry grouping field
+ * 
+ * @param {Array} [pFilter] the ids of the phases, which has to be filtered
+ * 
+ */
+SalesprojectConversionRate.prototype.getConversionRates = function (pFilter) {
+    if (this.isGrouping == null)
+        logging.log(translate.text("You have to use the insertMilestone Function before."), logging.ERROR);
+    else if (this.isGrouping)
+    {
+        let groupingResults = [];
+        Object.keys(this.MILESTONES).forEach(function (grouping) {
+            let count = 0;
+            let sum = 0.0;
+            let sumMilestones = 0;
+            this._getConversionRatesofPhases(this.MILESTONES[grouping], pFilter).forEach(function (phase) {
+                sum += phase[3];
+                sumMilestones += phase[0]
+                count++;
+            }, this);
+            if (sumMilestones != 0)
+                groupingResults.push(["" + sumMilestones, grouping, this._getTitleOfKey(grouping, true), (sum / count)])
+        }, this);
+        return groupingResults
+    }
+    else
+    {
+        return this._getConversionRatesofPhases(this.MILESTONES, pFilter);
+    }
+    return [];
+}
+
+/**
+ * Calculates the Conversion Rate for the phases
+ * 
+ * @param {Array} [pPhases] the phases of the current grouping
+ * @param {Array} [pFilter] the ids of the phases, which has to be filtered
+ * 
+ */
+SalesprojectConversionRate.prototype._getConversionRatesofPhases = function (pPhases, pFilter) {
+    let results = [];
+    this._addToResult(pPhases[this.PHASE()[0]].size, this.PHASE()[0], -1,  results, pFilter);
+    for (let i = 1; i < Object.keys(pPhases).length ;i++)
+    {
+        this._addToResult(pPhases[this.PHASE()[i]].size, this.PHASE()[i], pPhases[this.PHASE()[i-1]].size,  results, pFilter);
+    }
+    return results;
+}
+    
+/**
+ * Adds the Values to the result array
+ * 
+ * @param {Array} [pCount] the count of the phase
+ * @param {Array} [pId] the id of the phase
+ * @param {Array} [pPreCount] the count of the previous phase
+ * @param {Array} [pResult] the array into which the data will be added
+ * @param {Array} [pFilter] the ids of the phases, which has to be filtered
+ */
+SalesprojectConversionRate.prototype._addToResult = function (pCount, pId, pPreCount, pResult, pFilter){
+    if ((pFilter && pFilter.indexOf(pId)> -1) || !pFilter)
+        // COUNT, ID, TITLE, CONVERSION_RATE
+        pResult.push([this.isGrouping ? pCount : ("" + pCount), pId, this._getTitleOfKey(pId), pPreCount == -1 ? 0 : (pCount /pPreCount)]);
+}
+   
+/**
+ * gets the title of the key
+ * @param {Array} [pKey] the key, which has to translate
+ * @param {Array} [pIsGrouping] is this title of a grouping
+ */
+SalesprojectConversionRate.prototype._getTitleOfKey = function (pKey, pIsGrouping) {
+    if (pIsGrouping)
+    {
+        if (pKey <= 12)
+        {
+            // When convert the Number of the Month to the Month name it doesn't matter which Year is used, so here is the Year 2020 hard-coded.
+            let monthDate = new Date(2020, parseInt(pKey)-1);
+            return translate.text(datetime.toDate(monthDate.getTime(), "MMMM", "UTC"));
+        }
+    }
+    else
+        return KeywordUtils.getViewValue($KeywordRegistry.salesprojectPhase(),pKey);
+        
+    return pKey;
+}
diff --git a/process/SendEmail_workflowService/SendEmail_workflowService.aod b/process/SendEmail_workflowService/SendEmail_workflowService.aod
index d58abf463370007f75396e6fc71b93827fcfabd3..2dbab69e62effe7618abfdd14335a8de7fdc0c27 100644
--- a/process/SendEmail_workflowService/SendEmail_workflowService.aod
+++ b/process/SendEmail_workflowService/SendEmail_workflowService.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>SendEmail_workflowService</name>
   <title>Send email</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/process/SendEmail_workflowService/process.js b/process/SendEmail_workflowService/process.js
index 6ccbfe3e76006ca51544b503453320d416d35951..bdc3aab5db6de1f34a580ef8363a52707ba63617 100644
--- a/process/SendEmail_workflowService/process.js
+++ b/process/SendEmail_workflowService/process.js
@@ -10,19 +10,22 @@ import("Workflow_lib");
 
 var processInstanceId = vars.get("$local.uid");
 var variables = JSON.parse(vars.get("$local.value"));
-var recipientContactId = variables.recipientContactId;
+var recipientContactId = variables.recipientContactId || variables.targetId;
 var documentTemplateId = variables.documentTemplateId;
 var senderName = variables.senderName;
 var mailSubject = variables.mailSubject;
+var aditoUrl = variables.originUrl;
 
 var actionParams = Utils.clone(variables);
 actionParams.processInstanceId = processInstanceId;
-var linkPlaceholder = new Placeholder("workflowActionLink", Placeholder.types.CALLBACKFUNCTION, function ()
+var additionalPlaceholders = [];
+if (aditoUrl)
 {
-    return WorkflowLinkActions.getActionLink("https://localhost:8443", actionParams.linkActionType, actionParams.redirectLink, actionParams);
-});
+    var linkPlaceholder = WorkflowLinkActions.getActionLinkPlaceholder(actionParams.linkActionType, actionParams, actionParams.redirectLink, aditoUrl);
+    additionalPlaceholders.push(linkPlaceholder);
+}
 
-var email = Email.fromTemplate(documentTemplateId, recipientContactId, null, [linkPlaceholder]);
+var email = Email.fromTemplate(documentTemplateId, recipientContactId, null, additionalPlaceholders);
 email.subject = mailSubject;
 email.toRecipients = [CommUtil.getStandardMail(recipientContactId)];
 
diff --git a/process/SetAttribute_workflowService/SetAttribute_workflowService.aod b/process/SetAttribute_workflowService/SetAttribute_workflowService.aod
index 0816609206a36c0993b7f8a5eff2cfb94344662a..17c234d1ae4af84fa4575854505e42e53b478c81 100644
--- a/process/SetAttribute_workflowService/SetAttribute_workflowService.aod
+++ b/process/SetAttribute_workflowService/SetAttribute_workflowService.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>SetAttribute_workflowService</name>
   <title>Set attribute</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/process/SetAttribute_workflowService/process.js b/process/SetAttribute_workflowService/process.js
index c9f17d88c318b1f97b6efb9894f68cd20a161bf0..b79ef56f6446a63ed5ac20979272636f811580ba 100644
--- a/process/SetAttribute_workflowService/process.js
+++ b/process/SetAttribute_workflowService/process.js
@@ -1,3 +1,4 @@
+import("Util_lib");
 import("Sql_lib");
 import("Attribute_lib");
 import("system.result");
@@ -5,6 +6,7 @@ import("system.vars");
 
 var variables = JSON.parse(vars.get("$local.value"));
 
+var attributeValue = variables.attributeValue;
 var attributeId;
 if (variables.attributeName)
 {
@@ -16,4 +18,26 @@ if (variables.attributeName)
 else
     attributeId = variables.attributeId;
 
-new AttributeRelationQuery(variables.targetId, attributeId, variables.targetContext).insertAttribute(variables.attributeValue);
\ No newline at end of file
+//attributeValueVariable -> instance variable to use for the attribute value
+if (variables.attributeValueVariable)
+{
+    var attributeVal = variables[variables.attributeValueVariable];
+    if (attributeVal !== null && attributeVal !== undefined && attributeVal !== "")
+        attributeValue = attributeVal;
+}
+
+var attributeQuery = new AttributeRelationQuery(variables.attributeRowId || variables.targetId, attributeId, 
+    variables.attributeContext || variables.targetContext);
+
+if (variables.isUpdate)
+{
+    var currentAttribute = attributeQuery.getSingleAttribute();
+    if (!currentAttribute)
+        attributeQuery.insertAttribute(attributeValue, true);
+    else
+        currentAttribute.updateAttribute(attributeValue)
+}
+else
+{
+    attributeQuery.insertAttribute(attributeValue);
+}
\ No newline at end of file
diff --git a/process/SetAttribute_workflowService/serviceTaskParameterProcess.js b/process/SetAttribute_workflowService/serviceTaskParameterProcess.js
index 118269c0c1e6b7093e9e3923e44df5c9c5c10ac3..0e8f8d8d04235fa52184140ffe4b38ab04dae283 100644
--- a/process/SetAttribute_workflowService/serviceTaskParameterProcess.js
+++ b/process/SetAttribute_workflowService/serviceTaskParameterProcess.js
@@ -17,12 +17,13 @@ var currentValues = JSON.parse(vars.get("$local.value"));
 var allAttributes = newSelect("AB_ATTRIBUTEID, ATTRIBUTE_PARENT_ID, ATTRIBUTE_NAME, ATTRIBUTE_TYPE, ATTRIBUTE_ACTIVE")
     .from("AB_ATTRIBUTE")
     .where("AB_ATTRIBUTE.ATTRIBUTE_TYPE", AttributeTypes.OBJECTSELECTION(), SqlBuilder.NOT_EQUAL()) //these can't work yet
+    .orderBy(["ATTRIBUTE_PARENT_ID", "SORTING", "ATTRIBUTE_NAME"])
     .table();
-var attributeNameMap = {};
+var attributeNameMap = new Map();
 var attributes = [];
 allAttributes.forEach(function ([attributeId, parentId, attributeName, attributeType, isActive])
 {
-    attributeNameMap[attributeId] = [translate.text(attributeName), parentId];
+    attributeNameMap.set(attributeId, [translate.text(attributeName), parentId]);
     if (isActive == "1" && attributeType != AttributeTypes.GROUP() && attributeType != AttributeTypes.COMBOVALUE())
         attributes.push(attributeId);
 });
@@ -31,19 +32,22 @@ attributes = attributes.map(function (attributeId)
     var parentId = attributeId;
     var fullName = "";
     //the loop will stop if an id comes up twice, because otherwise that could cause an infinite loop if the data is faulty
-    var alreadyEncountered = {}; 
-    while (parentId && attributeNameMap[parentId] && !alreadyEncountered[parentId])
+    var alreadyEncountered = new Set(); 
+    while (parentId && attributeNameMap.has(parentId) && !alreadyEncountered.has(parentId))
     {
-        var [currentName, currentParent] = attributeNameMap[parentId];
+        var [currentName, currentParent] = attributeNameMap.get(parentId);
         if (!fullName)
             fullName = currentName;
         else
             fullName = currentName + " / " + fullName;
-        alreadyEncountered[parentId] = true;
+        alreadyEncountered.add(parentId);
         parentId = currentParent;
     }
 
-    return {id : attributeId, name : fullName};
+    return {
+        id: attributeId, 
+        name: fullName
+    };
 });
 
 var parameters = [
@@ -74,4 +78,7 @@ if (currentValues.attributeId && currentValues.attributeId.value)
         parameters.push(new WorkflowServiceTaskParameter("attributeValue", "Value", paramType, enumValues));
 }
 
+parameters.push(new WorkflowServiceTaskParameter("attributeValueVariable", "Value variable", WorkflowServiceTaskParameter.STRING()));
+parameters.push(new WorkflowServiceTaskParameter("isUpdate", "Overwrite", WorkflowServiceTaskParameter.BOOLEAN()));
+
 result.object(parameters);
\ No newline at end of file
diff --git a/process/SetCampaignStep_workflowService/SetCampaignStep_workflowService.aod b/process/SetCampaignStep_workflowService/SetCampaignStep_workflowService.aod
new file mode 100644
index 0000000000000000000000000000000000000000..202fd45600846fdcb2781ad3fd2a518f5e73a64c
--- /dev/null
+++ b/process/SetCampaignStep_workflowService/SetCampaignStep_workflowService.aod
@@ -0,0 +1,12 @@
+<?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>SetCampaignStep_workflowService</name>
+  <title>Set Campaign Step</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/SetCampaignStep_workflowService/process.js</process>
+  <alias>Data_alias</alias>
+  <serviceTaskParameterProcess>%aditoprj%/process/SetCampaignStep_workflowService/serviceTaskParameterProcess.js</serviceTaskParameterProcess>
+  <variants>
+    <element>WORKFLOW</element>
+  </variants>
+</process>
diff --git a/process/SetCampaignStep_workflowService/process.js b/process/SetCampaignStep_workflowService/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..127041b99578edc870f70ee7a6861405e02f3f39
--- /dev/null
+++ b/process/SetCampaignStep_workflowService/process.js
@@ -0,0 +1,42 @@
+import("system.util");
+import("Campaign_lib");
+import("Sql_lib");
+import("system.vars");
+
+var variables = JSON.parse(vars.get("$local.value"));
+
+var contactId = variables.contactId || variables.targetId;
+var campaignId = variables.campaignId;
+var campaignStepId = variables.campaignStepId;
+
+var campaignStepQuery = newSelect(["CAMPAIGNPARTICIPANTID", "CAMPAIGNSTEP_ID"])
+    .from("CAMPAIGNPARTICIPANT")
+    .where("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", campaignId)
+    .and("CAMPAIGNPARTICIPANT.CONTACT_ID", contactId);
+
+var [participantId, currentCampaignStep] = campaignStepQuery.arrayRow();
+    
+if (campaignStepId && currentCampaignStep != campaignStepId)
+{
+    if (!participantId)
+    {
+        participantId = util.getNewUUID();
+        new SqlBuilder().insertFields({
+            "CAMPAIGNPARTICIPANTID": participantId,
+            "CAMPAIGNSTEP_ID": campaignStepId,
+            "CAMPAIGN_ID": campaignId,
+            "CONTACT_ID": contactId,
+            "DATE_NEW": vars.get("$sys.date"),
+            "USER_NEW": vars.get("$sys.user")
+        }, "CAMPAIGNPARTICIPANT");
+    }
+    else 
+    {
+        campaignStepQuery.updateFields({
+            "CAMPAIGNSTEP_ID": campaignStepId,
+            "DATE_EDIT": vars.get("$sys.date"),
+            "USER_EDIT": vars.get("$sys.user")
+        });
+    }
+    CampaignUtils.createLogEntry(campaignId, campaignStepId, participantId, currentCampaignStep);
+}
\ No newline at end of file
diff --git a/process/SetCampaignStep_workflowService/serviceTaskParameterProcess.js b/process/SetCampaignStep_workflowService/serviceTaskParameterProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..5978f70ed26e20dcd576602e0d8e0fc2996517a1
--- /dev/null
+++ b/process/SetCampaignStep_workflowService/serviceTaskParameterProcess.js
@@ -0,0 +1,40 @@
+import("system.result");
+import("system.vars");
+import("Sql_lib");
+import("Workflow_lib");
+
+var currentValues = JSON.parse(vars.get("$local.value"));
+
+var campaigns = newSelect(["CAMPAIGNID", "NAME"])
+    .from("CAMPAIGN")
+    .table()
+    .map(function ([id, name])
+    {
+        return {
+            id: id,
+            name: name
+        };
+    });
+
+var parameters = [
+    new WorkflowServiceTaskParameter("campaignId", "Campaign", WorkflowServiceTaskParameter.ENUM(), campaigns, true)
+];
+
+var campaignId = currentValues.campaignId && currentValues.campaignId.value;
+if (campaignId)
+{
+    var campaignSteps = newSelect(["CAMPAIGNSTEPID", "NAME"])
+        .from("CAMPAIGNSTEP")
+        .where("CAMPAIGNSTEP.CAMPAIGN_ID", campaignId)
+        .table()
+        .map(function ([id, name])
+        {
+            return {
+                id: id,
+                name: name
+            };
+        });
+    parameters.push(new WorkflowServiceTaskParameter("campaignStepId", "Campaign Step", WorkflowServiceTaskParameter.ENUM(), campaignSteps));
+}
+
+result.object(parameters);
\ No newline at end of file
diff --git a/process/SetSalesprojectPhase_workflowService/SetSalesprojectPhase_workflowService.aod b/process/SetSalesprojectPhase_workflowService/SetSalesprojectPhase_workflowService.aod
index cd9e8f63d12bd4f5af9c1555277c6a54fb82db93..19550d2d6b58731f3730a99daecbaea1041213b7 100644
--- a/process/SetSalesprojectPhase_workflowService/SetSalesprojectPhase_workflowService.aod
+++ b/process/SetSalesprojectPhase_workflowService/SetSalesprojectPhase_workflowService.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>SetSalesprojectPhase_workflowService</name>
   <title>Set salesproject phase</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/process/SqlBuilder_test/SqlBuilder_test.aod b/process/SqlBuilder_test/SqlBuilder_test.aod
new file mode 100644
index 0000000000000000000000000000000000000000..c8c1620c9e458c45817eb40fc2dde2d643fce18c
--- /dev/null
+++ b/process/SqlBuilder_test/SqlBuilder_test.aod
@@ -0,0 +1,12 @@
+<?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>SqlBuilder_test</name>
+  <title>[TEST] Sql_lib - SqlBuilder</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <icon>VAADIN:CHECK_CIRCLE</icon>
+  <process>%aditoprj%/process/SqlBuilder_test/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>
diff --git a/process/SqlBuilder_test/process.js b/process/SqlBuilder_test/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..3ec9ec86ddb15cafc04a2bed81a81e28afc3cf79
--- /dev/null
+++ b/process/SqlBuilder_test/process.js
@@ -0,0 +1,1266 @@
+import("system.db");
+import("system.result");
+import("system.vars");
+import("system.translate");
+import("system.logging");
+import("system.SQLTYPES");
+import("Sql_lib");
+import("UnitTest_lib");
+
+//SqlBuilder-tests:
+var newSelectTests = new TestSuite("SqlLib.newSelect", [
+    new Test("newSelect with just a string should just use it as select",
+        function(pTester)
+        {
+            var actualValue = newSelect("MySuper, Field, String")
+
+            pTester.expectThat(actualValue).elementAt("_select").elementAt("_sqlStorage").equals("select MySuper, Field, String").assert();
+            pTester.expectThat(actualValue).elementAt("_select").elementAt("preparedValues").hasLength(0).assert();
+        }
+    ),
+
+    new Test("newSelect with just an array of strings should just use them concatenated as select",
+        function(pTester)
+        {
+            var actualValue = newSelect(["MySuper", "Field", "String"])
+
+            pTester.expectThat(actualValue).elementAt("_select").elementAt("_sqlStorage").equals("select MySuper, Field, String").assert();
+            pTester.expectThat(actualValue).elementAt("_select").elementAt("preparedValues").hasLength(0).assert();
+        }
+    ),
+
+    new Test("newSelect with just an SqlBuilder should use it as subselect",
+        function(pTester)
+        {
+            var actualValue = newSelect(new SqlBuilder().select("PERSONID").from("PERSON").where("PERSON.FIRSTNAME", "Fritz"))
+
+            pTester.expectThat(actualValue).elementAt("_select").elementAt("_sqlStorage").equals("select (select PERSONID from PERSON where PERSON.FIRSTNAME = ?)").assert();
+            pTester.expectThat(actualValue).elementAt("_select").elementAt("preparedValues").hasLength(1).assert();
+        }
+    ),
+
+    new Test("newSelect an array of Strings and SqlBuilders should add them all",
+        function(pTester)
+        {
+            var actualValue = newSelect(["MySuper", "Field", "String", new SqlBuilder().select("PERSONID").from("PERSON").where("PERSON.FIRSTNAME", "Fritz")])
+
+            pTester.expectThat(actualValue).elementAt("_select").elementAt("_sqlStorage").equals("select MySuper, Field, String, (select PERSONID from PERSON where PERSON.FIRSTNAME = ?)").assert();
+            pTester.expectThat(actualValue).elementAt("_select").elementAt("preparedValues").hasLength(1).assert();
+        }
+    ),
+]);
+
+
+var validAndUsageTests = new TestSuite("SqlLib.validAndUsage", [
+    new Test("and should just add simple strings as condition just as it is",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where("PERSON.FIRSTNAME = 'Tim'") // NOTE: you should not do this as this does not add a real prepared statement with "?"
+                                .and("PERSON.LASTNAME = 'Admin'")
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("PERSON.FIRSTNAME = 'Tim' and PERSON.LASTNAME = 'Admin'").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(0).assert();
+        }
+    ),
+
+    new Test("and should add a condition if field and value are passed",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where("PERSON.FIRSTNAME", "Tim")
+                                .and("PERSON.LASTNAME", "Admin")
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ?").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(2).assert();
+        }
+    ),
+
+    new Test("and should add a condition if value is an empty string",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where("PERSON.FIRSTNAME", "")
+                                .and("PERSON.LASTNAME", "")
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ?").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(2).assert();
+        }
+    ),
+
+    new Test("and should add a condition if field and value as jdito-var are passed",
+        function(pTester)
+        {
+            vars.set("$global.TestUnitValueName", "Tim");
+            var actualValue = new SqlBuilder()
+                                .where("PERSON.FIRSTNAME", "$global.TestUnitValueName")
+
+            pTester.expectThat(actualValue.toString()).equals("( PERSON.FIRSTNAME = 'Tim' ) ").assert();
+        }
+    ),
+
+    new Test("$ should be escaped by a second $ and the string should therefore just be used as string and not as jdito variable",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where("PERSON.FIRSTNAME", "$$mySuperString")
+
+            pTester.expectThat(actualValue.toString()).equals("( PERSON.FIRSTNAME = '$mySuperString' ) ").assert();
+        }
+    ),
+
+    new Test("and should add a condition if value is a jdito-var containing an empty string",
+        function(pTester)
+        {
+            vars.set("$global.TestingVarEmptyString", "");
+            var actualValue = new SqlBuilder()
+                                .where("PERSON.FIRSTNAME", "$global.TestingVarEmptyString")
+                                .and("PERSON.LASTNAME", "$global.TestingVarEmptyString")
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ?").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(2).assert();
+        }
+    ),
+
+    new Test("and should use the given condition pattern",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where("PERSON.FIRSTNAME", "Tim", "# <> ?")
+                                .and("PERSON.LASTNAME", "Admin")
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("PERSON.FIRSTNAME <> ? and PERSON.LASTNAME = ?").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(2).assert();
+        }
+    ),
+
+    new Test("and should use the given SQLTYPE if provided",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where("PERSON.FIRSTNAME", 6, null, SQLTYPES.INTEGER)
+                                .and("PERSON.LASTNAME", 7, undefined, SQLTYPES.INTEGER)
+                                .and("PERSON.LASTNAME", 8, "# <> ?", SQLTYPES.INTEGER)
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ? and PERSON.LASTNAME <> ?").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(3).assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").elementAt(0).elementAt(1).equals(SQLTYPES.INTEGER).assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").elementAt(1).elementAt(1).equals(SQLTYPES.INTEGER).assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").elementAt(2).elementAt(1).equals(SQLTYPES.INTEGER).assert();
+        }
+    ),
+
+    new Test("and only with a prepared statement-array should just use it as it is",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where([
+                                    "PERSON.FIRSTNAME = ?", [["Peter", 12]]
+                                ])
+                                .and([
+                                    "exists (select * FROM CONTACT where PERSON_ID = PERSONID)", []
+                                ])
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals(" ( PERSON.FIRSTNAME = ? )  and  ( exists (select * FROM CONTACT where PERSON_ID = PERSONID) ) ").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(1).assert();
+        }
+    ),
+
+    new Test("and only with a SqlBulder object should just use the condition from it",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where(new SqlBuilder()
+                                    .select("TEST")
+                                    .from("PERSON")
+                                    .where("PERSON.FIRSTNAME", "Tim")
+                                    .and("PERSON.LASTNAME", "Admin"))
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals(" ( PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ? ) ").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(2).assert();
+        }
+    ),
+
+    new Test("and with a builder as value and condition (field is null|undefined) should add the whole builder as subquery",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where(null, new SqlBuilder()
+                                    .select("FIRSTNAME")
+                                    .from("PERSON")
+                                    .where("PERSON.FIRSTNAME", "Tim")
+                                    .and("PERSON.LASTNAME", "Admin"),
+                                    "exists ?")  // Note: you can use SqlBuilder.EXISTS() instead of  "exists ?"
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("exists  ( select FIRSTNAME from PERSON where PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ? ) ").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(2).assert();
+        }
+    ),
+
+    new Test("and with a builder as value and field should add the whole builder as subquery with field = (subquery)",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where("PERSON.FIRSTNAME", new SqlBuilder()
+                                    .select("FIRSTNAME")
+                                    .from("PERSON")
+                                    .where("PERSON.FIRSTNAME", "Tim")
+                                    .and("PERSON.LASTNAME", "Admin"))
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("PERSON.FIRSTNAME =  ( select FIRSTNAME from PERSON where PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ? ) ").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(2).assert();
+        }
+    ),
+
+    new Test("and with a prepared statement-array as value and field is null|undefined should add the whole statement as subquery",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where(null, ["select FIRSTNAME from PERSON.FIRSTNAME = ?", [["Peter", 12]]], "exists ?")
+                                .and(null, ["exists (select FIRSTNAME from PERSON.FIRSTNAME = ?)", [["Peter", 12]]]) // also without pCond it should work as the condition could be included in the prep statement
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("exists  ( select FIRSTNAME from PERSON.FIRSTNAME = ? )  and  ( exists (select FIRSTNAME from PERSON.FIRSTNAME = ?) ) ").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(2).assert();
+        }
+    ),
+
+    new Test("and with a prepared statement-array as value and field should add the whole statement as subquery with field = (subquery)",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where("PERSON.FIRSTNAME", ["select FIRSTNAME from PERSON.FIRSTNAME = ?", [["Peter", 12]]])
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("PERSON.FIRSTNAME =  ( select FIRSTNAME from PERSON.FIRSTNAME = ? ) ").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(1).assert();
+        }
+    ),
+]);
+
+
+var validOrUsageTests = new TestSuite("SqlLib.validOrUsage", [
+    new Test("or should just add simple strings as condition just as it is",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where("PERSON.FIRSTNAME = 'Tim'") // NOTE: you should not do this as this does not add a real prepared statement with "?"
+                                .or("PERSON.LASTNAME = 'Admin'")
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("PERSON.FIRSTNAME = 'Tim' or PERSON.LASTNAME = 'Admin'").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(0).assert();
+        }
+    ),
+
+    new Test("or should add a condition if field and value are passed",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where("PERSON.FIRSTNAME", "Tim")
+                                .or("PERSON.LASTNAME", "Admin")
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("PERSON.FIRSTNAME = ? or PERSON.LASTNAME = ?").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(2).assert();
+        }
+    ),
+
+    new Test("or should use the given condition pattern",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where("PERSON.FIRSTNAME", "Tim", "# <> ?")
+                                .or("PERSON.LASTNAME", "Admin")
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("PERSON.FIRSTNAME <> ? or PERSON.LASTNAME = ?").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(2).assert();
+        }
+    ),
+
+    new Test("or should use the given SQLTYPE if provided",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where("PERSON.FIRSTNAME", 6, null, SQLTYPES.INTEGER)
+                                .or("PERSON.LASTNAME", 7, undefined, SQLTYPES.INTEGER)
+                                .or("PERSON.LASTNAME", 8, "# <> ?", SQLTYPES.INTEGER)
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("PERSON.FIRSTNAME = ? or PERSON.LASTNAME = ? or PERSON.LASTNAME <> ?").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(3).assert();
+        }
+    ),
+
+    new Test("or only with a prepared statement-array should just use it as it is",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where([
+                                    "PERSON.FIRSTNAME = ?", [["Peter", 12]]
+                                ])
+                                .or([
+                                    "exists (select * FROM CONTACT where PERSON_ID = PERSONID)", []
+                                ])
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals(" ( PERSON.FIRSTNAME = ? )  or  ( exists (select * FROM CONTACT where PERSON_ID = PERSONID) ) ").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(1).assert();
+        }
+    ),
+
+    new Test("or only with a SqlBulder object should just use the condition from it",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where(new SqlBuilder()
+                                    .where("PERSON.FIRSTNAME", "Tim")
+                                    .or("PERSON.LASTNAME", "Admin"))
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals(" ( PERSON.FIRSTNAME = ? or PERSON.LASTNAME = ? ) ").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(2).assert();
+        }
+    ),
+
+    new Test("or with a builder as value and condition (field is null|undefined) should add the whole builder as subquery",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where(null, new SqlBuilder()
+                                    .select("FIRSTNAME")
+                                    .from("PERSON")
+                                    .where("PERSON.FIRSTNAME", "Tim")
+                                    .or("PERSON.LASTNAME", "Admin"),
+                                    "exists ?")
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("exists  ( select FIRSTNAME from PERSON where PERSON.FIRSTNAME = ? or PERSON.LASTNAME = ? ) ").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(2).assert();
+        }
+    ),
+
+    new Test("or with a builder as value and field should add the whole builder as subquery with field = (subquery)",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where("PERSON.FIRSTNAME", new SqlBuilder()
+                                    .select("FIRSTNAME")
+                                    .from("PERSON")
+                                    .where("PERSON.FIRSTNAME", "Tim")
+                                    .or("PERSON.LASTNAME", "Admin"))
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("PERSON.FIRSTNAME =  ( select FIRSTNAME from PERSON where PERSON.FIRSTNAME = ? or PERSON.LASTNAME = ? ) ").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(2).assert();
+        }
+    ),
+
+    new Test("or with a prepared statement-array as value and field is null|undefined should add the whole statement as subquery",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where(null, ["select FIRSTNAME from PERSON.FIRSTNAME = ?", [["Peter", 12]]], "exists ?")
+                                .or(null, ["exists (select FIRSTNAME from PERSON.FIRSTNAME = ?)", [["Peter", 12]]]) // also without pCond it should work as the condition could be included in the prep statement
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("exists  ( select FIRSTNAME from PERSON.FIRSTNAME = ? )  or  ( exists (select FIRSTNAME from PERSON.FIRSTNAME = ?) ) ").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(2).assert();
+        }
+    ),
+]);
+
+var combinedAndOrTests = new TestSuite("SqlLib.combinedAndOr", [
+    new Test("or combining two and",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                            .where("PERSON.FIRSTNAME", "Tim")
+                            .and("PERSON.LASTNAME", "Admin")
+                            .or(new SqlBuilder()
+                                    .where("PERSON.FIRSTNAME", "Peter")
+                                    .and("PERSON.LASTNAME", "Müller"))
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("(PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ?) or  ( PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ? ) ").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(4).assert();
+        }
+    ),
+
+    new Test("and combining two or",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                            .where(new SqlBuilder()
+                                    .where("PERSON.FIRSTNAME", "Tim")
+                                    .or("PERSON.LASTNAME", "Admin"))
+                            .and(new SqlBuilder()
+                                    .where("PERSON.FIRSTNAME", "Peter")
+                                    .or("PERSON.LASTNAME", "Müller"))
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals(" ( PERSON.FIRSTNAME = ? or PERSON.LASTNAME = ? )  and  ( PERSON.FIRSTNAME = ? or PERSON.LASTNAME = ? ) ").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(4).assert();
+        }
+    ),
+
+    new Test("some and/or combinations in one select",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                            .where("PERSON.FIRSTNAME", "Tim")
+                            .or("PERSON.FIRSTNAME", "Franz")
+                            .and("PERSON.LASTNAME", "Admin")
+                            .and(new SqlBuilder()
+                                    .where("PERSON.FIRSTNAME", "Peter")
+                                    .or("PERSON.LASTNAME", "Müller"))
+                            .or("PERSON.FIRSTNAME", "Franz")
+                            .and("PERSON.FIRSTNAME", "Franz")
+                            .or(new SqlBuilder()
+                                    .where("PERSON.FIRSTNAME", "Peter")
+                                    .and("PERSON.LASTNAME", "Müller")
+                                    .and(new SqlBuilder()
+                                            .where("PERSON.FIRSTNAME", "Peter")
+                                            .or("PERSON.LASTNAME", "Müller")))
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("PERSON.FIRSTNAME = ? or PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ? and  ( PERSON.FIRSTNAME = ? or PERSON.LASTNAME = ? )  or (PERSON.FIRSTNAME = ?) and PERSON.FIRSTNAME = ? or  ( PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ? and  ( PERSON.FIRSTNAME = ? or PERSON.LASTNAME = ? )  ) ").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(11).assert();
+        }
+    ),
+]);
+
+
+var ifSetTests = new TestSuite("SqlLib.ifSet", [
+    new Test("simple and if set with all types of empty values.",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                            .whereIfSet("PERSON.LASTNAME", null)
+                            .andIfSet("PERSON.LASTNAME", undefined)
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("", "no sql should be added").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(0, "no params should be added").assert();
+        }
+    ),
+
+    new Test("jdito variable with null",
+        function(pTester)
+        {
+            vars.set("$global.TestingVarNull", null);
+
+            var actualValue = new SqlBuilder()
+                            .whereIfSet("PERSON.FIRSTNAME", "$global.TestingVarNull")
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("", "no sql should be added").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(0, "no params should be added").assert();
+        }
+    ),
+
+    new Test("empty simple conditions",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                            .whereIfSet("")
+                            .andIfSet(["", []])
+                            .andIfSet(new SqlBuilder())
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("", "no sql should be added").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(0, "no params should be added").assert();
+        }
+    ),
+
+    new Test("empty subqueries",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                            .whereIfSet("PERSON.FIRSTNAME", ["", []])
+                            .andIfSet("PERSON.LASTNAME", new SqlBuilder())
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("", "no sql should be added").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(0, "no params should be added").assert();
+        }
+    ),
+]);
+
+
+function cleanWrapperTests()
+{
+    try {
+        db.runStatement("drop table SQL_LIB_TEST_TABLE");
+    } catch(ex) {}
+
+    try {
+        db.deleteData("PERSON", "PERSONID in ('TEST-5', 'TEST-6')")
+    } catch(ex) {}
+
+}
+
+
+var dbWrapperTests = new TestSuite("SqlLib.dbWrapper", [
+    new Test("cell should load only one value",
+        function(pTester)
+        {
+            var builder = new SqlBuilder()
+                                .select("FIRSTNAME")
+                                .from("PERSON")
+                                .where("PERSON.PERSONID", "TEST-5")
+            var actualValue = builder.cell()
+
+            pTester.expectThat(actualValue).equals("Franz").assert();
+        }
+    ),
+
+    new Test("cell should just return '' if no condition set but pExecuteOnlyIfConditionExists is true",
+        function(pTester)
+        {
+            var builder = new SqlBuilder()
+                                .select("FIRSTNAME")
+                                .from("PERSON")
+            var actualValue = builder.cell(true)
+
+            pTester.expectThat(actualValue).equals("").assert();
+        }
+    ),
+
+    new Test("cell should return a value if no condition set and pExecuteOnlyIfConditionExists is false",
+        function(pTester)
+        {
+            var builder = new SqlBuilder()
+                                .select("FIRSTNAME")
+                                .from("PERSON");
+
+            var actualValue = builder.cell(false)
+
+            pTester.expectThat(actualValue).not().equals("").assert();
+            pTester.expectThat(actualValue).not().isNull().assert();
+            pTester.expectThat(actualValue).not().isUndefined().assert();
+        }
+    ),
+
+    new Test("array should load an array of values",
+        function(pTester)
+        {
+            var builder = new SqlBuilder()
+                                .select("FIRSTNAME, LASTNAME")
+                                .from("PERSON")
+                                .where("PERSON.PERSONID", "TEST-5");
+
+            var actualValue = builder.array(db.ROW);
+            pTester.expectThat(actualValue).elementAt(0).equals("Franz", {name: "firstname"}).assert();
+            pTester.expectThat(actualValue).elementAt(1).equals("Müller", {name: "lastname"}).assert();
+        }
+    ),
+
+    new Test("array should return an empty array if no condition set but pExecuteOnlyIfConditionExists is true",
+        function(pTester)
+        {
+            var builder = new SqlBuilder()
+                                .select("FIRSTNAME, LASTNAME")
+                                .from("PERSON")
+
+            var actualValue = builder.array(db.ROW, true);
+            pTester.expectThat(actualValue).hasLength(0).assert();
+        }
+    ),
+
+    new Test("array should return a non-empty array if no condition set and pExecuteOnlyIfConditionExists is false",
+        function(pTester)
+        {
+            var builder = new SqlBuilder()
+                                .select("FIRSTNAME, LASTNAME")
+                                .from("PERSON")
+
+            var actualValue = builder.array(db.ROW, false);
+            pTester.expectThat(actualValue).hasMinLength(1).assert();
+        }
+    ),
+
+    new Test("table should load an array of arrays with values",
+        function(pTester)
+        {
+            var builder = new SqlBuilder()
+                                .select("FIRSTNAME, LASTNAME")
+                                .from("PERSON")
+                                .where("PERSON.PERSONID", "TEST-5")
+                                .or("PERSON.PERSONID", "TEST-6")
+                                .orderBy("PERSONID asc");
+
+            var actualValue = builder.table();
+            pTester.expectThat(actualValue).elementAt(0).elementAt(0).equals("Franz", {name: "firstname"}).assert();
+            pTester.expectThat(actualValue).elementAt(0).elementAt(1).equals("Müller", {name: "lastname"}).assert();
+
+            pTester.expectThat(actualValue).elementAt(1).elementAt(0).equals("Marco", {name: "firstname"}).assert();
+            pTester.expectThat(actualValue).elementAt(1).elementAt(1).equals("Polo", {name: "lastname"}).assert();
+        }
+    ),
+
+    new Test("table should return an empty array if no condition set but pExecuteOnlyIfConditionExists is true",
+        function(pTester)
+        {
+            var builder = new SqlBuilder()
+                                .select("FIRSTNAME, LASTNAME")
+                                .from("PERSON");
+
+            var actualValue = builder.table(true);
+
+            pTester.expectThat(actualValue).hasLength(0).assert();
+        }
+    ),
+
+    new Test("table should return a non-empty array if no condition set and pExecuteOnlyIfConditionExists is false",
+        function(pTester)
+        {
+            var builder = new SqlBuilder()
+                                .select("FIRSTNAME, LASTNAME")
+                                .from("PERSON");
+
+            var actualValue = builder.table(false);
+            pTester.expectThat(actualValue).hasMinLength(1).assert();
+        }
+    ),
+
+    new Test("delete should delete the data and use the from and condition from the builder",
+        function(pTester)
+        {
+            db.deleteData("SQL_LIB_TEST_TABLE", "TESTID = 'TEST-7'");
+            db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-7", "Ludwig", "Fischer"]);
+
+            var builder = new SqlBuilder()
+                                .from("SQL_LIB_TEST_TABLE")
+                                .where("SQL_LIB_TEST_TABLE.TESTID", "TEST-7");
+
+            var actualValue = builder.deleteData();
+            pTester.expectThat(actualValue).equals(1).assert();
+        }
+    ),
+
+    new Test("delete should delete the data from the provided table and use the condition from the builder. It ignores .from if a table is given.",
+        function(pTester)
+        {
+            db.deleteData("SQL_LIB_TEST_TABLE", "TESTID = 'TEST-7'");
+            db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-7", "Ludwig", "Fischer"]);
+
+            var builder = new SqlBuilder()
+                                .from("PERSON")
+                                .where("SQL_LIB_TEST_TABLE.TESTID", "TEST-7");
+
+            var actualValue = builder.deleteData(false, "SQL_LIB_TEST_TABLE");
+            pTester.expectThat(actualValue).equals(1).assert();
+        }
+    ),
+
+    new Test("delete should delete ALL data from a table if the builder has no condition and pExecuteOnlyIfConditionExists is false",
+        function(pTester)
+        {
+            db.deleteData("SQL_LIB_TEST_TABLE", "TESTID in ('TEST-7', 'TEST-8')");
+            db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-7", "Ludwig", "Fischer"]);
+            db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-8", "Ludwig", "Fischer"]);
+
+            var builder = new SqlBuilder()
+                                .from("SQL_LIB_TEST_TABLE")
+
+            var actualValue = builder.deleteData(false);
+            pTester.expectThat(actualValue).equals(2).assert();
+        }
+    ),
+
+    new Test("delete should delete NO data from a table if the builder has no condition and pExecuteOnlyIfConditionExists is true",
+        function(pTester)
+        {
+            db.deleteData("SQL_LIB_TEST_TABLE", "TESTID in ('TEST-7', 'TEST-8')");
+            db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-7", "Ludwig", "Fischer"]);
+            db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-8", "Ludwig", "Fischer"]);
+
+            var builder = new SqlBuilder()
+                                .from("SQL_LIB_TEST_TABLE")
+
+            var actualValue = builder.deleteData(true);
+            pTester.expectThat(actualValue).equals(0).assert();
+        }
+    ),
+
+    new Test("update should update the data and use the from and condition from the builder",
+        function(pTester)
+        {
+            db.deleteData("SQL_LIB_TEST_TABLE", "TESTID = 'TEST-7'");
+            db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-7", "Ludwig", "Fischer"]);
+
+            var builder = new SqlBuilder()
+                                .from("SQL_LIB_TEST_TABLE")
+                                .where("SQL_LIB_TEST_TABLE.TESTID", "TEST-7");
+
+            builder.updateData(false, undefined, ["FIRSTNAME"], null, ["Fritz"]);
+
+            var actualValue = db.cell("select FIRSTNAME from SQL_LIB_TEST_TABLE where SQL_LIB_TEST_TABLE.TESTID = 'TEST-7'")
+
+            pTester.expectThat(actualValue).equals("Fritz").assert();
+        }
+    ),
+
+    new Test("update should update the data from the provided table and use the condition from the builder. It ignores .from if a table is given.",
+        function(pTester)
+        {
+            db.deleteData("SQL_LIB_TEST_TABLE", "TESTID = 'TEST-7'");
+            db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-7", "Ludwig", "Fischer"]);
+
+            var builder = new SqlBuilder()
+                                .from("PERSON")
+                                .where("SQL_LIB_TEST_TABLE.TESTID", "TEST-7");
+
+            builder.updateData(false, "SQL_LIB_TEST_TABLE", ["FIRSTNAME"], null, ["Fritz"]);
+
+            var actualValue = db.cell("select FIRSTNAME from SQL_LIB_TEST_TABLE where SQL_LIB_TEST_TABLE.TESTID = 'TEST-7'")
+
+            pTester.expectThat(actualValue).equals("Fritz").assert();
+        }
+    ),
+
+    new Test("update should update ALL data from a table if the builder has no condition and pExecuteOnlyIfConditionExists is false",
+        function(pTester)
+        {
+            db.deleteData("SQL_LIB_TEST_TABLE", "TESTID in ('TEST-7', 'TEST-8')");
+            db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-7", "Ludwig", "Fischer"]);
+            db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-8", "Franz", "Fischer"]);
+
+            var builder = new SqlBuilder()
+                                .from("SQL_LIB_TEST_TABLE")
+
+            builder.updateData(false, undefined, ["FIRSTNAME"], null, ["Fritz"]);
+
+            var actualValue1 = db.cell("select FIRSTNAME from SQL_LIB_TEST_TABLE where SQL_LIB_TEST_TABLE.TESTID = 'TEST-7'")
+            var actualValue2 = db.cell("select FIRSTNAME from SQL_LIB_TEST_TABLE where SQL_LIB_TEST_TABLE.TESTID = 'TEST-8'")
+
+            pTester.expectThat(actualValue1).equals("Fritz", "TEST-7 should have Firstname Fritz").assert();
+            pTester.expectThat(actualValue2).equals("Fritz", "TEST-8 should have Firstname Fritz").assert();
+        }
+    ),
+
+    new Test("update should update NO data from a table if the builder has no condition and pExecuteOnlyIfConditionExists is true",
+        function(pTester)
+        {
+            db.deleteData("SQL_LIB_TEST_TABLE", "TESTID in ('TEST-7', 'TEST-8')")
+            db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-7", "Ludwig", "Fischer"]);
+            db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-8", "Franz", "Fischer"]);
+
+            var builder = new SqlBuilder()
+                                .from("SQL_LIB_TEST_TABLE")
+
+            builder.updateData(true, undefined, ["FIRSTNAME"], null, ["Fritz"]);
+
+            var actualValue1 = db.cell("select FIRSTNAME from SQL_LIB_TEST_TABLE where SQL_LIB_TEST_TABLE.TESTID = 'TEST-7'")
+            var actualValue2 = db.cell("select FIRSTNAME from SQL_LIB_TEST_TABLE where SQL_LIB_TEST_TABLE.TESTID = 'TEST-8'")
+
+            pTester.expectThat(actualValue1).equals("Ludwig", "TEST-7 should have Firstname Ludwig").assert();
+            pTester.expectThat(actualValue2).equals("Franz", "TEST-8 should have Firstname Franz").assert();
+        }
+    ),
+], function preAll()
+{
+    // remove data which may exist if previous test-run failed and postAll was not executed
+    cleanWrapperTests();
+
+    // add table for save testing of deletes
+    db.runStatement("create table SQL_LIB_TEST_TABLE (TESTID varchar(36), FIRSTNAME varchar(100), LASTNAME varchar(100))");
+
+    // add test persons
+    db.insertData("PERSON", ["PERSONID", "FIRSTNAME", "LASTNAME", "USER_NEW", "DATE_NEW"], null, ["TEST-5", "Franz", "Müller", "testuser", vars.get("$sys.date")])
+    db.insertData("PERSON", ["PERSONID", "FIRSTNAME", "LASTNAME", "USER_NEW", "DATE_NEW"], null, ["TEST-6", "Marco", "Polo", "testuser", vars.get("$sys.date")])
+}, undefined, undefined, function postAll()
+{
+    cleanWrapperTests();
+})
+
+
+var mandatoryErrorTests = new TestSuite("SqlLib.mandatoryError", [
+// and
+    new Test("and without parameter should error",
+        function(pTester)
+        {
+            pTester.expectThat(function() {
+                new SqlBuilder().where().or();
+            }).throwsException(SqlBuilder._ERROR_NO_PARAMETER_PROVIDED()).assert();
+        }
+    ),
+
+    new Test("and with null as value should error",
+        function(pTester)
+        {
+            pTester.expectThat(function() {
+                new SqlBuilder().where().or("PERSON.FIRSTNAME", null);
+            }).throwsException(SqlBuilder._ERROR_VALUE_IS_MANDATORY()).assert();
+        }
+    ),
+
+    new Test("and with undefined as value should error",
+        function(pTester)
+        {
+            pTester.expectThat(function() {
+                new SqlBuilder().where().or("PERSON.FIRSTNAME", undefined);
+            }).throwsException(SqlBuilder._ERROR_VALUE_IS_MANDATORY()).assert();
+        }
+    ),
+
+    new Test("and with a jdito-var containing null should error",
+        function(pTester)
+        {
+            vars.set("$global.TestingVarNull", null);
+
+            pTester.expectThat(function() {
+                new SqlBuilder().where().or("PERSON.FIRSTNAME", "$global.TestingVarNull");
+            }).throwsException(SqlBuilder._ERROR_VALUE_IS_MANDATORY_JDITO_VAR()).assert();
+        }
+    ),
+
+    new Test("and with an empty sql-builder as subquery should error",
+        function(pTester)
+        {
+            pTester.expectThat(function() {
+                new SqlBuilder().where().or("PERSON.FIRSTNAME", new SqlBuilder());
+            }).throwsException(SqlBuilder._ERROR_VALUE_IS_MANDATORY()).assert();
+        }
+    ),
+
+    new Test("and with an empty prepared statement as subquery should error",
+        function(pTester)
+        {
+            pTester.expectThat(function() {
+                new SqlBuilder().where().or("PERSON.FIRSTNAME", ["", []]);
+            }).throwsException(SqlBuilder._ERROR_VALUE_IS_MANDATORY()).assert();
+        }
+    ),
+
+
+// or
+    new Test("or without parameter should error",
+        function(pTester)
+        {
+            pTester.expectThat(function() {
+                new SqlBuilder().where().or();
+            }).throwsException(SqlBuilder._ERROR_NO_PARAMETER_PROVIDED()).assert();
+        }
+    ),
+
+    new Test("or with null as value should error",
+        function(pTester)
+        {
+            pTester.expectThat(function() {
+                new SqlBuilder().where().or("PERSON.FIRSTNAME", null);
+            }).throwsException(SqlBuilder._ERROR_VALUE_IS_MANDATORY()).assert();
+        }
+    ),
+
+    new Test("or with undefined as value should error",
+        function(pTester)
+        {
+            pTester.expectThat(function() {
+                new SqlBuilder().where().or("PERSON.FIRSTNAME", undefined);
+            }).throwsException(SqlBuilder._ERROR_VALUE_IS_MANDATORY()).assert();
+        }
+    ),
+
+    new Test("or with a jdito-var containing null should error",
+        function(pTester)
+        {
+            vars.set("$global.TestingVarNull", null);
+
+            pTester.expectThat(function() {
+                new SqlBuilder().where().or("PERSON.FIRSTNAME", "$global.TestingVarNull");
+            }).throwsException(SqlBuilder._ERROR_VALUE_IS_MANDATORY_JDITO_VAR()).assert();
+        }
+    ),
+
+    new Test("or with an empty sql-builder as subquery should error",
+        function(pTester)
+        {
+            pTester.expectThat(function() {
+                new SqlBuilder().where().or("PERSON.FIRSTNAME", new SqlBuilder());
+            }).throwsException(SqlBuilder._ERROR_VALUE_IS_MANDATORY()).assert();
+        }
+    ),
+
+    new Test("or with an empty prepared statement as subquery should error",
+        function(pTester)
+        {
+            pTester.expectThat(function() {
+                new SqlBuilder().where().or("PERSON.FIRSTNAME", ["", []]);
+            }).throwsException(SqlBuilder._ERROR_VALUE_IS_MANDATORY()).assert();
+        }
+    ),
+]);
+
+
+var inStatementTests = new TestSuite("SqlLib.inStatement", [
+    new Test("simple and in",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where("PERSON.LASTNAME", ["Franz", "Fritz"], SqlBuilder.IN()) // Note: you can use SqlBuilder.IN(), SqlBuilder.NOT_IN(), "# in ?", etc. as 3rd parameter
+                                .or("PERSON.LASTNAME", ["Peter", "Mayer"], SqlBuilder.IN());
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals(" ( PERSON.LASTNAME in  (?, ?)  )  or  ( PERSON.LASTNAME in  (?, ?)  ) ").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(4).assert();
+        }
+    ),
+
+    new Test("simple and not in",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .where("PERSON.LASTNAME", ["Franz", "Fritz"], "# not in ?"); // Note: you can use SqlBuilder.IN(), SqlBuilder.NOT_IN(), "# in ?", etc. as 3rd parameter
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals(" ( PERSON.LASTNAME not in  (?, ?)  ) ").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(2).assert();
+        }
+    ),
+
+    new Test("in with subquery",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                            .where("PERSON.FIRSTNAME", new SqlBuilder()
+                                                            .select("PERSON.FIRSTNAME")
+                                                            .from("PERSON")
+                                                            .where("PERSON.LASTNAME", "Fritz")
+                                                    , "# in ?"); // Note: you can use SqlBuilder.IN() instead of "# in ?"
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("PERSON.FIRSTNAME in  ( select PERSON.FIRSTNAME from PERSON where PERSON.LASTNAME = ? ) ").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(1).assert();
+        }
+    ),
+
+    new Test("in with prepared statement-array",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                            .where("PERSON.FIRSTNAME", ["select PERSON.FIRSTNAME from PERSON where PERSON.LASTNAME = ?", [["Fritz", SQLTYPES.VARCHAR]]]
+                                                    , "# in ?"); // Note: you can use SqlBuilder.IN() instead of "# in ?"
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("PERSON.FIRSTNAME in  ( select PERSON.FIRSTNAME from PERSON where PERSON.LASTNAME = ? ) ").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(1).assert();
+        }
+    ),
+
+    new Test("andIfSet should ignore empty array",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                                .whereIfSet("PERSON.LASTNAME", []);
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals("").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(0).assert();
+        }
+    ),
+
+    new Test("and should error on an empty array",
+        function(pTester)
+        {
+            pTester.expectThat(function() {
+                new SqlBuilder().where("PERSON.LASTNAME", []);
+            }).throwsException(SqlBuilder._ERROR_VALUE_IS_MANDATORY()).assert();
+        }
+    ),
+]);
+
+
+var testConstantFunctions = new TestSuite("SqlLib.testConstantFunc", [
+    new Test("SqlBuilder.IN()",
+        function(pTester)
+        {
+            var actualValue = SqlBuilder.IN();
+            pTester.expectThat(actualValue).equals("# in ?").assert();
+        }
+    ),
+
+    new Test("SqlBuilder.NOT_IN()",
+        function(pTester)
+        {
+            var actualValue = SqlBuilder.NOT_IN();
+            pTester.expectThat(actualValue).equals("# not in ?").assert();
+        }
+    ),
+
+    new Test("SqlBuilder.EXISTS()",
+        function(pTester)
+        {
+            var actualValue = SqlBuilder.EXISTS();
+            pTester.expectThat(actualValue).equals("exists ?").assert();
+        }
+    ),
+]);
+
+
+var selectTests = new TestSuite("SqlLib.select", [
+    new Test("a sql-builder in a fields-array is translated to sql correctly",
+        function(pTester)
+        {
+            var countSubQuery = newSelect("count(*)")
+                                    .from("AB_ATTRIBUTEUSAGE")
+                                    .where("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", "myType")
+                                    .and("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID");
+
+            var actualValue = new SqlBuilder()
+                .select(["AB_ATTRIBUTEID", "AB_ATTRIBUTEUSAGEID", countSubQuery])
+                .from("AB_ATTRIBUTE")
+
+            pTester.expectThat(actualValue).elementAt("_select").elementAt("_sqlStorage").equals("select AB_ATTRIBUTEID, AB_ATTRIBUTEUSAGEID, (select count(*) from AB_ATTRIBUTEUSAGE where AB_ATTRIBUTEUSAGE.OBJECT_TYPE = ? and AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID)").assert();
+            pTester.expectThat(actualValue).elementAt("_select").elementAt("preparedValues").hasLength(1).assert();
+        }
+    ),
+
+    new Test("a sql-builder in from is used as subselect",
+        function(pTester)
+        {
+            var subQuery = newSelect("FIRSTNAME")
+                                    .from("PERSON")
+                                    .where("PERSON.LASTNAME", "Meier")
+
+            var actualValue = new SqlBuilder()
+                .select("*")
+                .from(subQuery)
+
+            pTester.expectThat(actualValue).elementAt("_from").elementAt("_sqlStorage").equals("from (select FIRSTNAME from PERSON where PERSON.LASTNAME = ?)").assert();
+            pTester.expectThat(actualValue).elementAt("_from").elementAt("preparedValues").hasLength(1).assert();
+        }
+    ),
+]);
+
+
+var joinTests = new TestSuite("SqlLib.join", [
+    new Test("SqlBuilder as on-condition should only add the conditon of the builder",
+        function(pTester)
+        {
+            var subQuery = newSelect("NAME")
+                                    .from("ORGANISATION")
+                                    .where("ORGANISATION.NAME", "Adito")
+
+            var actualValue = new SqlBuilder()
+                .select("*")
+                .from("PERSON")
+                .join("ORGANISATION", subQuery)
+
+            pTester.expectThat(actualValue).elementAt("_joins").elementAt(0).elementAt("_sqlStorage").equals("join ORGANISATION on ORGANISATION.NAME = ?").assert();
+            pTester.expectThat(actualValue).elementAt("_joins").elementAt(0).elementAt("preparedValues").hasLength(1).assert();
+        }
+    ),
+
+    new Test("SqlBuilder as table for join is added as subselect",
+        function(pTester)
+        {
+            var subQuery = newSelect("NAME")
+                                    .from("ORGANISATION")
+                                    .where("ORGANISATION.NAME", "Adito")
+
+            var actualValue = new SqlBuilder()
+                .select("*")
+                .from("PERSON")
+                .join(subQuery, "orgname.NAME = TABLE2.NAME", "orgname")
+
+            pTester.expectThat(actualValue).elementAt("_joins").elementAt(0).elementAt("_sqlStorage").equals("join (select NAME from ORGANISATION where ORGANISATION.NAME = ?) orgname on orgname.NAME = TABLE2.NAME").assert();
+            pTester.expectThat(actualValue).elementAt("_joins").elementAt(0).elementAt("preparedValues").hasLength(1).assert();
+        }
+    ),
+
+    new Test("just use a string also containing a condition as join without additional condition",
+        function(pTester)
+        {
+            var actualValue = new SqlBuilder()
+                .select("*")
+                .from("PERSON")
+                .join("TABLE1 on TABLE1.NAME = TABLE2.NAME")
+
+            pTester.expectThat(actualValue).elementAt("_joins").elementAt(0).elementAt("_sqlStorage").equals("join TABLE1 on TABLE1.NAME = TABLE2.NAME").assert();
+            pTester.expectThat(actualValue).elementAt("_joins").elementAt(0).elementAt("preparedValues").hasLength(0).assert();
+        }
+    ),
+]);
+
+
+var subqueryAsFieldTests = new TestSuite("SqlLib.subqueryAsField", [
+    new Test("Test if a Subselect as field works if pValue is provided. This should be added as subselect.",
+        function(pTester)
+        {
+            var subQuery = newSelect("NAME")
+                                    .from("ORGANISATION")
+                                    .where("ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
+                                    .and("PERSON.FIRSTNAME", "val1") // test if the value is added at the correct place
+
+            var actualValue = new SqlBuilder().where(subQuery, "val2", "# = ?", SQLTYPES.VARCHAR)
+                                         .and("PERSON.FIRSTNAME", "val3");
+
+
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("_sqlStorage").equals(" ( ( select NAME from ORGANISATION where ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID and PERSON.FIRSTNAME = ? ) = ? )  and PERSON.FIRSTNAME = ?").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").hasLength(3).assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").elementAt(0).elementAt(0).equals("val1").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").elementAt(1).elementAt(0).equals("val2").assert();
+            pTester.expectThat(actualValue).elementAt("_where").elementAt("preparedValues").elementAt(2).elementAt(0).equals("val3").assert();
+        }
+    ),
+
+    new Test("Test if a Subselect as field should error if no SQLTYPE is provided.",
+        function(pTester)
+        {
+            pTester.expectThat(function() {
+                var subQuery = newSelect("NAME")
+                                .from("ORGANISATION")
+                                .where("ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
+                                .and("PERSON.FIRSTNAME", "val1") // test if the value is added at the correct place
+                new SqlBuilder().where(subQuery, "val2", "# = ?");
+            }).throwsException(SqlBuilder._ERROR_SUBSELECT_AS_FIELD_NO_FIELD_TYPE()).assert();
+        }
+    ),
+
+    new Test("Test if a Subselect as field should error if it is not a full select.",
+        function(pTester)
+        {
+            pTester.expectThat(function() {
+                var subQuery = newSelect("NAME")
+                                .where("ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
+                                .and("PERSON.FIRSTNAME", "val1") // test if the value is added at the correct place
+
+                new SqlBuilder().where(subQuery, "val2", "# = ?", SQLTYPES.VARCHAR);
+            }).throwsException(SqlBuilder._ERROR_SUBSELECT_AS_FIELD_NOT_COMPLETE()).assert();
+        }
+    ),
+]);
+
+
+var conditionFormatTests = new TestSuite("SqlLib.conditionFormat", [
+    new Test("pCondition should not fail if # an ? exist in correct order",
+        function(pTester)
+        {
+            pTester.expectThat(function() {
+                new SqlBuilder()
+                    .where("PERSON.FIRSTNAME", "val1", "# = ?")
+                    .and("PERSON.FIRSTNAME", "val1", "asdf # fdsa=asdf ?fdas")
+                    ;
+            }).not().throwsException().assert();
+        }
+    ),
+
+    new Test("pCondition should not fail if # an ? exist in correct order and there are additional, escaped # and ?",
+        function(pTester)
+        {
+            pTester.expectThat(function() {
+                new SqlBuilder().where("PERSON.FIRSTNAME", "val1", "\\? # \\#= ?");
+            }).not().throwsException().assert();
+        }
+    ),
+
+    new Test("pCondition should not fail if only ? exists",
+        function(pTester)
+        {
+            pTester.expectThat(function() {
+                new SqlBuilder().where("PERSON.FIRSTNAME", "val1", "?")
+            }).not().throwsException().assert();
+        }
+    ),
+
+    new Test("pCondition should fail if more than one ? exists",
+        function(pTester)
+        {
+            pTester.expectThat(function() {
+                new SqlBuilder().where("PERSON.FIRSTNAME", "val1", "? test ?")
+            }).throwsException(SqlBuilder._ERROR_CONDITION_WRONG_FORMAT()).assert();
+        }
+    ),
+
+    new Test("pCondition should fail if more than one # exists",
+        function(pTester)
+        {
+            pTester.expectThat(function() {
+                new SqlBuilder().where("PERSON.FIRSTNAME", "val1", "# test #")
+            }).throwsException(SqlBuilder._ERROR_CONDITION_WRONG_FORMAT()).assert();
+        }
+    ),
+
+    new Test("pCondition should fail if # and ? are in wrong order",
+        function(pTester)
+        {
+            pTester.expectThat(function() {
+                new SqlBuilder().where("PERSON.FIRSTNAME", "val1", "? = #")
+            }).throwsException(SqlBuilder._ERROR_CONDITION_WRONG_FORMAT()).assert();
+        }
+    ),
+]);
+
+
+var subqueryAliasTests = new TestSuite("SqlLib.subqueryAlias", [
+    new Test("subselectAlias should be added for subquery in .select",
+        function(pTester)
+        {
+            var subQuery = newSelect("NAME")
+                                    .from("ORGANISATION")
+                                    .where("ORGANISATION.NAME", "Adito")
+                                    .subselectAlias("testAlias")
+
+            var actualValue = new SqlBuilder()
+                .select([subQuery, "FIRSTNAME"])
+                .from("PERSON")
+
+            pTester.expectThat(actualValue).elementAt("_select").elementAt("_sqlStorage").equals("select (select NAME from ORGANISATION where ORGANISATION.NAME = ?) testAlias, FIRSTNAME").assert();
+            pTester.expectThat(actualValue).elementAt("_select").elementAt("preparedValues").hasLength(1).assert();
+        }
+    ),
+
+    new Test("subselectAlias should be added for subquery in .from",
+        function(pTester)
+        {
+            var subQuery = newSelect("NAME")
+                                    .from("ORGANISATION")
+                                    .where("ORGANISATION.NAME", "Adito")
+                                    .subselectAlias("testAlias")
+
+            var actualValue = new SqlBuilder()
+                .from(subQuery)
+
+            pTester.expectThat(actualValue).elementAt("_from").elementAt("_sqlStorage").equals("from (select NAME from ORGANISATION where ORGANISATION.NAME = ?) testAlias").assert();
+            pTester.expectThat(actualValue).elementAt("_from").elementAt("preparedValues").hasLength(1).assert();
+        }
+    ),
+
+    new Test("subselectAlias should be overruled by the param in in .from",
+        function(pTester)
+        {
+            var subQuery = newSelect("NAME")
+                                    .from("ORGANISATION")
+                                    .where("ORGANISATION.NAME", "Adito")
+                                    .subselectAlias("testAlias")
+
+            var actualValue = new SqlBuilder()
+                .from(subQuery, "overwriteAlias")
+
+            pTester.expectThat(actualValue).elementAt("_from").elementAt("_sqlStorage").equals("from (select NAME from ORGANISATION where ORGANISATION.NAME = ?) overwriteAlias").assert();
+            pTester.expectThat(actualValue).elementAt("_from").elementAt("preparedValues").hasLength(1).assert();
+        }
+    ),
+
+    new Test("subselectAlias should be added for subquery in .join",
+        function(pTester)
+        {
+            var subQuery = newSelect("NAME, ORGANISATIONID")
+                                    .from("ORGANISATION")
+                                    .where("ORGANISATION.NAME", "Adito")
+                                    .subselectAlias("testAlias")
+
+            var actualValue = new SqlBuilder()
+                .from("CONTACT")
+                .join(subQuery, "testAlias.ORGANISATIONID = ORGANISATION_ID")
+                .join(subQuery, "testAlias.ORGANISATIONID = ORGANISATION_ID", "overwriteAlias")
+
+            pTester.expectThat(actualValue).elementAt("_joins").elementAt(0).elementAt("_sqlStorage").equals("join (select NAME, ORGANISATIONID from ORGANISATION where ORGANISATION.NAME = ?) testAlias on testAlias.ORGANISATIONID = ORGANISATION_ID").assert();
+            pTester.expectThat(actualValue).elementAt("_joins").elementAt(0).elementAt("preparedValues").hasLength(1).assert();
+
+            pTester.expectThat(actualValue).elementAt("_joins").elementAt(1).elementAt("_sqlStorage").equals("join (select NAME, ORGANISATIONID from ORGANISATION where ORGANISATION.NAME = ?) overwriteAlias on testAlias.ORGANISATIONID = ORGANISATION_ID").assert();
+            pTester.expectThat(actualValue).elementAt("_joins").elementAt(1).elementAt("preparedValues").hasLength(1).assert();
+        }
+    ),
+]);
+
+
+var tester = new Tester("Test SqlBuilder");
+tester.test(newSelectTests);
+tester.test(validAndUsageTests);
+tester.test(validOrUsageTests);
+tester.test(combinedAndOrTests);
+tester.test(ifSetTests);
+tester.test(dbWrapperTests);
+tester.test(mandatoryErrorTests);
+tester.test(inStatementTests);
+tester.test(testConstantFunctions);
+tester.test(selectTests);
+tester.test(joinTests);
+tester.test(subqueryAsFieldTests);
+tester.test(conditionFormatTests);
+tester.test(subqueryAliasTests);
+
+tester.summary();
+
+result.object(tester.getResults());
\ No newline at end of file
diff --git a/process/SqlLib_tests/process.js b/process/SqlLib_tests/process.js
deleted file mode 100644
index 924162e2a4ef98f5dc93515f648fdad355ced736..0000000000000000000000000000000000000000
--- a/process/SqlLib_tests/process.js
+++ /dev/null
@@ -1,1015 +0,0 @@
-import("system.db");
-import("system.vars");
-import("system.translate");
-import("system.logging");
-import("system.SQLTYPES");
-import("Sql_lib");
-import("UnitTest_lib");
-
-var newSelectTests = new TestSuite([
-    ["newSelect with just a string schould just use it as select", function(pTester)
-    {
-        var actual = newSelect("MySuper, Field, String")
-
-        pTester.assert("select MySuper, Field, String", actual._select._sqlStorage, "prepared sql");
-        pTester.assert(0, actual._select.preparedValues.length, "number of params");
-    }],
-
-    ["newSelect with just an array of strings schould just use them concatenated as select", function(pTester)
-    {
-        var actual = newSelect(["MySuper", "Field", "String"])
-
-        pTester.assert("select MySuper, Field, String", actual._select._sqlStorage, "prepared sql");
-        pTester.assert(0, actual._select.preparedValues.length, "number of params");
-    }],
-
-    ["newSelect with just an SqlBuilder should use it as subselect", function(pTester)
-    {
-        var actual = newSelect(new SqlBuilder().select("PERSONID").from("PERSON").where("PERSON.FIRSTNAME", "Fritz"))
-
-        pTester.assert("select (select PERSONID from PERSON where PERSON.FIRSTNAME = ?)", actual._select._sqlStorage, "prepared sql");
-        pTester.assert(1, actual._select.preparedValues.length, "number of params");
-    }],
-
-    ["newSelect an array of Strings and SqlBuilders should add them all", function(pTester)
-    {
-        var actual = newSelect(["MySuper", "Field", "String", new SqlBuilder().select("PERSONID").from("PERSON").where("PERSON.FIRSTNAME", "Fritz")])
-
-        pTester.assert("select MySuper, Field, String, (select PERSONID from PERSON where PERSON.FIRSTNAME = ?)", actual._select._sqlStorage, "prepared sql");
-        pTester.assert(1, actual._select.preparedValues.length, "number of params");
-    }],
-]);
-
-var validAndUsageTests = new TestSuite([
-    ["and should just add simple strings as condition just as it is", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where("PERSON.FIRSTNAME = 'Tim'") // NOTE: you should not do this as this does not add a real prepared statement with "?"
-                            .and("PERSON.LASTNAME = 'Admin'")
-
-        pTester.assert("PERSON.FIRSTNAME = 'Tim' and PERSON.LASTNAME = 'Admin'", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(0, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["and should add a condition if field and value are passed", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where("PERSON.FIRSTNAME", "Tim")
-                            .and("PERSON.LASTNAME", "Admin")
-                            
-        pTester.assert("PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ?", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(2, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["and should add a condition if value is an empty string", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where("PERSON.FIRSTNAME", "")
-                            .and("PERSON.LASTNAME", "")
-                            
-        pTester.assert("PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ?", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(2, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["and should add a condition if field and value as jdito-var are passed", function(pTester)
-    {
-        vars.set("$global.TestUnitValueName", "Tim");
-        var actual = new SqlBuilder()
-                            .where("PERSON.FIRSTNAME", "$global.TestUnitValueName")
-                            
-        pTester.assert("( PERSON.FIRSTNAME = 'Tim' ) ", actual.toString());
-    }],
-
-    ["$ should be escaped by a second $ and the string should therefore just be used as string and not as jdito variable", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where("PERSON.FIRSTNAME", "$$mySuperString")
-                            
-        pTester.assert("( PERSON.FIRSTNAME = '$mySuperString' ) ", actual.toString());
-    }],
-
-    ["and should add a condition if value is a jdito-var containing an empty string", function(pTester)
-    {
-        vars.set("$global.TestingVarEmptyString", "");
-        var actual = new SqlBuilder()
-                            .where("PERSON.FIRSTNAME", "$global.TestingVarEmptyString")
-                            .and("PERSON.LASTNAME", "$global.TestingVarEmptyString")
-                            
-        pTester.assert("PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ?", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(2, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["and should use the given condition pattern", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where("PERSON.FIRSTNAME", "Tim", "# <> ?")
-                            .and("PERSON.LASTNAME", "Admin")
-                            
-        pTester.assert("PERSON.FIRSTNAME <> ? and PERSON.LASTNAME = ?", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(2, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["and should use the given SQLTYPE if provided", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where("PERSON.FIRSTNAME", 6, null, SQLTYPES.INTEGER)
-                            .and("PERSON.LASTNAME", 7, undefined, SQLTYPES.INTEGER)
-                            .and("PERSON.LASTNAME", 8, "# <> ?", SQLTYPES.INTEGER)
-        
-        pTester.assert("PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ? and PERSON.LASTNAME <> ?", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(3, actual._where.preparedValues.length, "number of params");
-        pTester.assert(SQLTYPES.INTEGER, actual._where.preparedValues[0][1], "sql type of param 1 is the provided type");
-        pTester.assert(SQLTYPES.INTEGER, actual._where.preparedValues[1][1], "sql type of param 2 is the provided type");
-        pTester.assert(SQLTYPES.INTEGER, actual._where.preparedValues[2][1], "sql type of param 3 is the provided type");
-    }],
-
-    ["and only with a prepared statement-array should just use it as it is", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where([
-                                "PERSON.FIRSTNAME = ?", [["Peter", 12]]
-                            ])
-                            .and([
-                                "exists (select * FROM CONTACT where PERSON_ID = PERSONID)", []
-                            ])
-                            
-        pTester.assert(" ( PERSON.FIRSTNAME = ? )  and  ( exists (select * FROM CONTACT where PERSON_ID = PERSONID) ) ", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(1, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["and only with a SqlBulder object should just use the condition from it", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where(new SqlBuilder()
-                                .select("TEST")
-                                .from("PERSON")
-                                .where("PERSON.FIRSTNAME", "Tim")
-                                .and("PERSON.LASTNAME", "Admin"))
-                            
-        pTester.assert(" ( PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ? ) ", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(2, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["and with a builder as value and condition (field is null|undefined) should add the whole builder as subquery", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where(null, new SqlBuilder()
-                                .select("FIRSTNAME")
-                                .from("PERSON")
-                                .where("PERSON.FIRSTNAME", "Tim")
-                                .and("PERSON.LASTNAME", "Admin"),
-                                "exists ?")  // Note: you can use SqlBuilder.EXISTS() instead of  "exists ?"
-        
-        pTester.assert("exists  ( select FIRSTNAME from PERSON where PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ? ) ", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(2, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["and with a builder as value and field should add the whole builder as subquery with field = (subquery)", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where("PERSON.FIRSTNAME", new SqlBuilder()
-                                .select("FIRSTNAME")
-                                .from("PERSON")
-                                .where("PERSON.FIRSTNAME", "Tim")
-                                .and("PERSON.LASTNAME", "Admin"))
-        
-        pTester.assert("PERSON.FIRSTNAME =  ( select FIRSTNAME from PERSON where PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ? ) ", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(2, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["and with a prepared statement-array as value and field is null|undefined should add the whole statement as subquery", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where(null, ["select FIRSTNAME from PERSON.FIRSTNAME = ?", [["Peter", 12]]], "exists ?")
-                            .and(null, ["exists (select FIRSTNAME from PERSON.FIRSTNAME = ?)", [["Peter", 12]]]) // also without pCond it should work as the condition could be included in the prep statement
-        
-        pTester.assert("exists  ( select FIRSTNAME from PERSON.FIRSTNAME = ? )  and  ( exists (select FIRSTNAME from PERSON.FIRSTNAME = ?) ) ", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(2, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["and with a prepared statement-array as value and field should add the whole statement as subquery with field = (subquery)", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where("PERSON.FIRSTNAME", ["select FIRSTNAME from PERSON.FIRSTNAME = ?", [["Peter", 12]]])
-        
-        pTester.assert("PERSON.FIRSTNAME =  ( select FIRSTNAME from PERSON.FIRSTNAME = ? ) ", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(1, actual._where.preparedValues.length, "number of params");
-    }]
-]);
-
-var validOrUsageTests = new TestSuite([
-    ["or should just add simple strings as condition just as it is", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where("PERSON.FIRSTNAME = 'Tim'") // NOTE: you should not do this as this does not add a real prepared statement with "?"
-                            .or("PERSON.LASTNAME = 'Admin'")
-
-        pTester.assert("PERSON.FIRSTNAME = 'Tim' or PERSON.LASTNAME = 'Admin'", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(0, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["or should add a condition if field and value are passed", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where("PERSON.FIRSTNAME", "Tim")
-                            .or("PERSON.LASTNAME", "Admin")
-                            
-        pTester.assert("PERSON.FIRSTNAME = ? or PERSON.LASTNAME = ?", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(2, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["or should use the given condition pattern", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where("PERSON.FIRSTNAME", "Tim", "# <> ?")
-                            .or("PERSON.LASTNAME", "Admin")
-                            
-        pTester.assert("PERSON.FIRSTNAME <> ? or PERSON.LASTNAME = ?", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(2, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["or should use the given SQLTYPE if provided", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where("PERSON.FIRSTNAME", 6, null, SQLTYPES.INTEGER)
-                            .or("PERSON.LASTNAME", 7, undefined, SQLTYPES.INTEGER)
-                            .or("PERSON.LASTNAME", 8, "# <> ?", SQLTYPES.INTEGER)
-                            
-        pTester.assert("PERSON.FIRSTNAME = ? or PERSON.LASTNAME = ? or PERSON.LASTNAME <> ?", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(3, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["or only with a prepared statement-array should just use it as it is", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where([
-                                "PERSON.FIRSTNAME = ?", [["Peter", 12]]
-                            ])
-                            .or([
-                                "exists (select * FROM CONTACT where PERSON_ID = PERSONID)", []
-                            ])
-                            
-        pTester.assert(" ( PERSON.FIRSTNAME = ? )  or  ( exists (select * FROM CONTACT where PERSON_ID = PERSONID) ) ", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(1, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["or only with a SqlBulder object should just use the condition from it", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where(new SqlBuilder()
-                                .where("PERSON.FIRSTNAME", "Tim")
-                                .or("PERSON.LASTNAME", "Admin"))
-                            
-        pTester.assert(" ( PERSON.FIRSTNAME = ? or PERSON.LASTNAME = ? ) ", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(2, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["or with a builder as value and condition (field is null|undefined) should add the whole builder as subquery", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where(null, new SqlBuilder()
-                                .select("FIRSTNAME")
-                                .from("PERSON")
-                                .where("PERSON.FIRSTNAME", "Tim")
-                                .or("PERSON.LASTNAME", "Admin"),
-                                "exists ?")
-        
-        pTester.assert("exists  ( select FIRSTNAME from PERSON where PERSON.FIRSTNAME = ? or PERSON.LASTNAME = ? ) ", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(2, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["or with a builder as value and field should add the whole builder as subquery with field = (subquery)", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where("PERSON.FIRSTNAME", new SqlBuilder()
-                                .select("FIRSTNAME")
-                                .from("PERSON")
-                                .where("PERSON.FIRSTNAME", "Tim")
-                                .or("PERSON.LASTNAME", "Admin"))
-        
-        pTester.assert("PERSON.FIRSTNAME =  ( select FIRSTNAME from PERSON where PERSON.FIRSTNAME = ? or PERSON.LASTNAME = ? ) ", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(2, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["or with a prepared statement-array as value and field is null|undefined should add the whole statement as subquery", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where(null, ["select FIRSTNAME from PERSON.FIRSTNAME = ?", [["Peter", 12]]], "exists ?")
-                            .or(null, ["exists (select FIRSTNAME from PERSON.FIRSTNAME = ?)", [["Peter", 12]]]) // also without pCond it should work as the condition could be included in the prep statement
-        
-        pTester.assert("exists  ( select FIRSTNAME from PERSON.FIRSTNAME = ? )  or  ( exists (select FIRSTNAME from PERSON.FIRSTNAME = ?) ) ", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(2, actual._where.preparedValues.length, "number of params");
-    }]
-]);
-
-var combinedAndOrTests = new TestSuite([
-    ["or combining two and", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                        .where("PERSON.FIRSTNAME", "Tim")
-                        .and("PERSON.LASTNAME", "Admin")
-                        .or(new SqlBuilder()
-                                .where("PERSON.FIRSTNAME", "Peter")
-                                .and("PERSON.LASTNAME", "Müller"))
-        
-        pTester.assert("(PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ?) or  ( PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ? ) ", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(4, actual._where.preparedValues.length, "number of params");
-    }],
-    
-    ["and combining two or", function(pTester)
-    {                 
-        var actual = new SqlBuilder()
-                        .where(new SqlBuilder()
-                                .where("PERSON.FIRSTNAME", "Tim")
-                                .or("PERSON.LASTNAME", "Admin"))
-                        .and(new SqlBuilder()
-                                .where("PERSON.FIRSTNAME", "Peter")
-                                .or("PERSON.LASTNAME", "Müller"))
-        
-        pTester.assert(" ( PERSON.FIRSTNAME = ? or PERSON.LASTNAME = ? )  and  ( PERSON.FIRSTNAME = ? or PERSON.LASTNAME = ? ) ", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(4, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["some and/or combinations in one select", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                        .where("PERSON.FIRSTNAME", "Tim")
-                        .or("PERSON.FIRSTNAME", "Franz")
-                        .and("PERSON.LASTNAME", "Admin")
-                        .and(new SqlBuilder()
-                                .where("PERSON.FIRSTNAME", "Peter")
-                                .or("PERSON.LASTNAME", "Müller"))
-                        .or("PERSON.FIRSTNAME", "Franz")
-                        .and("PERSON.FIRSTNAME", "Franz")
-                        .or(new SqlBuilder()
-                                .where("PERSON.FIRSTNAME", "Peter")
-                                .and("PERSON.LASTNAME", "Müller")
-                                .and(new SqlBuilder()
-                                        .where("PERSON.FIRSTNAME", "Peter")
-                                        .or("PERSON.LASTNAME", "Müller")))
-                        
-        pTester.assert("PERSON.FIRSTNAME = ? or PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ? and  ( PERSON.FIRSTNAME = ? or PERSON.LASTNAME = ? )  or (PERSON.FIRSTNAME = ?) and PERSON.FIRSTNAME = ? or  ( PERSON.FIRSTNAME = ? and PERSON.LASTNAME = ? and  ( PERSON.FIRSTNAME = ? or PERSON.LASTNAME = ? )  ) ", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(11, actual._where.preparedValues.length, "number of params");
-    }]
-]);
-
-var ifSetTests = new TestSuite([
-    ["simple and if set with all types of empty values.", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                        .whereIfSet("PERSON.LASTNAME", null)
-                        .andIfSet("PERSON.LASTNAME", undefined)
-                        
-        pTester.assert("", actual._where._sqlStorage, "no sql should be added");
-        pTester.assert(0, actual._where.preparedValues.length, "no params should be added");
-    }],
-
-    ["jdito variable with null", function(pTester)
-    {
-        vars.set("$global.TestingVarNull", null);
-        
-        var actual = new SqlBuilder()
-                        .whereIfSet("PERSON.FIRSTNAME", "$global.TestingVarNull")
-                        
-        pTester.assert("", actual._where._sqlStorage, "no sql should be added");
-        pTester.assert(0, actual._where.preparedValues.length, "no params should be added");
-    }],
-
-    ["empty simple conditions", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                        .whereIfSet("")
-                        .andIfSet(["", []])
-                        .andIfSet(new SqlBuilder())
-                        
-        pTester.assert("", actual._where._sqlStorage, "no sql should be added");
-        pTester.assert(0, actual._where.preparedValues.length, "no params should be added");
-    }],
-
-    ["empty subqueries", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                        .whereIfSet("PERSON.FIRSTNAME", ["", []])
-                        .andIfSet("PERSON.LASTNAME", new SqlBuilder())
-                        
-        pTester.assert("", actual._where._sqlStorage, "no sql should be added");
-        pTester.assert(0, actual._where.preparedValues.length, "no params should be added");
-    }]
-]);
-
-function cleanWrapperTests()
-{
-    try {
-        db.runStatement("drop table SQL_LIB_TEST_TABLE");
-    } catch(ex) {}
-    
-    try {
-        db.deleteData("PERSON", "PERSONID in ('TEST-5', 'TEST-6')")
-    } catch(ex) {}
-    
-}
-
-var dbWrapperTests = new TestSuite([
-    ["cell should load only one value", function(pTester)
-    {
-        var builder = new SqlBuilder()
-                            .select("FIRSTNAME")
-                            .from("PERSON")
-                            .where("PERSON.PERSONID", "TEST-5")
-        pTester.assert("Franz", builder.cell());
-    }],
-
-    ["cell should just return '' if no condition set but pExecuteOnlyIfConditionExists is true", function(pTester)
-    {
-        var builder = new SqlBuilder()
-                            .select("FIRSTNAME")
-                            .from("PERSON")
-        pTester.assert("", builder.cell(true));
-    }],
-
-    ["cell should return a value if no condition set and pExecuteOnlyIfConditionExists is false", function(pTester)
-    {
-        var builder = new SqlBuilder()
-                            .select("FIRSTNAME")
-                            .from("PERSON");
-                            
-        var actual = builder.cell(false)
-        pTester.assert(true, actual !== "" && actual !== null && actual !== undefined);
-    }],
-
-    ["array should load an array of values", function(pTester)
-    {
-        var builder = new SqlBuilder()
-                            .select("FIRSTNAME, LASTNAME")
-                            .from("PERSON")
-                            .where("PERSON.PERSONID", "TEST-5");
-                            
-        var actual = builder.array(db.ROW);
-        pTester.assert("Franz", actual[0], "firstname should be 'Franz'");
-        pTester.assert("Müller", actual[1], "lastname should be 'Müller'");
-    }],
-
-    ["array should return an empty array if no condition set but pExecuteOnlyIfConditionExists is true", function(pTester)
-    {
-        var builder = new SqlBuilder()
-                            .select("FIRSTNAME, LASTNAME")
-                            .from("PERSON")
-                            
-        var actual = builder.array(db.ROW, true);
-        pTester.assert(0, actual.length);
-    }],
-
-    ["array should return a non-empty array if no condition set and pExecuteOnlyIfConditionExists is false", function(pTester)
-    {
-        var builder = new SqlBuilder()
-                            .select("FIRSTNAME, LASTNAME")
-                            .from("PERSON")
-                            
-        var actual = builder.array(db.ROW, false);
-        pTester.assert(true, actual.length > 0);
-    }],
- 
-    ["table should load an array of arrays with values", function(pTester)
-    {
-        var builder = new SqlBuilder()
-                            .select("FIRSTNAME, LASTNAME")
-                            .from("PERSON")
-                            .where("PERSON.PERSONID", "TEST-5")
-                            .or("PERSON.PERSONID", "TEST-6")
-                            .orderBy("PERSONID asc");
-                            
-        var actual = builder.table();
-        pTester.assert("Franz", actual[0][0], "firstname should be 'Franz'");
-        pTester.assert("Müller", actual[0][1], "lastname should be 'Müller'");
-        
-        pTester.assert("Marco", actual[1][0], "firstname should be 'Marco'");
-        pTester.assert("Polo", actual[1][1], "lastname should be 'Polo'");
-    }],
-
-    ["table should return an empty array if no condition set but pExecuteOnlyIfConditionExists is true", function(pTester)
-    {
-        var builder = new SqlBuilder()
-                            .select("FIRSTNAME, LASTNAME")
-                            .from("PERSON");
-                            
-        var actual = builder.table(true);
-        pTester.assert(0, actual.length);
-    }],
-
-    ["table should return a non-empty array if no condition set and pExecuteOnlyIfConditionExists is false", function(pTester)
-    {
-        var builder = new SqlBuilder()
-                            .select("FIRSTNAME, LASTNAME")
-                            .from("PERSON");
-                            
-        var actual = builder.table(false);
-        pTester.assert(true, actual.length > 0);
-    }],
-
-    ["delete should delete the data and use the from and condition from the builder", function(pTester)
-    {
-        db.deleteData("SQL_LIB_TEST_TABLE", "TESTID = 'TEST-7'");
-        db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-7", "Ludwig", "Fischer"]);
-        
-        var builder = new SqlBuilder()
-                            .from("SQL_LIB_TEST_TABLE")
-                            .where("SQL_LIB_TEST_TABLE.TESTID", "TEST-7");
-                            
-        var deletedRows = builder.deleteData();
-        pTester.assert(1, deletedRows);
-    }],
-
-    ["delete should delete the data from the provided table and use the condition from the builder. It ignores .from if a table is given.", function(pTester)
-    {
-        db.deleteData("SQL_LIB_TEST_TABLE", "TESTID = 'TEST-7'");
-        db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-7", "Ludwig", "Fischer"]);
-        
-        var builder = new SqlBuilder()
-                            .from("PERSON")
-                            .where("SQL_LIB_TEST_TABLE.TESTID", "TEST-7");
-                            
-        var deletedRows = builder.deleteData(false, "SQL_LIB_TEST_TABLE");
-        pTester.assert(1, deletedRows);
-    }],
-
-    ["delete should delete ALL data from a table if the builder has no condition and pExecuteOnlyIfConditionExists is false", function(pTester)
-    {
-        db.deleteData("SQL_LIB_TEST_TABLE", "TESTID in ('TEST-7', 'TEST-8')");
-        db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-7", "Ludwig", "Fischer"]);
-        db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-8", "Ludwig", "Fischer"]);
-        
-        var builder = new SqlBuilder()
-                            .from("SQL_LIB_TEST_TABLE")
-                            
-        var deletedRows = builder.deleteData(false);
-        pTester.assert(2, deletedRows);
-    }],
-
-    ["delete should delete NO data from a table if the builder has no condition and pExecuteOnlyIfConditionExists is true", function(pTester)
-    {
-        db.deleteData("SQL_LIB_TEST_TABLE", "TESTID in ('TEST-7', 'TEST-8')");
-        db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-7", "Ludwig", "Fischer"]);
-        db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-8", "Ludwig", "Fischer"]);
-        
-        var builder = new SqlBuilder()
-                            .from("SQL_LIB_TEST_TABLE")
-                            
-        var deletedRows = builder.deleteData(true);
-        pTester.assert(0, deletedRows);
-    }],
-
-    ["update should update the data and use the from and condition from the builder", function(pTester)
-    {
-        db.deleteData("SQL_LIB_TEST_TABLE", "TESTID = 'TEST-7'");
-        db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-7", "Ludwig", "Fischer"]);
-        
-        var builder = new SqlBuilder()
-                            .from("SQL_LIB_TEST_TABLE")
-                            .where("SQL_LIB_TEST_TABLE.TESTID", "TEST-7");
-                            
-        builder.updateData(false, undefined, ["FIRSTNAME"], null, ["Fritz"]);
-        
-        var actual = db.cell("select FIRSTNAME from SQL_LIB_TEST_TABLE where SQL_LIB_TEST_TABLE.TESTID = 'TEST-7'")
-        
-        pTester.assert("Fritz", actual);
-    }],
-
-    ["update should update the data from the provided table and use the condition from the builder. It ignores .from if a table is given.", function(pTester)
-    {
-        db.deleteData("SQL_LIB_TEST_TABLE", "TESTID = 'TEST-7'");
-        db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-7", "Ludwig", "Fischer"]);
-        
-        var builder = new SqlBuilder()
-                            .from("PERSON")
-                            .where("SQL_LIB_TEST_TABLE.TESTID", "TEST-7");
-                            
-        builder.updateData(false, "SQL_LIB_TEST_TABLE", ["FIRSTNAME"], null, ["Fritz"]);
-        
-        var actual = db.cell("select FIRSTNAME from SQL_LIB_TEST_TABLE where SQL_LIB_TEST_TABLE.TESTID = 'TEST-7'")
-        
-        pTester.assert("Fritz", actual);
-    }],
-
-    ["update should update ALL data from a table if the builder has no condition and pExecuteOnlyIfConditionExists is false", function(pTester)
-    {
-        db.deleteData("SQL_LIB_TEST_TABLE", "TESTID in ('TEST-7', 'TEST-8')");
-        db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-7", "Ludwig", "Fischer"]);
-        db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-8", "Franz", "Fischer"]);
-        
-        var builder = new SqlBuilder()
-                            .from("SQL_LIB_TEST_TABLE")
-                            
-        builder.updateData(false, undefined, ["FIRSTNAME"], null, ["Fritz"]);
-        
-        var actual1 = db.cell("select FIRSTNAME from SQL_LIB_TEST_TABLE where SQL_LIB_TEST_TABLE.TESTID = 'TEST-7'")
-        var actual2 = db.cell("select FIRSTNAME from SQL_LIB_TEST_TABLE where SQL_LIB_TEST_TABLE.TESTID = 'TEST-8'")
-        
-        pTester.assert("Fritz", actual1, "TEST-7 should have Firstname Fritz");        
-        pTester.assert("Fritz", actual2, "TEST-8 should have Firstname Fritz");
-    }],
-
-    ["update should update NO data from a table if the builder has no condition and pExecuteOnlyIfConditionExists is true", function(pTester)
-    {
-        db.deleteData("SQL_LIB_TEST_TABLE", "TESTID in ('TEST-7', 'TEST-8')")        
-        db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-7", "Ludwig", "Fischer"]);
-        db.insertData("SQL_LIB_TEST_TABLE", ["TESTID", "FIRSTNAME", "LASTNAME"], null, ["TEST-8", "Franz", "Fischer"]);
-        
-        var builder = new SqlBuilder()
-                            .from("SQL_LIB_TEST_TABLE")
-                            
-        builder.updateData(true, undefined, ["FIRSTNAME"], null, ["Fritz"]);
-        
-        var actual1 = db.cell("select FIRSTNAME from SQL_LIB_TEST_TABLE where SQL_LIB_TEST_TABLE.TESTID = 'TEST-7'")
-        var actual2 = db.cell("select FIRSTNAME from SQL_LIB_TEST_TABLE where SQL_LIB_TEST_TABLE.TESTID = 'TEST-8'")
-        
-        pTester.assert("Ludwig", actual1, "TEST-7 should have Firstname Ludwig");        
-        pTester.assert("Franz", actual2, "TEST-8 should have Firstname Franz");
-    }]
-], function preAll() 
-{
-    // remove data which may exist if previous test-run failed and postAll was not executed
-    cleanWrapperTests()
-    
-    // add table for save testing of deletes
-    db.runStatement("create table SQL_LIB_TEST_TABLE (TESTID varchar(36), FIRSTNAME varchar(100), LASTNAME varchar(100))");
-    
-    // add test persons
-    db.insertData("PERSON", ["PERSONID", "FIRSTNAME", "LASTNAME", "USER_NEW", "DATE_NEW"], null, ["TEST-5", "Franz", "Müller", "testuser", vars.get("$sys.date")])
-    db.insertData("PERSON", ["PERSONID", "FIRSTNAME", "LASTNAME", "USER_NEW", "DATE_NEW"], null, ["TEST-6", "Marco", "Polo", "testuser", vars.get("$sys.date")])
-}, undefined, undefined, function postAll()
-{
-    cleanWrapperTests()
-})
-
-var mandatoryErrorTests = new TestSuite([
-// and
-    ["and without parameter should error", function(pTester)
-    {
-        new SqlBuilder().where().or();
-    }, SqlBuilder._ERROR_NO_PARAMETER_PROVIDED()],
-
-    ["and with null as value should error", function(pTester)
-    {
-        new SqlBuilder().where().or("PERSON.FIRSTNAME", null);
-    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY()],
-
-    ["and with undefined as value should error", function(pTester)
-    {
-        new SqlBuilder().where().or("PERSON.FIRSTNAME", undefined);
-    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY()],
-
-    ["and with a jdito-var containing null should error", function(pTester)
-    {
-        vars.set("$global.TestingVarNull", null);
-        
-        new SqlBuilder().where().or("PERSON.FIRSTNAME", "$global.TestingVarNull");
-    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY_JDITO_VAR()],
-
-    ["and with an empty sql-builder as subquery should error", function(pTester)
-    {        
-        new SqlBuilder().where().or("PERSON.FIRSTNAME", new SqlBuilder());
-    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY()],
-
-    ["and with an empty prepared statement as subquery should error", function(pTester)
-    {        
-        new SqlBuilder().where().or("PERSON.FIRSTNAME", ["", []]);
-    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY()],
-
-
-// or
-    ["or without parameter should error", function(pTester)
-    {
-        new SqlBuilder().where().or();
-    }, SqlBuilder._ERROR_NO_PARAMETER_PROVIDED()],
-
-    ["or with null as value should error", function(pTester)
-    {
-        new SqlBuilder().where().or("PERSON.FIRSTNAME", null);
-    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY()],
-
-    ["or with undefined as value should error", function(pTester)
-    {
-        new SqlBuilder().where().or("PERSON.FIRSTNAME", undefined);
-    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY()],
-
-    ["or with a jdito-var containing null should error", function(pTester)
-    {
-        vars.set("$global.TestingVarNull", null);
-        
-        new SqlBuilder().where().or("PERSON.FIRSTNAME", "$global.TestingVarNull");
-    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY_JDITO_VAR()],
-
-    ["or with an empty sql-builder as subquery should error", function(pTester)
-    {        
-        new SqlBuilder().where().or("PERSON.FIRSTNAME", new SqlBuilder());
-    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY()],
-
-    ["or with an empty prepared statement as subquery should error", function(pTester)
-    {        
-        new SqlBuilder().where().or("PERSON.FIRSTNAME", ["", []]);
-    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY()],
-]);
-
-var inStatementTests = new TestSuite([
-    ["simple and in", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where("PERSON.LASTNAME", ["Franz", "Fritz"], SqlBuilder.IN()) // Note: you can use SqlBuilder.IN(), SqlBuilder.NOT_IN(), "# in ?", etc. as 3rd parameter
-                            .or("PERSON.LASTNAME", ["Peter", "Mayer"], SqlBuilder.IN());
-                            
-        pTester.assert(" ( PERSON.LASTNAME in  (?, ?)  )  or  ( PERSON.LASTNAME in  (?, ?)  ) ", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(4, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["simple and not in", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .where("PERSON.LASTNAME", ["Franz", "Fritz"], "# not in ?"); // Note: you can use SqlBuilder.IN(), SqlBuilder.NOT_IN(), "# in ?", etc. as 3rd parameter
-                            
-        pTester.assert(" ( PERSON.LASTNAME not in  (?, ?)  ) ", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(2, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["in with subquery", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                        .where("PERSON.FIRSTNAME", new SqlBuilder()
-                                                        .select("PERSON.FIRSTNAME")
-                                                        .from("PERSON")
-                                                        .where("PERSON.LASTNAME", "Fritz")
-                                                , "# in ?"); // Note: you can use SqlBuilder.IN() instead of "# in ?"
-                            
-        pTester.assert("PERSON.FIRSTNAME in  ( select PERSON.FIRSTNAME from PERSON where PERSON.LASTNAME = ? ) ", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(1, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["in with prepared statement-array", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                        .where("PERSON.FIRSTNAME", ["select PERSON.FIRSTNAME from PERSON where PERSON.LASTNAME = ?", [["Fritz", SQLTYPES.VARCHAR]]]
-                                                , "# in ?"); // Note: you can use SqlBuilder.IN() instead of "# in ?"
-                            
-        pTester.assert("PERSON.FIRSTNAME in  ( select PERSON.FIRSTNAME from PERSON where PERSON.LASTNAME = ? ) ", actual._where._sqlStorage, "prepared sql");
-        pTester.assert(1, actual._where.preparedValues.length, "number of params");
-    }],
-
-    ["andIfSet should ignore empty array", function(pTester)
-    {
-        var actual = new SqlBuilder()
-                            .whereIfSet("PERSON.LASTNAME", []);
-                            
-        pTester.assert("", actual._where._sqlStorage, "prepared sql should be empty");
-        pTester.assert(0, actual._where.preparedValues.length, "number of params should be 0");
-    }],
-
-    ["and should error on an empty array", function(pTester)
-    {
-        new SqlBuilder()
-                .where("PERSON.LASTNAME", []);
-    }, SqlBuilder._ERROR_VALUE_IS_MANDATORY()]
-]);
-
-var testConstantFunctions = new TestSuite([
-    ["SqlBuilder.IN()", function(pTester)
-    {
-        pTester.assert("# in ?", SqlBuilder.IN());
-    }],
-    
-    ["SqlBuilder.NOT_IN()", function(pTester)
-    {
-        pTester.assert("# not in ?", SqlBuilder.NOT_IN());
-    }],
-
-    ["SqlBuilder.EXISTS()", function(pTester)
-    {
-        pTester.assert("exists ?", SqlBuilder.EXISTS());
-    }]
-]);
-
-var selectTests = new TestSuite([
-    ["a sql-builder in a fields-array is translated to sql correctly", function(pTester)
-    {
-        var countSubQuery = newSelect("count(*)")
-                                .from("AB_ATTRIBUTEUSAGE")
-                                .where("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", "myType")
-                                .and("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID");
-    
-        var actual = new SqlBuilder()
-            .select(["AB_ATTRIBUTEID", "AB_ATTRIBUTEUSAGEID", countSubQuery])
-            .from("AB_ATTRIBUTE")
-                        
-        pTester.assert("select AB_ATTRIBUTEID, AB_ATTRIBUTEUSAGEID, (select count(*) from AB_ATTRIBUTEUSAGE where AB_ATTRIBUTEUSAGE.OBJECT_TYPE = ? and AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID)", actual._select._sqlStorage, "prepared select-sql");
-        pTester.assert(1, actual._select.preparedValues.length, "number of params");
-    }],
-
-    ["a sql-builder in from is used as subselect", function(pTester)
-    {
-        var subQuery = newSelect("FIRSTNAME")
-                                .from("PERSON")
-                                .where("PERSON.LASTNAME", "Meier")
-    
-        var actual = new SqlBuilder()
-            .select("*")
-            .from(subQuery)
-            
-        pTester.assert("from (select FIRSTNAME from PERSON where PERSON.LASTNAME = ?)", actual._from._sqlStorage, "prepared select-sql");
-        pTester.assert(1, actual._from.preparedValues.length, "number of params");
-    }]
-]);
-
-var joinTests = new TestSuite([
-    ["SqlBuilder as on-condition should only add the conditon of the builder", function(pTester)
-    {
-        var subQuery = newSelect("NAME")
-                                .from("ORGANISATION")
-                                .where("ORGANISATION.NAME", "Adito")
-    
-        var actual = new SqlBuilder()
-            .select("*")
-            .from("PERSON")
-            .join("ORGANISATION", subQuery)
-            
-        pTester.assert("join ORGANISATION on ORGANISATION.NAME = ?", actual._joins[0]._sqlStorage, "prepared select-sql");
-        pTester.assert(1, actual._joins[0].preparedValues.length, "number of params");
-    }],
-
-    ["SqlBuilder as table for join is added as subselect", function(pTester)
-    {
-        var subQuery = newSelect("NAME")
-                                .from("ORGANISATION")
-                                .where("ORGANISATION.NAME", "Adito")
-    
-        var actual = new SqlBuilder()
-            .select("*")
-            .from("PERSON")
-            .join(subQuery, "orgname.NAME = TABLE2.NAME", "orgname")
-            
-        pTester.assert("join (select NAME from ORGANISATION where ORGANISATION.NAME = ?) orgname on orgname.NAME = TABLE2.NAME", actual._joins[0]._sqlStorage, "prepared select-sql");
-        pTester.assert(1, actual._joins[0].preparedValues.length, "number of params");
-    }],
-
-    ["just use a string also containing a condition as join without additional condition", function(pTester)
-    {
-        var actual = new SqlBuilder()
-            .select("*")
-            .from("PERSON")
-            .join("TABLE1 on TABLE1.NAME = TABLE2.NAME")
-            
-        pTester.assert("join TABLE1 on TABLE1.NAME = TABLE2.NAME", actual._joins[0]._sqlStorage, "prepared select-sql");
-        pTester.assert(0, actual._joins[0].preparedValues.length, "number of params");
-    }]
-]);
-
-var subqueryAsFieldTests = new TestSuite([
-    ["Test if a Subselect as field works if pValue is provided. This should be added as subselect.", function(pTester)
-    {
-        var subQuery = newSelect("NAME")
-                                .from("ORGANISATION")
-                                .where("ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
-                                .and("PERSON.FIRSTNAME", "val1") // test if the value is added at the correct place
-    
-        var actual = new SqlBuilder().where(subQuery, "val2", "# = ?", SQLTYPES.VARCHAR)
-                                     .and("PERSON.FIRSTNAME", "val3");
-                
-            
-        pTester.assert(" ( ( select NAME from ORGANISATION where ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID and PERSON.FIRSTNAME = ? ) = ? )  and PERSON.FIRSTNAME = ?", actual._where._sqlStorage, "prepared select-sql");
-        pTester.assert(3, actual._where.preparedValues.length, "number of params");
-        pTester.assert("val1", actual._where.preparedValues[0][0], "param 1 is correct value");
-        pTester.assert("val2", actual._where.preparedValues[1][0], "param 2 is correct value");
-        pTester.assert("val3", actual._where.preparedValues[2][0], "param 3 is correct value");
-    }],
-
-    ["Test if a Subselect as field should error if no SQLTYPE is provided.", function(pTester)
-    {
-        var subQuery = newSelect("NAME")
-                                .from("ORGANISATION")
-                                .where("ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
-                                .and("PERSON.FIRSTNAME", "val1") // test if the value is added at the correct place
-        new SqlBuilder().where(subQuery, "val2", "# = ?");
-    }, SqlBuilder._ERROR_SUBSELECT_AS_FIELD_NO_FIELD_TYPE()],
-
-    ["Test if a Subselect as field should error if it is not a full select.", function(pTester)
-    {
-        var subQuery = newSelect("NAME")
-                                .where("ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
-                                .and("PERSON.FIRSTNAME", "val1") // test if the value is added at the correct place
-    
-        new SqlBuilder().where(subQuery, "val2", "# = ?", SQLTYPES.VARCHAR);
-    }, SqlBuilder._ERROR_SUBSELECT_AS_FIELD_NOT_COMPLETE()]
-]);
-
-var conditionFormatTests = new TestSuite([
-    ["pCondition should not fail if # an ? exist in correct order", function(pTester)
-    {
-        new SqlBuilder().where("PERSON.FIRSTNAME", "val1", "# = ?")
-                        .and("PERSON.FIRSTNAME", "val1", "asdf # fdsa=asdf ?fdas")
-    }],
-
-    ["pCondition should not fail if # an ? exist in correct order and there are additional, escaped # and ?", function(pTester)
-    {
-        new SqlBuilder().where("PERSON.FIRSTNAME", "val1", "\\? # \\#= ?");
-    }],
-
-    ["pCondition should not fail if only ? exists", function(pTester)
-    {
-        new SqlBuilder().where("PERSON.FIRSTNAME", "val1", "?")
-    }],
-
-    ["pCondition should fail if more than one ? exists", function(pTester)
-    {
-        new SqlBuilder().where("PERSON.FIRSTNAME", "val1", "? test ?")
-    }, SqlBuilder._ERROR_CONDITION_WRONG_FORMAT()],
-
-    ["pCondition should fail if more than one # exists", function(pTester)
-    {
-        new SqlBuilder().where("PERSON.FIRSTNAME", "val1", "# test #")
-    }, SqlBuilder._ERROR_CONDITION_WRONG_FORMAT()],
-
-    ["pCondition should fail if # and ? are in wrong order", function(pTester)
-    {
-        new SqlBuilder().where("PERSON.FIRSTNAME", "val1", "? = #")
-    }, SqlBuilder._ERROR_CONDITION_WRONG_FORMAT()]
-]);
-
-var subqueryAliasTests = new TestSuite([
-    ["subselectAlias should be added for subquery in .select", function(pTester)
-    {
-        var subQuery = newSelect("NAME")
-                                .from("ORGANISATION")
-                                .where("ORGANISATION.NAME", "Adito")
-                                .subselectAlias("testAlias")
-    
-        var actual = new SqlBuilder()
-            .select([subQuery, "FIRSTNAME"])
-            .from("PERSON")
-            
-        pTester.assert("select (select NAME from ORGANISATION where ORGANISATION.NAME = ?) testAlias, FIRSTNAME", actual._select._sqlStorage, "prepared select-sql");
-        pTester.assert(1, actual._select.preparedValues.length, "number of params");
-    }],
-
-    ["subselectAlias should be added for subquery in .from", function(pTester)
-    {
-        var subQuery = newSelect("NAME")
-                                .from("ORGANISATION")
-                                .where("ORGANISATION.NAME", "Adito")
-                                .subselectAlias("testAlias")
-    
-        var actual = new SqlBuilder()
-            .from(subQuery)
-            
-        pTester.assert("from (select NAME from ORGANISATION where ORGANISATION.NAME = ?) testAlias", actual._from._sqlStorage, "prepared select-sql");
-        pTester.assert(1, actual._from.preparedValues.length, "number of params");
-    }],
-
-    ["subselectAlias should be overruled by the param in in .from", function(pTester)
-    {
-        var subQuery = newSelect("NAME")
-                                .from("ORGANISATION")
-                                .where("ORGANISATION.NAME", "Adito")
-                                .subselectAlias("testAlias")
-    
-        var actual = new SqlBuilder()
-            .from(subQuery, "overwriteAlias")
-            
-        pTester.assert("from (select NAME from ORGANISATION where ORGANISATION.NAME = ?) overwriteAlias", actual._from._sqlStorage, "prepared select-sql");
-        pTester.assert(1, actual._from.preparedValues.length, "number of params");
-    }],
-
-    ["subselectAlias should be added for subquery in .join", function(pTester)
-    {
-        var subQuery = newSelect("NAME, ORGANISATIONID")
-                                .from("ORGANISATION")
-                                .where("ORGANISATION.NAME", "Adito")
-                                .subselectAlias("testAlias")
-    
-        var actual = new SqlBuilder()
-            .from("CONTACT")
-            .join(subQuery, "testAlias.ORGANISATIONID = ORGANISATION_ID")
-            .join(subQuery, "testAlias.ORGANISATIONID = ORGANISATION_ID", "overwriteAlias")
-            
-        pTester.assert("join (select NAME, ORGANISATIONID from ORGANISATION where ORGANISATION.NAME = ?) testAlias on testAlias.ORGANISATIONID = ORGANISATION_ID", actual._joins[0]._sqlStorage, "prepared select-sql join 1");
-        pTester.assert(1, actual._joins[0].preparedValues.length, "number of params join 1");
-        
-        pTester.assert("join (select NAME, ORGANISATIONID from ORGANISATION where ORGANISATION.NAME = ?) overwriteAlias on testAlias.ORGANISATIONID = ORGANISATION_ID", actual._joins[1]._sqlStorage, "prepared select-sql join 2");
-        pTester.assert(1, actual._joins[1].preparedValues.length, "number of params join 2");
-    }]
-])
-
-var tester = new Tester("Test SqlBuilder");
-tester.test(newSelectTests);
-tester.test(validAndUsageTests);
-tester.test(validOrUsageTests);
-tester.test(combinedAndOrTests);
-tester.test(ifSetTests);
-tester.test(dbWrapperTests);
-tester.test(mandatoryErrorTests);
-tester.test(inStatementTests);
-tester.test(testConstantFunctions);
-tester.test(selectTests);
-tester.test(joinTests);
-tester.test(subqueryAsFieldTests);
-tester.test(conditionFormatTests);
-tester.test(subqueryAliasTests);
-
-logging.log("-------------------------");
-tester.printResults();
diff --git a/process/SqlMaskingUtils_test/SqlMaskingUtils_test.aod b/process/SqlMaskingUtils_test/SqlMaskingUtils_test.aod
new file mode 100644
index 0000000000000000000000000000000000000000..e3fbcc2640d62d2800c77178cbedea4a1ad35f93
--- /dev/null
+++ b/process/SqlMaskingUtils_test/SqlMaskingUtils_test.aod
@@ -0,0 +1,12 @@
+<?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>SqlMaskingUtils_test</name>
+  <title>[TEST] Sql_lib - SqlMaskingUtils</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <icon>VAADIN:CHECK_CIRCLE</icon>
+  <process>%aditoprj%/process/SqlMaskingUtils_test/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>
diff --git a/process/SqlMaskingUtils_test/process.js b/process/SqlMaskingUtils_test/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..533a1b32e9411f7e4af25222bfb28a6758b5edf3
--- /dev/null
+++ b/process/SqlMaskingUtils_test/process.js
@@ -0,0 +1,158 @@
+import("system.result");
+import("system.db");
+import("Sql_lib");
+import("UnitTest_lib");
+
+function _createDummyMaskingUtil(pDbType)
+{
+    var currentAlias = db.getCurrentAlias();
+    if (!currentAlias)
+        throw new Error("alias required for test is not set");
+    var currentAliasType = db.getDatabaseType(currentAlias);
+    if (!currentAliasType)
+        throw new Error("alias type required for test is not set");
+    var createdObject = new SqlMaskingUtils(currentAlias);
+    createdObject.dbType = pDbType;
+    return createdObject;
+}
+
+var constructorTest = new TestSuite("SqlMaskingUtils.constructor", [
+    new Test("constructor sets correct specified alias",
+        function(pTester)
+        {
+            var currentAlias = db.getCurrentAlias();
+            if (!currentAlias)
+                throw new Error("alias required for test is not set");
+            var createdObject = new SqlMaskingUtils(currentAlias);
+            pTester.expectThat(createdObject.alias).equals(currentAlias).assert();
+        }
+        ),
+    new Test("constructor sets correct default alias",
+        function(pTester)
+        {
+            var currentAlias = db.getCurrentAlias();
+            if (!currentAlias)
+                throw new Error("alias required for test is not set");
+            var createdObject = new SqlMaskingUtils();
+            pTester.expectThat(createdObject.alias).equals(currentAlias).assert();
+        }
+        ),
+    new Test("constructor sets correct alias type",
+        function(pTester)
+        {
+            var currentAlias = db.getCurrentAlias();
+            if (!currentAlias)
+                throw new Error("alias required for test is not set");
+            var currentAliasType = db.getDatabaseType(currentAlias);
+            if (!currentAliasType)
+                throw new Error("alias type required for test is not set");
+            var createdObject = new SqlMaskingUtils(currentAlias);
+            pTester.expectThat(createdObject.dbType).equals(currentAliasType).assert();
+        }
+        ),
+    new Test("overwrite constructors dbType with derby",
+     function(pTester)
+     {
+        var res = _createDummyMaskingUtil(db.DBTYPE_DERBY10);
+        pTester.expectThat(res.dbType).equals(db.DBTYPE_DERBY10).assert();
+        pTester.expectThat(res.alias).isNull().assert();
+     }
+     ),
+    new Test("overwrite constructors dbType with mariaDB",
+        function(pTester)
+        {
+            var res = _createDummyMaskingUtil(db.DBTYPE_MARIADB10);
+            pTester.expectThat(res.dbType).equals(db.DBTYPE_MARIADB10).assert();
+            pTester.expectThat(res.alias).isNull().assert();
+        }
+        ),
+    new Test("overwrite constructors dbType with mySql",
+        function(pTester)
+        {
+            var res = _createDummyMaskingUtil(db.DBTYPE_MYSQL4);
+            pTester.expectThat(res.dbType).equals(db.DBTYPE_MYSQL4).assert();
+            pTester.expectThat(res.alias).isNull().assert();
+        }
+        ),
+    new Test("overwrite constructors dbType with oracle-cluster",
+        function(pTester)
+        {
+            var res = _createDummyMaskingUtil(db.DBTYPE_ORACLE10_CLUSTER);
+            pTester.expectThat(res.dbType).equals(db.DBTYPE_ORACLE10_CLUSTER).assert();
+            pTester.expectThat(res.alias).isNull().assert();
+        }
+        ),
+    new Test("overwrite constructors dbType with oracle-oci",
+        function(pTester)
+        {
+            var res = _createDummyMaskingUtil(db.DBTYPE_ORACLE10_OCI);
+            pTester.expectThat(res.dbType).equals(db.DBTYPE_ORACLE10_OCI).assert();
+            pTester.expectThat(res.alias).isNull().assert();
+        }
+        ),
+    new Test("overwrite constructors dbType with oracle-thin",
+        function(pTester)
+        {
+            var res = _createDummyMaskingUtil(db.DBTYPE_ORACLE10_THIN);
+            pTester.expectThat(res.dbType).equals(db.DBTYPE_ORACLE10_THIN).assert();
+            pTester.expectThat(res.alias).isNull().assert();
+        }
+        ),
+    new Test("overwrite constructors dbType with postgresql",
+        function(pTester)
+        {
+            var res = _createDummyMaskingUtil(db.DBTYPE_POSTGRESQL8);
+            pTester.expectThat(res.dbType).equals(db.DBTYPE_POSTGRESQL8).assert();
+            pTester.expectThat(res.alias).isNull().assert();
+        }
+        ),
+    new Test("overwrite constructors dbType with ms sql",
+        function(pTester)
+        {
+            var res = _createDummyMaskingUtil(db.DBTYPE_SQLSERVER2000);
+            pTester.expectThat(res.dbType).equals(db.DBTYPE_SQLSERVER2000).assert();
+            pTester.expectThat(res.alias).isNull().assert();
+        }
+        )
+    ]);
+
+
+var getConcatSymbolTest = new TestSuite("SqlMaskingUtils.getConcatSymbol", [
+    new Test("getConcatSymbol returns a non empty string",
+        function(pTester)
+        {
+            var maskingHelper = _createDummyMaskingUtil(db.DBTYPE_SQLSERVER2000);
+            var res = maskingHelper.getConcatSymbol();
+            pTester.expectThat(res).not().isNull().assert();
+            pTester.expectThat(res).not().isUndefined().assert();
+            pTester.expectThat(res).isString().assert();
+            pTester.expectThat(res.length).isInteger().assert();
+            pTester.expectThat(res.length).isGreater(0).assert();
+        }
+        ),
+    new Test("+ for MS SQL",
+        function(pTester)
+        {
+            var maskingHelper = _createDummyMaskingUtil(db.DBTYPE_SQLSERVER2000);
+            var res = maskingHelper.getConcatSymbol();
+            pTester.expectThat(res.trim()).equals("+").assert();
+        }
+        ),
+    new Test("|| for Oracle",
+        function(pTester)
+        {
+            var maskingHelper = _createDummyMaskingUtil(db.DBTYPE_ORACLE10_THIN);
+            var res = maskingHelper.getConcatSymbol();
+            pTester.expectThat(res.trim()).equals("||").assert();
+        }
+        )
+    ]);
+
+var tester = new Tester("Test SqlMaskingUtils");
+tester.initCoverage(SqlMaskingUtils);
+tester.test(constructorTest);
+tester.test(getConcatSymbolTest);
+//TODO: add full test coverage
+tester.summary();
+
+result.object(tester.getResults());
\ No newline at end of file
diff --git a/process/Sql_lib/Sql_lib.aod b/process/Sql_lib/Sql_lib.aod
index 8e786ba49ef55715b8396b364c1339d19c3d829d..9ecdf3e0cef487950e3ce08b11bc7640e3d5b866 100644
--- a/process/Sql_lib/Sql_lib.aod
+++ b/process/Sql_lib/Sql_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Sql_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/Sql_lib/documentation.adoc</documentation>
diff --git a/process/Sql_lib/documentation.adoc b/process/Sql_lib/documentation.adoc
index 8b903c2155e9d54f160b06ef6fa80a586a8335e6..417d8aa237bf0311576e048625e9b055ff1e2db8 100644
--- a/process/Sql_lib/documentation.adoc
+++ b/process/Sql_lib/documentation.adoc
@@ -17,10 +17,10 @@ include::_default_attributes_EN.adoc[]
 
 This document describes the functionality and the usage of the SqlBuilder, which is included in the library *Sql_lib* of the ADITO xRM project (see "Projects" window, under process > libraries). The documentation may not contain all features of the SqlBuilder. It is supplemental to the documentation you find in the code itself: A usage will often be possible in an intuitive way, so just try coding using code completion and JSDoc, where all parameters are documented.
 
-You may also take a look at the library *SqlLib_tests* (also under process > libraries), as it contains many possible ways to use the SqlBuilder.
+You may also take a look at the library *Sql_test* (also under process > libraries), as it contains many possible ways to use the SqlBuilder.
 
 [NOTE]
-The tests included in the library SqlLib_tests use the UnitTest_lib for unit testing. You can use this functionality also in other contexts, according to your requirements.
+The tests included in the library Sql_test use the UnitTest_lib for unit testing. You can use this functionality also in other contexts, according to your requirements.
 
 == Benefits
 
diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js
index 35b87999459da0cd88f21f0b11c737c3060ce26e..eecd2a9c83628dd909a5c182d53c53d38963a53b 100644
--- a/process/Sql_lib/process.js
+++ b/process/Sql_lib/process.js
@@ -801,8 +801,6 @@ function SqlBuilder (pAlias)
     
     this._where = {};
     this._initWhere();
-    
-    SqlBuilder.defineCanBuildSql(this);
 }
 
 /**
@@ -823,6 +821,8 @@ SqlBuilder.checkCanBuildSql = function (pObject)
     return pObject[SqlBuilder.getCanBuildSqlSymbol()];
 }
 
+SqlBuilder.defineCanBuildSql(SqlBuilder.prototype);
+
 /**
  * Deep copies the SqlBuilder object and returns a new one.<br/>
  * Use this if you want to add for example add additional parameters without modifying the current builder.
@@ -830,25 +830,7 @@ SqlBuilder.checkCanBuildSql = function (pObject)
  */
 SqlBuilder.prototype.copy = function()
 {
-    var newBuilder = _deepCopyByJson(this, new SqlBuilder());
-    return newBuilder;
-    
-    // NOTE: this works only with simple data types. 
-    // Here we only use strings, arrays, booleans and null, so this should work
-    function _deepCopyByJson(pObject, pNewObject)
-    {
-        // deep copy by using json
-        var deepCopied = JSON.parse(JSON.stringify(pObject));
-        
-        // set the props of the new object to the deepCopied ones.
-        // without this all functions would be lost
-        for (let prop in deepCopied)
-        {
-            pNewObject[prop] = deepCopied[prop]
-        }
-        
-        return pNewObject;
-    }
+    return Utils.clone(this);
 }
 
 // errors which are thrown by the SqlBuilder
@@ -1072,7 +1054,7 @@ SqlBuilder.prototype.tableName = function (pTable)
  */
 SqlBuilder.prototype.from = function(pTable, pTableAlias)
 {
-    this._from = SqlBuilder._getStatement(pTable, "from", pTableAlias, false, (pTableAlias ? false : true));
+    this._from = SqlBuilder._getStatement(pTable, "", pTableAlias, false, (pTableAlias ? false : true));
     if (typeof(pTable) === "string")
         this._tableName = pTable;
     return this;
@@ -2211,10 +2193,7 @@ SqlBuilder.prototype.whereWasCalled = function() {
  */
 SqlBuilder.prototype.isFullSelect = function() 
 {
-    if (!this._select || !this._from)
-        return false;
-    
-    return true;
+    return !(!this._select || !this._from);
 }
 
 /**
@@ -2393,9 +2372,14 @@ SqlBuilder.prototype.buildCondition = function()
 SqlBuilder.prototype.build = function(pDefaultConditionIfNone)
 {
     var wherePrefix = "";
+    var fromObj = this._from;
     
     if (this.isFullSelect())
     {
+        fromObj = {
+            sqlStorage: "from " + this._from.sqlStorage,
+            preparedValues: this._from.preparedValues
+        };
         if (this._where.sqlStorage)
             wherePrefix = "where ";
     }
@@ -2408,11 +2392,11 @@ SqlBuilder.prototype.build = function(pDefaultConditionIfNone)
     var whereObj = {
         sqlStorage : wherePrefix + whereSql,
         preparedValues : this._where.preparedValues
-    }
+    };
     
     var allParts = [
         this._select,
-        this._from,
+        fromObj
         ].concat(this._joins).concat([
         whereObj,
         this._groupBy,
@@ -3100,6 +3084,14 @@ SqlBuilder.caseWhen = function (pFieldOrCond, pValue, pCondition, pFieldType)
     return new SqlBuilder._CaseStatement().when(pFieldOrCond, pValue, pCondition, pFieldType);
 }
 
+/**
+ * @return {SqlBuilder._CaseStatement}
+ */
+SqlBuilder.caseStatement = function ()
+{
+    return new SqlBuilder._CaseStatement();
+}
+
 /**
  * Represents a case-when statement
  */
@@ -3109,9 +3101,10 @@ SqlBuilder._CaseStatement = function ()
     this._whenThens = [];
     this._elseValue = null;
     this._afterWhenMask = new SqlBuilder._CaseWhen(this);
-    SqlBuilder.defineCanBuildSql(this);
 }
 
+SqlBuilder.defineCanBuildSql(SqlBuilder._CaseStatement.prototype);
+
 /**
  * @param {String|String[]|SqlBuilder|PreparedSqlArray} [pFieldOrCond] If this is the only parameter, it is used as Subselect <br/>
  *                                                                     else it is used as Field. <br/>
@@ -3167,7 +3160,7 @@ SqlBuilder._CaseStatement.prototype.toString = function (pAlias)
     return db.translateStatement(this.build(), pAlias || db.getCurrentAlias());
 }
 
-SqlBuilder._CaseStatement.prototype.build = function ()
+SqlBuilder._CaseStatement.prototype.build = function (pParameters)
 {
     var caseStatement = ["case"];
     var preparedValues = [];
@@ -3193,6 +3186,18 @@ SqlBuilder._CaseStatement.prototype.build = function ()
     ];
 }
 
+/**
+ * Custom toJSON method that omits the property '_afterWhenMask', because cyclic references can't be stringified
+ */
+SqlBuilder._CaseStatement.prototype.toJSON = function ()
+{
+    return {
+        _whenCondition: this._whenCondition,
+        _whenThens: this._whenThens,
+        _elseValue: this._elseValue
+    };
+}
+
 /**
  * Object providing the then-methods for the case-when expression. It can be only be accessed after calling .when to ensure a 'then' 
  * can only be added after a 'when'.
@@ -3373,6 +3378,8 @@ SqlMaskingUtils.prototype.cast = function (pField, pTargetDatatype, pTargetLengt
                 return "char";
             case SQLTYPES.VARCHAR:
                 return "char";
+            case SQLTYPES.NVARCHAR:
+                return "nvarchar";
             case SQLTYPES.INTEGER:
                 return "int";
             case SQLTYPES.DECIMAL:
@@ -3388,6 +3395,7 @@ SqlMaskingUtils.prototype.cast = function (pField, pTargetDatatype, pTargetLengt
         case db.DBTYPE_DERBY10:
             switch(pTargetDatatype) 
             {
+                case SQLTYPES.NVARCHAR:
                 case SQLTYPES.VARCHAR:
                     // Because of a Derby bug, you can't cast INTEGER into VARCHAR
                     // Therefor first cast to char then to varchar
@@ -3412,6 +3420,7 @@ SqlMaskingUtils.prototype.cast = function (pField, pTargetDatatype, pTargetLengt
         case db.DBTYPE_MYSQL4:
             switch(pTargetDatatype) 
             {
+                case SQLTYPES.NVARCHAR:
                 case SQLTYPES.VARCHAR:
                 case SQLTYPES.CHAR:
                 case SQLTYPES.INTEGER:
@@ -3429,6 +3438,9 @@ SqlMaskingUtils.prototype.cast = function (pField, pTargetDatatype, pTargetLengt
                 case SQLTYPES.VARCHAR:
                     sqlDataType = "varchar2";
                     break;
+                case SQLTYPES.NVARCHAR:
+                    sqlDataType = "nvarchar2";
+                    break;
                 case SQLTYPES.INTEGER:
                     sqlDataType = "number";
                     pTargetLength = "10"
@@ -3448,18 +3460,23 @@ SqlMaskingUtils.prototype.cast = function (pField, pTargetDatatype, pTargetLengt
                 case SQLTYPES.INTEGER:
                 case SQLTYPES.CHAR:
                 case SQLTYPES.VARCHAR:
+                case SQLTYPES.NVARCHAR:
                     sqlDataType = _mapDefaults(pTargetDatatype);
                     break;
             }
             break;
         case db.DBTYPE_SQLSERVER2000:
-        case SQLTYPES.DATE:
-        case SQLTYPES.DECIMAL:
-        case SQLTYPES.INTEGER:
-        case SQLTYPES.CHAR:
-        case SQLTYPES.VARCHAR:
-            sqlDataType = _mapDefaults(pTargetDatatype);
-            break;
+            switch(pTargetDatatype)
+            {
+                case SQLTYPES.DATE:
+                case SQLTYPES.DECIMAL:
+                case SQLTYPES.INTEGER:
+                case SQLTYPES.CHAR:
+                case SQLTYPES.VARCHAR:
+                case SQLTYPES.NVARCHAR:
+                    sqlDataType = _mapDefaults(pTargetDatatype);
+                    break;
+            }
             //TODO: firebird support?
     }
 
@@ -3565,9 +3582,64 @@ SqlMaskingUtils.prototype.substring = function (pField, pStartPos, pLength)
     return sqlFnName + "(" + pField + ", " + pStartPos + ", " + pLength + ")";
 }
 
+/**
+* masks the function concat (without separator)
+*
+* @param {Array} pFields fields (or expressions) that should be concatenated
+*
+* @return {String} part of SQL-querey
+*/
+SqlMaskingUtils.prototype.concatenate = function (pFields)
+{
+    if (pFields.length === 0)
+        return "''";
+
+    switch (this.dbType)
+    {
+        case db.DBTYPE_MYSQL4:
+        case db.DBTYPE_MARIADB10:
+        case db.DBTYPE_POSTGRESQL8:
+            return " concat(" + pFields.join(", ") + ")";
+        case db.DBTYPE_ORACLE10_CLUSTER:
+        case db.DBTYPE_ORACLE10_THIN:
+        case db.DBTYPE_ORACLE10_OCI:
+            break;
+        case db.DBTYPE_SQLSERVER2000:
+            //MS SQL Server supports "concat_ws" (and ignoring null values) from version SQL Server 2017 and newer:
+            //https://docs.microsoft.com/de-de/sql/t-sql/functions/concat-ws-transact-sql?view=sql-server-2017
+            break;
+        case db.DBTYPE_DERBY10:
+            break;
+        default:
+            throw new Error(translate.withArguments("${SQL_LIB_UNSUPPORTED_DBTYPE} function: %0", ["SqlMaskingUtils.prototype.concatenate"]));
+    }
+    
+    var fields = [];
+    
+    for (let i = 0; i < pFields.length; i++)
+    {
+        let field = pFields[i];
+        let isLast = i + 1 === pFields.length;
+        
+        if (field && field != "''")
+        {
+            if (_isFixedValue(field))
+                fields.push(field);
+            else
+                fields.push(this.isNull(field));
+        }
+    }
+    
+    return fields.join(this.getConcatSymbol()) || "''";
+    
+    function _isFixedValue (pSqlField)
+    {
+        return pSqlField.startsWith("'") && pSqlField.endsWith("'") && !pSqlField.slice(1, -1).includes("'");
+    }
+}
 
 /**
-* masks the function concat
+* masks the function concat_ws
 * if a sql field is empty no separator will be added
 * note that this function will often create a lot of sql-code
 *
@@ -3577,22 +3649,25 @@ SqlMaskingUtils.prototype.substring = function (pField, pStartPos, pLength)
 *
 * @return {String} part of SQL-querey
 */
-SqlMaskingUtils.prototype.concat = function (pFields, pSeparator, pAutoTrimFields) 
+SqlMaskingUtils.prototype.concatWithSeparator = function (pFields, pSeparator, pAutoTrimFields) 
 {
     if (pFields.length === 0)
         return "''";
     if (pFields.length === 1)
         return pFields[0];
     
+    if (pSeparator === "" && pAutoTrimFields == false)
+        return this.concatenate(pFields);
+    
     if (pAutoTrimFields == undefined)
         pAutoTrimFields = true;
     
     if (pSeparator === null || pSeparator === undefined)
         pSeparator = "' '";
-    else if (pSeparator)
+    else if (pSeparator || pSeparator === "")
         pSeparator = "'" + db.quote(pSeparator, this.alias) + "'";
     
-    var doEmptyStringCheck = true;
+    var isEmptyStringNull = false;
 
     switch (this.dbType)
     {
@@ -3605,7 +3680,7 @@ SqlMaskingUtils.prototype.concat = function (pFields, pSeparator, pAutoTrimField
         case db.DBTYPE_ORACLE10_CLUSTER:
         case db.DBTYPE_ORACLE10_THIN:
         case db.DBTYPE_ORACLE10_OCI:
-            doEmptyStringCheck = false; //empty strings are changed to DB-null-values internally in oracle; by specifing JS-null we disable this check
+            isEmptyStringNull = true; //empty strings are changed to DB-null-values internally in oracle
             break;
         case db.DBTYPE_SQLSERVER2000:
             //MS SQL Server supports "concat_ws" (and ignoring null values) from version SQL Server 2017 and newer:
@@ -3614,7 +3689,7 @@ SqlMaskingUtils.prototype.concat = function (pFields, pSeparator, pAutoTrimField
         case db.DBTYPE_DERBY10:
             break;
         default:
-            throw new Error(translate.withArguments("${SQL_LIB_UNSUPPORTED_DBTYPE} function: %0", ["SqlMaskingUtils.prototype.concat"]));
+            throw new Error(translate.withArguments("${SQL_LIB_UNSUPPORTED_DBTYPE} function: %0", ["SqlMaskingUtils.prototype.concatWithSeparator"]));
     }
     
     var concatCharacter = this.getConcatSymbol();
@@ -3625,10 +3700,13 @@ SqlMaskingUtils.prototype.concat = function (pFields, pSeparator, pAutoTrimField
         let field = pFields[i];
         let isLast = i + 1 === pFields.length;
         
-        if (!_isFixedValue(field))
-            concatSql += (pAutoTrimFields ? this.trim(this.isNull(field)) : this.isNull(field));
-        else
+        if (_isFixedValue(field))
             concatSql += (pAutoTrimFields ? "'" + field.slice(1, -1).trim() + "'" : field);
+        else
+        {
+            let stringField = isEmptyStringNull ? field : this.isNull(field);
+            concatSql += (pAutoTrimFields ? this.trim(stringField) : this.isNull(stringField));
+        }
         
         if (!isLast)
         {
@@ -3641,10 +3719,12 @@ SqlMaskingUtils.prototype.concat = function (pFields, pSeparator, pAutoTrimField
             }
             else if (pSeparator)
             {
+                let nextNotNullCondition;
                 let nextFieldTrimmed = pAutoTrimFields ? this.trim(nextField) : nextField;
-                let nextNotNullCondition = nextField + " is not null ";
-                if (doEmptyStringCheck || pAutoTrimFields)
-                    nextNotNullCondition += " and " + nextFieldTrimmed + " != '' ";
+                if (isEmptyStringNull)
+                    nextNotNullCondition = nextFieldTrimmed + " is not null";
+                else
+                    nextNotNullCondition = nextField + " is not null and " + nextFieldTrimmed + " != ''";
 
                 concatSql += "case when " + nextNotNullCondition + " then " + pSeparator + " else '' end " + concatCharacter;
             }
@@ -3659,6 +3739,25 @@ SqlMaskingUtils.prototype.concat = function (pFields, pSeparator, pAutoTrimField
     }
 }
 
+/**
+* masks the function concat
+* if a sql field is empty no separator will be added
+* note that this function will often create a lot of sql-code
+*
+* @param {Array} pFields fields (or expressions) that should be concatenated
+* @param {String} [pSeparator=space-character] character for separating the fields
+* @param {String} [pAutoTrimFields=true] autoTrimFields if true the expressions are always trimmed, false no change will be applied
+*
+* @return {String} part of SQL-querey
+* 
+* @deprecated The function has been renamed to SqlMaskingUtils.prototype.concatWithSeparator to differentiate it from 
+*             SqlMaskingUtils.prototype.concatenate.
+*/
+SqlMaskingUtils.prototype.concat = function (pFields, pSeparator, pAutoTrimFields) 
+{
+    return this.concatWithSeparator(pFields, pSeparator, pAutoTrimFields);
+}
+
 /**
      * returns the function for replacing a null value
      *
@@ -3763,6 +3862,33 @@ SqlMaskingUtils.prototype.yearFromDate = function(pField)
     }
 }
 
+/**
+ * returns the first field, that is not null or empty
+ * masks the behaviour of coalesce with case when
+ * 
+ * @param pFields {Array} Array of fieldnames. Has to be in the right order. It will be checked from 0 upwards
+ */
+SqlMaskingUtils.prototype.coalesce = function(pFields)
+{
+    var retSql = "";
+    
+    if(pFields && typeof pFields == "object" && pFields.length)
+    {
+        retSql = "case ";
+
+        for(let i = 0; i < pFields.length; i++)
+        {
+            retSql += " when (" + pFields[i] + " is not null or " + pFields[i] + " <> '') then " + pFields[i] + " "
+        }
+
+        retSql += " else null end";
+    }
+    else
+        throw {message:"The input to coalesce has to be an Array containing the column names"};
+    
+    return retSql;
+}
+
 /**
  * functions for various Sql-actions
  * Do not create an instance of this!
@@ -4129,10 +4255,11 @@ SqlUtils.getSqlInStatement = function(pFieldname, pData, pQuoteSymbol, pAsPrepar
 }
 
 /**
-* resolves key-value pairs (of strings) into a case when expression
+* resolves key-value pairs (of strings) into a case when expression; 
+* This function tries to get the columntype for better type comparison
 * 
 * @param {String[][]} pKeyValueArray you've to pass a 2D-Array where each element has at pos0 the key and pos1 the value
-* @param {String} pDbFieldName name fo the database field where the KEY-value is stored
+* @param {String} pDbFieldName name fo the database field where the KEY-value is stored; prefers TABLENAME.COLUMNNAME
 * @param {String} [pLocale=current client language] specifies the locale for translating the title; can be false if nothing shalle be translated
 * 
 * @return {String} a SQL-expression (case-when-statement) that resolves the KEYID into the title -> as preparedSatement-elements
@@ -4152,9 +4279,15 @@ SqlUtils.getResolvingCaseWhen = function(pKeyValueArray, pDbFieldName, pLocale)
         else
             return translate.text(value);
     };
-    
+    //!SqlBuilder
     var resSql = "case ", preparedValues = [];
-    var colTypeKeyId = SQLTYPES.CHAR;
+    
+    var colTypeKeyId = SQLTYPES.CHAR; //the standard type is char
+    var fields = SqlUtils._parseFieldQualifier(pDbFieldName); //validate the DB-field for proper form (CONTACT.CONTACTID)
+    if (!(fields instanceof TypeError))
+        colTypeKeyId = SqlUtils.getSingleColumnType(pDbFieldName, undefined, this.alias); 
+     //some databases dont auto cast on their own so we need the proper type
+    
     var colTypeTitle = SQLTYPES.NVARCHAR;
     for (var i = 0, l = keyData.length; i < l; i++) 
     {
diff --git a/process/StandardObject_lib/StandardObject_lib.aod b/process/StandardObject_lib/StandardObject_lib.aod
index 94c1fcc045a7d0035211ebd8afb1d46832b39065..c69d626eb8d55e3c7820c9a130c16ff3e790d850 100644
--- a/process/StandardObject_lib/StandardObject_lib.aod
+++ b/process/StandardObject_lib/StandardObject_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>StandardObject_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/StandardObject_lib/documentation.adoc</documentation>
diff --git a/process/TempRebuildIndexPerson_serverProcess/TempRebuildIndexPerson_serverProcess.aod b/process/TempRebuildIndexPerson_serverProcess/TempRebuildIndexPerson_serverProcess.aod
index bffee7201afb41060808fc74c155973b7f9a4ca8..3d6e25db86c11f51f4f20f0ab10b249a7166843a 100644
--- a/process/TempRebuildIndexPerson_serverProcess/TempRebuildIndexPerson_serverProcess.aod
+++ b/process/TempRebuildIndexPerson_serverProcess/TempRebuildIndexPerson_serverProcess.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>TempRebuildIndexPerson_serverProcess</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/TempRebuildIndexPerson_serverProcess/process.js</process>
diff --git a/process/Terminal_lib/Terminal_lib.aod b/process/Terminal_lib/Terminal_lib.aod
new file mode 100644
index 0000000000000000000000000000000000000000..fee1f093874fd8eaab65e87dbe5c346c66a17860
--- /dev/null
+++ b/process/Terminal_lib/Terminal_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>Terminal_lib</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <documentation>%aditoprj%/process/Terminal_lib/documentation.adoc</documentation>
+  <process>%aditoprj%/process/Terminal_lib/process.js</process>
+  <variants>
+    <element>LIBRARY</element>
+  </variants>
+</process>
diff --git a/process/Terminal_lib/process.js b/process/Terminal_lib/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..13a0188495d15d6728d4560c288546ccc0c9d283
--- /dev/null
+++ b/process/Terminal_lib/process.js
@@ -0,0 +1,342 @@
+import("system.logging");
+import("Util_lib");
+
+
+/**
+ * This library gives you helpful colored output on the terminal
+ * You can use the predefined helper methods or use your own color- and format combinations
+ *
+ * @example
+ * var t = new Terminal();
+ * logging.log(t.success("It works!"));
+ * logging.log(t.color(t.fg.green).background(t.bg.red).output("I would never use green text on red background..."));
+ *
+ * @see https://en.wikipedia.org/wiki/ANSI_escape_code
+ * @class
+ */
+function Terminal()
+{
+    this.mod = {
+        reset : 0
+    };
+
+    this.fg = {
+        reset         : 39,
+        black         : 30,
+        red           : 31,
+        green         : 32,
+        yellow        : 33,
+        blue          : 34,
+        magenta       : 35,
+        cyan          : 36,
+        white         : 37,
+        brightBlack   : 90,
+        brightRed     : 91,
+        brightGreen   : 92,
+        brightYellow  : 93,
+        brightBlue    : 94,
+        brightMagenta : 95,
+        brightCyan    : 96,
+        brightWhite   : 97
+    };
+
+    this.bg = {
+        reset         : 49,
+        black         : 40,
+        red           : 41,
+        green         : 42,
+        yellow        : 43,
+        blue          : 44,
+        magenta       : 45,
+        cyan          : 46,
+        white         : 47,
+        brightBlack   : 100,
+        brightRed     : 101,
+        brightGreen   : 102,
+        brightYellow  : 103,
+        brightBlue    : 104,
+        brightMagenta : 105,
+        brightCyan    : 106,
+        brightWhite   : 107
+    };
+
+    this.formats = {
+        weightBold      : 1,
+        weightLight     : 2,
+        weightOff       : 22,
+        italic          : 3,
+        italicOff       : 23,
+        underline       : 4,
+        underlineDouble : 21,
+        underlineOff    : 24,
+        strike          : 9,
+        strikeOff       : 29
+    };
+
+    this._defaultConfig = {
+        colorText: this.fg.reset,
+        colorBackground: this.bg.reset,
+        bold: this.formats.weightOff,
+        italic: this.formats.italicOff,
+        underline: this.formats.underlineOff,
+        strike: this.formats.strikeOff
+    };
+
+    this.outputConfig = Utils.clone(this._defaultConfig);
+}
+
+
+/**
+ * Reset the output config by cloning and setting the default
+ *
+ * @return {void}
+ */
+Terminal.prototype._resetConfig = function ()
+{
+    this.outputConfig = Utils.clone(this._defaultConfig);
+}
+
+/**
+ * Set or reset the text color
+ *
+ * @param {int} pValue
+ * @return {Terminal}
+ */
+Terminal.prototype.color = function (pValue)
+{
+    this.outputConfig.colorText = this._contains(this.fg, pValue) ? pValue : this.fg.reset;
+    
+    return this;
+}
+
+/**
+ * Set or reset the background color
+ *
+ * @param {int} pValue
+ * @return {Terminal}
+ */
+Terminal.prototype.background = function (pValue)
+{
+    this.outputConfig.colorBackground = this._contains(this.bg, pValue) ? pValue : this.bg.reset;
+    
+    return this;
+}
+
+/**
+ * Set, unset or add a formatting to the output config
+ *
+ * @param {int} pValue
+ * @return {Terminal}
+ */
+Terminal.prototype.format = function (pValue)
+{    
+    var allowedWeightValues = [this.formats.weightBold, this.formats.weightLight, this.formats.weightOff];
+    this.outputConfig.bold = this._contains(allowedWeightValues, pValue) ? pValue : this.formats.weightOff;
+
+    var allowedItalicValues = [this.formats.italic, this.formats.italicOff];
+    this.outputConfig.italic = this._contains(allowedItalicValues, pValue) ? pValue : this.formats.italicOff;
+
+    var allowedUnderlineValues = [this.formats.underline, this.formats.underlineDouble, this.formats.underlineOff];
+    this.outputConfig.underline = this._contains(allowedUnderlineValues, pValue) ? pValue : this.formats.underlineOff;
+
+    var allowedStrikeValues = [this.formats.strike, this.formats.strikeOff];
+    this.outputConfig.strike = this._contains(allowedStrikeValues, pValue) ? pValue : this.formats.strikeOff;
+    
+    return this;
+}
+
+/**
+ * Returns a string wrapped in escape sequences according to previous formatting instructions
+ * Must be called after `.color()`, `.background()` and/or `.format()`.
+ *
+ * @param {String} pString the string to format
+ * @return {String}
+ */
+Terminal.prototype.output = function (pString)
+{
+    var output = "";
+    var seqValues = [];
+    
+    Object.keys(this.outputConfig).forEach(function(pKey) {
+        seqValues.push(this.outputConfig[pKey]);
+    }, this);
+    
+    output += this._generateSequence(seqValues);
+    output += pString;
+    output += this._generateSequence(this.mod.reset);
+    
+    this._resetConfig();
+    return output;
+}
+
+/**
+ * Returns the given string formatted as light-colored text
+ *
+ * @param {String} pString the string to format
+ * @return {String}
+ */
+Terminal.prototype.debug = function (pString)
+{
+    return this.color(this.fg.white).output(pString);
+}
+
+/**
+ * Returns the given string formatted as bold black text on green background
+ *
+ * @param {String} pString the string to format
+ * @return {String}
+ */
+Terminal.prototype.successBlock = function (pString)
+{
+    return this.color(this.fg.brightBlack).background(this.bg.green).format(this.formats.weightBold).output(pString);
+}
+
+/**
+ * Returns the given string formatted as bold green text
+ *
+ * @param {String} pString the string to format
+ * @return {String}
+ */
+Terminal.prototype.success = function (pString)
+{
+    return this.color(this.fg.green).format(this.formats.weightBold).output(pString);
+}
+
+/**
+ * Returns the given string formatted as bold black text on green background
+ *
+ * @param {String} pString the string to format
+ * @return {String}
+ */
+Terminal.prototype.successBlock = function (pString)
+{
+    return this.color(this.fg.brightBlack).background(this.bg.green).format(this.formats.weightBold).output(" " + pString + " ");
+}
+
+/**
+ * Returns the given string formatted as bold blue text
+ *
+ * @param {String} pString the string to format
+ * @return {String}
+ */
+Terminal.prototype.info = function (pString)
+{
+    return this.color(this.fg.blue).format(this.formats.weightBold).output(pString);
+}
+
+/**
+ * Returns the given string formatted as bold white text on blue background
+ *
+ * @param {String} pString the string to format
+ * @return {String}
+ */
+Terminal.prototype.infoBlock = function (pString)
+{
+    return this.color(this.fg.brightWhite).background(this.bg.blue).format(this.formats.weightBold).output(" " + pString + " ");
+}
+
+/**
+ * Returns the given string formatted as bold magenta text
+ *
+ * @param {String} pString the string to format
+ * @return {String}
+ */
+Terminal.prototype.important = function (pString)
+{
+    return this.color(this.fg.magenta).format(this.formats.weightBold).output(pString);
+}
+
+/**
+ * Returns the given string formatted as bold white text on magenta background
+ *
+ * @param {String} pString the string to format
+ * @return {String}
+ */
+Terminal.prototype.importantBlock = function (pString)
+{
+    return this.color(this.fg.brightWhite).background(this.bg.magenta).format(this.formats.weightBold).output(" " + pString + " ");
+}
+
+/**
+ * Returns the given string formatted as bold yellow text
+ *
+ * @param {String} pString the string to format
+ * @return {String}
+ */
+Terminal.prototype.warning = function (pString)
+{
+    return this.color(this.fg.yellow).format(this.formats.weightBold).output(pString);
+}
+
+/**
+ * Returns the given string formatted as bold black text on yellow background
+ *
+ * @param {String} pString the string to format
+ * @return {String}
+ */
+Terminal.prototype.warningBlock = function (pString)
+{
+    return this.color(this.fg.brightBlack).background(this.bg.yellow).format(this.formats.weightBold).output(" " + pString + " ");
+}
+
+/**
+ * Returns the given string formatted as bold red text
+ *
+ * @param {String} pString the string to format
+ * @return {String}
+ */
+Terminal.prototype.error = function (pString)
+{
+    return this.color(this.fg.red).format(this.formats.weightBold).output(pString);
+}
+
+/**
+ * Returns the given string formatted as bold white text on red background
+ *
+ * @param {String} pString the string to format
+ * @return {String}
+ */
+Terminal.prototype.errorBlock = function (pString)
+{
+    return this.color(this.fg.brightWhite).background(this.bg.red).format(this.formats.weightBold).output(" " + pString + " ");
+}
+
+/**
+ * Checks if a specific value is in a given array or object
+ *
+ * @param {(Array|Object)} pType
+ * @param {Any} pValue
+ * @return {Boolean}
+ */
+Terminal.prototype._contains = function (pType, pValue)
+{
+    var res = false;
+    
+    if(Array.isArray(pType)) {
+        res = pType.indexOf(pValue) !== -1;
+    } else {
+        Object.keys(pType).forEach(function(pKey) {
+            if(pType[pKey] === pValue) {
+                res = true;
+            }
+        }, this);
+    }
+
+    return res;
+}
+
+/**
+ * Generates and returns a terminal escape sequence
+ *
+ * @param {(int|int[])} pSequences A single or multiple escape sequence commands
+ */
+Terminal.prototype._generateSequence = function (pSequences)
+{
+    var seq = Array.isArray(pSequences) ? pSequences : [pSequences];
+    
+    seq = seq.filter(function(pElement) {
+        return Number.isInteger(parseFloat(pElement)) && isFinite(pElement);
+    });
+    
+    return "\033[" + seq.join(";") + "m";
+}
diff --git a/process/TestIndexSearch/TestIndexSearch.aod b/process/TestIndexSearch/TestIndexSearch.aod
index 9dfabc2aa4b1af9a5d9d3f1d1eaac79c2a20c66c..66107b82c6692ba97791ea6e0ef9eb87a8c70372 100644
--- a/process/TestIndexSearch/TestIndexSearch.aod
+++ b/process/TestIndexSearch/TestIndexSearch.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>TestIndexSearch</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/TestIndexSearch/process.js</process>
diff --git a/process/Ticket_lib/Ticket_lib.aod b/process/Ticket_lib/Ticket_lib.aod
index 5ce9c41505cb4df632f5c1d34f0bbaf80f48a171..f8dd6fe8f2e97ce7d9eebbf8e1f725b9eeba4b34 100644
--- a/process/Ticket_lib/Ticket_lib.aod
+++ b/process/Ticket_lib/Ticket_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Ticket_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Ticket_lib/process.js</process>
diff --git a/process/Timetracking_lib/Timetracking_lib.aod b/process/Timetracking_lib/Timetracking_lib.aod
index b514721991f2a2544cf57c10e3bc5d89c0571d7b..140b9a95c1bc4667c5056929735b6e5bd0ac6e75 100644
--- a/process/Timetracking_lib/Timetracking_lib.aod
+++ b/process/Timetracking_lib/Timetracking_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Timetracking_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Timetracking_lib/process.js</process>
diff --git a/process/Turnover_lib/Turnover_lib.aod b/process/Turnover_lib/Turnover_lib.aod
index 28bacd7d8eaa8d0f3bd01ed7f72c229487b2372e..12dbb916887a5ee928249e5e2a08760389bab573 100644
--- a/process/Turnover_lib/Turnover_lib.aod
+++ b/process/Turnover_lib/Turnover_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Turnover_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Turnover_lib/process.js</process>
diff --git a/process/Turnover_lib/process.js b/process/Turnover_lib/process.js
index 14080be4ee9b533ea4a1c88331e3d6f45f64f364..1e69ad37d5f05c94e3779b5fe5c6edb3fe81cbc5 100644
--- a/process/Turnover_lib/process.js
+++ b/process/Turnover_lib/process.js
@@ -26,24 +26,45 @@ function TurnoverUtil() {}
  */
 TurnoverUtil.getTurnoverData = function (pMaxYear, pYearCount, pSalesprojectId)
 {
-    var turnoverCategory = translate.text('Turnover');
-
+    var turnoverCategory = translate.text("Turnover");
     var minYear = pMaxYear - pYearCount + 1;
+    var sqlMask = new SqlMaskingUtils();
         
     // load data
-    return newSelect("'" + turnoverCategory + "', year(SALESORDERDATE) yearNum, month(SALESORDERDATE) monthNum, SALESORDERITEM.DISCOUNT discount, SALESORDERITEM.VAT vat, SALESORDERITEM.PRICE price, sum(SALESORDERITEM.QUANTITY) quantity, SALESORDERITEM.GROUPCODEID prodGroup, (" + KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.productGroupcode(), "SALESORDERITEM.GROUPCODEID") + ") prodGroupName")
-                    .from("SALESORDER")
-                    .join("SALESORDERITEM", "SALESORDERITEM.SALESORDER_ID = SALESORDER.SALESORDERID")
-                    .where("SALESORDER.ORDERTYPE = 'ORDTYPEINVO'")
-                    .and("SALESORDER.ORDERSTATUS = 1")
-                    .and("SALESORDER.CANCELLATION <> 1")
-                    .and("SALESORDERITEM.OPTIONAL <> 1")
-                    .and("SALESORDER.SALESORDERDATE", pMaxYear, "year(#) <= ?", SQLTYPES.INTEGER)
-                    .and("SALESORDER.SALESORDERDATE", minYear, "year(#) >= ?", SQLTYPES.INTEGER)
-                    .andIfSet("SALESORDER.SALESPROJECT_ID", pSalesprojectId)
-                    .groupBy("year(SALESORDERDATE), month(SALESORDERDATE), SALESORDERITEM.GROUPCODEID, SALESORDERITEM.DISCOUNT, SALESORDERITEM.VAT, SALESORDERITEM.PRICE")
-                    .orderBy("yearNum, monthNum")
-                    .table();
+    
+    return newSelect([
+            "'" + turnoverCategory + "'", 
+            sqlMask.yearFromDate("SALESORDERDATE"), 
+            sqlMask.monthFromDate("SALESORDERDATE"),
+            "SALESORDERITEM.DISCOUNT",
+            "SALESORDERITEM.VAT",
+            "SALESORDERITEM.PRICE",
+            "sum(SALESORDERITEM.QUANTITY)",
+            "SALESORDERITEM.GROUPCODEID",
+            KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.productGroupcode(), "SALESORDERITEM.GROUPCODEID")
+        ])
+        .from("SALESORDER")
+        .join("SALESORDERITEM", "SALESORDERITEM.SALESORDER_ID = SALESORDER.SALESORDERID")
+        .where("SALESORDER.ORDERTYPE", "ORDTYPEINVO")
+        .and("SALESORDER.ORDERSTATUS", "1")
+        .and("SALESORDER.CANCELLATION", "1", SqlBuilder.NOT_EQUAL())
+        .and("SALESORDERITEM.OPTIONAL", "1", SqlBuilder.NOT_EQUAL())
+        .and("SALESORDER.SALESORDERDATE", pMaxYear, sqlMask.yearFromDate("#") + " <= ?", SQLTYPES.INTEGER)
+        .and("SALESORDER.SALESORDERDATE", minYear, sqlMask.yearFromDate("#") + " >= ?", SQLTYPES.INTEGER)
+        .andIfSet("SALESORDER.SALESPROJECT_ID", pSalesprojectId)
+        .groupBy([
+            sqlMask.yearFromDate("SALESORDERDATE"), 
+            sqlMask.monthFromDate("SALESORDERDATE"),
+            "SALESORDERITEM.GROUPCODEID",
+            "SALESORDERITEM.DISCOUNT",
+            "SALESORDERITEM.VAT",
+            "SALESORDERITEM.PRICE"
+        ])
+        .orderBy([
+            sqlMask.yearFromDate("SALESORDERDATE"), 
+            sqlMask.monthFromDate("SALESORDERDATE")
+        ])
+        .table();
 }
 
 /**
diff --git a/process/UnitTest_lib/UnitTest_lib.aod b/process/UnitTest_lib/UnitTest_lib.aod
index 225ac2303844a684c92ac95b0426318362598cb0..25bd7badb373769aa481fb03fab69956dc8b704f 100644
--- a/process/UnitTest_lib/UnitTest_lib.aod
+++ b/process/UnitTest_lib/UnitTest_lib.aod
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>UnitTest_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <icon>VAADIN:CHECK_CIRCLE_O</icon>
   <process>%aditoprj%/process/UnitTest_lib/process.js</process>
   <alias>Data_alias</alias>
   <variants>
diff --git a/process/UnitTest_lib/process.js b/process/UnitTest_lib/process.js
index 0ce141d4828e7b396f4cc4368c4daae06aec5dd1..382d37e021567c924734a1350a7a368acd1796d3 100644
--- a/process/UnitTest_lib/process.js
+++ b/process/UnitTest_lib/process.js
@@ -1,235 +1,1265 @@
 import("system.logging");
+import("Terminal_lib");
+import("Util_lib");
+
+/**
+ * @param {String} pName the name/description of the test
+ * @param {Function} pCallback the actual test callback to execute
+ * @param {Function} pDataProviderCallback an optional callback to deliver multiple datasets to the test
+ * @param {Boolean} pRerunOnError an optional flag indicating if a test should get rerun without try-catch if an error occurs (default: false)
+ *
+ * @class
+ */
+function Test(pName, pCallback, pDataProviderCallback, pRerunOnError)
+{
+    this.name = pName;
+    this.callback = pCallback;
+    this.dataProviderCallback = pDataProviderCallback || function() { return null; };
+    this.rerunOnError = !!pRerunOnError;
+}
 
 /**
  * A TestSuite combines several tests
- * @param {Array} pTests this is a n array of Tests in the following form:<br/>
- *                  [<br/>
- *                      ["Test description", function(pTester) <br/>
- *                          {<br/>
- *                              // the test which may use pTester.assert(...)<br/>
- *                          }, {Optional: an expected error}<br/>
- *                      ],<br/>
- *                      [...]<br/>
- *                  ]<br/>
+ *
+ * @param {String} pName name of the TestSuite
+ * @param {Array} pTests this is a n array of Tests
+ *
+ * @example
+ * var myTest = new TestSuite("MyObject.myTest", [
+ *     new Test("Test description",
+ *         function(pTester) {
+ *             var expectValue = 5;
+ *             var var actualValue = 20;
+ *             pTester.expectThat(actualValue).isGreater(expectValue).assert();
+ *         },
+ *     ),
+ *     new Test(...)
+ * ];
+
+ * @example
+ * // Using a DataProvider
+ * var myTest = new TestSuite("MyObject.myTest", [
+ *     new Test("Test description",
+ *         function(pTester, pDataProvider) {
+ *             var obj = new MyObject("Something");
+ *             var expectValue = pDataProvider[0];
+ *             var var actualValue = obj.getNumber();
+ *             pTester.expectThat(actualValue).isGreater(expectValue).assert();
+ *         },
+ *         function dataProvider() {
+ *             return [
+ *                 [0],
+ *                 [10],
+ *                 [100],
+ *             ];
+ *         },
+ *     ),
+ *     new Test(...)
+ * ];
+ *
  * @param {functionCallback} [pPreAll] a callback, called once before all tests
  * @param {functionCallback} [pPreTest] a callback, called once before each test
  * @param {functionCallback} [pPostTest] a callback, called once after each test
  * @param {functionCallback} [pPostAll] a callback, called once after all tests
- * 
+ *
+ * TODO: set callbacks via separate methods
+ *
  * @class
  */
-function TestSuite(pTests, pPreAll, pPreTest, pPostTest, pPostAll)
+function TestSuite(pName, pTests, pPreAll, pPreTest, pPostTest, pPostAll)
 {
+    this.name = pName;
     this.tests = pTests;
-    this.preAll = (pPreAll ? pPreAll : function() {});
-    this.preTest = (pPreTest ? pPreTest : function() {});
-    this.postTest = (pPostTest ? pPostTest : function() {});
-    this.postAll = (pPostAll ? pPostAll : function() {});
+    this.preAll = pPreAll || function() {};
+    this.preTest = pPreTest || function() {};
+    this.postTest = pPostTest || function() {};
+    this.postAll = pPostAll || function() {};
 }
 
 /**
- * The tester can test TestSuites.
- * It will be passed as paramter to each test.
- * 
+ * The tester runs TestSuites.
+ * It will be passed as parameter to each test.
+ *
  * @param {String} pCollectionName
+ *
+ * @example
+ * var myTest = new TestSuite("MyObject.myTest", [...]);
+ * var tester = new Tester("Test SqlBuilder", SqlBuilder);
+ * tester.test(myTest);
+ * // More test suites using tester.test()
+ * // ...
+ *
+ * tester.summary();
+ *
+ * @class
+ *
+ * TODO: Implement `isEmpty()`
+ * TODO: Implement `hasKey()`
+ * TODO: Implement `contains()`
+ * TODO: Implement `containsIgnoreCase()`
+ * TODO: Implement `isPrimitive()`
+ * TODO: Implement `matches()`
+ * TODO: Implement `matchesIgnoreCase()`
+ * TODO: Move multiple used code blocks into separate methods (like the logging output + reset)
+ * TODO: Use more getters, especially when implementing `elementAt()`
+ * TODO: Add examples to test methods
+ */
+function Tester(pCollectionName)
+{
+    this.collectionName = pCollectionName;
+    this.instanceName = undefined;
+    this.methods = [];
+    this.methodsCalled = [];
+
+    this.actualValue = undefined;
+    this.actualDisplayValue = undefined;
+    this.actualOriginalValue = undefined;
+    this.actualOriginalDisplayValue = undefined;
+    this.actualValueElementHierarchy = [];
+    this.expectedValue = undefined;
+    this.expectedDisplayValue = undefined;
+    this._assertDescription = "";
+    this._testResult = false;
+    this._useNegation = false;
+    this.dataProvider = undefined;
+    this.currentTestSuite = undefined;
+
+    this.testCount = 0;
+    this.successCount = 0;
+    this.failCount = 0;
+    this.startTime = new Date().getTime();
+    this.endTime = null;
+
+    this.t = new Terminal();
+    this.outputEnabled = true;
+    this.output = "";
+}
+
+/**
+ * Set the value to test
+ *
+ * @param {*} pValue
+ * @return {Tester}
+ */
+Tester.prototype.expectThat = function(pValue)
+{
+    this.actualValue = pValue;
+    this.actualDisplayValue = pValue;
+    this.actualOriginalValue = pValue;
+    this.actualOriginalDisplayValue = pValue;
+    this._useNegation = false;
+
+    return this;
+}
+
+/**
+ * Retrieve the result of the current test
+ *
+ * @return {Boolean}
+ */
+Tester.prototype.getTestResult = function()
+{
+    return this._useNegation ? !this._testResult : this._testResult;
+}
+
+/**
+ * Enable or disable the output
+ *
+ * @param {Boolean} pIsEnabled whether the output should be enabled or not
+ * @return {Tester}
+ */
+Tester.prototype.setOutputEnabled = function(pIsEnabled)
+{
+    this.outputEnabled = pIsEnabled;
+    return this;
+}
+
+/**
+ * Assert makes the test eventually pass or fail by looking at the result and writing into the output
+ *
+ * @return {void}
+ */
+Tester.prototype.assert = function()
+{
+    if(this.getTestResult() === true)
+    {
+        this.successCount++;
+        this._log("success", "\t\t\u2705 " + this._assertDescription);
+    }
+    else
+    {
+        this.failCount++;
+        this._log("error", "\t\t\u274C " + this._assertDescription);
+
+        if(this.actualDisplayValue !== undefined && this.expectedDisplayValue !== undefined)
+        {
+            this._log("warning", "\t\t\t expected: " + JSON.stringify(this.expectedDisplayValue, null, "\t"));
+            this._log("error", "\t\t\t actual:   " + JSON.stringify(this.actualDisplayValue, null, "\t"));
+        }
+    }
+}
+
+/**
+ * Activate test negation
+ *
+ * @return {Tester}
+ */
+Tester.prototype.not = function()
+{
+    this._useNegation = true;
+
+    return this;
+}
+
+/**
+ * Select a child element of `actualValue` to work with
+ *
+ * @param {(String|Number)} pKey the key of the child
+ * @return {Tester}
  * 
  * @example
- * var tester = new Tester("Test SqlBuilder");
- * tester.test(newSelectTests);
- * tester.test(validAndUsageTests);
- * tester.test(validOrUsageTests);
+ * // Grab first array element to test
+ * pTester.expectThat(actualValue).elementAt(0).equals("MyValue").assert();
  * 
- * logging.log("-------------------------");
- * tester.printResults();
+ * // Grab last array element to test
+ * pTester.expectThat(actualValue).elementAt(-1).equals("MyValue").assert();
  * 
- * @class
+ * // Grab object element to test
+ * pTester.expectThat(actualValue).elementAt("myKey").equals("MyValue").assert();
+ * 
+ * // Grab nested element in array/object structure to test, in this case `actualValue[5].myKey[2].someChild`
+ * pTester.expectThat(actualValue).elementAt(5).elementAt("myKey").elementAt(2).elementAt("someChild").equals("MyValue").assert();
  */
-function Tester(pCollectionName) 
+Tester.prototype.elementAt = function(pKey)
 {
-    this.collectionName = pCollectionName;
-    this.testResults = [];
+    if(!Array.isArray(this.actualValue) && !Utils.isObject(this.actualValue))
+    {
+        var error = new Error("actualValue must be array or object to use elementAt('" + pKey + "')");
+        error.name = "UnitTest_lib Error";
+        throw error;
+    }
+    
+    var key = Array.isArray(this.actualValue) && pKey === -1 ? this.actualValue.length - 1 : pKey;
     
-    // if no assert was called during a test, no test-message would be added. -> Add a success message that no error occoured.
-    this.currentTestHadAlreadyAssert = false;
+    this.actualValueElementHierarchy.push(key);
+    this.actualValue = this.actualValue[key];
+    this.actualDisplayValue = this.actualDisplayValue[key];
+
+    return this;
 }
 
 /**
- * generates a summary of the test results
- * 
- * @return {Obect}
+ * Test if a value is equal to a given value
+ *
+ * @param {*} pExpect the value to compare
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.equals = function(pExpect, pCustomDescription)
+{
+    this._setExpectValue(pExpect);
+
+    if(Utils.isObject(this.actualValue) || Utils.isObject(this.expectedValue))
+    {
+        this.expectedDisplayValue = JSON.stringify(this.actualValue);
+        this._testResult = Utils.isEqual(this.actualValue, this.expectedValue);
+        this._generateAssertDescription({custom: pCustomDescription, operator: "===", name: "Object value"});
+    }
+    else
+    {
+        this._testResult = this.actualValue === this.expectedValue;
+        this._generateAssertDescription({custom: pCustomDescription, operator: "==="});
+    }
+
+    return this;
+}
+
+/**
+ * Test if a value is greater than a given compare value
+ *
+ * @param {Number} pExpect the value to compare
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.isGreater = function(pExpect, pCustomDescription)
+{
+    this._setExpectValue(pExpect);
+    this._testResult = this.actualValue > this.expectedValue;
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: ">"});
+
+    return this;
+}
+
+/**
+ * Test if a value is greater or equal than a given compare value
+ *
+ * @param {Number} pExpect the value to compare
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.isGreaterEqual = function(pExpect, pCustomDescription)
+{
+    this._setExpectValue(pExpect);
+    this._testResult = this.actualValue >= this.expectedValue;
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: ">="});
+
+    return this;
+}
+
+/**
+ * Test if a value is lower than a given compare value
+ *
+ * @param {Number} pExpect the value to compare
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.isLower = function(pExpect, pCustomDescription)
+{
+    this._setExpectValue(pExpect);
+    this._testResult = this.actualValue < this.expectedValue;
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "<"});
+
+    return this;
+}
+
+/**
+ * Test if a value is lower or equal than a given compare value
+ *
+ * @param {Number} pExpect the value to compare
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.isLowerEqual = function(pExpect, pCustomDescription)
+{
+    this._setExpectValue(pExpect);
+    this._testResult = this.actualValue <= this.expectedValue;
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "<="});
+
+    return this;
+}
+
+/**
+ * Test if a value is a boolean
+ *
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.isBoolean = function(pCustomDescription)
+{
+    this._setExpectValue("boolean");
+    this._testResult = Utils.isBoolean(this.actualValue);
+    this.actualDisplayValue = typeof this.actualValue;
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "type is"});
+
+    return this;
+}
+
+/**
+ * Test if a value is a number
+ *
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.isNumber = function(pCustomDescription)
+{
+    this._setExpectValue("number");
+    this._testResult = Utils.isNumber(this.actualValue);
+    this.actualDisplayValue = typeof this.actualValue;
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "type is"});
+
+    return this;
+}
+
+/**
+ * Test if a value is numeric
+ *
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.isNumeric = function(pCustomDescription)
+{
+    this._setExpectValue("numeric");
+    this._testResult = Utils.isNumeric(this.actualValue);
+    this.actualDisplayValue = typeof this.actualValue;
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "is"});
+
+    return this;
+}
+
+/**
+ * Test if a value is NaN (not a number)
+ *
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.isNaN = function(pCustomDescription)
+{
+    this._setExpectValue("NaN");
+    this._testResult = Number.isNaN(this.actualValue);
+    this.actualDisplayValue = typeof this.actualValue;
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "type is"});
+
+    return this;
+}
+
+/**
+ * Test if a value is an integer
+ *
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.isInteger = function(pCustomDescription)
+{
+    this._setExpectValue("integer");
+    this._testResult = Utils.isInteger(this.actualValue);
+
+    this.actualDisplayValue = typeof this.actualValue;
+    this.expectedDisplayValue = "number";
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "is", expected: this.expectedValue});
+
+    return this;
+}
+
+/**
+ * Test if a value is a float
+ *
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.isFloat = function(pCustomDescription)
+{
+    this._setExpectValue("float");
+    this._testResult = Utils.isFloat(this.actualValue);
+
+    this.actualDisplayValue = typeof this.actualValue;
+    this.expectedDisplayValue = "number";
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "is", expected: this.expectedValue});
+
+    return this;
+}
+
+/**
+ * Test if a value is a string
+ *
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.isString = function(pCustomDescription)
+{
+    this._setExpectValue("string");
+    this._testResult = Utils.isString(this.actualValue);
+    this.actualDisplayValue = typeof this.actualValue;
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "type is"});
+
+    return this;
+}
+
+/**
+ * Test if a value is an array
+ *
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.isArray = function(pCustomDescription)
+{
+    this._setExpectValue("array");
+    this._testResult = Array.isArray(this.actualValue);
+    this.actualDisplayValue = typeof this.actualValue;
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "type is"});
+
+    return this;
+}
+
+/**
+ * Test if a value is an object
+ *
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.isObject = function(pCustomDescription)
+{
+    this._setExpectValue("object");
+    this._testResult = Utils.isObject(this.actualValue);
+    this.actualDisplayValue = typeof this.actualValue;
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "type is"});
+
+    return this;
+}
+
+/**
+ * Test if a value is a function
+ *
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.isFunction = function(pCustomDescription)
+{
+    this._setExpectValue("function");
+    this._testResult = Utils.isFunction(this.actualValue);
+    this.actualDisplayValue = typeof this.actualValue;
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "type is"});
+
+    return this;
+}
+
+/**
+ * Test if a value is null
+ *
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.isNull = function(pCustomDescription)
+{
+    this._setExpectValue("null");
+    this._testResult = this.actualValue === null;
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "is"});
+
+    return this;
+}
+
+/**
+ * Test if a value is undefined
+ *
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.isUndefined = function(pCustomDescription)
+{
+    this._setExpectValue("undefined");
+    this._testResult = this.actualValue === undefined || typeof this.actualValue === "undefined";
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "is"});
+
+    return this;
+}
+
+/**
+ * Test if a string value is lowercase
+ *
+ * An additional check of the opposite must be made to prevent strings with non-letter characters passing the test
+ *
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.isUpperCase = function(pCustomDescription)
+{
+    this._setExpectValue("uppercase");
+    this._testResult = Utils.isString(this.actualValue)
+                        && this.actualValue === this.actualValue.toUpperCase()
+                        && this.actualValue !== this.actualValue.toLowerCase()
+                        ;
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "is"});
+
+    return this;
+}
+
+/**
+ * Test if a string value is lowercase
+ *
+ * An additional check of the opposite must be made to prevent strings with non-letter characters passing the test
+ *
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.isLowerCase = function(pCustomDescription)
+{
+    this._setExpectValue("lowercase");
+    this._testResult = Utils.isString(this.actualValue)
+                        && this.actualValue === this.actualValue.toLowerCase()
+                        && this.actualValue !== this.actualValue.toUpperCase()
+                        ;
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "is"});
+
+    return this;
+}
+
+/**
+ * Test if a value starts with a given string
+ *
+ * An additional check of the opposite must be made to prevent strings with non-letter characters passing the test
+ *
+ * @param {Number} pExpect the expected string beginning
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.startsWith = function(pExpect, pCustomDescription)
+{
+    this._setExpectValue(pExpect);
+    this._testResult = Utils.isString(this.actualValue) && this.actualValue.startsWith(this.expectedValue);
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "starts with"});
+
+    return this;
+}
+
+/**
+ * Test if a value end with a given string
+ *
+ * An additional check of the opposite must be made to prevent strings with non-letter characters passing the test
+ *
+ * @param {Number} pExpect the expected string beginning
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.endsWith = function(pExpect, pCustomDescription)
+{
+    this._setExpectValue(pExpect);
+    this._testResult = Utils.isString(this.actualValue) && this.actualValue.endsWith(this.expectedValue);
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "ends with"});
+
+    return this;
+}
+
+/**
+ * Test if value is an instance of the expected "class"
+ *
+ * @param {Number} pExpect the expected instance name
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.isInstanceOf = function(pExpect, pCustomDescription)
+{
+    this._setExpectValue(pExpect);
+
+    // Checks the name of the constructor and runs a function to check the actual instance.
+    // To prevent security issues by using `eval()`, a double nested function was needed.
+    // The outer one to evaluate the code, the inner one to be able to pass an argument, that will be evaluated.
+    // TODO: Also check for isObject() before
+    this._testResult = Utils.isObject(this.actualValue)
+                        && this.actualValue.constructor.name === this.expectedValue
+                        && Function('"use strict"; return function(obj) {return obj instanceof ' + this.expectedValue + ';};')()(this.actualValue);
+    this.actualDisplayValue = this.actualValue.constructor.name;
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "is instance of"});
+
+    return this;
+}
+
+/**
+ * Test if value (array, string, object) has the expected length
+ *
+ * @param {Number} pExpect the expected length
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.hasLength = function(pExpect, pCustomDescription)
+{
+    this._setExpectValue(pExpect);
+
+    var length = this._getLength(this.actualValue);
+    this._testResult = length === this.expectedValue;
+    this.actualDisplayValue = length;
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "===", nameSuffix: ".length"});
+
+    return this;
+}
+
+/**
+ * Test if value (array, string, object) has a minimum expected length
+ *
+ * @param {Number} pExpect the expected length
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.hasMinLength = function(pExpect, pCustomDescription)
+{
+    this._setExpectValue(pExpect);
+
+    var length = this._getLength(this.actualValue);
+    this._testResult = length >= this.expectedValue;
+    this.actualDisplayValue = length;
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: ">=", nameSuffix: ".length"});
+
+    return this;
+}
+
+/**
+ * Test if value (array, string, object) has a maximum expected length
+ *
+ * @param {Number} pExpect the expected length
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
+ */
+Tester.prototype.hasMaxLength = function(pExpect, pCustomDescription)
+{
+    this._setExpectValue(pExpect);
+
+    var length = this._getLength(this.actualValue);
+    this._testResult = length <= this.expectedValue;
+    this.actualDisplayValue = length;
+
+    this._generateAssertDescription({custom: pCustomDescription, operator: "<=", nameSuffix: ".length"});
+
+    return this;
+}
+
+
+/**
+ * Test if a callback function throws an exception
+ *
+ * @param {Number} pExpect the expected error
+ * @param {(String|Object)} pCustomDescription an optional custom assert description or config object overwrite
+ * @return {Tester}
  */
-Tester.prototype.getSummary = function ()
+Tester.prototype.throwsException = function(pExpect, pCustomDescription)
 {
-    var summary = {
-        failures : 0,
-        successes : 0,
-        failedTests : [],
-        getMessage : function ()
+    this._setExpectValue(pExpect);
+    this._generateAssertDescription({custom: pCustomDescription, operator: "throws", expected: "exception", name: " "});
+
+    if(this._useNegation)
+    {
+        try
+        {
+            this.actualValue();
+        }
+        catch(e)
+        {
+            this._testResult = true; // Actually `false` and therefore failed, but must be `true` to make negation work
+            this.actualDisplayValue = e;
+            throw e;
+        }
+
+        this._testResult = false; // Actually `true` and therefore successful, but must be `false` to make negation work
+    }
+    else
+    {
+        try
         {
-            var message = "-------------------------\n"
-                + (this.failures ? "Test failure" : "Test success")
-                + "\n-------------------------\nTests performed: " + (this.successes + this.failures)
-                + "\nTests successful: " + this.successes
-                + "\nTests failed: " + this.failures;
-            if (this.failedTests.length)
+            this.actualValue();
+        }
+        catch(e)
+        {
+            this._testResult = e.toSource() === this.expectedValue.toSource();
+
+            if (!this._testResult)
             {
-                message += "\nFailures:";
-                this.failedTests.forEach(function (testName)
-                {
-                    message += "\n\t" + testName;
-                });
+                this.actualDisplayValue = e;
+                throw e;
             }
-            return message;
         }
     }
-    this.testResults.forEach(function ([testName,, successful])
-    {
-        if (successful)
-            summary.successes++;
+
+    return this;
+}
+
+/**
+ * Executes all tests in a TestSuite
+ *
+ * @param {TestSuite} pTestSuite the TestSuite which should be tested
+ * @return {void}
+ */
+Tester.prototype.test = function(pTestSuite)
+{
+    this.currentTestSuite = pTestSuite;
+    this._log("important", "\u2692 Suite: " + this.currentTestSuite.name);
+    this._registerMethodTestCall();
+
+    this.currentTestSuite.preAll(this);
+
+    this.currentTestSuite.tests.forEach(function(pTest) {
+        this._resetTest();
+
+        this.currentTestSuite.preTest(this);
+        this.dataProvider = pTest.dataProviderCallback();
+
+        if(Array.isArray(this.dataProvider) && this.dataProvider.length > 0)
+        {
+            this.dataProvider.forEach(function(pElement, pIndex) {
+                this._runTest(pTest, pIndex);
+            }, this);
+        }
         else
         {
-            summary.failures++;
-            summary.failedTests.push(testName);
+            this._runTest(pTest);
         }
+
+        this.currentTestSuite.postTest(this);
+    }, this);
+
+    this.currentTestSuite.postAll(this);
+}
+
+/**
+ * Calculate test duration
+ *
+ * Will we used in the results and summary output.
+ *
+ * @return {Number} the duration in milliseconds
+ */
+Tester.prototype.getDuration = function()
+{
+    if(this.endTime === null)
+    {
+        this.endTime = new Date().getTime();
+    }
+
+    return this.endTime - this.startTime;
+}
+
+/**
+ * Initializes test coverage by registering available and testable methods of given class
+ *
+ * @param {Object=} pInstanceName an optional class instance to make test coverage work
+ * @return {void}
+ */
+Tester.prototype.initCoverage = function(pInstanceName)
+{
+    if(pInstanceName !== undefined)
+    {
+        this.instanceName = pInstanceName;
+
+        var instanceMethods = Object.getOwnPropertyNames(this.instanceName.prototype).filter(function(property) {
+            return typeof this.instanceName.prototype[property] === 'function';
+        }, this);
+        var staticMethods = Object.getOwnPropertyNames(this.instanceName).filter(function(property) {
+            return typeof this.instanceName[property] === 'function';
+        }, this);
+
+        this.methods = instanceMethods.concat(staticMethods);
+    }
+}
+
+/**
+ * Get the results of current tester as object
+ *
+ * @return {Object} the test results
+ */
+Tester.prototype.getResults = function()
+{
+    return {
+        testCount: this.testCount,
+        assertCount: this.successCount + this.failCount,
+        successCount: this.successCount,
+        failCount: this.failCount,
+        duration: this.getDuration(),
+        coverage: this._getCoverageRate(),
+        methodsTotal: this.methods.length,
+        methodsCalled: this.methodsCalled.length
+    };
+}
+
+/**
+ * Output the summary for a single or multiple test suites to the server log
+ *
+ * The results of multiple tests get cumulated.
+ * There will be no log output if it has been disabled.
+ *
+ * @param {(Object|Object[])} pTestSuiteResults the test suite result(s) to log a summary for
+ * @return {void}
+ */
+Tester.prototype.summary = function(pTestSuiteResults)
+{
+    var testSuiteResults = pTestSuiteResults !== undefined && Array.isArray(pTestSuiteResults) ? pTestSuiteResults : [this.getResults()];
+    var divider = testSuiteResults.length > 1 ? "=" : "-";
+    var title = testSuiteResults.length > 1 ? "All Tests" : this.collectionName;
+
+    var testCount = 0;
+    var assertCount = 0;
+    var successCount = 0;
+    var failCount = 0;
+    var duration = 0;
+
+    testSuiteResults.forEach(function(pTestResult) {
+        testCount += pTestResult.testCount;
+        assertCount += pTestResult.assertCount;
+        successCount += pTestResult.successCount;
+        failCount += pTestResult.failCount;
+        duration += pTestResult.duration;
     });
-    return summary;
+
+    this._log("info", "\n" + title + " Summary:");
+    this._log("info", divider.repeat(32));
+    this._log("", "Total:    " + this.t.important(testCount + " Tests, " + assertCount + " Assertions"));
+    this._log("", "Passed:   " + (successCount === assertCount ? this.t.success(successCount) : this.t.warning(successCount)));
+    this._log("", "Failed:   " + (failCount === 0 ? this.t.success(failCount) : this.t.error(failCount)));
+    this._log("", "Time:     " + this.t.important(duration + "ms"));
+    this._log("", "Coverage: " + this._getCoverageOutput(testSuiteResults));
+    this._log("", "\n\n");
+
+    this._print();
 }
 
 /**
- * With assert you can test if a variable is the same like an expected value.<br/>
- * The test result is added to the Tester<br/>
+ * Write a certain message type to the output
+ *
+ * If the given message type is not valid/allowed, the output will be plain unformatted text.
+ *
+ * @param {String} pType the message type
+ * @param {String} pOutput the actual message
+ * @return {void}
  * 
- * Note: the values are compared by === so also the type is checked.<br/>
- * By using assert you can Test everything you want.<br/>
+ * @private
+ */
+Tester.prototype._log = function(pType, pOutput)
+{
+    var allowedTerminalMethods = ["debug", "success", "info", "error", "warning", "important"];
+
+    if(allowedTerminalMethods.indexOf(pType) !== -1)
+    {
+        this.output += "\n" + this.t[pType](pOutput);
+    }
+    else
+    {
+        this.output += "\n" + pOutput;
+    }
+}
+
+/**
+ * Set the value to test against
+ *
+ * @param {*} pValue
+ * @return {void}
  * 
- * @param {AnyValue} pExpect the expected value
- * @param {AnyValue} pActual the actual value
- * @param {String} [pTestDescription] this is an optional description. You should use it, if you have more than one .assert in your test.
+ * @private
  */
-Tester.prototype.assert = function (pExpect, pActual, pTestDescription)
+Tester.prototype._setExpectValue = function(pValue)
 {
-    this.currentTestHadAlreadyAssert = true;
-    
-    var res = pActual === pExpect;
+    this.expectedValue = pValue;
+    this.expectedDisplayValue = pValue;
+}
+
+/**
+ * Determine, whether an error is expected in the current test run
+ *
+ * @return {Boolean}
+ * 
+ * @private
+ */
+Tester.prototype._testExpectsError = function()
+{
+    return this.expectedValue instanceof Error;
+}
+
+/**
+ * Write the ouput to the log and reset the output to an empty string
+ *
+ * @return {Tester}
+ * 
+ * @private
+ */
+Tester.prototype._print = function()
+{
+    if(this.outputEnabled)
+    {
+        logging.log(this.output);
+    }
     
-    this.testResults.push([
-        this._currentTest,
-        pTestDescription,
-        res,
-        pExpect,
-        pActual
-    ]);
+    this.output = "";
+    return this;
 }
 
 /**
- * Executes all tests in a TestSuite
- * @param {TestSuite} pTestSuite the TestSuite which should be tested
+ * Generates and sets an assert description by given config object or simply set a given custom string
+ *
+ * It also handles using the correct operators when negation via `not()` is used
+ *
+ * @param {Object} pDescriptionConfig a config object
+ * @return {void}
+ * 
+ * @private
  */
-Tester.prototype.test = function (pTestSuite)
+Tester.prototype._generateAssertDescription = function(pDescriptionConfig)
 {
-    pTestSuite.preAll(this);
+    if(Utils.isString(pDescriptionConfig.custom))
+    {
+        this._assertDescription = pDescriptionConfig.custom;
+        return;
+    }
     
-    pTestSuite.tests.forEach(function(pTest) {
-        logging.log("Testing " + pTest[0]);
-        
-        this.currentTestHadAlreadyAssert = false;
-
-        this._currentTest = pTest[0];
-        pTestSuite.preTest(this);
-        
-        if (pTest.length >= 3)
+    Object.assign(pDescriptionConfig, pDescriptionConfig.custom);
+    var valueName = pDescriptionConfig.name || "value";
+    var valueNameSuffix = pDescriptionConfig.nameSuffix || "";
+    var operator = pDescriptionConfig.operator.trim();
+    var expectedValue = pDescriptionConfig.expected || this.expectedDisplayValue;
+    expectedValue = Utils.isString(expectedValue) ? "`" + expectedValue + "`" : expectedValue + "";
+
+    if(this._useNegation)
+    {
+        switch(operator)
         {
-            var errorThrowed = false;
-            
-            try {
-                pTest[1](this);
-            } catch (ex) {
-                errorThrowed = true;
-                
-                if (ex.toSource() == pTest[2].toSource())
-                {
-                    this.testResults.push([
-                        this._currentTest,
-                        "Expected error throwed",
-                        true,
-                        pTest[2].toSource(),
-                        ex.toSource()
-                    ]);
-
-                    // don't throw as it's expected and no detailed stacktrace is needed
-                }
-                else
-                {
-                    this.testResults.push([
-                        this._currentTest,
-                        "Expected error throwed",
-                        false,
-                        pTest[2].toSource(),
-                        ex.toSource()
-                    ]);
-                    
-                    logging.log("Expected error: " + pTest[2].toSource() + ", but wrong error occoured.\nRunning test again without try catch to get detailed error stack trace")
-                    
-                    pTestSuite.preTest(this);
-                    pTest[1](this);
-                    pTestSuite.postTest(this);
-                    return;
-                }
-            }
-            
-            if (!errorThrowed)
-            {
-                // if it didn't fail
-                this.testResults.push([
-                    this._currentTest,
-                    "Expected error throwed",
-                    false,
-                    pTest[2].toSource(),
-                    "no error"
-                ]);
-            }
+            case "===":
+                operator = "!==";
+                break;
+            case ">":
+                operator = "<=";
+                break;
+            case ">=":
+                operator = "<";
+                break;
+            case "<":
+                operator = ">=";
+                break;
+            case "<=":
+                operator = ">";
+                break;
+            case "is":
+            case "type is":
+            case "has":
+                operator += " not";
+                break;
+            case "is instance of":
+                operator += "is not instance of";
+                break;
+            case "starts with":
+            case "ends with":
+            case "throws":
+            default:
+                operator = "not " + operator;
+                break;
         }
-        else
+    }
+
+    this.actualValueElementHierarchy.forEach(function(pElement) {
+        valueName += typeof pElement === "number" ? "[" + pElement + "]" : "." + pElement;
+    }, this);
+    
+    var description = valueName + valueNameSuffix + " " + operator + " " + expectedValue;
+    this._assertDescription = description.trim();
+    this.actualValueElementHierarchy = [];
+}
+
+/**
+ * Reset test-related properties to their initial state
+ *
+ * This is done before every test run to prevent side-effects or expired/invalid data and states
+ *
+ * @return {Tester}
+ * 
+ * @private
+ */
+Tester.prototype._resetTest = function()
+{
+    this.actualValue = undefined;
+    this.actualDisplayValue = undefined;
+    this.actualOriginalValue = undefined;
+    this.actualOriginalDisplayValue = undefined;
+    this.actualValueElementHierarchy = [];
+    this.expectedValue = undefined;
+    this.expectedDisplayValue = undefined;
+    this._assertDescription = "";
+    this._testResult = false;
+    this._useNegation = false;
+
+    return this;
+}
+
+/**
+ * Get the length of a given value or undefined if it is not an array, object or string
+ *
+ * @param {(Array|Object|String)} pActualValue the value to get the length from
+ * @return {Number}
+ * 
+ * @private
+ */
+Tester.prototype._getLength = function(pActualValue)
+{
+    if(Array.isArray(pActualValue) || Utils.isString(pActualValue))
+    {
+        return pActualValue.length;
+    }
+    else if(Utils.isObject(pActualValue))
+    {
+        return Object.keys(pActualValue).length;
+    }
+
+    return undefined;
+}
+
+/**
+ * Get the percentage of test coverage
+ *
+ * Will we used in the results and summary output.
+ *
+ * @return {?Number} the duration in milliseconds
+ */
+Tester.prototype._getCoverageRate = function()
+{
+    if(this.methods.length === 0 && this.methodsCalled.length === 0)
+    {
+        return null;
+    }
+
+    if(this.methods.length === 0 || this.methodsCalled.length === 0)
+    {
+        return 0.00;
+    }
+
+    var coverage = (this.methodsCalled.length / this.methods.length) * 100;
+    coverage = Number.parseFloat(Number.parseFloat(coverage).toFixed(2));
+
+    return coverage > 100 ? 100.00 : coverage;
+}
+
+/**
+ * Register, which method of the given class has been called
+ *
+ * It takes the name of the TestSuite and splits it to get the class name and the method.
+ * Then, it checks if the class has such a method. It gets added to the call-list, if it has not been added yet.
+ * This is necessary to calculate the test coverage.
+ * All available class methods get registered beforehand and will be compared to this list later in `_getCoverageRate()`.
+ *
+ * @return {void}
+ * 
+ * @private
+ */
+Tester.prototype._registerMethodTestCall = function()
+{
+    if(this.instanceName !== undefined)
+    {
+        var callParts = this.currentTestSuite.name.split(".");
+
+        if(callParts[0] === this.instanceName.prototype.constructor.name && this.methods.indexOf(callParts[1]) !== -1)
         {
-            // run without try catch as no error expected
-            pTest[1](this);
+            if(this.methodsCalled.indexOf(callParts[1]) === -1)
+            {
+                this.methodsCalled.push(callParts[1]);
+            }
         }
-        
-        if (!this.currentTestHadAlreadyAssert && pTest.length < 3) // only add message if no error expected
-        {
-            this.testResults.push([
-                    this._currentTest,
-                    "Expected no error",
-                    true,
-                    "no error",
-                    "no error"
-                ]);
+    }
+}
+
+/**
+ * Renders the output for the test coverage
+ *
+ * The results of multiple tests get cumulated.
+ *
+ * @param {Object[]} pTestSuiteResults the test suite(s) to log a summary for
+ * @return {String} the test coverage output
+ */
+Tester.prototype._getCoverageOutput = function(pTestSuiteResults)
+{
+    var coverageOutput = this.t.debug("unknown");
+    var methodsTotal = 0;
+    var methodsCalled = 0;
+    var coverage = null;
+    var avgCoverage = null;
+    var coverageMethodCount = null;
+
+    pTestSuiteResults.forEach(function(pTestResult) {
+        methodsTotal += pTestResult.methodsTotal;
+        methodsCalled += pTestResult.methodsCalled;
+
+        if(pTestResult.coverage !== null) {
+            coverage += pTestResult.coverage;
         }
-            
-        pTestSuite.postTest(this);
-    }, this);
-    
-    pTestSuite.postAll(this);
+    });
+
+    if(coverage !== null)
+    {
+        avgCoverage = coverage / pTestSuiteResults.length;
+        coverageMethodCount = "(" + methodsCalled + "/" + methodsTotal + ")";
+    }
+
+    if(avgCoverage >= 80)
+    {
+        coverageOutput = this.t.success(avgCoverage + "% " + coverageMethodCount);
+    }
+    else if(avgCoverage >= 50)
+    {
+        coverageOutput = this.t.warning(avgCoverage + "% " + coverageMethodCount);
+    }
+    else if(avgCoverage > 0)
+    {
+        coverageOutput = this.t.error(avgCoverage + "% " + coverageMethodCount);
+    }
+
+    return coverageOutput;
 }
 
 /**
- * Prints the test results to the log
+ * Generates the title for the test about to run
+ *
+ * @param {Test} pTest the test to run
+ * @param {Number} pDataProviderIndex the current index of the data provider
+ * @return {void}
+ * 
+ * @private
  */
-Tester.prototype.printResults = function ()
+Tester.prototype._generateTestTitle = function(pTest, pDataProviderIndex)
 {
-    var lastTestDescription = "";
-    logging.log("Test results for \"" + this.collectionName + "\"")
-    this.testResults.forEach(function(pResult) {
-        
-        if (lastTestDescription != pResult[0])
+    if(pDataProviderIndex !== undefined)
+    {
+        var titleValues = [];
+
+        this.dataProvider[pDataProviderIndex].forEach(function(pElement) {
+            titleValues.push(pElement === undefined ? "undefined" : JSON.stringify(pElement));
+        });
+        this._log("", this.t.info("\t\u2699 Test: " + pTest.name) + this.t.debug(" (#" + (pDataProviderIndex + 1) + ": " + titleValues.join(" | ") + ")"));
+    }
+    else
+    {
+        this._log("info", "\t\u2699 Test: " + pTest.name);
+    }
+}
+
+/**
+ * Runs a single test iteration and handles errors
+ *
+ * @param {Test} pTest the test to run
+ * @param {Number} pDataProviderIndex the current index of the data provider
+ * @return {void}
+ * 
+ * @private
+ */
+Tester.prototype._runTest = function(pTest, pDataProviderIndex)
+{
+    this._generateTestTitle(pTest, pDataProviderIndex);
+    this.testCount++;
+
+    var dataProvider = pDataProviderIndex !== undefined ? this.dataProvider[pDataProviderIndex] : undefined;
+
+    try
+    {
+        pTest.callback(this, dataProvider);
+    }
+    catch (e)
+    {
+        this.assert();
+
+        // Expected, but wrong error
+        if (this._testExpectsError() && e.toSource() !== this.expectedValue.toSource())
         {
-            logging.log("Test \"" + pResult[0] + "\":");
+            this._log("error", "Wrong error occurred");
+            this._log("warning", "\t\t expected: " + this.expectedValue.toSource());
+            this._log("error", "\t\t actual:   " + e.toSource());
         }
-        
-        var message = (pResult[1] ? " - " + pResult[1] : " - Test result ") + ": " + (pResult[2] ? "success" : "fail\nexpected: " + JSON.stringify(pResult[3], null, "\t") + "\nactual: " + JSON.stringify(pResult[4], null, "\t"));
-        
-        logging.log(message);
-        lastTestDescription = pResult[0];
-    }, this);
-    logging.log(this.getSummary().getMessage());
-}
\ No newline at end of file
+        else
+        { // Unexpected error
+            this._log("error", "Unexpected error occurred");
+        }
+
+        var exception = logging.toLogString(e["rhinoException"] !== undefined ? e["rhinoException"] : e, true);
+        this._log("error", e.name + ":\n" + exception.replace(/\s+(at|\[->\])\s/g, "\n\t$1 "));
+        this._log("error", "jDito callstack:\n" + e.stack);
+
+        if(pTest.rerunOnError)
+        {
+            this._log("debug", "Rerun without try-catch to get detailed error stack trace");
+            this._print();
+
+            this.currentTestSuite.preTest(this);
+            pTest.callback(this, dataProvider);
+            this.currentTestSuite.postTest(this);
+        }
+    }
+}
diff --git a/process/UnitTest_test/UnitTest_test.aod b/process/UnitTest_test/UnitTest_test.aod
new file mode 100644
index 0000000000000000000000000000000000000000..853608a4031b47bab007db1dd836433d694f1c2e
--- /dev/null
+++ b/process/UnitTest_test/UnitTest_test.aod
@@ -0,0 +1,12 @@
+<?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>UnitTest_test</name>
+  <title>[TEST] UnitTest_lib</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <icon>VAADIN:CHECK_CIRCLE</icon>
+  <process>%aditoprj%/process/UnitTest_test/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>
diff --git a/process/UnitTest_test/process.js b/process/UnitTest_test/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..7d80b7995e42cc7b6bc74c8b3f417f2ce3ae0329
--- /dev/null
+++ b/process/UnitTest_test/process.js
@@ -0,0 +1,1141 @@
+import("system.result");
+import("system.vars");
+import("Keyword_lib");
+import("UnitTest_lib");
+
+
+var equals = new TestSuite("Tester.equals", [
+    new Test("should test value equality",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).equals(pDataProvider[2]).getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            var num = 0;
+            var str = '0';
+            var objStr = new String('0');
+            var obj_1 = {a: 1, b: 2, c: 3};
+            var obj_2 = {x: null, y: "test", z: true};
+            
+            return [
+                [true,  num,     num],
+                [true,  str,     str],
+                [true,  true,    true],
+                [true,  objStr,  objStr],
+                [true,  obj_1,   obj_1],
+                [true,  obj_2,   obj_2],
+                [false, true,    false],
+                [false, obj_1,   obj_2],
+                [false, num,     objStr],
+                [false, num,     str],
+                [false, objStr,  str],
+                [false, null,    undefined],
+                [false, objStr,  null],
+                [false, objStr,  undefined],
+                [false, null,    "null"],
+            ];
+        }
+    )
+]);
+
+var isGreater = new TestSuite("Tester.isGreater", [
+    new Test("should test if value is greater than another",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).isGreater(pDataProvider[2]).getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  1,    0],
+                [true,  100,  10],
+                [false, 3,    3],
+                [false, 0,    5],
+                [false, 1234, 5678],
+            ];
+        }
+    )
+]);
+
+var isGreaterEqual = new TestSuite("Tester.isGreaterEqual", [
+    new Test("should test if value is greater or equal than another",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).isGreaterEqual(pDataProvider[2]).getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  1,    0],
+                [true,  101,  100],
+                [true,  3,    3],
+                [false, 0,    5],
+                [false, 1234, 5678],
+            ];
+        }
+    )
+]);
+
+var isLower = new TestSuite("Tester.isLower", [
+    new Test("should test if value is lower than another",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).isLower(pDataProvider[2]).getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  0,    1],
+                [true,  10,   100],
+                [false, 3,    3],
+                [false, 5,    0],
+                [false, 5678, 1234],
+            ];
+        }
+    )
+]);
+
+var isLowerEqual = new TestSuite("Tester.isLowerEqual", [
+    new Test("should test if value is greater or equal than another",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).isLowerEqual(pDataProvider[2]).getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  0,    1],
+                [true,  100,  101],
+                [true,  3,    3],
+                [false, 5,    0],
+                [false, 5678, 1234],
+            ];
+        }
+    )
+]);
+
+var isBoolean = new TestSuite("Tester.isBoolean", [
+    new Test("should test if value is a boolean",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).isBoolean().getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  true],
+                [true,  false],
+                [false, "true"],
+                [false, "false"],
+                [false, ""],
+                [false, "0"],
+                [false, 0],
+                [false, new Object()],
+                [false, []],
+                [false, null],
+                [false, undefined],
+            ];
+        }
+    )
+]);
+
+var isNumber = new TestSuite("Tester.isNumber", [
+    new Test("should test if value is a number",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).isNumber().getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  0],
+                [true,  100],
+                [true,  33.33333],
+                [true,  0xFFFFFF],
+                [true,  0777], // Octal
+                //[true,  0o777], // New octal format since ECMAScript 2015
+                //[true,  0b11111111], // Seems like binary numbers are not supported
+                [true,  2e6], // Exponentiation
+                [true,  0.1e2], // Exponentiation
+                [true,  +Infinity],
+                [true,  -Infinity],
+                [true,  NaN], // This should actually fail. Needs fix in Utils
+                [false, ""],
+                [false, "0"],
+                [false, new Object()],
+                [false, []],
+                [false, true],
+                [false, null],
+                [false, undefined],
+            ];
+        }
+    )
+]);
+
+var isNumeric = new TestSuite("Tester.isNumeric", [
+    new Test("should test if value is numeric",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).isNumeric().getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  0],
+                [true,  100],
+                [true,  33.33333],
+                [true,  "0777"], // Octal
+                [true,  "2e6"], // Exponentiation
+                [true,  "0.1e2"], // Exponentiation
+                [true,  +Infinity],
+                [true,  -Infinity],
+                [true,  NaN], // This should actually fail. Needs fix in Utils
+                [true,  "50000"],
+                [true,  "0"],
+                [false, ""],
+                [false, new Object()],
+                [false, []],
+                [false, true],
+                [false, null],
+                [false, undefined],
+            ];
+        }
+    )
+]);
+
+var isNotANumber = new TestSuite("Tester.isNaN", [
+    new Test("should test if value is not NaN",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).isNaN().getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  NaN],
+                [false, 0],
+                [false, 100],
+                [false, 33.33333],
+                [false, "0777"], // Octal
+                [false, "2e6"], // Exponentiation
+                [false, "0.1e2"], // Exponentiation
+                [false, +Infinity],
+                [false, -Infinity],
+                [false, "50000"],
+                [false, "0"],
+                [false,  ""],
+                [false,  new Object()],
+                [false,  []],
+                [false,  true],
+                [false,  null],
+                [false,  undefined],
+            ];
+        }
+    )
+]);
+
+var isInteger = new TestSuite("Tester.isInteger", [
+    new Test("should test if value is an integer",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).isInteger().getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  0],
+                [true,  100],
+                [true,  0xFFFFFF],
+                [true,  0777], // Octal
+                [true,  2e6], // Exponentiation
+                [true,  0.1e2], // Exponentiation
+                [true,  "0"],
+                [false, 33.33333],
+                [false, +Infinity],
+                [false, -Infinity],
+                [false, NaN],
+                [false, ""],
+                [false, new Object()],
+                [false, []],
+                [false, true],
+                [false, null],
+                [false, undefined],
+            ];
+        }
+    )
+]);
+
+var isFloat = new TestSuite("Tester.isFloat", [
+    new Test("should test if value is a float",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).isFloat().getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  33.33333],
+                [false, 0],
+                [false, 100],
+                [false, 0xFFFFFF],
+                [false, 0777], // Octal
+                [false, 2e6], // Exponentiation
+                [false, 0.1e2], // Exponentiation
+                [false, +Infinity],
+                [false, -Infinity],
+                [false, NaN],
+                [false, ""],
+                [false, "0"],
+                [false, new Object()],
+                [false, []],
+                [false, true],
+                [false, null],
+                [false, undefined],
+            ];
+        }
+    )
+]);
+
+var isString = new TestSuite("Tester.isString", [
+    new Test("should test if value is a string",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).isString().getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  ""],
+                [true,  "Hello"],
+                [true,  "0"],
+                [false, new String('Hello')],
+                [false, []],
+                [false, 0],
+                [false, true],
+                [false, null],
+                [false, undefined],
+            ];
+        }
+    )
+]);
+
+var isArray = new TestSuite("Tester.isArray", [
+    new Test("should test if value is an array",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).isArray().getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  []],
+                [true,  ["a", 2, null]],
+                [true,  new Array()],
+                [false, ""],
+                [false, "0"],
+                [false, new Object()],
+                [false, new Function()],
+                [false, 0],
+                [false, true],
+                [false, null],
+                [false, undefined],
+            ];
+        }
+    )
+]);
+
+var isObject = new TestSuite("Tester.isObject", [
+    new Test("should test if value is an object",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).isObject().getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  {}],
+                [true,  []],
+                [true,  ["a", 2, null]],
+                [true,  new Array()],
+                [true,  new Object()],
+                [true,  new String("hello")],
+                [false, new Function()],
+                [false, ""],
+                [false, "0"],
+                [false, 0],
+                [false, true],
+                [false, null],
+                [false, undefined],
+            ];
+        }
+    )
+]);
+
+var isFunction = new TestSuite("Tester.isFunction", [
+    new Test("should test if value is a function",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).isFunction().getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  new Function()],
+                [true,  function(){}],
+                [true,  Math.sin],
+                [true,  Array.isArray],
+                [false, new Array()],
+                [false, new Object()],
+                [false, ""],
+                [false, "0"],
+                [false, 0],
+                [false, true],
+                [false, null],
+                [false, undefined],
+            ];
+        }
+    )
+]);
+
+var isNull = new TestSuite("Tester.isNull", [
+    new Test("should test if value is null",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).isNull().getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  null],
+                [false, ""],
+                [false, "Hello"],
+                [false, "0"],
+                [false, new String('Hello')],
+                [false, []],
+                [false, 0],
+                [false, true],
+                [false, undefined],
+            ];
+        }
+    )
+]);
+
+var isUndefined = new TestSuite("Tester.isUndefined", [
+    new Test("should test if value is undefined",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).isUndefined().getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  undefined],
+                [false, ""],
+                [false, "Hello"],
+                [false, "0"],
+                [false, new String('Hello')],
+                [false, []],
+                [false, 0],
+                [false, true],
+                [false, null],
+            ];
+        }
+    )
+]);
+
+var isUpperCase = new TestSuite("Tester.isUpperCase", [
+    new Test("should test if value is an uppercase string",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).isUpperCase().getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  "HELLO"],
+                [false, "HeLlo"],
+                [false, "hello"],
+                [false, "0"],
+                [false, new String('Hello')],
+                [false, []],
+                [false, 0],
+                [false, true],
+                [false, null],
+                [false, undefined],
+            ];
+        }
+    )
+]);
+
+var isLowerCase = new TestSuite("Tester.isLowerCase", [
+    new Test("should test if value is a lowercase string",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).isLowerCase().getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  "hello"],
+                [false, "HELLO"],
+                [false, "HeLlo"],
+                [false, "0"],
+                [false, new String('Hello')],
+                [false, []],
+                [false, 0],
+                [false, true],
+                [false, null],
+                [false, undefined],
+            ];
+        }
+    )
+]);
+
+var startsWith = new TestSuite("Tester.startsWith", [
+    new Test("should test if value starts with a given string",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).startsWith(pDataProvider[2]).getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  "Millenium Falcon", "Mill"],
+                [false, "Millenium Falcon", "MILL"],
+                [false, "Millenium Falcon", "Abc"],
+                [false, "Millenium Falcon", "0"],
+            ];
+        }
+    )
+]);
+
+var endsWith = new TestSuite("Tester.endsWith", [
+    new Test("should test if value ends with a given string",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).endsWith(pDataProvider[2]).getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  "Millenium Falcon", "con"],
+                [false, "Millenium Falcon", "CON"],
+                [false, "Millenium Falcon", "Abc"],
+                [false, "Millenium Falcon", "0"],
+            ];
+        }
+    )
+]);
+
+var isInstanceOf = new TestSuite("Tester.isInstanceOf", [
+    new Test("should test if value is an instance of given class",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).isInstanceOf(pDataProvider[2]).getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  new Tester(), "Tester"],
+                [true,  [],           "Array"],
+                [true,  {},           "Object"],
+                [false, "abc",        "String"],
+                [false, true,         "Boolean"],
+                [false, 0,            "Number"],
+            ];
+        }
+    )
+]);
+
+var hasLength = new TestSuite("Tester.hasLength", [
+    new Test("should test if value has the expected length",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).hasLength(pDataProvider[2]).getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  "",               0],
+                [true,  [],               0],
+                [true,  {},               0],
+                [true,  "abc",            3],
+                [true,  ["a", "z"],       2],
+                [true,  new String("?!"), 2],
+                [false, 0,                1],
+                [false, true,             1],
+                [false, null,             1],
+                [false, undefined,        1],
+            ];
+        }
+    )
+]);
+
+
+var hasMinLength = new TestSuite("Tester.hasMinLength", [
+    new Test("should test if value has the expected minimum length",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).hasMinLength(pDataProvider[2]).getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  "",               0],
+                [true,  [],               0],
+                [true,  {},               0],
+                [true,  "abc",            3],
+                [true,  "abc",            2],
+                [true,  ["a", "z"],       2],
+                [true,  ["a", "z"],       1],
+                [true,  new String("?!"), 2],
+                [false, "abc",            4],
+                [false, ["a", "z"],       5],
+                [false, 0,                1],
+                [false, true,             1],
+                [false, null,             1],
+                [false, undefined,        1],
+            ];
+        }
+    )
+]);
+
+
+var hasMaxLength = new TestSuite("Tester.hasMaxLength", [
+    new Test("should test if value has the expected maximum length",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).hasMaxLength(pDataProvider[2]).getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  "",               0],
+                [true,  [],               0],
+                [true,  {},               0],
+                [true,  "abc",            3],
+                [true,  "abc",            4],
+                [true,  ["a", "z"],       2],
+                [true,  ["a", "z"],       3],
+                [true,  new String("?!"), 2],
+                [false, "abc",            2],
+                [false, ["a", "z"],       1],
+                [false, 0,                1],
+                [false, true,             1],
+                [false, null,             1],
+                [false, undefined,        1],
+            ];
+        }
+    )
+]);
+
+var not = new TestSuite("Tester.not", [
+    new Test("should test negation of compare tests",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var method = pDataProvider[1];
+            var actualValue = dummyTester.expectThat(pDataProvider[2]).not()[method](pDataProvider[3]).getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            var num = 0;
+            var str = '0';
+            var objStr = new String('0');
+            var obj_1 = {a: 1, b: 2, c: 3};
+            var obj_2 = {x: null, y: "test", z: true};
+            
+            return [
+                [true,  "equals",         true,               false],
+                [true,  "equals",         obj_1,              obj_2],
+                [true,  "equals",         num,                objStr],
+                [false, "equals",         num,                num],
+                [false, "equals",         str,                str],
+                [false, "equals",         true,               true],
+                [true,  "isGreater",      3,                  3],
+                [true,  "isGreater",      0,                  5],
+                [true,  "isGreater",      1234,               5678],
+                [false, "isGreater",      1,                  0],
+                [false, "isGreater",      100,                10],
+                [true,  "isGreaterEqual", 0,                  5],
+                [true,  "isGreaterEqual", 1234,               5678],
+                [false, "isGreaterEqual", 1,                  0],
+                [false, "isGreaterEqual", 101,                100],
+                [false, "isGreaterEqual", 3,                  3],
+                [true,  "isLower",        3,                  3],
+                [true,  "isLower",        5,                  0],
+                [true,  "isLower",        5678,               1234],
+                [false, "isLower",        0,                  1],
+                [false, "isLower",        10,                 100],
+                [true,  "isLowerEqual",   5,                  0],
+                [true,  "isLowerEqual",   5678,               1234],
+                [false, "isLowerEqual",   0,                  1],
+                [false, "isLowerEqual",   100,                101],
+                [false, "isLowerEqual",   3,                  3],
+                [true,  "startsWith",     "Millenium Falcon", "MILL"],
+                [true,  "startsWith",     "Millenium Falcon", "Abc"],
+                [true,  "startsWith",     "Millenium Falcon", "0"],
+                [false, "startsWith",     "Millenium Falcon", "Mill"],
+                [true,  "endsWith",       "Millenium Falcon", "CON"],
+                [true,  "endsWith",       "Millenium Falcon", "Abc"],
+                [true,  "endsWith",       "Millenium Falcon", "0"],
+                [false, "endsWith",       "Millenium Falcon", "con"],
+                [true,  "isInstanceOf",   "abc",              "String"],
+                [true,  "isInstanceOf",   true,               "Boolean"],
+                [true,  "isInstanceOf",   0,                  "Number"],
+                [false, "isInstanceOf",   new Tester(),       "Tester"],
+                [false, "isInstanceOf",   [],                 "Array"],
+                [false, "isInstanceOf",   {},                 "Object"],
+                [true,  "hasLength",      0,                  1],
+                [true,  "hasLength",      true,               1],
+                [true,  "hasLength",      null,               1],
+                [true,  "hasLength",      undefined,          1],
+                [false, "hasLength",      "",                 0],
+                [false, "hasLength",      [],                 0],
+                [false, "hasLength",      {},                 0],
+                [false, "hasLength",      "abc",              3],
+                [false, "hasLength",      ["a", "z"],         2],
+                [false, "hasLength",      new String("?!"),   2],
+            ];
+        }
+    ),
+    new Test("should test negation of type tests",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var method = pDataProvider[1];
+            var actualValue = dummyTester.expectThat(pDataProvider[2]).not()[method]().getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  "isBoolean",   "true"],
+                [true,  "isBoolean",   "false"],
+                [true,  "isBoolean",   ""],
+                [true,  "isBoolean",   "0"],
+                [true,  "isBoolean",   0],
+                [true,  "isBoolean",   new Object()],
+                [true,  "isBoolean",   []],
+                [true,  "isBoolean",   null],
+                [true,  "isBoolean",   undefined],
+                [false, "isBoolean",   true],
+                [false, "isBoolean",   false],
+                [true,  "isNumber",    ""],
+                [true,  "isNumber",    "0"],
+                [true,  "isNumber",    new Object()],
+                [true,  "isNumber",    []],
+                [true,  "isNumber",    true],
+                [true,  "isNumber",    null],
+                [true,  "isNumber",    undefined],
+                [false, "isNumber",    0],
+                [false, "isNumber",    100],
+                [false, "isNumber",    33.33333],
+                [false, "isNumber",    0xFFFFFF],
+                [false, "isNumber",    0777], // Octal
+                [false, "isNumber",    2e6], // Exponentiation
+                [false, "isNumber",    0.1e2], // Exponentiation
+                [false, "isNumber",    +Infinity],
+                [false, "isNumber",    -Infinity],
+                [false, "isNumber",    NaN],
+                [true,  "isNumeric",   ""],
+                [true,  "isNumeric",   new Object()],
+                [true,  "isNumeric",   []],
+                [true,  "isNumeric",   true],
+                [true,  "isNumeric",   null],
+                [true,  "isNumeric",   undefined],
+                [false, "isNumeric",   0],
+                [false, "isNumeric",   100],
+                [false, "isNumeric",   33.33333],
+                [false, "isNumeric",   "0777"], // Octal
+                [false, "isNumeric",   "2e6"], // Exponentiation
+                [false, "isNumeric",   "0.1e2"], // Exponentiation
+                [false, "isNumeric",   +Infinity],
+                [false, "isNumeric",   -Infinity],
+                [false, "isNumeric",   NaN],
+                [false, "isNumeric",   "50000"],
+                [false, "isNumeric",   "0"],
+                [true,  "isNaN",       0],
+                [true,  "isNaN",       100],
+                [true,  "isNaN",       33.33333],
+                [true,  "isNaN",       "0777"], // Octal
+                [true,  "isNaN",       "2e6"], // Exponentiation
+                [true,  "isNaN",       "0.1e2"], // Exponentiation
+                [true,  "isNaN",       +Infinity],
+                [true,  "isNaN",       -Infinity],
+                [true,  "isNaN",       "50000"],
+                [true,  "isNaN",       "0"],
+                [true,  "isNaN",       ""],
+                [true,  "isNaN",       new Object()],
+                [true,  "isNaN",       []],
+                [true,  "isNaN",       true],
+                [true,  "isNaN",       null],
+                [true,  "isNaN",       undefined],
+                [false, "isNaN",       NaN],
+                [true,  "isInteger",   33.33333],
+                [true,  "isInteger",   +Infinity],
+                [true,  "isInteger",   -Infinity],
+                [true,  "isInteger",   NaN],
+                [true,  "isInteger",   ""],
+                [true,  "isInteger",   new Object()],
+                [true,  "isInteger",   []],
+                [true,  "isInteger",   true],
+                [true,  "isInteger",   null],
+                [true,  "isInteger",   undefined],
+                [false, "isInteger",   0],
+                [false, "isInteger",   100],
+                [false, "isInteger",   0xFFFFFF],
+                [false, "isInteger",   0777], // Octal
+                [false, "isInteger",   2e6], // Exponentiation
+                [false, "isInteger",   0.1e2], // Exponentiation
+                [false, "isInteger",   "0"],
+                [true,  "isFloat",     0],
+                [true,  "isFloat",     100],
+                [true,  "isFloat",     0xFFFFFF],
+                [true,  "isFloat",     0777], // Octal
+                [true,  "isFloat",     2e6], // Exponentiation
+                [true,  "isFloat",     0.1e2], // Exponentiation
+                [true,  "isFloat",     +Infinity],
+                [true,  "isFloat",     -Infinity],
+                [true,  "isFloat",     NaN],
+                [true,  "isFloat",     ""],
+                [true,  "isFloat",     "0"],
+                [true,  "isFloat",     new Object()],
+                [true,  "isFloat",     []],
+                [true,  "isFloat",     true],
+                [true,  "isFloat",     null],
+                [true,  "isFloat",     undefined],
+                [false, "isFloat",     33.33333],
+                [true,  "isString",    new String('Hello')],
+                [true,  "isString",    []],
+                [true,  "isString",    0],
+                [true,  "isString",    true],
+                [true,  "isString",    null],
+                [true,  "isString",    undefined],
+                [false, "isString",    ""],
+                [false, "isString",    "Hello"],
+                [false, "isString",    "0"],
+                [true,  "isArray",     ""],
+                [true,  "isArray",     "0"],
+                [true,  "isArray",     new Object()],
+                [true,  "isArray",     new Function()],
+                [true,  "isArray",     0],
+                [true,  "isArray",     true],
+                [true,  "isArray",     null],
+                [true,  "isArray",     undefined],
+                [false, "isArray",     []],
+                [false, "isArray",     ["a", 2, null]],
+                [false, "isArray",     new Array()],
+                [true,  "isObject",    new Function()],
+                [true,  "isObject",    ""],
+                [true,  "isObject",    "0"],
+                [true,  "isObject",    0],
+                [true,  "isObject",    true],
+                [true,  "isObject",    null],
+                [true,  "isObject",    undefined],
+                [false, "isObject",    {}],
+                [false, "isObject",    []],
+                [false, "isObject",    ["a", 2, null]],
+                [false, "isObject",    new Array()],
+                [false, "isObject",    new Object()],
+                [false, "isObject",    new String("hello")],
+                [true,  "isFunction",  new Array()],
+                [true,  "isFunction",  new Object()],
+                [true,  "isFunction",  ""],
+                [true,  "isFunction",  "0"],
+                [true,  "isFunction",  0],
+                [true,  "isFunction",  true],
+                [true,  "isFunction",  null],
+                [true,  "isFunction",  undefined],
+                [false, "isFunction",  new Function()],
+                [false, "isFunction",  function(){}],
+                [false, "isFunction",  Math.sin],
+                [false, "isFunction",  Array.isArray],
+                [true,  "isNull",      ""],
+                [true,  "isNull",      "Hello"],
+                [true,  "isNull",      "0"],
+                [true,  "isNull",      new String('Hello')],
+                [true,  "isNull",      []],
+                [true,  "isNull",      0],
+                [true,  "isNull",      true],
+                [true,  "isNull",      undefined],
+                [false, "isNull",      null],
+                [true,  "isUndefined", ""],
+                [true,  "isUndefined", "Hello"],
+                [true,  "isUndefined", "0"],
+                [true,  "isUndefined", new String('Hello')],
+                [true,  "isUndefined", []],
+                [true,  "isUndefined", 0],
+                [true,  "isUndefined", true],
+                [true,  "isUndefined", null],
+                [false, "isUndefined", undefined],
+                [true,  "isUpperCase", "HeLlo"],
+                [true,  "isUpperCase", "hello"],
+                [true,  "isUpperCase", "0"],
+                [true,  "isUpperCase", new String('Hello')],
+                [true,  "isUpperCase", []],
+                [true,  "isUpperCase", 0],
+                [true,  "isUpperCase", true],
+                [true,  "isUpperCase", null],
+                [true,  "isUpperCase", undefined],
+                [false, "isUpperCase", "HELLO"],
+                [true,  "isLowerCase", "HELLO"],
+                [true,  "isLowerCase", "HeLlo"],
+                [true,  "isLowerCase", "0"],
+                [true,  "isLowerCase", new String('Hello')],
+                [true,  "isLowerCase", []],
+                [true,  "isLowerCase", 0],
+                [true,  "isLowerCase", true],
+                [true,  "isLowerCase", null],
+                [true,  "isLowerCase", undefined],
+                [false, "isLowerCase", "hello"],
+            ];
+        }
+    ),
+    new Test("should not affect other assertions",
+    function(pTester) {
+
+        var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+        //first assertion with not()-call
+        var expectValue = true;
+        var actualValue = dummyTester.expectThat("this value").not().equals("that other value").getTestResult();
+        pTester.expectThat(actualValue).equals(expectValue).assert();
+
+        //second test without not()-call => the first not()-call should not affect the second assertion
+        expectValue = false;
+        actualValue = dummyTester.expectThat("this value").equals("that other value").getTestResult();
+        pTester.expectThat(actualValue).equals(expectValue).assert();
+    }
+    )
+]);
+
+var elementAt = new TestSuite("Tester.elementAt", [
+    new Test("should test if value element at key position passes test",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var key = pDataProvider[2];
+            var method = pDataProvider[3];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).elementAt(key)[method](pDataProvider[4]).getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  ["a", "z", ["x", true, 42]],                0, "isString",  undefined],
+                [true,  ["a", "z", ["x", true, 42]],                1, "equals",    "z"],
+                [true,  ["a", "z", ["x", true, 42]],                2, "isArray",   undefined],
+                [true,  ["a", "z", ["x", true, 42]],                2, "hasLength", 3],
+                [true,  ["a", "z", {"first": "x", "second": true}], 2, "isObject",  undefined],
+                [true,  ["a", "z", {"first": "x", "second": true}], 2, "hasLength", 2],
+                [false, ["a", "z", ["x", true, 42]],                0, "isNumeric", undefined],
+                [false, ["a", "z", ["x", true, 42]],                1, "equals",    "a"],
+                [false, ["a", "z", ["x", true, 42]],                2, "isString",  undefined],
+                [false, ["a", "z", ["x", true, 42]],                2, "hasLength", 1],
+                [false, ["a", "z", {"first": "x", "second": true}], 2, "isArray",   undefined],
+                [false, ["a", "z", {"first": "x", "second": true}], 2, "hasLength", 1],
+            ];
+        }
+    ),
+    new Test("should test if nested value element at key position passes test",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            var key1 = pDataProvider[2];
+            var key2 = pDataProvider[3];
+            var method = pDataProvider[4];
+            var actualValue = dummyTester.expectThat(pDataProvider[1]).elementAt(key1).elementAt(key2)[method](pDataProvider[5]).getTestResult();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [true,  [["x", true, [42]]],            0,       0,        "isString",  undefined],
+                [true,  [["x", true, [42]]],            0,       0,        "equals",    "x"],
+                [true,  [["x", true, [42]]],            0,       1,        "isBoolean", undefined],
+                [true,  [["x", true, [42]]],            0,       1,        "equals",    true],
+                [true,  [["x", true, [42]]],            0,       2,        "isArray",   undefined],
+                [true,  [{"first": "a", "second": 42}], 0,       "first",  "equals",    "a"],
+                [true,  [{"first": "a", "second": 42}], 0,       "second", "equals",    42],
+                [true,  {"outer": {"inner": "a"}},      "outer", "inner",  "isString",  undefined],
+                [true,  {"outer": {"inner": "a"}},      "outer", "inner",  "equals",    "a"],
+                [false, [["x", true, [42]]],            0,       1,        "equals",    "a"],
+                [false, [["x", true, [42]]],            0,       2,        "isNumber",  undefined],
+                [false, {"outer": {"inner": "a"}},      "outer", "inner",  "isNumber",  undefined],
+            ];
+        }
+    )
+]);
+
+var getCoverageRate = new TestSuite("Tester._getCoverageRate", [
+    new Test("should test if coverage is correctly calculated",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[0];
+            dummyTester.methods = pDataProvider[1];
+            dummyTester.methodsCalled = pDataProvider[2];
+            var actualValue = dummyTester._getCoverageRate();
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                [100,   ["method1", "method2", "method3"], ["method1", "method2", "method3"]],
+                [33.33, ["method1", "method2", "method3"], ["method1"]],
+                [66.67, ["method1", "method2", "method3"], ["method1", "method2"]],
+                [100,   ["method1"],                       ["method1", "method2", "method3"]],
+                [0,     ["method1"],                       []],
+                [0,     [],                                ["method1"]],
+                [null,  [],                                []],
+            ];
+        }
+    )
+]);
+
+var getLength = new TestSuite("Tester._getLength", [
+    new Test("should test if value has the expected length",
+        function(pTester, pDataProvider) {
+            
+            var dummyTester = (new Tester("Test Dummy")).setOutputEnabled(false);
+            var expectValue = pDataProvider[1];
+            var actualValue = dummyTester._getLength(pDataProvider[0]);
+
+            pTester.expectThat(actualValue).equals(expectValue).assert();
+        },
+        function dataProvider() {
+            return [
+                ["",               0],
+                [[],               0],
+                [{},               0],
+                ["abc",            3],
+                [["a", "z"],       2],
+                [new String("?!"), 2],
+                [{first: "xyz"},   1],
+                [0,                undefined],
+                [true,             undefined],
+                [null,             undefined],
+                [undefined,        undefined],
+            ];
+        }
+    )
+]);
+
+
+
+var tester = new Tester("Test UnitTest_lib");
+tester.initCoverage(Tester);
+tester.test(equals);
+tester.test(isGreater);
+tester.test(isGreaterEqual);
+tester.test(isLower);
+tester.test(isLowerEqual);
+tester.test(isBoolean);
+tester.test(isNumber);
+tester.test(isNumeric);
+tester.test(isNotANumber);
+tester.test(isInteger);
+tester.test(isFloat);
+tester.test(isString);
+tester.test(isArray);
+tester.test(isObject);
+tester.test(isFunction);
+tester.test(isNull);
+tester.test(isUndefined);
+tester.test(isUpperCase);
+tester.test(isLowerCase);
+tester.test(startsWith);
+tester.test(endsWith);
+tester.test(isInstanceOf);
+tester.test(hasLength);
+tester.test(hasMinLength);
+tester.test(hasMaxLength);
+tester.test(not);
+tester.test(elementAt);
+tester.test(getCoverageRate);
+tester.test(getLength);
+
+tester.summary();
+    
+result.object(tester.getResults());
diff --git a/process/UpdateOffer_workflowService/UpdateOffer_workflowService.aod b/process/UpdateOffer_workflowService/UpdateOffer_workflowService.aod
index 6afa7117eb943d416023c4c05c6371266bb01ab7..39149b2c28f79fd5db740299f0ce80a0f29a5311 100644
--- a/process/UpdateOffer_workflowService/UpdateOffer_workflowService.aod
+++ b/process/UpdateOffer_workflowService/UpdateOffer_workflowService.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>UpdateOffer_workflowService</name>
   <title>Update offer</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/process/UserSettings_lib/UserSettings_lib.aod b/process/UserSettings_lib/UserSettings_lib.aod
index 41d85657ed0bcbfa6492589ee6a7238af2859f05..c1470052e9c9fd7d43344513964da783102380d2 100644
--- a/process/UserSettings_lib/UserSettings_lib.aod
+++ b/process/UserSettings_lib/UserSettings_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>UserSettings_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/UserSettings_lib/process.js</process>
diff --git a/process/Util_lib/Util_lib.aod b/process/Util_lib/Util_lib.aod
index 6a28f6ac135dc0e474b2a0c951704dc8635e5591..67bbab87069f4098d62bd0bf30556729eefca16e 100644
--- a/process/Util_lib/Util_lib.aod
+++ b/process/Util_lib/Util_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Util_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Util_lib/process.js</process>
diff --git a/process/Util_lib/process.js b/process/Util_lib/process.js
index 9dc7208091da2758a798b3804912729a0fb6c775..00ddb82a71bc8976508282f740e58b7fc996d5a3 100644
--- a/process/Util_lib/process.js
+++ b/process/Util_lib/process.js
@@ -53,7 +53,7 @@ Utils.isNullOrEmpty = function (pObject)
 }
 
 /**
- * Creates a deep copy of the given object. Also works with arrays.
+ * Creates a deep copy of the given object. Also works with arrays, maps and sets.
  * 
  * @param {Object} pObject the object to create a copy of
  * @return {Object} the cloned object
@@ -69,7 +69,7 @@ Utils.isNullOrEmpty = function (pObject)
  * 
  * logging.log(original.name != copy.name);    //true
  * logging.log(copy instanceof MyObject());    //true, prototypes are set correctly
- * logging.log(copy.obj1 === copy.obj2);       //true, relative object references are kept
+ * logging.log(copy.obj1 === copy.obj2);       //true, relative object references are preserved
  */
 Utils.clone = function (pObject)
 {
@@ -84,21 +84,48 @@ Utils.clone = function (pObject)
         if (referenceMap.has(pObject))
             return referenceMap.get(pObject);
         
-        var clonedObject = Array.isArray(pObject) 
-            ? [] 
-            : Object.create(Object.getPrototypeOf(pObject)); //set the prototype of the given object
+        var clonedObject;
+        if (Array.isArray(pObject))
+            clonedObject = [];
+        else if (pObject instanceof Map)
+            clonedObject = new Map();
+        else if (pObject instanceof Set)
+            clonedObject = new Set();
+        else
+            clonedObject = Object.create(Object.getPrototypeOf(pObject)); //set the prototype of the given object
         
         /* keeps track of all encountered objects and maps the original to the copy, this makes it possible to:
            - have the same relative references in the copy as in the original
            - copy cyclic references without error */
         referenceMap.set(pObject, clonedObject);
         
-        for (let key in pObject) 
+        if (pObject instanceof Map)
+        {
+            pObject.forEach(function (value, key)
+            {
+                clonedObject.set(_clone(key), _clone(value));
+            });
+        }
+        else if (pObject instanceof Set)
         {
-            var value = pObject[key];
-            clonedObject[key] = _clone(value); //Recursively (deep) copy for nested objects, including arrays
+            pObject.forEach(function (value)
+            {
+                clonedObject.add(_clone(value));
+            });
+        }
+        else
+        {
+            for (let key in pObject) 
+            {
+                clonedObject[key] = _clone(pObject[key]); //Recursively (deep) copy for nested objects, including arrays
+            }
         }
         
+        Object.getOwnPropertySymbols(pObject).forEach(function (sym)
+        {
+            clonedObject[sym] = _clone(pObject[sym]);
+        });
+        
         return clonedObject;
     }
 }
@@ -183,6 +210,39 @@ Utils.isNumber = function (pValue)
     return typeof pValue === "number";
 }
 
+/**
+ * Checks if the given value is numeric.
+ * 
+ * @param {Object} pValue the value to check
+ * @return {Boolean} true if the value is numeric
+ */
+Utils.isNumeric = function (pValue)
+{
+    return Utils.isNumber(pValue) || (!isNaN(parseFloat(pValue)) && isFinite(pValue));
+}
+
+/**
+ * Checks if the given value is an integer.
+ * 
+ * @param {Object} pValue the value to check
+ * @return {Boolean} true if the value is an integer
+ */
+Utils.isInteger = function (pValue)
+{
+    return Number.isInteger(parseFloat(pValue)) && isFinite(pValue);
+}
+
+/**
+ * Checks if the given value is a floating point number.
+ * 
+ * @param {Object} pValue the value to check
+ * @return {Boolean} true if the value is a float
+ */
+Utils.isFloat = function (pValue)
+{
+    return !Number.isInteger(parseFloat(pValue)) && !isNaN(parseFloat(pValue)) && isFinite(pValue);
+}
+
 /**
  * Checks if the given value is an object. Be careful, null is also considered "object".
  * 
@@ -191,7 +251,7 @@ Utils.isNumber = function (pValue)
  */
 Utils.isObject = function (pValue)
 {
-    return typeof pValue === "object";
+    return typeof pValue === "object" && pValue !== null;
 }
 
 /**
@@ -252,6 +312,15 @@ Utils.objectFromMap = function (pMap)
     return mapObject;
 }
 
+Utils.toMap = function (pObject)
+{
+    if (Utils.isMap(pObject))
+        return pObject;
+    if (!Array.isArray(pObject))
+        pObject = Utils.objectEntries(pObject);
+    return new Map(pObject);
+}
+
 /**
  * Parses the given JSON to an object, but ignores empty strings, undefined or null.
  * 
@@ -266,6 +335,123 @@ Utils.parseJSON = function (pJSON, pReviver)
     return null;
 }
 
+/**
+ * Returns the enumerable properties of the given object as an array of [key, value] pairs (works like Object.entries()).
+ * 
+ * @param {Object} pObject
+ * @return {Array} Object properties as 2d-array: [[key1, value1], [key2, value2], ...]
+ */
+Utils.objectEntries = function (pObject)
+{
+    return Object.keys(pObject).map(function (key)
+    {
+        return [key, pObject[key]];
+    });
+}
+
+/**
+ * Returns the values of all enumerable properties of the given object (works like Object.values()).
+ * 
+ * @param {Object} pObject
+ * @return {Array} Object values as array
+ */
+Utils.objectValues = function (pObject)
+{
+    return Object.keys(pObject).map(function (key)
+    {
+        return pObject[key];
+    });
+}
+
+
+/**
+ * builds/extends a filter-Object, can be used for e. g. entity.filter(), neon.setFilter, etc...
+ * Note: If a filter-Objects gets extended the new Filter will be added before the old one. 
+ * @example
+ * It will look like this: 
+    {
+       "filter":{               
+          "type":"group",                      -|
+          "operator":"AND",                     |
+          "childs":[                            |
+             {                                  |
+                "type":"row",                   |-  New Condition
+                "name":"ACTIVE",                |
+                "operator":"EQUAL",             |
+                "value":"Ja",                   |
+                "key":"true",                   |
+                "contenttype":"TEXT"           -|
+             },
+             {
+                "type":"group",                         -|
+                "operator":"AND",                        |
+                "childs":[                               |
+                   {                                     |
+                      "type":"row",                      |- Old condition
+                      "name":"DATE_NEW",                 |
+                      "operator":"TIMEFRAME_EQUAL",      |
+                      "value":"Heute",                   |
+                      "key":"REL=ADJUSTED;UNIT=DAY",     |
+                      "contenttype":"DATE"              -|
+                   }
+                ]
+             }
+          ]
+       }
+    }
+ * @param {Object} pFilterObj, the existing Filter-Object, for a new Obj use {} or null
+ * @param {String} pFieldName, all Fields which are filterable in that certain Entity
+ * @param {String} pOperator, Filteroperators, (look up "_getCondition"-Function in JditoFilter_lib for all available operator)
+ * @param {String} pContentType, the Contenttype of the Filter, ("TEXT",... etc)
+ * @param {String} pValue, this will be used as Value in the Frontend
+ * @param {String} pKey, this will be used as Value in the Backend
+ * @param {String} pParentOperator, "OR" or "AND" for the Group Operator, null = AND
+ * 
+ * @return new/extended Filter-Object
+ */
+Utils.buildFilterObj = function(pFilterObj, pFieldName, pOperator, pContentType, pValue, pKey, pParentOperator)
+{
+    
+    if(pParentOperator && pParentOperator != "AND" && pParentOperator != "OR")
+        throw new Error(translate.text("Illegal Parent Operator in buildFilterObj-Function: "+pParentOperator));
+    
+        
+    var subFilterObj = {
+        "type":"row",
+        "name":pFieldName,
+        "operator":pOperator,
+        "value": pValue,
+        "key": pKey,
+        "contenttype":pContentType
+    };
+        
+    var parentFilter = {
+        "filter" : {
+            "type":"group",
+            "operator":pParentOperator,
+            "childs": [subFilterObj]
+        }
+    };
+    
+
+    if(pFilterObj && pFilterObj.filters && pFilterObj.filters.childs.length > 0)
+    {
+        
+        var push = true;
+        for(var i = 0; i < pFilterObj.filters.childs.length; i++)
+        {
+            if(JSON.stringify(pFilterObj.filters.childs[i]) == JSON.stringify(subFilterObj))
+                push = false;
+        }
+        if(push)
+        {
+            parentFilter.filter.childs = parentFilter.filter.childs.concat([pFilterObj.filters]);
+        }
+       
+    }
+    return parentFilter;
+}
+
 /**
  * Class containing static utility functions for regular expression objects (RegExp)
  * Do not create an instance of this
@@ -372,10 +558,10 @@ StringUtils.replaceAll = function(pPlainInputStr, pPlainSearchStr, pReplacement,
  */
 StringUtils.concat = function(pSeparator, pElements)
 {
-   var res = pElements.filter(function(e){
-       return e != null && e != "";
-   }).join(pSeparator);
-   return res;
+    var res = pElements.filter(function(e){
+        return e != null && e != "";
+    }).join(pSeparator);
+    return res;
 };
 
 /**
@@ -417,18 +603,58 @@ StringUtils.pad36 = function(pValue)
  */
 StringUtils.unescapeSlashes = function(pValue) 
 {
-  // add another escaped slash if the string ends with an odd
-  // number of escaped slashes which will crash JSON.parse
-  let parsedStr = pValue.replace(/(^|[^\\])(\\\\)*\\$/, "$&\\");
-  // escape "
-  parsedStr = parsedStr.replace(/"/, '\\"');
-  try {
-    parsedStr = JSON.parse('"' + parsedStr + '"');
-  } catch(e) {
-      logging.log(e);
-    return pValue;
-  }
-  return parsedStr ;
+    // add another escaped slash if the string ends with an odd
+    // number of escaped slashes which will crash JSON.parse
+    let parsedStr = pValue.replace(/(^|[^\\])(\\\\)*\\$/, "$&\\");
+    // escape "
+    parsedStr = parsedStr.replace(/"/, '\\"');
+    try {
+        parsedStr = JSON.parse('"' + parsedStr + '"');
+    } catch(e) {
+        logging.log(e);
+        return pValue;
+    }
+    return parsedStr ;
+}
+
+/**
+ * Transforms the given String to lowerCamelCase
+ * 
+ * @param {String} pString
+ * @return {String} string in lowerCamelCase
+ * @example
+ *      
+ * var name = StringUtils.toLowerCamelCase("Giorno Giovanna");
+ * logging.log(name); //output: "giornoGiovanna"
+ */
+StringUtils.toLowerCamelCase = function (pString)
+{
+    return pString.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function (match, index) 
+    {
+        if (+match === 0)  // or if (/\s+/.test(match)) for white spaces
+            return "";
+        return index === 0 ? match.toLowerCase() : match.toUpperCase();
+    });
+}
+
+/**
+ * Transforms the given String to UpperCamelCase
+ * 
+ * @param {String} pString
+ * @return {String} string in UpperCamelCase
+ * @example
+ *      
+ * var youFellForIt = StringUtils.toUpperCamelCase("thunder cross split attack");
+ * logging.log(youFellForIt); //output: "ThunderCrossSplitAttack"
+ */
+StringUtils.toUpperCamelCase = function (pString)
+{
+    return pString.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function (match) 
+    {
+        if (+match === 0)  // or if (/\s+/.test(match)) for white spaces
+            return "";
+        return match.toUpperCase();
+    });
 }
 
 /**
@@ -490,7 +716,7 @@ NumberUtils.validateIsBetweenFloat = function(pTitle, pValue, pMin, pMax, pIgnor
     if(isNaN(discount))
         return false;
     
-    if (!NumberUtils.isInside(discount, 0, 100, pIgnoreNull))
+    if (!NumberUtils.isInside(discount, pMin, pMax, pIgnoreNull))
     {
         return (translate.withArguments("${MIN_MAX_ERROR} field: %0, value: %1, min: %2, max: %3", [translate.text(pTitle), discount, pMin, pMax]));
     }
@@ -921,9 +1147,9 @@ NumberSequencingUtils.validateUniqueNumber = function(pNumber, pColumn, pTable,
 NumberSequencingUtils.getMaxUniqueNumber = function(pColumn, pTable, pCondition) 
 {
     return newSelect(new SqlMaskingUtils().max(pColumn))
-        .from(pTable)
-        .whereIfSet(pCondition)
-        .cell() || "0";
+    .from(pTable)
+    .whereIfSet(pCondition)
+    .cell() || "0";
 }
 
 /**
@@ -953,7 +1179,9 @@ TreeUtils.sortArrayForTree = function (pArray, pUidIndex, pParentIdIndex)
     var rows = {};
     var allIds = {};
     
-    pArray.forEach(function (row) {allIds[row[pUidIndex]] = true;});
+    pArray.forEach(function (row) {
+        allIds[row[pUidIndex]] = true;
+    });
     var index = 0;
     
     do {
@@ -967,7 +1195,7 @@ TreeUtils.sortArrayForTree = function (pArray, pUidIndex, pParentIdIndex)
                 };
         }, rows);
         
-        /* stop if no new items were added, otherwise incorrect data (for instance 
+    /* stop if no new items were added, otherwise incorrect data (for instance 
            an item that is it's own parent) could cause an infinite loop           */
     } while (oldIndex != index); 
     var sortedArray = new Array(index);
@@ -1021,5 +1249,12 @@ ConsecutiveCodeUtils.setCode = function(pId, pTable, pIdCol, pCodeCol)
         max = -1;
     
     newWhereIfSet(pTable + "." + pIdCol, pId)
-        .updateData(true, pTable, [pCodeCol], null, [parseInt(max)+1]);
+    .updateData(true, pTable, [pCodeCol], null, [parseInt(max)+1]);
+}
+
+function IdUtils() {}
+
+IdUtils.isUUID = function(pIn)
+{
+    return /\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/i.test(pIn);
 }
\ No newline at end of file
diff --git a/process/ViewTemplateData_lib/ViewTemplateData_lib.aod b/process/ViewTemplateData_lib/ViewTemplateData_lib.aod
index 5bb454846588aa47368b0a1b4dcba63e3540fb71..c176378fed5c683a712cb73660d8c09f2329ec9d 100644
--- a/process/ViewTemplateData_lib/ViewTemplateData_lib.aod
+++ b/process/ViewTemplateData_lib/ViewTemplateData_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>ViewTemplateData_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/ViewTemplateData_lib/process.js</process>
diff --git a/process/Workflow_lib/Workflow_lib.aod b/process/Workflow_lib/Workflow_lib.aod
index 3045e31bec24acabc4d44347f9c8f91fc613e9c6..bff9603a4c8686ef9c379fbd4690b665a7ab6c33 100644
--- a/process/Workflow_lib/Workflow_lib.aod
+++ b/process/Workflow_lib/Workflow_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>Workflow_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/Workflow_lib/process.js</process>
diff --git a/process/Workflow_lib/process.js b/process/Workflow_lib/process.js
index d8705a1e95f0b7475a3e0301ba5ef9fe4fc4283b..b7ec7c17972e53f10f2ce3bf439f0b4dd3790766 100644
--- a/process/Workflow_lib/process.js
+++ b/process/Workflow_lib/process.js
@@ -1,3 +1,4 @@
+import("Employee_lib");
 import("system.process");
 import("Util_lib");
 import("system.text");
@@ -173,7 +174,19 @@ WorkflowSignalSender.deleted = function (pVariables, pTargetId, pTargetContext)
  */
 WorkflowSignalSender.eventHappened = function (pEvent, pTargetId, pTargetContext, pVariables)
 {
-    var variables = WorkflowVariables.getTargetVariables(pTargetId, pTargetContext);
+    let temp = {};
+    temp[ WorkflowVariables.TARGET_CONTEXT()] = pTargetContext;
+    temp[WorkflowVariables.TARGET_ID()] = pTargetId;
+    temp[WorkflowVariables.TRIGGER()] = pEvent;
+    let variables = WorkflowVariables.getAllVariablesValue(temp);
+    
+    var processConfig = process.createStartAsyncConfig().setName("workflowExtension_serverProcess")
+                                                        .setLocalVariables({"variablesWorkflow" : JSON.stringify(variables)})
+                                                        .setShowErrorDialog(true)
+                                                        .setUser(vars.get("sys.user"))
+                                                        .setThreadPriority(process.THREADPRIORITY_NORM)
+                                                        .setTimerType(process.TIMERTYPE_SERVER);
+    process.startAsync(processConfig);
     
     var signals = WorkflowSignalSender.getSignalConfig(variables[WorkflowVariables.TARGET_CONTEXT()], pEvent);
     signals.forEach(function (signal)
@@ -278,6 +291,160 @@ WorkflowVariables.TARGET_CONTEXT.getDefaultValue = function ()
     return ContextUtils.getCurrentContextId();
 }
 
+/**
+ * Returns the variable name for the rowdata
+ */
+WorkflowVariables.ROWDATA = function ()
+{
+    return "rowdata";
+}
+
+/**
+ * Returns the default value for the rowdata
+ */
+WorkflowVariables.ROWDATA.getDefaultValue = function ()
+{
+    return JSON.stringify(vars.get("$local.rowdata"));
+}
+
+/**
+ * Returns the variable name for the changed rows
+ */
+WorkflowVariables.CHANGED_ROWS = function ()
+{
+    return "changedRows";
+}
+
+/**
+ * Returns the default value for the changed rows
+ */
+WorkflowVariables.CHANGED_ROWS.getDefaultValue = function ()
+{
+    return JSON.stringify(vars.get("$local.changed"));
+}
+
+/**
+ * Returns the variable name for the event user
+ */
+WorkflowVariables.EVENT_USER = function ()
+{
+    return "eventUser";
+}
+
+/**
+ * Returns the default value for the event user
+ */
+WorkflowVariables.EVENT_USER.getDefaultValue = function ()
+{
+    return EmployeeUtils.getCurrentUserId();
+}
+
+/**
+ * Returns the variable name for the event time
+ */
+WorkflowVariables.EVENT_TIME = function ()
+{
+    return "eventTime";
+}
+
+/**
+ * Returns the default value for the event time
+ */
+WorkflowVariables.EVENT_TIME.getDefaultValue = function ()
+{
+    return vars.get("$sys.date");
+}
+
+/**
+ * Returns the variable name for the trigger
+ */
+WorkflowVariables.TRIGGER = function ()
+{
+    return "trigger";
+}
+
+/**
+ * Returns the default value for the trigger
+ */
+WorkflowVariables.TRIGGER.getDefaultValue = function ()
+{
+    return null;
+}
+
+/**
+ * Returns the variable name for the contenttitle
+ */
+WorkflowVariables.CONTENTTITLE = function ()
+{
+    return "contenttitle";
+}
+
+/**
+ * Returns the default value for the contenttitle
+ */
+WorkflowVariables.CONTENTTITLE.getDefaultValue = function ()
+{
+    return vars.get("$field.#CONTENTTITLE");
+}
+
+/**
+ * Returns an array of the WorkflowVariables
+ * 
+ * @return {Array} array containing the variables name
+ */
+WorkflowVariables.getAllVariablesName = function ()
+{
+    return [
+        WorkflowVariables.TARGET_CONTEXT(), 
+        WorkflowVariables.TARGET_ID()
+    ]
+}
+
+/**
+ * Returns an array of the Variables, which contains the variables name
+ * 
+ * @return {Array} array containing the variables
+ */
+WorkflowVariables.getAllVariables = function ()
+{
+    return [
+        "CHANGED_ROWS", 
+        "EVENT_TIME", 
+        "EVENT_USER", 
+        "ROWDATA", 
+        "TARGET_CONTEXT", 
+        "TARGET_ID",
+        "TRIGGER",
+        "CONTENTTITLE"
+    ]
+}
+
+/**
+ * Makes an object containing the variables
+ * 
+ * @param {Objcet} [pVariables] value for the variables, if not provided, the dafault value is used.
+ * The Object have to hand over in the following format:
+ * 
+ * {WorkflowVariable : value}
+ * 
+ * @return {Object} object containing the variables
+ */
+WorkflowVariables.getAllVariablesValue = function (pVariables)
+{
+    if (!pVariables) 
+        pVariables = {};
+    
+    let tempVariables = {};
+    WorkflowVariables.getAllVariables().forEach(function (v){
+        let tempName = WorkflowVariables[v]();
+        if (pVariables[tempName])
+            tempVariables[tempName] = pVariables[tempName]
+        else 
+            tempVariables[tempName] = WorkflowVariables[v].getDefaultValue();
+    });
+    return tempVariables;
+}
+
 /**
  * Makes an object containing the variables "targetId" and "targetContext"
  * 
@@ -630,7 +797,7 @@ WorkflowLinkActions.types.RECEIVE_TASK.execute = function (pParameters)
 {
     if (!pParameters.processInstanceId)
         return;
-    workflow.triggerReceiveTask(pParameters.processInstanceId, pParameters.receiveTask || null);
+    workflow.triggerReceiveTask(pParameters.processInstanceId, pParameters.receiveTask || null, pParameters.variables || null);
 }
 
 /**
@@ -640,7 +807,7 @@ WorkflowLinkActions.types.SIGNAL.execute = function (pParameters)
 {
     if (!pParameters.signal)
         return;
-    workflow.signalEventReceived(pParameters.signal);
+    workflow.signalEventReceived(pParameters.signal, pParameters.variables || null);
 }
 
 /**
@@ -650,7 +817,7 @@ WorkflowLinkActions.types.MESSAGE.execute = function (pParameters)
 {
     if (!pParameters.processInstanceId || !pParameters.message)
         return;
-    workflow.messageEventReceived(pParameters.message, pParameters.processInstanceId);
+    workflow.messageEventReceived(pParameters.message, pParameters.processInstanceId, pParameters.variables || null);
 }
 
 /**
@@ -676,6 +843,8 @@ WorkflowLinkActions.encodeAction = function (pType, pLink, pParams)
         actionObj.ms = pParams.message;
     if (pParams.receiveTask)
         actionObj.re = pParams.receiveTask;
+    if (pParams.variables)
+        actionObj.v = pParams.variables;
     actionObj.ty = pType;
     actionObj.ln = pLink;
     
@@ -718,6 +887,8 @@ WorkflowLinkActions.parseAction = function (pEncodedAction)
         actionParams.message = parsedAction.ms;
     if (parsedAction.re)
         actionParams.receiveTask = parsedAction.re;
+    if (parsedAction.v)
+        actionParams.variables = parsedAction.v;
     
     return {
         type: parsedAction.ty || null,
@@ -734,4 +905,15 @@ WorkflowLinkActions.parseAction = function (pEncodedAction)
             return null;
         }
     };
+}
+
+WorkflowLinkActions.getActionLinkPlaceholder = function (pLinkActionType, pActionParams, pRedirectLink, pBaseUrl)
+{
+    if (!pBaseUrl)
+        pBaseUrl = vars.get("$sys.origin");
+    
+    return new Placeholder("workflowActionLink", Placeholder.types.CALLBACKFUNCTION, function ()
+    {
+        return WorkflowLinkActions.getActionLink(pBaseUrl, pLinkActionType, pRedirectLink, pActionParams);
+    });
 }
\ No newline at end of file
diff --git a/process/WsValidation_lib/WsValidation_lib.aod b/process/WsValidation_lib/WsValidation_lib.aod
index a896dd2fdc17d3ddc9035ac2f5e6370513d0e9a7..fcb5a966b0dcbd779e3a055a9b6a968d42ae8b36 100644
--- a/process/WsValidation_lib/WsValidation_lib.aod
+++ b/process/WsValidation_lib/WsValidation_lib.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>WsValidation_lib</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/WsValidation_lib/documentation.adoc</documentation>
diff --git a/process/WsValidation_lib/process.js b/process/WsValidation_lib/process.js
index 03bccc71e669831494fb55307bacff0ba8b07156..df45171957c8e47dc6766a7273686d0ebbd41772 100644
--- a/process/WsValidation_lib/process.js
+++ b/process/WsValidation_lib/process.js
@@ -108,8 +108,6 @@ WsValidationType.get = function(pKey)
                     city: city,
                     cityExt: cityext,
                     country: pPlaceData.address.country_code.toUpperCase(), //4
-                    district: pPlaceData.address.district,
-                    region: pPlaceData.address.state_district,
                     state: pPlaceData.address.state,
                     road: road, //8
                     buildingNo: pPlaceData.address.house_number,
@@ -361,7 +359,6 @@ WsValidationUtils.setAddressFields = function(pJSON)
         "$field.CITY": data.city,
         "$field.COUNTRY": data.country,
         //"$field.DISTRICT": data.district, not needed currently
-        "$field.REGION": data.region,
         "$field.STATE": data.state,
         "$field.ADDRESS": data.road,
         "$field.BUILDINGNO": data.buildingNo
diff --git a/process/_all_test/_all_test.aod b/process/_all_test/_all_test.aod
new file mode 100644
index 0000000000000000000000000000000000000000..f65a8c72b0b9ade07fc33a65875810fbe9e3ba16
--- /dev/null
+++ b/process/_all_test/_all_test.aod
@@ -0,0 +1,12 @@
+<?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>_all_test</name>
+  <title>[TEST] .All</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <icon>VAADIN:CHECK_CIRCLE</icon>
+  <process>%aditoprj%/process/_all_test/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>
diff --git a/process/_all_test/process.js b/process/_all_test/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..cbc75f35849b71f8514f1c4330683ee568e08ba0
--- /dev/null
+++ b/process/_all_test/process.js
@@ -0,0 +1,23 @@
+import("system.logging");
+import("system.process");
+import("UnitTest_lib");
+import("Terminal_lib");
+
+
+var testResults = [];
+
+process.getProcesses([process.VARIANT_EXECUTABLE]).forEach(function(pProcessName) {
+    // Run all executable processes ending with "_test" except THIS one
+    if(pProcessName !== "_all_test" && pProcessName.substr(-5, 5) === "_test") {
+        var startConfig = process.createStartConfig().setName(pProcessName);
+        var testResult = JSON.parse(process.start(startConfig));
+        
+        if(testResult !== null && typeof testResult === "object") {
+            testResults.push(testResult);
+        }
+    }
+});
+
+var tester = new Tester("");
+tester.summary(testResults);
+
diff --git a/process/_test_clientProcess/_test_clientProcess.aod b/process/_test_clientProcess/_test_clientProcess.aod
index 65d4b5579877f106af3408d202758175db300353..083128043b009ec6417b6ecb0589e04ba2c4eead 100644
--- a/process/_test_clientProcess/_test_clientProcess.aod
+++ b/process/_test_clientProcess/_test_clientProcess.aod
@@ -1,10 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>_test_clientProcess</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/_test_clientProcess/documentation.adoc</documentation>
   <process>%aditoprj%/process/_test_clientProcess/process.js</process>
   <publishAsWebservice v="true" />
+  <wsdl>%aditoprj%/process/_test_clientProcess/wsdl.wsdl</wsdl>
+  <loginTypeId>
+    <element>internal.none</element>
+  </loginTypeId>
   <alias>Data_alias</alias>
   <variants>
     <element>EXECUTABLE</element>
diff --git a/process/_test_clientProcess/wsdl.wsdl b/process/_test_clientProcess/wsdl.wsdl
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/process/_test_importer/_test_importer.aod b/process/_test_importer/_test_importer.aod
index 609067fbad20084a0ca5eef1fb0dcb1c6030f59d..86b1e22c42fded0be140b3dadad42671f76b3fa6 100644
--- a/process/_test_importer/_test_importer.aod
+++ b/process/_test_importer/_test_importer.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>_test_importer</name>
   <title>Importer</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/process/autostartNeon/autostartNeon.aod b/process/autostartNeon/autostartNeon.aod
index 5cae2b54c4df27afd135f072eb2e42809dfd90c7..53cfbced0376808b3cc01e1a318a0865f39b4d77 100644
--- a/process/autostartNeon/autostartNeon.aod
+++ b/process/autostartNeon/autostartNeon.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>autostartNeon</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/autostartNeon/process.js</process>
diff --git a/process/blobHandler/blobHandler.aod b/process/blobHandler/blobHandler.aod
index ea16fe9164248509d582008e59c1fb8c3b11f554..df5da687878fc7ea5c3aff68e901c195a1883c9b 100644
--- a/process/blobHandler/blobHandler.aod
+++ b/process/blobHandler/blobHandler.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>blobHandler</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/blobHandler/process.js</process>
diff --git a/process/buildSerialLetter_serverProcess/buildSerialLetter_serverProcess.aod b/process/buildSerialLetter_serverProcess/buildSerialLetter_serverProcess.aod
index 5474adbf834c476e62b2ea0402e39d29c1e4ff3a..c5fa5bae70e0432c332962e39305acfe37e3948e 100644
--- a/process/buildSerialLetter_serverProcess/buildSerialLetter_serverProcess.aod
+++ b/process/buildSerialLetter_serverProcess/buildSerialLetter_serverProcess.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>buildSerialLetter_serverProcess</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/buildSerialLetter_serverProcess/documentation.adoc</documentation>
diff --git a/process/buildSerialLetter_serverProcess/process.js b/process/buildSerialLetter_serverProcess/process.js
index 1d5cff1f39473a26019577b3c2d3c23121b5ced2..b3210e860dba7d2817b4e9465f17600fca2bcb95 100644
--- a/process/buildSerialLetter_serverProcess/process.js
+++ b/process/buildSerialLetter_serverProcess/process.js
@@ -21,4 +21,4 @@ SingleBinaryUtils.set("SERIALLETTER", "SERIALLETTERFILE", letterId, document.con
 
 var message = translate.text("Download ready");
 var description = translate.withArguments("Serial letter \"%0\" can now be downloaded", [document.title]);
-notification.addNotification(util.getNewUUID(), text.encodeMS(["SerialLetter", letterId]), null, null, "DownloadReady", notification.PRIO_NORMAL, 2, notification.STATE_UNSEEN, [user], message, description);
\ No newline at end of file
+notification.addNotification(util.getNewUUID(), text.encodeMS(["SerialLetter", letterId]), null, null, "DownloadReady", null, notification.PRIO_NORMAL, 2, notification.STATE_UNSEEN, [user], message, description);
\ No newline at end of file
diff --git a/process/ctiCall/ctiCall.aod b/process/ctiCall/ctiCall.aod
index efab080bf759f15b9fc8ae22098447a6d810a32d..6614528e0386b2a7b3fc4b705e1861b64445e33e 100644
--- a/process/ctiCall/ctiCall.aod
+++ b/process/ctiCall/ctiCall.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>ctiCall</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/ctiCall/process.js</process>
diff --git a/process/ctiServerEvents/ctiServerEvents.aod b/process/ctiServerEvents/ctiServerEvents.aod
index 0b6ce1bf16282c51184affeb49fc8a91106f955b..4f02a720a23094e2ff2425a8f94dc52c0f2d2730 100644
--- a/process/ctiServerEvents/ctiServerEvents.aod
+++ b/process/ctiServerEvents/ctiServerEvents.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>ctiServerEvents</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/ctiServerEvents/process.js</process>
diff --git a/process/emailWrite/emailWrite.aod b/process/emailWrite/emailWrite.aod
index 60d3efe9f572e652c49a01965c3cc95514253914..a752349818c0a8632c76c4167a1e9ed84af7cf51 100644
--- a/process/emailWrite/emailWrite.aod
+++ b/process/emailWrite/emailWrite.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>emailWrite</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/emailWrite/process.js</process>
diff --git a/process/ewsSyncCalendarPermissions_serverProcess/ewsSyncCalendarPermissions_serverProcess.aod b/process/ewsSyncCalendarPermissions_serverProcess/ewsSyncCalendarPermissions_serverProcess.aod
index 703deab5221c889c45a77b3a60b6ab4b5f58e31e..353165e368d282145e8820da01ae290c587b5198 100644
--- a/process/ewsSyncCalendarPermissions_serverProcess/ewsSyncCalendarPermissions_serverProcess.aod
+++ b/process/ewsSyncCalendarPermissions_serverProcess/ewsSyncCalendarPermissions_serverProcess.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>ewsSyncCalendarPermissions_serverProcess</name>
   <title>Synchronize calendar permissions from Exchange to ADITO</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/process/exportLiquibaseContent_serverProcess/exportLiquibaseContent_serverProcess.aod b/process/exportLiquibaseContent_serverProcess/exportLiquibaseContent_serverProcess.aod
index 117726612c9ffdc42c5f4e04273f6b9acf1c4094..81c7818957427295a4efcf597330f34df0a8bda2 100644
--- a/process/exportLiquibaseContent_serverProcess/exportLiquibaseContent_serverProcess.aod
+++ b/process/exportLiquibaseContent_serverProcess/exportLiquibaseContent_serverProcess.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>exportLiquibaseContent_serverProcess</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/exportLiquibaseContent_serverProcess/documentation.adoc</documentation>
diff --git a/process/exportLiquibaseSystemalias_serverProcess/exportLiquibaseSystemalias_serverProcess.aod b/process/exportLiquibaseSystemalias_serverProcess/exportLiquibaseSystemalias_serverProcess.aod
index 9437d3b30537612af789f265de1b2a9375903711..2f46ffd47d194aa90c1d54f61acb1682b485ca48 100644
--- a/process/exportLiquibaseSystemalias_serverProcess/exportLiquibaseSystemalias_serverProcess.aod
+++ b/process/exportLiquibaseSystemalias_serverProcess/exportLiquibaseSystemalias_serverProcess.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>exportLiquibaseSystemalias_serverProcess</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/exportLiquibaseSystemalias_serverProcess/process.js</process>
diff --git a/process/getDocxDocument_serverProcess/getDocxDocument_serverProcess.aod b/process/getDocxDocument_serverProcess/getDocxDocument_serverProcess.aod
index cb4430fb0bcd05511a4cbdf794dc665aa2e28bc1..fe54f57b76aac1e81d0e497629b7ab0aaa33931c 100644
--- a/process/getDocxDocument_serverProcess/getDocxDocument_serverProcess.aod
+++ b/process/getDocxDocument_serverProcess/getDocxDocument_serverProcess.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>getDocxDocument_serverProcess</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/getDocxDocument_serverProcess/documentation.adoc</documentation>
diff --git a/process/importLead_serverProcess/importLead_serverProcess.aod b/process/importLead_serverProcess/importLead_serverProcess.aod
index 4316e4127172656ebfb03e03a6d853daeb077a20..a73a9e8246f9160d8c50abddfc0bc0d1863dc050 100644
--- a/process/importLead_serverProcess/importLead_serverProcess.aod
+++ b/process/importLead_serverProcess/importLead_serverProcess.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>importLead_serverProcess</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/importLead_serverProcess/process.js</process>
diff --git a/process/importLead_serverProcess/process.js b/process/importLead_serverProcess/process.js
index a24b084a933769d7e6d3ab8b6b1d316828841452..35ac42b2b31f5cd4b801573bd295413747352f42 100644
--- a/process/importLead_serverProcess/process.js
+++ b/process/importLead_serverProcess/process.js
@@ -192,7 +192,7 @@ if(exeptions != "")//insert error document
 if (userId)// if there is an user - show a notification to this user when the import is complete
 {
     var description = translate.withArguments("%0 leads imported, %1 errors", [rows, errorCount]);
-    notification.addNotification(util.getNewUUID(), null, null, null, "LeadImport_Notification", notification.PRIO_NORMAL, 2, notification.STATE_UNSEEN, [userId], importName, description);
+    notification.addNotification(util.getNewUUID(), null, null, null, "LeadImport_Notification", null, notification.PRIO_NORMAL, 2, notification.STATE_UNSEEN, [userId], importName, description);
 }
 
 
diff --git a/process/mailbridge/mailbridge.aod b/process/mailbridge/mailbridge.aod
index 254ff35492e5ce5eccb03b1d7a55c4ced626e8a1..079dab4650beb124ce85f9345c4928b87a80fc4c 100644
--- a/process/mailbridge/mailbridge.aod
+++ b/process/mailbridge/mailbridge.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>mailbridge</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/mailbridge/documentation.adoc</documentation>
diff --git a/process/mark_cachedrecordcontainers_invalid_serverProcess/mark_cachedrecordcontainers_invalid_serverProcess.aod b/process/mark_cachedrecordcontainers_invalid_serverProcess/mark_cachedrecordcontainers_invalid_serverProcess.aod
index cfd92c97942fb960b69e71317d82e75f4f013e0f..a6d4fe24cf1fc3a4d501acd6546807ac3bea8180 100644
--- a/process/mark_cachedrecordcontainers_invalid_serverProcess/mark_cachedrecordcontainers_invalid_serverProcess.aod
+++ b/process/mark_cachedrecordcontainers_invalid_serverProcess/mark_cachedrecordcontainers_invalid_serverProcess.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>mark_cachedrecordcontainers_invalid_serverProcess</name>
   <title>Mark all cached record containers as invalid</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/process/mstBot_rest/mstBot_rest.aod b/process/mstBot_rest/mstBot_rest.aod
new file mode 100644
index 0000000000000000000000000000000000000000..64a88b4452787c65f100f261960f91835763daa3
--- /dev/null
+++ b/process/mstBot_rest/mstBot_rest.aod
@@ -0,0 +1,15 @@
+<?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>mstBot_rest</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/mstBot_rest/process.js</process>
+  <publishAsWebservice v="true" />
+  <style>REST</style>
+  <restAcceptedMimeType>application/json</restAcceptedMimeType>
+  <restDeliveredMimeType>application/json</restDeliveredMimeType>
+  <loginTypeId>
+    <element>internal.none</element>
+  </loginTypeId>
+  <publishAsClientWebservice v="true" />
+  <alias>Data_alias</alias>
+</process>
diff --git a/process/mstBot_rest/process.js b/process/mstBot_rest/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..c93ca1c87aa2e9770cf5510c7b46c8c6f1871878
--- /dev/null
+++ b/process/mstBot_rest/process.js
@@ -0,0 +1,94 @@
+import("system.datetime");
+import("system.teams");
+import("system.logging");
+import("system.text");
+import("system.util");
+import("Sql_lib");
+import("KeywordRegistry_basic");
+import("Date_lib");
+
+function restpost(pRequestAsJson)
+{
+     //Umformen, dass man den Body des Requests als JsonFormat Base64 decodiert hat
+    var jsonRequest = JSON.parse(pRequestAsJson);
+    var body = jsonRequest.body;
+    var jsonBody = JSON.parse(body);
+   
+    
+    //Nötig, falls dies der InitialRequest ist
+    var eventType = jsonBody.channelData.eventType;
+    var teamId = jsonBody.channelData.team.aadGroupId;
+    var who = jsonBody.recipient.name;
+    var serviceUrl = jsonBody.serviceUrl;
+    
+    //Wenn dies der InitalRequest ist (dieser erfolgt, wenn die APP hinzugefügt wird), speichere die ServiceUrl in die DB
+    if(eventType == "teamMemberAdded" && who == "ADITO Bot")
+    {
+        newWhere("MST_TEAM.MST_TEAMID", teamId)
+            .updateFields({"SERVICE_URL" : serviceUrl});
+        return pRequestAsJson;
+    }
+    //Sollte jemand die APP manuell wieder entfernen, gibt es einen "AbschiedsRequest", lösche die ServiceUrl aus der DB
+    if(eventType == "teamMemberRemoved" && who == "ADITO Bot")
+    {    
+       newWhere("MST_TEAM.MST_TEAMID", teamId)
+            .updateFields({"SERVICE_URL" : ""});
+        return pRequestAsJson;
+    }
+    
+    //_____________________________________________________________
+    //Hier gelandet: Request ist eine Nachricht
+    
+    var type = jsonBody.type;
+    if(type != "message") //Wenn Request keine Message war dann ignorieren
+        return pRequestAsJson;
+    
+    var message = jsonBody.text;
+    var from = jsonBody.from.name;
+    
+    //Testzwecke (nachträglich entfernen)
+    logging.log(message);
+    logging.log(from);
+    
+    //Da alle Aufgaben, wie zum Beispiel: Ticket erstellen, Aufgabe erstellen usw. in JDiTO erledigt werden können,
+    // wird hier keine teams.Funktion benötigt
+    //Weitere Schritte: text aufsplittet anhand der Syntax und die einzelnen Kommandos umsetzen
+    
+    var plainMessage = text.html2text(pHTML);
+    
+    var messageParts = plainMessage.split("/");
+    if (messageParts.length !== 2)
+        return pRequestAsJson;
+    
+    var command = messageParts[1].split(/\s+?/);
+    var parameters = {};
+    command.slice(1).forEach(function (param)
+    {
+        param = param.split("=");
+        if (param.length !== 2)
+            return;
+        parameters[param[0]] = param[1];
+    });
+    command = command[0];
+    
+    if (command == "addTask" && parameters.editor && parameters.subject)
+    {
+        var currentDate = datetime.date();
+        var fieldValues = {
+            "KIND": $KeywordRegistry.taskType$task(),
+            "START_DATE": currentDate,
+            "MATURITY_DATE": Duration.ofDays(7).getDateWithDurationAdded(currentDate).getTime(),
+            "PRIORITY": $KeywordRegistry.taskPriority$low(),
+            "STATUS": $KeywordRegistry.taskStatus$new(),
+            "SUBJECT": parameters.subject,
+            "REQUESTOR_CONTACT_ID": "",
+            "PROGRESS": $KeywordRegistry.taskProgress$0()
+        };
+        if ("editor" in parameters)
+            fieldValues["EDITOR_CONTACT_ID"] = ""; //TODO: find out contactid
+
+        new SqlBuilder.insertFields(fieldValues, "TASK", "TASKID");
+    }
+    
+    return pRequestAsJson;
+}
\ No newline at end of file
diff --git a/process/process_audit/process_audit.aod b/process/process_audit/process_audit.aod
index 55b53099a0f6b045a1699cb473417840521a8b09..fb5dcd8da903ba9ffe3172451cd386e094fb0441 100644
--- a/process/process_audit/process_audit.aod
+++ b/process/process_audit/process_audit.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>process_audit</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/process_audit/process.js</process>
diff --git a/process/rebuildIndex_serverProcess/rebuildIndex_serverProcess.aod b/process/rebuildIndex_serverProcess/rebuildIndex_serverProcess.aod
index 710063184897bbc4ad2e09ff1f8e3cac536b1b68..106c678f9add12e1f3afe67989627720cd6515d2 100644
--- a/process/rebuildIndex_serverProcess/rebuildIndex_serverProcess.aod
+++ b/process/rebuildIndex_serverProcess/rebuildIndex_serverProcess.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>rebuildIndex_serverProcess</name>
   <title>rebuild Index</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/process/redirect_rest/redirect_rest.aod b/process/redirect_rest/redirect_rest.aod
index 3087b0ad4b7fcc1e48a6122ae26fe32120328632..bda233f7990cbcde49e43a759006b8fd964fc26d 100644
--- a/process/redirect_rest/redirect_rest.aod
+++ b/process/redirect_rest/redirect_rest.aod
@@ -1,11 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>redirect_rest</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/redirect_rest/process.js</process>
   <publishAsWebservice v="true" />
   <style>REST</style>
-  <loginTypeId>internal.none</loginTypeId>
+  <loginTypeId>
+    <element>internal.none</element>
+  </loginTypeId>
   <variants>
     <element>EXECUTABLE</element>
   </variants>
diff --git a/process/removeMSTTeams_serverProcess/process.js b/process/removeMSTTeams_serverProcess/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..83b19e678d4965a9f1011c71f14b91bf3bc4fc78
--- /dev/null
+++ b/process/removeMSTTeams_serverProcess/process.js
@@ -0,0 +1,21 @@
+import("system.teams");
+import("Sql_lib");
+
+var archivedTeams = teams.getAllArchivedTeams(null);
+var dbArchivedTeams = newSelect("MST_TEAMID")
+    .from("MST_TEAM")
+    .where("MST_TEAM.IS_ARCHIVED", "1")
+    .arrayColumn();
+
+var teamIdsToDelete = dbArchivedTeams.filter(function (teamId)
+{
+    return !(teamId in archivedTeams);
+});
+
+if (teamIdsToDelete.length > 0)
+{
+    newWhere("MST_TEAM.MST_TEAMID", teamIdsToDelete, SqlBuilder.IN())
+        .deleteData();
+    newWhere("SALESPROJECT.MST_TEAM_ID", teamIdsToDelete, SqlBuilder.IN())
+        .updateFields({"MST_TEAM_ID": ""});
+}
\ No newline at end of file
diff --git a/process/removeMSTTeams_serverProcess/removeMSTTeams_serverProcess.aod b/process/removeMSTTeams_serverProcess/removeMSTTeams_serverProcess.aod
new file mode 100644
index 0000000000000000000000000000000000000000..c120e20c39f5b8e0c8348dd823abb61a2890bd85
--- /dev/null
+++ b/process/removeMSTTeams_serverProcess/removeMSTTeams_serverProcess.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>removeMSTTeams_serverProcess</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/removeMSTTeams_serverProcess/process.js</process>
+  <alias>Data_alias</alias>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>
diff --git a/process/sendBulkMail_serverProcess/process.js b/process/sendBulkMail_serverProcess/process.js
index 711120feb205e4b00a1fbda8afdea68708681fca..7ed237beffbb5978141a82b08c745385a1f21bee 100644
--- a/process/sendBulkMail_serverProcess/process.js
+++ b/process/sendBulkMail_serverProcess/process.js
@@ -23,5 +23,5 @@ if (user && !testRecipients)
     var message = translate.withArguments("Bulk mail \"%0\" was sent!", [mailName]);
     var description = translate.withArguments("%0 mails sent sucessfully, %1 mails failed. Process took %2 s.", 
         [res.sucessful, res.failed, Math.round((datetime.date() - startTime) / datetime.ONE_SECOND)]);
-    notification.addNotification(util.getNewUUID(), null, null, null, "BulkMailSent", notification.PRIO_NORMAL, 2, notification.STATE_UNSEEN, [user], message, description);
+    notification.addNotification(util.getNewUUID(), null, null, null, "BulkMailSent", null, notification.PRIO_NORMAL, 2, notification.STATE_UNSEEN, [user], message, description);
 }
\ No newline at end of file
diff --git a/process/sendBulkMail_serverProcess/sendBulkMail_serverProcess.aod b/process/sendBulkMail_serverProcess/sendBulkMail_serverProcess.aod
index 645ed890444612e3470acf524ef90bc730725fca..8357bb2adf8a19f802111fd90d3c734932f8b2e6 100644
--- a/process/sendBulkMail_serverProcess/sendBulkMail_serverProcess.aod
+++ b/process/sendBulkMail_serverProcess/sendBulkMail_serverProcess.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>sendBulkMail_serverProcess</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/sendBulkMail_serverProcess/documentation.adoc</documentation>
diff --git a/process/setMissingAddressLocations_serverProcess/setMissingAddressLocations_serverProcess.aod b/process/setMissingAddressLocations_serverProcess/setMissingAddressLocations_serverProcess.aod
index 3752f6718de29b5a4b07e3c29bae7416d6860164..23c67a18a2d9f489e3a183e8f76b1c1d782da02e 100644
--- a/process/setMissingAddressLocations_serverProcess/setMissingAddressLocations_serverProcess.aod
+++ b/process/setMissingAddressLocations_serverProcess/setMissingAddressLocations_serverProcess.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>setMissingAddressLocations_serverProcess</name>
   <title>Set missing address locations</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/process/startWorkflowInstances_serverProcess/startWorkflowInstances_serverProcess.aod b/process/startWorkflowInstances_serverProcess/startWorkflowInstances_serverProcess.aod
index 5d5de80f53c69c20e9c3190e3d8eb99775217a65..e1cb70568a30aa232f833f0d1e8559c09a5d219c 100644
--- a/process/startWorkflowInstances_serverProcess/startWorkflowInstances_serverProcess.aod
+++ b/process/startWorkflowInstances_serverProcess/startWorkflowInstances_serverProcess.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>startWorkflowInstances_serverProcess</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/startWorkflowInstances_serverProcess/process.js</process>
diff --git a/process/test_iCommRestriction/test_iCommRestriction.aod b/process/test_iCommRestriction/test_iCommRestriction.aod
index cc954a462d091f6b3efef2b7797b92a18ae0b2f8..6d894bcf6bee89031b4fa89d68bdef1b77076ec5 100644
--- a/process/test_iCommRestriction/test_iCommRestriction.aod
+++ b/process/test_iCommRestriction/test_iCommRestriction.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>test_iCommRestriction</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/test_iCommRestriction/process.js</process>
diff --git a/process/updateActivities_serverProzess/updateActivities_serverProzess.aod b/process/updateActivities_serverProzess/updateActivities_serverProzess.aod
index 51684eaceb296a2b5f75e7f1c82b373494b4e28e..8d14a4c15d8a8eae358f727c0b758fdf84d0f51a 100644
--- a/process/updateActivities_serverProzess/updateActivities_serverProzess.aod
+++ b/process/updateActivities_serverProzess/updateActivities_serverProzess.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>updateActivities_serverProzess</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/updateActivities_serverProzess/process.js</process>
diff --git a/process/updateAllAddressLocations_serverProcess/updateAllAddressLocations_serverProcess.aod b/process/updateAllAddressLocations_serverProcess/updateAllAddressLocations_serverProcess.aod
index e0b953cac1c1f40620c0510daec96d89a844955d..3b3864518417181d045df5dd820a80b48f875237 100644
--- a/process/updateAllAddressLocations_serverProcess/updateAllAddressLocations_serverProcess.aod
+++ b/process/updateAllAddressLocations_serverProcess/updateAllAddressLocations_serverProcess.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>updateAllAddressLocations_serverProcess</name>
   <title>Set all address locations</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/process/updateClassifications_serverProcess/process.js b/process/updateClassifications_serverProcess/process.js
index 22f452a82db5f2ffe695ad1e24a5ca85f01a9c78..5520e0170e221868a9c89a0639890824756d5cad 100644
--- a/process/updateClassifications_serverProcess/process.js
+++ b/process/updateClassifications_serverProcess/process.js
@@ -111,23 +111,7 @@ for (i = 0; i < objectTypes.length; i++) //update for each object_type
     }
     
     //this is the "upgrade" part of this process:
-    //first: insert default values into the records that have no entries 
-    idsWithoutStoredClassification = newSelect(currentObjectColumn)
-        .from(currentObjectTable)
-        .where(currentObjectColumn, newSelect("CLASSIFICATIONSTORAGE.OBJECT_ROWID").from("CLASSIFICATIONSTORAGE").where("CLASSIFICATIONSTORAGE.OBJECT_TYPE", objectTypes[i]), SqlBuilder.NOT_IN())
-                                                                        
-    if(isOrganisation)
-    {
-        idsWithoutStoredClassification.and("CONTACT.PERSON_ID is null")
-                .and("CONTACT.ORGANISATION_ID", OrgUtils.getPrivateOrganisationId(), SqlBuilder.NOT_EQUAL());
-    }
-        
-    idsWithoutStoredClassification = idsWithoutStoredClassification.arrayColumn();
-
-    if(idsWithoutStoredClassification)
-        ClassificationUtils.insertEmptyClassification(idsWithoutStoredClassification, objectTypes[i]);
-    
-    //second: update all entries with correct classificaiton values
+    //update all entries with correct classificaiton values
     
     //all groups of the objectType in the correct order, needed later to also add the "-" gradings if no classificationType has been set under that group
     orderedGroups = newSelect("distinct CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, CLASSIFICATIONGROUP.SORTING")
@@ -206,7 +190,14 @@ for (i = 0; i < objectTypes.length; i++) //update for each object_type
         cond = newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", row_Id)
             .and("CLASSIFICATIONSTORAGE.OBJECT_TYPE", objectTypes[i])
             .and("CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE", chainedGrading, SqlBuilder.NOT_EQUAL());
-        var count = Number(cond.updateData(true, table, column, null, [chainedGrading]));
+        if(new RegExp("^-+$").test(chainedGrading) == true || chainedGrading == "-")
+        {
+            count = newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", row_Id).deleteData(true, "CLASSIFICATIONSTORAGE");
+        }
+        else
+        {
+            count = Number(cond.updateData(true, table, column, null, [chainedGrading]));
+        }
         if (count > 0)
         {
             outputInformation[objectTypes[i]].updatedElements += count;
diff --git a/process/updateClassifications_serverProcess/updateClassifications_serverProcess.aod b/process/updateClassifications_serverProcess/updateClassifications_serverProcess.aod
index 52e9c03b7cf5d4c0792dd5f4ea13a6676520a729..c3142850326968443c10f656f4ecf7468ebcdee2 100644
--- a/process/updateClassifications_serverProcess/updateClassifications_serverProcess.aod
+++ b/process/updateClassifications_serverProcess/updateClassifications_serverProcess.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>updateClassifications_serverProcess</name>
   <title>Update all Classification entries in the system</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
diff --git a/process/workflowDeploy_rest/workflowDeploy_rest.aod b/process/workflowDeploy_rest/workflowDeploy_rest.aod
index 05c891a90280224cd574f42e6347203f67386f3a..ad6fb04bf2304ee5c01e7dd785ff274e146e82f7 100644
--- a/process/workflowDeploy_rest/workflowDeploy_rest.aod
+++ b/process/workflowDeploy_rest/workflowDeploy_rest.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>workflowDeploy_rest</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/workflowDeploy_rest/process.js</process>
diff --git a/process/workflowExtension_serverProcess/process.js b/process/workflowExtension_serverProcess/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/process/workflowExtension_serverProcess/workflowExtension_serverProcess.aod b/process/workflowExtension_serverProcess/workflowExtension_serverProcess.aod
new file mode 100644
index 0000000000000000000000000000000000000000..195a4cd633e30d180b82eec95ea16e5be180a292
--- /dev/null
+++ b/process/workflowExtension_serverProcess/workflowExtension_serverProcess.aod
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2">
+  <name>workflowExtension_serverProcess</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/workflowExtension_serverProcess/process.js</process>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>
diff --git a/process/workflowLinkTracking_rest/workflowLinkTracking_rest.aod b/process/workflowLinkTracking_rest/workflowLinkTracking_rest.aod
index 9d33ad873277ea65215132f0999519ec2e699e08..c52adefed8b5466a9f677e271f2e094ecfd7070d 100644
--- a/process/workflowLinkTracking_rest/workflowLinkTracking_rest.aod
+++ b/process/workflowLinkTracking_rest/workflowLinkTracking_rest.aod
@@ -1,11 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>workflowLinkTracking_rest</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/workflowLinkTracking_rest/process.js</process>
   <publishAsWebservice v="false" />
   <style>REST</style>
-  <loginTypeId>internal.none</loginTypeId>
+  <loginTypeId>
+    <element>internal.none</element>
+  </loginTypeId>
   <restrictedRoles />
   <alias>Data_alias</alias>
   <variants>
diff --git a/process/workflowPrivileges_rest/workflowPrivileges_rest.aod b/process/workflowPrivileges_rest/workflowPrivileges_rest.aod
index 5a75e4758d9beb4122312853a53092986eb8b853..5ea1497835d807d18c23333b742ad6125d3777f0 100644
--- a/process/workflowPrivileges_rest/workflowPrivileges_rest.aod
+++ b/process/workflowPrivileges_rest/workflowPrivileges_rest.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>workflowPrivileges_rest</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <process>%aditoprj%/process/workflowPrivileges_rest/process.js</process>
diff --git a/process/workflowRoles_rest/workflowRoles_rest.aod b/process/workflowRoles_rest/workflowRoles_rest.aod
index 4f15d52de42e555e108da701ae778db1197ada7e..6cfb124a66132d6976ebf4201c34f5854d6abda2 100644
--- a/process/workflowRoles_rest/workflowRoles_rest.aod
+++ b/process/workflowRoles_rest/workflowRoles_rest.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>workflowRoles_rest</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/workflowRoles_rest/documentation.adoc</documentation>
diff --git a/process/workflowServiceTaskParams_rest/workflowServiceTaskParams_rest.aod b/process/workflowServiceTaskParams_rest/workflowServiceTaskParams_rest.aod
index 7922e7f73b3bc4dc4a9beddb7e1c984564411765..24c524d5bbe0a4c81636d114333f22a9f69043e8 100644
--- a/process/workflowServiceTaskParams_rest/workflowServiceTaskParams_rest.aod
+++ b/process/workflowServiceTaskParams_rest/workflowServiceTaskParams_rest.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>workflowServiceTaskParams_rest</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/workflowServiceTaskParams_rest/documentation.adoc</documentation>
diff --git a/process/workflowServiceTasks_rest/workflowServiceTasks_rest.aod b/process/workflowServiceTasks_rest/workflowServiceTasks_rest.aod
index ea3dfbea15a55987d24139a247e60142a9c41790..189d4377abed5818ead11c35ab8892788b3c4974 100644
--- a/process/workflowServiceTasks_rest/workflowServiceTasks_rest.aod
+++ b/process/workflowServiceTasks_rest/workflowServiceTasks_rest.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>workflowServiceTasks_rest</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/workflowServiceTasks_rest/documentation.adoc</documentation>
diff --git a/process/workflowSignal_rest/process.js b/process/workflowSignal_rest/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..83fe2b22065777c24df4990abcaecad8fffb2487
--- /dev/null
+++ b/process/workflowSignal_rest/process.js
@@ -0,0 +1,23 @@
+import("Workflow_lib");
+import("system.workflow");
+import("system.util");
+
+function restpost (pRequest)
+{
+    var request = JSON.parse(pRequest);
+    
+    var signalObj = JSON.parse(util.decodeBase64String(request.body));
+    if (signalObj && signalObj.signal && WorkflowUtils.engineIsEnabled())
+    {
+        var signal = signalObj.signal;
+        var processInstanceId = signalObj.processInstanceId || null;
+        var variables = signalObj.variables || {};
+        
+        workflow.signalEventReceived(signal, variables, processInstanceId);
+        
+        request.response.statuscode = 200;
+        request.response.body = JSON.stringify(signalObj);
+    }
+    
+    return JSON.stringify(request);
+}
\ No newline at end of file
diff --git a/process/workflowSignal_rest/workflowSignal_rest.aod b/process/workflowSignal_rest/workflowSignal_rest.aod
new file mode 100644
index 0000000000000000000000000000000000000000..db28e29d522c6089bc2bf21bea4c58d67da5f56f
--- /dev/null
+++ b/process/workflowSignal_rest/workflowSignal_rest.aod
@@ -0,0 +1,13 @@
+<?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>workflowSignal_rest</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/workflowSignal_rest/process.js</process>
+  <publishAsWebservice v="true" />
+  <style>REST</style>
+  <restAcceptedMimeType>application/json</restAcceptedMimeType>
+  <restDeliveredMimeType>application/json</restDeliveredMimeType>
+  <variants>
+    <element>EXECUTABLE</element>
+  </variants>
+</process>
diff --git a/process/workflowUsers_rest/workflowUsers_rest.aod b/process/workflowUsers_rest/workflowUsers_rest.aod
index 6669992f8a6350bc781118d4751bb12f8f679d05..ff6c8aa88c1d43861d49315a697ad537f3419a24 100644
--- a/process/workflowUsers_rest/workflowUsers_rest.aod
+++ b/process/workflowUsers_rest/workflowUsers_rest.aod
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+<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>workflowUsers_rest</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <documentation>%aditoprj%/process/workflowUsers_rest/documentation.adoc</documentation>
diff --git a/readme.md b/readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..67a1a52f76abd63922d48d8fa5526f1e470c94a2
--- /dev/null
+++ b/readme.md
@@ -0,0 +1,8 @@
+# xRM
+
+## Useful documents to get started
+
+* [Coding Guidelines](https://neon.adito.de/client/KnowledgeManagement/full?id=dc6e3066-2228-4d04-b9b6-dac792d5bfec)
+* [Customizing Manual](https://neon.adito.de/client/KnowledgeManagement/full?id=534c07da-387a-46e2-b5ab-040a5c1b0ab2)
+* [Designer Manual](https://neon.adito.de/client/KnowledgeManagement/full?id=56507a00-9c49-4be3-b4d5-9f83cb442ff7)
+* [Documentation Overview](https://neon.adito.de/client/KnowledgeManagement/full?id=42a481e3-b27d-446a-8a0b-fe5bffafc2ec)
\ No newline at end of file
diff --git a/report/Offer_report/Offer_report.aod b/report/Offer_report/Offer_report.aod
index 737a6889a7a04378f01339685a85661f15da8849..b273251e794bcddc566cbff154b432b35bae704b 100644
--- a/report/Offer_report/Offer_report.aod
+++ b/report/Offer_report/Offer_report.aod
@@ -33,14 +33,6 @@
         <icon>REPORT_24</icon>
         <enabled v="true" />
         <layoutPosition>POSITION_TOP</layoutPosition>
-        <customComponents>
-          <rcCommandButton>
-            <name>Button</name>
-            <onClick>%aditoprj%/report/Offer_report/ribbon/ribbontasks/task_report/customcomponents/button/onClick.js</onClick>
-            <title>Senden per E-Mail</title>
-            <imageData>%aditoprj%/report/Offer_report/ribbon/ribbontasks/task_report/customcomponents/button/imageData.png</imageData>
-          </rcCommandButton>
-        </customComponents>
       </ribbonTask>
     </ribbonTasks>
   </ribbon>
diff --git a/report/Offer_report/reportData.jrxml b/report/Offer_report/reportData.jrxml
index f2afe8275137822933e3b91b78f69ef96e2879dd..2f3a25316e09aa7a8a18a74718bb72d930e3e4f5 100644
--- a/report/Offer_report/reportData.jrxml
+++ b/report/Offer_report/reportData.jrxml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report1" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="e7a916c8-3f9a-497d-84bb-3909b15271ea">
-	<property name="ireport.zoom" value="1.9487171000000014"/>
+	<property name="ireport.zoom" value="1.0"/>
 	<property name="ireport.x" value="0"/>
-	<property name="ireport.y" value="190"/>
+	<property name="ireport.y" value="0"/>
 	<parameter name="myAddr" class="java.lang.String"/>
 	<parameter name="Pos" class="java.lang.String"/>
 	<parameter name="Articledescription" class="java.lang.String"/>
@@ -24,7 +24,7 @@
 	<parameter name="OfferDeliveryTerm" class="java.lang.String"/>
 	<parameter name="responsible" class="java.lang.String"/>
 	<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
-		<defaultValueExpression><![CDATA["C:\\Entwicklung\\0.0\\project\\basic2\\report\\Offer_report\\"]]></defaultValueExpression>
+		<defaultValueExpression><![CDATA["C:\\dev\\project\\basic\\report\\Offer_report\\"]]></defaultValueExpression>
 	</parameter>
 	<parameter name="adito.datasource.subdata" class="java.lang.Object"/>
 	<parameter name="SUMITEMSUM" class="java.lang.Double"/>
diff --git a/report/Offer_report/ribbon/ribbontasks/task_report/customcomponents/button/imageData.png b/report/Offer_report/ribbon/ribbontasks/task_report/customcomponents/button/imageData.png
deleted file mode 100644
index 49cda7d673d367ab30051c9aa9dda1dcfad22177..0000000000000000000000000000000000000000
Binary files a/report/Offer_report/ribbon/ribbontasks/task_report/customcomponents/button/imageData.png and /dev/null differ
diff --git a/report/Offer_report/ribbon/ribbontasks/task_report/customcomponents/button/onClick.js b/report/Offer_report/ribbon/ribbontasks/task_report/customcomponents/button/onClick.js
deleted file mode 100644
index 354885d3893c22e85f81c745e62614f8b636523b..0000000000000000000000000000000000000000
--- a/report/Offer_report/ribbon/ribbontasks/task_report/customcomponents/button/onClick.js
+++ /dev/null
@@ -1,44 +0,0 @@
-import("system.text");
-import("system.swing");
-import("system.translate");
-import("system.question");
-import("system.vars");
-import("system.db");
-
-//@TODO: remove
-
-var details = vars.get("$global.RptOfferOrderDetails");
-var orgid = db.cell("select ORGANISATION_ID from CONTACT where CONTACTID = '" + details[1] + "'");
-if (orgid.substr(0, 2) == '0 ') // Privatperson
-{
-    var count = db.cell("select count(*) from COMMUNICATION where medium_id = 3 and ISSTANDARD = 1 and CONTACT_ID = '" + details[1] + "'");
-    if (count == "0") question.showMessage(translate.text("no standard email office"));
-    else
-        sendAutoMail( translate.text("Offer") + " " + details[0], details[1], "Email_Angebot", details[2], "AGB", [], [["SPNR", details[5]]] );
-}
-else // Funktion - Person in Firma
-{
-    var orgrelid = db.cell("select CONTACTID from CONTACT where ORGANISATION_ID = '" + orgid + "'");
-    var relobjid = db.array(db.COLUMN, "select ORGANISATION_ID from OBJECTRELATION join CONTACT on CONTACTID = DEST_ID where SOURCE_ID = '" + orgrelid + "' and RELVALUE = 9");
-       contactid = db.array(db.COLUMN, "select CONTACTID from CONTACT left join PERSON on PERSONID = PERSON_ID"
-        + " where CONTACT.STATUS = 1 and ORGANISATION_ID in ('" + orgid + "', '" + relobjid.join("','") + "')");
-    
-    vars.set("$local.relids", "'" + contactid.join("','") + "'");
-        vars.set("$local.cmb_person_to", details[1]); //Empfänger vorbelegen
-    contactid = swing.askUserQuestion("Email", "DLG_CHOOSE_PERSON_FOREMAIL")
-    if ( contactid == null )	contactid = ""; //Abbruch geklickt
-    else
-    {
-        var reltoid = contactid["DLG_CHOOSE_PERSON_FOREMAIL.cmb_person_to"];
-
-        var relccid = text.decodeMS(contactid["DLG_CHOOSE_PERSON_FOREMAIL.tbl_person_cc"]);
-        if (relccid.length == 0)	contactid = ""; // keine Person markiert und OK geklickt
-        else	
-            relccid = db.array(db.COLUMN, "select ADDR from COMMUNICATION where MEDIUM_ID = 3 and ISSTANDARD = 1 and "
-                + "CONTACT_ID in ('" + relccid.join("','") + "') and CONTACT_ID <> '" + reltoid + "'");
-
-        if ( reltoid != "" ) 
-            sendAutoMail( translate.text(details[3]) + " " + details[0], reltoid, "Email_" + details[3], details[2], "AGB", relccid, [["SPNR", details[5]]] );
-        else question.showMessage(translate.text("Put Reciever Into To"));
-    }
-}
\ No newline at end of file
diff --git a/report/Reminder_report/reportData.jrxml b/report/Reminder_report/reportData.jrxml
index 5e0e92752aff29c9212d7fed72e0a86f5592701e..1347b1ef959b34c58be528e8eecfb4bc139ff51a 100644
--- a/report/Reminder_report/reportData.jrxml
+++ b/report/Reminder_report/reportData.jrxml
@@ -2,7 +2,7 @@
 <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Mahnung" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="e7a916c8-3f9a-497d-84bb-3909b15271ea">
 	<property name="ireport.zoom" value="2.1435888100000016"/>
 	<property name="ireport.x" value="0"/>
-	<property name="ireport.y" value="144"/>
+	<property name="ireport.y" value="0"/>
 	<parameter name="myAddr" class="java.lang.String"/>
 	<parameter name="Kontenabstimmung" class="java.lang.String"/>
 	<parameter name="Rech.-Nr" class="java.lang.String"/>
@@ -22,6 +22,7 @@
 	<parameter name="Due" class="java.lang.String"/>
 	<parameter name="DUEDATE" class="java.lang.String"/>
 	<parameter name="Dunninglevel" class="java.lang.String"/>
+	<parameter name="OutstandingAmount" class="java.lang.String"/>
 	<field name="PAYED" class="java.lang.String"/>
 	<field name="RELATION_ID" class="java.lang.String"/>
 	<field name="CURRENCY" class="java.lang.String"/>
@@ -41,89 +42,89 @@
 				<textField>
 					<reportElement x="13" y="0" width="68" height="15" uuid="0a515534-8d2a-4e3e-9370-6cac4c65ef68"/>
 					<textElement>
-						<font  size="8"/>
+						<font size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{Ordernumber}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="104" y="0" width="63" height="15" uuid="87fc2f40-ffdc-47d5-9fd8-7a8caf821114"/>
 					<textElement>
-						<font  size="8"/>
+						<font size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{Orderdate}]]></textFieldExpression>
 				</textField>
 				<textField>
-					<reportElement x="202" y="0" width="62" height="15" uuid="86eacb27-6bb5-4ce8-b8cf-c3f0993380ad"/>
+					<reportElement x="202" y="0" width="76" height="15" uuid="86eacb27-6bb5-4ce8-b8cf-c3f0993380ad"/>
 					<textElement>
-						<font  size="8"/>
+						<font size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$P{DueDate}]]></textFieldExpression>
 				</textField>
-				<textField>
-					<reportElement x="429" y="0" width="59" height="15" uuid="62a0909f-ef03-4242-969a-8a9532d1aa9a"/>
-					<textElement textAlignment="Right">
-						<font  size="8"/>
-					</textElement>
-					<textFieldExpression><![CDATA[$P{Due}]]></textFieldExpression>
-				</textField>
 				<line>
 					<reportElement x="13" y="33" width="527" height="1" uuid="d5108302-191f-4e27-8920-fcd330d335e8"/>
 				</line>
 				<textField>
 					<reportElement x="104" y="36" width="64" height="15" uuid="ca4c366a-1954-4aee-91c4-05c093b04df5"/>
 					<textElement>
-						<font  size="8"/>
+						<font size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$F{ORDERDATE}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="13" y="36" width="68" height="15" uuid="3fcb3ee0-fe4d-409e-8cb8-7a0e6ceca5ab"/>
 					<textElement>
-						<font  size="8"/>
+						<font size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$F{ORDERCODE}]]></textFieldExpression>
 				</textField>
 				<textField>
 					<reportElement x="202" y="36" width="62" height="15" uuid="b5e006cf-5d37-42a1-bf74-0b49d3a39b27"/>
 					<textElement>
-						<font  size="8"/>
+						<font size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$F{DUEDATE}]]></textFieldExpression>
 				</textField>
 				<textField>
-					<reportElement x="428" y="36" width="60" height="15" uuid="d57eeb7b-f517-4c85-a925-cdc3c1ea0830"/>
+					<reportElement x="451" y="36" width="60" height="15" uuid="d57eeb7b-f517-4c85-a925-cdc3c1ea0830"/>
 					<textElement textAlignment="Right">
-						<font  size="8" isBold="true"/>
+						<font size="8" isBold="true"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$F{OFFEN}]]></textFieldExpression>
 				</textField>
 				<textField>
-					<reportElement x="307" y="35" width="56" height="15" uuid="72a49ece-7fc0-4cd7-a00c-94580845d150"/>
+					<reportElement x="332" y="35" width="56" height="15" uuid="72a49ece-7fc0-4cd7-a00c-94580845d150"/>
 					<textElement textAlignment="Right">
-						<font  size="8"/>
+						<font size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$F{BRUTTO}]]></textFieldExpression>
 				</textField>
 				<textField>
-					<reportElement x="307" y="15" width="56" height="15" uuid="a991ccab-0b04-4550-bbd2-2033a5fad0f0"/>
+					<reportElement x="332" y="15" width="56" height="15" uuid="a991ccab-0b04-4550-bbd2-2033a5fad0f0"/>
 					<textElement textAlignment="Right">
-						<font  size="8"/>
+						<font size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$F{CURRENCY}]]></textFieldExpression>
 				</textField>
 				<textField>
-					<reportElement x="429" y="15" width="59" height="15" uuid="8e257160-536a-418a-b9df-80fa020268b8"/>
+					<reportElement x="452" y="15" width="59" height="15" uuid="8e257160-536a-418a-b9df-80fa020268b8"/>
 					<textElement textAlignment="Right">
-						<font  size="8"/>
+						<font size="8"/>
 					</textElement>
 					<textFieldExpression><![CDATA[$F{CURRENCY}]]></textFieldExpression>
 				</textField>
 				<textField>
-					<reportElement x="326" y="0" width="62" height="15" uuid="000feb72-9b7d-42e6-ade9-8e12359c3eef"/>
+					<reportElement x="307" y="0" width="81" height="15" uuid="000feb72-9b7d-42e6-ade9-8e12359c3eef"/>
+					<textElement>
+						<font size="8"/>
+					</textElement>
+					<textFieldExpression><![CDATA[$R{Rechnungsbetrag}]]></textFieldExpression>
+				</textField>
+				<textField>
+					<reportElement x="430" y="0" width="81" height="15" uuid="8eee46c0-f3c3-4563-b1b1-746aeb7e73c6"/>
 					<textElement>
-						<font  size="8"/>
+						<font size="8"/>
 					</textElement>
-					<textFieldExpression><![CDATA[$R{Rech.-Betrag}]]></textFieldExpression>
+					<textFieldExpression><![CDATA[$P{OutstandingAmount}]]></textFieldExpression>
 				</textField>
 			</band>
 		</groupHeader>
@@ -140,7 +141,7 @@
 			<textField>
 				<reportElement x="13" y="88" width="527" height="20" forecolor="#000000" uuid="a47fa80c-6b70-4c8a-938d-3d44273b1ffb"/>
 				<textElement textAlignment="Center" verticalAlignment="Middle">
-					<font  size="8"/>
+					<font size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$P{Address}]]></textFieldExpression>
 			</textField>
@@ -157,35 +158,35 @@
 			<textField isStretchWithOverflow="true">
 				<reportElement x="13" y="122" width="152" height="20" uuid="c8514bfb-5e34-43f4-a256-7899cb58f0c1"/>
 				<textElement>
-					<font  size="8"/>
+					<font size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$P{ReminderAddress}]]></textFieldExpression>
 			</textField>
 			<textField>
 				<reportElement x="13" y="172" width="132" height="20" uuid="d21620a9-4a49-496e-80f6-db842f0b70a9"/>
 				<textElement>
-					<font  size="14" isBold="true"/>
+					<font size="14" isBold="true"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$P{Reminder}]]></textFieldExpression>
 			</textField>
 			<textField pattern="dd.MM.yyyy">
 				<reportElement x="388" y="192" width="100" height="20" uuid="5141d92f-3325-445b-b616-90630c1648f7"/>
 				<textElement textAlignment="Right">
-					<font  size="8"/>
+					<font size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression>
 			</textField>
 			<textField>
 				<reportElement x="13" y="232" width="294" height="20" uuid="3f7d1c4a-a326-436b-831d-5da9fd255bf0"/>
 				<textElement>
-					<font  size="8" isBold="true"/>
+					<font size="8" isBold="true"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$F{DUNNINGTEXT}]]></textFieldExpression>
 			</textField>
 			<textField>
 				<reportElement x="13" y="212" width="214" height="20" uuid="52834aec-d107-4cc7-9662-1cdd73ba15c1"/>
 				<textElement>
-					<font  size="8" isBold="true"/>
+					<font size="8" isBold="true"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$P{Dunninglevel} + " " + $F{DUNNINGLEVEL}]]></textFieldExpression>
 			</textField>
@@ -196,21 +197,21 @@
 			<textField pattern="EEEEE dd MMMMM yyyy">
 				<reportElement x="340" y="13" width="112" height="15" forecolor="#999999" uuid="26510f19-a203-4b34-8093-f6a9f7f6050e"/>
 				<textElement>
-					<font  size="8"/>
+					<font size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression>
 			</textField>
 			<textField>
 				<reportElement x="452" y="13" width="48" height="15" forecolor="#999999" uuid="218ef560-390f-4807-b7f6-98e6f6162892"/>
 				<textElement textAlignment="Right">
-					<font  size="8"/>
+					<font size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[$R{Seite}+" "+$V{PAGE_NUMBER}+" "+$R{von}]]></textFieldExpression>
 			</textField>
 			<textField evaluationTime="Report">
 				<reportElement x="500" y="13" width="40" height="15" forecolor="#999999" uuid="7ac354ed-0f8f-41fa-80a5-c2a0f74f7e09"/>
 				<textElement>
-					<font  size="8"/>
+					<font size="8"/>
 				</textElement>
 				<textFieldExpression><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
 			</textField>
diff --git a/report/Salesorder_report/Salesorder_report.aod b/report/Salesorder_report/Salesorder_report.aod
index 51a1a8215cab817858158f3307f3e3180e1b15ff..764967a65bf10f470b6c7b0c6939082935b34483 100644
--- a/report/Salesorder_report/Salesorder_report.aod
+++ b/report/Salesorder_report/Salesorder_report.aod
@@ -32,14 +32,6 @@
         <icon>REPORT_24</icon>
         <enabled v="true" />
         <layoutPosition>POSITION_TOP</layoutPosition>
-        <customComponents>
-          <rcCommandButton>
-            <name>Button</name>
-            <onClick>%aditoprj%/report/Salesorder_report/ribbon/ribbontasks/task_report/customcomponents/button/onClick.js</onClick>
-            <title>Senden per E-Mail</title>
-            <imageData>%aditoprj%/report/Salesorder_report/ribbon/ribbontasks/task_report/customcomponents/button/imageData.png</imageData>
-          </rcCommandButton>
-        </customComponents>
       </ribbonTask>
     </ribbonTasks>
   </ribbon>
diff --git a/report/Salesorder_report/reportData.jrxml b/report/Salesorder_report/reportData.jrxml
index 496fcde2e9eb86deb652b4884531c1b77c2a40fb..dddb5cf7b47625ee6351e06257b40734c7dbbf38 100644
--- a/report/Salesorder_report/reportData.jrxml
+++ b/report/Salesorder_report/reportData.jrxml
@@ -27,7 +27,7 @@
 	<parameter name="SUMITEMSUM" class="java.lang.Double"/>
 	<parameter name="TOTAL" class="java.lang.String"/>
 	<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
-		<defaultValueExpression><![CDATA["C:\\Entwicklung\\stable2019\\project\\basic\\report\\Salesorder_report\\"]]></defaultValueExpression>
+		<defaultValueExpression><![CDATA["C:\\dev\\project\\basic\\report\\Salesorder_report\\"]]></defaultValueExpression>
 	</parameter>
 	<parameter name="adito.datasource.subdata" class="java.lang.Object" isForPrompting="false"/>
 	<parameter name="adito.image.myLogo" class="java.lang.String"/>
diff --git a/report/Salesorder_report/ribbon/ribbontasks/task_report/customcomponents/button/imageData.png b/report/Salesorder_report/ribbon/ribbontasks/task_report/customcomponents/button/imageData.png
deleted file mode 100644
index 49cda7d673d367ab30051c9aa9dda1dcfad22177..0000000000000000000000000000000000000000
Binary files a/report/Salesorder_report/ribbon/ribbontasks/task_report/customcomponents/button/imageData.png and /dev/null differ
diff --git a/report/Salesorder_report/ribbon/ribbontasks/task_report/customcomponents/button/onClick.js b/report/Salesorder_report/ribbon/ribbontasks/task_report/customcomponents/button/onClick.js
deleted file mode 100644
index dad46b278aff6020f827b7cc76b00dd4dac82d27..0000000000000000000000000000000000000000
--- a/report/Salesorder_report/ribbon/ribbontasks/task_report/customcomponents/button/onClick.js
+++ /dev/null
@@ -1,46 +0,0 @@
-import("system.text");
-import("system.question");
-import("system.translate");
-import("system.swing");
-import("system.vars");
-import("system.db");
-
-//@TODO: remove
-
-var details = vars.get("$global.RptOfferOrderDetails");
-var orgid = db.array(db.ROW, "select ORG_ID, LANG from RELATION where RELATIONID = '" + details[1] + "'");
-if (orgid[0].substr(0, 2) == '0 ') // Privatperson
-{
-    var count = db.cell("select count(*) from COMM where medium_id = 3 and STANDARD = 1 and RELATION_ID = '" + details[1] + "'");
-    if (count == "0") question.showMessage(translate.text("No Standard-E-Mail available!"));
-    else
-        sendAutoMail( translate.text(details[3]) + " " + details[0], details[1], details[4], details[2], details[5], relccid, [["SPNR", details[6]]], orgid[1] );
-}
-else // Funktion - Person in Firma
-{
-    var orgrelid = db.cell("select RELATIONID from RELATION where ORG_ID = '" + orgid + "'");
-    var relobjid = db.array(db.COLUMN, "select ORG_ID from OBJECTRELATION join RELATION on RELATIONID = DEST_ID where SOURCE_ID = '" + orgrelid + "' and RELVALUE = 9");
-    relationid = db.array(db.COLUMN, "select RELATIONID from RELATION left join PERS on PERSID = PERS_ID"
-        + " where RELATION.STATUS = 1 and ORG_ID in ('" + orgid[0] + "', '" + relobjid.join("','") + "')");
-    
-    vars.set("$local.relids", "'" + relationid.join("','") + "'");
-    vars.set("$local.cmb_pers_to", details[1]); //Empfänger vorbelegen
-        
-    relationid = swing.askUserQuestion("Email", "DLG_CHOOSE_PERS_FOREMAIL")
-    if ( relationid == null ) relationid = ""; //Abbruch geklickt
-    else
-    {
-        var reltoid = relationid["DLG_CHOOSE_PERS_FOREMAIL.cmb_pers_to"];
-        var language = db.cell("select LANG from RELATION where RELATIONID = '" + reltoid + "'")
-
-        var relccid = text.decodeMS(relationid["DLG_CHOOSE_PERS_FOREMAIL.tbl_pers_cc"]);
-        if (relccid.length == 0) relationid = ""; // keine Person markiert und OK geklickt
-        else	
-            relccid = db.array(db.COLUMN, "select ADDR from COMM where MEDIUM_ID = 3 and STANDARD = 1 and "
-                + "RELATION_ID in ('" + relccid.join("','") + "') and RELATION_ID <> '" + reltoid + "'");
-
-        if ( reltoid != "" ) 
-            sendAutoMail( translate.text(details[3]) + " " + details[0], reltoid, details[4], details[2], details[5], relccid, [["SPNR", details[6]]], language );
-        else question.showMessage(translate.text("Please enter Addressee in 'to'"));
-    }
-}
\ No newline at end of file