Merge branch 'DEVELOP' of ssh://git.eclipse.org:29418/openk-usermodules/org.eclipse.openk-usermodules.gridFailureInformation.frontend into SI-532
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-api-client.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-api-client.ts
index a64d50c..decc448 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-api-client.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-api-client.ts
@@ -100,12 +100,6 @@
     return null;
   }
 
-  @GET('/expected-reasons')
-  @Adapter(GridFailureService.expectedReasonListAdapter)
-  public getGridFailureExpectedReasons(): Observable<FailureExpectedReason[]> {
-    return null;
-  }
-
   @POST('/grid-failure-informations/condense')
   @Adapter(GridFailureService.itemAdapter)
   public postGridFailuresCondensation(@Body() list: string[]): Observable<GridFailure> {
@@ -138,13 +132,17 @@
 
   @GET('/addresses/communities/{postcode}')
   @Adapter(GridFailureService.addressItemListAdapter)
-  public getAddressCommunities(@Path('postcode') postcode: string): Observable<string[]> {
+  public getAddressCommunities(@Path('postcode') postcode: string, @Query('branch') branch: string): Observable<string[]> {
     return null;
   }
 
   @GET('/addresses/districts')
   @Adapter(GridFailureService.addressItemListAdapter)
-  public getAddressDistricts(@Query('postcode') postcode: string, @Query('community') community: string): Observable<string[]> {
+  public getAddressDistricts(
+    @Query('postcode') postcode: string,
+    @Query('community') community: string,
+    @Query('branch') branch: string
+  ): Observable<string[]> {
     return null;
   }
 
@@ -153,17 +151,23 @@
   public getAddressStreets(
     @Query('postcode') postcode: string,
     @Query('community') community: string,
-    @Query('district') district: string
+    @Query('district') district: string,
+    @Query('branch') branch: string
   ): Observable<string[]> {
     return null;
   }
-
+  @GET('/expected-reasons')
+  @Adapter(GridFailureService.expectedReasonListAdapter)
+  public getGridFailureExpectedReasons(@Query('branch') branch: string): Observable<FailureExpectedReason[]> {
+    return null;
+  }
   @GET('/addresses/housenumbers')
   @Adapter(GridFailureService.housenumberListAdapter)
   public getAddressHousenumbers(
     @Query('postcode') postcode: string,
     @Query('community') community: string,
-    @Query('street') street: string
+    @Query('street') street: string,
+    @Query('branch') branch: string
   ): Observable<FailureHousenumber[]> {
     return null;
   }
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.html b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.html
index 4a2f394..a2cbc53 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.html
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.html
@@ -87,7 +87,7 @@
             <div class="form-group row">
               <label for="failureClassification" class="col-sm-2 col-form-label">{{ 'GridFailure.FailureClassification' | translate }}</label>
               <div class="col-sm-4">
-                <select type="text" class="form-control" [ngrxFormControlState]="(formState?.controls)['failureClassificationId']">
+                <select type="text" class="form-control" [ngrxFormControlState]="formState.controls['failureClassificationId']">
                   <option [value]="null" selected>{{ 'SelectOption' | translate }}</option>
                   <option *ngFor="let classification of gridFailureDetailsSandbox.gridFailureClassifications$ | async" [value]="classification.id">{{
                     classification.classification
@@ -100,7 +100,7 @@
             <div class="form-group row">
               <label for="failureType" class="col-sm-2 col-form-label">{{ 'GridFailure.FailureType' | translate }}</label>
               <div class="col-sm-4">
-                <select type="text" class="form-control" [ngrxFormControlState]="(formState?.controls)['failureTypeId']">
+                <select type="text" class="form-control" [ngrxFormControlState]="formState.controls['failureTypeId']">
                   <option [value]="null" selected>{{ 'SelectOption' | translate }}</option>
                   <option *ngFor="let type of gridFailureDetailsSandbox.gridFailureTypes$ | async" [value]="type.id">{{ type.type }}</option>
                 </select>
@@ -116,7 +116,7 @@
                   maxlength="255"
                   class="form-control"
                   id="responsibility"
-                  [ngrxFormControlState]="(formState?.controls)['responsibility']"
+                  [ngrxFormControlState]="formState.controls['responsibility']"
                   autocomplete="off"
                 />
               </div>
@@ -126,7 +126,7 @@
             <div class="form-group row">
               <label for="internExtern" class="col-sm-2 col-form-label">{{ 'GridFailure.InternExtern' | translate }}</label>
               <div class="col-sm-4">
-                <select type="text" class="form-control" id="internExtern" [ngrxFormControlState]="(formState?.controls)['internExtern']">
+                <select type="text" class="form-control" id="internExtern" [ngrxFormControlState]="formState.controls['internExtern']">
                   <option [value]="null" selected>{{ 'SelectOption' | translate }}</option>
                   <option *ngFor="let enum of gridFailureDetailsSandbox.internExternEnum | keyvalue" [value]="enum.key">{{ enum.value }}</option>
                 </select>
@@ -142,7 +142,7 @@
                   type="text"
                   maxlength="255"
                   class="form-control"
-                  [ngrxFormControlState]="(formState?.controls)['statusIntern']"
+                  [ngrxFormControlState]="formState.controls['statusIntern']"
                   autocomplete="off"
                   readonly
                 />
@@ -158,7 +158,7 @@
                   type="text"
                   maxlength="255"
                   class="form-control"
-                  [ngrxFormControlState]="(formState?.controls)['statusExtern']"
+                  [ngrxFormControlState]="formState.controls['statusExtern']"
                   autocomplete="off"
                   readonly
                 />
@@ -169,7 +169,7 @@
             <div class="form-group row">
               <label for="publicationStatus" class="col-sm-2 col-form-label">{{ 'GridFailure.PublicationStatus' | translate }}</label>
               <div class="col-sm-4">
-                <select type="text" class="form-control" id="publicationStatus" [ngrxFormControlState]="(formState?.controls)['publicationStatus']">
+                <select type="text" class="form-control" id="publicationStatus" [ngrxFormControlState]="formState.controls['publicationStatus']">
                   <option [value]="null" selected>{{ 'SelectOption' | translate }}</option>
                   <option *ngFor="let enum of gridFailureDetailsSandbox.publicationStatusEnum | keyvalue" [value]="enum.key">{{ enum.value }}</option>
                 </select>
@@ -185,9 +185,15 @@
             <div class="form-group row">
               <label for="branch" class="col-sm-2 col-form-label">{{ 'GridFailure.Branch' | translate }}</label>
               <div class="col-sm-4">
-                <select required type="text" class="form-control" [ngrxFormControlState]="(formState?.controls)['branchId']">
+                <select required type="text" class="form-control" [ngrxFormControlState]="formState.controls['__formBranch']">
                   <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
-                  <option *ngFor="let branch of gridFailureDetailsSandbox.gridFailureBranches$ | async" [value]="branch.id">{{ branch.description }}</option>
+                  <option
+                    *ngFor="let branch of gridFailureDetailsSandbox.gridFailureBranches$ | async"
+                    [value]="branch"
+                    [selected]="branch.id === formState.controls['branchId'].value"
+                  >
+                    {{ branch.description }}</option
+                  >
                 </select>
               </div>
             </div>
@@ -196,7 +202,7 @@
             <div class="form-group row">
               <label for="voltageLevel" class="col-sm-2 col-form-label">{{ 'GridFailure.VoltageLevel' | translate }}</label>
               <div class="col-sm-4">
-                <select required type="text" class="form-control" id="voltageLevel" [ngrxFormControlState]="(formState?.controls)['voltageLevel']">
+                <select required type="text" class="form-control" id="voltageLevel" [ngrxFormControlState]="formState.controls['voltageLevel']">
                   <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
                   <option *ngFor="let enum of gridFailureDetailsSandbox.voltageLevelEnum | keyvalue" [value]="enum.key">{{ enum.value }}</option>
                 </select>
@@ -204,10 +210,10 @@
             </div>
 
             <!-- pressureLevel -->
-            <div class="form-group row">
+            <div class="form-group row" [visibleByDependentField]="!(gridFailureDetailsSandbox.isPowerBranchSelected$ | async)">
               <label for="pressureLevel" class="col-sm-2 col-form-label">{{ 'GridFailure.PressureLevel' | translate }}</label>
               <div class="col-sm-4">
-                <select type="text" class="form-control" id="pressureLevel" [ngrxFormControlState]="(formState?.controls)['pressureLevel']">
+                <select type="text" class="form-control" id="pressureLevel" [ngrxFormControlState]="formState.controls['pressureLevel']">
                   <option [value]="null" selected>{{ 'SelectOption' | translate }}</option>
                   <option *ngFor="let enum of gridFailureDetailsSandbox.pressureLevelEnum | keyvalue" [value]="enum.key">{{ enum.value }}</option>
                 </select>
@@ -220,11 +226,8 @@
               <div class="input-group col-sm-4">
                 <app-date-time-picker
                   [isRequired]="true"
-                  [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['failureBegin']"
-                  [isDisabled]="
-                    !gridFailureDetailsSandbox.saveEnabled ||
-                    ((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['failureBegin']?.isDisabled
-                  "
+                  [ngrxFormControlState]="formState.controls['failureBegin']"
+                  [isDisabled]="formState.controls['failureBegin']?.isDisabled"
                 >
                 </app-date-time-picker>
               </div>
@@ -235,11 +238,8 @@
               <label for="failureEndPlanned" class="col-sm-2 col-form-label">{{ 'GridFailure.FailureEndPlanned' | translate }}</label>
               <div class="input-group col-sm-4">
                 <app-date-time-picker
-                  [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['failureEndPlanned']"
-                  [isDisabled]="
-                    !gridFailureDetailsSandbox.saveEnabled ||
-                    ((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['failureEndPlanned']?.isDisabled
-                  "
+                  [ngrxFormControlState]="formState.controls['failureEndPlanned']"
+                  [isDisabled]="formState.controls['failureEndPlanned']?.isDisabled"
                 >
                 </app-date-time-picker>
               </div>
@@ -250,11 +250,8 @@
               <label for="failureEndResupplied" class="col-sm-2 col-form-label">{{ 'GridFailure.FailureEndResupplied' | translate }}</label>
               <div class="input-group col-sm-4">
                 <app-date-time-picker
-                  [ngrxFormControlState]="((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['failureEndResupplied']"
-                  [isDisabled]="
-                    !gridFailureDetailsSandbox.saveEnabled ||
-                    ((gridFailureDetailsSandbox.gridFailureDetailsFormState$ | async)?.controls)['failureEndResupplied']?.isDisabled
-                  "
+                  [ngrxFormControlState]="formState.controls['failureEndResupplied']"
+                  [isDisabled]="formState.controls['failureEndResupplied']?.isDisabled"
                 >
                 </app-date-time-picker>
               </div>
@@ -264,7 +261,7 @@
             <div class="form-group row">
               <label for="expectedReason" class="col-sm-2 col-form-label">{{ 'GridFailure.ExpectedReason' | translate }}</label>
               <div class="col-sm-4">
-                <select required type="text" class="form-control" id="expectedReason" [ngrxFormControlState]="(formState?.controls)['expectedReasonId']">
+                <select required type="text" class="form-control" id="expectedReason" [ngrxFormControlState]="formState.controls['expectedReasonId']">
                   <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
                   <option *ngFor="let item of gridFailureDetailsSandbox.gridFailureExpectedReasons$ | async" [value]="item.id">{{ item.text }}</option>
                 </select>
@@ -276,7 +273,7 @@
                   maxlength="255"
                   class="form-control"
                   id="publicationFreetext"
-                  [ngrxFormControlState]="(formState?.controls)['publicationFreetext']"
+                  [ngrxFormControlState]="formState.controls['publicationFreetext']"
                   autocomplete="off"
                 />
               </div>
@@ -291,7 +288,7 @@
                   maxlength="255"
                   class="form-control"
                   id="internalRemark"
-                  [ngrxFormControlState]="(formState?.controls)['internalRemark']"
+                  [ngrxFormControlState]="formState.controls['internalRemark']"
                   autocomplete="off"
                 />
               </div>
@@ -307,22 +304,37 @@
               <div class="btn-group" *ngIf="formState?.isEnabled">
                 <button
                   class="btn btn-primary non-outline"
-                  (click)="failureLocationView = 'NS'; disableUnnecessaryRequiredProperties(); gridFailureDetailsSandbox.resetFailureLocationValues()"
-                  [class.active]="failureLocationView === 'NS'"
+                  (click)="
+                    failureLocationView = Globals.FAILURE_LOCATION_NS;
+                    disableUnnecessaryRequiredProperties();
+                    gridFailureDetailsSandbox.resetFailureLocationValues();
+                    resizeSetMap()
+                  "
+                  [class.active]="failureLocationView === Globals.FAILURE_LOCATION_NS"
                 >
                   {{ 'GridFailure.SubTitle3' | translate }}
                 </button>
                 <button
                   class="btn btn-primary non-outline"
-                  (click)="failureLocationView = 'MS'; disableUnnecessaryRequiredProperties(); gridFailureDetailsSandbox.resetFailureLocationValues()"
-                  [class.active]="failureLocationView === 'MS'"
+                  (click)="
+                    failureLocationView = Globals.FAILURE_LOCATION_MS;
+                    disableUnnecessaryRequiredProperties();
+                    gridFailureDetailsSandbox.resetFailureLocationValues();
+                    resizeSetMap()
+                  "
+                  [class.active]="failureLocationView === Globals.FAILURE_LOCATION_MS"
                 >
                   {{ 'GridFailure.SubTitle4' | translate }}
                 </button>
                 <button
                   class="btn btn-primary non-outline"
-                  (click)="failureLocationView = 'map'; disableUnnecessaryRequiredProperties(); gridFailureDetailsSandbox.resetFailureLocationValues()"
-                  [class.active]="failureLocationView === 'map'"
+                  (click)="
+                    failureLocationView = Globals.FAILURE_LOCATION_MAP;
+                    disableUnnecessaryRequiredProperties();
+                    gridFailureDetailsSandbox.resetFailureLocationValues();
+                    resizeSetMap()
+                  "
+                  [class.active]="failureLocationView === Globals.FAILURE_LOCATION_MAP"
                 >
                   {{ 'GridFailure.Map' | translate }}
                 </button>
@@ -342,7 +354,7 @@
                       class="form-control"
                       id="postcode"
                       [ngbTypeahead]="gridFailureDetailsSandbox.searchForAddressPostalcodes"
-                      [ngrxFormControlState]="(formState?.controls)['postcode']"
+                      [ngrxFormControlState]="formState.controls['postcode']"
                       autocomplete="off"
                     />
                   </div>
@@ -357,7 +369,7 @@
                       type="text"
                       class="form-control"
                       id="city"
-                      [ngrxFormControlState]="(formState?.controls)['city']"
+                      [ngrxFormControlState]="formState.controls['city']"
                     >
                       <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
                       <option *ngFor="let item of gridFailureDetailsSandbox.addressCommunities$ | async" [value]="item">{{ item }}</option>
@@ -374,7 +386,7 @@
                       type="text"
                       class="form-control"
                       id="district"
-                      [ngrxFormControlState]="(formState?.controls)['district']"
+                      [ngrxFormControlState]="formState.controls['district']"
                     >
                       <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
                       <option *ngFor="let item of gridFailureDetailsSandbox.addressDistricts$ | async" [value]="item">{{ item }}</option>
@@ -391,7 +403,7 @@
                       type="text"
                       class="form-control"
                       id="street"
-                      [ngrxFormControlState]="(formState?.controls)['street']"
+                      [ngrxFormControlState]="formState.controls['street']"
                     >
                       <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
                       <option *ngFor="let item of gridFailureDetailsSandbox.addressStreets$ | async" [value]="item">{{ item }}</option>
@@ -408,7 +420,7 @@
                       type="text"
                       class="form-control"
                       id="housenumber"
-                      [ngrxFormControlState]="(formState?.controls)['housenumber']"
+                      [ngrxFormControlState]="formState.controls['housenumber']"
                     >
                       <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
                       <option *ngFor="let housenumber of gridFailureDetailsSandbox.addressHouseNumbers$ | async" [value]="housenumber"
@@ -434,7 +446,7 @@
                       (selectItem)="gridFailureDetailsSandbox.latLonMapping($event.item); gridFailureDetailsSandbox.setStationId($event.item.stationId)"
                       [ngbTypeahead]="gridFailureDetailsSandbox.searchForStation"
                       [ngrxValueConverter]="gridFailureDetailsSandbox.stationValueConverter"
-                      [ngrxFormControlState]="(formState?.controls)['stationDescription']"
+                      [ngrxFormControlState]="formState.controls['stationDescription']"
                       [resultFormatter]="gridFailureDetailsSandbox.formatter"
                       [inputFormatter]="gridFailureDetailsSandbox.formatter"
                     />
@@ -444,7 +456,7 @@
                 <div class="form-group row">
                   <label for="radius" class="col-sm-5 col-form-label">{{ 'GridFailure.RadiusInMeter' | translate }}</label>
                   <div class="col-sm-6">
-                    <select required type="text" class="form-control" [ngrxFormControlState]="(formState?.controls)['radiusId']">
+                    <select required type="text" class="form-control" [ngrxFormControlState]="formState.controls['radiusId']">
                       <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
                       <option *ngFor="let item of gridFailureDetailsSandbox.gridFailureRadii$ | async" [value]="item.id">{{ item.radius }}</option>
                     </select>
@@ -453,6 +465,7 @@
               </div>
               <div class="map-detail-view">
                 <openk-grid-failure-information-map
+                  [mapOptions]="mapOptions"
                   [mapDetailData]="gridFailureDetailsSandbox.currentGridFailureDetailsCoords"
                   [setInteractionMode]="mapInteractionMode"
                   (latLong)="gridFailureDetailsSandbox.latLonMapping($event)"
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.scss b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.scss
index 51262db..e0c1552 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.scss
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.scss
@@ -40,6 +40,7 @@
 }
 
 .version-select {
+  width: auto;
   margin: 8px;
 }
 .isDisabled {
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.ts
index 7838302..1014fb0 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.ts
@@ -19,6 +19,7 @@
 import * as store from '@grid-failure-information-app/shared/store';
 import { Store } from '@ngrx/store';
 import { Observable } from 'rxjs';
+import { MapOptions } from '@openk-libs/grid-failure-information-map/shared/models/map-options.model';
 
 @Component({
   selector: 'app-grid-failure-details',
@@ -32,7 +33,7 @@
   public gridFailureVersions$: Observable<GridFailure[]> = this.appState$.select(store.getGridFailureVersionsData);
   private readonly _initialLocationView = Globals.FAILURE_LOCATION_NS;
   public failureLocationView: string = this._initialLocationView;
-
+  public mapOptions: MapOptions = new MapOptions();
   public get mapInteractionMode(): boolean {
     return this.failureLocationView === Globals.FAILURE_LOCATION_MAP;
   }
@@ -50,7 +51,9 @@
       this.gridFailureDetailsSandbox.resetStationId();
     }
   }
-
+  public resizeSetMap() {
+    this.mapOptions.forceResize$.next(true);
+  }
   public disableUnnecessaryRequiredProperties() {
     this.gridFailureDetailsSandbox.disableUnnecessaryRequiredProperties(this.failureLocationView);
   }
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.spec.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.spec.ts
index ff5da6a..d829718 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.spec.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.spec.ts
@@ -1,3 +1,4 @@
+import { browser } from 'protractor';
 import { FORM_ID } from '@grid-failure-information-app/shared/store/reducers/grid-failures/grid-failure-details-form.reducer';
 import { INITIAL_STATE } from './../../../shared/store/reducers/grid-failures/grid-failure-details-form.reducer';
 /********************************************************************************
@@ -22,7 +23,8 @@
 import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
 import { ActionsSubject, Store } from '@ngrx/store';
 import { of } from 'rxjs';
-import { createFormGroupState, EnableAction, DisableAction } from 'ngrx-forms';
+import { EnableAction, DisableAction } from 'ngrx-forms';
+import { async } from '@angular/core/testing';
 
 describe('GridFailureDetailsSandbox', () => {
   let service: GridFailureDetailsSandbox;
@@ -33,26 +35,23 @@
   let modalService: NgbModal;
   let dispatchSpy: any;
 
-  beforeEach(() => {
+  beforeEach(async(() => {
     appState = { dispatch: () => {}, pipe: () => of(true), select: () => of(true), userDefinedProperties: { controlId: '' } } as any;
     actionSubject = { pipe: () => of(true), map: () => ({}) } as any;
     utilService = { displayNotification() {} } as any;
     router = { navigateByUrl() {} } as any;
     modalService = { open() {} } as any;
     dispatchSpy = spyOn(appState, 'dispatch').and.callFake(() => {});
-
+    const branch: FailureBranch = new FailureBranch();
+    branch.id = '00';
+    branch.name = 'OS';
+    branch.description = 'ohne Sparte';
     service = new GridFailureDetailsSandbox(appState, actionSubject, router, utilService, modalService);
-    const gridFailureDetailsFormState = createFormGroupState<GridFailure>(
-      FORM_ID,
-      new GridFailure({
-        branchId: '123',
-        addressPolygonPoints: [1.24, 1.24],
-      })
-    );
-    service.gridFailureDetailsFormState$ = of(gridFailureDetailsFormState as any);
-    service.currentFormState = gridFailureDetailsFormState;
+    service.currentFormState = INITIAL_STATE;
+    service.gridFailureBranches$ = of([branch]);
+    service.gridFailureDetailsFormState$ = of((INITIAL_STATE.value.branchId = '00' as any));
     service.noBranchId = '123';
-  });
+  }));
 
   it('should create GridFailureDetailsSandbox service', () => {
     expect(service).toBeTruthy();
@@ -88,9 +87,18 @@
     expect(appState.dispatch).toHaveBeenCalledWith(gridFailureActions.loadGridFailureRadii());
   });
 
-  it('should dispatch loadGridFailureExpectedReasons Action via loadGridFailureExpectedReasons()', () => {
-    service.loadGridFailureExpectedReasons();
-    expect(appState.dispatch).toHaveBeenCalledWith(gridFailureActions.loadGridFailureExpectedReasons());
+  xit('should dispatch loadGridFailureExpectedReasons Action via registerLoadGridFailureExpectedReasons()', () => {
+    const branch: FailureBranch = new FailureBranch();
+    branch.id = '00';
+    branch.name = 'OS';
+    branch.description = 'ohne Sparte';
+    const branches: FailureBranch[] = [branch];
+    service.gridFailureDetailsFormState$ = of((INITIAL_STATE.value.branchId = '00' as any));
+    service.currentFormState = INITIAL_STATE.value.branchId = '00' as any;
+    service.gridFailureBranches$ = of(branches);
+    (service as any)._registerLoadGridFailureExpectedReasons();
+
+    expect(appState.dispatch).toHaveBeenCalledWith(gridFailureActions.loadGridFailureExpectedReasons({ payload: branch.name }));
   });
 
   it('should dispatch loadGridFailureVersions Action via loadGridFailureVersions(id)', () => {
@@ -137,12 +145,11 @@
     gfdetail.responsibility = 'test';
     gfdetail.postcode = '00000';
 
-    service.currentFormState = {
-      ...service.currentFormState,
-      isValid: true,
-      value: gfdetail,
-      userDefinedProperties: { controlId: '' },
-    };
+    service.currentFormState = INITIAL_STATE;
+    (service.currentFormState as any).isValid = true;
+    (service.currentFormState as any).value = gfdetail;
+    (service.currentFormState as any).userDefinedProperties = { controlId: '' };
+
     service.saveGridFailure();
     expect(dispatchSpy).toHaveBeenCalledWith(Object({ payload: gfdetail, type: gridFailureActions.saveGridFailure.type }));
     expect(spy1).toHaveBeenCalled();
@@ -155,33 +162,23 @@
     gfdetail.responsibility = 'test';
     gfdetail.postcode = '00000';
 
-    service.currentFormState = {
-      ...service.currentFormState,
-      isValid: false,
-      value: gfdetail,
-      userDefinedProperties: { controlId: '' },
-    };
+    service.currentFormState = INITIAL_STATE;
+    (service.currentFormState as any).isValid = false;
+    (service.currentFormState as any).value = gfdetail;
+    (service.currentFormState as any).userDefinedProperties = { controlId: '' };
+
     service.saveGridFailure();
     expect(spy1).toHaveBeenCalled();
   });
 
   it('should register events', () => {
-    let gridFailureDetailsFormResponse: any = {
-      value: {
-        failureBegin: 'test1',
-        failureEndPlanned: 'test2',
-        failureEndResupplied: 'test3',
-        postcode: '00000',
-      },
-      userDefinedProperties: { controlId: '' },
-    };
-    service.gridFailureDetailsFormState$ = of(gridFailureDetailsFormResponse);
     const gridFailure: GridFailure = new GridFailure();
     gridFailure.versionNumber = 3;
     const gridFailureVersions: GridFailure[] = [gridFailure];
     spyOn(actionSubject, 'pipe').and.returnValue(of({ payload: gridFailureVersions }));
     const spy = spyOn(service as any, '_showButtonsByState');
 
+    service.gridFailureDetailsFormState$ = of({ ...INITIAL_STATE });
     service.registerEvents();
     expect(service.currentFormState).toBeDefined();
     expect(spy).toHaveBeenCalled();
@@ -199,13 +196,15 @@
         postcode: { id: 'gridFailureDetailsForm.postcode' },
       },
     };
-    spyOn(service.gridFailureDetailsFormState$, 'pipe').and.returnValue(of(formState));
+
+    service.gridFailureDetailsFormState$ = of({ ...INITIAL_STATE, formState });
     service.registerEvents();
     expect(appState.dispatch).toHaveBeenCalled();
   });
 
   it('should dispatch action in response to controlId = gridFailureDetailsForm.postcode', () => {
     let formState: any = {
+      id: 'gridFailureDetailsForm',
       value: {
         statusIntern: StateEnum.CREATED,
         postcode: '00000',
@@ -215,7 +214,8 @@
         postcode: { id: 'gridFailureDetailsForm.postcode' },
       },
     };
-    spyOn(service.gridFailureDetailsFormState$, 'pipe').and.returnValue(of(formState));
+
+    service.gridFailureDetailsFormState$ = of({ ...INITIAL_STATE, formState });
     service.registerEvents();
     expect(appState.dispatch).toHaveBeenCalled();
   });
@@ -233,13 +233,15 @@
         city: { id: 'gridFailureDetailsForm.city' },
       },
     };
-    spyOn(service.gridFailureDetailsFormState$, 'pipe').and.returnValue(of(formState));
+
+    service.gridFailureDetailsFormState$ = of({ ...INITIAL_STATE, formState });
     service.registerEvents();
     expect(appState.dispatch).toHaveBeenCalled();
   });
 
   it('should dispatch action in response to controlId = gridFailureDetailsForm.district', () => {
     let formState: any = {
+      id: 'gridFailureDetailsForm',
       value: {
         statusIntern: StateEnum.CREATED,
         postcode: '00000',
@@ -253,13 +255,15 @@
         district: { id: 'gridFailureDetailsForm.district' },
       },
     };
-    spyOn(service.gridFailureDetailsFormState$, 'pipe').and.returnValue(of(formState));
+
+    service.gridFailureDetailsFormState$ = of({ ...INITIAL_STATE, formState });
     service.registerEvents();
     expect(appState.dispatch).toHaveBeenCalled();
   });
 
   it('should dispatch action in response to controlId = gridFailureDetailsForm.street', () => {
     let formState: any = {
+      id: 'gridFailureDetailsForm',
       value: {
         statusIntern: StateEnum.CREATED,
         postcode: '00000',
@@ -275,7 +279,8 @@
         street: { id: 'gridFailureDetailsForm.street' },
       },
     };
-    spyOn(service.gridFailureDetailsFormState$, 'pipe').and.returnValue(of(formState));
+
+    service.gridFailureDetailsFormState$ = of({ ...INITIAL_STATE, formState });
     service.registerEvents();
     expect(appState.dispatch).toHaveBeenCalled();
   });
@@ -384,11 +389,8 @@
     gfdetail.id = 'id';
     gfdetail.responsibility = 'test';
 
-    service.currentFormState = {
-      ...service.currentFormState,
-      isValid: true,
-      value: gfdetail,
-    };
+    (service.currentFormState as any).isValid = true;
+    (service.currentFormState as any).value = gfdetail;
 
     service.latLonMapping(null);
     expect(dispatchSpy).not.toHaveBeenCalled();
@@ -412,11 +414,9 @@
     gfdetail.id = 'id';
     gfdetail.stationId = '1';
 
-    service.currentFormState = {
-      ...service.currentFormState,
-      isValid: true,
-      value: gfdetail,
-    };
+    service.currentFormState = INITIAL_STATE;
+    (service.currentFormState as any).isValid = true;
+    (service.currentFormState as any).value = gfdetail;
 
     const stationId = '2';
 
@@ -431,11 +431,9 @@
     gfdetail.longitude = 1.0;
     gfdetail.latitude = 1.0;
 
-    service.currentFormState = {
-      ...service.currentFormState,
-      isValid: true,
-      value: gfdetail,
-    };
+    service.currentFormState = INITIAL_STATE;
+    (service.currentFormState as any).isValid = true;
+    (service.currentFormState as any).value = gfdetail;
 
     service.resetCoords();
 
@@ -446,12 +444,9 @@
     const gfdetail = new GridFailure();
     gfdetail.id = 'id';
     gfdetail.stationId = 'test';
-
-    service.currentFormState = {
-      ...service.currentFormState,
-      isValid: true,
-      value: gfdetail,
-    };
+    service.currentFormState = INITIAL_STATE;
+    (service.currentFormState as any).isValid = true;
+    (service.currentFormState as any).value = gfdetail;
 
     service.resetStationId();
 
@@ -532,14 +527,14 @@
   it('should set the required values false if the brnach id is the right', () => {
     service.noBranchId = '123';
     service.currentFormState = { controls: { branchId: { value: '123' } as any } as any } as any;
-    (service as any).setDynamicRequired();
+    (service as any)._setDynamicRequired();
     expect(service.isFieldRequiredDependingOnBranchId).toBeFalsy();
   });
 
   it('should set the required values true if the brnach id is the not right', () => {
     service.noBranchId = '456';
     service.currentFormState = { controls: { branchId: { value: '123' } as any } as any } as any;
-    (service as any).setDynamicRequired();
+    (service as any)._setDynamicRequired();
     expect(service.isFieldRequiredDependingOnBranchId).toBeTruthy();
   });
 
@@ -551,7 +546,7 @@
     const branches: FailureBranch[] = [branch];
     service.gridFailureBranches$ = of(branches);
     service.noBranchId = '123';
-    (service as any).setNoBranchId();
+    (service as any)._setNoBranchId();
     expect(service.noBranchId).toBe('123');
   });
 
@@ -563,7 +558,7 @@
     const branches: FailureBranch[] = [branch];
     service.gridFailureBranches$ = of(branches);
     service.noBranchId = '123';
-    (service as any).setNoBranchId();
+    (service as any)._setNoBranchId();
     expect(service.noBranchId).toBe(null);
   });
 
@@ -573,11 +568,9 @@
     gfdetail.responsibility = 'test';
     gfdetail.stationId = 'test';
 
-    service.currentFormState = {
-      ...service.currentFormState,
-      isValid: true,
-      value: gfdetail,
-    };
+    service.currentFormState = INITIAL_STATE;
+    (service.currentFormState as any).isValid = true;
+    (service.currentFormState as any).value = gfdetail;
 
     service.resetFailureLocationValues();
     expect(dispatchSpy).toHaveBeenCalled();
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts
index f4aedc4..7787401 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts
@@ -1,3 +1,4 @@
+import { NgrxValueConverters } from 'ngrx-forms';
 /********************************************************************************
  * Copyright (c) 2020 Contributors to the Eclipse Foundation
  *
@@ -10,67 +11,73 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
-import { loadAddressCommunities } from '@grid-failure-information-app/shared/store/actions/grid-failures.action';
 import { Injectable } from '@angular/core';
 import { Router } from '@angular/router';
 import { SafetyQueryDialogComponent } from '@grid-failure-information-app/shared/components/dialogs/safety-query-dialog/safety-query-dialog.component';
-import { InternExternEnum, PressureLevelEnum, PublicationStatusEnum, StateEnum, VoltageLevelEnum } from '@grid-failure-information-app/shared/constants/enums';
+import * as enums from '@grid-failure-information-app/shared/constants/enums';
 import { Globals } from '@grid-failure-information-app/shared/constants/globals';
-import {
-  FailureAddress,
-  FailureBranch,
-  FailureClassification,
-  FailureCoords,
-  FailureExpectedReason,
-  FailureHousenumber,
-  FailureRadius,
-  FailureState,
-  FailureStation,
-  FailureType,
-  GridFailure,
-} from '@grid-failure-information-app/shared/models';
+import * as models from '@grid-failure-information-app/shared/models';
 import { BaseFormSandbox } from '@grid-failure-information-app/shared/sandbox/base-form.sandbox';
 import * as store from '@grid-failure-information-app/shared/store';
 import * as gridFailureActions from '@grid-failure-information-app/shared/store/actions/grid-failures.action';
-import * as fromGridFailuresDetailFormReducer from '@grid-failure-information-app/shared/store/reducers/grid-failures/grid-failure-details-form.reducer';
-import * as gridFailuresDetailFormReducer from '@grid-failure-information-app/shared/store/reducers/grid-failures/grid-failure-details-form.reducer';
-import { navigateHome, stationToStationNameConverter as stationToStationDescriptionConverter } from '@grid-failure-information-app/shared/utility';
+import { navigateHome, stationToStationDescriptionConverter, getAddressRelevantBranch } from '@grid-failure-information-app/shared/utility';
 import { unboxProperties } from '@grid-failure-information-app/shared/utility/form-utils';
 import { UtilService } from '@grid-failure-information-app/shared/utility/utility.service';
 import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
 import { ofType } from '@ngrx/effects';
 import { ActionsSubject, Store } from '@ngrx/store';
-import { Observable } from 'rxjs';
-import { debounceTime, distinctUntilChanged, map, take, takeUntil } from 'rxjs/operators';
-import { FORM_ID, NO_BRANCH_ID_KEY } from '@grid-failure-information-app/shared/store/reducers/grid-failures/grid-failure-details-form.reducer';
+import { Observable, combineLatest } from 'rxjs';
+import { debounceTime, distinctUntilChanged, map, take, takeUntil, skipWhile } from 'rxjs/operators';
+import {
+  FORM_ID,
+  NO_BRANCH_ID_KEY,
+  INITIAL_STATE,
+  DEPENDENT_FIELD_KEY,
+} from '@grid-failure-information-app/shared/store/reducers/grid-failures/grid-failure-details-form.reducer';
 import { FormGroupState, NgrxValueConverter, SetValueAction, ResetAction, EnableAction, SetUserDefinedPropertyAction, DisableAction } from 'ngrx-forms';
 
 @Injectable()
-export class GridFailureDetailsSandbox extends BaseFormSandbox<GridFailure> {
+export class GridFailureDetailsSandbox extends BaseFormSandbox<models.GridFailure> {
   public Globals = Globals;
-  public StateEnum = StateEnum;
-  public gridFailureDetailsFormState$: Observable<FormGroupState<GridFailure>> = this.appState$.select(store.getGridFailuresDetails);
-  public currentFormState: FormGroupState<GridFailure>;
-  public gridFailureClassifications$: Observable<FailureClassification[]> = this.appState$.select(store.getGridFailureClassificationsData);
-  public gridFailureTypes$: Observable<FailureType[]> = this.appState$.select(store.getGridFailureTypesData);
-  public gridFailureBranches$: Observable<FailureBranch[]> = this.appState$.select(store.getGridFailureBranchesData);
+  public StateEnum = enums.StateEnum;
+  public gridFailureDetailsFormState$: Observable<FormGroupState<models.GridFailure>> = this.appState$.select(store.getGridFailuresDetails);
+  public currentFormState: FormGroupState<models.GridFailure>;
+  public gridFailureClassifications$: Observable<models.FailureClassification[]> = this.appState$.select(store.getGridFailureClassificationsData);
+  public gridFailureTypes$: Observable<models.FailureType[]> = this.appState$.select(store.getGridFailureTypesData);
+  public gridFailureBranches$: Observable<models.FailureBranch[]> = this.appState$.select(store.getGridFailureBranchesData);
   public gridFailureActions = gridFailureActions;
-  public gridFailureInternalStates$: Observable<FailureState[]> = this.appState$
+  public gridFailureInternalStates$: Observable<models.FailureState[]> = this.appState$
     .select(store.getGridFailureStatesData)
     .pipe(map(states => states.filter(item => item.internal)));
-  public gridFailureExternalStates$: Observable<FailureState[]> = this.appState$
+  public gridFailureExternalStates$: Observable<models.FailureState[]> = this.appState$
     .select(store.getGridFailureStatesData)
     .pipe(map(states => states.filter(item => item.external)));
-  public gridFailureRadii$: Observable<FailureRadius[]> = this.appState$.select(store.getGridFailureRadiiData);
-  public gridFailureExpectedReasons$: Observable<FailureExpectedReason[]> = this.appState$.select(store.getGridFailureExpectedReasonsData);
-  public voltageLevelEnum = VoltageLevelEnum;
-  public pressureLevelEnum = PressureLevelEnum;
-  public publicationStatusEnum = PublicationStatusEnum;
-  public internExternEnum = InternExternEnum;
+  public gridFailureRadii$: Observable<models.FailureRadius[]> = this.appState$.select(store.getGridFailureRadiiData);
+  public datePickerResetEnum = enums.DatePickerResetEnum;
+  public voltageLevelEnum = enums.VoltageLevelEnum;
+  public gridFailureExpectedReasons$: Observable<models.FailureExpectedReason[]> = this.appState$.select(store.getGridFailureExpectedReasonsData);
+  public pressureLevelEnum = enums.PressureLevelEnum;
+  public publicationStatusEnum = enums.PublicationStatusEnum;
+  public internExternEnum = enums.InternExternEnum;
   public maxVersionNumber: number;
-  public currentGridFailureDetailsCoords: FailureCoords = new FailureCoords();
+  public currentGridFailureDetailsCoords: models.FailureCoords = new models.FailureCoords();
   public noBranchId: string;
   public isFieldRequiredDependingOnBranchId: boolean = false;
+  public isPowerBranchSelected$: Observable<boolean> = combineLatest(
+    this.appState$.select(store.getGridFailuresDetails),
+    this.appState$.select(store.getGridFailureBranchesData)
+  ).pipe(
+    map(([gfd, branches]) => {
+      if (!branches) {
+        return;
+      }
+      const powerBranch = branches.find(branch => branch.name === Globals.BUSINESS_RULE_FIELDS.branchStrom.key);
+      const powerBranchId = gfd.controls.branchId.value;
+
+      return !!powerBranch && powerBranchId === powerBranch.id;
+    }),
+    takeUntil(this._endSubscriptions$)
+  );
 
   public addressCommunities$: Observable<Array<string>> = this.actionsSubject.pipe(
     ofType(gridFailureActions.loadAddressCommunitiesSuccess),
@@ -94,13 +101,13 @@
     takeUntil(this._endSubscriptions$)
   );
 
-  public addressHouseNumbers: Array<FailureHousenumber>;
+  public addressHouseNumbers: Array<models.FailureHousenumber>;
   public showQualifyButton: boolean = false;
   public showStornoButton: boolean = false;
   public showCreatedButton: boolean = false;
   public showUpdateButton: boolean = false;
-  public gridFailureAddress: FailureAddress;
-  private _gridFailureStations: Array<FailureStation> = new Array<FailureStation>();
+  public gridFailureAddress: models.FailureAddress;
+  private _gridFailureStations: Array<models.FailureStation> = new Array<models.FailureStation>();
   private _gridFailureId: string;
   private _addressPostalcodes: Array<string> = [];
 
@@ -126,7 +133,7 @@
         this._addressPostalcodes = items;
       });
 
-    this.setNoBranchId();
+    this._setNoBranchId();
   }
 
   public loadGridFailure(gridFailureId: string): void {
@@ -152,9 +159,26 @@
   public loadGridFailureRadii(): void {
     this.appState$.dispatch(gridFailureActions.loadGridFailureRadii());
   }
+  public dateValueConverter = NgrxValueConverters.objectToJSON;
+  private _registerLoadGridFailureExpectedReasons(): void {
+    combineLatest(this.gridFailureBranches$, this.gridFailureDetailsFormState$)
+      .pipe(skipWhile(([branches, formState]) => !this.currentFormState || branches.length === 0))
+      .subscribe(([branches, formState]) => {
+        let currentBranch = branches.find(branch => !!formState && branch.id === formState.value.branchId);
+        this.currentFormState.value.branchId !== formState.value.branchId &&
+          !!currentBranch &&
+          this.appState$.dispatch(gridFailureActions.loadGridFailureExpectedReasons({ payload: currentBranch.name }));
+      });
 
-  public loadGridFailureExpectedReasons(): void {
-    this.appState$.dispatch(gridFailureActions.loadGridFailureExpectedReasons());
+    combineLatest(this.gridFailureBranches$, this.gridFailureDetailsFormState$)
+      .pipe(
+        skipWhile(([branches, formState]) => !formState || branches.length === 0),
+        take(1)
+      )
+      .subscribe(([branches, formState]) => {
+        let currentBranch = branches.find(branch => branch.id === formState.value.branchId);
+        !!currentBranch && this.appState$.dispatch(gridFailureActions.loadGridFailureExpectedReasons({ payload: currentBranch.name }));
+      });
   }
 
   public loadGridFailureStations(): void {
@@ -169,9 +193,9 @@
   public loadGridFailureVersion(versionNumber: number): void {
     this.appState$.dispatch(gridFailureActions.loadGridFailureVersion({ gridFailureId: this._gridFailureId, versionNumber: versionNumber }));
     if (versionNumber < this.maxVersionNumber) {
-      this.appState$.dispatch(new DisableAction(fromGridFailuresDetailFormReducer.FORM_ID));
+      this.appState$.dispatch(new DisableAction(FORM_ID));
     } else {
-      this.appState$.dispatch(new EnableAction(fromGridFailuresDetailFormReducer.FORM_ID));
+      this.appState$.dispatch(new EnableAction(FORM_ID));
     }
   }
 
@@ -184,7 +208,7 @@
       )
       .subscribe(states => {
         if (states && states.length > 0) {
-          this.appState$.dispatch(new SetValueAction(gridFailuresDetailFormReducer.INITIAL_STATE.controls.statusInternId.id, states[0].id));
+          this.appState$.dispatch(new SetValueAction(INITIAL_STATE.controls.statusInternId.id, states[0].id));
           this.saveGridFailure();
         }
       });
@@ -208,7 +232,7 @@
 
   public saveGridFailure(): void {
     if (this.currentFormState.isValid) {
-      const gridFailure = unboxProperties(this.currentFormState.value) as GridFailure;
+      const gridFailure = unboxProperties(this.currentFormState.value) as models.GridFailure;
 
       this.appState$.dispatch(
         gridFailureActions.saveGridFailure({
@@ -245,7 +269,7 @@
       takeUntil(this._endSubscriptions$)
     );
     if (this.addressHouseNumbers.length > 0) {
-      const failureHousenumber: FailureHousenumber = this.addressHouseNumbers.find((housenumber: FailureHousenumber) => {
+      const failureHousenumber: models.FailureHousenumber = this.addressHouseNumbers.find((housenumber: models.FailureHousenumber) => {
         return housenumber.housenumber === hsnr;
       });
       if (!!failureHousenumber) {
@@ -254,7 +278,7 @@
       return;
     }
     test$.pipe(take(1)).subscribe(addresses => {
-      const failureHousenumber: FailureHousenumber = addresses.find((housenumber: FailureHousenumber) => {
+      const failureHousenumber: models.FailureHousenumber = addresses.find((housenumber: models.FailureHousenumber) => {
         return housenumber.housenumber === hsnr;
       });
       if (!!failureHousenumber) {
@@ -262,7 +286,9 @@
       }
     });
   }
+
   public registerEvents(): void {
+    this._registerLoadGridFailureExpectedReasons();
     this.actionsSubject
       .pipe(
         ofType(gridFailureActions.loadAddressHouseNumbersSuccess),
@@ -271,56 +297,63 @@
       )
       .subscribe(hnr => (this.addressHouseNumbers = hnr));
 
-    this.gridFailureDetailsFormState$.pipe(takeUntil(this._endSubscriptions$)).subscribe((formState: FormGroupState<GridFailure>) => {
+    this.gridFailureDetailsFormState$.pipe(takeUntil(this._endSubscriptions$)).subscribe((formState: FormGroupState<models.GridFailure>) => {
+      if (!formState.value || !formState.controls) return;
+
       this.currentFormState = formState;
       this._showButtonsByState(formState.value.statusIntern);
-      this.setDynamicRequired();
+      this._setDynamicRequired();
 
-      if (!formState.value || !formState.controls) return;
-      switch (formState.userDefinedProperties[fromGridFailuresDetailFormReducer.DEPENDENT_FIELD_KEY]) {
-        case formState.id:
-          this._loadInitialDependentFieldValues(formState);
-          break;
+      const addressRelevantBranch = getAddressRelevantBranch(formState.value.branch);
+      if (!!formState.value.branchId)
+        switch (formState.userDefinedProperties[DEPENDENT_FIELD_KEY]) {
+          case formState.controls.__formBranch.id:
+          case formState.id:
+            this.loadInitialAddressData(formState);
+            break;
 
-        case formState.controls.postcode.id:
-          this.appState$.dispatch(gridFailureActions.loadAddressCommunities({ payload: formState.value.postcode }));
-          break;
+          case formState.controls.postcode.id:
+            this.appState$.dispatch(gridFailureActions.loadAddressCommunities({ branch: addressRelevantBranch, postcode: formState.value.postcode }));
+            break;
 
-        case formState.controls.city.id:
-          this.appState$.dispatch(
-            gridFailureActions.loadAddressDistricts({
-              postcode: formState.value.postcode,
-              community: formState.value.city,
-            })
-          );
-          break;
+          case formState.controls.city.id:
+            this.appState$.dispatch(
+              gridFailureActions.loadAddressDistricts({
+                branch: addressRelevantBranch,
+                postcode: formState.value.postcode,
+                community: formState.value.city,
+              })
+            );
+            break;
 
-        case formState.controls.district.id:
-          this.appState$.dispatch(
-            gridFailureActions.loadAddressStreets({
-              postcode: formState.value.postcode,
-              community: formState.value.city,
-              district: formState.value.district,
-            })
-          );
-          break;
+          case formState.controls.district.id:
+            this.appState$.dispatch(
+              gridFailureActions.loadAddressStreets({
+                branch: addressRelevantBranch,
+                postcode: formState.value.postcode,
+                community: formState.value.city,
+                district: formState.value.district,
+              })
+            );
+            break;
 
-        case formState.controls.street.id:
-          this.appState$.dispatch(
-            gridFailureActions.loadAddressHouseNumbers({
-              postcode: formState.value.postcode,
-              community: formState.value.city,
-              street: formState.value.street,
-            })
-          );
-          break;
-        case formState.controls.housenumber.id:
-          this.setLatLong(formState.controls.housenumber.value);
-          break;
+          case formState.controls.street.id:
+            this.appState$.dispatch(
+              gridFailureActions.loadAddressHouseNumbers({
+                branch: addressRelevantBranch,
+                postcode: formState.value.postcode,
+                community: formState.value.city,
+                street: formState.value.street,
+              })
+            );
+            break;
+          case formState.controls.housenumber.id:
+            this.setLatLong(formState.controls.housenumber.value);
+            break;
 
-        default:
-          break;
-      }
+          default:
+            break;
+        }
     });
 
     this.actionsSubject
@@ -328,7 +361,7 @@
         ofType(gridFailureActions.loadGridFailureVersionsSuccess),
         takeUntil(this._endSubscriptions$),
         map(action => {
-          const gridFailures: GridFailure[] = action['payload'];
+          const gridFailures: models.GridFailure[] = action['payload'];
           return !!gridFailures && Math.max(...gridFailures.map(o => o.versionNumber));
         })
       )
@@ -340,7 +373,7 @@
         map(action => action.payload),
         takeUntil(this._endSubscriptions$)
       )
-      .subscribe((stations: Array<FailureStation>) => {
+      .subscribe((stations: Array<models.FailureStation>) => {
         this._gridFailureStations = stations;
       });
 
@@ -350,7 +383,7 @@
         map(action => action.payload),
         takeUntil(this._endSubscriptions$)
       )
-      .subscribe((address: FailureAddress) => {
+      .subscribe((address: models.FailureAddress) => {
         this.gridFailureAddress = address;
         const event = { longitude: address.longitude, latitude: address.latitude };
         this.latLonMapping(event);
@@ -361,7 +394,7 @@
         this.currentGridFailureDetailsCoords.latitude !== gridFailureDetails.value.latitude ||
         this.currentGridFailureDetailsCoords.longitude !== gridFailureDetails.value.longitude
       ) {
-        this.currentGridFailureDetailsCoords = new FailureCoords(gridFailureDetails.value);
+        this.currentGridFailureDetailsCoords = new models.FailureCoords(gridFailureDetails.value);
       }
     });
   }
@@ -373,8 +406,8 @@
       map(term => (term.length < 2 ? [] : this._gridFailureStations.filter(s => s.failureStationSearchString.toLowerCase().indexOf(term.toLowerCase()) > -1)))
     );
 
-  public formatter = (s: FailureStation | string) => {
-    if (s instanceof FailureStation) return s.failureStationSearchString;
+  public formatter = (s: models.FailureStation | string) => {
+    if (s instanceof models.FailureStation) return s.failureStationSearchString;
     else return s;
   };
 
@@ -449,15 +482,15 @@
   public disableUnnecessaryRequiredProperties(part: string): void {
     switch (part) {
       case Globals.FAILURE_LOCATION_NS:
-        this.appState$.dispatch(new EnableAction(fromGridFailuresDetailFormReducer.INITIAL_STATE.controls.postcode.id));
-        this.appState$.dispatch(new DisableAction(fromGridFailuresDetailFormReducer.INITIAL_STATE.controls.radiusId.id));
+        this.appState$.dispatch(new EnableAction(INITIAL_STATE.controls.postcode.id));
+        this.appState$.dispatch(new DisableAction(INITIAL_STATE.controls.radiusId.id));
         break;
       case Globals.FAILURE_LOCATION_MS:
         this._disableAddressControls();
-        this.appState$.dispatch(new EnableAction(fromGridFailuresDetailFormReducer.INITIAL_STATE.controls.radiusId.id));
+        this.appState$.dispatch(new EnableAction(INITIAL_STATE.controls.radiusId.id));
         break;
       case Globals.FAILURE_LOCATION_MAP:
-        this.appState$.dispatch(new DisableAction(fromGridFailuresDetailFormReducer.INITIAL_STATE.controls.radiusId.id));
+        this.appState$.dispatch(new DisableAction(INITIAL_STATE.controls.radiusId.id));
         this._disableAddressControls();
         break;
       default:
@@ -466,24 +499,27 @@
   }
 
   private _disableAddressControls(): void {
-    this.appState$.dispatch(new DisableAction(fromGridFailuresDetailFormReducer.INITIAL_STATE.controls.postcode.id));
-    this.appState$.dispatch(new DisableAction(fromGridFailuresDetailFormReducer.INITIAL_STATE.controls.city.id));
-    this.appState$.dispatch(new DisableAction(fromGridFailuresDetailFormReducer.INITIAL_STATE.controls.district.id));
-    this.appState$.dispatch(new DisableAction(fromGridFailuresDetailFormReducer.INITIAL_STATE.controls.street.id));
-    this.appState$.dispatch(new DisableAction(fromGridFailuresDetailFormReducer.INITIAL_STATE.controls.housenumber.id));
+    this.appState$.dispatch(new DisableAction(INITIAL_STATE.controls.postcode.id));
+    this.appState$.dispatch(new DisableAction(INITIAL_STATE.controls.city.id));
+    this.appState$.dispatch(new DisableAction(INITIAL_STATE.controls.district.id));
+    this.appState$.dispatch(new DisableAction(INITIAL_STATE.controls.street.id));
+    this.appState$.dispatch(new DisableAction(INITIAL_STATE.controls.housenumber.id));
   }
 
-  private _loadInitialDependentFieldValues(formState: FormGroupState<GridFailure>) {
+  public loadInitialAddressData(formState: FormGroupState<models.GridFailure>) {
     if (!formState.value || !formState.controls) return;
-    this.appState$.dispatch(gridFailureActions.loadAddressCommunities({ payload: formState.value.postcode }));
+    const addressRelevantBranch = getAddressRelevantBranch(formState.value.branch);
+    this.appState$.dispatch(gridFailureActions.loadAddressCommunities({ branch: addressRelevantBranch, postcode: formState.value.postcode }));
     this.appState$.dispatch(
       gridFailureActions.loadAddressDistricts({
+        branch: addressRelevantBranch,
         postcode: formState.value.postcode,
         community: formState.value.city,
       })
     );
     this.appState$.dispatch(
       gridFailureActions.loadAddressStreets({
+        branch: addressRelevantBranch,
         postcode: formState.value.postcode,
         community: formState.value.city,
         district: formState.value.district,
@@ -491,6 +527,7 @@
     );
     this.appState$.dispatch(
       gridFailureActions.loadAddressHouseNumbers({
+        branch: addressRelevantBranch,
         postcode: formState.value.postcode,
         community: formState.value.city,
         street: formState.value.street,
@@ -502,10 +539,10 @@
     this.appState$.dispatch(gridFailureActions.loadAddressPostalcodes());
   }
 
-  private setNoBranchId(): void {
-    this.gridFailureBranches$.subscribe((branches: FailureBranch[]) => {
+  private _setNoBranchId(): void {
+    this.gridFailureBranches$.subscribe((branches: models.FailureBranch[]) => {
       if (branches.length > 0) {
-        const noBranch: FailureBranch = branches.find(branch => branch.name === Globals.NO_BRANCH_NAME);
+        const noBranch: models.FailureBranch = branches.find(branch => branch.name === Globals.NO_BRANCH_NAME);
         this.noBranchId = !!noBranch ? noBranch.id : null;
         this.appState$.dispatch(new SetUserDefinedPropertyAction(FORM_ID, NO_BRANCH_ID_KEY, this.noBranchId));
       }
@@ -513,15 +550,15 @@
   }
 
   private _clear(): void {
-    this.appState$.dispatch(new SetValueAction(fromGridFailuresDetailFormReducer.FORM_ID, fromGridFailuresDetailFormReducer.INITIAL_STATE.value));
-    this.appState$.dispatch(new ResetAction(fromGridFailuresDetailFormReducer.FORM_ID));
-    this.appState$.dispatch(new EnableAction(fromGridFailuresDetailFormReducer.FORM_ID));
+    this.appState$.dispatch(new SetValueAction(FORM_ID, INITIAL_STATE.value));
+    this.appState$.dispatch(new ResetAction(FORM_ID));
+    this.appState$.dispatch(new EnableAction(FORM_ID));
     this._gridFailureId = null;
     this.maxVersionNumber = null;
     navigateHome(this._router);
   }
 
-  private setDynamicRequired(): void {
+  private _setDynamicRequired(): void {
     this.isFieldRequiredDependingOnBranchId =
       !!this.currentFormState.controls && !!this.currentFormState.controls.branchId ? this.currentFormState.controls.branchId.value !== this.noBranchId : null;
   }
@@ -533,16 +570,16 @@
     this.showUpdateButton = false;
 
     switch (state) {
-      case StateEnum.NEW:
-      case StateEnum.PLANNED:
+      case enums.StateEnum.NEW:
+      case enums.StateEnum.PLANNED:
         this.showCreatedButton = true;
         break;
-      case StateEnum.CREATED:
-      case StateEnum.UPDATED:
+      case enums.StateEnum.CREATED:
+      case enums.StateEnum.UPDATED:
         this.showQualifyButton = true;
         this.showStornoButton = true;
         break;
-      case StateEnum.QUALIFIED:
+      case enums.StateEnum.QUALIFIED:
         this.showUpdateButton = true;
         break;
       default:
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.ts
index b4275a9..8d3a98a 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.ts
@@ -78,7 +78,7 @@
     }
     setTimeout(() => {
       this._gridApi.setFilterModel(this.sandbox.filterOptions);
-    }, 1000);
+    }, 1500);
   }
 
   public changeFilter(checked: boolean, userRole: string): void {
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.resolver.spec.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.resolver.spec.ts
index 4986ad2..7057ecd 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.resolver.spec.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.resolver.spec.ts
@@ -30,7 +30,6 @@
       loadGridFailureTypes() {},
       loadGridFailureStates() {},
       loadGridFailureRadii() {},
-      loadGridFailureExpectedReasons() {},
       loadGridFailureStations() {},
       loadAddressPostalcodes() {},
     } as any;
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.resolver.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.resolver.ts
index 789fc53..87c3820 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.resolver.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.resolver.ts
@@ -35,7 +35,6 @@
     this._detailSandbox.loadGridFailureTypes();
     this._detailSandbox.loadGridFailureStates();
     this._detailSandbox.loadGridFailureRadii();
-    this._detailSandbox.loadGridFailureExpectedReasons();
     this._detailSandbox.loadGridFailureStations();
     this._detailSandbox.loadAddressPostalcodes();
   }
diff --git a/projects/grid-failure-information-app/src/app/shared/constants/globals.ts b/projects/grid-failure-information-app/src/app/shared/constants/globals.ts
index 85bfb6d..df2e451 100644
--- a/projects/grid-failure-information-app/src/app/shared/constants/globals.ts
+++ b/projects/grid-failure-information-app/src/app/shared/constants/globals.ts
@@ -32,6 +32,9 @@
     andCondition: 'und',
     orCondition: 'oder',
   };
+  public static PROPERTIES_TO_BOX: string[] = ['addressPolygonPoints', '__formBranch'];
 
-  public static PROPERTIES_TO_BOX: string[] = ['addressPolygonPoints'];
+  public static BUSINESS_RULE_FIELDS: any = {
+    branchStrom: { key: 'S' },
+  };
 }
diff --git a/projects/grid-failure-information-app/src/app/shared/directives/directives.module.ts b/projects/grid-failure-information-app/src/app/shared/directives/directives.module.ts
index d496cd0..8a203b2 100644
--- a/projects/grid-failure-information-app/src/app/shared/directives/directives.module.ts
+++ b/projects/grid-failure-information-app/src/app/shared/directives/directives.module.ts
@@ -19,8 +19,8 @@
 import { AgGridAngular } from 'ag-grid-angular';
 import { DateTimePickerViewAdapterDirective } from '@grid-failure-information-app/shared/directives/date-time-picker-view-adapter.directive';
 import { FormDisableDirective } from '@grid-failure-information-app/shared/directives/form-disable.directive';
-import { FormValidatorDirective } from './form-validator.directive';
-
+import { FormValidatorDirective } from '@grid-failure-information-app/shared/directives/form-validator.directive';
+import { FormControlVisibilityDirective } from '@grid-failure-information-app/shared/directives/forms/form-control-ui-state.directive';
 @NgModule({
   imports: [CommonModule],
   declarations: [
@@ -31,6 +31,7 @@
     FormDisableDirective,
     DateTimePickerViewAdapterDirective,
     FormValidatorDirective,
+    FormControlVisibilityDirective,
   ],
   exports: [
     AutoResizeColumnsDirective,
@@ -40,6 +41,7 @@
     FormDisableDirective,
     DateTimePickerViewAdapterDirective,
     FormValidatorDirective,
+    FormControlVisibilityDirective,
   ],
 
   entryComponents: [AgGridAngular],
diff --git a/projects/grid-failure-information-app/src/app/shared/directives/forms/form-control-ui-state.directive.spec.ts b/projects/grid-failure-information-app/src/app/shared/directives/forms/form-control-ui-state.directive.spec.ts
new file mode 100644
index 0000000..c4af3ca
--- /dev/null
+++ b/projects/grid-failure-information-app/src/app/shared/directives/forms/form-control-ui-state.directive.spec.ts
@@ -0,0 +1,8 @@
+import { FormControlVisibilityDirective } from './form-control-ui-state.directive';
+
+describe('FormControlUiStateDirective', () => {
+  it('should create an instance', () => {
+    // const directive = new FormControlUiStateDirective();
+    // expect(directive).toBeTruthy();
+  });
+});
diff --git a/projects/grid-failure-information-app/src/app/shared/directives/forms/form-control-ui-state.directive.ts b/projects/grid-failure-information-app/src/app/shared/directives/forms/form-control-ui-state.directive.ts
new file mode 100644
index 0000000..c95210a
--- /dev/null
+++ b/projects/grid-failure-information-app/src/app/shared/directives/forms/form-control-ui-state.directive.ts
@@ -0,0 +1,30 @@
+import { Directive, Input, HostBinding, ContentChild } from '@angular/core';
+import * as store from '@grid-failure-information-app/shared/store';
+import { Store } from '@ngrx/store';
+import { DisableAction, EnableAction, ResetAction, SetValueAction, NgrxFormControlDirective } from 'ngrx-forms';
+
+@Directive({
+  selector: '[visibleByDependentField]',
+})
+export class FormControlVisibilityDirective {
+  private _isVisible: boolean;
+  @Input()
+  set visibleByDependentField(isVisible: boolean) {
+    this._isVisible = isVisible;
+    if (!this.ngrxFormControl) {
+      return;
+    } else if (isVisible) {
+      this._appState$.dispatch(new EnableAction(this.ngrxFormControl.state.id));
+    } else {
+      this._appState$.dispatch(new SetValueAction(this.ngrxFormControl.state.id, ''));
+      this._appState$.dispatch(new DisableAction(this.ngrxFormControl.state.id));
+      this._appState$.dispatch(new ResetAction(this.ngrxFormControl.state.id));
+    }
+  }
+  @HostBinding('hidden') get valid() {
+    return !this._isVisible;
+  }
+  @ContentChild(NgrxFormControlDirective, { static: false })
+  public ngrxFormControl: NgrxFormControlDirective<any>;
+  constructor(private _appState$: Store<store.State>) {}
+}
diff --git a/projects/grid-failure-information-app/src/app/shared/models/grid-failure.model.ts b/projects/grid-failure-information-app/src/app/shared/models/grid-failure.model.ts
index 2980fba..9eb6ad2 100644
--- a/projects/grid-failure-information-app/src/app/shared/models/grid-failure.model.ts
+++ b/projects/grid-failure-information-app/src/app/shared/models/grid-failure.model.ts
@@ -1,3 +1,4 @@
+import { FailureBranch } from './failure-branch.model';
 /********************************************************************************
  * Copyright (c) 2020 Contributors to the Eclipse Foundation
  *
@@ -12,13 +13,16 @@
  ********************************************************************************/
 import { Boxed, box } from 'ngrx-forms';
 import { Globals } from '@grid-failure-information-app/shared/constants/globals';
-
-export class GridFailure {
+export class GridFailureForm {
+  public __formBranch: FailureBranch = {} as any;
+  public constructor() {}
+}
+export class GridFailure extends GridFailureForm {
   public id: string = null;
   public branch: string = null;
   public branchColorCode: string = null;
   public branchDescription: string = null;
-  public branchId: string = null;
+  public branchId: any = null;
   public condensed: boolean = null;
   public condensedCount: number = null;
   public city: string = null;
@@ -63,6 +67,7 @@
   public description: string = null;
 
   public constructor(data: any = null) {
+    super();
     Object.keys(data || {})
       .filter(property => this.hasOwnProperty(property))
       .forEach(property => {
diff --git a/projects/grid-failure-information-app/src/app/shared/store/actions/grid-failures.action.ts b/projects/grid-failure-information-app/src/app/shared/store/actions/grid-failures.action.ts
index d6ff99a..5946d68 100644
--- a/projects/grid-failure-information-app/src/app/shared/store/actions/grid-failures.action.ts
+++ b/projects/grid-failure-information-app/src/app/shared/store/actions/grid-failures.action.ts
@@ -78,7 +78,9 @@
 export const loadGridFailureRadiiSuccess = createAction('[GridFailureRadii] Load Success', props<{ payload: Array<FailureRadius> }>());
 export const loadGridFailureRadiiFail = createAction('[GridFailureRadii] Load Fail', props<{ payload: string }>());
 
-export const loadGridFailureExpectedReasons = createAction('[GridFailureFailureExpectedReasons] Load');
+export const loadGridFailureExpectedReasons = createAction('[GridFailureFailureExpectedReasons] Load', (item = { payload: null }) => {
+  return item;
+});
 export const loadGridFailureExpectedReasonsSuccess = createAction(
   '[GridFailureFailureExpectedReasons] Load Success',
   props<{ payload: Array<FailureExpectedReason> }>()
@@ -105,19 +107,22 @@
 export const loadAddressPostalcodesSuccess = createAction('[AddressPostalcodes] Load Success', props<{ payload: Array<string> }>());
 export const loadAddressPostalcodesFail = createAction('[AddressPostalcodes] Load Fail', props<{ payload: string }>());
 
-export const loadAddressCommunities = createAction('[AddressCommunities] Load', props<{ payload: string }>());
+export const loadAddressCommunities = createAction('[AddressCommunities] Load', props<{ branch: string; postcode: string }>());
 export const loadAddressCommunitiesSuccess = createAction('[AddressCommunities] Load Success', props<{ payload: Array<string> }>());
 export const loadAddressCommunitiesFail = createAction('[AddressCommunities] Load Fail', props<{ payload: string }>());
 
-export const loadAddressDistricts = createAction('[AddressDistricts] Load', props<{ postcode: string; community: string }>());
+export const loadAddressDistricts = createAction('[AddressDistricts] Load', props<{ branch: string; postcode: string; community: string }>());
 export const loadAddressDistrictsSuccess = createAction('[AddressDistricts] Load Success', props<{ payload: Array<string> }>());
 export const loadAddressDistrictsFail = createAction('[AddressDistricts] Load Fail', props<{ payload: string }>());
 
-export const loadAddressStreets = createAction('[AddressStreets] Load', props<{ postcode: string; community: string; district?: string }>());
+export const loadAddressStreets = createAction('[AddressStreets] Load', props<{ branch: string; postcode: string; community: string; district?: string }>());
 export const loadAddressStreetsSuccess = createAction('[AddressStreets] Load Success', props<{ payload: Array<string> }>());
 export const loadAddressStreetsFail = createAction('[AddressStreets] Load Fail', props<{ payload: string }>());
 
-export const loadAddressHouseNumbers = createAction('[AddressHouseNumbers] Load', props<{ postcode: string; community: string; street: string }>());
+export const loadAddressHouseNumbers = createAction(
+  '[AddressHouseNumbers] Load',
+  props<{ branch: string; postcode: string; community: string; street: string }>()
+);
 export const loadAddressHouseNumbersSuccess = createAction('[AddressHouseNumbers] Load Success', props<{ payload: Array<FailureHousenumber> }>());
 export const loadAddressHouseNumbersFail = createAction('[AddressHouseNumbers] Load Fail', props<{ payload: string }>());
 
diff --git a/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.spec.ts b/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.spec.ts
index d113573..a6f2ad9 100644
--- a/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.spec.ts
+++ b/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.spec.ts
@@ -385,7 +385,7 @@
       expect(result).toEqual(gridFailureActions.loadAddressCommunitiesSuccess({ payload: apiResponse }));
     });
     done();
-    actions$.next(gridFailureActions.loadAddressCommunities({ payload: 'X' }));
+    actions$.next(gridFailureActions.loadAddressCommunities({ branch: 'S', postcode: 'X' }));
   });
 
   it('should return empty Array via getAddressCommunities if postcode is empty', done => {
@@ -395,7 +395,7 @@
       expect(result).toEqual(gridFailureActions.loadAddressCommunitiesSuccess({ payload: apiResponse }));
     });
     done();
-    actions$.next(gridFailureActions.loadAddressCommunities({ payload: '' }));
+    actions$.next(gridFailureActions.loadAddressCommunities({ branch: 'S', postcode: '' }));
   });
 
   it('should equal loadAddressCommunities Fail after getAddressCommunities Error', done => {
@@ -404,7 +404,7 @@
       expect(result).toEqual(gridFailureActions.loadAddressCommunitiesFail({ payload: 'x' }));
     });
     done();
-    actions$.next(gridFailureActions.loadAddressCommunities({ payload: 'X' }));
+    actions$.next(gridFailureActions.loadAddressCommunities({ branch: 'S', postcode: 'X' }));
   });
 
   it('should equal loadAddressDistricts after getAddressDistricts', done => {
@@ -414,7 +414,7 @@
       expect(result).toEqual(gridFailureActions.loadAddressDistrictsSuccess({ payload: apiResponse }));
     });
     done();
-    actions$.next(gridFailureActions.loadAddressDistricts({ postcode: '33333', community: 'C' }));
+    actions$.next(gridFailureActions.loadAddressDistricts({ postcode: '33333', branch: 'S', community: 'C' }));
   });
 
   it('should return empty Array via getAddressDistricts if postcode is empty', done => {
@@ -424,7 +424,7 @@
       expect(result).toEqual(gridFailureActions.loadAddressDistrictsSuccess({ payload: apiResponse }));
     });
     done();
-    actions$.next(gridFailureActions.loadAddressDistricts({ postcode: '', community: 'C' }));
+    actions$.next(gridFailureActions.loadAddressDistricts({ postcode: '', branch: 'S', community: 'C' }));
   });
 
   it('should equal loadAddressDistricts Fail after getAddressDistricts Error', done => {
@@ -433,7 +433,7 @@
       expect(result).toEqual(gridFailureActions.loadAddressDistrictsFail({ payload: 'x' }));
     });
     done();
-    actions$.next(gridFailureActions.loadAddressDistricts({ postcode: '33333', community: 'C' }));
+    actions$.next(gridFailureActions.loadAddressDistricts({ postcode: '33333', branch: 'S', community: 'C' }));
   });
 
   it('should equal loadAddressStreets after getAddressStreets', done => {
@@ -443,7 +443,7 @@
       expect(result).toEqual(gridFailureActions.loadAddressStreetsSuccess({ payload: apiResponse }));
     });
     done();
-    actions$.next(gridFailureActions.loadAddressStreets({ postcode: '33333', community: 'C', district: 'D' }));
+    actions$.next(gridFailureActions.loadAddressStreets({ postcode: '33333', branch: 'S', community: 'C', district: 'D' }));
   });
 
   it('should return empty Array via getAddressStreets if postcode is empty', done => {
@@ -453,7 +453,7 @@
       expect(result).toEqual(gridFailureActions.loadAddressStreetsSuccess({ payload: apiResponse }));
     });
     done();
-    actions$.next(gridFailureActions.loadAddressStreets({ postcode: '', community: 'C', district: 'D' }));
+    actions$.next(gridFailureActions.loadAddressStreets({ postcode: '', branch: 'S', community: 'C', district: 'D' }));
   });
 
   it('should equal loadAddressStreets Fail after getAddressStreets Error', done => {
@@ -462,7 +462,7 @@
       expect(result).toEqual(gridFailureActions.loadAddressStreetsFail({ payload: 'x' }));
     });
     done();
-    actions$.next(gridFailureActions.loadAddressStreets({ postcode: '33333', community: 'C', district: 'D' }));
+    actions$.next(gridFailureActions.loadAddressStreets({ postcode: '33333', branch: 'S', community: 'C', district: 'D' }));
   });
 
   it('should equal loadAddressHouseNumbers after getAddressHousenumbers', done => {
@@ -472,7 +472,7 @@
       expect(result).toEqual(gridFailureActions.loadAddressHouseNumbersSuccess({ payload: apiResponse }));
     });
     done();
-    actions$.next(gridFailureActions.loadAddressHouseNumbers({ postcode: '33333', community: 'C', street: 'S' }));
+    actions$.next(gridFailureActions.loadAddressHouseNumbers({ postcode: '33333', branch: 'S', community: 'C', street: 'S' }));
   });
 
   it('should return empty Array via getAddressHousenumbers if postcode is empty', done => {
@@ -482,7 +482,7 @@
       expect(result).toEqual(gridFailureActions.loadAddressHouseNumbersSuccess({ payload: apiResponse }));
     });
     done();
-    actions$.next(gridFailureActions.loadAddressHouseNumbers({ postcode: '', community: 'C', street: 'S' }));
+    actions$.next(gridFailureActions.loadAddressHouseNumbers({ postcode: '', branch: 'S', community: 'C', street: 'S' }));
   });
 
   it('should equal loadAddressHouseNumbers Fail after getAddressHousenumbers Error', done => {
@@ -491,7 +491,7 @@
       expect(result).toEqual(gridFailureActions.loadAddressHouseNumbersFail({ payload: 'x' }));
     });
     done();
-    actions$.next(gridFailureActions.loadAddressHouseNumbers({ postcode: '33333', community: 'C', street: 'S' }));
+    actions$.next(gridFailureActions.loadAddressHouseNumbers({ postcode: '33333', branch: 'S', community: 'C', street: 'S' }));
   });
 
   it('should equal loadGridFailureVersion in response to getGridFailureAddress', done => {
diff --git a/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.ts b/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.ts
index 01c8927..0705759 100644
--- a/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.ts
+++ b/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.ts
@@ -164,7 +164,7 @@
       ofType(gridFailureActions.loadGridFailureExpectedReasons),
       switchMap(action => {
         return this._apiClient
-          .getGridFailureExpectedReasons()
+          .getGridFailureExpectedReasons(action.payload)
           .map((response: FailureExpectedReason[]) => gridFailureActions.loadGridFailureExpectedReasonsSuccess({ payload: response }))
           .catch(error => of(gridFailureActions.loadGridFailureExpectedReasonsFail({ payload: error })));
       })
@@ -242,11 +242,11 @@
     this._actions$.pipe(
       ofType(gridFailureActions.loadAddressCommunities),
       switchMap(action => {
-        if (!action.payload) {
+        if (!action.postcode) {
           return of(gridFailureActions.loadAddressCommunitiesSuccess({ payload: [] }));
         }
         return this._apiClient
-          .getAddressCommunities(action.payload)
+          .getAddressCommunities(action.postcode, action.branch)
           .map((response: string[]) => gridFailureActions.loadAddressCommunitiesSuccess({ payload: response }))
           .catch(error => of(gridFailureActions.loadAddressCommunitiesFail({ payload: error })));
       })
@@ -261,7 +261,7 @@
           return of(gridFailureActions.loadAddressDistrictsSuccess({ payload: [] }));
         }
         return this._apiClient
-          .getAddressDistricts(action.postcode, action.community)
+          .getAddressDistricts(action.postcode, action.community, action.branch)
           .map((response: string[]) => gridFailureActions.loadAddressDistrictsSuccess({ payload: response }))
           .catch(error => of(gridFailureActions.loadAddressDistrictsFail({ payload: error })));
       })
@@ -276,7 +276,7 @@
           return of(gridFailureActions.loadAddressStreetsSuccess({ payload: [] }));
         }
         return this._apiClient
-          .getAddressStreets(action.postcode, action.community, action.district)
+          .getAddressStreets(action.postcode, action.community, action.district, action.branch)
           .map((response: string[]) => gridFailureActions.loadAddressStreetsSuccess({ payload: response }))
           .catch(error => of(gridFailureActions.loadAddressStreetsFail({ payload: error })));
       })
@@ -291,7 +291,7 @@
           return of(gridFailureActions.loadAddressHouseNumbersSuccess({ payload: [] }));
         }
         return this._apiClient
-          .getAddressHousenumbers(action.postcode, action.community, action.street)
+          .getAddressHousenumbers(action.postcode, action.community, action.street, action.branch)
           .map((response: FailureHousenumber[]) => gridFailureActions.loadAddressHouseNumbersSuccess({ payload: response }))
           .catch(error => of(gridFailureActions.loadAddressHouseNumbersFail({ payload: error })));
       })
diff --git a/projects/grid-failure-information-app/src/app/shared/store/reducers/grid-failures/grid-failure-details-form.reducer.ts b/projects/grid-failure-information-app/src/app/shared/store/reducers/grid-failures/grid-failure-details-form.reducer.ts
index 8683156..0e304d3 100644
--- a/projects/grid-failure-information-app/src/app/shared/store/reducers/grid-failures/grid-failure-details-form.reducer.ts
+++ b/projects/grid-failure-information-app/src/app/shared/store/reducers/grid-failures/grid-failure-details-form.reducer.ts
@@ -1,3 +1,4 @@
+import { unbox } from 'ngrx-forms';
 /********************************************************************************
  * Copyright (c) 2020 Contributors to the Eclipse Foundation
  *
@@ -27,6 +28,7 @@
   SetValueAction,
   updateGroup,
   validate,
+  box,
 } from 'ngrx-forms';
 import { required } from 'ngrx-forms/validation';
 
@@ -203,6 +205,10 @@
     default:
       if (!!action && action.type === SetValueAction.TYPE) {
         var formState = setUserDefinedProperty(state, DEPENDENT_FIELD_KEY, action[DEPENDENT_FIELD_KEY]);
+        if (action['controlId'] === INITIAL_STATE.controls.__formBranch.id) {
+          const branch = unbox(action['value']);
+          return validateForm(formState, new SetValueAction(FORM_ID, { ...formState.value, branchId: branch.id, branch: branch.name }));
+        }
         return validateForm(formState, action);
       } else {
         return validateForm(state, action);
diff --git a/projects/grid-failure-information-app/src/app/shared/utility/utilityHelpers.ts b/projects/grid-failure-information-app/src/app/shared/utility/utilityHelpers.ts
index e3661d9..f35df2f 100644
--- a/projects/grid-failure-information-app/src/app/shared/utility/utilityHelpers.ts
+++ b/projects/grid-failure-information-app/src/app/shared/utility/utilityHelpers.ts
@@ -1,4 +1,3 @@
-import { DateTimeModel } from '@grid-failure-information-app/shared/models/date-time.model';
 /********************************************************************************
  * Copyright (c) 2020 Contributors to the Eclipse Foundation
  *
@@ -14,7 +13,8 @@
 import { Router } from '@angular/router';
 import { InternExternKeysEnum, InternExternValuesEnum } from '@grid-failure-information-app/shared/constants/enums';
 import { NgrxValueConverter, NgrxValueConverters } from 'ngrx-forms';
-
+import { DateTimeModel } from '@grid-failure-information-app/shared/models/date-time.model';
+import { Globals } from '@grid-failure-information-app/shared/constants/globals';
 /**
  * Returns formated date based on given culture
  *
@@ -72,7 +72,7 @@
 /**
  * Convert a station object to station description
  */
-export const stationToStationNameConverter: NgrxValueConverter<any | null, string | null> = {
+export const stationToStationDescriptionConverter: NgrxValueConverter<any | null, string | null> = {
   convertViewToStateValue(value) {
     if (value === null) {
       return null;
@@ -121,3 +121,8 @@
 export function getDependencyPropertyFromControlId(controlId: string): string {
   return controlId.substring(controlId.indexOf('.') + 1, controlId.length);
 }
+
+export function getAddressRelevantBranch(branch: string): string {
+  const addressRelevantBranches: string[] = [Globals.BUSINESS_RULE_FIELDS.branchStrom.key];
+  return addressRelevantBranches.find(b => b === branch);
+}
diff --git a/projects/openk/grid-failure-information-map/src/lib/grid-failure-information-map.component.scss b/projects/openk/grid-failure-information-map/src/lib/grid-failure-information-map.component.scss
index d23a74a..0c6a5b8 100644
--- a/projects/openk/grid-failure-information-map/src/lib/grid-failure-information-map.component.scss
+++ b/projects/openk/grid-failure-information-map/src/lib/grid-failure-information-map.component.scss
@@ -21,6 +21,7 @@
 .map-frame {
   border: 2px solid black;
   height: 100%;
+  transition: height 0.5s ease-in-out;
 }
 
 #map {
diff --git a/projects/openk/grid-failure-information-map/src/lib/grid-failure-information-map.component.spec.ts b/projects/openk/grid-failure-information-map/src/lib/grid-failure-information-map.component.spec.ts
index bc5a606..cd4c563 100644
--- a/projects/openk/grid-failure-information-map/src/lib/grid-failure-information-map.component.spec.ts
+++ b/projects/openk/grid-failure-information-map/src/lib/grid-failure-information-map.component.spec.ts
@@ -25,13 +25,13 @@
   it('should create', () => {
     expect(component).toBeTruthy();
   });
-  it('should call _initMap() and _setMarker after calling ngAfterViewInit', async(() => {
+  it('should call _initMap() and _setMarker for overviewMap after calling ngAfterViewInit', async(() => {
     const latitude: any = 123;
     const longitude: any = 456;
     const radius: any = 100;
     const marker: any = {};
     let spyMap: any = spyOn(L, 'map').and.returnValue({ remove() {}, on() {} });
-    let spyTileLayer: any = spyOn(L, 'tileLayer').and.returnValue({ addTo() {} });
+    let spyTileLayer: any = spyOn(L, 'tileLayer').and.returnValue({ addTo() {}, on() {} });
     let spyMarker: any = spyOn(L, 'marker').and.returnValue({
       addTo() {
         return {
@@ -42,16 +42,43 @@
       },
     });
     let spyCircle: any = spyOn(L, 'circle').and.returnValue({ addTo() {} });
+
     component.mapData = [{ latitude: latitude, longitude: longitude, radius: radius }];
     component.mapData = [{ latitude: latitude, longitude: longitude, radius: radius }];
-    component.mapDetailData = { latitude: latitude, longitude: longitude };
-    component.mapDetailData = {};
+
     expect(spyMap).toHaveBeenCalled();
     expect(spyTileLayer).toHaveBeenCalled();
     expect(spyMarker).toHaveBeenCalledWith([latitude, longitude], { icon: (component as any)._icon });
     expect(spyCircle).toHaveBeenCalledWith([latitude, longitude], { color: '#204d74', fillColor: '#337ab7', fillOpacity: 0.3, radius: radius });
   }));
 
+  it('should call _initMap() and _setMarker for detailMap after calling ngAfterViewInit', async(() => {
+    const latitude: any = 123;
+    const longitude: any = 456;
+    const radius: any = 100;
+    const marker: any = {};
+    let spyMap: any = spyOn(L, 'map').and.returnValue({ remove() {}, on() {} });
+    let spyTileLayer: any = spyOn(L, 'tileLayer').and.returnValue({ addTo() {}, on() {} });
+    let spyMarker: any = spyOn(L, 'marker').and.returnValue({
+      addTo() {
+        return {
+          on: () => {
+            return { bindTooltip: () => {} };
+          },
+        };
+      },
+    });
+    let spyCircle: any = spyOn(L, 'circle').and.returnValue({ addTo() {} });
+
+    component.mapDetailData = { latitude: latitude, longitude: longitude, radius: radius };
+    component.mapDetailData = { latitude: latitude };
+    component.mapDetailData = { latitude: latitude, longitude: longitude, radius: radius };
+
+    expect(spyMap).toHaveBeenCalled();
+    expect(spyTileLayer).toHaveBeenCalled();
+    expect(spyMarker).toHaveBeenCalledWith([latitude, longitude], { icon: (component as any)._icon });
+  }));
+
   it('should call _drawPolygonOrCircle(gridFailure)', async(() => {
     const latitude: any = 123;
     const longitude: any = 456;
diff --git a/projects/openk/grid-failure-information-map/src/lib/grid-failure-information-map.component.ts b/projects/openk/grid-failure-information-map/src/lib/grid-failure-information-map.component.ts
index d517a85..fc12d58 100644
--- a/projects/openk/grid-failure-information-map/src/lib/grid-failure-information-map.component.ts
+++ b/projects/openk/grid-failure-information-map/src/lib/grid-failure-information-map.component.ts
@@ -10,11 +10,12 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
-import { Component, AfterViewInit, Input, Output, EventEmitter } from '@angular/core';
+import { Component, Input, Output, EventEmitter } from '@angular/core';
 import * as L from 'leaflet';
 import { Globals } from '@openk-libs/grid-failure-information-map/constants/globals';
 import { GridFailureMapInformation } from '@openk-libs/grid-failure-information-map/shared/models/grid-failure-coordinates.model';
 import { convertISOToLocalDateTime } from '@openk-libs/grid-failure-information-map/shared/utility/utilityHelpers';
+import { MapOptions } from '@openk-libs/grid-failure-information-map/shared/models/map-options.model';
 
 @Component({
   selector: 'openk-grid-failure-information-map',
@@ -25,9 +26,21 @@
   private _mapData: Array<GridFailureMapInformation> = [];
   private _mapDetailData: GridFailureMapInformation;
   private _interactionMode: boolean;
+  private _mapOptions: MapOptions = new MapOptions();
 
   @Output() public gridFailureId: EventEmitter<string> = new EventEmitter();
 
+  @Output() latLong: EventEmitter<any> = new EventEmitter();
+
+  @Input()
+  set mapOptions(mapOptions: MapOptions) {
+    this._mapOptions = mapOptions;
+
+    this._mapOptions.forceResize$.subscribe(() => {
+      this.mapDetailData = this._mapDetailData;
+    });
+  }
+
   @Input()
   public set mapData(data: Array<any>) {
     data.forEach(gridFailureData => {
@@ -47,7 +60,7 @@
     this._mapDetailData = new GridFailureMapInformation(gridFailureDetail);
     if (!!this._map) {
       this._map.remove();
-      if (this._mapDetailData.latitude && this._mapDetailData.longitude) {
+      if (!!this._mapDetailData.latitude && !!this._mapDetailData.longitude) {
         this._initMap(this._mapDetailData.latitude, this._mapDetailData.longitude, Globals.DETAIL_MAP_INITIAL_ZOOM);
       } else {
         this._initMap(Globals.OVERVIEW_MAP_INITIAL_LATITUDE, Globals.OVERVIEW_MAP_INITIAL_LONGITUDE, Globals.OVERVIEW_MAP_INITIAL_ZOOM);
@@ -63,8 +76,6 @@
     this._interactionMode = interactionMode;
   }
 
-  @Output() latLong: EventEmitter<any> = new EventEmitter();
-
   private _map: any;
   private _icon = L.icon({
     iconUrl: './marker-icon.png',
@@ -84,6 +95,9 @@
       attribution: Globals.TITLE_ATTRIBUTION,
       crossOrigin: null,
     });
+    tiles.on('load', () => {
+      this._map.invalidateSize();
+    });
     tiles.addTo(this._map);
 
     this._map.on('click', this._emitLatLongValues.bind(this));
diff --git a/projects/openk/grid-failure-information-map/src/shared/models/map-options.model.ts b/projects/openk/grid-failure-information-map/src/shared/models/map-options.model.ts
new file mode 100644
index 0000000..4d4d39e
--- /dev/null
+++ b/projects/openk/grid-failure-information-map/src/shared/models/map-options.model.ts
@@ -0,0 +1,16 @@
+/********************************************************************************
+ * Copyright (c) 2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ ********************************************************************************/
+import { Subject } from 'rxjs';
+export class MapOptions {
+  public forceResize$: Subject<any> = new Subject<any>();
+}