diff --git a/.liquibase/Data_alias/basic/2019.1.4/AditoBasic/init_CommunicationMedium.xml b/.liquibase/Data_alias/basic/2019.1.4/AditoBasic/init_CommunicationMedium.xml
index f03f93fd3ed0c0c9a3c284fbab8d866be95b26bd..137e041d59495cba2873ec54f05d020c8d62e9e3 100644
--- a/.liquibase/Data_alias/basic/2019.1.4/AditoBasic/init_CommunicationMedium.xml
+++ b/.liquibase/Data_alias/basic/2019.1.4/AditoBasic/init_CommunicationMedium.xml
@@ -45,7 +45,7 @@
             <column name="CONTAINER" value="CommunicationMedium"/>
             <column name="SORTING" valueNumeric="1"/>
             <column name="ISACTIVE" valueNumeric="1"/>
-            <column name="ISESSENTIAL" valueNumeric="0"/>
+            <column name="ISESSENTIAL" valueNumeric="1"/>
         </insert>
         <insert tableName="AB_KEYWORD_ATTRIBUTERELATION">
             <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="ace352ee-b9ba-47eb-a55d-4619a4b41e61"/>
diff --git a/entity/360Degree_entity/360Degree_entity.aod b/entity/360Degree_entity/360Degree_entity.aod
index acaa21293a751fcc1a7d6942c4ec0ee74ad5ba69..64aebbbac9df4cdc3d77b7f594fec75f63610525 100644
--- a/entity/360Degree_entity/360Degree_entity.aod
+++ b/entity/360Degree_entity/360Degree_entity.aod
@@ -138,6 +138,7 @@
         </entityActionField>
         <entityActionField>
           <name>newSupportticket</name>
+          <title>New Supportticket</title>
           <onActionProcess>%aditoprj%/entity/360Degree_entity/entityfields/newmodule/children/newsupportticket/onActionProcess.js</onActionProcess>
           <iconId>VAADIN:QUESTION</iconId>
         </entityActionField>
diff --git a/entity/Activity_entity/Activity_entity.aod b/entity/Activity_entity/Activity_entity.aod
index df5bf8a86616cf31cfd889ccb6ec3aca37805909..b333645e3d46e87cff240e0a14dca2f228eaa0e4 100644
--- a/entity/Activity_entity/Activity_entity.aod
+++ b/entity/Activity_entity/Activity_entity.aod
@@ -493,22 +493,27 @@
         <dbRecordFieldMapping>
           <name>DIRECTION.value</name>
           <recordfield>ACTIVITY.DIRECTION</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>INFO.value</name>
           <recordfield>ACTIVITY.INFO</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>SUBJECT.value</name>
           <recordfield>ACTIVITY.SUBJECT</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>ENTRYDATE.value</name>
           <recordfield>ACTIVITY.ENTRYDATE</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>CATEGORY.value</name>
           <recordfield>ACTIVITY.CATEGORY</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>DIRECTION.displayValue</name>
@@ -549,6 +554,7 @@
         <dbRecordFieldMapping>
           <name>RESPONSIBLE.value</name>
           <recordfield>ACTIVITY.RESPONSIBLE</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>entryDateTimelineDate.value</name>
diff --git a/entity/Activity_entity/entityfields/direction/displayValueProcess.js b/entity/Activity_entity/entityfields/direction/displayValueProcess.js
index db0eefa7c09b3968b41810ad94bc54cdbdff1cef..75deea02b4efd83a4bac92ddd3cb7bf8c9e86787 100644
--- a/entity/Activity_entity/entityfields/direction/displayValueProcess.js
+++ b/entity/Activity_entity/entityfields/direction/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("KeywordRegistry_basic");
 import("Keyword_lib");
 
-result.string(KeywordUtils.getViewValue($KeywordRegistry.activityDirection(), vars.get("$this.value")));
\ No newline at end of file
+result.string(KeywordUtils.getViewValue($KeywordRegistry.activityDirection(), vars.get("$field.DIRECTION")));
\ No newline at end of file
diff --git a/entity/Activity_entity/entityfields/entrydate/onValidation.js b/entity/Activity_entity/entityfields/entrydate/onValidation.js
index 63235b240b7df91d447c5f2f5a2cc371c51f4c23..0f2440a7724b5f1cb7425fad3b4bcac1ffaf246a 100644
--- a/entity/Activity_entity/entityfields/entrydate/onValidation.js
+++ b/entity/Activity_entity/entityfields/entrydate/onValidation.js
@@ -4,6 +4,6 @@ import("system.vars");
 import("system.result");
 import("Entity_lib");
 
-var entryDate = ProcessHandlingUtils.getOnValidationValue();
+var entryDate = vars.get("local.value");
 if (Number(datetime.clearTime(entryDate)) > Number(vars.get("$sys.today")))
     result.string(translate.text("Entrydate must not be in the future"));
\ No newline at end of file
diff --git a/entity/Activity_entity/entityfields/responsible/displayValueProcess.js b/entity/Activity_entity/entityfields/responsible/displayValueProcess.js
index 0dde82e7728286629b1c210326725aac2ebb92c5..4a1a4bf92b1c7ff37398bec253e24f100e3259af 100644
--- a/entity/Activity_entity/entityfields/responsible/displayValueProcess.js
+++ b/entity/Activity_entity/entityfields/responsible/displayValueProcess.js
@@ -2,7 +2,6 @@ import("system.result");
 import("system.vars");
 import("Contact_lib");
 
-var id = vars.get("$this.value");
 //show the simpel title since this will be later an employee-entry and therefore no organisation is needed
-var title = ContactUtils.getTitleByContactId(id);
+var title = ContactUtils.getTitleByContactId(vars.get("$field.RESPONSIBLE"));
 result.string(title);
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/address/displayValueProcess.js b/entity/Address_entity/entityfields/address/displayValueProcess.js
index de2c5e835eaf4fe6dd8b3521b3e17a39c9ac23c1..361195b279eff3c671bdb2c410cc0ea875750c88 100644
--- a/entity/Address_entity/entityfields/address/displayValueProcess.js
+++ b/entity/Address_entity/entityfields/address/displayValueProcess.js
@@ -2,4 +2,4 @@ import("system.vars");
 import("system.result");
 
 // needed for instant display name change if value set by neon.setFieldValue
-result.string(vars.get("$this.value"))
\ No newline at end of file
+result.string(vars.get("$field.ADDRESS"));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/addresssearch/displayValueProcess.js b/entity/Address_entity/entityfields/addresssearch/displayValueProcess.js
index de2c5e835eaf4fe6dd8b3521b3e17a39c9ac23c1..a621c8b6d25a011f206268b568b9ffd80ec5c820 100644
--- a/entity/Address_entity/entityfields/addresssearch/displayValueProcess.js
+++ b/entity/Address_entity/entityfields/addresssearch/displayValueProcess.js
@@ -2,4 +2,4 @@ import("system.vars");
 import("system.result");
 
 // needed for instant display name change if value set by neon.setFieldValue
-result.string(vars.get("$this.value"))
\ No newline at end of file
+result.string(vars.get("$field.AddressSearch"));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/city/displayValueProcess.js b/entity/Address_entity/entityfields/city/displayValueProcess.js
index feac45906bc212c120bbc05a111433398994ddf2..3dfaf91d9c4e40070e6eece3bab75996c23f453e 100644
--- a/entity/Address_entity/entityfields/city/displayValueProcess.js
+++ b/entity/Address_entity/entityfields/city/displayValueProcess.js
@@ -1,5 +1,5 @@
-import("system.vars");
-import("system.result");
-
-// needed for instant display name change if value set by neon.setFieldValue
-result.string(vars.get("$this.value"))
\ No newline at end of file
+import("system.vars");
+import("system.result");
+
+// needed for instant display name change if value set by neon.setFieldValue
+result.string(vars.get("$field.CITY"));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/country/valueProcess.js b/entity/Address_entity/entityfields/country/valueProcess.js
index 0bbec92588a0d5155ba8f200c1c8699e0c106ed7..ed4f8415e482aab730551c90508dd80dc5d7779c 100644
--- a/entity/Address_entity/entityfields/country/valueProcess.js
+++ b/entity/Address_entity/entityfields/country/valueProcess.js
@@ -3,7 +3,7 @@ import("system.result");
 import("system.neon");
 import("system.vars");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     result.string("DE");
 }
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/streetvalidation/children/currentvalue_param/valueProcess.js b/entity/Address_entity/entityfields/streetvalidation/children/currentvalue_param/valueProcess.js
index 210aab5135161a47229a09613e2ed186ebf9528f..6cd3c4544e56fa57ad04b119be620aa650f4a849 100644
--- a/entity/Address_entity/entityfields/streetvalidation/children/currentvalue_param/valueProcess.js
+++ b/entity/Address_entity/entityfields/streetvalidation/children/currentvalue_param/valueProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$this.value"))
\ No newline at end of file
+result.string(vars.get("$this.value"));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/zip/displayValueProcess.js b/entity/Address_entity/entityfields/zip/displayValueProcess.js
index feac45906bc212c120bbc05a111433398994ddf2..199cb7a79d5033b7f6a5328d0c8c85c9fdd79e62 100644
--- a/entity/Address_entity/entityfields/zip/displayValueProcess.js
+++ b/entity/Address_entity/entityfields/zip/displayValueProcess.js
@@ -1,5 +1,5 @@
-import("system.vars");
-import("system.result");
-
-// needed for instant display name change if value set by neon.setFieldValue
-result.string(vars.get("$this.value"))
\ No newline at end of file
+import("system.vars");
+import("system.result");
+
+// needed for instant display name change if value set by neon.setFieldValue
+result.string(vars.get("$field.ZIP"));
\ No newline at end of file
diff --git a/entity/Address_entity/entityfields/zip/onValidation.js b/entity/Address_entity/entityfields/zip/onValidation.js
index 4ab5fababa786a02ee290896bd38c6b648fb2150..d676d5911b0c9fbe9ad578821db2c08f56e1b5df 100644
--- a/entity/Address_entity/entityfields/zip/onValidation.js
+++ b/entity/Address_entity/entityfields/zip/onValidation.js
@@ -6,7 +6,7 @@ import("Entity_lib");
 
 
 var countryCode = vars.get("$field.COUNTRY");
-var zipCode = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.ZIP"));
+var zipCode = vars.get("local.value");
 var message = "";
 var isValid = AddressValidationUtils.isValidZip(countryCode, zipCode);
 if (!isValid)
diff --git a/entity/Address_entity/entityfields/zipvalidation/children/currentvalue_param/valueProcess.js b/entity/Address_entity/entityfields/zipvalidation/children/currentvalue_param/valueProcess.js
index 210aab5135161a47229a09613e2ed186ebf9528f..6cd3c4544e56fa57ad04b119be620aa650f4a849 100644
--- a/entity/Address_entity/entityfields/zipvalidation/children/currentvalue_param/valueProcess.js
+++ b/entity/Address_entity/entityfields/zipvalidation/children/currentvalue_param/valueProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$this.value"))
\ No newline at end of file
+result.string(vars.get("$this.value"));
\ No newline at end of file
diff --git a/entity/AnyContact_entity/AnyContact_entity.aod b/entity/AnyContact_entity/AnyContact_entity.aod
index 54aefdb83c0f3ff25fdb018152f29e24fbcd475d..d8496c418d8180c531be3c01ae84dc97f1e5e0b0 100644
--- a/entity/AnyContact_entity/AnyContact_entity.aod
+++ b/entity/AnyContact_entity/AnyContact_entity.aod
@@ -50,6 +50,12 @@
           <fieldName>Contacts</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>471b6e37-13ce-4e84-a797-82bccbe4e39a</name>
+          <entityName>UnlinkedMailMappingLink_entity</entityName>
+          <fieldName>AnyContacts</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
     </entityProvider>
     <entityField>
@@ -144,6 +150,11 @@ See ContactUtils.getRelationTypeByPersOrg for possible values</description>
         </entityParameter>
       </children>
     </entityProvider>
+    <entityParameter>
+      <name>WithPrivatePersons_param</name>
+      <valueProcess>%aditoprj%/entity/AnyContact_entity/entityfields/withprivatepersons_param/valueProcess.js</valueProcess>
+      <expose v="true" />
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/CampaignCost_entitiy/entityfields/campaigncosts/children/campaignsteps_param/valueProcess.js b/entity/AnyContact_entity/entityfields/withprivatepersons_param/valueProcess.js
similarity index 54%
rename from entity/CampaignCost_entitiy/entityfields/campaigncosts/children/campaignsteps_param/valueProcess.js
rename to entity/AnyContact_entity/entityfields/withprivatepersons_param/valueProcess.js
index 4f08839a6a4d79cdb90175f7b7f194a9902ec27f..40effa0178464da0c7850912345f19c7fa95975a 100644
--- a/entity/CampaignCost_entitiy/entityfields/campaigncosts/children/campaignsteps_param/valueProcess.js
+++ b/entity/AnyContact_entity/entityfields/withprivatepersons_param/valueProcess.js
@@ -1,2 +1,3 @@
-import("system.result");
-result.string(0)
\ No newline at end of file
+import("system.result");
+
+result.string(true);
\ No newline at end of file
diff --git a/entity/AnyContact_entity/recordcontainers/db/conditionProcess.js b/entity/AnyContact_entity/recordcontainers/db/conditionProcess.js
index 565287dccb22ad6f19f9b527caa276b87dd618bd..72bf4814198ca16718074a516805a6d7c2c1565f 100644
--- a/entity/AnyContact_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/AnyContact_entity/recordcontainers/db/conditionProcess.js
@@ -16,15 +16,18 @@ if (vars.exists("$param.ContactId_param") && vars.get("$param.ContactId_param"))
     }
 }
 
+var conditionPrivateOrganisation = SqlCondition.begin()
+                                               .andPrepare("CONTACT.ORGANISATION_ID", "0", "# != ?");
+
+if (vars.getString("$param.WithPrivatePersons_param") == "true")
+    conditionPrivateOrganisation.orSqlCondition(SqlCondition.begin()
+                                                            .andPrepare("CONTACT.ORGANISATION_ID", "0")
+                                                            .and("CONTACT.PERSON_ID is not null")
+                                                );
+
 //exclude private organisation
 var cond = SqlCondition.begin()
-                        .andSqlCondition(SqlCondition.begin()
-                                        .andPrepare("CONTACT.ORGANISATION_ID", "0", "# != ?")
-                                        .orSqlCondition(SqlCondition.begin()
-                                                                        .andPrepare("CONTACT.ORGANISATION_ID", "0")
-                                                                        .and("CONTACT.PERSON_ID is not null")
-                                        )
-                        )
+                       .andSqlCondition(conditionPrivateOrganisation)
                        .andPrepareIfSet("CONTACT.ORGANISATION_ID", orgContactId);
 
 result.string(db.translateCondition(cond.build()));
\ No newline at end of file
diff --git a/entity/AppointmentLink_entity/AppointmentLink_entity.aod b/entity/AppointmentLink_entity/AppointmentLink_entity.aod
index b9f898507f435bd3fb437adaebf0fb4be3e177ab..e1b12bd5bf548dee9f0c9736d60333255cabc6ed 100644
--- a/entity/AppointmentLink_entity/AppointmentLink_entity.aod
+++ b/entity/AppointmentLink_entity/AppointmentLink_entity.aod
@@ -2,6 +2,8 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.10" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.10">
   <name>AppointmentLink_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <title>Connection</title>
+  <titlePlural>Connections</titlePlural>
   <recordContainer>db</recordContainer>
   <entityFields>
     <entityProvider>
@@ -21,6 +23,7 @@
       <title>{$OBJECTLINK_OBJECT}</title>
       <consumer>Objects</consumer>
       <linkedContext>Object</linkedContext>
+      <stateProcess>%aditoprj%/entity/AppointmentLink_entity/entityfields/objectid/stateProcess.js</stateProcess>
       <displayValueProcess>%aditoprj%/entity/AppointmentLink_entity/entityfields/objectid/displayValueProcess.js</displayValueProcess>
       <onValueChangeTypes>
         <element>MASK</element>
@@ -33,6 +36,7 @@
       <title>{$OBJECTLINK_TYPE}</title>
       <consumer>Context</consumer>
       <linkedContext>Context</linkedContext>
+      <stateProcess>%aditoprj%/entity/AppointmentLink_entity/entityfields/objecttype/stateProcess.js</stateProcess>
       <displayValueProcess>%aditoprj%/entity/AppointmentLink_entity/entityfields/objecttype/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityParameter>
@@ -92,6 +96,12 @@
       <description>PARAMETER
 </description>
     </entityParameter>
+    <entityConsumer>
+      <name>AppointmentId</name>
+      <dependency>
+        <name>dependency</name>
+      </dependency>
+    </entityConsumer>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/AppointmentLink_entity/entityfields/objectid/stateProcess.js b/entity/AppointmentLink_entity/entityfields/objectid/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b9f041ffd36ba432fd379ce605d4bae3e36e61f4
--- /dev/null
+++ b/entity/AppointmentLink_entity/entityfields/objectid/stateProcess.js
@@ -0,0 +1,30 @@
+import("system.logging");
+import("system.result");
+import("system.tools");
+import("system.neon");
+import("system.vars");
+import("system.calendars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW)
+    result.object(neon.COMPONENTSTATE_DISABLED);
+
+else if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$param.AppointmentId_param"))
+{
+     var entry = calendars.getEntry(vars.get("$param.AppointmentId_param"), null, null);
+     doCalc(entry);
+}
+
+else if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+{
+    var entryy = calendars.getEntry(vars.get("$field.APPOINTMENT_ID"), null, null);
+    doCalc(entryy);
+}
+
+
+function doCalc(entry)
+{
+    if(entry[calendars.ORGANIZER2]["paramvalue"] == "mailto:" + tools.getCurrentUser()["params"]["email"])
+        result.object(neon.COMPONENTSTATE_EDITABLE);
+    else
+        result.object(neon.COMPONENTSTATE_DISABLED);
+}
\ No newline at end of file
diff --git a/entity/AppointmentLink_entity/entityfields/objecttype/stateProcess.js b/entity/AppointmentLink_entity/entityfields/objecttype/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7eaf72f92dabfc36787821a134eea15221903adf
--- /dev/null
+++ b/entity/AppointmentLink_entity/entityfields/objecttype/stateProcess.js
@@ -0,0 +1,30 @@
+import("system.logging");
+import("system.result");
+import("system.tools");
+import("system.neon");
+import("system.vars");
+import("system.calendars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW)
+    result.object(neon.COMPONENTSTATE_DISABLED);
+
+else if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$param.AppointmentId_param"))
+{
+     var entry = calendars.getEntry(vars.get("$param.AppointmentId_param"), null, null);
+     doCalc(entry);
+}
+
+else if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+{
+    var entryy = calendars.getEntry(vars.get("$field.APPOINTMENT_ID"), null, null);
+    doCalc(entryy);
+}
+
+
+function doCalc(entry)
+{    
+    if(entry[calendars.ORGANIZER2]["paramvalue"] == "mailto:" + tools.getCurrentUser()["params"]["email"])
+        result.object(neon.COMPONENTSTATE_EDITABLE);
+    else
+        result.object(neon.COMPONENTSTATE_DISABLED);
+}
\ No newline at end of file
diff --git a/entity/AttributeRelation_entity/AttributeRelation_entity.aod b/entity/AttributeRelation_entity/AttributeRelation_entity.aod
index 90f3b32a681e47388a5eb1255ed7ea4c524f2191..5e2d6bbd82333a958ba173c9e29a1db5f1de856d 100644
--- a/entity/AttributeRelation_entity/AttributeRelation_entity.aod
+++ b/entity/AttributeRelation_entity/AttributeRelation_entity.aod
@@ -108,6 +108,7 @@
       <mandatoryProcess>%aditoprj%/entity/AttributeRelation_entity/entityfields/value/mandatoryProcess.js</mandatoryProcess>
       <dropDownProcess>%aditoprj%/entity/AttributeRelation_entity/entityfields/value/dropDownProcess.js</dropDownProcess>
       <stateProcess>%aditoprj%/entity/AttributeRelation_entity/entityfields/value/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/AttributeRelation_entity/entityfields/value/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/AttributeRelation_entity/entityfields/value/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityConsumer>
diff --git a/entity/AttributeRelation_entity/entityfields/ab_attribute_id/valueProcess.js b/entity/AttributeRelation_entity/entityfields/ab_attribute_id/valueProcess.js
index d275fe78758974383fb7699c954e3f72cbdf5c3e..10be88dcbfaf76cace1f3b58644b421caf116da8 100644
--- a/entity/AttributeRelation_entity/entityfields/ab_attribute_id/valueProcess.js
+++ b/entity/AttributeRelation_entity/entityfields/ab_attribute_id/valueProcess.js
@@ -1,5 +1,5 @@
 import("system.vars");
 import("system.result");
 
-if (vars.exists("$param.AttributeId_param") && vars.get("$param.AttributeId_param") && !vars.get("$this.value"))
+if (vars.exists("$param.AttributeId_param") && vars.get("$param.AttributeId_param") && vars.get("$this.value") == null)
     result.string(vars.get("$param.AttributeId_param"));
\ No newline at end of file
diff --git a/entity/AttributeRelation_entity/entityfields/value/valueProcess.js b/entity/AttributeRelation_entity/entityfields/value/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..938b26f2b636941ca480c11525662c41bf43cc57
--- /dev/null
+++ b/entity/AttributeRelation_entity/entityfields/value/valueProcess.js
@@ -0,0 +1,9 @@
+import("Attribute_lib");
+import("system.vars");
+import("system.result");
+
+
+var attributeType = AttributeUtil.getAttributeType(vars.get("$field.AB_ATTRIBUTE_ID"));
+var contentType = AttributeTypeUtil.getContentType(attributeType);
+if (vars.get("$this.value") == null && contentType == "BOOLEAN")
+    result.string("0");
\ No newline at end of file
diff --git a/entity/AttributeUsage_entity/entityfields/max_count/displayValueProcess.js b/entity/AttributeUsage_entity/entityfields/max_count/displayValueProcess.js
index 8d45182f23c7ed4583c8b410ab827802792cf959..f1159a248acb0d346960c575a29530e1bcb5a622 100644
--- a/entity/AttributeUsage_entity/entityfields/max_count/displayValueProcess.js
+++ b/entity/AttributeUsage_entity/entityfields/max_count/displayValueProcess.js
@@ -2,5 +2,5 @@ import("system.translate");
 import("system.result");
 import("system.vars");
 
-var minCount = vars.get("$this.value");
+var minCount = vars.get("$field.MAX_COUNT");
 result.string(minCount != 0 ? translate.text("Maximal") + " " + minCount : "");
\ No newline at end of file
diff --git a/entity/AttributeUsage_entity/entityfields/max_count/onValidation.js b/entity/AttributeUsage_entity/entityfields/max_count/onValidation.js
index 96735194f37f6ce825c6d1ad41109100193ae56f..0a2f0bdb56a56e509e8977dfd6e93d0eb02994c3 100644
--- a/entity/AttributeUsage_entity/entityfields/max_count/onValidation.js
+++ b/entity/AttributeUsage_entity/entityfields/max_count/onValidation.js
@@ -3,7 +3,7 @@ import("system.vars");
 import("system.translate");
 import("Entity_lib");
 
-var maxCount = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.MAX_COUNT"));
+var maxCount = vars.get("local.value");
 
 if (maxCount)
 {
diff --git a/entity/AttributeUsage_entity/entityfields/min_count/displayValueProcess.js b/entity/AttributeUsage_entity/entityfields/min_count/displayValueProcess.js
index 891ef3951fb86a9caa2840f3d731797fdbb3577f..93dcdeb41607c332bef72f8af48d3447a7123500 100644
--- a/entity/AttributeUsage_entity/entityfields/min_count/displayValueProcess.js
+++ b/entity/AttributeUsage_entity/entityfields/min_count/displayValueProcess.js
@@ -2,5 +2,5 @@ import("system.translate");
 import("system.result");
 import("system.vars");
 
-var minCount = vars.get("$this.value");
+var minCount = vars.get("$field.MIN_COUNT");
 result.string(minCount != 0 ? translate.text("Minimal") + " " + minCount : "");
\ No newline at end of file
diff --git a/entity/AttributeUsage_entity/entityfields/min_count/onValidation.js b/entity/AttributeUsage_entity/entityfields/min_count/onValidation.js
index 2f28221a1b6275fe7bf3dc84a2fe25b49f54f1c7..2536dedb73b98b6155d33b75f36cc5df94bc0b63 100644
--- a/entity/AttributeUsage_entity/entityfields/min_count/onValidation.js
+++ b/entity/AttributeUsage_entity/entityfields/min_count/onValidation.js
@@ -3,7 +3,7 @@ import("system.vars");
 import("system.translate");
 import("Entity_lib");
 
-var minCount = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.MIN_COUNT"));
+var minCount = vars.get("local.value");
 
 if (minCount)
 {
diff --git a/entity/Attribute_entity/entityfields/attribute_parent_id/valueProcess.js b/entity/Attribute_entity/entityfields/attribute_parent_id/valueProcess.js
index 640e5c1e11de0afafb7076b438e0532b6f1ea64c..cada69ce4bb12fb1c3f603cdb78d2e532ada95aa 100644
--- a/entity/Attribute_entity/entityfields/attribute_parent_id/valueProcess.js
+++ b/entity/Attribute_entity/entityfields/attribute_parent_id/valueProcess.js
@@ -1,6 +1,6 @@
-import("system.neon");
-import("system.result");
-import("system.vars");
-
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.AttrParentId_param") && vars.get("$param.AttrParentId_param") && !vars.get("$this.value"))
+import("system.neon");
+import("system.result");
+import("system.vars");
+
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$param.AttrParentId_param") && vars.get("$this.value") == null)
     result.string(vars.get("$param.AttrParentId_param"));
\ No newline at end of file
diff --git a/entity/Attribute_entity/entityfields/attribute_type/onValueChange.js b/entity/Attribute_entity/entityfields/attribute_type/onValueChange.js
index 680e7f2e1063cd169abc39d20c8f69490eace3f4..278f8b879ba6692db695c4a0c2122a6396042227 100644
--- a/entity/Attribute_entity/entityfields/attribute_type/onValueChange.js
+++ b/entity/Attribute_entity/entityfields/attribute_type/onValueChange.js
@@ -3,6 +3,6 @@ import("system.vars");
 import("Attribute_lib");
 import("Entity_lib");
 
-var type = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.ATTRIBUTE_TYPE")) || "";
+var type = vars.get("local.value") || "";
 if (type.trim() != $AttributeTypes.KEYWORD && vars.get("$field.DROPDOWNDEFINITION"))
     neon.setFieldValue("$field.DROPDOWNDEFINITION", "");
\ No newline at end of file
diff --git a/entity/BulkMailRecipient_entity/entityfields/contact_id/onValidation.js b/entity/BulkMailRecipient_entity/entityfields/contact_id/onValidation.js
index daf048a226388656f81bfd8e002d9ff6ec83dfa4..04a7f4500024b4df8a6ef0324ee20a4ae4bf0ad4 100644
--- a/entity/BulkMailRecipient_entity/entityfields/contact_id/onValidation.js
+++ b/entity/BulkMailRecipient_entity/entityfields/contact_id/onValidation.js
@@ -6,7 +6,7 @@ import("system.result");
 import("KeywordRegistry_basic");
 import("Entity_lib");
 
-var contactId = ProcessHandlingUtils.getOnValidationValue();
+var contactId = vars.get("local.value");
 if (BulkMailUtils.isRecipient(vars.get("$field.BULKMAIL_ID"), contactId))
     result.string(translate.text("The contact is already a recipient!"));
 else if (ContactUtils.hasCommRestriction(contactId, $KeywordRegistry.communicationMediumCampaign$mail()))
diff --git a/entity/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod
index eed32e047eeee11830af5758f92e36931aa249c1..650f4c8e4d069bb6dacebfa14a434e26254513e4 100644
--- a/entity/BulkMail_entity/BulkMail_entity.aod
+++ b/entity/BulkMail_entity/BulkMail_entity.aod
@@ -1,222 +1,216 @@
-<?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.10" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.10">
-  <name>BulkMail_entity</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <icon>VAADIN:AT</icon>
-  <title>Bulk mail</title>
-  <contentTitleProcess>%aditoprj%/entity/BulkMail_entity/contentTitleProcess.js</contentTitleProcess>
-  <titlePlural>Bulk mails</titlePlural>
-  <recordContainer>db</recordContainer>
-  <entityFields>
-    <entityProvider>
-      <name>#PROVIDER</name>
-      <dependencies>
-        <entityDependency>
-          <name>88f8ded7-fe8f-41ef-8e01-030bae0867ee</name>
-          <entityName>BulkMailAddRecipients_entity</entityName>
-          <fieldName>BulkMails</fieldName>
-          <isConsumer v="false" />
-        </entityDependency>
-      </dependencies>
-    </entityProvider>
-    <entityField>
-      <name>BULKMAILID</name>
-    </entityField>
-    <entityField>
-      <name>NAME</name>
-      <title>Name</title>
-      <mandatory v="true" />
-    </entityField>
-    <entityField>
-      <name>SUBJECT</name>
-      <title>Subject</title>
-    </entityField>
-    <entityField>
-      <name>DESCRIPTION</name>
-      <title>Description</title>
-    </entityField>
-    <entityField>
-      <name>DOCUMENTTEMPLATE_ID</name>
-      <title>Document Template</title>
-      <consumer>Templates</consumer>
-      <mandatory v="false" />
-      <onValueChange>%aditoprj%/entity/BulkMail_entity/entityfields/documenttemplate_id/onValueChange.js</onValueChange>
-    </entityField>
-    <entityConsumer>
-      <name>Recipients</name>
-      <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>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>DocumentTemplateType_param</name>
-          <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/templates/children/documenttemplatetype_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>DocumentTemplateTypeClassification_param</name>
-          <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/templates/children/documenttemplatetypeclassification_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
-    <entityField>
-      <name>STATUS</name>
-      <title>Status</title>
-      <consumer>StatusKeyword</consumer>
-      <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/status/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/status/displayValueProcess.js</displayValueProcess>
-    </entityField>
-    <entityField>
-      <name>SENDER</name>
-      <title>Sender address</title>
-      <mandatory v="true" />
-      <onValidation>%aditoprj%/entity/BulkMail_entity/entityfields/sender/onValidation.js</onValidation>
-    </entityField>
-    <entityActionField>
-      <name>sendMail</name>
-      <title>Send</title>
-      <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/sendmail/onActionProcess.js</onActionProcess>
-      <iconId>VAADIN:PAPERPLANE</iconId>
-      <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/sendmail/stateProcess.js</stateProcess>
-    </entityActionField>
-    <entityField>
-      <name>ICON</name>
-      <contentType>IMAGE</contentType>
-      <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/icon/valueProcess.js</valueProcess>
-    </entityField>
-    <entityField>
-      <name>preview</name>
-      <contentType>HTML</contentType>
-      <displayValueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/preview/displayValueProcess.js</displayValueProcess>
-    </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>
-    </entityConsumer>
-    <entityField>
-      <name>BINDATA</name>
-      <contentType>FILE</contentType>
-      <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/bindata/stateProcess.js</stateProcess>
-    </entityField>
-    <entityFieldGroup>
-      <name>subjectPreview</name>
-      <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/subjectpreview/valueProcess.js</valueProcess>
-      <fields>
-        <element>SUBJECT</element>
-      </fields>
-    </entityFieldGroup>
-    <entityActionField>
-      <name>openAdminView</name>
-      <title>Open admin view</title>
-      <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/openadminview/onActionProcess.js</onActionProcess>
-      <iconId>VAADIN:CURLY_BRACKETS</iconId>
-      <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/openadminview/stateProcess.js</stateProcess>
-    </entityActionField>
-    <entityParameter>
-      <name>PresetRecipients_param</name>
-      <expose v="true" />
-    </entityParameter>
-    <entityField>
-      <name>content</name>
-      <title>Content</title>
-      <contentType>HTML</contentType>
-      <contentTypeProcess>%aditoprj%/entity/BulkMail_entity/entityfields/content/contentTypeProcess.js</contentTypeProcess>
-      <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/content/stateProcess.js</stateProcess>
-      <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/content/valueProcess.js</valueProcess>
-    </entityField>
-  </entityFields>
-  <recordContainers>
-    <dbRecordContainer>
-      <name>db</name>
-      <alias>Data_alias</alias>
-      <fromClauseProcess>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
-      <onDBInsert>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/onDBInsert.js</onDBInsert>
-      <onDBUpdate>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/onDBUpdate.js</onDBUpdate>
-      <onDBDelete>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/onDBDelete.js</onDBDelete>
-      <linkInformation>
-        <linkInformation>
-          <name>6444866d-42ee-4b7b-8536-6dc8f6437c45</name>
-          <tableName>BULKMAIL</tableName>
-          <primaryKey>BULKMAILID</primaryKey>
-          <isUIDTable v="true" />
-          <readonly v="false" />
-        </linkInformation>
-        <linkInformation>
-          <name>914d6373-4409-44e5-882a-3f795b196d7b</name>
-          <tableName>DOCUMENTTEMPLATE</tableName>
-          <primaryKey>DOCUMENTTEMPLATEID</primaryKey>
-          <isUIDTable v="false" />
-          <readonly v="true" />
-        </linkInformation>
-      </linkInformation>
-      <recordFieldMappings>
-        <dbRecordFieldMapping>
-          <name>BULKMAILID.value</name>
-          <recordfield>BULKMAIL.BULKMAILID</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>DESCRIPTION.value</name>
-          <recordfield>BULKMAIL.DESCRIPTION</recordfield>
-          <isFilterable v="true" />
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>DOCUMENTTEMPLATE_ID.value</name>
-          <recordfield>BULKMAIL.DOCUMENTTEMPLATE_ID</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>NAME.value</name>
-          <recordfield>BULKMAIL.NAME</recordfield>
-          <isFilterable v="true" />
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>SUBJECT.value</name>
-          <recordfield>BULKMAIL.SUBJECT</recordfield>
-          <isFilterable v="true" />
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>SENDER.value</name>
-          <recordfield>BULKMAIL.SENDER</recordfield>
-          <isFilterable v="true" />
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>DOCUMENTTEMPLATE_ID.displayValue</name>
-          <recordfield>DOCUMENTTEMPLATE.NAME</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>STATUS.value</name>
-          <recordfield>BULKMAIL.STATUS</recordfield>
-          <isFilterable v="true" />
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>STATUS.displayValue</name>
-          <expression>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression>
-        </dbRecordFieldMapping>
-      </recordFieldMappings>
-    </dbRecordContainer>
-  </recordContainers>
-</entity>
+<?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.10" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.10">
+  <name>BulkMail_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <icon>VAADIN:AT</icon>
+  <title>Bulk mail</title>
+  <contentTitleProcess>%aditoprj%/entity/BulkMail_entity/contentTitleProcess.js</contentTitleProcess>
+  <titlePlural>Bulk mails</titlePlural>
+  <recordContainer>db</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+      <dependencies>
+        <entityDependency>
+          <name>88f8ded7-fe8f-41ef-8e01-030bae0867ee</name>
+          <entityName>BulkMailAddRecipients_entity</entityName>
+          <fieldName>BulkMails</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityField>
+      <name>BULKMAILID</name>
+    </entityField>
+    <entityField>
+      <name>NAME</name>
+      <title>Name</title>
+      <mandatory v="true" />
+    </entityField>
+    <entityField>
+      <name>SUBJECT</name>
+      <title>Subject</title>
+    </entityField>
+    <entityField>
+      <name>DESCRIPTION</name>
+      <title>Description</title>
+    </entityField>
+    <entityField>
+      <name>DOCUMENTTEMPLATE_ID</name>
+      <title>Document Template</title>
+      <consumer>Templates</consumer>
+      <mandatory v="false" />
+      <onValueChange>%aditoprj%/entity/BulkMail_entity/entityfields/documenttemplate_id/onValueChange.js</onValueChange>
+    </entityField>
+    <entityConsumer>
+      <name>Recipients</name>
+      <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>
+      </dependency>
+      <children>
+        <entityParameter>
+          <name>DocumentTemplateType_param</name>
+          <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/templates/children/documenttemplatetype_param/valueProcess.js</valueProcess>
+        </entityParameter>
+        <entityParameter>
+          <name>DocumentTemplateTypeClassification_param</name>
+          <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/templates/children/documenttemplatetypeclassification_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
+    </entityConsumer>
+    <entityField>
+      <name>STATUS</name>
+      <title>Status</title>
+      <consumer>StatusKeyword</consumer>
+      <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/status/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/status/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityField>
+      <name>SENDER</name>
+      <title>Sender address</title>
+      <mandatory v="true" />
+      <onValidation>%aditoprj%/entity/BulkMail_entity/entityfields/sender/onValidation.js</onValidation>
+    </entityField>
+    <entityActionField>
+      <name>sendMail</name>
+      <title>Send</title>
+      <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/sendmail/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:PAPERPLANE</iconId>
+      <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/sendmail/stateProcess.js</stateProcess>
+    </entityActionField>
+    <entityField>
+      <name>ICON</name>
+      <contentType>IMAGE</contentType>
+      <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/icon/valueProcess.js</valueProcess>
+    </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>
+    </entityConsumer>
+    <entityField>
+      <name>BINDATA</name>
+      <contentType>FILE</contentType>
+      <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/bindata/stateProcess.js</stateProcess>
+    </entityField>
+    <entityFieldGroup>
+      <name>subjectPreview</name>
+      <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/subjectpreview/valueProcess.js</valueProcess>
+      <fields>
+        <element>SUBJECT</element>
+      </fields>
+    </entityFieldGroup>
+    <entityActionField>
+      <name>openAdminView</name>
+      <title>Open admin view</title>
+      <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/openadminview/onActionProcess.js</onActionProcess>
+      <iconId>VAADIN:CURLY_BRACKETS</iconId>
+      <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/openadminview/stateProcess.js</stateProcess>
+    </entityActionField>
+    <entityParameter>
+      <name>PresetRecipients_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityField>
+      <name>content</name>
+      <title>Content</title>
+      <contentTypeProcess>%aditoprj%/entity/BulkMail_entity/entityfields/content/contentTypeProcess.js</contentTypeProcess>
+      <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/content/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/content/displayValueProcess.js</displayValueProcess>
+    </entityField>
+  </entityFields>
+  <recordContainers>
+    <dbRecordContainer>
+      <name>db</name>
+      <alias>Data_alias</alias>
+      <fromClauseProcess>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
+      <onDBInsert>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/onDBInsert.js</onDBInsert>
+      <onDBUpdate>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/onDBUpdate.js</onDBUpdate>
+      <onDBDelete>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/onDBDelete.js</onDBDelete>
+      <linkInformation>
+        <linkInformation>
+          <name>6444866d-42ee-4b7b-8536-6dc8f6437c45</name>
+          <tableName>BULKMAIL</tableName>
+          <primaryKey>BULKMAILID</primaryKey>
+          <isUIDTable v="true" />
+          <readonly v="false" />
+        </linkInformation>
+        <linkInformation>
+          <name>914d6373-4409-44e5-882a-3f795b196d7b</name>
+          <tableName>DOCUMENTTEMPLATE</tableName>
+          <primaryKey>DOCUMENTTEMPLATEID</primaryKey>
+          <isUIDTable v="false" />
+          <readonly v="true" />
+        </linkInformation>
+      </linkInformation>
+      <recordFieldMappings>
+        <dbRecordFieldMapping>
+          <name>BULKMAILID.value</name>
+          <recordfield>BULKMAIL.BULKMAILID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DESCRIPTION.value</name>
+          <recordfield>BULKMAIL.DESCRIPTION</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DOCUMENTTEMPLATE_ID.value</name>
+          <recordfield>BULKMAIL.DOCUMENTTEMPLATE_ID</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>NAME.value</name>
+          <recordfield>BULKMAIL.NAME</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>SUBJECT.value</name>
+          <recordfield>BULKMAIL.SUBJECT</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>SENDER.value</name>
+          <recordfield>BULKMAIL.SENDER</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>DOCUMENTTEMPLATE_ID.displayValue</name>
+          <recordfield>DOCUMENTTEMPLATE.NAME</recordfield>
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STATUS.value</name>
+          <recordfield>BULKMAIL.STATUS</recordfield>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STATUS.displayValue</name>
+          <expression>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression>
+        </dbRecordFieldMapping>
+      </recordFieldMappings>
+    </dbRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/BulkMail_entity/entityfields/content/contentTypeProcess.js b/entity/BulkMail_entity/entityfields/content/contentTypeProcess.js
index e7996a89667933fc400f3fe807ef1a03e8b71f57..af9657e3dd0e8e678b257e83dd8f9c5955e21e3f 100644
--- a/entity/BulkMail_entity/entityfields/content/contentTypeProcess.js
+++ b/entity/BulkMail_entity/entityfields/content/contentTypeProcess.js
@@ -1,15 +1,28 @@
+import("Bulkmail_lib");
 import("system.result");
 import("Document_lib");
 import("system.vars");
+import("DocumentTemplate_lib");
 
 var upload = vars.get("$field.BINDATA");
-var filename = DocumentUtil.getFilenameFromUpload(upload);
-var type = DocumentUtil.getFileExtensionFromUpload(filename);
-result.string(
-    ({
+var contentType, type, filename, template;
+if (upload)
+{
+    filename = DocumentUtil.getFilenameFromUpload(upload);
+    type = DocumentUtil.getFileExtensionFromUpload(filename);
+    contentType = ({
         "txt" : "LONG_TEXT",
         "html" : "HTML",
         "htm" : "HTML",
         "eml" : "HTML"
-    })[type] || "LONG_TEXT"
-);
\ No newline at end of file
+    })[type] || "LONG_TEXT";
+}
+else
+{
+    template = BulkMailUtils.getBulkMailTemplate(vars.get("$field.BULKMAILID"), vars.get("$field.DOCUMENTTEMPLATE_ID"));
+    type = template.type;
+    contentType = type == DocumentTemplate.types.HTML || type == DocumentTemplate.types.EML
+        ? "HTML" 
+        : "LONG_TEXT";
+}
+result.string(contentType);
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/preview/displayValueProcess.js b/entity/BulkMail_entity/entityfields/content/displayValueProcess.js
similarity index 97%
rename from entity/BulkMail_entity/entityfields/preview/displayValueProcess.js
rename to entity/BulkMail_entity/entityfields/content/displayValueProcess.js
index 2befdfd6ae93c13f5766876054b51e28c7c606c6..d676eae7a0822b5beea69cae722adc4b4cd7c67e 100644
--- a/entity/BulkMail_entity/entityfields/preview/displayValueProcess.js
+++ b/entity/BulkMail_entity/entityfields/content/displayValueProcess.js
@@ -1,19 +1,19 @@
-import("Bulkmail_lib");
-import("system.text");
-import("Employee_lib");
-import("system.vars");
-import("system.result");
-import("system.neon");
-import("DocumentTemplate_lib");
-
-//if this was done for every row, like in a lookup, the performance would be very bad
-if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_MASK) 
-{
-    var template = BulkMailUtils.getBulkMailTemplate(vars.get("$field.BULKMAILID"), vars.get("$field.DOCUMENTTEMPLATE_ID"));
-    
-    var contactId = EmployeeUtils.getCurrentContactId();
-    var preview = template.getReplacedEmailsByContactIds([contactId]);
-
-    result.string(preview[contactId].body);
-}
-
+import("Bulkmail_lib");
+import("system.text");
+import("Employee_lib");
+import("system.vars");
+import("system.result");
+import("system.neon");
+import("DocumentTemplate_lib");
+
+//if this was done for every row, like in a lookup, the performance would be very bad
+if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_MASK) 
+{
+    var template = BulkMailUtils.getBulkMailTemplate(vars.get("$field.BULKMAILID"), vars.get("$field.DOCUMENTTEMPLATE_ID"));
+    
+    var contactId = EmployeeUtils.getCurrentContactId();
+    var preview = template.getReplacedEmailsByContactIds([contactId]);
+
+    result.string(preview[contactId].body);
+}
+
diff --git a/entity/BulkMail_entity/entityfields/content/stateProcess.js b/entity/BulkMail_entity/entityfields/content/stateProcess.js
deleted file mode 100644
index 3556de9c2f8a50d3a7d0eaee2900e769c1eb2a9c..0000000000000000000000000000000000000000
--- a/entity/BulkMail_entity/entityfields/content/stateProcess.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import("system.result");
-import("system.neon");
-import("system.vars");
-
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-    result.string(neon.COMPONENTSTATE_EDITABLE);
-else
-    result.string(neon.COMPONENTSTATE_INVISIBLE);
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/content/valueProcess.js b/entity/BulkMail_entity/entityfields/content/valueProcess.js
index 7b157c6cc8c6ee66d4083c68bee963b411b2748e..7abb9759cf4b8f7cfc718bdc8b234d2f526c63ea 100644
--- a/entity/BulkMail_entity/entityfields/content/valueProcess.js
+++ b/entity/BulkMail_entity/entityfields/content/valueProcess.js
@@ -1,24 +1,28 @@
-import("Document_lib");
-import("system.util");
-import("system.result");
-import("system.vars");
-import("system.db");
-import("DocumentTemplate_lib");
-
-if (vars.get("$this.value") == null)
-{
-    var upload = vars.get("$field.BINDATA");
-    var binData = DocumentUtil.getBindataFromUpload(upload);
-    var filename = DocumentUtil.getFilenameFromUpload(upload);
-    var type = DocumentUtil.getFileExtensionFromUpload(filename);
-    type = ({
-        "txt" : DocumentTemplate.types.TXT,
-        "html" : DocumentTemplate.types.HTML,
-        "htm" : DocumentTemplate.types.HTML,
-        "eml" : DocumentTemplate.types.EML
-    })[type];
-    var template = new DocumentTemplate(binData, type);
-    var content = template.getReplacedContent({}, true);
-
-    result.string(content);
-}
+import("system.neon");
+import("Document_lib");
+import("system.util");
+import("system.result");
+import("system.vars");
+import("system.db");
+import("DocumentTemplate_lib");
+import("Bulkmail_lib");
+
+if (vars.get("$this.value") == null)
+{
+    var upload = vars.get("$field.BINDATA");
+    var template;
+    if (upload)
+    {
+        var binData = DocumentUtil.getBindataFromUpload(upload);
+        var filename = DocumentUtil.getFilenameFromUpload(upload);
+        var type = DocumentUtil.getFileExtensionFromUpload(filename);
+        template = new DocumentTemplate(binData, DocumentTemplate.types.fromFileExtension(type));
+    }
+    else
+    {
+        template = BulkMailUtils.getBulkMailTemplate(vars.get("$field.BULKMAILID"), vars.get("$field.DOCUMENTTEMPLATE_ID"));
+    }
+    var content = template.getReplacedContent({}, true);
+
+    result.string(content);
+}
\ 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 6d1fe433a0ad7b27289c152edd86ce47b2c096f7..c2d0c4e5323ea1219d1f6f0085a624f996609e54 100644
--- a/entity/BulkMail_entity/entityfields/documenttemplate_id/onValueChange.js
+++ b/entity/BulkMail_entity/entityfields/documenttemplate_id/onValueChange.js
@@ -7,7 +7,7 @@ import("Entity_lib");
 
 if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
 {
-    var templateId = ProcessHandlingUtils.getOnValidationValue();
+    var templateId = vars.get("local.value");
     var template = DocumentTemplate.loadTemplate(templateId);
     if (template.type == DocumentTemplate.types.EML)
     {
diff --git a/entity/BulkMail_entity/entityfields/sender/onValidation.js b/entity/BulkMail_entity/entityfields/sender/onValidation.js
index a07daba57f94e4328ff3907479205d93e38a93db..429ec70614bd74bcba194b44a61640f3b7a2e779 100644
--- a/entity/BulkMail_entity/entityfields/sender/onValidation.js
+++ b/entity/BulkMail_entity/entityfields/sender/onValidation.js
@@ -1,11 +1,11 @@
-import("system.result");
-import("Communication_lib");
-import("Entity_lib");
-
-var message;
-var sender = ProcessHandlingUtils.getOnValidationValue();
-var fn = CommValidationUtil.makeValidationFn("EMAIL");
-if (fn !== null)
-    message = fn.call(null, sender);
-if (message)
+import("system.result");
+import("Communication_lib");
+import("Entity_lib");
+
+var message;
+var sender = vars.get("local.value");
+var fn = CommValidationUtil.makeValidationFn("EMAIL");
+if (fn !== null)
+    message = fn.call(null, sender);
+if (message)
     result.string(message);
\ No newline at end of file
diff --git a/entity/BulkMail_entity/entityfields/status/displayValueProcess.js b/entity/BulkMail_entity/entityfields/status/displayValueProcess.js
index 0dd6bd59e0bb7db1bba471167d20ae5a41cb8423..e134a0c97aea832acd32fe66be3806770b33d1c7 100644
--- a/entity/BulkMail_entity/entityfields/status/displayValueProcess.js
+++ b/entity/BulkMail_entity/entityfields/status/displayValueProcess.js
@@ -3,4 +3,4 @@ import("KeywordRegistry_basic");
 import("system.result");
 import("Keyword_lib");
 
-result.string(KeywordUtils.getViewValue($KeywordRegistry.bulkMailStatus(), vars.get("$this.value")));
\ No newline at end of file
+result.string(KeywordUtils.getViewValue($KeywordRegistry.bulkMailStatus(), vars.get("$field.STATUS")));
\ No newline at end of file
diff --git a/entity/BulkMail_entity/recordcontainers/db/onDBInsert.js b/entity/BulkMail_entity/recordcontainers/db/onDBInsert.js
index 1a0d7b3b5e8ed56dc8088006903a9851f1bbef62..dd2d0ecc46f46ab5786a9679f05a1c8d9ef54fa8 100644
--- a/entity/BulkMail_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/BulkMail_entity/recordcontainers/db/onDBInsert.js
@@ -1,3 +1,4 @@
+import("DocumentTemplate_lib");
 import("system.result");
 import("system.vars");
 import("system.db");
@@ -9,13 +10,26 @@ import("Bulkmail_lib");
 
 var content = vars.get("$field.content");
 var originalBinData = vars.get("$field.BINDATA");
-var filename;
+var filename, type, template;
 
 if(vars.get("$field.BINDATA"))
+{
     filename = DocumentUtil.getFilenameFromUpload(vars.get("$field.BINDATA"));
+    type = DocumentUtil.getFileExtensionFromUpload(filename);
+    type = ({
+            "txt" : DocumentTemplate.types.TXT,
+            "html" : DocumentTemplate.types.HTML,
+            "htm" : DocumentTemplate.types.HTML,
+            "eml" : DocumentTemplate.types.EML
+        })[type];
+}
+else
+{
+    template = DocumentTemplate.loadTemplate(vars.get("$field.DOCUMENTTEMPLATE_ID"));
+    type = template.type;
+}
 
-var type = DocumentUtil.getFileExtensionFromUpload(filename);
-if (type == "html" || type == "eml")
+if (type == DocumentTemplate.types.EML || type == DocumentTemplate.types.HTML)
     content = "<html>" + content + "</html>";
 
 var bindata = util.encodeBase64String(content);
diff --git a/entity/BulkMail_entity/recordcontainers/db/onDBUpdate.js b/entity/BulkMail_entity/recordcontainers/db/onDBUpdate.js
index 4b8b28c49a9c31968b3cc5b34883d746bdc50193..345ac72193ed9867d666b67ab0b1106d78408aa2 100644
--- a/entity/BulkMail_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/BulkMail_entity/recordcontainers/db/onDBUpdate.js
@@ -1,28 +1,44 @@
-import("Sql_lib");
-import("system.result");
-import("system.vars");
-import("system.db");
-import("system.util");
-import("Document_lib");
-
-//TODO - Function
-
-var upload = vars.get("$field.BINDATA");
-var bindataUpload = DocumentUtil.getBindataFromUpload(upload);
-var filename = "";
-var bindata = "";
-
-if(bindataUpload != "")
-{
-    filename = DocumentUtil.getFilenameFromUpload(upload);
-    bindata  = bindataUpload;
-}
-
-if(bindata != "" && filename != "")
-{
-    let sysAlias = "_____SYSTEMALIAS";
-    var binaryId = db.cell(SqlCondition.begin(sysAlias)
-        .andPrepareVars("ASYS_BINARIES.ROW_ID", "$field.BULKMAILID")
-        .buildSql("select ID from ASYS_BINARIES", "1=2"), sysAlias);
-    db.updateBinary(binaryId, "", bindata, filename, "", "", sysAlias);
-}
\ No newline at end of file
+import("system.neon");
+import("Sql_lib");
+import("DocumentTemplate_lib");
+import("system.result");
+import("system.vars");
+import("system.db");
+import("system.util");
+import("Document_lib");
+import("Bulkmail_lib");
+
+//TODO - Function
+
+var content = vars.get("$field.content");
+var originalBinData = vars.get("$field.BINDATA");
+var filename, type, template;
+
+if(vars.get("$field.BINDATA"))
+{
+    filename = DocumentUtil.getFilenameFromUpload(vars.get("$field.BINDATA"));
+    type = DocumentUtil.getFileExtensionFromUpload(filename);
+    type = DocumentTemplate.types.fromFileExtension(type);
+}
+else
+{
+    template = BulkMailUtils.getBulkMailTemplate(vars.get("$field.BULKMAILID"), vars.get("$field.DOCUMENTTEMPLATE_ID"));
+    type = template.type;
+}
+
+if (type == DocumentTemplate.types.EML || type == DocumentTemplate.types.HTML)
+    content = "<html>" + content + "</html>";
+
+var bindata = util.encodeBase64String(content);
+if (!filename)
+    filename = vars.get("$field.NAME") + ".txt";
+
+if(bindata != "")
+{
+    let sysAlias = "_____SYSTEMALIAS";
+    var binaryId = db.cell(SqlCondition.begin(sysAlias)
+        .andPrepareVars("ASYS_BINARIES.ROW_ID", "$field.BULKMAILID")
+        .buildSql("select ID from ASYS_BINARIES", "1=2"), sysAlias);
+    db.updateBinary(binaryId, "", bindata, filename, "", "", sysAlias);
+    neon.refresh(["$field.content"]);
+}
diff --git a/entity/CampaignCost_entitiy/CampaignCost_entitiy.aod b/entity/CampaignCost_entitiy/CampaignCost_entitiy.aod
deleted file mode 100644
index 08401d57a8c587f818a90a58309df3ddcccc9a55..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/CampaignCost_entitiy.aod
+++ /dev/null
@@ -1,299 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.10" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.10">
-  <name>CampaignCost_entitiy</name>
-  <majorModelMode>DISTRIBUTED</majorModelMode>
-  <afterOperatingState>%aditoprj%/entity/CampaignCost_entitiy/afterOperatingState.js</afterOperatingState>
-  <recordContainer>db</recordContainer>
-  <entityFields>
-    <entityProvider>
-      <name>#PROVIDER</name>
-    </entityProvider>
-    <entityField>
-      <name>CAMPAIGNCOSTID</name>
-      <mandatory v="true" />
-      <valueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/campaigncostid/valueProcess.js</valueProcess>
-    </entityField>
-    <entityField>
-      <name>CAMPAIGN_ID</name>
-      <title>Campaign</title>
-      <consumer>Campaigns</consumer>
-      <groupable v="true" />
-      <mandatory v="true" />
-      <valueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/campaign_id/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/campaign_id/displayValueProcess.js</displayValueProcess>
-    </entityField>
-    <entityField>
-      <name>CAMPAIGNSTEP_ID</name>
-      <title>Campaign Step</title>
-      <consumer>CampaignSteps</consumer>
-      <groupable v="true" />
-      <mandatoryProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/campaignstep_id/mandatoryProcess.js</mandatoryProcess>
-      <stateProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/campaignstep_id/stateProcess.js</stateProcess>
-      <valueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/campaignstep_id/valueProcess.js</valueProcess>
-      <displayValueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/campaignstep_id/displayValueProcess.js</displayValueProcess>
-      <onValueChange>%aditoprj%/entity/CampaignCost_entitiy/entityfields/campaignstep_id/onValueChange.js</onValueChange>
-      <onValueChangeTypes>
-        <element>MASK</element>
-      </onValueChangeTypes>
-    </entityField>
-    <entityField>
-      <name>CATEGORY</name>
-      <title>Category</title>
-      <consumer>KeywordCampaignManagementCostCategory</consumer>
-      <groupable v="true" />
-      <mandatory v="true" />
-      <displayValueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/category/displayValueProcess.js</displayValueProcess>
-    </entityField>
-    <entityField>
-      <name>NET</name>
-      <title>Cost</title>
-      <contentType>NUMBER</contentType>
-      <outputFormat>#,##0.00</outputFormat>
-      <inputFormat>#,##0.00</inputFormat>
-      <mandatory v="true" />
-    </entityField>
-    <entityField>
-      <name>USER_NEW</name>
-      <mandatory v="true" />
-      <valueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/user_new/valueProcess.js</valueProcess>
-    </entityField>
-    <entityField>
-      <name>DATE_NEW</name>
-      <mandatory v="true" />
-      <valueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/date_new/valueProcess.js</valueProcess>
-    </entityField>
-    <entityField>
-      <name>USER_EDIT</name>
-      <valueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/user_edit/valueProcess.js</valueProcess>
-    </entityField>
-    <entityField>
-      <name>DATE_EDIT</name>
-      <valueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/date_edit/valueProcess.js</valueProcess>
-    </entityField>
-    <entityProvider>
-      <name>CampaignCosts</name>
-      <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>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>Uid_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>CampaignId_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>CampaignSteps_param</name>
-          <valueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/campaigncosts/children/campaignsteps_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-        </entityParameter>
-      </children>
-    </entityProvider>
-    <entityProvider>
-      <name>StepCosts</name>
-      <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>
-      <children>
-        <entityParameter>
-          <name>CampaignStepId_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>Uid_param</name>
-          <expose v="false" />
-        </entityParameter>
-        <entityParameter>
-          <name>CampaignId_param</name>
-          <expose v="true" />
-        </entityParameter>
-        <entityParameter>
-          <name>CampaignSteps_param</name>
-          <valueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/stepcosts/children/campaignsteps_param/valueProcess.js</valueProcess>
-          <expose v="false" />
-        </entityParameter>
-      </children>
-    </entityProvider>
-    <entityConsumer>
-      <name>Campaigns</name>
-      <dependency>
-        <name>dependency</name>
-        <entityName>Campaign_entity</entityName>
-        <fieldName>Campaigns</fieldName>
-      </dependency>
-    </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_entitiy/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>
-      </dependency>
-      <children>
-        <entityParameter>
-          <name>ContainerName_param</name>
-          <valueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/keywordcampaignmanagementcostcategory/children/containername_param/valueProcess.js</valueProcess>
-        </entityParameter>
-        <entityParameter>
-          <name>ExcludedKeyIdsSubquery_param</name>
-          <valueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js</valueProcess>
-        </entityParameter>
-      </children>
-    </entityConsumer>
-    <entityActionGroup>
-      <name>alter</name>
-      <children>
-        <entityActionField>
-          <name>edit</name>
-          <onActionProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/alter/children/edit/onActionProcess.js</onActionProcess>
-          <isSelectionAction v="true" />
-          <iconId>NEON:PENCIL</iconId>
-        </entityActionField>
-      </children>
-    </entityActionGroup>
-    <entityParameter>
-      <name>CampaignId_param</name>
-      <expose v="true" />
-      <mandatory v="true" />
-      <description>PARAMETER</description>
-    </entityParameter>
-    <entityParameter>
-      <name>CampaignStepId_param</name>
-      <expose v="true" />
-      <description>PARAMETER</description>
-    </entityParameter>
-    <entityParameter>
-      <name>Uid_param</name>
-      <expose v="true" />
-      <description>PARAMETER</description>
-    </entityParameter>
-    <entityField>
-      <name>netPerParticipant</name>
-      <contentType>NUMBER</contentType>
-      <outputFormat>#,##0.00</outputFormat>
-      <inputFormat>#,##0.00</inputFormat>
-      <state>READONLY</state>
-      <titleProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/netperparticipant/titleProcess.js</titleProcess>
-      <valueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/netperparticipant/valueProcess.js</valueProcess>
-    </entityField>
-    <entityField>
-      <name>countParticipants</name>
-      <title>Participants</title>
-      <contentType>NUMBER</contentType>
-      <outputFormat>#0</outputFormat>
-      <inputFormat>#0</inputFormat>
-      <state>READONLY</state>
-      <valueProcess>%aditoprj%/entity/CampaignCost_entitiy/entityfields/countparticipants/valueProcess.js</valueProcess>
-    </entityField>
-    <entityParameter>
-      <name>CampaignSteps_param</name>
-      <title></title>
-      <expose v="true" />
-      <documentation>%aditoprj%/entity/CampaignCost_entitiy/entityfields/campaignsteps_param/documentation.adoc</documentation>
-      <description>PARAMETER</description>
-    </entityParameter>
-  </entityFields>
-  <recordContainers>
-    <dbRecordContainer>
-      <name>db</name>
-      <alias>Data_alias</alias>
-      <fromClauseProcess>%aditoprj%/entity/CampaignCost_entitiy/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
-      <conditionProcess>%aditoprj%/entity/CampaignCost_entitiy/recordcontainers/db/conditionProcess.js</conditionProcess>
-      <orderClauseProcess>%aditoprj%/entity/CampaignCost_entitiy/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
-      <linkInformation>
-        <linkInformation>
-          <name>70c2db20-0695-4189-92cb-7da585bff401</name>
-          <tableName>CAMPAIGNCOST</tableName>
-          <primaryKey>CAMPAIGNCOSTID</primaryKey>
-          <isUIDTable v="true" />
-          <readonly v="false" />
-        </linkInformation>
-        <linkInformation>
-          <name>b97b7f67-86ea-4d0a-8303-abc05863ed66</name>
-          <tableName>CAMPAIGNSTEP</tableName>
-          <primaryKey>CAMPAIGNSTEPID</primaryKey>
-          <isUIDTable v="false" />
-          <readonly v="true" />
-        </linkInformation>
-      </linkInformation>
-      <recordFieldMappings>
-        <dbRecordFieldMapping>
-          <name>CAMPAIGN_ID.value</name>
-          <recordfield>CAMPAIGNCOST.CAMPAIGN_ID</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>CAMPAIGNCOSTID.value</name>
-          <recordfield>CAMPAIGNCOST.CAMPAIGNCOSTID</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>CAMPAIGNSTEP_ID.value</name>
-          <recordfield>CAMPAIGNCOST.CAMPAIGNSTEP_ID</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>CATEGORY.value</name>
-          <recordfield>CAMPAIGNCOST.CATEGORY</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>DATE_EDIT.value</name>
-          <recordfield>CAMPAIGNCOST.DATE_EDIT</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>DATE_NEW.value</name>
-          <recordfield>CAMPAIGNCOST.DATE_NEW</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>NET.value</name>
-          <recordfield>CAMPAIGNCOST.NET</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>USER_EDIT.value</name>
-          <recordfield>CAMPAIGNCOST.USER_EDIT</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>USER_NEW.value</name>
-          <recordfield>CAMPAIGNCOST.USER_NEW</recordfield>
-        </dbRecordFieldMapping>
-        <dbRecordFieldMapping>
-          <name>CATEGORY.displayValue</name>
-          <expression>%aditoprj%/entity/CampaignCost_entitiy/recordcontainers/db/recordfieldmappings/category.displayvalue/expression.js</expression>
-        </dbRecordFieldMapping>
-      </recordFieldMappings>
-    </dbRecordContainer>
-  </recordContainers>
-</entity>
diff --git a/entity/CampaignCost_entitiy/afterOperatingState.js b/entity/CampaignCost_entitiy/afterOperatingState.js
deleted file mode 100644
index aadf712515f2c07c00aac89451d56b6cd77bdf39..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/afterOperatingState.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import("system.neon");
-import("system.vars");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW) 
-{
-    neon.refreshAll();
-}
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/alter/children/edit/onActionProcess.js b/entity/CampaignCost_entitiy/entityfields/alter/children/edit/onActionProcess.js
deleted file mode 100644
index 5808a7a781c569c67472b7a91f7892363330b39a..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/alter/children/edit/onActionProcess.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import("system.neon");
-import("system.vars");
-
-var params = {
-    "Uid_param" : vars.get("$sys.uid")
-}
-neon.openContext("CampaignCost", "CampaignCostEdit_view", null, neon.OPERATINGSTATE_EDIT, params);
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/campaign_id/displayValueProcess.js b/entity/CampaignCost_entitiy/entityfields/campaign_id/displayValueProcess.js
deleted file mode 100644
index 2e2d6acf76ae6b1ea51cbcc77db98483695bcbf8..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/campaign_id/displayValueProcess.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import("system.result");
-import("system.db");
-import("system.vars");
-import("Campaign_lib");
-
-var campaignId = vars.get("$field.CAMPAIGN_ID");
-var campaignName = CampaignUtils.getCampaignNameById(campaignId);
-
-result.string(campaignName);
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/campaign_id/valueProcess.js b/entity/CampaignCost_entitiy/entityfields/campaign_id/valueProcess.js
deleted file mode 100644
index 4037fcb024927b70e5a6ca6f7753c70c0cea0728..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/campaign_id/valueProcess.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import("system.result");
-import("system.neon");
-import("system.vars");
-
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.CampaignId_param") && vars.get("$param.CampaignId_param"))
-{
-    result.string(vars.get("$param.CampaignId_param"));
-}
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/campaignstep_id/displayValueProcess.js b/entity/CampaignCost_entitiy/entityfields/campaignstep_id/displayValueProcess.js
deleted file mode 100644
index f05a19497e25fe0dc5771521a787dbac10fb5489..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/campaignstep_id/displayValueProcess.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import("system.neon");
-import("system.translate");
-import("system.result");
-import("system.db");
-import("system.vars");
-import("Campaign_lib");
-
-if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW)
-{
-    var campaignStepId = vars.get("$field.CAMPAIGNSTEP_ID");
-    if (campaignStepId)
-    {
-        var campaignStepName = CampaignUtils.getCampaignStepNameById(campaignStepId);
-        result.string(translate.text("Step") + ": " + campaignStepName);
-    }
-    else
-    {
-            result.string(translate.text("Fix cost"));    
-    }
-}
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/campaignstep_id/mandatoryProcess.js b/entity/CampaignCost_entitiy/entityfields/campaignstep_id/mandatoryProcess.js
deleted file mode 100644
index 32de11947a0d476bc467050c0a740461be22b2f7..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/campaignstep_id/mandatoryProcess.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import("system.result");
-import("system.neon");
-import("system.vars");
-
-result.object((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW &&
-                vars.exists("$param.CampaignSteps_param") && vars.get("$param.CampaignSteps_param") == "1" &&
-                vars.exists("$param.CampaignStepId_param") && !vars.get("$param.CampaignStepId_param")));
diff --git a/entity/CampaignCost_entitiy/entityfields/campaignstep_id/onValueChange.js b/entity/CampaignCost_entitiy/entityfields/campaignstep_id/onValueChange.js
deleted file mode 100644
index 6483cdd91c7941e5997f3405fffbddcf3893f23a..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/campaignstep_id/onValueChange.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import("system.neon");
-
-neon.setFieldValue("$field.CATEGORY", "");
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/campaignstep_id/stateProcess.js b/entity/CampaignCost_entitiy/entityfields/campaignstep_id/stateProcess.js
deleted file mode 100644
index a3d6f4f4d26c42171f5dfaf152074f7039f95afd..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/campaignstep_id/stateProcess.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import("system.result");
-import("system.neon");
-import("system.vars");
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW &&
-    vars.exists("$param.CampaignSteps_param") && vars.get("$param.CampaignSteps_param") == "1" &&
-    vars.exists("$param.CampaignStepId_param") && !vars.get("$param.CampaignStepId_param"))
-{
-    result.string(neon.COMPONENTSTATE_AUTO);
-}
-else
-{
-    result.string(neon.COMPONENTSTATE_INVISIBLE);
-}
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/campaignstep_id/valueProcess.js b/entity/CampaignCost_entitiy/entityfields/campaignstep_id/valueProcess.js
deleted file mode 100644
index 30896ea50e4ae6bbc69bb7baaca294418004cb84..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/campaignstep_id/valueProcess.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import("system.result");
-import("system.neon");
-import("system.vars");
-
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.CampaignStepId_param") && vars.get("$param.CampaignStepId_param"))
-{
-    result.string(vars.get("$param.CampaignStepId_param"));
-}
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/campaignsteps/children/campaignid_param/valueProcess.js b/entity/CampaignCost_entitiy/entityfields/campaignsteps/children/campaignid_param/valueProcess.js
deleted file mode 100644
index dc855dd051409b0f79372cc2e34d294a1a57c72d..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/campaignsteps/children/campaignid_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.vars");
-import("system.result");
-
-result.string(vars.get("$param.CampaignId_param"))
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/campaignsteps_param/documentation.adoc b/entity/CampaignCost_entitiy/entityfields/campaignsteps_param/documentation.adoc
deleted file mode 100644
index d74c862542faa32b0e558fa69c33edc0000980f6..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/campaignsteps_param/documentation.adoc
+++ /dev/null
@@ -1,2 +0,0 @@
-if 0: show only fix costs
-if 1: show only campaign steps
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/category/displayValueProcess.js b/entity/CampaignCost_entitiy/entityfields/category/displayValueProcess.js
deleted file mode 100644
index c8d7303fadeec6339bcd9065205606caa49e415c..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/category/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.campaignStepCostCategory(), vars.get("$this.value")));
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/countparticipants/valueProcess.js b/entity/CampaignCost_entitiy/entityfields/countparticipants/valueProcess.js
deleted file mode 100644
index c8cec9a46f4ad458f2dfb3f8525644fb1a1d5244..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/countparticipants/valueProcess.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import("system.result");
-import("system.vars");
-import("Campaign_lib");
-
-if (vars.get("$field.CAMPAIGNSTEP_ID"))
-{
-    result.string(CampaignUtils.getParticipantCountForStep(vars.get("$field.CAMPAIGNSTEP_ID")));
-}
-else
-{
-    result.string(CampaignUtils.getParticipantCount(vars.get("$field.CAMPAIGN_ID")));
-}
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/date_edit/valueProcess.js b/entity/CampaignCost_entitiy/entityfields/date_edit/valueProcess.js
deleted file mode 100644
index 96630036eca528560c85d9a237044931e7a9197b..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/date_edit/valueProcess.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import("system.util");
-import("system.result");
-import("system.neon");
-import("system.vars");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
-    result.string(vars.get("$sys.date"));
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/date_new/valueProcess.js b/entity/CampaignCost_entitiy/entityfields/date_new/valueProcess.js
deleted file mode 100644
index 1b1ea7c082a78ebd6e793a5dc644d8920f9522c2..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/date_new/valueProcess.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import("system.util");
-import("system.result");
-import("system.neon");
-import("system.vars");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-    result.string(vars.get("$sys.date"));
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/keywordcampaignmanagementcostcategory/children/containername_param/valueProcess.js b/entity/CampaignCost_entitiy/entityfields/keywordcampaignmanagementcostcategory/children/containername_param/valueProcess.js
deleted file mode 100644
index 621fdd82097282d2e949cb0402cf1edcbf5610ce..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/keywordcampaignmanagementcostcategory/children/containername_param/valueProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.result");
-import("KeywordRegistry_basic");
-
-result.string($KeywordRegistry.campaignStepCostCategory());
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js b/entity/CampaignCost_entitiy/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js
deleted file mode 100644
index 7bf0f39ed06188503867bd1ecca206fece100bc0..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/keywordcampaignmanagementcostcategory/children/excludedkeyidssubquery_param/valueProcess.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import("system.neon");
-import("system.vars");
-import("system.db");
-import("Sql_lib");
-import("system.result");
-
-var cond = SqlCondition.begin()
-                       .andPrepareVars("CAMPAIGNCOST.CAMPAIGN_ID", "$field.CAMPAIGN_ID");
-
-if (vars.get("$field.CAMPAIGNSTEP_ID"))
-    cond.andPrepareVars("CAMPAIGNCOST.CAMPAIGNSTEP_ID", "$field.CAMPAIGNSTEP_ID");
-else
-    cond.and("CAMPAIGNCOST.CAMPAIGNSTEP_ID is null")
-    
-if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW)
-    cond.andPrepareVars("CAMPAIGNCOST.CAMPAIGNCOSTID", "$field.CAMPAIGNCOSTID", "# <> ?");
-
-result.string(db.translateStatement(cond.buildSql("select CATEGORY from CAMPAIGNCOST", "1=2", "group by CATEGORY")));
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/netperparticipant/titleProcess.js b/entity/CampaignCost_entitiy/entityfields/netperparticipant/titleProcess.js
deleted file mode 100644
index c5ea14f73ec9a5870c7c5e3a7a58e3358107e15d..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/netperparticipant/titleProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.translate");
-import("system.result");
-
-result.string(translate.text("Cost") +  " " + translate.text("per") + " "  + translate.text("Participant"));
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/netperparticipant/valueProcess.js b/entity/CampaignCost_entitiy/entityfields/netperparticipant/valueProcess.js
deleted file mode 100644
index eea808176cb74be09b41f29a60bb1105115c5af4..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/netperparticipant/valueProcess.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import("system.vars");
-import("system.result");
-import("system.eMath");
-
-var netto = parseFloat(vars.get("$field.NET"));
-var countParticipants = parseFloat(vars.get("$field.countParticipants"));
-
-if (netto && countParticipants &&countParticipants > 0)
-    result.string(eMath.roundDec(netto / countParticipants, 2, eMath.ROUND_HALF_UP));
-else
-    result.string(0);
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/user_edit/valueProcess.js b/entity/CampaignCost_entitiy/entityfields/user_edit/valueProcess.js
deleted file mode 100644
index 8a93ff7e16a82fb332cf1f6f30c95bec0c74d929..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/user_edit/valueProcess.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import("system.util");
-import("system.result");
-import("system.neon");
-import("system.vars");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
-    result.string(vars.get("$sys.user"));
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/user_new/valueProcess.js b/entity/CampaignCost_entitiy/entityfields/user_new/valueProcess.js
deleted file mode 100644
index 2615c2bbe71788eb05f1ff93ea8afaa05b40f6fb..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/entityfields/user_new/valueProcess.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import("system.util");
-import("system.result");
-import("system.neon");
-import("system.vars");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-    result.string(vars.get("$sys.user"));
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/recordcontainers/db/conditionProcess.js b/entity/CampaignCost_entitiy/recordcontainers/db/conditionProcess.js
deleted file mode 100644
index f553af6bac573d4226067d0bf246eada7d0d1dc5..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/recordcontainers/db/conditionProcess.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import("system.vars");
-import("system.db");
-import("system.result");
-import("Sql_lib");
-
-var cond = SqlCondition.begin()
-                       .andPrepareVars("CAMPAIGNCOST.CAMPAIGNCOSTID", "$param.Uid_param")
-                       .andPrepareVars("CAMPAIGNCOST.CAMPAIGN_ID", "$param.CampaignId_param")
-                       .andPrepareVars("CAMPAIGNCOST.CAMPAIGNSTEP_ID", "$param.CampaignStepId_param");
-                       
-if (vars.exists("$param.CampaignSteps_param") && vars.get("$param.CampaignSteps_param") == "1")
-{
-    // only step costs
-    cond.and("CAMPAIGNCOST.CAMPAIGNSTEP_ID is not null");
-}
-else
-{
-    // only fix costs
-    cond.and("CAMPAIGNCOST.CAMPAIGNSTEP_ID is null");
-}
-
-result.string(db.translateCondition(cond.build("1=2")));
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/recordcontainers/db/fromClauseProcess.js b/entity/CampaignCost_entitiy/recordcontainers/db/fromClauseProcess.js
deleted file mode 100644
index e075c4e894903b135e4bd4281da91bdb84c90538..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/recordcontainers/db/fromClauseProcess.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import("system.result");
-
-result.string("CAMPAIGNCOST left join CAMPAIGNSTEP on CAMPAIGNCOST.CAMPAIGNSTEP_ID = CAMPAIGNSTEP.CAMPAIGNSTEPID")
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/recordcontainers/db/orderClauseProcess.js b/entity/CampaignCost_entitiy/recordcontainers/db/orderClauseProcess.js
deleted file mode 100644
index e8abc388f8ef2e8b95dcb0d800030fcfc52701d0..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/recordcontainers/db/orderClauseProcess.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import("system.result");
-import("system.db");
-
-result.object({"CAMPAIGNSTEP.SORTING": db.ASCENDING});
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/recordcontainers/db/recordfieldmappings/category.displayvalue/expression.js b/entity/CampaignCost_entitiy/recordcontainers/db/recordfieldmappings/category.displayvalue/expression.js
deleted file mode 100644
index 4f14958aedfdf8daa195607c5b86e2e66e097ce5..0000000000000000000000000000000000000000
--- a/entity/CampaignCost_entitiy/recordcontainers/db/recordfieldmappings/category.displayvalue/expression.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.result");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
-var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.campaignStepCostCategory(), "CAMPAIGNCOST.CATEGORY");
-result.string(sql);
\ No newline at end of file
diff --git a/entity/CampaignCost_entity/entityfields/category/displayValueProcess.js b/entity/CampaignCost_entity/entityfields/category/displayValueProcess.js
index 96536279ef0b858b99687c397622da45f831fa14..ea066328168d83b9c725e0628005f160d86d9d21 100644
--- a/entity/CampaignCost_entity/entityfields/category/displayValueProcess.js
+++ b/entity/CampaignCost_entity/entityfields/category/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("Keyword_lib");
 import("KeywordRegistry_basic");
 
-result.string(KeywordUtils.getViewValue($KeywordRegistry.campaignStepCostCategory(), vars.get("$this.value")));
\ No newline at end of file
+result.string(KeywordUtils.getViewValue($KeywordRegistry.campaignStepCostCategory(), vars.get("$field.CATEGORY")));
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/CampaignStep_entity.aod b/entity/CampaignStep_entity/CampaignStep_entity.aod
index 92d59a1b933c236b6a986171d830aa136e2da2bb..8f1eb9cea2846eae246e5cf1a21e9ead325fcb6b 100644
--- a/entity/CampaignStep_entity/CampaignStep_entity.aod
+++ b/entity/CampaignStep_entity/CampaignStep_entity.aod
@@ -38,6 +38,10 @@
       <valueProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/campaign_id/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/campaign_id/displayValueProcess.js</displayValueProcess>
       <onValueChange>%aditoprj%/entity/CampaignStep_entity/entityfields/campaign_id/onValueChange.js</onValueChange>
+      <onValueChangeTypes>
+        <element>MASK</element>
+        <element>PROCESS_SETVALUE</element>
+      </onValueChangeTypes>
     </entityField>
     <entityField>
       <name>EMPLOYEE_CONTACT_ID</name>
diff --git a/entity/CampaignStep_entity/entityfields/campaign_id/displayValueProcess.js b/entity/CampaignStep_entity/entityfields/campaign_id/displayValueProcess.js
index c876f777295c165cd1b38cba358bfd6a8a6920a7..e97c4268951b37afbff8afad70b80a07822a1bca 100644
--- a/entity/CampaignStep_entity/entityfields/campaign_id/displayValueProcess.js
+++ b/entity/CampaignStep_entity/entityfields/campaign_id/displayValueProcess.js
@@ -1,7 +1,7 @@
-import("system.result");
-import("system.vars");
-import("Campaign_lib");
-
-var campaignId = vars.get("$this.value");
-var campaignName = CampaignUtils.getCampaignNameById(campaignId)
+import("system.result");
+import("system.vars");
+import("Campaign_lib");
+
+var campaignId = vars.get("$field.CAMPAIGN_ID");
+var campaignName = CampaignUtils.getCampaignNameById(campaignId)
 result.string(campaignName);
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/entityfields/date_end/valueProcess.js b/entity/CampaignStep_entity/entityfields/date_end/valueProcess.js
index b0c6f5d3b5240543f6fefcccee25cd50d5151524..8048460efdebae9db5983abdcf0ecda0b6b2911f 100644
--- a/entity/CampaignStep_entity/entityfields/date_end/valueProcess.js
+++ b/entity/CampaignStep_entity/entityfields/date_end/valueProcess.js
@@ -1,10 +1,10 @@
-import("system.neon");
-import("system.vars");
-import("system.result");
-import("system.datetime");
-
-var threeWeeks = datetime.ONE_WEEK * 3;
-var inThreeWeeks = datetime.date() + threeWeeks;
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+import("system.neon");
+import("system.vars");
+import("system.result");
+import("system.datetime");
+
+var threeWeeks = datetime.ONE_WEEK * 3;
+var inThreeWeeks = datetime.date() + threeWeeks;
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
     result.string(inThreeWeeks);
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/entityfields/date_start/valueProcess.js b/entity/CampaignStep_entity/entityfields/date_start/valueProcess.js
index 1a1d714cdde1413809445e51e0dd6cc841219099..5232be0ad0ad84c3ddc067506c9a9c7e6f3e4bd2 100644
--- a/entity/CampaignStep_entity/entityfields/date_start/valueProcess.js
+++ b/entity/CampaignStep_entity/entityfields/date_start/valueProcess.js
@@ -3,7 +3,7 @@ import("system.neon");
 import("system.vars");
 import("system.result");
     
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     result.string(DateUtils.getTodayUTC());
 }
diff --git a/entity/CampaignStep_entity/entityfields/maxparticipants/onValidation.js b/entity/CampaignStep_entity/entityfields/maxparticipants/onValidation.js
index 7363c5fb269c99197ae38d1032b278818de80d8e..fd6b6aef2f69c7be604ebcf0512609e3dfdff3cb 100644
--- a/entity/CampaignStep_entity/entityfields/maxparticipants/onValidation.js
+++ b/entity/CampaignStep_entity/entityfields/maxparticipants/onValidation.js
@@ -1,10 +1,10 @@
-import("Campaign_lib");
-import("system.result");
-import("Entity_lib");
-import("system.vars");
-
-var currentParticipantsCount = parseInt(vars.get("$field.CurrentMaxParticipantsInfo")[0]);
-var newMaxParticipantsCount = parseInt(ProcessHandlingUtils.getOnValidationValue(vars.get("$field.MAXPARTICIPANTS")));
-
-if(newMaxParticipantsCount < currentParticipantsCount)
+import("Campaign_lib");
+import("system.result");
+import("Entity_lib");
+import("system.vars");
+
+var currentParticipantsCount = parseInt(vars.get("$field.CurrentMaxParticipantsInfo")[0]);
+var newMaxParticipantsCount = parseInt(vars.get("local.value"));
+
+if(newMaxParticipantsCount < currentParticipantsCount)
     result.string(CampaignUtils.getMaxParticipantsValidationMessage());
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/entityfields/state/displayValueProcess.js b/entity/CampaignStep_entity/entityfields/state/displayValueProcess.js
index 4eda9361751ab1a50266d6fb8264a35cb808a077..eda9e4ac40f21a62ec1025510c6dcbcfe91877d0 100644
--- a/entity/CampaignStep_entity/entityfields/state/displayValueProcess.js
+++ b/entity/CampaignStep_entity/entityfields/state/displayValueProcess.js
@@ -1,6 +1,6 @@
-import("system.result");
-import("system.vars");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
-result.string(KeywordUtils.getViewValue($KeywordRegistry.campaignStepState(), vars.get("$this.value")));
\ No newline at end of file
+import("system.result");
+import("system.vars");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+
+result.string(KeywordUtils.getViewValue($KeywordRegistry.campaignStepState(), vars.get("$field.STATE")));
\ No newline at end of file
diff --git a/entity/CampaignStep_entity/entityfields/state/valueProcess.js b/entity/CampaignStep_entity/entityfields/state/valueProcess.js
index da244c96b11edb16fbfeb5e0a812d5315ae5b659..dc5efe1d6fe6cca00ad15ff17d26d7fe16a98a55 100644
--- a/entity/CampaignStep_entity/entityfields/state/valueProcess.js
+++ b/entity/CampaignStep_entity/entityfields/state/valueProcess.js
@@ -1,7 +1,7 @@
-import("system.vars");
-import("system.result");
-import("system.neon");
-import("KeywordRegistry_basic");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+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
diff --git a/entity/CampaignStep_entity/entityfields/stepmedium/displayValueProcess.js b/entity/CampaignStep_entity/entityfields/stepmedium/displayValueProcess.js
index c030c5382afe5f1237d122200fc5f028a702d7fb..429287a14cde6238f380ff76c6b30c2e6ca93f05 100644
--- a/entity/CampaignStep_entity/entityfields/stepmedium/displayValueProcess.js
+++ b/entity/CampaignStep_entity/entityfields/stepmedium/displayValueProcess.js
@@ -1,6 +1,6 @@
-import("system.result");
-import("system.vars");
-import("KeywordRegistry_basic");
-import("Keyword_lib");
-
-result.string(KeywordUtils.getViewValue($KeywordRegistry.communicationMediumCampaign(), vars.get("$this.value")));
+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/Campaign_entity/entityfields/employee_contact_id/valueProcess.js b/entity/Campaign_entity/entityfields/employee_contact_id/valueProcess.js
index 0d83e155507cb0955f8ebc5a4ff4af836b96977e..4711a17716cf559c48c73cd7ea780b2ffe5e2e03 100644
--- a/entity/Campaign_entity/entityfields/employee_contact_id/valueProcess.js
+++ b/entity/Campaign_entity/entityfields/employee_contact_id/valueProcess.js
@@ -1,7 +1,7 @@
-import("system.result");
-import("system.neon");
-import("system.vars");
-import("Employee_lib");
-
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+import("system.result");
+import("system.neon");
+import("system.vars");
+import("Employee_lib");
+
+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/state/valueProcess.js b/entity/Campaign_entity/entityfields/state/valueProcess.js
index 9dff88d91d83c29412096ee051941114a92f82b1..0c370f2eb587056a5e1f0235f84bcaf137c6d883 100644
--- a/entity/Campaign_entity/entityfields/state/valueProcess.js
+++ b/entity/Campaign_entity/entityfields/state/valueProcess.js
@@ -1,7 +1,7 @@
-import("system.neon");
-import("system.vars");
-import("system.result");
-import("KeywordRegistry_basic");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+import("system.neon");
+import("system.vars");
+import("system.result");
+import("KeywordRegistry_basic");
+
+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/ClassificationAdmin_entity/entityfields/classificationgroup/displayValueProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationgroup/displayValueProcess.js
index a5717eabb76417046c488939aadcfa7beb915dcd..4fb0aeb79a76fae66af37083cc83e38fc26d051e 100644
--- a/entity/ClassificationAdmin_entity/entityfields/classificationgroup/displayValueProcess.js
+++ b/entity/ClassificationAdmin_entity/entityfields/classificationgroup/displayValueProcess.js
@@ -2,4 +2,4 @@ import("system.vars");
 import("system.translate");
 import("system.result");
 
-result.string(translate.text(vars.get("$this.value")));
\ No newline at end of file
+result.string(translate.text(vars.get("$field.CLASSIFICATIONGROUP")));
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationgroup/onValidation.js b/entity/ClassificationAdmin_entity/entityfields/classificationgroup/onValidation.js
index 54c0a302da1fbc5e4e536a7ffd0f80778cc1986c..b22708772a0282ee6afb72989395043a5a80ff50 100644
--- a/entity/ClassificationAdmin_entity/entityfields/classificationgroup/onValidation.js
+++ b/entity/ClassificationAdmin_entity/entityfields/classificationgroup/onValidation.js
@@ -7,7 +7,7 @@ import("Entity_lib");
 
 if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
 {
-    var newGroup = ProcessHandlingUtils.getOnValidationValue();
+    var newGroup = vars.get("local.value");
     
     // use param if available or current selectionRows
     var classificationType = ClassificationUtils.getUsageType("$param.ClassificationType_param", "$sys.selectionRows");
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationtype/displayValueProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationtype/displayValueProcess.js
index e56601c615178505648345adeb253d9b3dea9e77..9a93d9382887643fcc081de68214ba526ed930ac 100644
--- a/entity/ClassificationAdmin_entity/entityfields/classificationtype/displayValueProcess.js
+++ b/entity/ClassificationAdmin_entity/entityfields/classificationtype/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("Keyword_lib");
 import("KeywordRegistry_basic");
 
-result.string(KeywordUtils.getViewValue($KeywordRegistry.classificationType(), vars.get("$this.value")));
\ No newline at end of file
+result.string(KeywordUtils.getViewValue($KeywordRegistry.classificationType(), vars.get("$field.CLASSIFICATIONTYPE")));
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationtype_id/valueProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationtype_id/valueProcess.js
index 3886bb2dbefafdfd50c83b824fe2c1efd190f31e..aaef9be6b3921ec62b37843d0c65b43aeedd7fdf 100644
--- a/entity/ClassificationAdmin_entity/entityfields/classificationtype_id/valueProcess.js
+++ b/entity/ClassificationAdmin_entity/entityfields/classificationtype_id/valueProcess.js
@@ -2,7 +2,7 @@ import("system.result");
 import("system.neon");
 import("system.vars");
 
-if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) && !vars.get("$this.value"))
+if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) && vars.get("$this.value") == null)
 {
     result.string(vars.get("$field.CLASSIFICATIONTYPEID"));
 }
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/object_rowid/valueProcess.js b/entity/ClassificationAdmin_entity/entityfields/object_rowid/valueProcess.js
index d15a596ff1090502ac8cd6afd63e12893ce05625..00c91dc0b75c8cb002fa9eafe58ad40ab16a0e3a 100644
--- a/entity/ClassificationAdmin_entity/entityfields/object_rowid/valueProcess.js
+++ b/entity/ClassificationAdmin_entity/entityfields/object_rowid/valueProcess.js
@@ -2,7 +2,7 @@ import("system.result");
 import("system.neon");
 import("system.vars");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && !vars.get("$this.value"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && vars.get("$this.value") == null)
 {
     result.string(vars.get("$param.ObjectRowid_param"));
 }
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/object_type/valueProcess.js b/entity/ClassificationAdmin_entity/entityfields/object_type/valueProcess.js
index b532aa65a135891c68363e05f02e3420967f409a..6a340688081d8317de45c8b656f6ffcbe9520e1e 100644
--- a/entity/ClassificationAdmin_entity/entityfields/object_type/valueProcess.js
+++ b/entity/ClassificationAdmin_entity/entityfields/object_type/valueProcess.js
@@ -2,7 +2,7 @@ import("system.result");
 import("system.neon");
 import("system.vars");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && !vars.get("$this.value"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && vars.get("$this.value") == null)
 {
     result.string(vars.get("$param.ObjectType_param"));
 }
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/scoretype/displayValueProcess.js b/entity/ClassificationAdmin_entity/entityfields/scoretype/displayValueProcess.js
index a5717eabb76417046c488939aadcfa7beb915dcd..87d569a0e2dc50c0ef3859fdbc0f22c3d9ac89e3 100644
--- a/entity/ClassificationAdmin_entity/entityfields/scoretype/displayValueProcess.js
+++ b/entity/ClassificationAdmin_entity/entityfields/scoretype/displayValueProcess.js
@@ -2,4 +2,4 @@ import("system.vars");
 import("system.translate");
 import("system.result");
 
-result.string(translate.text(vars.get("$this.value")));
\ No newline at end of file
+result.string(translate.text(vars.get("$field.SCORETYPE")));
\ No newline at end of file
diff --git a/entity/ClassificationAdmin_entity/entityfields/uid/displayValueProcess.js b/entity/ClassificationAdmin_entity/entityfields/uid/displayValueProcess.js
index b92bfbc2e35eba18a9e8daf1ba5ab25180d8a837..62451165d8d832fb9359a2696e3f32d16a585149 100644
--- a/entity/ClassificationAdmin_entity/entityfields/uid/displayValueProcess.js
+++ b/entity/ClassificationAdmin_entity/entityfields/uid/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("Keyword_lib");
 import("KeywordRegistry_basic");
 
-result.string(KeywordUtils.getViewValue($KeywordRegistry.classificationType(), vars.get("$this.value")))
\ No newline at end of file
+result.string(KeywordUtils.getViewValue($KeywordRegistry.classificationType(), vars.get("$field.UID")))
\ No newline at end of file
diff --git a/entity/ClassificationScore_entity/entityfields/score/onValidation.js b/entity/ClassificationScore_entity/entityfields/score/onValidation.js
index be6e4157430034d74f2785dcd3c5198b8dfe6a17..83ad4d951b6ef20e15e38a4e4ad81c1ba7738e3b 100644
--- a/entity/ClassificationScore_entity/entityfields/score/onValidation.js
+++ b/entity/ClassificationScore_entity/entityfields/score/onValidation.js
@@ -4,5 +4,5 @@ import("system.result");
 import("system.vars");
 
 var max = parseFloat(vars.getString("$field.MaxValue"));
-if (parseFloat(ProcessHandlingUtils.getOnValidationValue(vars.get("$field.SCORE"))) > max)
+if (parseFloat(vars.get("local.value")) > max)
     result.string(translate.withArguments("${HIGHER_THAN_MAX} max: %0", [max]));
\ No newline at end of file
diff --git a/entity/Classification_entity/entityfields/classificationgroup/displayValueProcess.js b/entity/Classification_entity/entityfields/classificationgroup/displayValueProcess.js
index c5738f7687d5ea12365963b822d86b9d09968bdd..6f677fee2cb374dfea6c759cd9611407428f8b89 100644
--- a/entity/Classification_entity/entityfields/classificationgroup/displayValueProcess.js
+++ b/entity/Classification_entity/entityfields/classificationgroup/displayValueProcess.js
@@ -6,6 +6,6 @@ import("system.vars");
 if (vars.getString("$field.CLASSIFICATIONGROUP"))
 {
     var score = vars.getString("$field.GroupScore");
-    result.string(translate.text(vars.get("$this.value")) + ": " + score + " " + translate.text("points") + " = " + ClassificationUtils.mapToClass(score));
+    result.string(translate.text(vars.get("$field.CLASSIFICATIONGROUP")) + ": " + score + " " + translate.text("points") + " = " + ClassificationUtils.mapToClass(score));
 
 }
diff --git a/entity/Classification_entity/entityfields/classificationtype/displayValueProcess.js b/entity/Classification_entity/entityfields/classificationtype/displayValueProcess.js
index e56601c615178505648345adeb253d9b3dea9e77..9a93d9382887643fcc081de68214ba526ed930ac 100644
--- a/entity/Classification_entity/entityfields/classificationtype/displayValueProcess.js
+++ b/entity/Classification_entity/entityfields/classificationtype/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("Keyword_lib");
 import("KeywordRegistry_basic");
 
-result.string(KeywordUtils.getViewValue($KeywordRegistry.classificationType(), vars.get("$this.value")));
\ No newline at end of file
+result.string(KeywordUtils.getViewValue($KeywordRegistry.classificationType(), vars.get("$field.CLASSIFICATIONTYPE")));
\ No newline at end of file
diff --git a/entity/Classification_entity/entityfields/classificationtype_id/valueProcess.js b/entity/Classification_entity/entityfields/classificationtype_id/valueProcess.js
index 3886bb2dbefafdfd50c83b824fe2c1efd190f31e..aaef9be6b3921ec62b37843d0c65b43aeedd7fdf 100644
--- a/entity/Classification_entity/entityfields/classificationtype_id/valueProcess.js
+++ b/entity/Classification_entity/entityfields/classificationtype_id/valueProcess.js
@@ -2,7 +2,7 @@ import("system.result");
 import("system.neon");
 import("system.vars");
 
-if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) && !vars.get("$this.value"))
+if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) && vars.get("$this.value") == null)
 {
     result.string(vars.get("$field.CLASSIFICATIONTYPEID"));
 }
\ No newline at end of file
diff --git a/entity/Classification_entity/entityfields/object_rowid/valueProcess.js b/entity/Classification_entity/entityfields/object_rowid/valueProcess.js
index d15a596ff1090502ac8cd6afd63e12893ce05625..00c91dc0b75c8cb002fa9eafe58ad40ab16a0e3a 100644
--- a/entity/Classification_entity/entityfields/object_rowid/valueProcess.js
+++ b/entity/Classification_entity/entityfields/object_rowid/valueProcess.js
@@ -2,7 +2,7 @@ import("system.result");
 import("system.neon");
 import("system.vars");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && !vars.get("$this.value"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && vars.get("$this.value") == null)
 {
     result.string(vars.get("$param.ObjectRowid_param"));
 }
\ No newline at end of file
diff --git a/entity/Classification_entity/entityfields/object_type/valueProcess.js b/entity/Classification_entity/entityfields/object_type/valueProcess.js
index b532aa65a135891c68363e05f02e3420967f409a..6a340688081d8317de45c8b656f6ffcbe9520e1e 100644
--- a/entity/Classification_entity/entityfields/object_type/valueProcess.js
+++ b/entity/Classification_entity/entityfields/object_type/valueProcess.js
@@ -2,7 +2,7 @@ import("system.result");
 import("system.neon");
 import("system.vars");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && !vars.get("$this.value"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && vars.get("$this.value") == null)
 {
     result.string(vars.get("$param.ObjectType_param"));
 }
\ No newline at end of file
diff --git a/entity/Classification_entity/entityfields/scoretype/displayValueProcess.js b/entity/Classification_entity/entityfields/scoretype/displayValueProcess.js
index a5717eabb76417046c488939aadcfa7beb915dcd..87d569a0e2dc50c0ef3859fdbc0f22c3d9ac89e3 100644
--- a/entity/Classification_entity/entityfields/scoretype/displayValueProcess.js
+++ b/entity/Classification_entity/entityfields/scoretype/displayValueProcess.js
@@ -2,4 +2,4 @@ import("system.vars");
 import("system.translate");
 import("system.result");
 
-result.string(translate.text(vars.get("$this.value")));
\ No newline at end of file
+result.string(translate.text(vars.get("$field.SCORETYPE")));
\ No newline at end of file
diff --git a/entity/CommRestriction_Entity/entityfields/employee_involved/valueProcess.js b/entity/CommRestriction_Entity/entityfields/employee_involved/valueProcess.js
index 0d83e155507cb0955f8ebc5a4ff4af836b96977e..4711a17716cf559c48c73cd7ea780b2ffe5e2e03 100644
--- a/entity/CommRestriction_Entity/entityfields/employee_involved/valueProcess.js
+++ b/entity/CommRestriction_Entity/entityfields/employee_involved/valueProcess.js
@@ -1,7 +1,7 @@
-import("system.result");
-import("system.neon");
-import("system.vars");
-import("Employee_lib");
-
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+import("system.result");
+import("system.neon");
+import("system.vars");
+import("Employee_lib");
+
+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/CommRestriction_Entity/entityfields/startdate/valueProcess.js b/entity/CommRestriction_Entity/entityfields/startdate/valueProcess.js
index 3e186c747bfbb6719878872798de7bcea5ab7794..c6997b853583045d68eeca542145fc44b42c54f9 100644
--- a/entity/CommRestriction_Entity/entityfields/startdate/valueProcess.js
+++ b/entity/CommRestriction_Entity/entityfields/startdate/valueProcess.js
@@ -1,7 +1,7 @@
-import("system.datetime");
-import("system.vars");
-import("system.result");
-import("system.neon");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.getString("$this.value"))
+import("system.datetime");
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && ars.getString("$this.value") == null)
     result.string(datetime.date());
\ No newline at end of file
diff --git a/entity/Communication_entity/entityfields/addr/onValidation.js b/entity/Communication_entity/entityfields/addr/onValidation.js
index 4724d9c2314f8dff5bc5bfe56efac49e98db0548..2a7c905a42a446fcb30b0ba10d64d62e458c1aee 100644
--- a/entity/Communication_entity/entityfields/addr/onValidation.js
+++ b/entity/Communication_entity/entityfields/addr/onValidation.js
@@ -17,7 +17,7 @@ var commCategory = keywordAttributes.contentType || "TEXT";
 var fn = CommValidationUtil.makeValidationFn(commCategory);
 if (fn != null)
 {
-    var commAddr = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.ADDR"));
+    var commAddr = vars.get("local.value");
     var additional = CommValidationUtil.getExtensionsBlueprint();
     additional.countryCode = vars.get("$param.ContactsMainCountry_param");//TODO: try to use users language first and then the companies
 
diff --git a/entity/Contact_entity/entityfields/organisation_id/onValidation.js b/entity/Contact_entity/entityfields/organisation_id/onValidation.js
index 414972ba58306e857d7bf27cd11c1175bf96cae3..2d8449de821c3519c108f09d553f73d05a70be1a 100644
--- a/entity/Contact_entity/entityfields/organisation_id/onValidation.js
+++ b/entity/Contact_entity/entityfields/organisation_id/onValidation.js
@@ -7,13 +7,7 @@ import("Entity_lib");
 import("Sql_lib");
 
 var personId = vars.getString("$field.PERSON_ID");
-var organisationId = ProcessHandlingUtils.getOnValidationValue("$field.ORGANISATION_ID");
-
-//workaround for organisationId: $local.value will return the name of the organisation which is not what we want
-//but the field already contains the changed value; so let's load the field instead of the $local.value-variable
-//this is a bug within the ADITO-kernel
-//TODO: change the workaround behaviour when $local.value is retrieved correct
-organisationId = vars.getString("$field.ORGANISATION_ID");
+var organisationId = vars.get("$local.value");
 
 //a entry within the Contact_enity can never be edited only created (it's edited within the Person_entity)
 //so no need to provide our own CONTACTID since it does not exist in the database right now => provide null instead
diff --git a/entity/Contact_entity/entityfields/person_id/valueProcess.js b/entity/Contact_entity/entityfields/person_id/valueProcess.js
index 7803b90af373762f4ae921f51bdadf4386ac9469..86dc70467464d41a428886dd7830cf7432470cde 100644
--- a/entity/Contact_entity/entityfields/person_id/valueProcess.js
+++ b/entity/Contact_entity/entityfields/person_id/valueProcess.js
@@ -3,5 +3,5 @@ import("system.result");
 import("system.neon");
 
 var presetValue = vars.get("$param.PersonId_param");
-if (presetValue && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if (presetValue && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
     result.string(presetValue);
\ No newline at end of file
diff --git a/entity/Contact_entity/entityfields/status/valueProcess.js b/entity/Contact_entity/entityfields/status/valueProcess.js
index ab590b059440372f55b8c6d73d0c47eae06ca396..13218c16514d81765c7e5dfd47c099996adfe063 100644
--- a/entity/Contact_entity/entityfields/status/valueProcess.js
+++ b/entity/Contact_entity/entityfields/status/valueProcess.js
@@ -3,5 +3,5 @@ import("system.result");
 import("system.neon");
 import("KeywordRegistry_basic");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
     result.string($KeywordRegistry.contactStatus$active());
\ No newline at end of file
diff --git a/entity/Contract_entity/entityfields/contact_id/fieldIdProcess.js b/entity/Contract_entity/entityfields/contact_id/fieldIdProcess.js
index c354a6b460cbecf0233c20761c02c66415c20e72..6cd3c4544e56fa57ad04b119be620aa650f4a849 100644
--- a/entity/Contract_entity/entityfields/contact_id/fieldIdProcess.js
+++ b/entity/Contract_entity/entityfields/contact_id/fieldIdProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string (vars.get("$this.value"));
\ No newline at end of file
+result.string(vars.get("$this.value"));
\ No newline at end of file
diff --git a/entity/Contract_entity/entityfields/contractcode/onValidation.js b/entity/Contract_entity/entityfields/contractcode/onValidation.js
index c9c46837558c4f545d61a8861b63a8a3d32dd0df..4d3cfa688f691b265b2348d492a123d2ef8f47e4 100644
--- a/entity/Contract_entity/entityfields/contractcode/onValidation.js
+++ b/entity/Contract_entity/entityfields/contractcode/onValidation.js
@@ -5,7 +5,7 @@ import("Contract_lib");
 import("Entity_lib");
 
 if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW
-    && !ContractUtils.validateContractNumber(ProcessHandlingUtils.getOnValidationValue(vars.get("$field.CONTRACTCODE"))))
+    && !ContractUtils.validateContractNumber(vars.get("local.value")))
 {
     vars.set("$field.CONTRACTCODE", ContractUtils.getNextContractNumber().toString());
 }
\ No newline at end of file
diff --git a/entity/Contract_entity/entityfields/contractstart/onValueChange.js b/entity/Contract_entity/entityfields/contractstart/onValueChange.js
index f2e29fdda8f9227616cd3dc7f3879867b2bfbaa8..2039e005c8ccdb8235ffcf4ca8f465749cbff12f 100644
--- a/entity/Contract_entity/entityfields/contractstart/onValueChange.js
+++ b/entity/Contract_entity/entityfields/contractstart/onValueChange.js
@@ -2,7 +2,7 @@ import("system.vars");
 import("Util_lib");
 import("Entity_lib");
 
-var cStart = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.CONTRACTSTART"));
+var cStart = vars.get("local.value");
 var cDue = vars.get("$field.CONTRACTDUE");
 
 if (cDue < cStart && cDue != "")
diff --git a/entity/Contract_entity/entityfields/contractstart/valueProcess.js b/entity/Contract_entity/entityfields/contractstart/valueProcess.js
index fde00cab2ad74643d42064d1ae353c92972deeca..072560acb2f89d72012c5d3539c293cbf02b86a8 100644
--- a/entity/Contract_entity/entityfields/contractstart/valueProcess.js
+++ b/entity/Contract_entity/entityfields/contractstart/valueProcess.js
@@ -3,7 +3,7 @@ import("system.vars");
 import("system.neon");
 import("Date_lib");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     result.string(DateUtils.getTodayUTC());
 }
\ No newline at end of file
diff --git a/entity/Contract_entity/onValidation.js b/entity/Contract_entity/onValidation.js
index 77648d016858294bd4ed08ac0ffe845efddd9bac..07ec6d5c095b971e0fa242207390a0244a0a65f5 100644
--- a/entity/Contract_entity/onValidation.js
+++ b/entity/Contract_entity/onValidation.js
@@ -13,7 +13,7 @@ if (!DateUtils.validateBeginnBeforeEnd(startDate, endDate))
     errorMessage = DateUtils.getValidationFailString();
 
 // check Duedate
-var cDue = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.CONTRACTDUE"));
+var cDue = vars.get("local.value");
 if (cDue && (startDate && !DateUtils.validateBeginnBeforeEnd(startDate, cDue) || endDate && !DateUtils.validateBeginnBeforeEnd(cDue, endDate)))
 {
     if (errorMessage != "")
diff --git a/entity/DSGVOInfo_entity/entityfields/datasource/displayValueProcess.js b/entity/DSGVOInfo_entity/entityfields/datasource/displayValueProcess.js
index e91f2e9dc43773355e826bdaa6e5c554824054a9..c2256cb6f59e99e189b508df819ad5918c25e700 100644
--- a/entity/DSGVOInfo_entity/entityfields/datasource/displayValueProcess.js
+++ b/entity/DSGVOInfo_entity/entityfields/datasource/displayValueProcess.js
@@ -4,4 +4,4 @@ import("Contact_lib");
 import("system.neon");
 
 
-result.string(ContactUtils.getFullTitleByContactId(vars.getString("$this.value")));
\ No newline at end of file
+result.string(ContactUtils.getFullTitleByContactId(vars.getString("$field.DATASOURCE")));
\ No newline at end of file
diff --git a/entity/DSGVOInfo_entity/entityfields/deadline/onValueChange.js b/entity/DSGVOInfo_entity/entityfields/deadline/onValueChange.js
index e140a66ed292bb53fa196996a562b4665d68a5cc..c263317ed2ea71d8651496cd0ae151cb95119144 100644
--- a/entity/DSGVOInfo_entity/entityfields/deadline/onValueChange.js
+++ b/entity/DSGVOInfo_entity/entityfields/deadline/onValueChange.js
@@ -2,7 +2,7 @@ import("KeywordRegistry_basic");
 import("system.vars");
 import("system.neon");
 
-if (vars.get("$this.value") == $KeywordRegistry.dsgvoDeadline$onTime())
+if (vars.get("$local.value") == $KeywordRegistry.dsgvoDeadline$onTime())
 {
     neon.setFieldValues({
         "$field.dateDeadline": ""
diff --git a/entity/DSGVOInfo_entity/entityfields/recipient/displayValueProcess.js b/entity/DSGVOInfo_entity/entityfields/recipient/displayValueProcess.js
index e91f2e9dc43773355e826bdaa6e5c554824054a9..e4a926b3553d60c50e0a71d742ff99600de691a5 100644
--- a/entity/DSGVOInfo_entity/entityfields/recipient/displayValueProcess.js
+++ b/entity/DSGVOInfo_entity/entityfields/recipient/displayValueProcess.js
@@ -4,4 +4,4 @@ import("Contact_lib");
 import("system.neon");
 
 
-result.string(ContactUtils.getFullTitleByContactId(vars.getString("$this.value")));
\ No newline at end of file
+result.string(ContactUtils.getFullTitleByContactId(vars.getString("$field.RECIPIENT")));
\ No newline at end of file
diff --git a/entity/DSGVOInfo_entity/entityfields/transmission/onValueChange.js b/entity/DSGVOInfo_entity/entityfields/transmission/onValueChange.js
index e18fabe80d94934695e3f3fe46ffdd18d631ef15..ac3985df8a878fe44c1179c4e8fc9ace5a6530f5 100644
--- a/entity/DSGVOInfo_entity/entityfields/transmission/onValueChange.js
+++ b/entity/DSGVOInfo_entity/entityfields/transmission/onValueChange.js
@@ -2,7 +2,7 @@ import("KeywordRegistry_basic");
 import("system.vars");
 import("system.neon");
 
-if (vars.get("$this.value") == $KeywordRegistry.dsgvoTransmission$none())
+if (vars.get("$local.value") == $KeywordRegistry.dsgvoTransmission$none())
 {
     neon.setFieldValues({
         "$field.RECIPIENT": "",
diff --git a/entity/DSGVO_entity/entityfields/dsgvotype/displayValueProcess.js b/entity/DSGVO_entity/entityfields/dsgvotype/displayValueProcess.js
index 72549ead1c6c1898f7c35f84a8abb36ce4595ccf..a91ec572c02a941012ad8eb50f3a4999485c5daa 100644
--- a/entity/DSGVO_entity/entityfields/dsgvotype/displayValueProcess.js
+++ b/entity/DSGVO_entity/entityfields/dsgvotype/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("system.result");
 import("Keyword_lib");
 
-result.string(KeywordUtils.getViewValue($KeywordRegistry.dsgvoType(), vars.get("$this.value")));
\ No newline at end of file
+result.string(KeywordUtils.getViewValue($KeywordRegistry.dsgvoType(), vars.get("$field.DSGVOTYPE")));
\ No newline at end of file
diff --git a/entity/DescriptionTranslation_entity/entityfields/lang/displayValueProcess.js b/entity/DescriptionTranslation_entity/entityfields/lang/displayValueProcess.js
index ac0f29fc259baae6d6042a83e588737d6c76fd31..471293a21aa1604884698461618f2e15e142da92 100644
--- a/entity/DescriptionTranslation_entity/entityfields/lang/displayValueProcess.js
+++ b/entity/DescriptionTranslation_entity/entityfields/lang/displayValueProcess.js
@@ -6,5 +6,5 @@ import("KeywordRegistry_basic");
 import("Keyword_lib");
 import("Sql_lib");
 
-result.string(translate.text(db.cell(SqlCondition.begin().andPrepareVars("AB_LANGUAGE.ISO3", "$this.value")
+result.string(translate.text(db.cell(SqlCondition.begin().andPrepareVars("AB_LANGUAGE.ISO3", "$field.LANG")
                                    .buildSql("select NAME_LATIN from AB_LANGUAGE", "1=2"))));
\ No newline at end of file
diff --git a/entity/DocumentTemplate_entity/entityfields/bindata/onValueChange.js b/entity/DocumentTemplate_entity/entityfields/bindata/onValueChange.js
index 7ed1a7ee612295e7f22d6941fa6fd4c442a91004..3ccf1ac0d361997eb045d92a3ab014b5da4e4b13 100644
--- a/entity/DocumentTemplate_entity/entityfields/bindata/onValueChange.js
+++ b/entity/DocumentTemplate_entity/entityfields/bindata/onValueChange.js
@@ -3,7 +3,7 @@ import("system.neon");
 import("Entity_lib");
 import("Document_lib");
 
-var uploadValue = DocumentUtil.getFilenameFromUpload(ProcessHandlingUtils.getOnValidationValue(vars.get("$field.BINDATA")));
+var uploadValue = DocumentUtil.getFilenameFromUpload(vars.get("local.value"));
 
 if(!(vars.get("$field.NAME") != null && vars.get("$field.NAME") != ""))
 {
diff --git a/entity/Document_entity/Document_entity.aod b/entity/Document_entity/Document_entity.aod
index 0ade69252f6dcd3d64214a57ab3a182c4d6bd7f0..4ad9aefbd202f5812cc623566522252908ec9d44 100644
--- a/entity/Document_entity/Document_entity.aod
+++ b/entity/Document_entity/Document_entity.aod
@@ -67,6 +67,7 @@
       <children>
         <entityActionField>
           <name>downloadFilesAction</name>
+          <title>Download</title>
           <onActionProcess>%aditoprj%/entity/Document_entity/entityfields/document_actions/children/downloadfilesaction/onActionProcess.js</onActionProcess>
           <isObjectAction v="false" />
           <isSelectionAction v="true" />
@@ -129,6 +130,7 @@
     </entityParameter>
     <entityActionField>
       <name>downloadSingleFileAction</name>
+      <title>Download</title>
       <onActionProcess>%aditoprj%/entity/Document_entity/entityfields/downloadsinglefileaction/onActionProcess.js</onActionProcess>
       <iconId>VAADIN:DOWNLOAD</iconId>
     </entityActionField>
@@ -258,6 +260,12 @@
           <fieldName>MainDocuments</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>056f943d-2ad2-4359-9825-7b445f0267ff</name>
+          <entityName>SupportTicket_entity</entityName>
+          <fieldName>MainDocuments</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
diff --git a/entity/Document_entity/entityfields/bindata_upload/onValueChange.js b/entity/Document_entity/entityfields/bindata_upload/onValueChange.js
index bac80becd0f9e237b82c178ca5eaa60957a29662..c0b7a0db07072a7f30d5bfdd1afef3713e5a9d72 100644
--- a/entity/Document_entity/entityfields/bindata_upload/onValueChange.js
+++ b/entity/Document_entity/entityfields/bindata_upload/onValueChange.js
@@ -3,5 +3,5 @@ import("system.neon");
 import("Entity_lib");
 import("Document_lib");
 
-var uploadValue = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.BINDATA_UPLOAD"));
+var uploadValue = vars.get("local.value");
 neon.setFieldValue("$field.NAME", DocumentUtil.getFilenameFromUpload(uploadValue));
diff --git a/entity/Document_entity/entityfields/is_main_document/onValueChange.js b/entity/Document_entity/entityfields/is_main_document/onValueChange.js
index 9b24b45926f8c5a61e02a09fcdfbb1a1dcb4de76..6a0b8cbb98df8907007380f60a24c2f3fde360a6 100644
--- a/entity/Document_entity/entityfields/is_main_document/onValueChange.js
+++ b/entity/Document_entity/entityfields/is_main_document/onValueChange.js
@@ -2,8 +2,7 @@ import("system.neon");
 import("system.vars");
 import("Entity_lib");
 
-var value = vars.exists("$field.IS_MAIN_DOCUMENT") ? vars.get("$field.IS_MAIN_DOCUMENT") : "";
-value = ProcessHandlingUtils.getOnValidationValue(value);
+var value = vars.get("$local.value") ? vars.get("$local.value") : "";
 
 if(value == "1")
     neon.setFieldValue("$field.KEYWORD", "MAINDOCUMENT");
diff --git a/entity/Email_entity/entityfields/recipient/displayValueProcess.js b/entity/Email_entity/entityfields/recipient/displayValueProcess.js
index 465e0a9f7198021c0d439c55cbeaff0d5c566f89..8e2f689eb15234549c8e1586c5aeba949ada2d62 100644
--- a/entity/Email_entity/entityfields/recipient/displayValueProcess.js
+++ b/entity/Email_entity/entityfields/recipient/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.neon");
 import("system.vars");
 
 if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
-    result.string(vars.get("$this.value"));
\ No newline at end of file
+    result.string(vars.get("$field.RECIPIENT"));
\ 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 1115022a7a85a8c8283ab6429fa117100664a2c9..e83561d0e54fb7ff062c4157e4c6b6bd718f86b6 100644
--- a/entity/Email_entity/entityfields/recipient/valueProcess.js
+++ b/entity/Email_entity/entityfields/recipient/valueProcess.js
@@ -3,7 +3,7 @@ import("system.result");
 import("system.neon");
 import("system.vars");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     if (vars.exists("$param.Recipient_param") && vars.get("$param.Recipient_param"))
         result.string(vars.get("$param.Recipient_param"));
diff --git a/entity/Email_entity/recordcontainers/jdito/onInsert.js b/entity/Email_entity/recordcontainers/jdito/onInsert.js
index a3ba13d26fb085a33bea5f1eb3344b4300da3bf9..d0a851b561749859c1d3facc086380da8aa2c3de 100644
--- a/entity/Email_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/Email_entity/recordcontainers/jdito/onInsert.js
@@ -5,7 +5,7 @@ import("system.vars");
 import("Email_lib");
 
 var contactId = vars.get("$param.ContactId_param");
-var eml = EmailUtils.openMailTemplate(
+var eml = EmailWritingUtils.openMailTemplate(
     vars.get("$field.RECIPIENT"), 
     EmployeeUtils.getCurrentContactId(), 
     vars.get("$field.DOCUMENT_TEMPLATE"), 
diff --git a/entity/EmployeeRole_entity/entityfields/role/displayValueProcess.js b/entity/EmployeeRole_entity/entityfields/role/displayValueProcess.js
index 388cdc2289d3f69159f7d2f346d983e0a338071c..3f92b2d22659c0b37d58f51750ddfcb1eda385c9 100644
--- a/entity/EmployeeRole_entity/entityfields/role/displayValueProcess.js
+++ b/entity/EmployeeRole_entity/entityfields/role/displayValueProcess.js
@@ -3,7 +3,7 @@ import("system.vars");
 import("system.tools");
 
 var allRoles = tools.getAllRoles();
-var roleTitle = vars.get("$this.value");
+var roleTitle = vars.get("$field.ROLE");
 if (roleTitle in allRoles)
     roleTitle = allRoles[roleTitle][0];
 
diff --git a/entity/Employee_entity/Employee_entity.aod b/entity/Employee_entity/Employee_entity.aod
index 16747940d818c1837cc984e1b5775d370bb1ea49..710e72e1084548fd73238c4d4248fac4ea05fe14 100644
--- a/entity/Employee_entity/Employee_entity.aod
+++ b/entity/Employee_entity/Employee_entity.aod
@@ -250,6 +250,12 @@
           <fieldName>EmployeeInvolved</fieldName>
           <isConsumer v="false" />
         </entityDependency>
+        <entityDependency>
+          <name>773cd8d0-c4e2-4e2e-b910-a1f4e4b87801</name>
+          <entityName>UnlinkedMailMappingWrapper_entity</entityName>
+          <fieldName>Employees</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
       </dependencies>
       <children>
         <entityParameter>
diff --git a/entity/Employee_entity/entityfields/contact_id/onValueChange.js b/entity/Employee_entity/entityfields/contact_id/onValueChange.js
index 26cac2df6b6b30fe19726b66e078f286f4d7400b..3aed4b3e8d16c7f7b496b2d05531b9532cf87f3a 100644
--- a/entity/Employee_entity/entityfields/contact_id/onValueChange.js
+++ b/entity/Employee_entity/entityfields/contact_id/onValueChange.js
@@ -7,7 +7,7 @@ import("system.vars");
 import("Sql_lib");
 import("Employee_lib");
 
-var contactId = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.CONTACT_ID"));
+var contactId = vars.get("local.value");
 if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
     && contactId)
 {
diff --git a/entity/Employee_entity/entityfields/email_address/onValidation.js b/entity/Employee_entity/entityfields/email_address/onValidation.js
index 764555dd20f91fd2aa2ffe24759cc4e9ae954a30..c9ac4ef72de7b9c1de1c4acc80300c00f671ea03 100644
--- a/entity/Employee_entity/entityfields/email_address/onValidation.js
+++ b/entity/Employee_entity/entityfields/email_address/onValidation.js
@@ -1,13 +1,13 @@
-import("Entity_lib");
-import("system.result");
-import("system.vars");
-import("system.tools");
-import("system.translate");
-
-var email = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.EMAIL_ADDRESS"));
-var isTaken = tools.getUserByAttribute(tools.EMAIL, [email]);
-isTaken = isTaken 
-    ? isTaken[tools.NAME] != vars.get("$field.UID")
-    : false;
-if (email && isTaken)
+import("Entity_lib");
+import("system.result");
+import("system.vars");
+import("system.tools");
+import("system.translate");
+
+var email = vars.get("local.value");
+var isTaken = tools.getUserByAttribute(tools.EMAIL, [email]);
+isTaken = isTaken 
+    ? isTaken[tools.NAME] != vars.get("$field.UID")
+    : false;
+if (email && isTaken)
     result.string(translate.text("Email must be unique!"));
\ No newline at end of file
diff --git a/entity/Employee_entity/entityfields/title/onValidation.js b/entity/Employee_entity/entityfields/title/onValidation.js
index c2f5d678bf70ff8cd9f8b9ae68c94ea9eef3dfe3..90091b0551710d07ce191daaf18db8a5d88e83ca 100644
--- a/entity/Employee_entity/entityfields/title/onValidation.js
+++ b/entity/Employee_entity/entityfields/title/onValidation.js
@@ -1,17 +1,17 @@
-import("system.translate");
-import("system.neon");
-import("system.result");
-import("system.vars");
-import("system.tools");
-import("Entity_lib");
-
-var title = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.TITLE"));
-var isOldTitle = false;
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
-{
-    let oldTitle = tools.getUserByAttribute(tools.NAME, [vars.get("$field.UID")], tools.PROFILE_TITLE);
-    oldTitle = oldTitle && oldTitle[tools.TITLE];
-    isOldTitle = title == oldTitle;
-}
-if (!isOldTitle && title != "" && tools.existUsers(title))
+import("system.translate");
+import("system.neon");
+import("system.result");
+import("system.vars");
+import("system.tools");
+import("Entity_lib");
+
+var title = vars.get("local.value");
+var isOldTitle = false;
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
+{
+    let oldTitle = tools.getUserByAttribute(tools.NAME, [vars.get("$field.UID")], tools.PROFILE_TITLE);
+    oldTitle = oldTitle && oldTitle[tools.TITLE];
+    isOldTitle = title == oldTitle;
+}
+if (!isOldTitle && title != "" && tools.existUsers(title))
     result.string(translate.text("Username already exists!"));
\ No newline at end of file
diff --git a/entity/Forecast_entity/entityfields/date_start/valueProcess.js b/entity/Forecast_entity/entityfields/date_start/valueProcess.js
index f7576b74fcf4e58d5a6e9b1098994ba76e9b3ef1..072560acb2f89d72012c5d3539c293cbf02b86a8 100644
--- a/entity/Forecast_entity/entityfields/date_start/valueProcess.js
+++ b/entity/Forecast_entity/entityfields/date_start/valueProcess.js
@@ -1,9 +1,9 @@
-import("system.result");
-import("system.vars");
-import("system.neon");
-import("Date_lib");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
-{
-    result.string(DateUtils.getTodayUTC());
+import("system.result");
+import("system.vars");
+import("system.neon");
+import("Date_lib");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+{
+    result.string(DateUtils.getTodayUTC());
 }
\ No newline at end of file
diff --git a/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod b/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod
index b8c02ae79bc5f5130103f832df4d2dd04e89d205..770faadea2c766788b2025b061f66e924a272781 100644
--- a/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod
+++ b/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod
@@ -34,6 +34,10 @@
       <mandatory v="true" />
       <displayValueProcess>%aditoprj%/entity/KeywordAttributeRelation_entity/entityfields/ab_keyword_attribute_id/displayValueProcess.js</displayValueProcess>
       <onValueChange>%aditoprj%/entity/KeywordAttributeRelation_entity/entityfields/ab_keyword_attribute_id/onValueChange.js</onValueChange>
+      <onValueChangeTypes>
+        <element>MASK</element>
+        <element>PROCESS_SETVALUE</element>
+      </onValueChangeTypes>
     </entityField>
     <entityField>
       <name>AB_KEYWORD_ENTRY_ID</name>
diff --git a/entity/KeywordAttributeRelation_entity/entityfields/valueproxy/onValueChange.js b/entity/KeywordAttributeRelation_entity/entityfields/valueproxy/onValueChange.js
index a7be1f9f79d40b07b0c63110ff6feac8cd30d8f8..3ee601ff33d6e21bd26fcfb138ba550d96036322 100644
--- a/entity/KeywordAttributeRelation_entity/entityfields/valueproxy/onValueChange.js
+++ b/entity/KeywordAttributeRelation_entity/entityfields/valueproxy/onValueChange.js
@@ -3,7 +3,7 @@ import("system.vars");
 import("Entity_lib");
 
 var type = vars.get("$field.attributeType");
-var value = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.valueProxy"));
+var value = vars.get("$local.value");
 switch (type)
 {
     case "BOOL_VALUE":
diff --git a/entity/KeywordAttribute_entity/entityfields/name/onValidation.js b/entity/KeywordAttribute_entity/entityfields/name/onValidation.js
index 6a2c9b1a35a48af4deb4794848269fca517e8b50..8711e91f305852080a4d2c2b093e33b85a04c0e9 100644
--- a/entity/KeywordAttribute_entity/entityfields/name/onValidation.js
+++ b/entity/KeywordAttribute_entity/entityfields/name/onValidation.js
@@ -13,7 +13,7 @@ var validation = (function(){
     var container = vars.get("$field.CONTAINER");
     if (container == "")
         return null;
-    var name = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.NAME"));
+    var name = vars.get("local.value");
     if (name == "")
         return null;
     
diff --git a/entity/KeywordEntry_entity/entityfields/keyid/onValidation.js b/entity/KeywordEntry_entity/entityfields/keyid/onValidation.js
index a0830f5196463702be757aa76d46e9b3d3c1c8f4..c617b930c473204ff932028051fbe2c1faccaa75 100644
--- a/entity/KeywordEntry_entity/entityfields/keyid/onValidation.js
+++ b/entity/KeywordEntry_entity/entityfields/keyid/onValidation.js
@@ -6,7 +6,7 @@ import("Sql_lib");
 import("Entity_lib");
 
 var container = vars.get("$field.CONTAINER");
-var keyId = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.KEYID")).trim();
+var keyId = vars.get("local.value").trim();
 
 //a KEY has always to be unique within one container and since the user can specify the key on insert we've to ensure that it's unique
 if (container && keyId)
diff --git a/entity/KeywordEntry_entity/entityfields/keyid/valueProcess.js b/entity/KeywordEntry_entity/entityfields/keyid/valueProcess.js
index 2fc41228ab188dc70af71478adb1d1afd7c1cb77..e0c496f09541a007c74f8acb385b21ae51fb44a6 100644
--- a/entity/KeywordEntry_entity/entityfields/keyid/valueProcess.js
+++ b/entity/KeywordEntry_entity/entityfields/keyid/valueProcess.js
@@ -3,5 +3,5 @@ import("system.result");
 import("system.neon");
 import("system.vars");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+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/LetterRecipient_entity/entityfields/contact_id/onValidation.js b/entity/LetterRecipient_entity/entityfields/contact_id/onValidation.js
index cd3b65e526da177350c9829a3fa222f493c1df9d..90813bac7ff03f5b86e747b684bd48dc2384ab29 100644
--- a/entity/LetterRecipient_entity/entityfields/contact_id/onValidation.js
+++ b/entity/LetterRecipient_entity/entityfields/contact_id/onValidation.js
@@ -6,7 +6,7 @@ import("system.result");
 import("KeywordRegistry_basic");
 import("Entity_lib");
 
-var contactId = ProcessHandlingUtils.getOnValidationValue();
+var contactId = vars.get("local.value");
 if (SerialLetterUtils.isRecipient(vars.get("$field.SERIALLETTER_ID"), contactId))
     result.string(translate.text("The contact is already a recipient!"));
 if (ContactUtils.hasCommRestriction(contactId, $KeywordRegistry.communicationMediumCampaign$letter()))
diff --git a/entity/Member_entity/entityfields/decider/valueProcess.js b/entity/Member_entity/entityfields/decider/valueProcess.js
index 158a9a427401e0428fb203b103a374d9eb4b68c9..0c7813ac64d6597ae9dd37694b9c1dc8784b6284 100644
--- a/entity/Member_entity/entityfields/decider/valueProcess.js
+++ b/entity/Member_entity/entityfields/decider/valueProcess.js
@@ -2,7 +2,7 @@ import("system.result");
 import("system.neon");
 import("system.vars");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     result.string("0");
 }
\ No newline at end of file
diff --git a/entity/Notification_entity/entityfields/state/displayValueProcess.js b/entity/Notification_entity/entityfields/state/displayValueProcess.js
index 2949bf1ee7fe19f3a377bf38a6fc31c4192d3c22..821d9d45de78b483fa133576251beae4f9388f91 100644
--- a/entity/Notification_entity/entityfields/state/displayValueProcess.js
+++ b/entity/Notification_entity/entityfields/state/displayValueProcess.js
@@ -3,7 +3,7 @@ import("system.translate");
 import("system.result");
 import("system.vars");
 
-var value = vars.get("$this.value");
+var value = vars.get("$field.STATE");
 
 switch(value)
 {
diff --git a/entity/ObjectRelationType_entity/entityfields/icon/valueProcess.js b/entity/ObjectRelationType_entity/entityfields/icon/valueProcess.js
index baceaf10d4f15fd4c3ebfa98d86bb557ea630041..9719f33bf3aa06c3472cbe7572a478a27771e330 100644
--- a/entity/ObjectRelationType_entity/entityfields/icon/valueProcess.js
+++ b/entity/ObjectRelationType_entity/entityfields/icon/valueProcess.js
@@ -2,5 +2,5 @@ import("system.neon");
 import("system.vars");
 import("system.result");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
     result.string("VAADIN:CUBE");
\ No newline at end of file
diff --git a/entity/ObjectTree_entity/entityfields/objectrelationtypeid/onValueChange.js b/entity/ObjectTree_entity/entityfields/objectrelationtypeid/onValueChange.js
index 9264282cd7b4f9b9dca1cdd33aff00bb63064dd5..28182c2e1cddb274b7ea6b797f903764a9a66515 100644
--- a/entity/ObjectTree_entity/entityfields/objectrelationtypeid/onValueChange.js
+++ b/entity/ObjectTree_entity/entityfields/objectrelationtypeid/onValueChange.js
@@ -1,38 +1,3 @@
-import("system.vars");
-import("system.db");
-import("system.result");
 import("system.neon");
-import("Sql_lib");
-import("Entity_lib");
 
-var selectedObjectRelationTypeId = vars.exists("$field.selectedObjectRelationTypeIdProxy") ? vars.get("$field.selectedObjectRelationTypeIdProxy") : "";
-selectedObjectRelationTypeId = ProcessHandlingUtils.getOnValidationValue(selectedObjectRelationTypeId);
-
-var relationTypeData = db.array(db.ROW, SqlCondition.begin()
-                        .andPrepare("AB_OBJECTRELATIONTYPE.AB_OBJECTRELATIONTYPEID", selectedObjectRelationTypeId)
-                        .buildSql("select AB_OBJECTRELATIONTYPEID, OBJECT_TYPE, RELATION_TITLE, RELATION_TYPE, SIDE from AB_OBJECTRELATIONTYPE", "1=2"));
-
-if (relationTypeData[0])
-{
-    var otherRelationTypeData = db.array(db.ROW, SqlCondition.begin()
-                                    .andPrepare("AB_OBJECTRELATIONTYPE.RELATION_TYPE", relationTypeData[3])
-                                    .andPrepare("AB_OBJECTRELATIONTYPE.SIDE", (relationTypeData[4] == "1" ? "2" : "1"))
-                                    .buildSql("select AB_OBJECTRELATIONTYPEID, OBJECT_TYPE, RELATION_TITLE, RELATION_TYPE, SIDE from AB_OBJECTRELATIONTYPE", "1=2"))
-    if (!otherRelationTypeData[0])
-    {
-        otherRelationTypeData = relationTypeData;
-    }
-    
-    if (relationTypeData[4] == "2")
-    {
-        //neon.setFieldValue("$field.AB_OBJECTRELATIONTYPE2", relationTypeData[0]);
-        //neon.setFieldValue("$field.AB_OBJECTRELATIONTYPE1", otherRelationTypeData[0]);
-    }
-    else if (relationTypeData[4] == "1")
-    {
-        //neon.setFieldValue("$field.AB_OBJECTRELATIONTYPE1", relationTypeData[0]);
-        //neon.setFieldValue("$field.AB_OBJECTRELATIONTYPE2", otherRelationTypeData[0]);
-    }
-    
-   // neon.setFieldValue("$field.MySide", otherRelationTypeData[4]);
-}
+neon.setFieldValue("$field.TARGET_ID", "");
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/chosenaddress/displayValueProcess.js b/entity/Offer_entity/entityfields/chosenaddress/displayValueProcess.js
index 698ddd21921ba4623f9eeae0c1a61f579da714f5..7bef71f89d75304d3bed9240efe3059ee5112dee 100644
--- a/entity/Offer_entity/entityfields/chosenaddress/displayValueProcess.js
+++ b/entity/Offer_entity/entityfields/chosenaddress/displayValueProcess.js
@@ -2,4 +2,4 @@ import("system.vars");
 import("PostalAddress_lib");
 import("system.result");
 
-result.string(AddressUtils.getFormattedOnlineAddressById(vars.get("$this.value")))
\ No newline at end of file
+result.string(AddressUtils.getFormattedOnlineAddressById(vars.get("$field.ChosenAddress")))
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/chosenaddress/onValueChange.js b/entity/Offer_entity/entityfields/chosenaddress/onValueChange.js
index e27804413bf71f873429b24b7a2865b03a23475b..c5042eb3c792dc79cbcb37089325e653139870f5 100644
--- a/entity/Offer_entity/entityfields/chosenaddress/onValueChange.js
+++ b/entity/Offer_entity/entityfields/chosenaddress/onValueChange.js
@@ -3,7 +3,7 @@ import("system.neon");
 import("PostalAddress_lib");
 import("Entity_lib");
 
-var newAddressId = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.ChosenAddress"));
+var newAddressId = vars.get("local.value");
 
 if (newAddressId)
 {
diff --git a/entity/Offer_entity/entityfields/contact_id/onValidation.js b/entity/Offer_entity/entityfields/contact_id/onValidation.js
index ba0b5ac64592823f2c7ffdf581644839c9e7691c..98c4fef71d31b5027c234773c7223421117a54a6 100644
--- a/entity/Offer_entity/entityfields/contact_id/onValidation.js
+++ b/entity/Offer_entity/entityfields/contact_id/onValidation.js
@@ -6,7 +6,7 @@
 //import("Entity_lib");
 //import("Contact_lib");
 //
-//if (ContactUtils.getContactTypeByContactId(ProcessHandlingUtils.getOnValidationValue(vars.get("$field.CONTACT_ID"))) != 2 && ContextUtils.getCountByContactId(vars.get("$field.OBJECT_TYPE"), ProcessHandlingUtils.getOnValidationValue(vars.get("$field.CONTACT_ID"))) == 0) {
-//    logging.log(ContextUtils.getCountByContactId(vars.get("$field.OBJECT_TYPE"), ProcessHandlingUtils.getOnValidationValue(vars.get("$field.CONTACT_ID"))));
+//if (ContactUtils.getContactTypeByContactId(vars.get("$local.value")) != 2 && ContextUtils.getCountByContactId(vars.get("$field.OBJECT_TYPE"), vars.get("$local.value")) == 0) {
+//    logging.log(ContextUtils.getCountByContactId(vars.get("$field.OBJECT_TYPE"), vars.get("local.value")));
 //    result.string(translate.text("This contact has no possible link."))
 //}
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/contact_id/onValueChange.js b/entity/Offer_entity/entityfields/contact_id/onValueChange.js
index cc8fab26f942a1a6e83f581c2e9c26bf57b72903..c90065cca07269ff73a623755b297c7f4531b442 100644
--- a/entity/Offer_entity/entityfields/contact_id/onValueChange.js
+++ b/entity/Offer_entity/entityfields/contact_id/onValueChange.js
@@ -6,7 +6,7 @@ import("Util_lib");
 import("Entity_lib");
 import("Contact_lib");
 
-var contactid = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.CONTACT_ID"));
+var contactid = vars.get("local.value");
 if(contactid != "")
 {
     //Language Preset
diff --git a/entity/Offer_entity/entityfields/contact_id/valueProcess.js b/entity/Offer_entity/entityfields/contact_id/valueProcess.js
index b863ff7acbd9288619e659d702561f52db3cafa0..82e4042d04ee5e0a82d63848e74e053985eaab2f 100644
--- a/entity/Offer_entity/entityfields/contact_id/valueProcess.js
+++ b/entity/Offer_entity/entityfields/contact_id/valueProcess.js
@@ -5,7 +5,7 @@ import("system.vars");
 import("Sql_lib");
 import("Context_lib");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 var contactId = "";
 if ((!vars.exists("$param.ContactId_param") || !vars.get("$param.ContactId_param")) 
     && (vars.exists("$param.ObjectType_param") 
diff --git a/entity/Offer_entity/entityfields/currency/valueProcess.js b/entity/Offer_entity/entityfields/currency/valueProcess.js
index 2f2451289c947c75e2bba4dcdb3f224de3c01881..bd7b097a841c4b70a17700906fb733cf7d06a330 100644
--- a/entity/Offer_entity/entityfields/currency/valueProcess.js
+++ b/entity/Offer_entity/entityfields/currency/valueProcess.js
@@ -7,7 +7,7 @@ if (vars.exists("$param.OfferCurrency_param") && vars.get("$param.OfferCurrency_
 {
     result.string(vars.get("$param.OfferCurrency_param"));
 }
-else if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+else if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     result.string($KeywordRegistry.currency$eur());
 }
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/language/valueProcess.js b/entity/Offer_entity/entityfields/language/valueProcess.js
index 826184267b67f23cecfd90a51ce0ee526800072a..07ae010d4acde2cafc0da5475aaa9f459b5db105 100644
--- a/entity/Offer_entity/entityfields/language/valueProcess.js
+++ b/entity/Offer_entity/entityfields/language/valueProcess.js
@@ -6,7 +6,7 @@ if (vars.exists("$param.OfferLanguage_param") && vars.get("$param.OfferLanguage_
 {
     result.string(vars.get("$param.OfferLanguage_param"));
 }
-else if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+else if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     result.string("deu");
 }
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/lettersalutation/valueProcess.js b/entity/Offer_entity/entityfields/lettersalutation/valueProcess.js
index 2c0266cbac1c8c8e575ade5d92b84fba9d7c474a..c3b78386885faaaf9b3dcfe18c659d6bb76d9c46 100644
--- a/entity/Offer_entity/entityfields/lettersalutation/valueProcess.js
+++ b/entity/Offer_entity/entityfields/lettersalutation/valueProcess.js
@@ -3,7 +3,7 @@ import("system.neon");
 import("system.vars");
 import("Address_lib");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value")) 
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) 
 {
     var addrobj = new AddrObject(vars.get("$field.CONTACT_ID"));
     var salutation = addrobj.getFormattedAddress(false, "{letter_salutation},");
diff --git a/entity/Offer_entity/entityfields/net/displayValueProcess.js b/entity/Offer_entity/entityfields/net/displayValueProcess.js
index b1c561c1f00014cbcd0669f0d810bd9fdb5ba052..450ae0cfd9fa1701eeb4d4e7c049a3c8fb8fc7a0 100644
--- a/entity/Offer_entity/entityfields/net/displayValueProcess.js
+++ b/entity/Offer_entity/entityfields/net/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("system.translate");
 import("system.result");
 
-result.string(NumberUtils.formatWithCurrency(vars.get("$this.value"), translate.text("#,##0.00"), vars.get("$field.CURRENCY")));
\ No newline at end of file
+result.string(NumberUtils.formatWithCurrency(vars.get("$field.NET"), translate.text("#,##0.00"), vars.get("$field.CURRENCY")));
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/object_rowid/displayValueProcess.js b/entity/Offer_entity/entityfields/object_rowid/displayValueProcess.js
index 56d86282f48b1a4469aa61f7817b24edde6e5123..fe2b7c72502d9937add9b539ed38483e6ca4bd51 100644
--- a/entity/Offer_entity/entityfields/object_rowid/displayValueProcess.js
+++ b/entity/Offer_entity/entityfields/object_rowid/displayValueProcess.js
@@ -4,7 +4,7 @@ import("system.db");
 import("system.result");
 import("Context_lib");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value")) {
+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"))));
diff --git a/entity/Offer_entity/entityfields/object_type/valueProcess.js b/entity/Offer_entity/entityfields/object_type/valueProcess.js
index 2ef4eb50b1095a48985b177800f92eb867078128..daa858c3b8f879a069f5a131a3e0e9f433345f1f 100644
--- a/entity/Offer_entity/entityfields/object_type/valueProcess.js
+++ b/entity/Offer_entity/entityfields/object_type/valueProcess.js
@@ -3,7 +3,7 @@ import("system.vars");
 import("system.result");
 import("Context_lib")
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     if (vars.exists("$param.ObjectType_param") && vars.get("$param.ObjectType_param"))
     {
diff --git a/entity/Offer_entity/entityfields/offercode/onValidation.js b/entity/Offer_entity/entityfields/offercode/onValidation.js
index 3b9c0b76f65fa2b8ae4026d17b1e78d5197d919f..4d9d2f8a307e5bfe834ba5defbbe845b46d279fd 100644
--- a/entity/Offer_entity/entityfields/offercode/onValidation.js
+++ b/entity/Offer_entity/entityfields/offercode/onValidation.js
@@ -8,7 +8,7 @@ import("Entity_lib");
 
 if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW
     && !vars.exists("$param.OfferCode_param")
-    && !OfferUtils.validateOfferNumber(ProcessHandlingUtils.getOnValidationValue(vars.get("$field.OFFERCODE"))) )
+    && !OfferUtils.validateOfferNumber(vars.get("local.value")) )
 {
     vars.set( "$field.OFFERCODE", OfferUtils.getNextOfferNumber().toString() );
 }
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/salesprojects/children/contactid_param/valueProcess.js b/entity/Offer_entity/entityfields/salesprojects/children/contactid_param/valueProcess.js
index 9232f51b2e090002d80c469239ab003444411400..dd50ed1f48cd0a080b399dbe7c5eb4cd6aa579e0 100644
--- a/entity/Offer_entity/entityfields/salesprojects/children/contactid_param/valueProcess.js
+++ b/entity/Offer_entity/entityfields/salesprojects/children/contactid_param/valueProcess.js
@@ -1,5 +1,5 @@
-import("system.vars");
-import("system.result");
-import("Entity_lib");
-
-result.string(ProcessHandlingUtils.getOnValidationValue(vars.get("$field.CONTACT_ORG_ID")));
+import("system.vars");
+import("system.result");
+import("Entity_lib");
+
+result.string(vars.get("local.value"));
diff --git a/entity/Offer_entity/entityfields/totalgross/displayValueProcess.js b/entity/Offer_entity/entityfields/totalgross/displayValueProcess.js
index b1c561c1f00014cbcd0669f0d810bd9fdb5ba052..7e05663a8bc4754d820b79c99b32536c38cb3916 100644
--- a/entity/Offer_entity/entityfields/totalgross/displayValueProcess.js
+++ b/entity/Offer_entity/entityfields/totalgross/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("system.translate");
 import("system.result");
 
-result.string(NumberUtils.formatWithCurrency(vars.get("$this.value"), translate.text("#,##0.00"), vars.get("$field.CURRENCY")));
\ No newline at end of file
+result.string(NumberUtils.formatWithCurrency(vars.get("$field.TotalGross"), translate.text("#,##0.00"), vars.get("$field.CURRENCY")));
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/vat/displayValueProcess.js b/entity/Offer_entity/entityfields/vat/displayValueProcess.js
index b1c561c1f00014cbcd0669f0d810bd9fdb5ba052..47ebfd7ecabcff3e202bfc72a540623de1e484fd 100644
--- a/entity/Offer_entity/entityfields/vat/displayValueProcess.js
+++ b/entity/Offer_entity/entityfields/vat/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("system.translate");
 import("system.result");
 
-result.string(NumberUtils.formatWithCurrency(vars.get("$this.value"), translate.text("#,##0.00"), vars.get("$field.CURRENCY")));
\ No newline at end of file
+result.string(NumberUtils.formatWithCurrency(vars.get("$field.VAT"), translate.text("#,##0.00"), vars.get("$field.CURRENCY")));
\ No newline at end of file
diff --git a/entity/Offeritem_entity/entityfields/discount/onValidation.js b/entity/Offeritem_entity/entityfields/discount/onValidation.js
index 2864ac016f3a9b00e8cc491bcf3fac9204e2ec90..595a5d9aae549242aaa2246e2e4b6e6d602249a0 100644
--- a/entity/Offeritem_entity/entityfields/discount/onValidation.js
+++ b/entity/Offeritem_entity/entityfields/discount/onValidation.js
@@ -3,7 +3,7 @@ import("system.vars");
 import("Util_lib");
 import("Entity_lib");
 
-var value = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.DISCOUNT"));
+var value = vars.get("local.value");
 var validationResult = NumberUtils.validateIsBetweenFloat("Discount", value, 0, 100);
 
 if (validationResult)
diff --git a/entity/Offeritem_entity/entityfields/price/displayValueProcess.js b/entity/Offeritem_entity/entityfields/price/displayValueProcess.js
index f9efef77b57bed78b2a0f2694905aed7cf5957f0..8cf3fa67d2e1761ddf525f8535cb788f057d7dbf 100644
--- a/entity/Offeritem_entity/entityfields/price/displayValueProcess.js
+++ b/entity/Offeritem_entity/entityfields/price/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("system.translate");
 import("system.result");
 
-result.string(NumberUtils.formatWithCurrency(vars.get("$this.value"), translate.text("#,##0.00"), vars.get("$param.Currency_param")));
\ No newline at end of file
+result.string(NumberUtils.formatWithCurrency(vars.get("$field.PRICE"), translate.text("#,##0.00"), vars.get("$param.Currency_param")));
\ No newline at end of file
diff --git a/entity/Offeritem_entity/entityfields/product_id/onValueChange.js b/entity/Offeritem_entity/entityfields/product_id/onValueChange.js
index b3cc01ab49bbd4ddc910037d3319e4ebb11ce25b..6f96be4201ed5ce7eda37e4f6b7225bd3c07393e 100644
--- a/entity/Offeritem_entity/entityfields/product_id/onValueChange.js
+++ b/entity/Offeritem_entity/entityfields/product_id/onValueChange.js
@@ -8,7 +8,7 @@ import("Util_lib");
 import("Entity_lib");
 import("Attribute_lib");
 
-var pid = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.PRODUCT_ID"));
+var pid = vars.get("local.value");
 if(pid != "")
 {
     var currency = vars.exists("$param.Currency_param") ? vars.get("$param.Currency_param") : "";
diff --git a/entity/Offeritem_entity/entityfields/quantity/onValidation.js b/entity/Offeritem_entity/entityfields/quantity/onValidation.js
index a7fe04aaf506c2edfba1e2d74b644c3da785a6d1..0e56a1cc6269ecd23927fb2ef9746b2cc41b0c03 100644
--- a/entity/Offeritem_entity/entityfields/quantity/onValidation.js
+++ b/entity/Offeritem_entity/entityfields/quantity/onValidation.js
@@ -3,8 +3,7 @@ import("system.result");
 import("system.vars");
 import("Entity_lib");
 
-var quatity = vars.exists("$field.QUANTITY") ? vars.get("$field.QUANTITY") : "";
-quatity = ProcessHandlingUtils.getOnValidationValue(quatity);
+var quatity = vars.get("$local.value") ? vars.get("$local.value") : "";
 
 if (parseInt(quatity) <= 0)
 {
diff --git a/entity/Offeritem_entity/entityfields/quantity/onValueChange.js b/entity/Offeritem_entity/entityfields/quantity/onValueChange.js
index 7b7bf4c94ca3639b0f3e6acf5c5950eaf5c9fc3b..ff55fb2f6178b863ff7edef2306dccd39c83efaf 100644
--- a/entity/Offeritem_entity/entityfields/quantity/onValueChange.js
+++ b/entity/Offeritem_entity/entityfields/quantity/onValueChange.js
@@ -8,7 +8,7 @@ import("Entity_lib");
 import("Attribute_lib");
 
 var pid = vars.get("$field.PRODUCT_ID");
-var newQuantity = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.QUANTITY"));
+var newQuantity = vars.get("local.value");
 if(pid != "" && newQuantity != "")
 {
     var curr = vars.exists("$param.Currency_param") ? vars.get("$param.Currency_param") : "";
@@ -28,8 +28,7 @@ if(pid != "" && newQuantity != "")
 
 
 //checks if the value is <= 0, if so fallback to 1
-var quatity = vars.exists("$field.QUANTITY") ? vars.get("$field.QUANTITY") : "";
-quatity = ProcessHandlingUtils.getOnValidationValue(quatity);
+var quatity = vars.get("$local.value") ? vars.get("$local.value") : "";
 
 if (parseInt(quatity) <= 0)
 {
diff --git a/entity/Offeritem_entity/entityfields/totalprice/displayValueProcess.js b/entity/Offeritem_entity/entityfields/totalprice/displayValueProcess.js
index f9efef77b57bed78b2a0f2694905aed7cf5957f0..add7660232f235687ce8f1aa31faed4207c47264 100644
--- a/entity/Offeritem_entity/entityfields/totalprice/displayValueProcess.js
+++ b/entity/Offeritem_entity/entityfields/totalprice/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("system.translate");
 import("system.result");
 
-result.string(NumberUtils.formatWithCurrency(vars.get("$this.value"), translate.text("#,##0.00"), vars.get("$param.Currency_param")));
\ No newline at end of file
+result.string(NumberUtils.formatWithCurrency(vars.get("$field.TotalPrice"), translate.text("#,##0.00"), vars.get("$param.Currency_param")));
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/contact_id/onValueChange.js b/entity/Order_entity/entityfields/contact_id/onValueChange.js
index 5ce78e6a9056118e8368c2c2d9acf2a620cfd52a..d2b9a2a8a4a879bab144368702d866d37a4f5da8 100644
--- a/entity/Order_entity/entityfields/contact_id/onValueChange.js
+++ b/entity/Order_entity/entityfields/contact_id/onValueChange.js
@@ -3,7 +3,7 @@ import("system.db");
 import("Util_lib");
 import("Entity_lib");
 
-var contactid = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.CONTACT_ID"));
+var contactid = vars.get("local.value");
 if(contactid != "")
 {
     var relData = db.array(db.ROW, "select LANGUAGE from CONTACT where CONTACTID = '" + contactid + "'");
diff --git a/entity/Order_entity/entityfields/net/displayValueProcess.js b/entity/Order_entity/entityfields/net/displayValueProcess.js
index b1c561c1f00014cbcd0669f0d810bd9fdb5ba052..450ae0cfd9fa1701eeb4d4e7c049a3c8fb8fc7a0 100644
--- a/entity/Order_entity/entityfields/net/displayValueProcess.js
+++ b/entity/Order_entity/entityfields/net/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("system.translate");
 import("system.result");
 
-result.string(NumberUtils.formatWithCurrency(vars.get("$this.value"), translate.text("#,##0.00"), vars.get("$field.CURRENCY")));
\ No newline at end of file
+result.string(NumberUtils.formatWithCurrency(vars.get("$field.NET"), translate.text("#,##0.00"), vars.get("$field.CURRENCY")));
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/salesordercode/onValidation.js b/entity/Order_entity/entityfields/salesordercode/onValidation.js
index 7913eec27eac7305ad380c20034691581d7fd08e..c63410c146bcc432613b0654d8132edc382aa78d 100644
--- a/entity/Order_entity/entityfields/salesordercode/onValidation.js
+++ b/entity/Order_entity/entityfields/salesordercode/onValidation.js
@@ -5,7 +5,7 @@ import("Order_lib");
 import("Entity_lib");
 
 if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW
-    && !OrderUtils.validateOrderNumber(ProcessHandlingUtils.getOnValidationValue(vars.get("$field.SALESORDERCODE"))))
+    && !OrderUtils.validateOrderNumber(vars.get("local.value")))
 {
     vars.set("$field.SALESORDERCODE", OrderUtils.getNextOrderNumber().toString());
 }
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/totalgross/displayValueProcess.js b/entity/Order_entity/entityfields/totalgross/displayValueProcess.js
index b1c561c1f00014cbcd0669f0d810bd9fdb5ba052..7e05663a8bc4754d820b79c99b32536c38cb3916 100644
--- a/entity/Order_entity/entityfields/totalgross/displayValueProcess.js
+++ b/entity/Order_entity/entityfields/totalgross/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("system.translate");
 import("system.result");
 
-result.string(NumberUtils.formatWithCurrency(vars.get("$this.value"), translate.text("#,##0.00"), vars.get("$field.CURRENCY")));
\ No newline at end of file
+result.string(NumberUtils.formatWithCurrency(vars.get("$field.TotalGross"), translate.text("#,##0.00"), vars.get("$field.CURRENCY")));
\ No newline at end of file
diff --git a/entity/Order_entity/entityfields/vat/displayValueProcess.js b/entity/Order_entity/entityfields/vat/displayValueProcess.js
index b1c561c1f00014cbcd0669f0d810bd9fdb5ba052..47ebfd7ecabcff3e202bfc72a540623de1e484fd 100644
--- a/entity/Order_entity/entityfields/vat/displayValueProcess.js
+++ b/entity/Order_entity/entityfields/vat/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("system.translate");
 import("system.result");
 
-result.string(NumberUtils.formatWithCurrency(vars.get("$this.value"), translate.text("#,##0.00"), vars.get("$field.CURRENCY")));
\ No newline at end of file
+result.string(NumberUtils.formatWithCurrency(vars.get("$field.VAT"), translate.text("#,##0.00"), vars.get("$field.CURRENCY")));
\ No newline at end of file
diff --git a/entity/Orderitem_entity/entityfields/price/displayValueProcess.js b/entity/Orderitem_entity/entityfields/price/displayValueProcess.js
index f9efef77b57bed78b2a0f2694905aed7cf5957f0..8cf3fa67d2e1761ddf525f8535cb788f057d7dbf 100644
--- a/entity/Orderitem_entity/entityfields/price/displayValueProcess.js
+++ b/entity/Orderitem_entity/entityfields/price/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("system.translate");
 import("system.result");
 
-result.string(NumberUtils.formatWithCurrency(vars.get("$this.value"), translate.text("#,##0.00"), vars.get("$param.Currency_param")));
\ No newline at end of file
+result.string(NumberUtils.formatWithCurrency(vars.get("$field.PRICE"), translate.text("#,##0.00"), vars.get("$param.Currency_param")));
\ No newline at end of file
diff --git a/entity/Orderitem_entity/entityfields/product_id/onValueChange.js b/entity/Orderitem_entity/entityfields/product_id/onValueChange.js
index b7739bae3a139c87c5804d78580226529f26c66a..a4607b977dda36678b0975d1b7091055d63a080a 100644
--- a/entity/Orderitem_entity/entityfields/product_id/onValueChange.js
+++ b/entity/Orderitem_entity/entityfields/product_id/onValueChange.js
@@ -4,7 +4,7 @@ import("Product_lib");
 import("Util_lib");
 import("Entity_lib");
 
-var pid = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.PRODUCT_ID"));
+var pid = vars.get("local.value");
 if(pid != "")
 {
     var curr = vars.exists("$param.Currency_param") ? vars.get("$param.Currency_param") : "";
diff --git a/entity/Orderitem_entity/entityfields/quantity/onValueChange.js b/entity/Orderitem_entity/entityfields/quantity/onValueChange.js
index f6cb10a4585c3152a0d78ab4bed989186d609b63..5fbe3952a65b6081c9a845b0ec03e4092303c315 100644
--- a/entity/Orderitem_entity/entityfields/quantity/onValueChange.js
+++ b/entity/Orderitem_entity/entityfields/quantity/onValueChange.js
@@ -5,7 +5,7 @@ import("Util_lib");
 import("Entity_lib");
 
 var pid = vars.get("$field.PRODUCT_ID");
-var newQuantity = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.QUANTITY"));
+var newQuantity = vars.get("local.value");
 if(pid != "" && newQuantity != "")
 {
     var curr = vars.exists("$param.Currency_param") ? vars.get("$param.Currency_param") : "";
diff --git a/entity/Orderitem_entity/entityfields/totalprice/displayValueProcess.js b/entity/Orderitem_entity/entityfields/totalprice/displayValueProcess.js
index f9efef77b57bed78b2a0f2694905aed7cf5957f0..add7660232f235687ce8f1aa31faed4207c47264 100644
--- a/entity/Orderitem_entity/entityfields/totalprice/displayValueProcess.js
+++ b/entity/Orderitem_entity/entityfields/totalprice/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("system.translate");
 import("system.result");
 
-result.string(NumberUtils.formatWithCurrency(vars.get("$this.value"), translate.text("#,##0.00"), vars.get("$param.Currency_param")));
\ No newline at end of file
+result.string(NumberUtils.formatWithCurrency(vars.get("$field.TotalPrice"), translate.text("#,##0.00"), vars.get("$param.Currency_param")));
\ No newline at end of file
diff --git a/entity/Orderitem_entity/entityfields/vat/displayValueProcess.js b/entity/Orderitem_entity/entityfields/vat/displayValueProcess.js
index 4991d571f2dca899a63b77eb17141e6f3072c719..9fbe06edf7c2e2de85392c110e9b55afc6431fc0 100644
--- a/entity/Orderitem_entity/entityfields/vat/displayValueProcess.js
+++ b/entity/Orderitem_entity/entityfields/vat/displayValueProcess.js
@@ -3,5 +3,5 @@ import("system.vars");
 import("system.translate");
 import("system.result");
 
-if (vars.get("$this.value"))
-    result.string(text.formatDouble(vars.get("$this.value"), "0.00") + "%");
\ No newline at end of file
+if (vars.get("$field.VAT"))
+    result.string(text.formatDouble(vars.get("$field.VAT"), "0.00") + "%");
\ No newline at end of file
diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod
index a2a3e3a443b5da3cb138567b08ca4c5f940c79c9..9fb0cca23a7261a5ff1041faee543438f1cc2b4d 100644
--- a/entity/Organisation_entity/Organisation_entity.aod
+++ b/entity/Organisation_entity/Organisation_entity.aod
@@ -771,6 +771,8 @@
         <entityActionField>
           <name>addToSerialLetter</name>
           <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/campaignactiongroup/children/addtoserialletter/onActionProcess.js</onActionProcess>
+          <isObjectAction v="false" />
+          <isSelectionAction v="true" />
           <iconId>VAADIN:ENVELOPES</iconId>
         </entityActionField>
       </children>
@@ -888,22 +890,27 @@
         <dbRecordFieldMapping>
           <name>ADDRESS_ID.value</name>
           <recordfield>CONTACT.ADDRESS_ID</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>CUSTOMERCODE.value</name>
           <recordfield>ORGANISATION.CUSTOMERCODE</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>INFO.value</name>
           <recordfield>ORGANISATION.INFO</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>LANGUAGE.value</name>
           <recordfield>CONTACT.LANGUAGE</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>NAME.value</name>
           <recordfield>ORGANISATION.NAME</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>ORGANISATIONID.value</name>
@@ -920,20 +927,24 @@
         <dbRecordFieldMapping>
           <name>STATUS.value</name>
           <recordfield>CONTACT.STATUS</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>TYPE.value</name>
           <recordfield>ORGANISATION.TYPE</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>STANDARD_EMAIL_COMMUNICATION.displayValue</name>
           <recordfield></recordfield>
           <expression>%aditoprj%/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.displayvalue/expression.js</expression>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>STANDARD_PHONE_COMMUNICATION.displayValue</name>
           <recordfield></recordfield>
           <expression>%aditoprj%/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.displayvalue/expression.js</expression>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>STATUS.displayValue</name>
@@ -979,6 +990,14 @@
           <name>PICTURE.value</name>
           <recordfield>ORGANISATION.PICTURE</recordfield>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STANDARD_EMAIL_COMMUNICATION.value</name>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STANDARD_PHONE_COMMUNICATION.value</name>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
       </recordFieldMappings>
     </dbRecordContainer>
     <indexRecordContainer>
diff --git a/entity/Organisation_entity/entityfields/newemail/onActionProcess.js b/entity/Organisation_entity/entityfields/newemail/onActionProcess.js
index 1da710e798dadf34a91770a741d4fa6dd837936f..cd7548548702791f8f81ec290a532fd19feaeafa 100644
--- a/entity/Organisation_entity/entityfields/newemail/onActionProcess.js
+++ b/entity/Organisation_entity/entityfields/newemail/onActionProcess.js
@@ -1,4 +1,4 @@
-import("system.vars");
-import("Email_lib");
-
-EmailUtils.openNewMail(vars.getString("$field.CONTACTID"));
\ No newline at end of file
+import("system.vars");
+import("Email_lib");
+
+EmailWritingUtils.openNewMail(vars.getString("$field.CONTACTID"));
\ No newline at end of file
diff --git a/entity/Organisation_entity/entityfields/status/valueProcess.js b/entity/Organisation_entity/entityfields/status/valueProcess.js
index ae552040e295ab248c1b09dfffe818f5b4d26612..13218c16514d81765c7e5dfd47c099996adfe063 100644
--- a/entity/Organisation_entity/entityfields/status/valueProcess.js
+++ b/entity/Organisation_entity/entityfields/status/valueProcess.js
@@ -1,7 +1,7 @@
-import("system.vars");
-import("system.result");
-import("system.neon");
-import("KeywordRegistry_basic");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+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.contactStatus$active());
\ No newline at end of file
diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod
index 79e3168c9d96eadd9b9224a7c71b0ee08e82a792..258a1f494bba1e93ab8143d97e17d3cb733d7e96 100644
--- a/entity/Person_entity/Person_entity.aod
+++ b/entity/Person_entity/Person_entity.aod
@@ -960,18 +960,22 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
         <dbRecordFieldMapping>
           <name>DATEOFBIRTH.value</name>
           <recordfield>PERSON.DATEOFBIRTH</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>FIRSTNAME.value</name>
           <recordfield>PERSON.FIRSTNAME</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>GENDER.value</name>
           <recordfield>PERSON.GENDER</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>LANGUAGE.value</name>
           <recordfield>CONTACT.LANGUAGE</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>PERSON_ID.value</name>
@@ -980,10 +984,12 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
         <dbRecordFieldMapping>
           <name>LASTNAME.value</name>
           <recordfield>PERSON.LASTNAME</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>MIDDLENAME.value</name>
           <recordfield>PERSON.MIDDLENAME</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>CONTACTID.value</name>
@@ -992,22 +998,27 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
         <dbRecordFieldMapping>
           <name>SALUTATION.value</name>
           <recordfield>PERSON.SALUTATION</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>TITLE.value</name>
           <recordfield>PERSON.TITLE</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>TITLESUFFIX.value</name>
           <recordfield>PERSON.TITLESUFFIX</recordfield>
+          <isFilterable v="false" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>ORGANISATION_ID.value</name>
           <recordfield>CONTACT.ORGANISATION_ID</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>REL_RELATIONSHIP.value</name>
           <recordfield>CONTACT.RELATIONSHIP</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>STANDARD_EMAIL_COMMUNICATION.displayValue</name>
@@ -1020,6 +1031,7 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
         <dbRecordFieldMapping>
           <name>ADDRESS_ID.value</name>
           <recordfield>CONTACT.ADDRESS_ID</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>ORGANISATION_ID.displayValue</name>
@@ -1044,18 +1056,22 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
         <dbRecordFieldMapping>
           <name>STATUS.value</name>
           <recordfield>CONTACT.STATUS</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>POSITION.value</name>
           <recordfield>CONTACT.POSITION</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>DEPARTMENT.value</name>
           <recordfield>CONTACT.DEPARTMENT</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>CONTACTROLE.value</name>
           <recordfield>CONTACT.CONTACTROLE</recordfield>
+          <isFilterable v="true" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>ORGANISATION_NAME.value</name>
@@ -1088,11 +1104,32 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact
         <dbRecordFieldMapping>
           <name>ADDRESS_ID.displayValue</name>
           <expression>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/address_id.displayvalue/expression.js</expression>
+          <isFilterable v="false" />
         </dbRecordFieldMapping>
         <dbRecordFieldMapping>
           <name>PICTURE.value</name>
           <recordfield>PERSON.PICTURE</recordfield>
         </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STANDARD_EMAIL_COMMUNICATION.value</name>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <dbRecordFieldMapping>
+          <name>STANDARD_PHONE_COMMUNICATION.value</name>
+          <isFilterable v="true" />
+        </dbRecordFieldMapping>
+        <consumerMapping>
+          <name>Organisations</name>
+          <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/organisations/filterConditionProcess.js</filterConditionProcess>
+          <isFilterable v="true" />
+          <filtertype>BASIC</filtertype>
+        </consumerMapping>
+        <consumerMapping>
+          <name>Activities</name>
+          <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js</filterConditionProcess>
+          <isFilterable v="true" />
+          <filtertype>EXTENDED</filtertype>
+        </consumerMapping>
       </recordFieldMappings>
     </dbRecordContainer>
     <indexRecordContainer>
diff --git a/entity/Person_entity/entityfields/dateofbirth/onValidation.js b/entity/Person_entity/entityfields/dateofbirth/onValidation.js
index 9da0a7497bd26a10627d66a89a67f3b863cde608..c21866aca67aec0fddeeb6bef3ff7b017023cc0f 100644
--- a/entity/Person_entity/entityfields/dateofbirth/onValidation.js
+++ b/entity/Person_entity/entityfields/dateofbirth/onValidation.js
@@ -4,6 +4,6 @@ import("system.vars");
 import("system.result");
 import("Entity_lib");
 
-var dob = ProcessHandlingUtils.getOnValidationValue();
+var dob = vars.get("local.value");
 if (Number(datetime.clearTime(dob)) > Number(vars.get("$sys.today")))
     result.string(translate.text("date of birth must not be in the future"));
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/language/valueProcess.js b/entity/Person_entity/entityfields/language/valueProcess.js
index 44dcbc3f04bb4fc3788fb890bf97db622e520008..8be4c28401d63e681cbff0a6929e7d472ebf9042 100644
--- a/entity/Person_entity/entityfields/language/valueProcess.js
+++ b/entity/Person_entity/entityfields/language/valueProcess.js
@@ -3,5 +3,5 @@ import("system.vars");
 import("system.db");
 import("system.result");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.getString("$this.value"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.getString("$this.value") == null)
     result.string("deu");
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/newemail/onActionProcess.js b/entity/Person_entity/entityfields/newemail/onActionProcess.js
index cd08784b868ada5103f3dbcb0bef4d984c823074..cd7548548702791f8f81ec290a532fd19feaeafa 100644
--- a/entity/Person_entity/entityfields/newemail/onActionProcess.js
+++ b/entity/Person_entity/entityfields/newemail/onActionProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("Email_lib");
 
-EmailUtils.openNewMail(vars.getString("$field.CONTACTID"));
\ No newline at end of file
+EmailWritingUtils.openNewMail(vars.getString("$field.CONTACTID"));
\ No newline at end of file
diff --git a/entity/Person_entity/entityfields/organisation_id/onValidation.js b/entity/Person_entity/entityfields/organisation_id/onValidation.js
index daba90e666e30baec493136b062e2f20f1f13cf4..d81b26a77cd1d51e4ab694eba2692239c65b9c2f 100644
--- a/entity/Person_entity/entityfields/organisation_id/onValidation.js
+++ b/entity/Person_entity/entityfields/organisation_id/onValidation.js
@@ -7,14 +7,8 @@ import("Contact_lib");
 if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW)
 {
     var personId = vars.getString("$field.PERSONID");
-    var organisationId = ProcessHandlingUtils.getOnValidationValue("$field.ORGANISATION_ID");
+    var organisationId = vars.get("$local.value");
     var contactId = vars.get("$field.CONTACTID");//in EDIT we have to exclude our own CONTACTID since we do not want a message for our own contactentry
-    
-    //workaround for organisationId: $local.value will return the name of the organisation which is not what we want
-    //but the field already contains the changed value; so let's load the field instead of the $local.value-variable
-    //this is a bug within the ADITO-kernel
-    //TODO: change the workaround behaviour when $local.value is retrieved correct
-    organisationId = vars.getString("$field.ORGANISATION_ID");
 
     var validationMsg = ContactUtils.validateIfAlreadyExists(personId, organisationId, contactId);
     if (validationMsg)
diff --git a/entity/Person_entity/entityfields/organisation_id/valueProcess.js b/entity/Person_entity/entityfields/organisation_id/valueProcess.js
index 6f44e6e6c6e93c530f1ba2446ad7cb026e04c6ce..7d921c6a57d7d9aa6d020ba2a6fe3eb3d1256be8 100644
--- a/entity/Person_entity/entityfields/organisation_id/valueProcess.js
+++ b/entity/Person_entity/entityfields/organisation_id/valueProcess.js
@@ -2,7 +2,7 @@ import("system.result");
 import("system.vars");
 import("system.neon");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     if (vars.exists("$param.OrgId_param") && vars.get("$param.OrgId_param") != null) 
     {
diff --git a/entity/Person_entity/entityfields/picture/displayValueProcess.js b/entity/Person_entity/entityfields/picture/displayValueProcess.js
index d6cead6d01f7240a25145197dbead464a0f0aaf6..2ad6742677b7f0a685be75783483833b35bebfc0 100644
--- a/entity/Person_entity/entityfields/picture/displayValueProcess.js
+++ b/entity/Person_entity/entityfields/picture/displayValueProcess.js
@@ -3,8 +3,8 @@ import("system.result");
 import("system.neon");
 
 if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW) {
-    if (vars.get("$this.value"))
-        result.string(vars.get("$this.value"));
+    if (vars.get("$field.PICTURE"))
+        result.string(vars.get("$field.PICTURE"));
     else
         result.string(vars.get("$param.AvatarText_param"));
 }
diff --git a/entity/Person_entity/entityfields/status/valueProcess.js b/entity/Person_entity/entityfields/status/valueProcess.js
index ab590b059440372f55b8c6d73d0c47eae06ca396..13218c16514d81765c7e5dfd47c099996adfe063 100644
--- a/entity/Person_entity/entityfields/status/valueProcess.js
+++ b/entity/Person_entity/entityfields/status/valueProcess.js
@@ -3,5 +3,5 @@ import("system.result");
 import("system.neon");
 import("KeywordRegistry_basic");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
     result.string($KeywordRegistry.contactStatus$active());
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/onDBInsert.js b/entity/Person_entity/recordcontainers/db/onDBInsert.js
index 157ddf8314dc0dcbcad97150a81ff52e25c50f7b..e9c6aaf6f72398df97745ae9e1ac87fd4e976392 100644
--- a/entity/Person_entity/recordcontainers/db/onDBInsert.js
+++ b/entity/Person_entity/recordcontainers/db/onDBInsert.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("DataPrivacy_lib");
 
-DataPrivacyUtils.notifyNeedDataPrivacyUpdate(vars.get("$field.CONTACTID"));
\ No newline at end of file
+DataPrivacyUtils.notifyNeedDataPrivacyUpdate(vars.get("$local.uid"));
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/onDBUpdate.js b/entity/Person_entity/recordcontainers/db/onDBUpdate.js
index 530c2f5d46b93d85f6ee09373a336219671aad49..243f0443fb13fbf4db44de0800dbf415e2e973da 100644
--- a/entity/Person_entity/recordcontainers/db/onDBUpdate.js
+++ b/entity/Person_entity/recordcontainers/db/onDBUpdate.js
@@ -1,3 +1,4 @@
+import("system.logging");
 import("DataPrivacy_lib");
 import("system.tools");
 import("system.vars");
@@ -6,8 +7,10 @@ import("Communication_lib");
 import("Entity_lib");
 import("StandardObject_lib");
 
+var rowdata =  vars.get("$local.rowdata");
+logging.log(JSON.stringify(rowdata, null, "\t"))
 // TODO: this is a workaround for missing possibility to react on changes of fields not connected to record Contqainer #1030023
-var uid = vars.get("$sys.uid");
+var uid = rowdata["CONTACT.CONTACTID"];
 FieldChanges.assimilateChangeAndDispose("$field.STANDARD_EMAIL_COMMUNICATION", function(state, value){
     CommUtil.setStandardMail(uid, value);
 });
@@ -16,8 +19,8 @@ FieldChanges.assimilateChangeAndDispose("$field.STANDARD_PHONE_COMMUNICATION", f
     CommUtil.setStandardPhone(uid, value);
 });
 
-new StandardObject("Address", vars.get("$field.ADDRESS_ID"), "Person", vars.get("$field.CONTACTID"))
-    .onPersonUpdate(vars.get("$field.ORGANISATION_ID"));
+new StandardObject("Address", rowdata["CONTACT.ADDRESS_ID"], "Person", uid)
+    .onPersonUpdate(rowdata["CONTACT.ORGANISATION_ID"]);
 
 var updates = [];
     
@@ -26,12 +29,15 @@ vars.get("$local.changed").forEach(function(fieldName) {
     switch (fieldName) {
         case "PERSON.FIRSTNAME":
         case "PERSON.LASTNAME":
-            var user = tools.getUserByAttribute(tools.CONTACTID, [vars.get("$field.CONTACTID")], tools.PROFILE_FULL);
-            user[tools.PARAMS][tools.FIRSTNAME] = vars.get("$field.FIRSTNAME");
-            user[tools.PARAMS][tools.LASTNAME] = vars.get("$field.LASTNAME");
-            tools.updateUser(user);
+            var user = tools.getUserByAttribute(tools.CONTACTID, [uid], tools.PROFILE_FULL);
+            if (user)
+            {
+                user[tools.PARAMS][tools.FIRSTNAME] = rowdata[fieldName];
+                user[tools.PARAMS][tools.LASTNAME] = rowdata[fieldName];
+                tools.updateUser(user);
+            }
             break;
     }
 })
 
-DataPrivacyUtils.notifyNeedDataPrivacyUpdate(vars.get("$field.CONTACTID"));
\ No newline at end of file
+DataPrivacyUtils.notifyNeedDataPrivacyUpdate(uid);
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b292f850f8af18154fac6b30ea88235192ed3eae
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/activities/filterConditionProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("system.result");
+
+var from = "CONTACT join ACTIVITYLINK on ACTIVITYLINK.OBJECT_ROWID = CONTACT.CONTACTID and ACTIVITYLINK.OBJECT_TYPE = 'Person' join ACTIVITY on ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID";
+
+
+result.string("PERSONID in (select CONTACT.PERSON_ID from " + from + " where " + vars.get("$local.condition")+ ")");
\ No newline at end of file
diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/organisations/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/organisations/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..839c81be84965ac009016c67636d4e43704f9dfb
--- /dev/null
+++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/organisations/filterConditionProcess.js
@@ -0,0 +1,7 @@
+import("system.vars");
+import("system.result");
+
+var from = "CONTACT join ORGANISATION on (ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID)";
+
+
+result.string("PERSONID in (select CONTACT.PERSON_ID from " + from + " where " + vars.get("$local.condition")+ ")");
\ No newline at end of file
diff --git a/entity/Prod2prod_entity/entityfields/takeprice/valueProcess.js b/entity/Prod2prod_entity/entityfields/takeprice/valueProcess.js
index a26e8321a9bc322bca5ef91f34b4d7628d796ee2..dc9a97223e617545f18ae934740a4f2c7012764a 100644
--- a/entity/Prod2prod_entity/entityfields/takeprice/valueProcess.js
+++ b/entity/Prod2prod_entity/entityfields/takeprice/valueProcess.js
@@ -2,5 +2,5 @@ import("system.vars");
 import("system.result");
 import("system.neon");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.getString("$this.value"))
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.getString("$this.value") == null)
     result.string("0");
\ No newline at end of file
diff --git a/entity/Product_entity/entityfields/picture/displayValueProcess.js b/entity/Product_entity/entityfields/picture/displayValueProcess.js
index 61071fa5de14d9b69e322e75eed3c546b8ab9e8b..95ecf3b8e6ea13af26782fa35711a7d1f6bdfb2d 100644
--- a/entity/Product_entity/entityfields/picture/displayValueProcess.js
+++ b/entity/Product_entity/entityfields/picture/displayValueProcess.js
@@ -3,8 +3,8 @@ import("system.result");
 import("system.neon");
 
 if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW) {
-    if (vars.get("$this.value"))
-        result.string(vars.get("$this.value"));
+    if (vars.get("$field.PICTURE"))
+        result.string(vars.get("$field.PICTURE"));
     else
         result.string(vars.get("$param.ProductText_param"));
 }
diff --git a/entity/Product_entity/entityfields/productcode/onValidation.js b/entity/Product_entity/entityfields/productcode/onValidation.js
index 1dc5b4f996393023dd1f9e0f4070aad491cf515b..81b90e9b479276bb7057bfd12d6890d50fdde20b 100644
--- a/entity/Product_entity/entityfields/productcode/onValidation.js
+++ b/entity/Product_entity/entityfields/productcode/onValidation.js
@@ -7,7 +7,7 @@ import("Entity_lib");
 
 var codeCount, productCode;
 
-productCode = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.PRODUCTCODE"));
+productCode = vars.get("local.value");
 codeCount = db.cell("select count(PRODUCTCODE) from PRODUCT where PRODUCTCODE = '" + productCode + "'"
                        + " and PRODUCTID <> '" + vars.get("$field.PRODUCTID") + "'");
 if(codeCount > 0)
diff --git a/entity/Product_entity/entityfields/unit/valueProcess.js b/entity/Product_entity/entityfields/unit/valueProcess.js
index 680bcb0016ceba4de1b98d2b92924a820ba2bc4d..4502026f046d1a80ea2ce3c4a2f3c6b625abc457 100644
--- a/entity/Product_entity/entityfields/unit/valueProcess.js
+++ b/entity/Product_entity/entityfields/unit/valueProcess.js
@@ -4,5 +4,5 @@ import("system.db");
 import("system.result");
 import("KeywordRegistry_basic");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.getString("$this.value"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.getString("$this.value") == null)
     result.string($KeywordRegistry.quantityUnit$pieces());
\ No newline at end of file
diff --git a/entity/Productprice_entity/entityfields/product_id/fieldIdProcess.js b/entity/Productprice_entity/entityfields/product_id/fieldIdProcess.js
index c354a6b460cbecf0233c20761c02c66415c20e72..6cd3c4544e56fa57ad04b119be620aa650f4a849 100644
--- a/entity/Productprice_entity/entityfields/product_id/fieldIdProcess.js
+++ b/entity/Productprice_entity/entityfields/product_id/fieldIdProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string (vars.get("$this.value"));
\ No newline at end of file
+result.string(vars.get("$this.value"));
\ No newline at end of file
diff --git a/entity/Productprice_entity/entityfields/valid_from/valueProcess.js b/entity/Productprice_entity/entityfields/valid_from/valueProcess.js
index fde00cab2ad74643d42064d1ae353c92972deeca..072560acb2f89d72012c5d3539c293cbf02b86a8 100644
--- a/entity/Productprice_entity/entityfields/valid_from/valueProcess.js
+++ b/entity/Productprice_entity/entityfields/valid_from/valueProcess.js
@@ -3,7 +3,7 @@ import("system.vars");
 import("system.neon");
 import("Date_lib");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     result.string(DateUtils.getTodayUTC());
 }
\ No newline at end of file
diff --git a/entity/Productprice_entity/entityfields/vat/onValidation.js b/entity/Productprice_entity/entityfields/vat/onValidation.js
index 463ab50e2073e791ddbacc028d50b9c1abc06589..e95e841a1fd4f5c5ab19e8358cca8efca492f7fe 100644
--- a/entity/Productprice_entity/entityfields/vat/onValidation.js
+++ b/entity/Productprice_entity/entityfields/vat/onValidation.js
@@ -3,7 +3,7 @@ import("system.vars");
 import("Util_lib");
 import("Entity_lib");
 
-var value = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.VAT"));
+var value = vars.get("local.value");
 
 var validationResult = NumberUtils.validateIsBetweenFloat("VAT", value, 0, 100);
 
diff --git a/entity/Productprice_entity/entityfields/vat/valueProcess.js b/entity/Productprice_entity/entityfields/vat/valueProcess.js
index d3ae757ad3cd88baacbe57711bcef341c43ea6f4..6a149abd471bbbe7fe5a7b63a8a15b98e43ff89d 100644
--- a/entity/Productprice_entity/entityfields/vat/valueProcess.js
+++ b/entity/Productprice_entity/entityfields/vat/valueProcess.js
@@ -1,6 +1,6 @@
-import("system.vars");
-import("system.result");
-import("system.neon");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
     result.string("0");
\ No newline at end of file
diff --git a/entity/SalesprojectForecast_entity/entityfields/date_start/valueProcess.js b/entity/SalesprojectForecast_entity/entityfields/date_start/valueProcess.js
index e2eb1642a6585c84aed1018bc17273b0b2b2f048..fc81fc3498b7b24b3ca94c69d034bdfd708ef5d2 100644
--- a/entity/SalesprojectForecast_entity/entityfields/date_start/valueProcess.js
+++ b/entity/SalesprojectForecast_entity/entityfields/date_start/valueProcess.js
@@ -1,11 +1,11 @@
-import("system.result");
-import("system.vars");
-import("system.neon");
-import("Date_lib");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
-{
-    result.string(DateUtils.getTodayUTC());
-}
-else
+import("system.result");
+import("system.vars");
+import("system.neon");
+import("Date_lib");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+{
+    result.string(DateUtils.getTodayUTC());
+}
+else
     result.string(vars.get("$this.value"));
\ No newline at end of file
diff --git a/entity/SalesprojectSource_entity/entityfields/entrydate/valueProcess.js b/entity/SalesprojectSource_entity/entityfields/entrydate/valueProcess.js
index 651bbe1ba274ee0bea9f70ef309afe11a883b175..4f2202c6ae0a7cf767176ab29c830936649489dc 100644
--- a/entity/SalesprojectSource_entity/entityfields/entrydate/valueProcess.js
+++ b/entity/SalesprojectSource_entity/entityfields/entrydate/valueProcess.js
@@ -3,5 +3,5 @@ import("system.vars");
 import("system.result");
 import("system.neon");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.getString("$this.value"))
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.getString("$this.value") == null)
     result.string(datetime.date());
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/enddate/valueProcess.js b/entity/Salesproject_entity/entityfields/enddate/valueProcess.js
index 4cfebdb8acb8403994a4c535f0319cca81bd7017..dd2908f617fb7c3700b361fd97933bd758d985cd 100644
--- a/entity/Salesproject_entity/entityfields/enddate/valueProcess.js
+++ b/entity/Salesproject_entity/entityfields/enddate/valueProcess.js
@@ -3,7 +3,7 @@ import("system.result");
 import("system.neon");
 import("Date_lib");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     result.string(DateUtils.getDateIncrementedByYears(DateUtils.getTodayUTC(), 1));
 }
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/phase/valueProcess.js b/entity/Salesproject_entity/entityfields/phase/valueProcess.js
index c8e9543ca52fa6a3dd2d2760ca1d551447bfc032..7ff3aa7c6b2ad21f43934b9e4ff5131980b35005 100644
--- a/entity/Salesproject_entity/entityfields/phase/valueProcess.js
+++ b/entity/Salesproject_entity/entityfields/phase/valueProcess.js
@@ -3,5 +3,5 @@ import("system.neon");
 import("system.vars");
 import("system.result");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
-    result.string($KeywordRegistry.salesprojectPhase$nqc()); //NQC
\ No newline at end of file
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+    result.string($KeywordRegistry.salesprojectPhase$nqc());
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/projectcode/onValidation.js b/entity/Salesproject_entity/entityfields/projectcode/onValidation.js
index 92d5d098b6ccc7ca75bbfd0b38a64c063c8d33d5..2c9020b283b0fdbbbd8053aa313d14b19c347bf8 100644
--- a/entity/Salesproject_entity/entityfields/projectcode/onValidation.js
+++ b/entity/Salesproject_entity/entityfields/projectcode/onValidation.js
@@ -6,7 +6,7 @@ import("Util_lib");
 import("Entity_lib");
 
 if( vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW
-    && !Salesproject.validateProjectNumber(ProcessHandlingUtils.getOnValidationValue(vars.get("$field.PROJECTCODE"))) )
+    && !Salesproject.validateProjectNumber(vars.get("local.value")) )
 {
     vars.set( "$field.PROJECTCODE", Salesproject.getNextProjectNumber().toString("1 = 1") );
 }
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/startdate/valueProcess.js b/entity/Salesproject_entity/entityfields/startdate/valueProcess.js
index e4ef3a804fc5b107cf7312e8133b2ee149882fdd..047e11fdb49fe7a57518e928bd5e6436d9f10065 100644
--- a/entity/Salesproject_entity/entityfields/startdate/valueProcess.js
+++ b/entity/Salesproject_entity/entityfields/startdate/valueProcess.js
@@ -3,7 +3,7 @@ import("system.result");
 import("system.neon");
 import("Date_lib");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     result.string(DateUtils.getTodayUTC());
 }
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/state/valueProcess.js b/entity/Salesproject_entity/entityfields/state/valueProcess.js
index a4457905d6e53c4ca6b3ac93001932fbdd6ae3c0..7da8d5f0142bc3fa41e1ca0b4d99c19194261594 100644
--- a/entity/Salesproject_entity/entityfields/state/valueProcess.js
+++ b/entity/Salesproject_entity/entityfields/state/valueProcess.js
@@ -3,5 +3,5 @@ import("system.neon");
 import("system.vars");
 import("system.result");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
     result.string($KeywordRegistry.salesprojectState$open()); //Open
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/volume/displayValueProcess.js b/entity/Salesproject_entity/entityfields/volume/displayValueProcess.js
index 679d5eb17d8ddfa54d8c8b068b22321548416e09..376c72c136a831f2fb6215c6474c1918fbc798de 100644
--- a/entity/Salesproject_entity/entityfields/volume/displayValueProcess.js
+++ b/entity/Salesproject_entity/entityfields/volume/displayValueProcess.js
@@ -3,4 +3,4 @@ import("system.vars");
 import("system.translate");
 import("system.result");
 
-result.string(NumberUtils.formatWithCurrency(vars.get("$this.value"), translate.text("#0"), translate.text("${EURO_SIGN}")));
\ No newline at end of file
+result.string(NumberUtils.formatWithCurrency(vars.get("$field.VOLUME"), translate.text("#0"), translate.text("${EURO_SIGN}")));
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/volume/onValidation.js b/entity/Salesproject_entity/entityfields/volume/onValidation.js
index bf0a8f97253cff58d9188c390b044ecc2f1c26d5..410b72014ab2ce31519900fc218a7e064e0a2b05 100644
--- a/entity/Salesproject_entity/entityfields/volume/onValidation.js
+++ b/entity/Salesproject_entity/entityfields/volume/onValidation.js
@@ -7,7 +7,7 @@ import("Entity_lib");
 // TODO: displayValue + contentType number crashes so we use TEXT and validate ourselve
 // Workaround for 1035861
 
-var volume =  ProcessHandlingUtils.getOnValidationValue(vars.get("$field.VOLUME"));
+var volume =  vars.get("local.value");
 var message = "";
 if (!/^\d+\.?\d*$/.test(volume))
     message = translate.text("Only numbers are allowed.");
diff --git a/entity/Salutation_entity/entityfields/sex/valueProcess.js b/entity/Salutation_entity/entityfields/sex/valueProcess.js
index de822d0de5f1aa434a54ff3b48d13a94613b0d55..ce31dcbede0d54a6db9b46ee1b4e0dbcb3b30752 100644
--- a/entity/Salutation_entity/entityfields/sex/valueProcess.js
+++ b/entity/Salutation_entity/entityfields/sex/valueProcess.js
@@ -3,7 +3,7 @@ import("system.vars");
 import("KeywordRegistry_basic");
 import("system.result");
 
-/*if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) && !vars.get("$this.value"))
+/*if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) && vars.get("$this.value") == null)
 {
     result.string($KeywordRegistry.personGender$other());
 }*/
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/SupportTicket_entity.aod b/entity/SupportTicket_entity/SupportTicket_entity.aod
index b5e3e6dd8591c73f6d4e30c6bc5ced712ccebb1c..75d3b975145ff68967e8f49d8cfc19e74cf1a9f3 100644
--- a/entity/SupportTicket_entity/SupportTicket_entity.aod
+++ b/entity/SupportTicket_entity/SupportTicket_entity.aod
@@ -158,7 +158,7 @@
       <dependency>
         <name>dependency</name>
         <entityName>Document_entity</entityName>
-        <fieldName>#PROVIDER</fieldName>
+        <fieldName>MainDocuments</fieldName>
       </dependency>
       <children>
         <entityParameter>
diff --git a/entity/SupportTicket_entity/contentTitleProcess.js b/entity/SupportTicket_entity/contentTitleProcess.js
index 42200983cd942d93065d3728601f40eb2cc2d4ad..d46871e0448b31bbfb5511705ca9f4ebcfffc3b6 100644
--- a/entity/SupportTicket_entity/contentTitleProcess.js
+++ b/entity/SupportTicket_entity/contentTitleProcess.js
@@ -1,4 +1,4 @@
 import("system.vars");
 import("system.result");
 
-result.string(vars.get("$field.TYPE.displayValue"))
\ No newline at end of file
+result.string(vars.get("$field.TICKETTYPE.displayValue"))
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/entityfields/task_editor_contact_id/displayValueProcess.js b/entity/SupportTicket_entity/entityfields/task_editor_contact_id/displayValueProcess.js
index 0dde82e7728286629b1c210326725aac2ebb92c5..40f8e064ba6a9d3248e9100abc4f52693effb034 100644
--- a/entity/SupportTicket_entity/entityfields/task_editor_contact_id/displayValueProcess.js
+++ b/entity/SupportTicket_entity/entityfields/task_editor_contact_id/displayValueProcess.js
@@ -2,7 +2,6 @@ import("system.result");
 import("system.vars");
 import("Contact_lib");
 
-var id = vars.get("$this.value");
 //show the simpel title since this will be later an employee-entry and therefore no organisation is needed
-var title = ContactUtils.getTitleByContactId(id);
+var title = ContactUtils.getTitleByContactId(vars.get("$field.TASK_EDITOR_CONTACT_ID"));
 result.string(title);
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/entityfields/task_maturity_date/valueProcess.js b/entity/SupportTicket_entity/entityfields/task_maturity_date/valueProcess.js
index f86620cd5deb97d5d66c61ef83d177d2da85f3ea..aefaa534ffadaee5803fd9278a26a25e2c8adff4 100644
--- a/entity/SupportTicket_entity/entityfields/task_maturity_date/valueProcess.js
+++ b/entity/SupportTicket_entity/entityfields/task_maturity_date/valueProcess.js
@@ -4,7 +4,7 @@ import("system.result");
 import("system.neon");
 import("system.vars");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     var startDate = vars.get("$field.TASK_START_DATE");
     var presetVal = eMath.addInt(startDate, datetime.ONE_WEEK);
diff --git a/entity/SupportTicket_entity/entityfields/task_requestor_contact_id/displayValueProcess.js b/entity/SupportTicket_entity/entityfields/task_requestor_contact_id/displayValueProcess.js
index 0dde82e7728286629b1c210326725aac2ebb92c5..35ee9d5af270f7b70e4827ca1717b9d96882cea6 100644
--- a/entity/SupportTicket_entity/entityfields/task_requestor_contact_id/displayValueProcess.js
+++ b/entity/SupportTicket_entity/entityfields/task_requestor_contact_id/displayValueProcess.js
@@ -2,7 +2,6 @@ import("system.result");
 import("system.vars");
 import("Contact_lib");
 
-var id = vars.get("$this.value");
-//show the simpel title since this will be later an employee-entry and therefore no organisation is needed
-var title = ContactUtils.getTitleByContactId(id);
+//show the simpel title since this is an employee-entry and therefore no organisation is needed
+var title = ContactUtils.getTitleByContactId(vars.get("$field.TASK_REQUESTOR_CONTACT_ID"));
 result.string(title);
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/entityfields/task_requestor_contact_id/valueProcess.js b/entity/SupportTicket_entity/entityfields/task_requestor_contact_id/valueProcess.js
index 1e62e7551ccb20b0b0d7aca34f64b6e448b5dda7..4711a17716cf559c48c73cd7ea780b2ffe5e2e03 100644
--- a/entity/SupportTicket_entity/entityfields/task_requestor_contact_id/valueProcess.js
+++ b/entity/SupportTicket_entity/entityfields/task_requestor_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)
+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/SupportTicket_entity/entityfields/task_start_date/valueProcess.js b/entity/SupportTicket_entity/entityfields/task_start_date/valueProcess.js
index 5b098ba003d06ee9125c54f3f53559b2155ea8e3..6ac754253490d29b5f2653fdbdc335e381b475aa 100644
--- a/entity/SupportTicket_entity/entityfields/task_start_date/valueProcess.js
+++ b/entity/SupportTicket_entity/entityfields/task_start_date/valueProcess.js
@@ -3,7 +3,7 @@ import("system.result");
 import("system.neon");
 import("system.vars");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     var presetVal = datetime.date();
     //TODO: depending on what happens in #1032274 we need to manually set the resolution to MINUTES or not (which means we've to set everything smaller than MINUTES (Seconds, etc.) to zero) 
diff --git a/entity/SupportTicket_entity/entityfields/task_status/valueProcess.js b/entity/SupportTicket_entity/entityfields/task_status/valueProcess.js
index caf782637394f5505b64eff69edd7685a80fabdc..b21b65e67884b19c3247e934aa7c8a00b3ca6b0f 100644
--- a/entity/SupportTicket_entity/entityfields/task_status/valueProcess.js
+++ b/entity/SupportTicket_entity/entityfields/task_status/valueProcess.js
@@ -3,7 +3,7 @@ import("system.result");
 import("system.neon");
 import("system.vars");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     result.string(TicketUtils.begin(vars.get("$field.TICKETTYPE")).getDefaultStatus());
 }
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/entityfields/task_type/valueProcess.js b/entity/SupportTicket_entity/entityfields/task_type/valueProcess.js
index 68c9898c516c39fd154e5c53f6e22ee2dd4e16e6..157831e6cbf022ac7d952e8367f39df6f89dd8c8 100644
--- a/entity/SupportTicket_entity/entityfields/task_type/valueProcess.js
+++ b/entity/SupportTicket_entity/entityfields/task_type/valueProcess.js
@@ -3,7 +3,7 @@ import("system.vars");
 import("system.neon");
 import("KeywordRegistry_basic");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     // Sets the type to "Task" as default value.
     result.string($KeywordRegistry.taskType$ticket());
diff --git a/entity/SupportTicket_entity/entityfields/tickettype/valueProcess.js b/entity/SupportTicket_entity/entityfields/tickettype/valueProcess.js
index c3e6ca34b7a1586f84141392adfffe8fb2b6dc38..d2dd15c5483608ffaceb4af7a6c7585431f24862 100644
--- a/entity/SupportTicket_entity/entityfields/tickettype/valueProcess.js
+++ b/entity/SupportTicket_entity/entityfields/tickettype/valueProcess.js
@@ -2,7 +2,7 @@ import("system.result");
 import("system.neon");
 import("system.vars");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     result.string(vars.get("$param.TicketType_param"));
 }
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/task_editor_contact_id.displayvalue/expression.js b/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/task_editor_contact_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..8e7ea35c7f489e257f771a9f67d1672d35817c4b
--- /dev/null
+++ b/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/task_editor_contact_id.displayvalue/expression.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("Person_lib");
+
+var subSql = PersUtils.getResolvingDisplaySubSql("TASK.EDITOR_CONTACT_ID");
+result.string(subSql);
\ No newline at end of file
diff --git a/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/task_requestor_contact_id.displayvalue/expression.js b/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/task_requestor_contact_id.displayvalue/expression.js
new file mode 100644
index 0000000000000000000000000000000000000000..10b4b9967c878d5caeccc5ca25a4d897570bc185
--- /dev/null
+++ b/entity/SupportTicket_entity/recordcontainers/db/recordfieldmappings/task_requestor_contact_id.displayvalue/expression.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("Person_lib");
+
+var subSql = PersUtils.getResolvingDisplaySubSql("TASK.REQUESTOR_CONTACT_ID");
+result.string(subSql);
\ No newline at end of file
diff --git a/entity/Task_entity/Task_entity.aod b/entity/Task_entity/Task_entity.aod
index 505dab0bc4e8aaed36eb6aac298e5caa3d1c6f49..94d957bc5f6450e133c5e62f1a75554aca80ab86 100644
--- a/entity/Task_entity/Task_entity.aod
+++ b/entity/Task_entity/Task_entity.aod
@@ -53,6 +53,7 @@
       <title>{$TASK_EDITOR}</title>
       <consumer>ContactEditors</consumer>
       <linkedContext>Person</linkedContext>
+      <mandatory v="true" />
       <displayValueProcess>%aditoprj%/entity/Task_entity/entityfields/editor_contact_id/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
diff --git a/entity/Task_entity/entityfields/documents/children/assignmentname_param/valueProcess.js b/entity/Task_entity/entityfields/documents/children/assignmentname_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/entity/Task_entity/entityfields/editor_contact_id/displayValueProcess.js b/entity/Task_entity/entityfields/editor_contact_id/displayValueProcess.js
index 0dde82e7728286629b1c210326725aac2ebb92c5..ad1d3c7d63b681688b3deaafd83db7a89b24dc03 100644
--- a/entity/Task_entity/entityfields/editor_contact_id/displayValueProcess.js
+++ b/entity/Task_entity/entityfields/editor_contact_id/displayValueProcess.js
@@ -2,7 +2,7 @@ import("system.result");
 import("system.vars");
 import("Contact_lib");
 
-var id = vars.get("$this.value");
+var id = vars.get("$field.EDITOR_CONTACT_ID");
 //show the simpel title since this will be later an employee-entry and therefore no organisation is needed
 var title = ContactUtils.getTitleByContactId(id);
 result.string(title);
\ No newline at end of file
diff --git a/entity/Task_entity/entityfields/maturity_date/valueProcess.js b/entity/Task_entity/entityfields/maturity_date/valueProcess.js
index d205c6478586ec9f272f1abe52d5fdd3414d7634..a318ed2990a73b3a88aff036446a1ab01f0c1fdd 100644
--- a/entity/Task_entity/entityfields/maturity_date/valueProcess.js
+++ b/entity/Task_entity/entityfields/maturity_date/valueProcess.js
@@ -1,12 +1,12 @@
-import("system.eMath");
-import("system.datetime");
-import("system.result");
-import("system.neon");
-import("system.vars");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
-{
-    var startDate = vars.get("$field.START_DATE");
-    var presetVal = eMath.addInt(startDate, datetime.ONE_WEEK);
-    result.string(presetVal);
+import("system.eMath");
+import("system.datetime");
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+{
+    var startDate = vars.get("$field.START_DATE");
+    var presetVal = eMath.addInt(startDate, datetime.ONE_WEEK);
+    result.string(presetVal);
 }
\ No newline at end of file
diff --git a/entity/Task_entity/entityfields/requestor_contact_id/displayValueProcess.js b/entity/Task_entity/entityfields/requestor_contact_id/displayValueProcess.js
index 0dde82e7728286629b1c210326725aac2ebb92c5..a54eaa531bb911d666ce220e8ecf41da9f740c9e 100644
--- a/entity/Task_entity/entityfields/requestor_contact_id/displayValueProcess.js
+++ b/entity/Task_entity/entityfields/requestor_contact_id/displayValueProcess.js
@@ -2,7 +2,7 @@ import("system.result");
 import("system.vars");
 import("Contact_lib");
 
-var id = vars.get("$this.value");
+var id = vars.get("$field.REQUESTOR_CONTACT_ID");
 //show the simpel title since this will be later an employee-entry and therefore no organisation is needed
 var title = ContactUtils.getTitleByContactId(id);
 result.string(title);
\ No newline at end of file
diff --git a/entity/Task_entity/entityfields/start_date/valueProcess.js b/entity/Task_entity/entityfields/start_date/valueProcess.js
index 331eb9c3b542df4d726b2e1c2bb1c5718f93fa1b..6ac754253490d29b5f2653fdbdc335e381b475aa 100644
--- a/entity/Task_entity/entityfields/start_date/valueProcess.js
+++ b/entity/Task_entity/entityfields/start_date/valueProcess.js
@@ -1,12 +1,12 @@
-import("system.datetime");
-import("system.result");
-import("system.neon");
-import("system.vars");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
-{
-    var presetVal = datetime.date();
-    //TODO: depending on what happens in #1032274 we need to manually set the resolution to MINUTES or not (which means we've to set everything smaller than MINUTES (Seconds, etc.) to zero) 
-    presetVal = Math.floor(presetVal / datetime.ONE_MINUTE) * datetime.ONE_MINUTE;
-    result.string(presetVal);
+import("system.datetime");
+import("system.result");
+import("system.neon");
+import("system.vars");
+
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
+{
+    var presetVal = datetime.date();
+    //TODO: depending on what happens in #1032274 we need to manually set the resolution to MINUTES or not (which means we've to set everything smaller than MINUTES (Seconds, etc.) to zero) 
+    presetVal = Math.floor(presetVal / datetime.ONE_MINUTE) * datetime.ONE_MINUTE;
+    result.string(presetVal);
 }
\ No newline at end of file
diff --git a/entity/Task_entity/entityfields/status/valueProcess.js b/entity/Task_entity/entityfields/status/valueProcess.js
index db358521bc070d2a6bf07582bdf12573673a1ec4..3d13b59e80dd18b9ad676efea25ce97b1f973bb5 100644
--- a/entity/Task_entity/entityfields/status/valueProcess.js
+++ b/entity/Task_entity/entityfields/status/valueProcess.js
@@ -3,7 +3,7 @@ import("system.result");
 import("system.neon");
 import("system.vars");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     result.string($KeywordRegistry.taskStatus$new());
 }
\ No newline at end of file
diff --git a/entity/Task_entity/entityfields/type/valueProcess.js b/entity/Task_entity/entityfields/type/valueProcess.js
index 04149ad63a18b650dc2e75a1792c870d88a55f43..b16e2dd8468175445cdd6a9f9d0437c87c73560e 100644
--- a/entity/Task_entity/entityfields/type/valueProcess.js
+++ b/entity/Task_entity/entityfields/type/valueProcess.js
@@ -3,7 +3,7 @@ import("system.vars");
 import("system.neon");
 import("KeywordRegistry_basic");
 
-if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     // Sets the type to "Task" as default value.
     result.string($KeywordRegistry.taskType$task());
diff --git a/entity/Task_entity/recordcontainers/db/recordfieldmappings/editor_contact_id.displayvalue/expression.js b/entity/Task_entity/recordcontainers/db/recordfieldmappings/editor_contact_id.displayvalue/expression.js
index e5961584dd2e3bd5741ac96032105a8cc43ec58b..8e7ea35c7f489e257f771a9f67d1672d35817c4b 100644
--- a/entity/Task_entity/recordcontainers/db/recordfieldmappings/editor_contact_id.displayvalue/expression.js
+++ b/entity/Task_entity/recordcontainers/db/recordfieldmappings/editor_contact_id.displayvalue/expression.js
@@ -1,6 +1,5 @@
 import("system.result");
 import("Person_lib");
 
-//TODO: try to find a better solution for this -> #TITLE-mechanic when available
 var subSql = PersUtils.getResolvingDisplaySubSql("TASK.EDITOR_CONTACT_ID");
 result.string(subSql);
\ No newline at end of file
diff --git a/entity/Timetracking_entity/entityfields/date/valueProcess.js b/entity/Timetracking_entity/entityfields/date/valueProcess.js
index 126ef5d056360ae2b27ee6712dc76ce696250aba..1bf123d91e52048f5e9077c2bd51591b156c92f3 100644
--- a/entity/Timetracking_entity/entityfields/date/valueProcess.js
+++ b/entity/Timetracking_entity/entityfields/date/valueProcess.js
@@ -2,7 +2,7 @@ import("system.vars");
 import("system.result");
 import("system.neon");
 
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value"))
+if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null)
 {
     result.string(vars.getString("$sys.date"));
 }
diff --git a/entity/Timetracking_entity/entityfields/minutes/onValidation.js b/entity/Timetracking_entity/entityfields/minutes/onValidation.js
index 8080e185f4cc8a1f4b3a3dc07081b6b04cf036eb..2c109d356e606c0e2306e09a2fef39a4d3a4b3fe 100644
--- a/entity/Timetracking_entity/entityfields/minutes/onValidation.js
+++ b/entity/Timetracking_entity/entityfields/minutes/onValidation.js
@@ -7,7 +7,7 @@ import("Entity_lib");
 // TODO: displayValue + contentType number crashes so we use TEXT and validate ourselve
 // 1035861
 
-var minutes =  ProcessHandlingUtils.getOnValidationValue(vars.get("$field.MINUTES"));
+var minutes =  vars.get("local.value");
 var message = "";
 if (!/^\d+$/.test(minutes))
     message = translate.text("Only numbers are allowed.");
diff --git a/entity/UnlinkedMailMappingLink_entity/UnlinkedMailMappingLink_entity.aod b/entity/UnlinkedMailMappingLink_entity/UnlinkedMailMappingLink_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..6a0a2a7ab6bd8cd638e6e6a6c4841323dffbe261
--- /dev/null
+++ b/entity/UnlinkedMailMappingLink_entity/UnlinkedMailMappingLink_entity.aod
@@ -0,0 +1,71 @@
+<?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.10" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.10">
+  <name>UnlinkedMailMappingLink_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <title>${UNLINKEDMAILMAPPING_ADDITIONAL_LINK}</title>
+  <titlePlural>${UNLINKEDMAILMAPPING_ADDITIONAL_LINKS}</titlePlural>
+  <recordContainer>jdito</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+      <dependencies>
+        <entityDependency>
+          <name>9958543a-9e47-4f7f-8f06-8f18757f8586</name>
+          <entityName>UnlinkedMailMappingWrapper_entity</entityName>
+          <fieldName>UnlinkedMailMappingLinks</fieldName>
+          <isConsumer v="false" />
+        </entityDependency>
+      </dependencies>
+    </entityProvider>
+    <entityParameter>
+      <name>MailAsText_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityField>
+      <name>UID</name>
+      <valueProcess>%aditoprj%/entity/UnlinkedMailMappingLink_entity/entityfields/uid/valueProcess.js</valueProcess>
+    </entityField>
+    <entityField>
+      <name>CONTACT_ID</name>
+      <title>Contact</title>
+      <consumer>AnyContacts</consumer>
+    </entityField>
+    <entityField>
+      <name>EMAILADDR</name>
+      <title>(optional) E-Mail to store in contact</title>
+      <dropDownProcess>%aditoprj%/entity/UnlinkedMailMappingLink_entity/entityfields/emailaddr/dropDownProcess.js</dropDownProcess>
+    </entityField>
+    <entityConsumer>
+      <name>AnyContacts</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>AnyContact_entity</entityName>
+        <fieldName>#PROVIDER</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityField>
+      <name>CONTEXT_NAME</name>
+      <state>INVISIBLE</state>
+      <valueProcess>%aditoprj%/entity/UnlinkedMailMappingLink_entity/entityfields/context_name/valueProcess.js</valueProcess>
+    </entityField>
+  </entityFields>
+  <recordContainers>
+    <jDitoRecordContainer>
+      <name>jdito</name>
+      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
+      <contentProcess>%aditoprj%/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
+      <onInsert>%aditoprj%/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/onInsert.js</onInsert>
+      <recordFieldMappings>
+        <jDitoRecordFieldMapping>
+          <name>UID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>CONTACT_ID.value</name>
+        </jDitoRecordFieldMapping>
+        <jDitoRecordFieldMapping>
+          <name>EMAILADDR.value</name>
+        </jDitoRecordFieldMapping>
+      </recordFieldMappings>
+    </jDitoRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/UnlinkedMailMappingLink_entity/entityfields/context_name/valueProcess.js b/entity/UnlinkedMailMappingLink_entity/entityfields/context_name/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..0a7fbd404908c94e73b6736881dcc7bab8ebbbf6
--- /dev/null
+++ b/entity/UnlinkedMailMappingLink_entity/entityfields/context_name/valueProcess.js
@@ -0,0 +1,10 @@
+import("system.result");
+import("system.vars");
+import("Contact_lib");
+
+var res = "";
+var contactId = vars.get("$field.CONTACT_ID");
+if (contactId)
+    res = ContactUtils.getContextByContactId(contactId);
+
+result.string(res);
\ No newline at end of file
diff --git a/entity/UnlinkedMailMappingLink_entity/entityfields/emailaddr/dropDownProcess.js b/entity/UnlinkedMailMappingLink_entity/entityfields/emailaddr/dropDownProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..2feaa275931a1341d40ee0b4870ba6cf2be8fb07
--- /dev/null
+++ b/entity/UnlinkedMailMappingLink_entity/entityfields/emailaddr/dropDownProcess.js
@@ -0,0 +1,36 @@
+import("EmailUtil_lib");
+import("IncomingEmailExecutor_lib");
+import("system.mail");
+import("system.util");
+import("system.db");
+import("system.vars");
+import("system.result");
+
+var mailObject = null;
+var res = [];
+
+var mailB64 = vars.get("$param.MailAsText_param");
+if (mailB64)
+{
+    mailObject = mail.parseRFC(mailB64);
+}
+
+if (mailObject)
+{
+    var sender = mailObject[mail.MAIL_SENDER];
+    var recipientsTo = mailObject[mail.RECIPIENT_TO].split(";");
+    var recipientsCc = mailObject[mail.RECIPIENT_CC].split(";");
+    var recipientsBcc = mailObject[mail.RECIPIENT_BCC].split(";");
+    
+    var mapperFn = function (addr) {
+        if (addr)
+            res.push([EmailUtils.extractAddress(addr), addr]);
+    };
+    
+    res.push([EmailUtils.extractAddress(sender), sender]);
+    recipientsTo.forEach(mapperFn);
+    recipientsCc.forEach(mapperFn);
+    recipientsBcc.forEach(mapperFn);
+}
+
+result.object(res);
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/campaigncostid/valueProcess.js b/entity/UnlinkedMailMappingLink_entity/entityfields/uid/valueProcess.js
similarity index 58%
rename from entity/CampaignCost_entitiy/entityfields/campaigncostid/valueProcess.js
rename to entity/UnlinkedMailMappingLink_entity/entityfields/uid/valueProcess.js
index 622e00f05f77bd63405f4487831518087cc38d27..9fcbf8892c84afa4d8fc30dbd7b6fd0f2ce026cd 100644
--- a/entity/CampaignCost_entitiy/entityfields/campaigncostid/valueProcess.js
+++ b/entity/UnlinkedMailMappingLink_entity/entityfields/uid/valueProcess.js
@@ -1,7 +1,7 @@
-import("system.neon");
-import("system.util");
-import("system.vars");
-import("system.result");
-
-if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
+import("system.vars");
+import("system.result");
+import("system.neon");
+import("system.util");
+
+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/UnlinkedMailMappingLink_entity/recordcontainers/jdito/contentProcess.js b/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/contentProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..cfd1bf845e20edbe7cc993e39fec6fa9837b72c0
--- /dev/null
+++ b/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/contentProcess.js
@@ -0,0 +1,11 @@
+import("IncomingEmailExecutor_lib");
+import("system.mail");
+import("system.util");
+import("system.db");
+import("system.vars");
+import("system.result");
+
+var mailObject = null;
+var res = [];
+
+result.object(res);
\ No newline at end of file
diff --git a/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/onInsert.js b/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/onInsert.js
new file mode 100644
index 0000000000000000000000000000000000000000..d162d2aeccc9d9c33903a3940185471e91d01b19
--- /dev/null
+++ b/entity/UnlinkedMailMappingLink_entity/recordcontainers/jdito/onInsert.js
@@ -0,0 +1,2 @@
+/*nothing happens here, everything is done within the UnlinkedMailMappingWrapper
+ --do not remove this comment otherwhile the kernel will detect that this process is empty and throws an error--*/
\ No newline at end of file
diff --git a/entity/UnlinkedMailMappingWrapper_entity/UnlinkedMailMappingWrapper_entity.aod b/entity/UnlinkedMailMappingWrapper_entity/UnlinkedMailMappingWrapper_entity.aod
new file mode 100644
index 0000000000000000000000000000000000000000..2a5c16c01b0d4a3d75a47c87fc84faae6fb16105
--- /dev/null
+++ b/entity/UnlinkedMailMappingWrapper_entity/UnlinkedMailMappingWrapper_entity.aod
@@ -0,0 +1,76 @@
+<?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.10" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.10">
+  <name>UnlinkedMailMappingWrapper_entity</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <title>Link unlinked e-mail</title>
+  <recordContainer>dummyJdito</recordContainer>
+  <entityFields>
+    <entityProvider>
+      <name>#PROVIDER</name>
+    </entityProvider>
+    <entityProvider>
+      <name>ForUnlinkedMail</name>
+      <children>
+        <entityParameter>
+          <name>UnlinkedMailId_param</name>
+          <expose v="true" />
+        </entityParameter>
+      </children>
+    </entityProvider>
+    <entityParameter>
+      <name>UnlinkedMailId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>MailAsText_param</name>
+      <valueProcess>%aditoprj%/entity/UnlinkedMailMappingWrapper_entity/entityfields/mailastext_param/valueProcess.js</valueProcess>
+    </entityParameter>
+    <entityField>
+      <name>UID</name>
+    </entityField>
+    <entityField>
+      <name>RESPONSIBLE_ID</name>
+      <title>Responsible</title>
+      <consumer>Employees</consumer>
+      <mandatory v="true" />
+      <valueProcess>%aditoprj%/entity/UnlinkedMailMappingWrapper_entity/entityfields/responsible_id/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/UnlinkedMailMappingWrapper_entity/entityfields/responsible_id/displayValueProcess.js</displayValueProcess>
+    </entityField>
+    <entityConsumer>
+      <name>Employees</name>
+      <dependency>
+        <name>dependency</name>
+        <entityName>Employee_entity</entityName>
+        <fieldName>Employees</fieldName>
+      </dependency>
+    </entityConsumer>
+    <entityConsumer>
+      <name>UnlinkedMailMappingLinks</name>
+      <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>
+    </entityConsumer>
+  </entityFields>
+  <recordContainers>
+    <jDitoRecordContainer>
+      <name>dummyJdito</name>
+      <jDitoRecordAlias>Data_alias</jDitoRecordAlias>
+      <contentProcess>%aditoprj%/entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/contentProcess.js</contentProcess>
+      <rowCountProcess>%aditoprj%/entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/rowCountProcess.js</rowCountProcess>
+      <onUpdate>%aditoprj%/entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/onUpdate.js</onUpdate>
+      <recordFieldMappings>
+        <jDitoRecordFieldMapping>
+          <name>UID.value</name>
+        </jDitoRecordFieldMapping>
+      </recordFieldMappings>
+    </jDitoRecordContainer>
+  </recordContainers>
+</entity>
diff --git a/entity/UnlinkedMailMappingWrapper_entity/entityfields/mailastext_param/valueProcess.js b/entity/UnlinkedMailMappingWrapper_entity/entityfields/mailastext_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..036eb71d8f5787718937584df763395322889b3c
--- /dev/null
+++ b/entity/UnlinkedMailMappingWrapper_entity/entityfields/mailastext_param/valueProcess.js
@@ -0,0 +1,15 @@
+import("system.result");
+import("system.db");
+import("system.vars");
+import("Sql_lib");
+
+var res = "";
+var unlinkedMailId = vars.get("$param.UnlinkedMailId_param");
+if (unlinkedMailId)
+{
+    var mailDataSql = SqlCondition.begin()
+                                  .andPrepare("AB_UNLINKEDMAIL.AB_UNLINKEDMAILID", unlinkedMailId)
+                                  .buildSql("select AB_UNLINKEDMAIL.MAIL from AB_UNLINKEDMAIL");
+    res = db.cell(mailDataSql);
+}
+result.string(res);
\ No newline at end of file
diff --git a/entity/UnlinkedMailMappingWrapper_entity/entityfields/responsible_id/displayValueProcess.js b/entity/UnlinkedMailMappingWrapper_entity/entityfields/responsible_id/displayValueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..20d91b76f0fa90bd11c7b40976112c0f62aebce2
--- /dev/null
+++ b/entity/UnlinkedMailMappingWrapper_entity/entityfields/responsible_id/displayValueProcess.js
@@ -0,0 +1,8 @@
+import("system.result");
+import("system.vars");
+import("Contact_lib");
+
+var id = vars.get("$field.RESPONSIBLE_ID");
+//show the simpel title since this will be later an employee-entry and therefore no organisation is needed
+var title = ContactUtils.getTitleByContactId(id);
+result.string(title);
\ No newline at end of file
diff --git a/entity/UnlinkedMailMappingWrapper_entity/entityfields/responsible_id/valueProcess.js b/entity/UnlinkedMailMappingWrapper_entity/entityfields/responsible_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..607eea3984823d552830b30448a952a7fc192958
--- /dev/null
+++ b/entity/UnlinkedMailMappingWrapper_entity/entityfields/responsible_id/valueProcess.js
@@ -0,0 +1,9 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+import("Employee_lib");
+
+if (vars.get("$this.value") == null && (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT))
+{
+    result.string(EmployeeUtils.getCurrentContactId());
+}
\ No newline at end of file
diff --git a/entity/UnlinkedMailMappingWrapper_entity/entityfields/unlinkedmailmappinglinks/children/mailastext_param/valueProcess.js b/entity/UnlinkedMailMappingWrapper_entity/entityfields/unlinkedmailmappinglinks/children/mailastext_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..c36f8417f07a2bb7a9ff602a81d856ba0a6a464a
--- /dev/null
+++ b/entity/UnlinkedMailMappingWrapper_entity/entityfields/unlinkedmailmappinglinks/children/mailastext_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$param.MailAsText_param"));
\ No newline at end of file
diff --git a/entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/contentProcess.js b/entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/contentProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..9a4d854baa7ad851819c3d3d1c99bfb59d72e551
--- /dev/null
+++ b/entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/contentProcess.js
@@ -0,0 +1,2 @@
+import("system.result");
+result.object([["1"]]);
\ No newline at end of file
diff --git a/entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/onUpdate.js b/entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/onUpdate.js
new file mode 100644
index 0000000000000000000000000000000000000000..bc84a0f141f0a431c8e7063a312c83270bbfe391
--- /dev/null
+++ b/entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/onUpdate.js
@@ -0,0 +1,70 @@
+import("system.datetime");
+import("KeywordRegistry_basic");
+import("system.util");
+import("system.db");
+import("Contact_lib");
+import("system.neon");
+import("Employee_lib");
+import("IncomingEmailExecutor_lib");
+import("system.mail");
+import("system.logging");
+import("system.vars");
+import("system.entities");
+
+var activityLinks = [];
+var changedRows = vars.get("$field.UnlinkedMailMappingLinks.insertedRows");
+
+var communicationsToInsert = [];
+var communicationCols = ["COMMUNICATIONID", "ADDR", "CONTACT_ID", "STANDARD", "MEDIUM_ID", "USER_NEW", "DATE_NEW"];
+var communicationTypes = db.getColumnTypes("COMMUNICATION", communicationCols);
+
+if (changedRows.length > 0)
+{
+    //collect relevant uids
+    var contactIds = [];
+    var newCommNecessaryIdMap = {};
+    changedRows.forEach(function (changedRow){
+        var contactId = changedRow["CONTACT_ID"];
+        if (changedRow["CONTACT_ID"])
+            contactIds.push(contactId);
+        if (changedRow["EMAILADDR"])
+            newCommNecessaryIdMap[contactId] = changedRow["EMAILADDR"];
+    });
+    //load relevant data
+    var loadingConfig = entities.createConfigForLoadingRows().entity("AnyContact_entity")
+                                                             .uids(contactIds)
+                                                             .fields(["CONTACTID", "ORGANISATION_ID", "PERSON_ID", "STANDARD_EMAIL_COMMUNICATION"]);
+    var contactRows = entities.getRows(loadingConfig);
+    //decide what to do with the data
+    
+    for (var i = 0, l = contactRows.length; i < l; i++) 
+    {
+        //first create a link
+        var contactId = contactRows[i]["CONTACTID"];
+        var contextName = ContactUtils.getContextByPersOrg(contactRows[i]["PERSON_ID"], contactRows[i]["ORGANISATION_ID"]);
+        activityLinks.push([contextName, contactId]);
+        
+        //then prepare insert statements for new comms
+        var emailAddrToAdd = newCommNecessaryIdMap[contactId];
+        if (emailAddrToAdd)
+        {
+            var standardFlag = contactRows[i]["STANDARD_EMAIL_COMMUNICATION"] ? "0" : "1";//when no standard mail exists already: set it
+            var vals = [util.getNewUUID(), emailAddrToAdd, contactId, standardFlag, $KeywordRegistry.communicationMedium$mail(), vars.get("$sys.user"), datetime.date()];
+            communicationsToInsert.push(["COMMUNICATION", communicationCols, communicationTypes, vals]);
+            //TODO: insert the COMM via a entities.***-method when available
+        }
+    }
+}
+
+var mailObj = mail.parseRFC(vars.get("$param.MailAsText_param"));
+var unlinkedMailId = vars.get("$param.UnlinkedMailId_param");
+
+var incomingMailExec = new IncomingEmailExecutor(mailObj);
+incomingMailExec.setActivityEmployeeContactId(EmployeeUtils.getCurrentContactId());
+var activityRes = incomingMailExec.createActivity(activityLinks);
+incomingMailExec.deleteUnlinkedMail(unlinkedMailId);
+
+if (communicationsToInsert.length > 0)
+    db.inserts(communicationsToInsert);
+
+neon.refreshAll();//this is needed for the dashboard: other elements are refreshed and display for example unlinkedMails
\ No newline at end of file
diff --git a/entity/CampaignCost_entitiy/entityfields/stepcosts/children/campaignsteps_param/valueProcess.js b/entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/rowCountProcess.js
similarity index 93%
rename from entity/CampaignCost_entitiy/entityfields/stepcosts/children/campaignsteps_param/valueProcess.js
rename to entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/rowCountProcess.js
index 4336563e79c0a64b263cca325ed6285fbbededa7..b92babf55f612058ae7ca82d2aed85746492cfe6 100644
--- a/entity/CampaignCost_entitiy/entityfields/stepcosts/children/campaignsteps_param/valueProcess.js
+++ b/entity/UnlinkedMailMappingWrapper_entity/recordcontainers/dummyjdito/rowCountProcess.js
@@ -1,3 +1,2 @@
-import("system.result");
-
+import("system.result");
 result.string(1);
\ No newline at end of file
diff --git a/entity/UnlinkedMail_entity/UnlinkedMail_entity.aod b/entity/UnlinkedMail_entity/UnlinkedMail_entity.aod
index b00b2993c273183f6f2ad6c008929ddff0c4790c..7c228edfc1435f9156c678f264de362ff1ae2d2b 100644
--- a/entity/UnlinkedMail_entity/UnlinkedMail_entity.aod
+++ b/entity/UnlinkedMail_entity/UnlinkedMail_entity.aod
@@ -2,10 +2,12 @@
 <entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.10" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.10">
   <name>UnlinkedMail_entity</name>
   <majorModelMode>DISTRIBUTED</majorModelMode>
+  <title>Unlinked e-mail</title>
   <grantCreate v="false" />
   <grantUpdate v="false" />
   <iconId>VAADIN:AT</iconId>
   <imageProcess>%aditoprj%/entity/UnlinkedMail_entity/imageProcess.js</imageProcess>
+  <titlePlural>Unlinked e-mails</titlePlural>
   <recordContainer>db</recordContainer>
   <entityFields>
     <entityProvider>
@@ -34,18 +36,11 @@
     </entityField>
     <entityField>
       <name>MAIL</name>
+      <contentType>FILE</contentType>
     </entityField>
     <entityActionGroup>
       <name>ToActivity_ActionGroup</name>
       <children>
-        <entityActionField>
-          <name>ToActivity_action</name>
-          <title>Link automatically</title>
-          <onActionProcess>%aditoprj%/entity/UnlinkedMail_entity/entityfields/toactivity_actiongroup/children/toactivity_action/onActionProcess.js</onActionProcess>
-          <isSelectionAction v="true" />
-          <iconIdProcess>%aditoprj%/entity/UnlinkedMail_entity/entityfields/toactivity_actiongroup/children/toactivity_action/iconIdProcess.js</iconIdProcess>
-          <tooltip>Try to link the e-mail automatically</tooltip>
-        </entityActionField>
         <entityActionField>
           <name>DownloadMail_action</name>
           <title>Download Mail</title>
@@ -54,6 +49,14 @@
           <iconId>VAADIN:DOWNLOAD_ALT</iconId>
           <tooltip>Download e-mail</tooltip>
         </entityActionField>
+        <entityActionField>
+          <name>ToActivity_action</name>
+          <title>Create activity</title>
+          <onActionProcess>%aditoprj%/entity/UnlinkedMail_entity/entityfields/toactivity_actiongroup/children/toactivity_action/onActionProcess.js</onActionProcess>
+          <isSelectionAction v="true" />
+          <iconIdProcess>%aditoprj%/entity/UnlinkedMail_entity/entityfields/toactivity_actiongroup/children/toactivity_action/iconIdProcess.js</iconIdProcess>
+          <tooltip>Try to create activity automatically and ask for more information if necessary</tooltip>
+        </entityActionField>
       </children>
     </entityActionGroup>
   </entityFields>
diff --git a/entity/UnlinkedMail_entity/entityfields/toactivity_actiongroup/children/toactivity_action/onActionProcess.js b/entity/UnlinkedMail_entity/entityfields/toactivity_actiongroup/children/toactivity_action/onActionProcess.js
index ec00b9911e3a32e27d003cdb19f40c030846610a..38238664039762ee14eb60459947c46d3e12dd0c 100644
--- a/entity/UnlinkedMail_entity/entityfields/toactivity_actiongroup/children/toactivity_action/onActionProcess.js
+++ b/entity/UnlinkedMail_entity/entityfields/toactivity_actiongroup/children/toactivity_action/onActionProcess.js
@@ -1,9 +1,21 @@
+import("Employee_lib");
 import("system.neon");
 import("system.mail");
 import("system.vars");
 import("IncomingEmailExecutor_lib");
 
 var mailObj = mail.parseRFC(vars.get("$field.MAIL"));
-IncomingEmailExecutor.mailToActivity(mailObj, vars.get("$field.AB_UNLINKEDMAILID"));
-//refresh is needed for the dashboard: other elements are refreshed and display for example a new activity in the filter view while the own record (=ulinked mail) is removed
-neon.refreshAll();
\ No newline at end of file
+var incomingMailExec = new IncomingEmailExecutor(mailObj);
+if (incomingMailExec.isUnlinkable())
+{
+    //helper context and entity for configuring the linking, further working (linking, creating activities, etc.) is done there
+    neon.openContext("UnlinkedMailMappingWrapper", null, ["1"], neon.OPERATINGSTATE_EDIT, {"UnlinkedMailId_param": vars.get("$sys.uid")});
+}
+else
+{
+    incomingMailExec.setActivityEmployeeContactId(EmployeeUtils.getCurrentContactId());
+    incomingMailExec.createActivity();
+    incomingMailExec.deleteUnlinkedMail(vars.get("$sys.uid"));
+    //refresh is needed for the dashboard: other elements are refreshed and display for example a new activity in the filter view while the own record (=ulinked mail) is removed
+    neon.refreshAll();
+}
\ No newline at end of file
diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
index 5e58b29c1c4e713fbfcda5b145baf6e72c63ea64..4d777ed8470bdf5be4af131b6f7517fbcf3aef9c 100644
--- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
+++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod
@@ -3654,9 +3654,6 @@
     <entry>
       <key>Search for new Entries</key>
     </entry>
-    <entry>
-      <key>Additional link</key>
-    </entry>
     <entry>
       <key>Salesproject member</key>
     </entry>
@@ -5061,6 +5058,36 @@
     <entry>
       <key>Write bulk mail</key>
     </entry>
+    <entry>
+      <key>Unlinked e-mail</key>
+    </entry>
+    <entry>
+      <key>(optional) E-Mail to store in contact</key>
+    </entry>
+    <entry>
+      <key>Link unlinked e-mail</key>
+    </entry>
+    <entry>
+      <key>Link e-mail addresses to contacts</key>
+    </entry>
+    <entry>
+      <key>${UNLINKEDMAILMAPPING_ADDITIONAL_LINKS}</key>
+    </entry>
+    <entry>
+      <key>${UNLINKEDMAILMAPPING_ADDITIONAL_LINK}</key>
+    </entry>
+    <entry>
+      <key>Unlinked mails</key>
+    </entry>
+    <entry>
+      <key>Create activity</key>
+    </entry>
+    <entry>
+      <key>Unlinked e-mails</key>
+    </entry>
+    <entry>
+      <key>Download</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 11ccd000ad0997ff5e1fbdacb9e983c3ba551de7..01e9d9ac0b235e95b90df6af601b60f875fe5eb8 100644
--- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
+++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod
@@ -784,10 +784,6 @@
       <key>Office address</key>
       <value>Firmenadresse</value>
     </entry>
-    <entry>
-      <key>Additional link</key>
-      <value>Zusätzliche Verknüpfung</value>
-    </entry>
     <entry>
       <key>Contact</key>
       <value>Kontakt</value>
@@ -6328,6 +6324,7 @@
     </entry>
     <entry>
       <key>Download letter</key>
+      <value>Brief herunterladen</value>
     </entry>
     <entry>
       <key>Phase progression</key>
@@ -6367,6 +6364,46 @@
     <entry>
       <key>Test DuplicateSearch</key>
     </entry>
+    <entry>
+      <key>Unlinked e-mail</key>
+      <value>Unverknüpfte E-Mail</value>
+    </entry>
+    <entry>
+      <key>(optional) E-Mail to store in contact</key>
+      <value>(optional) E-Mail bei Kontakt speichern</value>
+    </entry>
+    <entry>
+      <key>Link unlinked e-mail</key>
+      <value>Verknüpfe E-Mail</value>
+    </entry>
+    <entry>
+      <key>Link e-mail addresses to contacts</key>
+      <value>Verknüpfe E-Mail-Adressen zu Kontakten</value>
+    </entry>
+    <entry>
+      <key>${UNLINKEDMAILMAPPING_ADDITIONAL_LINKS}</key>
+      <value>Weitere Verknüpfungen</value>
+    </entry>
+    <entry>
+      <key>${UNLINKEDMAILMAPPING_ADDITIONAL_LINK}</key>
+      <value>Weitere Verknüpfung</value>
+    </entry>
+    <entry>
+      <key>Unlinked mails</key>
+      <value>Unverknüpfte E-Mails</value>
+    </entry>
+    <entry>
+      <key>Create activity</key>
+      <value>Erstelle Aktivität</value>
+    </entry>
+    <entry>
+      <key>Unlinked e-mails</key>
+      <value>Unverknüpfte E-Mails</value>
+    </entry>
+    <entry>
+      <key>Download</key>
+      <value>Herunterladen</value>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
index 6bf4dd13547b5bb362ca517dd2a635d7aec76a1b..15d6919df1bbc0efd4de6637800012ccfb007a36 100644
--- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
+++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod
@@ -3703,9 +3703,6 @@
     <entry>
       <key>Search for new Entries</key>
     </entry>
-    <entry>
-      <key>Additional link</key>
-    </entry>
     <entry>
       <key>Salesproject member</key>
     </entry>
@@ -5110,6 +5107,36 @@
     <entry>
       <key>Write bulk mail</key>
     </entry>
+    <entry>
+      <key>Unlinked e-mail</key>
+    </entry>
+    <entry>
+      <key>(optional) E-Mail to store in contact</key>
+    </entry>
+    <entry>
+      <key>Link unlinked e-mail</key>
+    </entry>
+    <entry>
+      <key>Link e-mail addresses to contacts</key>
+    </entry>
+    <entry>
+      <key>${UNLINKEDMAILMAPPING_ADDITIONAL_LINKS}</key>
+    </entry>
+    <entry>
+      <key>${UNLINKEDMAILMAPPING_ADDITIONAL_LINK}</key>
+    </entry>
+    <entry>
+      <key>Unlinked mails</key>
+    </entry>
+    <entry>
+      <key>Create activity</key>
+    </entry>
+    <entry>
+      <key>Unlinked e-mails</key>
+    </entry>
+    <entry>
+      <key>Download</key>
+    </entry>
   </keyValueMap>
   <font name="Dialog" style="0" size="11" />
 </language>
diff --git a/neonContext/BulkMail/BulkMail.aod b/neonContext/BulkMail/BulkMail.aod
index 8001515cc6c87991d8701f4cfe4ffd8168388acb..ae4fd6a6791f4b9330470b0107eb1069f9c818f9 100644
--- a/neonContext/BulkMail/BulkMail.aod
+++ b/neonContext/BulkMail/BulkMail.aod
@@ -27,7 +27,7 @@
     </neonViewReference>
     <neonViewReference>
       <name>6b057fb0-94ac-4bca-88b2-c97fdfcf9d6e</name>
-      <view>BulkMailTest_view</view>
+      <view>BulkMailContent_view</view>
     </neonViewReference>
   </references>
 </neonContext>
diff --git a/neonContext/UnlinkedMailMappingLink/UnlinkedMailMappingLink.aod b/neonContext/UnlinkedMailMappingLink/UnlinkedMailMappingLink.aod
new file mode 100644
index 0000000000000000000000000000000000000000..6546416194e47b77440f69a3e60cd392caf267b9
--- /dev/null
+++ b/neonContext/UnlinkedMailMappingLink/UnlinkedMailMappingLink.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.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.0">
+  <name>UnlinkedMailMappingLink</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <entity>UnlinkedMailMappingLink_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>dd9bfc47-a38c-4d54-89a1-2e95323a1ceb</name>
+      <view>UnlinkedMailMappingLinkList_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonContext/UnlinkedMailMappingWrapper/UnlinkedMailMappingWrapper.aod b/neonContext/UnlinkedMailMappingWrapper/UnlinkedMailMappingWrapper.aod
new file mode 100644
index 0000000000000000000000000000000000000000..d270b74d5ea0f79aadbc5f879922644c3d03cc79
--- /dev/null
+++ b/neonContext/UnlinkedMailMappingWrapper/UnlinkedMailMappingWrapper.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.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.0">
+  <name>UnlinkedMailMappingWrapper</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <editview>UnlinkedMailMappingWrapperMapping_view</editview>
+  <entity>UnlinkedMailMappingWrapper_entity</entity>
+  <references>
+    <neonViewReference>
+      <name>22ac623a-2cb6-46f2-ac22-561ad7e9a0da</name>
+      <view>UnlinkedMailMappingWrapperMapping_view</view>
+    </neonViewReference>
+  </references>
+</neonContext>
diff --git a/neonView/BulkMailTest_view/BulkMailTest_view.aod b/neonView/BulkMailContent_view/BulkMailContent_view.aod
similarity index 87%
rename from neonView/BulkMailTest_view/BulkMailTest_view.aod
rename to neonView/BulkMailContent_view/BulkMailContent_view.aod
index c6442e56b066bfb47f58b9154ef3e9fa9d2a2fcb..43b3a83deac1f10a78b02010622d17bd77c92eb3 100644
--- a/neonView/BulkMailTest_view/BulkMailTest_view.aod
+++ b/neonView/BulkMailContent_view/BulkMailContent_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.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1">
-  <name>BulkMailTest_view</name>
-  <title>Preview</title>
+  <name>BulkMailContent_view</name>
+  <title>Content</title>
   <majorModelMode>DISTRIBUTED</majorModelMode>
   <layout>
     <noneLayout>
@@ -32,8 +32,8 @@
       <entityField>#ENTITY</entityField>
       <fields>
         <entityFieldLink>
-          <name>13d21d66-6f52-4535-9cb9-3b26db11dfbf</name>
-          <entityField>preview</entityField>
+          <name>af0d45a2-a96f-4031-a93d-62ac177efb43</name>
+          <entityField>content</entityField>
         </entityFieldLink>
       </fields>
     </genericViewTemplate>
diff --git a/neonView/BulkMailMain_view/BulkMailMain_view.aod b/neonView/BulkMailMain_view/BulkMailMain_view.aod
index d95de24eecea5c322aae2a0490112c1c92f3590c..128f5bdff472e2ac37fefca22c182bb0b5ec5382 100644
--- a/neonView/BulkMailMain_view/BulkMailMain_view.aod
+++ b/neonView/BulkMailMain_view/BulkMailMain_view.aod
@@ -22,7 +22,7 @@
     <neonViewReference>
       <name>3222ace8-c6d6-4dab-ada1-1f50b983e7e7</name>
       <entityField>#ENTITY</entityField>
-      <view>BulkMailTest_view</view>
+      <view>BulkMailContent_view</view>
     </neonViewReference>
   </children>
 </neonView>
diff --git a/neonView/UnlinkedMailMappingLinkList_view/UnlinkedMailMappingLinkList_view.aod b/neonView/UnlinkedMailMappingLinkList_view/UnlinkedMailMappingLinkList_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..37dcfb4dc0563c7d97c21318490f3e5674d2d54f
--- /dev/null
+++ b/neonView/UnlinkedMailMappingLinkList_view/UnlinkedMailMappingLinkList_view.aod
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1">
+  <name>UnlinkedMailMappingLinkList_view</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <layout>
+    <drawerLayout>
+      <name>layout</name>
+      <layoutCaption>${UNLINKEDMAILMAPPING_ADDITIONAL_LINKS}</layoutCaption>
+    </drawerLayout>
+  </layout>
+  <children>
+    <genericMultipleViewTemplate>
+      <name>GenericMultiple</name>
+      <autoNewRow v="true" />
+      <entityField>#ENTITY</entityField>
+      <columns>
+        <neonTableColumn>
+          <name>0f4fc4e4-2a1f-404e-84c0-6ede00e89a09</name>
+          <entityField>CONTACT_ID</entityField>
+          <width v="100" />
+          <expandRatio v="100" />
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>bd45c8bc-bb7b-4109-a42d-b25feda0977b</name>
+          <entityField>EMAILADDR</entityField>
+          <width v="100" />
+        </neonTableColumn>
+        <neonTableColumn>
+          <name>7bae119d-a760-450b-9b51-b17d97af1ed3</name>
+          <entityField>CONTEXT_NAME</entityField>
+        </neonTableColumn>
+      </columns>
+    </genericMultipleViewTemplate>
+  </children>
+</neonView>
diff --git a/neonView/UnlinkedMailMappingWrapperMapping_view/UnlinkedMailMappingWrapperMapping_view.aod b/neonView/UnlinkedMailMappingWrapperMapping_view/UnlinkedMailMappingWrapperMapping_view.aod
new file mode 100644
index 0000000000000000000000000000000000000000..7cce6b8d744d27f349e35820e8953a38dac348b4
--- /dev/null
+++ b/neonView/UnlinkedMailMappingWrapperMapping_view/UnlinkedMailMappingWrapperMapping_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.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1">
+  <name>UnlinkedMailMappingWrapperMapping_view</name>
+  <title>Link e-mail addresses to contacts</title>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <isSmall v="true" />
+  <layout>
+    <headerFooterLayout>
+      <name>layout</name>
+      <header>Generic</header>
+    </headerFooterLayout>
+  </layout>
+  <children>
+    <genericViewTemplate>
+      <name>Generic</name>
+      <editMode v="true" />
+      <entityField>#ENTITY</entityField>
+      <fields>
+        <entityFieldLink>
+          <name>52ee726e-fcad-43fd-8b08-29cd31bfa1ba</name>
+          <entityField>RESPONSIBLE_ID</entityField>
+        </entityFieldLink>
+      </fields>
+    </genericViewTemplate>
+    <neonViewReference>
+      <name>10cbd0dc-4297-4703-ad84-b52312700f2e</name>
+      <entityField>UnlinkedMailMappingLinks</entityField>
+      <view>UnlinkedMailMappingLinkList_view</view>
+    </neonViewReference>
+  </children>
+</neonView>
diff --git a/process/DocumentTemplate_lib/process.js b/process/DocumentTemplate_lib/process.js
index dbcfb36a91297076174750b3f86105e75e375448..f182936863c5909b8ce50614de09b34363e5d2f3 100644
--- a/process/DocumentTemplate_lib/process.js
+++ b/process/DocumentTemplate_lib/process.js
@@ -52,7 +52,42 @@ DocumentTemplate.types = {
     EML : "eml",
     ODT : "odt",
     DOCX : "docx",
-    PLAIN : "plain" //for simple strings
+    PLAIN : "plain", //for simple strings
+    fromFileExtension : function (pFileExtension)
+    {
+        switch (pFileExtension)
+        {
+            case "html":
+            case "htm":
+                return this.HTML;
+            case "eml":
+                return this.EML;
+            case "odt":
+                return this.ODT;
+            case "docx":
+                return this.DOCX;
+            case "txt":
+            default:
+                return this.TXT;
+        }
+    },
+    fromMimetype : function (pMimetype)
+    {
+        switch (pMimetype)
+        {
+            case "text/html":
+                return this.HTML;
+            case "message/rfc822":
+                return this.EML;
+            case "application/vnd.oasis.opendocument.text":
+                return this.ODT;
+            case "application/vnd.openxmlformats-officedocument.wordprocessingml.document":
+                return this.DOCX;
+            case "text/plain":
+            default:
+                return this.TXT;
+        }
+    }
 };
 
 /**
@@ -76,16 +111,7 @@ DocumentTemplate.loadTemplate = function (pAssignmentRowId, pAssignmentTable)
     var binaryId = templateDocument[0][db.BINARY_ID];
     var filename = templateDocument[0][db.BINARY_FILENAME];
     var mimetype = templateDocument[0][db.BINARY_MIMETYPE];
-    var typeMap = {
-        "text/plain" : DocumentTemplate.types.TXT,
-        "text/html" : DocumentTemplate.types.HTML,
-        "message/rfc822" : DocumentTemplate.types.EML,
-        "application/vnd.oasis.opendocument.text" : DocumentTemplate.types.ODT,
-        "application/vnd.openxmlformats-officedocument.wordprocessingml.document" : DocumentTemplate.types.DOCX
-    };
-    var type = typeMap[mimetype];
-    if (type === undefined)
-        throw new Error("Invalid mime type for document template");
+    var type = DocumentTemplate.types.fromMimetype(mimetype);
     
     return new DocumentTemplate(db.getBinaryContent(binaryId, alias), type, filename);
 }
diff --git a/process/EmailUtil_lib/EmailUtil_lib.aod b/process/EmailUtil_lib/EmailUtil_lib.aod
new file mode 100644
index 0000000000000000000000000000000000000000..04b24ec7e102599577d29f2cea0cc85e7c4f048d
--- /dev/null
+++ b/process/EmailUtil_lib/EmailUtil_lib.aod
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.1">
+  <name>EmailUtil_lib</name>
+  <majorModelMode>DISTRIBUTED</majorModelMode>
+  <process>%aditoprj%/process/EmailUtil_lib/process.js</process>
+  <variants>
+    <element>LIBRARY</element>
+  </variants>
+</process>
diff --git a/process/EmailUtil_lib/process.js b/process/EmailUtil_lib/process.js
new file mode 100644
index 0000000000000000000000000000000000000000..27a46014b55280ce441be0474dbbf7e84dd80283
--- /dev/null
+++ b/process/EmailUtil_lib/process.js
@@ -0,0 +1,24 @@
+import("system.mail");
+
+/**
+ * functions for various emailing-functionalities
+ * Do not create an instance of this!
+ *
+ * @static
+ */
+function EmailUtils () {}
+
+/**
+ * Extracts the email address (x[at]x.x) from a complete address that may contain a readable part.
+ * Does some additional checkings on top of the extractAddress-method
+ * 
+ * @param {String} pFullMailAddress the complete address.
+ * 
+ * @return {String} addr-spec part of the mail, e.g. "info@adito.de"
+ */
+EmailUtils.extractAddress = function (pFullMailAddress)
+{
+    var mailAddress = pFullMailAddress.replace("<'", "<").replace("'>", ">");//special treatment for crazy illegal addresses which can be sent in Outlook
+    mailAddress = mail.extractAddress(mailAddress);
+    return mailAddress;
+};
\ No newline at end of file
diff --git a/process/Email_lib/process.js b/process/Email_lib/process.js
index eeb0b8a3124b77105f62e7808fd46f93653d716a..8de0df67a0fd66b5f9a2d3ded4084895dc138bc6 100644
--- a/process/Email_lib/process.js
+++ b/process/Email_lib/process.js
@@ -8,7 +8,7 @@ import("DocumentTemplate_lib");
 import("system.neon");
 import("system.mail");
 
-function EmailUtils () {}
+function EmailWritingUtils () {}
 
 /**
  * creates a new E-Mail-Object and ask for a download of a eml where all fields are prefilled
@@ -23,7 +23,7 @@ function EmailUtils () {}
  * 
  * @return {Array} the eml document as array with [filename, base64]
  */
-EmailUtils.openMailTemplate = function (pToRecipients, pSenderContactId, pTemplateId, pRecipientContactId)
+EmailWritingUtils.openMailTemplate = function (pToRecipients, pSenderContactId, pTemplateId, pRecipientContactId)
 {
     var email = new Email(pToRecipients);
     if (pTemplateId)
@@ -39,7 +39,7 @@ EmailUtils.openMailTemplate = function (pToRecipients, pSenderContactId, pTempla
  * @param {String} pToContactId contactId with contacts to filter the communication-addresses
  * @param {String} [pToEmailAddress] email address as string that shall be used as recipient-preset
  */
-EmailUtils.openNewMail = function (pToContactId, pToEmailAddress)
+EmailWritingUtils.openNewMail = function (pToContactId, pToEmailAddress)
 {
     var params = {
         "ContactId_param" : pToContactId
diff --git a/process/Entity_lib/process.js b/process/Entity_lib/process.js
index 6db3b2deba0ad67d82b693ba8cd5e421a7f547d0..24029d5a797948b8987ff7fe7ff346d1d8e15630 100644
--- a/process/Entity_lib/process.js
+++ b/process/Entity_lib/process.js
@@ -11,22 +11,20 @@ import("system.vars");
 function ProcessHandlingUtils() {}
 
 /**
-* In onValidation-Process a local variable called "$local.value" is made available from kernel.
-* It contains the entered value - the field contains the value only after successfull validation (vars.get("$field.Fieldname")).
-* The onValidation-Process is running again before saving the entity, at this point there's "$local.value" varialbe no longer available,
-* but the entered value now is the present one because the field has already been validated before.
-* Otherwise a "variable not found" error would occur.
-*
-* @param {String} [fieldValue=current field value] value of the field onValidation-Process is executed ( e.g. vars.get("$field.Fieldname") )
-*
-* @return {String} Field value for onValidation-Process
-*/
+ * @deprecated THIS ERROR IS FIXED. YOU SHOULD USE vars.get("$local.value") DIRECTLY NOW
+ *
+ * In onValidation-Process a local variable called "$local.value" is made available from kernel.
+ * It contains the entered value - the field contains the value only after successfull validation (vars.get("$field.Fieldname")).
+ * The onValidation-Process is running again before saving the entity, at this point there's "$local.value" varialbe no longer available,
+ * but the entered value now is the present one because the field has already been validated before.
+ * Otherwise a "variable not found" error would occur.
+ *
+ * @param {String} [fieldValue=current field value] value of the field onValidation-Process is executed ( e.g. vars.get("$field.Fieldname") )
+ *
+ * @return {String} Field value for onValidation-Process
+ */
 ProcessHandlingUtils.getOnValidationValue = function(fieldValue) {
-    if (fieldValue == undefined) {
-        fieldValue = vars.get("$this.value");
-    }
-    
-    return (vars.exists("$local.value") && vars.get("$local.value") != null) ? vars.get("$local.value") : fieldValue;
+    return vars.get("$local.value");
 }
 
 /**
diff --git a/process/IncomingEmailExecutor_lib/process.js b/process/IncomingEmailExecutor_lib/process.js
index 783a4a805ee1d103fec4e804f77747da8cb87c83..e83681a138b0396b51a2ff14b1eb5026acf7bfd5 100644
--- a/process/IncomingEmailExecutor_lib/process.js
+++ b/process/IncomingEmailExecutor_lib/process.js
@@ -1,3 +1,5 @@
+import("EmailUtil_lib");
+import("Util_lib");
 import("system.logging");
 import("system.question");
 import("system.datetime");
@@ -14,12 +16,208 @@ import("KeywordRegistry_basic");
 
 //TODO: comment library
 
+function IncomingEmailExecutor(pMail)
+{
+    //whenver this function is called it may not be in a context where a alias is given: the mail-importing-entity for example has no alias. 
+    //therefore set it here manually
+    this._alias = null;
+    this.setAlias();
+    this.rawMail = pMail;
+    this.mailSubject = this.rawMail[mail.MAIL_SUBJECT] || "";
+    this.mailSender = this.rawMail[mail.MAIL_SENDER];
+    this.mailSentDate = this.rawMail[mail.MAIL_SENTDATE];
+    this.mailSender = this.rawMail[mail.MAIL_SENDER];
+    
+    var mailRecipientsTo = this.rawMail[mail.RECIPIENT_TO].split(";");
+    var mailRecipientsCc = this.rawMail[mail.RECIPIENT_CC].split(";");
+    var mailRecipientsBcc = this.rawMail[mail.RECIPIENT_BCC].split(";");
+    this.mailRecipients = mailRecipientsTo.concat(mailRecipientsCc, mailRecipientsBcc).filter(function (elem){
+        return elem != "" && elem != null;
+    });
+    
+    this.senderInfo = null;
+    this._collectSenderInformation();
+    
+    //activity data and failbackActivityData will be merged later to get all the data we need
+    //we always want to prefer contacts that are active to those who are inactive (that applies to the sender and to the recipients)
+    this.activityData = {
+        links: []
+    };
+    this.failbackActivityData = {
+        employeeContactId: "",
+        direction: $KeywordRegistry.activityDirection$incoming()
+    };
+}
+
+IncomingEmailExecutor.prototype.setActivityEmployeeContactId = function (pId)
+{
+    this.activityData.employeeContactId = pId;
+};
+
+IncomingEmailExecutor.prototype.setAlias = function(pAlias)
+{
+    this._alias = pAlias || db.getCurrentAlias();
+};
+
+IncomingEmailExecutor.prototype.getMailtextAsHtml = function()
+{
+    var htmlMailText = this.rawMail[mail.MAIL_ATTACHMENTCOUNT] + " Attachement(s)<br/><br/>\n";
+    //since the activity has always and only a HTML-content-field we need to ensure that there will be always a HTML-content
+    if (this.rawMail[mail.MAIL_HTMLTEXT])
+        htmlMailText += this.rawMail[mail.MAIL_HTMLTEXT];
+    else
+        htmlMailText += text.text2html(this.rawMail[mail.MAIL_TEXT], true);
+    return htmlMailText;
+};
+
+IncomingEmailExecutor.prototype.insertUnlinkedMail = function ()
+{
+    var unlinkedMailId = util.getNewUUID();
+    var cols = ["AB_UNLINKEDMAILID", "SUBJECT", "SENTDATE", "SENDER", "RECIPIENTS", "MAIL", "USER_NEW", "DATE_NEW"];
+    var vals = [unlinkedMailId, this.mailSubject, this.mailSentDate, this.mailSender, recipients.join(", "),  mail.toRFC(this.rawMail), vars.get("$sys.user"), datetime.date()];
+    db.insertData("AB_UNLINKEDMAIL", cols, null, vals, this._alias);
+
+    return {
+        unlinkedMailId: unlinkedMailId
+    };
+};
+
+IncomingEmailExecutor.prototype._collectSenderInformation = function ()
+{
+    this.senderInfo = this.mailSender ? IncomingEmailExecutor.getContactDataByEmail(this.mailSender, this._alias) : [];
+}
+
+IncomingEmailExecutor.prototype.isUnlinkable = function ()
+{
+    return this.senderInfo.length == 0;
+}
+
+IncomingEmailExecutor.getContactDataByEmail = function (pMailAddress, pAlias)
+{
+    var mailAddress = EmailUtils.extractAddress(pMailAddress).toUpperCase();
+    var sql = SqlCondition.begin(pAlias)
+    .andPrepare("COMMUNICATION.ADDR", mailAddress, "upper(#) = ?")
+    .buildSql("select CONTACT.CONTACTID, CONTACT.STATUS, CONTACT.PERSON_ID \n\
+                                                        from COMMUNICATION \n\
+                                                        join CONTACT on (COMMUNICATION.CONTACT_ID = CONTACT.CONTACTID)");
+    var res = db.table(sql, pAlias);
+    return res;
+};
+
+IncomingEmailExecutor.prototype.createActivity = function(pAdditionalLinks)
+{
+    var senderContacts = {
+        prefered: [],
+        failback: []
+    };
+    this.senderInfo.forEach(this._getProcessingFunction(true, senderContacts), this);
+    this.activityData.links = this.activityData.links.concat(senderContacts.prefered.length > 0 ? senderContacts.prefered : senderContacts.failback);
+
+    for (var i = 0, l = this.mailRecipients.length; i < l; i++)
+    {
+        var recipientsInfo = IncomingEmailExecutor.getContactDataByEmail(this.mailRecipients[i], this._alias);
+
+        var recipientContacts = {
+            prefered: [],
+            failback: []
+        };
+        recipientsInfo.forEach(this._getProcessingFunction(false, recipientContacts), this);
+        this.activityData.links = this.activityData.links.concat(recipientContacts.prefered.length > 0 ? recipientContacts.prefered : recipientContacts.failback);
+    }
+
+    //collecting all the information and combine it for the creation
+    var activityDataForInsert = {
+        subject: this.mailSubject,
+        content: this.getMailtextAsHtml(),
+        categoryKeywordId: $KeywordRegistry.activityCategory$mail(),
+        directionKeywordId: this.activityData.direction || this.failbackActivityData.direction,
+        responsibleContactId: this.activityData.employeeContactId || this.failbackActivityData.employeeContactId
+    };
+    var activityLinks = this.activityData.links || this.failbackActivityData.links;
+    if (pAdditionalLinks)
+        activityLinks = activityLinks.concat(pAdditionalLinks);
+    activityLinks = ArrayUtils.distinct2d(activityLinks);//TODO: better check before adding the elements into the array if it already exists there
+    var activityDocs = [["mail.eml", util.encodeBase64String(mail.toRFC(this.rawMail)), true]];
+    
+    var activityRes = ActivityUtils.insertNewActivity(activityDataForInsert, activityLinks, activityDocs, this._alias);
+    return activityRes;
+};
+
+IncomingEmailExecutor.prototype.deleteUnlinkedMail = function (pUnlinkedMailId)
+{
+    if (pUnlinkedMailId)
+    {
+        db.deleteData("AB_UNLINKEDMAIL", SqlCondition.begin().andPrepare("AB_UNLINKEDMAIL.AB_UNLINKEDMAILID", pUnlinkedMailId).build(), this._alias);
+    }
+};
+
+IncomingEmailExecutor.prototype.autoProcess = function(pUnlinkedMailId)
+{
+    if (this.isUnlinkable())
+    {
+        if (pUnlinkedMailId)
+            return {
+                unlinkedMailId: pUnlinkedMailId
+            };
+        else
+            return this.insertUnlinkedMail();
+    }
+
+    var activityRes = this.createActivity();
+    this.deleteUnlinkedMail(pUnlinkedMailId);
+    return activityRes;
+};
+
+IncomingEmailExecutor.prototype._getProcessingFunction = function (pIsSender, pTargetArray)
+{
+    return function(contactInfoRow) {
+        var contactId, contactStatus, contactPersonId;
+        [contactId, contactStatus, contactPersonId] = contactInfoRow;
+        
+        //there *should* only exist no or one user per contactid, never two or more - so getUser (not getUsers) should be fine
+        var user = tools.getUserByAttribute(tools.CONTACTID, [contactId]);
+        var isEmployee = user != null;
+        var isContactActive = contactStatus == $KeywordRegistry.contactStatus$active();
+        
+        //if a user was already found we can skip determining the correct user since only one user can be set as "RESPONSIBLE" in the activity
+        if (isEmployee && !this.activityData.employeeContactId)
+        {
+            var direction = pIsSender ? $KeywordRegistry.activityDirection$outgoing() : $KeywordRegistry.activityDirection$incoming();
+            if (isContactActive)
+            {
+                this.activityData.employeeContactId = contactId;
+                this.activityData.direction = direction;
+            }
+            else
+            {
+                //if the user is inactive, we may find a better (=active) user later
+                this.failbackActivityData.employeeContactId = contactId;
+                this.failbackActivityData.direction = direction;
+            }    
+        }
+        else
+        {
+            var link = [(contactPersonId == "" ? "Organisation" : "Person"), contactId];
+            if (isContactActive)
+                pTargetArray["prefered"].push(link);
+            else
+                pTargetArray["failback"].push(link);
+        }
+    };
+};
+
+
+//TODO: comment library
+/*
 function IncomingEmailExecutor(){ }
 
-IncomingEmailExecutor._getContactDataByEmail = function (pMailAddress, pAlias)
+IncomingEmailExecutor.getContactDataByEmail = function (pMailAddress, pAlias)
 {
+//    logging.log("pMailAddress>>" + pMailAddress);
+    var mailAddress = pMailAddress//.replace("<'", "<").replace(">'", ">");//special treatment for crazy illegal addresses which can be sent in Outlook
+    mailAddress = mail.extractAddress(mailAddress).toUpperCase();
     var sql = SqlCondition.begin(pAlias)
-        .andPrepare("COMMUNICATION.ADDR", mail.extractAddress(pMailAddress).toUpperCase(), "upper(#) = ?")
+        .andPrepare("COMMUNICATION.ADDR", mailAddress, "upper(#) = ?")
         .buildSql("select CONTACT.CONTACTID, CONTACT.STATUS, CONTACT.PERSON_ID \n\
                                                         from COMMUNICATION \n\
                                                         join CONTACT on (COMMUNICATION.CONTACT_ID = CONTACT.CONTACTID)");
@@ -27,7 +225,7 @@ IncomingEmailExecutor._getContactDataByEmail = function (pMailAddress, pAlias)
     return res;
 };
 
-IncomingEmailExecutor.mailToActivity = function(pMail, pUnlinkedMailId, pAlias)
+IncomingEmailExecutor.mailToActivity = function(pMail, pUnlinkedMailId, pAlias, pOverrideConfig, pAdditionalLinks)
 {
     //whenver this function is called it may not be in a context where a alias is given: the mail-importing-entity for example has no alias. 
     //therefore set it here manually
@@ -51,17 +249,20 @@ IncomingEmailExecutor.mailToActivity = function(pMail, pUnlinkedMailId, pAlias)
         htmlMailText += text.text2html(mailObj[mail.MAIL_TEXT], true);
 
     var sentdate = mailObj[mail.MAIL_SENTDATE];
-    var senderInfo = sender ? IncomingEmailExecutor._getContactDataByEmail(sender, alias) : [];
+    var senderInfo = sender ? IncomingEmailExecutor.getContactDataByEmail(sender, alias) : [];
 
     if (senderInfo.length == 0)
     {
+        var unlinkedMailId;
         if (!pUnlinkedMailId)
         {
-            var unlinkedMailId = util.getNewUUID();
+            unlinkedMailId = util.getNewUUID();
             var cols = ["AB_UNLINKEDMAILID", "SUBJECT", "SENTDATE", "SENDER", "RECIPIENTS", "MAIL", "USER_NEW", "DATE_NEW"];
             var vals = [unlinkedMailId, subject, sentdate, sender, recipients.join(", "),  mail.toRFC(mailObj), vars.get("$sys.user"), datetime.date()];
             db.insertData("AB_UNLINKEDMAIL", cols, null, vals, alias);
         }
+        else 
+            unlinkedMailId = pUnlinkedMailId;
 
         return {
             unlinkedMailId: unlinkedMailId
@@ -73,6 +274,9 @@ IncomingEmailExecutor.mailToActivity = function(pMail, pUnlinkedMailId, pAlias)
     var activityData = {
         links: []
     };
+    if (pOverrideConfig.employeeContactId)
+        activityData.employeeContactId = pOverrideConfig.employeeContactId;
+    
     var failbackActivityData = {
         employeeContactId: "",
         direction: $KeywordRegistry.activityDirection$incoming()
@@ -88,7 +292,7 @@ IncomingEmailExecutor.mailToActivity = function(pMail, pUnlinkedMailId, pAlias)
     var contactInfoProcessingFn = _getProcessingFunction(false);
     for (var i = 0, l = recipients.length; i < l; i++)
     {
-        var recipientsInfo = IncomingEmailExecutor._getContactDataByEmail(recipients[i], alias);
+        var recipientsInfo = IncomingEmailExecutor.getContactDataByEmail(recipients[i], alias);
 
         var recipientContacts = {
             prefered: [],
@@ -107,6 +311,9 @@ IncomingEmailExecutor.mailToActivity = function(pMail, pUnlinkedMailId, pAlias)
         responsibleContactId: activityData.employeeContactId || failbackActivityData.employeeContactId
     };
     var activityLinks = activityData.links || failbackActivityData.links;
+    if (pAdditionalLinks)
+        activityLinks.push(pAdditionalLinks);
+    activityLinks = ArrayUtils.distinct2d(activityLinks);//TODO: better check before adding the elements into the array if it already exists there
     var activityDocs = [["mail.eml", util.encodeBase64String(mail.toRFC(pMail)), true]];
     var activityRes = ActivityUtils.insertNewActivity(activityDataForInsert, activityLinks, activityDocs, pAlias);
     
@@ -154,4 +361,21 @@ IncomingEmailExecutor.mailToActivity = function(pMail, pUnlinkedMailId, pAlias)
             }
         };
     }
-};
\ No newline at end of file
+};
+*/
+function IncomingEmailDataOverrides()
+{
+}
+
+IncomingEmailDataOverrides.load = function()
+{
+    return new IncomingEmailDataOverrides();
+}
+
+IncomingEmailDataOverrides.prototype.employeeContactId = function(pValue)
+{
+    if (pValue)
+        this.employeeContactId = pValue;
+    return this;
+};
+
diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js
index 0b30594ebabee3603c112641ef3857607d332ab3..974c5c3b34731047b35399ecca6e3d8722be68c9 100644
--- a/process/KeywordRegistry_basic/process.js
+++ b/process/KeywordRegistry_basic/process.js
@@ -92,7 +92,10 @@ $KeywordRegistry.addressType$private = function(){return $KeywordRegistry._autoP
 $KeywordRegistry.addressType$office = function(){return $KeywordRegistry._autoPad("OFFICEADDR");};
 
 $KeywordRegistry.offerProbability = function(){return "OfferProbability";};
+
 $KeywordRegistry.communicationMedium = function(){return "CommunicationMedium";};
+$KeywordRegistry.communicationMedium$mail = function(){return $KeywordRegistry._autoPad("COMMEMAIL");};
+
 $KeywordRegistry.salesprojectPricePolitics = function(){return "SalesprojectPricePolitics";};
 $KeywordRegistry.salesprojectWeakness = function(){return "SalesprojectWeakness";};
 $KeywordRegistry.salesprojectStrenght = function(){return "SalesprojectStrenght";};
diff --git a/process/Product_lib/process.js b/process/Product_lib/process.js
index 8f96db44736d2078070910d37bef26cead064c05..fdfb811d504c69f14e7e3247008df81f223d5006 100644
--- a/process/Product_lib/process.js
+++ b/process/Product_lib/process.js
@@ -100,7 +100,7 @@ ProductUtils.getStockCount = function(pid) {
  *                   (Subqueries are also possible)
  * 
  * @example //Product_entity, Field: PRODUCT_ID, Process: onValueChange
- *          var pid = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.PRODUCT_ID"));
+ *          var pid = vars.get("local.value");
  *          var curr = vars.exists("$param.Currency_param") ? vars.get("$param.Currency_param") : "";
  *          var contactid = vars.exists("$param.ContactId_param") ? vars.get("$param.ContactId_param") : "";
  *          var pUtils = new ProductUtils();
diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js
index 97349505c724ec2fa47c9315e6a33f7c6078fb1b..96fad8157daf52446aaf45d30932f3e1e99568d7 100644
--- a/process/Sql_lib/process.js
+++ b/process/Sql_lib/process.js
@@ -851,8 +851,8 @@ SqlBuilder.prototype._getClause = function (pElement, pPrefix, pAutoJoin)
             pElement = _getElement(pElement);
         }
     }
-    
-    if (pPrefix)
+
+    if (pPrefix && pElement)
         pElement = pPrefix + " " + pElement;
     
     return [pElement.toString(), preparedValues];
diff --git a/process/Util_lib/process.js b/process/Util_lib/process.js
index de5d265459ddeb922c5c7dc07c679a00daaa4c77..de713fa6707bd85988ac250dc3873bb6006970c4 100644
--- a/process/Util_lib/process.js
+++ b/process/Util_lib/process.js
@@ -88,7 +88,7 @@ NumberUtils.isInside = function(pValue, pMin, pMax, pIgnoreNull)
  * @return {String|False} returns the error message or false 
  * 
  * @example
- *  var value = ProcessHandlingUtils.getOnValidationValue(vars.get("$field.DISCOUNT")); <br>
+ *  var value = vars.get("local.value"); <br>
  *   <br>
  *  var validationResult = NumberUtils.validateIsBetweenFloat("Discount", value, 0, 100); <br>
  *   <br>
diff --git a/process/WsValidation_lib/process.js b/process/WsValidation_lib/process.js
index dfeb7e0835ca991790f377433728af7be78b6f2f..c5ad40dd0c210d20016709f1b867a8fc211d75ae 100644
--- a/process/WsValidation_lib/process.js
+++ b/process/WsValidation_lib/process.js
@@ -266,14 +266,14 @@ WsValidationUtils.validate = function(pValue, pType, pCountry, pCity)
 }
 
 /**
- * set all address-fields by the value of $this.value, which should contain an object of all values as JSON
+ * set all address-fields by the value of $local.value, which should contain an object of all values as JSON
  * @param {String} [pFieldToSetToValue=undefined] the field which should be set to data.value
  */
 WsValidationUtils.setAddressFields = function(pFieldToSetToValue)
 {
     try
     {
-        var data = JSON.parse(vars.getString("$this.value"));
+        var data = JSON.parse(vars.getString("$local.value"));
     } catch (exception) { 
         // if no valid json, it is a direct user input and not a uuid.
         // ignore error
diff --git a/process/ctiServerEvents/process.js b/process/ctiServerEvents/process.js
index 81944a4a3f936190a74d104935f068e5fe0004aa..0375f23402be095c7856026594d7ed536cb87f36 100644
--- a/process/ctiServerEvents/process.js
+++ b/process/ctiServerEvents/process.js
@@ -57,7 +57,11 @@ var ringingHandlerFn = function()
             notificationConfig.description(desc).caption(title);
 
             if (this.contactsCall.length > 0)
-                notificationConfig.linkInfo(text.encodeMS(["AnyContact", affectedContactId/*this.contactsCall[0].CONTACTID*/]));
+            {
+                var affectedContext = this.contactsCall[0].PERSON_ID.trim() == "" ? "Organisation" : "Person";
+                notificationConfig.linkInfo(text.encodeMS([affectedContext, affectedContactId]));
+            }
+
 
             notification.addNotificationWith(notificationConfig);
             return null;
@@ -109,7 +113,7 @@ var disconnectingHandlerFn = function()
             else
             {
                 var contactTitleMissed = this.contactsCall[0].PERSON_FULL_NAME + ", " + this.contactsCall[0].ORGANISATION_NAME;
-                title = translate.withArguments("Call from %0", [this.callData.callAddress], targetLocale);
+                title = translate.withArguments("Call from %0", [contactTitleMissed], targetLocale);
                 desc = translate.withArguments("Missed call from %0 (%1) to %2", [this.getFormattedCallAddress(), contactTitleMissed, this.getFormattedLocalAddress()], targetLocale);
             }
         }
diff --git a/process/emailWrite/process.js b/process/emailWrite/process.js
index b182346d55839c37604dccd5eef31237e210d2ae..d69b5720af1f95d2c213a0ae7c42b94dacc1680b 100644
--- a/process/emailWrite/process.js
+++ b/process/emailWrite/process.js
@@ -17,7 +17,7 @@ if (entity == "Communication_entity")
                                  .andPrepare("COMMUNICATION.COMMUNICATIONID", uid)
                                  .buildSql("select COMMUNICATION.CONTACT_ID from COMMUNICATION");
     var contactId = db.cell(contactSql)
-    EmailUtils.openNewMail(contactId, address);
+    EmailWritingUtils.openNewMail(contactId, address);
 }
 else
     neon.openUrl("mailto:" + encodeURIComponent(address), false);
\ No newline at end of file
diff --git a/process/mailbridge/process.js b/process/mailbridge/process.js
index 210f2c5fc8ef057aa5b26430ac13c320dc483933..88f17d8b32509fd74629bb49748cf66968984268 100644
--- a/process/mailbridge/process.js
+++ b/process/mailbridge/process.js
@@ -8,4 +8,5 @@ var sender = text.decodeFirst(vars.getString("$local.sender"));
 var recipients = text.decodeMS(vars.getString("$local.recipients"));
 var mailObj = mail.resolveMail(vars.getString("$local.mail"));
 
-IncomingEmailExecutor.mailToActivity(mailObj);
+var incomingMailExec = new IncomingEmailExecutor(mailObj);
+incomingMailExec.autoProcess();
\ No newline at end of file