diff --git a/.liquibase/Data_alias/basic/2020.2.0/Districts/alter_districtResponsibleDatatypes.xml b/.liquibase/Data_alias/basic/2020.2.0/Districts/alter_districtResponsibleDatatypes.xml
index 0f1ffdd8ebb4c2ef6431a1cfba700363f236e25c..7865093566d927f59c40e287bb707ec886a9458d 100644
--- a/.liquibase/Data_alias/basic/2020.2.0/Districts/alter_districtResponsibleDatatypes.xml
+++ b/.liquibase/Data_alias/basic/2020.2.0/Districts/alter_districtResponsibleDatatypes.xml
@@ -10,4 +10,4 @@
             <column name="VALIDTO"          type="DATETIME" />
         </addColumn>
     </changeSet>
-</databaseChangeLog>
\ No newline at end of file
+</databaseChangeLog> 
\ No newline at end of file
diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod
index aa6f6d7503e128af347e2a003aacb8bbf9f1a904..854be4d73cc57097e0c0d5334b6fec4c3e4494a8 100644
--- a/aliasDefinition/Data_alias/Data_alias.aod
+++ b/aliasDefinition/Data_alias/Data_alias.aod
@@ -15891,8 +15891,20 @@
                 <isUnique v="false" />
                 <index v="false" />
                 <documentation></documentation>
-                <title></title>
+                <title>District</title>
                 <description></description>
+                <customProperties>
+                  <customBooleanProperty>
+                    <name>log</name>
+                    <global v="false" />
+                    <property v="true" />
+                  </customBooleanProperty>
+                  <customJDitoProperty>
+                    <name>translate4Log</name>
+                    <global v="false" />
+                    <property>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/districtcontact/entityfields/district_id/customproperties/translate4log/property.js</property>
+                  </customJDitoProperty>
+                </customProperties>
               </entityFieldDb>
               <entityFieldDb>
                 <name>CONTACT_ID</name>
diff --git a/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/districtcontact/entityfields/district_id/customproperties/translate4log/property.js b/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/districtcontact/entityfields/district_id/customproperties/translate4log/property.js
new file mode 100644
index 0000000000000000000000000000000000000000..1107fb8c489e4ff36f2cfe85ee1607b6e5ec5098
--- /dev/null
+++ b/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/districtcontact/entityfields/district_id/customproperties/translate4log/property.js
@@ -0,0 +1,22 @@
+import("system.translate");
+import("Keyword_lib");
+import("KeywordRegistry_basic");
+import("District_lib");
+import("system.result");
+import("Loghistory_lib");
+import("Contact_lib");
+
+var params = Translate4LogParams.load();
+
+if (params.action == 'I')
+{
+    //Gebiet und Betreur umschlüsseln
+    var arrDistrictContact = DistrictUtils.getDataFromDistrictContact(params.rowId);
+    var districtName = DistrictUtils.getDistrictName(arrDistrictContact[0]);
+    var adviserName = ContactUtils.getTitleByContactId(arrDistrictContact[1]);
+    result.string(districtName + " (" + params.value + "); " + translate.text("Adviser") + ": " + adviserName);
+}
+else if (params.action == 'D')
+{
+    result.string(params.value);
+}
\ No newline at end of file
diff --git a/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/districtcontact/entityfields/status/customproperties/translate4log/property.js b/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/districtcontact/entityfields/status/customproperties/translate4log/property.js
index c079c7fd8009ca6915d731ed02160ad0e9d8ecfa..2c298584241dbb8701c02a1b7f5974471326113d 100644
--- a/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/districtcontact/entityfields/status/customproperties/translate4log/property.js
+++ b/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/districtcontact/entityfields/status/customproperties/translate4log/property.js
@@ -8,12 +8,17 @@ import("Contact_lib");
 
 var params = Translate4LogParams.load();
 
-//Keyword umschlüsseln
-var keyname = KeywordUtils.getViewValue($KeywordRegistry.contactStatus(), params.value);
+//Statusänderung protokollieren
+if (params.action == 'U')
+{
+    //Keyword umschlüsseln
+    var keyname = KeywordUtils.getViewValue($KeywordRegistry.contactStatus(), params.value);
 
-//Gebiet und Betreur umschlüsseln
-var arrDistrictContact = DistrictUtils.getDataFromDistrictContact(params.rowId);
-var districtName = DistrictUtils.getDistrictName(arrDistrictContact[0]);
-var adviserName = ContactUtils.getFullTitleByContactId(arrDistrictContact[1])
-
-result.string(keyname + " (" + translate.text("District") + ": " + districtName + "; " + translate.text("Adviser") + ": " + adviserName + ")");
\ No newline at end of file
+    //Gebiet und Betreur umschlüsseln
+    var arrDistrictContact = DistrictUtils.getDataFromDistrictContact(params.rowId);
+    var districtName = DistrictUtils.getDistrictName(arrDistrictContact[0]);
+    //var adviserName = ContactUtils.getFullTitleByContactId(arrDistrictContact[1]);
+    var adviserName = ContactUtils.getTitleByContactId(arrDistrictContact[1]);
+    
+    result.string(keyname + " (" + translate.text("District") + ": " + districtName + "; " + translate.text("Adviser") + ": " + adviserName + ")");
+}
\ No newline at end of file
diff --git a/entity/DistrictContact_entity/DistrictContact_entity.aod b/entity/DistrictContact_entity/DistrictContact_entity.aod
index 8286a522c2d89748e9ecf2d3b62a6af4abf37a10..56cffc5739509bcd270b3ad7ca418f1a1a730827 100644
--- a/entity/DistrictContact_entity/DistrictContact_entity.aod
+++ b/entity/DistrictContact_entity/DistrictContact_entity.aod
@@ -22,6 +22,8 @@
       <consumer>Organisations</consumer>
       <groupable v="true" />
       <linkedContext>Person</linkedContext>
+      <state>READONLY</state>
+      <valueProcess>%aditoprj%/entity/DistrictContact_entity/entityfields/contact_id/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/DistrictContact_entity/entityfields/contact_id/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
@@ -141,6 +143,12 @@
         <entityName>DistrictResponsible_entity</entityName>
         <fieldName>DistrictResponsibleAdvisers</fieldName>
       </dependency>
+      <children>
+        <entityParameter>
+          <name>DistrictId_param</name>
+          <valueProcess>%aditoprj%/entity/DistrictContact_entity/entityfields/advisers/children/districtid_param/valueProcess.js</valueProcess>
+        </entityParameter>
+      </children>
     </entityConsumer>
     <entityConsumer>
       <name>Districts</name>
@@ -175,6 +183,14 @@
       <name>currentOrganisationId_param</name>
       <expose v="true" />
     </entityParameter>
+    <entityParameter>
+      <name>ObjectId_param</name>
+      <expose v="true" />
+    </entityParameter>
+    <entityParameter>
+      <name>RowId_param</name>
+      <expose v="true" />
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <dbRecordContainer>
diff --git a/entity/DistrictContact_entity/entityfields/advisers/children/districtid_param/valueProcess.js b/entity/DistrictContact_entity/entityfields/advisers/children/districtid_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..a13a013fadcab4a35ad6a795015276b1fd16be0e
--- /dev/null
+++ b/entity/DistrictContact_entity/entityfields/advisers/children/districtid_param/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.vars");
+import("system.result");
+
+result.string(vars.get("$field.DISTRICT_ID"));
\ No newline at end of file
diff --git a/entity/DistrictContact_entity/entityfields/contact_id/valueProcess.js b/entity/DistrictContact_entity/entityfields/contact_id/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..bd8d4f8447e67f798cc0b1429919e71dec4401ad
--- /dev/null
+++ b/entity/DistrictContact_entity/entityfields/contact_id/valueProcess.js
@@ -0,0 +1,4 @@
+import("system.result");
+import("system.vars");
+
+result.string(vars.get("$param.currentOrganisationId_param"));
\ No newline at end of file
diff --git a/entity/DistrictContact_entity/recordcontainers/db/conditionProcess.js b/entity/DistrictContact_entity/recordcontainers/db/conditionProcess.js
index f9e0b80adf18420f7f8acf47539c268adeccda6b..2847b1e2b17599d13ff5d26a5602608adfc20fbe 100644
--- a/entity/DistrictContact_entity/recordcontainers/db/conditionProcess.js
+++ b/entity/DistrictContact_entity/recordcontainers/db/conditionProcess.js
@@ -6,6 +6,13 @@ import("Sql_lib");
 var organisationID = vars.get("$param.currentOrganisationId_param");
 var cond = newWhere();
 
+if (vars.exists("$param.RowId_param") && vars.get("$param.RowId_param") && vars.exists("$param.ObjectId_param") && vars.get("$param.ObjectId_param"))
+{
+    cond.and("DISTRICTCONTACT.ADVISER_CONTACT_ID", newSelect("DISTRICTRESPONSIBLE.EMPLOYEE_CONTACT_ID")
+                                .from("DISTRICTRESPONSIBLE")
+                                .where("DISTRICTRESPONSIBLE.DISTRICTRESPONSIBLEID", "$param.RowId_param")
+                                , SqlBuilder.IN());
+}
 if (organisationID)
 {
     cond.and("DISTRICTCONTACT.CONTACT_ID", organisationID);
diff --git a/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod b/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod
index ad1bbffb6bf0fe57bf17b54b8776ce01a0828c88..245c9ebe4dd7b0cba759977f90ee40f454697f03 100644
--- a/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod
+++ b/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod
@@ -5,6 +5,7 @@
   <documentation>%aditoprj%/entity/DistrictResponsible_entity/documentation.adoc</documentation>
   <icon>VAADIN:GLOBE</icon>
   <title>District Responsible</title>
+  <grantDeleteProcess>%aditoprj%/entity/DistrictResponsible_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/DistrictResponsible_entity/contentTitleProcess.js</contentTitleProcess>
   <iconIdProcess>%aditoprj%/entity/DistrictResponsible_entity/iconIdProcess.js</iconIdProcess>
   <image>VAADIN:GLOBE</image>
@@ -21,6 +22,7 @@
       <linkedContext>Person</linkedContext>
       <mandatory v="true" />
       <selectionMode>SINGLE</selectionMode>
+      <stateProcess>%aditoprj%/entity/DistrictResponsible_entity/entityfields/employee_contact_id/stateProcess.js</stateProcess>
       <displayValueProcess>%aditoprj%/entity/DistrictResponsible_entity/entityfields/employee_contact_id/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
@@ -209,6 +211,10 @@
           <valueProcess>%aditoprj%/entity/DistrictResponsible_entity/entityfields/adviserstates/children/containername_param/valueProcess.js</valueProcess>
           <expose v="true" />
         </entityParameter>
+        <entityParameter>
+          <name>ExcludedKeyIdsSubquery_param</name>
+          <valueProcess>%aditoprj%/entity/DistrictResponsible_entity/entityfields/adviserstates/children/excludedkeyidssubquery_param/valueProcess.js</valueProcess>
+        </entityParameter>
       </children>
     </entityConsumer>
     <entityField>
diff --git a/entity/DistrictResponsible_entity/entityfields/adviserstates/children/excludedkeyidssubquery_param/valueProcess.js b/entity/DistrictResponsible_entity/entityfields/adviserstates/children/excludedkeyidssubquery_param/valueProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..15b73f9705dc456af35c5d5e144cf88c436a79eb
--- /dev/null
+++ b/entity/DistrictResponsible_entity/entityfields/adviserstates/children/excludedkeyidssubquery_param/valueProcess.js
@@ -0,0 +1,10 @@
+import("system.result");
+import("KeywordRegistry_basic");
+import("Sql_lib");
+
+var cond = newSelect("AB_KEYWORD_ENTRY.KEYID")
+.from("AB_KEYWORD_ENTRY")
+.where("AB_KEYWORD_ENTRY.CONTAINER", $KeywordRegistry.contactStatus())
+.and("AB_KEYWORD_ENTRY.KEYID", $KeywordRegistry.contactStatus$inReview(), SqlBuilder.LIKE());
+
+result.string(cond.toString());
\ No newline at end of file
diff --git a/entity/DistrictResponsible_entity/entityfields/employee_contact_id/stateProcess.js b/entity/DistrictResponsible_entity/entityfields/employee_contact_id/stateProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..b3376f73e33c298d8cefd14c9098bd6a64f62b38
--- /dev/null
+++ b/entity/DistrictResponsible_entity/entityfields/employee_contact_id/stateProcess.js
@@ -0,0 +1,20 @@
+import("system.neon");
+import("system.vars");
+import("system.result");
+import("Sql_lib");
+import("system.db");
+
+var cond = newWhere();
+
+var test = newSelect("COUNT(*)")
+.from("DISTRICTCONTACT")
+.join("DISTRICTRESPONSIBLE", "DISTRICTCONTACT.ADVISER_CONTACT_ID = DISTRICTRESPONSIBLE.EMPLOYEE_CONTACT_ID")
+.where("DISTRICTRESPONSIBLE.EMPLOYEE_CONTACT_ID", vars.get("$field.EMPLOYEE_CONTACT_ID"))
+.arrayColumn()[0];
+
+if(test.toString() == 0){
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+} 
+else{
+    result.string(neon.COMPONENTSTATE_READONLY);
+}
\ No newline at end of file
diff --git a/entity/DistrictResponsible_entity/grantDeleteProcess.js b/entity/DistrictResponsible_entity/grantDeleteProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7039de6df63613d5985e26ef10ab10e90161e5c9
--- /dev/null
+++ b/entity/DistrictResponsible_entity/grantDeleteProcess.js
@@ -0,0 +1,13 @@
+import("Context_lib");
+import("system.vars");
+import("system.result");
+import("Entity_lib");
+
+var rowId = vars.get("$field.DISTRICTRESPONSIBLEID");
+var currentContext = ContextUtils.getCurrentContextId();
+
+var canDelete = new HasLinkedObjectTester()
+    .andNoEntityRows("DistrictContact_entity", "DistrictContacts", {ObjectId_param : currentContext, RowId_param : rowId}) //District Contact
+    .validate();
+
+result.string(canDelete);
\ No newline at end of file
diff --git a/entity/District_entity/District_entity.aod b/entity/District_entity/District_entity.aod
index 9b8b64b8204918ea1fbb962c46e5c9d3efc92f8c..c15588d76c0f7f0f5d1b05917ba42e7540a43a98 100644
--- a/entity/District_entity/District_entity.aod
+++ b/entity/District_entity/District_entity.aod
@@ -5,6 +5,8 @@
   <documentation>%aditoprj%/entity/District_entity/documentation.adoc</documentation>
   <icon>VAADIN:GLOBE</icon>
   <title>District definition</title>
+  <grantDelete v="false" />
+  <grantDeleteProcess>%aditoprj%/entity/District_entity/grantDeleteProcess.js</grantDeleteProcess>
   <contentTitleProcess>%aditoprj%/entity/District_entity/contentTitleProcess.js</contentTitleProcess>
   <iconIdProcess>%aditoprj%/entity/District_entity/iconIdProcess.js</iconIdProcess>
   <titlePlural></titlePlural>
@@ -316,6 +318,7 @@
       <isPageable v="false" />
       <conditionProcess>%aditoprj%/entity/District_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
       <orderClauseProcess>%aditoprj%/entity/District_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
+      <onDBDelete>%aditoprj%/entity/District_entity/recordcontainers/db/onDBDelete.js</onDBDelete>
       <cacheType>GLOBAL</cacheType>
       <cacheKeyProcess>%aditoprj%/entity/District_entity/recordcontainers/db/cacheKeyProcess.js</cacheKeyProcess>
       <linkInformation>
diff --git a/entity/District_entity/grantDeleteProcess.js b/entity/District_entity/grantDeleteProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7522748ad5fbe8f919791ccf756baa186da5b08a
--- /dev/null
+++ b/entity/District_entity/grantDeleteProcess.js
@@ -0,0 +1,16 @@
+import("system.result");
+import("Sql_lib");
+import("system.vars");
+
+//Ist das zu löschende Gebiet ein übergeordnetes Gebiet, dann ist das Löschen nicht erlaubt.
+var districtId = vars.get("$field.DISTRICTID");
+var anzahl = newSelect("COUNT(*)")
+                    .from("DISTRICT")
+                    .where("DISTRICT.PARENTDISTRICT_DISTRICTID", districtId)
+                    .cell(true);   
+                                   
+if (anzahl > 0)
+    result.string(false);
+else
+    result.string(true);
+
diff --git a/entity/District_entity/recordcontainers/db/onDBDelete.js b/entity/District_entity/recordcontainers/db/onDBDelete.js
new file mode 100644
index 0000000000000000000000000000000000000000..20387d3b81fded387ccec7197be53354a75fa1b6
--- /dev/null
+++ b/entity/District_entity/recordcontainers/db/onDBDelete.js
@@ -0,0 +1,16 @@
+import("Sql_lib");
+import("system.vars");
+import("system.db");
+
+var condition;
+var deleteArray = [];
+var districtId = vars.get("$field.DISTRICTID");
+
+//Gebiet wird gelöscht -> auch die Referenzen in den folgenden Tabellen löschen
+condition = newWhere("DISTRICTCONTACT.DISTRICT_ID", districtId);
+deleteArray.push(["DISTRICTCONTACT", condition.build()]);
+
+condition = newWhere("DISTRICTRESPONSIBLE.DISTRICT_ID", districtId);
+deleteArray.push(["DISTRICTRESPONSIBLE", condition.build()]);
+
+db.deletes(deleteArray);
\ No newline at end of file
diff --git a/process/District_lib/process.js b/process/District_lib/process.js
index a4160e6c1d08be4f6ef1f8f3157cebc177376f2c..8cf6f65ce504275cfa7114c4859e27888a92db8a 100644
--- a/process/District_lib/process.js
+++ b/process/District_lib/process.js
@@ -169,15 +169,15 @@ DistrictUtils.assignDistrict = function (pDistrictId, pAppliedFilter, pContactId
             "STATUS",
             "VALID_FROM", 
             "VALID_UNTIL",
-            "ORIGIN"/*,
+            "ORIGIN",
             "USER_NEW",
-            "DATE_NEW"*/
+            "DATE_NEW"
         ];
     var updateArray = [];
     var colsUpdate = [
-            "STATUS"/*,
+            "STATUS",
             "USER_EDIT",
-            "DATE_EDIT"*/
+            "DATE_EDIT"
         ];        
 
     //Anlegen der Firmen-Betreuer-Datensätze in der Tabelle DISTRICTCONTACT
@@ -215,9 +215,9 @@ DistrictUtils.assignDistrict = function (pDistrictId, pAppliedFilter, pContactId
                     arrResponsibleIds[j][2],
                     arrResponsibleIds[j][3],
                     arrResponsibleIds[j][4],
-                    $KeywordRegistry.districtOrigin$auto()/*,
+                    $KeywordRegistry.districtOrigin$auto(),
                     vars.get("$sys.user"),
-                    vars.get("$sys.date")*/
+                    vars.get("$sys.date")
                 ];                
                 insertArray.push(["DISTRICTCONTACT", colsInsert, null, valsInsert]);
             }            
@@ -233,9 +233,9 @@ DistrictUtils.assignDistrict = function (pDistrictId, pAppliedFilter, pContactId
         for (var l=0; l<arrExistingIds.length; l++)
         {
             var valsUpdate = [
-                $KeywordRegistry.contactStatus$inReview()/*,
+                $KeywordRegistry.contactStatus$inReview(),
                 vars.get("$sys.user"),
-                vars.get("$sys.date")*/
+                vars.get("$sys.date")
             ];            
             var condition = newWhere("DISTRICTCONTACT.DISTRICTCONTACTID", arrExistingIds[l][0]);
             updateArray.push(["DISTRICTCONTACT", colsUpdate, null, valsUpdate, condition.build()]);