Merge branch 'DEVELOP' of ssh://git.eclipse.org:29418/openk-usermodules/org.eclipse.openk-usermodules.gridFailureInformation.frontend into SI-2786-BUG-delete-Kontakte-fehlerhaftes-PLZ-handling
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 848e815..0c25b2a 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
@@ -416,135 +416,139 @@
 
             <div class="fault-location-container">
               <div class="NS-fields" *ngIf="failureLocationView === Globals.FAILURE_LOCATION_NS">
-                <!-- city -->
-                <div class="form-group row">
-                  <label for="city" class="col-sm-5 col-form-label">{{ 'GridFailure.City' | translate }}</label>
-                  <div class="col-sm-6">
-                    <select
-                      [required]="
-                        gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId && !gridFailureDetailsSandbox.oldVersion && !formState.isDisabled
-                      "
-                      type="text"
-                      class="form-control"
-                      id="city"
-                      name="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>
-                    </select>
+                <div>
+                  <!-- city -->
+                  <div class="form-group row">
+                    <label for="city" class="col-sm-5 col-form-label">{{ 'GridFailure.City' | translate }}</label>
+                    <div class="col-sm-6">
+                      <select
+                        [required]="
+                          gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId && !gridFailureDetailsSandbox.oldVersion && !formState.isDisabled
+                        "
+                        type="text"
+                        class="form-control"
+                        id="city"
+                        name="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>
+                      </select>
+                    </div>
                   </div>
-                </div>
 
-                <!-- district -->
-                <div class="form-group row">
-                  <label for="district" class="col-sm-5 col-form-label">{{ 'GridFailure.District' | translate }}</label>
-                  <div class="col-sm-6">
-                    <select
-                      [required]="
-                        gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId && !gridFailureDetailsSandbox.oldVersion && !formState.isDisabled
-                      "
-                      type="text"
-                      class="form-control"
-                      id="district"
-                      name="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>
-                    </select>
+                  <!-- district -->
+                  <div class="form-group row">
+                    <label for="district" class="col-sm-5 col-form-label">{{ 'GridFailure.District' | translate }}</label>
+                    <div class="col-sm-6">
+                      <select
+                        [required]="
+                          gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId && !gridFailureDetailsSandbox.oldVersion && !formState.isDisabled
+                        "
+                        type="text"
+                        class="form-control"
+                        id="district"
+                        name="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>
+                      </select>
+                    </div>
                   </div>
-                </div>
 
-                <!-- postcode -->
-                <div class="form-group row">
-                  <label for="postcode" class="col-sm-5 col-form-label">{{ 'GridFailure.Postcode' | translate }}</label>
-                  <div class="col-sm-6">
-                    <select
-                      [required]="
-                        gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId && !gridFailureDetailsSandbox.oldVersion && !formState.isDisabled
-                      "
-                      type="text"
-                      maxlength="255"
-                      class="form-control"
-                      id="postcode"
-                      name="postcode"
-                      [ngrxFormControlState]="formState.controls['postcode']"
-                    >
-                      <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
-                      <option *ngFor="let item of gridFailureDetailsSandbox.addressPostCodes$ | async" [value]="item">{{ item }}</option>
-                    </select>
+                  <!-- postcode -->
+                  <div class="form-group row">
+                    <label for="postcode" class="col-sm-5 col-form-label">{{ 'GridFailure.Postcode' | translate }}</label>
+                    <div class="col-sm-6">
+                      <select
+                        [required]="
+                          gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId && !gridFailureDetailsSandbox.oldVersion && !formState.isDisabled
+                        "
+                        type="text"
+                        maxlength="255"
+                        class="form-control"
+                        id="postcode"
+                        name="postcode"
+                        [ngrxFormControlState]="formState.controls['postcode']"
+                      >
+                        <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
+                        <option *ngFor="let item of gridFailureDetailsSandbox.addressPostCodes$ | async" [value]="item">{{ item }}</option>
+                      </select>
+                    </div>
                   </div>
-                </div>
 
-                <!-- street -->
-                <div class="form-group row">
-                  <label for="street" class="col-sm-5 col-form-label">{{ 'GridFailure.Street' | translate }}</label>
-                  <div class="col-sm-6">
-                    <select
-                      [required]="
-                        gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId && !gridFailureDetailsSandbox.oldVersion && !formState.isDisabled
-                      "
-                      type="text"
-                      class="form-control"
-                      id="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>
-                    </select>
+                  <!-- street -->
+                  <div class="form-group row">
+                    <label for="street" class="col-sm-5 col-form-label">{{ 'GridFailure.Street' | translate }}</label>
+                    <div class="col-sm-6">
+                      <select
+                        [required]="
+                          gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId && !gridFailureDetailsSandbox.oldVersion && !formState.isDisabled
+                        "
+                        type="text"
+                        class="form-control"
+                        id="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>
+                      </select>
+                    </div>
                   </div>
-                </div>
 
-                <!-- housenumber -->
-                <div class="form-group row">
-                  <label for="housenumber" class="col-sm-5 col-form-label">{{ 'GridFailure.Housenumber' | translate }}</label>
-                  <div class="col-sm-6">
-                    <select
-                      [required]="
-                        gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId && !gridFailureDetailsSandbox.oldVersion && !formState.isDisabled
-                      "
-                      type="text"
-                      class="form-control"
-                      id="housenumber"
-                      [ngrxFormControlState]="formState.controls['housenumber']"
-                    >
-                      <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
-                      <option *ngFor="let housenumber of gridFailureDetailsSandbox.addressHouseNumbers$ | async" [value]="housenumber">
-                        {{ housenumber }}
-                      </option>
-                    </select>
+                  <!-- housenumber -->
+                  <div class="form-group row">
+                    <label for="housenumber" class="col-sm-5 col-form-label">{{ 'GridFailure.Housenumber' | translate }}</label>
+                    <div class="col-sm-6">
+                      <select
+                        [required]="
+                          gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId && !gridFailureDetailsSandbox.oldVersion && !formState.isDisabled
+                        "
+                        type="text"
+                        class="form-control"
+                        id="housenumber"
+                        [ngrxFormControlState]="formState.controls['housenumber']"
+                      >
+                        <option [value]="null" selected disabled>{{ 'SelectOption' | translate }}</option>
+                        <option *ngFor="let housenumber of gridFailureDetailsSandbox.addressHouseNumbers$ | async" [value]="housenumber">
+                          {{ housenumber }}
+                        </option>
+                      </select>
+                    </div>
                   </div>
-                </div>
 
-                <!-- radius -->
-                <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]="
-                        gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId && !gridFailureDetailsSandbox.oldVersion && !formState.isDisabled
-                      "
-                      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>
+                  <!-- radius -->
+                  <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]="
+                          gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId && !gridFailureDetailsSandbox.oldVersion && !formState.isDisabled
+                        "
+                        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>
+                    </div>
                   </div>
                 </div>
-                <label
-                  class="readOnly"
-                  *ngIf="
-                    !!formState.value.id &&
-                    formState.value.statusIntern !== StateEnum.QUALIFIED &&
-                    formState.value.statusIntern !== StateEnum.CANCELED &&
-                    formState.value.statusIntern !== StateEnum.COMPLETED
-                  "
-                  >Aktuelle Adresse: <br />
-                  {{ currentAddress }}</label
-                >
+                <div>
+                  <label
+                    class="readOnly"
+                    *ngIf="
+                      !!formState.value.id &&
+                      formState.value.statusIntern !== StateEnum.QUALIFIED &&
+                      formState.value.statusIntern !== StateEnum.CANCELED &&
+                      formState.value.statusIntern !== StateEnum.COMPLETED
+                    "
+                    >Aktuelle Adresse: <br />
+                    {{ currentAddress }}</label
+                  >
+                </div>
               </div>
 
               <div class="MS-fields" *ngIf="failureLocationView === Globals.FAILURE_LOCATION_MS && !!gridFailureDetailsSandbox.gridFailureStations">
@@ -596,55 +600,57 @@
               </div>
 
               <div class="NS-fields" *ngIf="failureLocationView === Globals.FAILURE_LOCATION_MAP">
-                <!-- freetext city -->
-                <div class="form-group row">
-                  <label for="city" class="col-sm-5 col-form-label">{{ 'GridFailure.City' | translate }}</label>
-                  <div class="col-sm-6">
-                    <input type="text" maxlength="255" class="form-control" id="freetextCity" [ngrxFormControlState]="formState.controls['freetextCity']" />
+                <div>
+                  <!-- freetext city -->
+                  <div class="form-group row">
+                    <label for="city" class="col-sm-5 col-form-label">{{ 'GridFailure.City' | translate }}</label>
+                    <div class="col-sm-6">
+                      <input type="text" maxlength="255" class="form-control" id="freetextCity" [ngrxFormControlState]="formState.controls['freetextCity']" />
+                    </div>
                   </div>
-                </div>
-                <!-- freetext district -->
-                <div class="form-group row">
-                  <label for="district" class="col-sm-5 col-form-label">{{ 'GridFailure.District' | translate }}</label>
-                  <div class="col-sm-6">
-                    <input
-                      type="text"
-                      maxlength="255"
-                      class="form-control"
-                      id="freetextDistrict"
-                      [ngrxFormControlState]="formState.controls['freetextDistrict']"
-                    />
+                  <!-- freetext district -->
+                  <div class="form-group row">
+                    <label for="district" class="col-sm-5 col-form-label">{{ 'GridFailure.District' | translate }}</label>
+                    <div class="col-sm-6">
+                      <input
+                        type="text"
+                        maxlength="255"
+                        class="form-control"
+                        id="freetextDistrict"
+                        [ngrxFormControlState]="formState.controls['freetextDistrict']"
+                      />
+                    </div>
                   </div>
-                </div>
-                <!-- freetext postcode -->
-                <div class="form-group row">
-                  <label for="postcode" class="col-sm-5 col-form-label">{{ 'GridFailure.Postcode' | translate }}</label>
-                  <div class="col-sm-6">
-                    <input
-                      type="text"
-                      maxlength="5"
-                      class="form-control"
-                      id="freetextPostcode"
-                      [ngrxFormControlState]="formState.controls['freetextPostcode']"
-                    />
+                  <!-- freetext postcode -->
+                  <div class="form-group row">
+                    <label for="postcode" class="col-sm-5 col-form-label">{{ 'GridFailure.Postcode' | translate }}</label>
+                    <div class="col-sm-6">
+                      <input
+                        type="text"
+                        maxlength="5"
+                        class="form-control"
+                        id="freetextPostcode"
+                        [ngrxFormControlState]="formState.controls['freetextPostcode']"
+                      />
+                    </div>
                   </div>
-                </div>
 
-                <!-- radius -->
-                <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]="
-                        gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId && !gridFailureDetailsSandbox.oldVersion && !formState.isDisabled
-                      "
-                      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>
+                  <!-- radius -->
+                  <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]="
+                          gridFailureDetailsSandbox.isFieldRequiredDependingOnBranchId && !gridFailureDetailsSandbox.oldVersion && !formState.isDisabled
+                        "
+                        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>
+                    </div>
                   </div>
                 </div>
               </div>
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 04d6198..09e97e2 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
@@ -109,6 +109,9 @@
 
 .NS-fields,
 .MS-fields {
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
   min-width: 480px;
 }
 
@@ -139,6 +142,6 @@
   border: 1px solid;
   padding: 15px 30px;
   width: -webkit-fill-available;
-  margin-right: 42px;
+  margin: 0px 42px 0px 0px;
   color: grey;
 }
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 164ac0a..bf6dcb0 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
@@ -91,11 +91,25 @@
 
     this.gridFailureDetailsSandbox.gridFailureDetailsFormState$
       .pipe(
-        skipWhile(item => !item.value.housenumber),
+        skipWhile(item => !item.value.postcode && !item.value.city && !item.value.district && !item.value.street && !item.value.housenumber),
         take(1)
       )
       .subscribe(girdFailure => {
-        this.currentAddress = `${girdFailure.value.postcode} ${girdFailure.value.city} (${girdFailure.value.district}), ${girdFailure.value.street} ${girdFailure.value.housenumber}`;
+        if (girdFailure.value.postcode) {
+          this.currentAddress += `${girdFailure.value.postcode} `;
+        }
+        if (girdFailure.value.city) {
+          this.currentAddress += `${girdFailure.value.city} `;
+        }
+        if (girdFailure.value.district) {
+          this.currentAddress += `(${girdFailure.value.district})`;
+        }
+        if (girdFailure.value.street) {
+          this.currentAddress += `, ${girdFailure.value.street} `;
+        }
+        if (girdFailure.value.housenumber) {
+          this.currentAddress += `${girdFailure.value.housenumber}`;
+        }
       });
   }
   public setBranchValue(branchId: string) {
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 45e59ee..f3ed03e 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
@@ -340,7 +340,7 @@
         .subscribe((payload: any) => {
           this.setFormStatePristine();
           if (payload && payload.id) {
-            window.location.assign('/grid-failures/' + payload.id);
+            this._router.navigateByUrl('/grid-failures/' + payload.id);
           } else {
             if (this._configService.getEnv('env') !== 'test') {
               window.location.reload();
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list-column-definition.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list-column-definition.ts
index 4102866..d9ff356 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list-column-definition.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list-column-definition.ts
@@ -214,7 +214,7 @@
     colId: 'radius',
     headerName: 'GridFailure.RadiusInM',
     sortable: true,
-    comparator: stringInsensitiveComparator,
+    comparator: sortAlphaNum,
     suppressMovable: true,
     filter: 'setFilterComponent',
   },
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.scss b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.scss
index 99e3fa0..cdafa8c 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.scss
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.scss
@@ -13,6 +13,8 @@
 .grid-failures-grid-wrapper {
   position: relative;
   height: 100%;
+  display: flex;
+  flex-direction: column;
 }
 
 .header {
diff --git a/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/set-filter/set-filter.component.ts b/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/set-filter/set-filter.component.ts
index 27ccedf..6eb386c 100644
--- a/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/set-filter/set-filter.component.ts
+++ b/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/set-filter/set-filter.component.ts
@@ -106,7 +106,7 @@
     this._filterId = params.colDef.colId;
     this._valueGetter = params.valueGetter;
     this._setFilterItems(params);
-
+    this._params.api = !this._params.api ? ({ gridOptionsWrapper: { gridOptions: {} } } as any) : this._params.api;
     this._params.api['gridOptionsWrapper'].gridOptions = {
       ...this._params.api['gridOptionsWrapper'].gridOptions,
       onGridSizeChanged: (event: any) => {
diff --git a/projects/grid-failure-information-app/src/app/shared/models/settings.model.ts b/projects/grid-failure-information-app/src/app/shared/models/settings.model.ts
index 282dc18..27abdc0 100644
--- a/projects/grid-failure-information-app/src/app/shared/models/settings.model.ts
+++ b/projects/grid-failure-information-app/src/app/shared/models/settings.model.ts
@@ -19,6 +19,7 @@
   public overviewMapInitialLatitude: string = null;
   public overviewMapInitialLongitude: string = null;
   public visibilityConfiguration: VisibilityConfigurationInterface = null;
+  public dataExternInitialVisibility: string = null;
 
   public constructor(data: any = null) {
     Object.keys(data || {})
diff --git a/projects/grid-failure-information-app/src/app/shared/store/reducers/grid-failures/grid-failure-details-form.reducer.spec.ts b/projects/grid-failure-information-app/src/app/shared/store/reducers/grid-failures/grid-failure-details-form.reducer.spec.ts
index 4d8ab12..28d5421 100644
--- a/projects/grid-failure-information-app/src/app/shared/store/reducers/grid-failures/grid-failure-details-form.reducer.spec.ts
+++ b/projects/grid-failure-information-app/src/app/shared/store/reducers/grid-failures/grid-failure-details-form.reducer.spec.ts
@@ -62,6 +62,7 @@
 
   it('should set FormState in response to gridFailureActions.loadAddressCommunitiesSuccess', () => {
     const action: Action = { type: gridFailureActions.loadAllAddressCommunitiesSuccess.type };
+    action['payload'] = [];
     const state: FormGroupState<GridFailure> = formReducer.reducer(INITIAL_STATE, action);
     const formState = formReducer.getFormState(state);
     expect(formState).toEqual(state);
@@ -69,18 +70,21 @@
 
   it('should set FormState in response to gridFailureActions.loadAddressDistrictsSuccess', () => {
     const action: Action = { type: gridFailureActions.loadAddressDistrictsOfCommunitySuccess.type };
+    action['payload'] = [];
     const state: FormGroupState<GridFailure> = formReducer.reducer(INITIAL_STATE, action);
     expect(formReducer.getFormState(state)).toEqual(state);
   });
 
   it('should set FormState in response to gridFailureActions.loadAddressStreetsSuccess', () => {
     const action: Action = { type: gridFailureActions.loadAddressStreetsSuccess.type };
+    action['payload'] = [];
     const state: FormGroupState<GridFailure> = formReducer.reducer(INITIAL_STATE, action);
     expect(formReducer.getFormState(state)).toEqual(state);
   });
 
   it('should set FormState in response to gridFailureActions.loadAddressHouseNumbersSuccess', () => {
     const action: Action = { type: gridFailureActions.loadAddressHouseNumbersSuccess.type };
+    action['payload'] = [];
     const state: FormGroupState<GridFailure> = formReducer.reducer(INITIAL_STATE, action);
     expect(formReducer.getFormState(state)).toEqual(state);
   });
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 debbebc..05a629c 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
@@ -21,7 +21,6 @@
   enable,
   FormGroupState,
   FormState,
-  MarkAsTouchedAction,
   setUserDefinedProperty,
   setValue,
   SetValueAction,
@@ -83,7 +82,9 @@
 }
 
 /**
- * Checks wheather the succes respones has an array with only one item and sets the value in form model
+ * Checks wheather the succes respones has an array with only one item and sets the value in form model.
+ * If not it chekcs additionally, whether the (imported) control value is avaiable in the list values (action payload).
+ * If not, the control value is set to null (so the user has to choose a correct value manually)
  *
  * @author Martin Gardyan <martin.gardyan@pta.de>
  * @export
@@ -92,12 +93,14 @@
  * @param {string} controlId
  * @returns {FormGroupState<GridFailure>}
  */
-export function getDependentSingleValue(state: FormGroupState<GridFailure> = INITIAL_STATE, action: Action, controlId: string): FormGroupState<GridFailure> {
+export function getSingleValue(state: FormGroupState<GridFailure> = INITIAL_STATE, action: Action, controlId: string): FormGroupState<GridFailure> {
   const data: Array<string> = <Array<string>>action['payload'];
 
   const controlName: string = controlId.substring(controlId.indexOf('.') + 1, controlId.length);
   const isSingleValue: boolean = !!data && data.length <= 1 && data[0] !== state.controls[controlName].value;
-  let currentAction: Action = isSingleValue ? new SetValueAction<any>(controlId, data[0] || null) : new MarkAsTouchedAction(controlId);
+  let currentAction: Action = isSingleValue
+    ? new SetValueAction<any>(controlId, data[0] || null)
+    : new SetValueAction<any>(controlId, data.find(d => d === state.controls[controlName].value) || null);
 
   let formState = setUserDefinedProperty(state, DEPENDENT_FIELD_KEY, isSingleValue ? controlId : null);
   return validateForm(formState, currentAction);
@@ -170,9 +173,7 @@
         return setControlEditState(propState, formState, [FORM_CONTROLS.postcode.id]);
       },
       housenumber: (propState, formState): any => {
-        return setControlEditState(propState, formState, [
-          FORM_CONTROLS.street.id,
-        ]);
+        return setControlEditState(propState, formState, [FORM_CONTROLS.street.id]);
       },
     },
     {
@@ -233,20 +234,20 @@
       return setUserDefinedProperty(formState, DEPENDENT_FIELD_KEY, FORM_ID);
     }
     case gridFailureActions.loadAllAddressCommunitiesSuccess.type: {
-      return getDependentSingleValue(state, action, FORM_CONTROLS.city.id);
+      return getSingleValue(state, action, FORM_CONTROLS.city.id);
     }
     case gridFailureActions.loadAddressPostalcodesSuccess.type: {
-      return getDependentSingleValue(state, action, FORM_CONTROLS.postcode.id);
+      return getSingleValue(state, action, FORM_CONTROLS.postcode.id);
     }
     case gridFailureActions.loadAddressDistrictsOfCommunitySuccess.type: {
-      return getDependentSingleValue(state, action, FORM_CONTROLS.district.id);
+      return getSingleValue(state, action, FORM_CONTROLS.district.id);
     }
     case gridFailureActions.loadAddressStreetsSuccess.type: {
-      return getDependentSingleValue(state, action, FORM_CONTROLS.street.id);
+      return getSingleValue(state, action, FORM_CONTROLS.street.id);
     }
     case gridFailureActions.loadAddressHouseNumbersSuccess.type: {
       const ac = { payload: !!action['payload'] && action['payload'].map((houseNumber: FailureHousenumber) => houseNumber.housenumber) } as any;
-      return getDependentSingleValue(state, ac, FORM_CONTROLS.housenumber.id);
+      return getSingleValue(state, ac, FORM_CONTROLS.housenumber.id);
     }
     case SetValueAction.TYPE: {
       let formState = setUserDefinedProperty(state, DEPENDENT_FIELD_KEY, action[DEPENDENT_FIELD_KEY]);
diff --git a/projects/grid-failure-information-app/src/app/shared/utility/utilityHelpers.spec.ts b/projects/grid-failure-information-app/src/app/shared/utility/utilityHelpers.spec.ts
index ef6b322..ef7905d 100644
--- a/projects/grid-failure-information-app/src/app/shared/utility/utilityHelpers.spec.ts
+++ b/projects/grid-failure-information-app/src/app/shared/utility/utilityHelpers.spec.ts
@@ -12,6 +12,7 @@
  ********************************************************************************/
 import * as utilityHelpers from '@grid-failure-information-app/shared/utility/utilityHelpers';
 import { FailureHousenumber } from '@grid-failure-information-app/shared/models';
+import { VisibilityConfigurationInterface } from '@grid-failure-information-app/shared/interfaces/visibility-configuration.interface';
 
 describe('utilityHelpers', () => {
   it('should navigate to overview after call navigateHome', () => {
@@ -112,4 +113,15 @@
     testValue = utilityHelpers.sortAlphaNum(inputFailureHousenumber, inputFailureHousenumber2);
     expect(testValue).toBe(0);
   });
+
+  it('should return true for detailFieldVisibility in case no config is provided', () => {
+    let config: VisibilityConfigurationInterface = null;
+    let testValue = utilityHelpers.determineDetailFieldVisibility(config, 'fieldVisibility', 'description');
+    expect(testValue).toBeTruthy();
+  });
+
+  it('should determine addressRelevan Branch', () => {
+    let testValue = utilityHelpers.getAddressRelevantBranch('S');
+    expect(testValue).toBe('S');
+  });
 });
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 3345c1f..3c72fd9 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
@@ -127,9 +127,14 @@
     firstInput = firstInput.housenumber;
     secondInput = secondInput.housenumber;
   }
+
+  if (firstInput === secondInput) return 0;
+  if (firstInput === null || (firstInput === '' && !!secondInput)) return -1; // handle ascending sorting with NULL values
+  if (secondInput === null || (secondInput === '' && !!firstInput)) return 1; // handle decending sorting with NULL values
+
   // NULL or UNDEFINED handling
-  firstInput = !firstInput ? '0' : firstInput;
-  secondInput = !secondInput ? '0' : secondInput;
+  firstInput = !firstInput ? '0' : String(firstInput);
+  secondInput = !secondInput ? '0' : String(secondInput);
 
   const removeA = /[^a-zA-Z]/g;
   const removeNumber = /[^0-9]/g;
diff --git a/projects/grid-failure-information-app/src/assets/userDocumentation/img/internet-liste.png b/projects/grid-failure-information-app/src/assets/userDocumentation/img/internet-liste.png
index b93a7c2..0a8363f 100644
--- a/projects/grid-failure-information-app/src/assets/userDocumentation/img/internet-liste.png
+++ b/projects/grid-failure-information-app/src/assets/userDocumentation/img/internet-liste.png
Binary files differ
diff --git a/projects/grid-failure-information-app/src/assets/userDocumentation/img/internetkomp-popup.png b/projects/grid-failure-information-app/src/assets/userDocumentation/img/internetkomp-popup.png
new file mode 100644
index 0000000..3c960c1
--- /dev/null
+++ b/projects/grid-failure-information-app/src/assets/userDocumentation/img/internetkomp-popup.png
Binary files differ
diff --git a/projects/grid-failure-information-app/src/assets/userDocumentation/img/ort-adresse.png b/projects/grid-failure-information-app/src/assets/userDocumentation/img/ort-adresse.png
index 5383f2e..850a84f 100644
--- a/projects/grid-failure-information-app/src/assets/userDocumentation/img/ort-adresse.png
+++ b/projects/grid-failure-information-app/src/assets/userDocumentation/img/ort-adresse.png
Binary files differ
diff --git a/projects/grid-failure-information-app/src/assets/userDocumentation/img/ort-karte.png b/projects/grid-failure-information-app/src/assets/userDocumentation/img/ort-karte.png
index e005616..761ab70 100644
--- a/projects/grid-failure-information-app/src/assets/userDocumentation/img/ort-karte.png
+++ b/projects/grid-failure-information-app/src/assets/userDocumentation/img/ort-karte.png
Binary files differ
diff --git a/projects/grid-failure-information-app/src/assets/userDocumentation/img/stoerung-uebersicht.png b/projects/grid-failure-information-app/src/assets/userDocumentation/img/stoerung-uebersicht.png
index c38845d..d482938 100644
--- a/projects/grid-failure-information-app/src/assets/userDocumentation/img/stoerung-uebersicht.png
+++ b/projects/grid-failure-information-app/src/assets/userDocumentation/img/stoerung-uebersicht.png
Binary files differ
diff --git a/projects/grid-failure-information-app/src/assets/userDocumentation/userDocumentation/userDocumentation.adoc.html b/projects/grid-failure-information-app/src/assets/userDocumentation/userDocumentation/userDocumentation.adoc.html
index 905443f..658760a 100644
--- a/projects/grid-failure-information-app/src/assets/userDocumentation/userDocumentation/userDocumentation.adoc.html
+++ b/projects/grid-failure-information-app/src/assets/userDocumentation/userDocumentation/userDocumentation.adoc.html
@@ -463,13 +463,13 @@
 <div class="ulist">
 <ul>
 <li>
-<p>Version: 0.5</p>
+<p>Version: 1.0</p>
 </li>
 <li>
-<p>Datum: 04.09.2020</p>
+<p>Datum: 24.09.2020</p>
 </li>
 <li>
-<p>Status: In Bearbeitung</p>
+<p>Status: Final</p>
 </li>
 </ul>
 </div>
@@ -505,6 +505,7 @@
 <ul class="sectlevel2">
 <li><a href="#_internet_applikation">5.1. Internet-Applikation</a></li>
 <li><a href="#_export_von_störungsmeldungen">5.2. Export von Störungsmeldungen</a></li>
+<li><a href="#_import_von_störungsmeldungen">5.3. Import von Störungsmeldungen</a></li>
 </ul>
 </li>
 <li><a href="#_benachrichtigungen_und_erinnerungen">6. Benachrichtigungen und Erinnerungen</a>
@@ -1693,6 +1694,14 @@
 </ul>
 </div></div></td>
 </tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Aktuelle Adresse</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">nein</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Anzeigefeld</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Zeigt die importierte oder die aus den o.a.
+Feldern ausgewählte Adresse an. Diese Feld ist in den internen Bearbeitungsstatus
+"Beendet" und "Storniert" nicht sichtbar.</p></td>
+</tr>
 </tbody>
 </table>
 <div class="paragraph">
@@ -1777,6 +1786,42 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Textfeld</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Bei Bedarf: Postleitzahl</p></td>
 </tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Radius in Meter</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">ja</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Auswahlfeld</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>Darstellung eines Kreises um den Störungsort mit dem ausgewählten Radius in Meter:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>0</p>
+</li>
+<li>
+<p>50</p>
+</li>
+<li>
+<p>100</p>
+</li>
+<li>
+<p>250</p>
+</li>
+<li>
+<p>500</p>
+</li>
+<li>
+<p>1.000</p>
+</li>
+<li>
+<p>1.500</p>
+</li>
+<li>
+<p>2.000</p>
+</li>
+</ul>
+</div></div></td>
+</tr>
 </tbody>
 </table>
 <div class="admonitionblock tip">
@@ -1786,7 +1831,7 @@
 <img src="../img/icons/tip.png" alt="Tip">
 </td>
 <td class="content">
-Die drei Attribute zur Ergänzung der Standortinformationen werden technisch
+Die drei erstgenannten Attribute zur Ergänzung der Standortinformationen werden technisch
 nicht gegen den ausgewählten Ort in der Karte geprüft.
 </td>
 </tr>
@@ -1853,7 +1898,7 @@
 <p>Über den Veröffentlichungskanal wird die Schnittstelle ausgewählt, über die
 die Störungsinformationen veröffentlicht werden sollen. Es ist möglich
 keinen, einen oder mehrere Kanäle auszuwählen. In der folgenden Abbildung sind
-zwei Veröffentlichungskanäle angebunden, wobei grundsätzlich vier Schnittstellen
+zwei Veröffentlichungskanäle angebunden, wobei grundsätzlich zwei Schnittstellen
 zur Verfügung stehen:</p>
 </div>
 <div class="olist arabic">
@@ -1864,12 +1909,6 @@
 <li>
 <p>Störungsauskunft.de</p>
 </li>
-<li>
-<p>SARIS</p>
-</li>
-<li>
-<p>SAMO</p>
-</li>
 </ol>
 </div>
 <div class="admonitionblock important">
@@ -2404,7 +2443,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="highlightjs highlight"><code data-lang="json" class="language-json hljs">  name;email;mobilenumber
+<pre class="highlightjs highlight"><code data-lang="csv" class="language-csv hljs">  name;email;mobilenumber
   Freudenberg, Pauline;PaulineF@gmx.net;01526677884
   Buckley, Cornelius;sender@test.tester;</code></pre>
 </div>
@@ -2935,6 +2974,30 @@
 </tr>
 </table>
 </div>
+<div class="paragraph">
+<p>Die Detailinformationen zu einer Störungsmeldung werden angezeigt,
+wenn sich der Mauszeiger über der entsprechenden Störungsmeldung
+in der Karte befindet.</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="../img/internetkomp-popup.png" alt="internetkomp popup">
+</div>
+<div class="title">Figure 55. Internet-Applikation Karte Popup-Fenster zu einer Störungsmeldung</div>
+</div>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<img src="../img/icons/tip.png" alt="Tip">
+</td>
+<td class="content">
+Die sichtbaren Felder der Popup-Fensters konfiguriert der
+Administrator.
+</td>
+</tr>
+</table>
+</div>
 </div>
 <div class="sect3">
 <h4 id="_liste"><a class="anchor" href="#_liste"></a>5.1.2. Liste</h4>
@@ -2947,7 +3010,21 @@
 <div class="content">
 <img src="../img/internet-liste.png" alt="internet liste">
 </div>
-<div class="title">Figure 55. Internet-Applikation Liste</div>
+<div class="title">Figure 56. Internet-Applikation Liste</div>
+</div>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<img src="../img/icons/tip.png" alt="Tip">
+</td>
+<td class="content">
+Die Sichtbarkeit einzelner Spalten konfiguriert der Administrator. D.h. falls
+einzelne Spalten in Ihrer Installation nicht sichtbar sein sollten, so hat der
+Administrator diese ausgeblendet.
+</td>
+</tr>
+</table>
 </div>
 <div class="paragraph">
 <p>Die Listenansicht enthält folgende Attribute.</p>
@@ -3008,6 +3085,10 @@
 </tr>
 </table>
 </div>
+<div class="paragraph">
+<p>Die Darstellung des Felds "Letzte Änderung" mit Datum und Uhrzeit in der Fußzeile
+bezieht sich auf den Zeitpunkt der letzten Änderung der Störungsmeldungen.</p>
+</div>
 </div>
 <div class="sect3">
 <h4 id="_plz_suche"><a class="anchor" href="#_plz_suche"></a>5.1.3. PLZ-Suche</h4>
@@ -3020,7 +3101,7 @@
 <div class="content">
 <img src="../img/internet-suche.png" alt="internet suche">
 </div>
-<div class="title">Figure 56. Internet-Applikation PLZ-Suche</div>
+<div class="title">Figure 57. Internet-Applikation PLZ-Suche</div>
 </div>
 <div class="paragraph">
 <p>Anschließend werden autonatisch die beiden Komponenten auf diese PLZ gefiltert.</p>
@@ -3029,7 +3110,7 @@
 <div class="content">
 <img src="../img/internet-suche-beispiel.png" alt="internet suche beispiel">
 </div>
-<div class="title">Figure 57. Internet-Applikation PLZ-Suche (Beispiel)</div>
+<div class="title">Figure 58. Internet-Applikation PLZ-Suche (Beispiel)</div>
 </div>
 </div>
 </div>
@@ -3111,23 +3192,41 @@
 </ul>
 </div>
 </div>
-<div class="sect4">
-<h5 id="SARIS"><a class="anchor" href="#SARIS"></a>5.2.4.3. SARIS</h5>
-<div class="paragraph">
-<p>TODO: Gibt es hier relevante Infos?</p>
 </div>
 </div>
-<div class="sect4">
-<h5 id="SAMO"><a class="anchor" href="#SAMO"></a>5.2.4.4. SAMO</h5>
+<div class="sect2">
+<h3 id="_import_von_störungsmeldungen"><a class="anchor" href="#_import_von_störungsmeldungen"></a>5.3. Import von Störungsmeldungen</h3>
 <div class="paragraph">
-<p>TODO: Gibt es hier relevante Infos?</p>
+<p>Der automatische Import von Störungsmeldung kann grundsätzlich
+über verschiedene Kanäle erfolgen, die - technisch - auch als
+Import-Schnittstellen bezeichnet werden.</p>
+</div>
+<div class="paragraph">
+<p>Die Zeitpunkte, wann die Informationen über die definierten Kanäle
+importiert werden, konfiguriert der Administrator.</p>
+</div>
+<div class="paragraph">
+<p>Die Bereitstellung der neu importierten Störungsmeldungen erfolgt
+in der Übersicht der Störungsmeldungen. Neue Einträge besitzen
+den internen Bearbeitungsstatus neu.</p>
+</div>
+<div class="paragraph">
+<p>Folgende Import-Schnittstellen sind verfügbar:</p>
+</div>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>SARIS</p>
+</li>
+<li>
+<p>SAMO</p>
+</li>
+</ol>
 </div>
 <div style="page-break-after: always;"></div>
 </div>
 </div>
 </div>
-</div>
-</div>
 <div class="sect1">
 <h2 id="_benachrichtigungen_und_erinnerungen"><a class="anchor" href="#_benachrichtigungen_und_erinnerungen"></a>6. Benachrichtigungen und Erinnerungen</h2>
 <div class="sectionbody">
@@ -3143,7 +3242,7 @@
 <div class="content">
 <img src="../img/glocke-rot.png" alt="glocke rot">
 </div>
-<div class="title">Figure 58. Erinnerung(en) vorhanden</div>
+<div class="title">Figure 59. Erinnerung(en) vorhanden</div>
 </div>
 <div class="paragraph">
 <p>In allen anderen Fällen bleibt das Glockensymbol schwarz.</p>
@@ -3152,7 +3251,7 @@
 <div class="content">
 <img src="../img/glocke-schwarz.png" alt="glocke schwarz">
 </div>
-<div class="title">Figure 59. Keine Erinnerung vorhanden</div>
+<div class="title">Figure 60. Keine Erinnerung vorhanden</div>
 </div>
 </div>
 <div class="sect2">
@@ -3195,7 +3294,7 @@
 <div class="content">
 <img src="../img/meldung-hinweis.png" alt="meldung hinweis">
 </div>
-<div class="title">Figure 60. Hinweis Pflichtfelder</div>
+<div class="title">Figure 61. Hinweis Pflichtfelder</div>
 </div>
 <div class="paragraph">
 <p>Diese Meldungen bleiben für einige Sekunden sichtbar und verschwinden dann wieder
@@ -3223,7 +3322,7 @@
 <div class="content">
 <img src="../img/meldung-fehler.png" alt="meldung fehler">
 </div>
-<div class="title">Figure 61. Fehlermeldung</div>
+<div class="title">Figure 62. Fehlermeldung</div>
 </div>
 <div class="paragraph">
 <p>Diese Meldungen bleiben solange sichtbar bis sie durch den Benutzer durch einfaches
@@ -3250,7 +3349,7 @@
 <div class="content">
 <img src="../img/oeffnen-modul.png" alt="oeffnen modul">
 </div>
-<div class="title">Figure 62. Kachel zum Starten des Moduls "Störungsinformationstool"</div>
+<div class="title">Figure 63. Kachel zum Starten des Moduls "Störungsinformationstool"</div>
 </div>
 </div>
 <div class="sect2">
@@ -3262,7 +3361,7 @@
 <div class="content">
 <img src="../img/abmelden.png" alt="abmelden">
 </div>
-<div class="title">Figure 63. Abmelden vom openKONSEQUENZ-System</div>
+<div class="title">Figure 64. Abmelden vom openKONSEQUENZ-System</div>
 </div>
 <div class="admonitionblock caution">
 <table>
diff --git a/projects/grid-failure-information-app/src/styles.scss b/projects/grid-failure-information-app/src/styles.scss
index aabb47f..614deda 100644
--- a/projects/grid-failure-information-app/src/styles.scss
+++ b/projects/grid-failure-information-app/src/styles.scss
@@ -3834,6 +3834,7 @@
 .card-body {
   flex: 1 1 auto;
   padding: 1.25rem;
+  height: calc(100% - 2.25rem);
 }
 
 .card-title {
diff --git a/projects/grid-failure-information-map-app/src/app/app-config.service.ts b/projects/grid-failure-information-map-app/src/app/app-config.service.ts
index 96aea46..4810aee 100644
--- a/projects/grid-failure-information-map-app/src/app/app-config.service.ts
+++ b/projects/grid-failure-information-map-app/src/app/app-config.service.ts
@@ -12,6 +12,7 @@
  ********************************************************************************/
 import { Injectable } from '@angular/core';
 import { HttpClient } from '@angular/common/http';
+import { MapOptions } from '@openk-libs/grid-failure-information-map/shared/models/map-options.model';
 
 @Injectable({
   providedIn: 'root',
@@ -20,6 +21,6 @@
   constructor(private http: HttpClient) {}
 
   getConfig() {
-    return this.http.get('public-settings');
+    return this.http.get<MapOptions>('public-settings');
   }
 }
diff --git a/projects/grid-failure-information-map-app/src/app/grid-failure/grid-failure.sandbox.spec.ts b/projects/grid-failure-information-map-app/src/app/grid-failure/grid-failure.sandbox.spec.ts
index 679f27e..2a39df8 100644
--- a/projects/grid-failure-information-map-app/src/app/grid-failure/grid-failure.sandbox.spec.ts
+++ b/projects/grid-failure-information-map-app/src/app/grid-failure/grid-failure.sandbox.spec.ts
@@ -14,9 +14,10 @@
 import { GridFailureService } from '@grid-failure-information-map-app/app/grid-failure/grid-failure.service';
 import { AppConfigService } from '@grid-failure-information-map-app/app/app-config.service';
 import { of } from 'rxjs';
-import { GridFailure } from '@grid-failure-information-app/shared/models';
+import { GridFailure, Settings } from '@grid-failure-information-app/shared/models';
+import { VisibilityEnum } from '@grid-failure-information-app/shared/constants/enums';
 
-describe('GridFailureSandbox', () => {
+describe('GridFailureSandbox ', () => {
   let sandbox: GridFailureSandbox;
   let gridFailureService: GridFailureService;
   let configService: AppConfigService;
@@ -24,17 +25,15 @@
   let gridFailureMapList: GridFailure[] = [];
 
   beforeEach(() => {
+    let config = new Settings();
+    config.dataExternInitialVisibility = VisibilityEnum.SHOW;
     configService = {
-      getConfig: () => of(new Object()),
+      getConfig: () => of(config),
     } as any;
     gridFailureService = {
-      getGridFailureData: () => of(new Object()),
+      getGridFailureData: () => of([new GridFailure()]),
     } as any;
-    gridFailureMapListAll = [
-      new GridFailure({postcode: '007'}),
-      new GridFailure({postcode: '4711'}),
-      new GridFailure({postcode: '0815'}),
-    ];
+    gridFailureMapListAll = [new GridFailure({ postcode: '007' }), new GridFailure({ postcode: '4711' }), new GridFailure({ postcode: '0815' })];
     gridFailureMapList = gridFailureMapListAll.map(i => Object.assign(i));
     sandbox = new GridFailureSandbox(gridFailureService, configService);
     (sandbox as any)._gridFailureMapListAll = gridFailureMapListAll;
@@ -45,12 +44,6 @@
     expect(sandbox).toBeTruthy();
   });
 
-  it('should add two subscriptions', () => {
-    const spy: any = spyOn(sandbox['_subscription'], 'add');
-    sandbox.initSandbox();
-    expect(spy).toHaveBeenCalledTimes(2);
-  });
-
   it('should unsubscribe subscriptions', () => {
     const spy: any = spyOn(sandbox['_subscription'], 'unsubscribe');
     sandbox.unsubscribe();
@@ -58,13 +51,15 @@
   });
 
   it('filterGridFailureMapList() should assign all gridfailure to map property ', () => {
+    sandbox.initSandbox();
     sandbox.filterGridFailureMapList();
-    expect(sandbox.gridFailureMapList.length).toEqual(gridFailureMapListAll.length);
+    expect(sandbox.gridFailureMapList.length).toEqual(1);
   });
 
   it('filterGridFailureMapList("") should assign all gridfailure to map property ', () => {
+    sandbox.initSandbox();
     sandbox.filterGridFailureMapList('');
-    expect(sandbox.gridFailureMapList.length).toEqual(gridFailureMapListAll.length);
+    expect(sandbox.gridFailureMapList.length).toEqual(1);
   });
 
   it('filterGridFailureMapList("007") should assign only one gridfailure to map property ', () => {
diff --git a/projects/grid-failure-information-map-app/src/app/grid-failure/grid-failure.sandbox.ts b/projects/grid-failure-information-map-app/src/app/grid-failure/grid-failure.sandbox.ts
index cb114d8..0dfac51 100644
--- a/projects/grid-failure-information-map-app/src/app/grid-failure/grid-failure.sandbox.ts
+++ b/projects/grid-failure-information-map-app/src/app/grid-failure/grid-failure.sandbox.ts
@@ -12,48 +12,39 @@
  ********************************************************************************/
 import { Injectable } from '@angular/core';
 import { GridFailureService } from '@grid-failure-information-map-app/app/grid-failure/grid-failure.service';
-import { Subscription } from 'rxjs';
+import { Subscription, combineLatest } from 'rxjs';
 import { MapOptions } from '@openk-libs/grid-failure-information-map/shared/models/map-options.model';
 import { AppConfigService } from '@grid-failure-information-map-app/app/app-config.service';
 import { take } from 'rxjs/operators';
 import { GridFailure } from '@grid-failure-information-app/shared/models';
+import { VisibilityEnum } from '@grid-failure-information-app/shared/constants/enums';
 
 @Injectable()
 export class GridFailureSandbox {
   public gridFailureMapList: GridFailure[] = [];
   public mapOptions: MapOptions = new MapOptions();
-  public postcode: string = '';
 
   private _gridFailureMapListAll: GridFailure[] = [];
+  private _gridFailureMapListAllConfigured: GridFailure[] = [];
   private _subscription: Subscription = new Subscription();
 
   constructor(private _gridFailureService: GridFailureService, private _configService: AppConfigService) {}
 
   public initSandbox() {
-    this._subscription.add(
-      this._configService
-        .getConfig()
-        .pipe(take(1))
-        .subscribe((data: MapOptions) => {
-          this.mapOptions = new MapOptions(data);
-          this.mapOptions.extendMarkerInformation = true;
-        })
-    );
-
-    this._subscription.add(
-      this._gridFailureService
-        .getGridFailureData()
-        .pipe(take(1))
-        .subscribe((data: GridFailure[]) => {
-          this.gridFailureMapList = data;
-          this._gridFailureMapListAll = data;
-        })
-    );
+    this._subscription = combineLatest([this._configService.getConfig(), this._gridFailureService.getGridFailureData()])
+      .pipe(take(1))
+      .subscribe(([config, data]) => {
+        this.mapOptions = new MapOptions(config);
+        this.mapOptions.extendMarkerInformation = true;
+        this.gridFailureMapList = config && config.dataExternInitialVisibility === VisibilityEnum.HIDE ? [] : data;
+        this._gridFailureMapListAll = data;
+        this._gridFailureMapListAllConfigured = config && config.dataExternInitialVisibility === VisibilityEnum.HIDE ? [] : data;
+      });
   }
 
   public filterGridFailureMapList(postcode: string = '') {
     postcode = postcode.trim();
-    this.gridFailureMapList = postcode.length > 0 ? this._gridFailureMapListAll.filter(y => y.postcode === postcode) : this._gridFailureMapListAll;
+    this.gridFailureMapList = postcode.length > 0 ? this._gridFailureMapListAll.filter(y => y.postcode === postcode) : this._gridFailureMapListAllConfigured;
   }
 
   public unsubscribe() {
diff --git a/projects/grid-failure-information-map-app/src/app/grid-failure/grid-failure.service.ts b/projects/grid-failure-information-map-app/src/app/grid-failure/grid-failure.service.ts
index ddefa01..ed4fba6 100644
--- a/projects/grid-failure-information-map-app/src/app/grid-failure/grid-failure.service.ts
+++ b/projects/grid-failure-information-map-app/src/app/grid-failure/grid-failure.service.ts
@@ -1,26 +1,26 @@
 /********************************************************************************
-* 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
-********************************************************************************/
+ * 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 { Injectable } from '@angular/core';
 import { HttpClient } from '@angular/common/http';
+import { GridFailure } from '@grid-failure-information-app/shared/models';
 
 @Injectable({
-  providedIn: 'root'
+  providedIn: 'root',
 })
 export class GridFailureService {
+  constructor(private _http: HttpClient) {}
 
-  constructor(private _http: HttpClient) { }
-
-  getGridFailureData(){
-    return this._http.get('public-sit');
+  getGridFailureData() {
+    return this._http.get<GridFailure[]>('public-sit');
   }
 }
diff --git a/projects/grid-failure-information-table-app/src/app/app-config.service.ts b/projects/grid-failure-information-table-app/src/app/app-config.service.ts
index 96aea46..cef247c 100644
--- a/projects/grid-failure-information-table-app/src/app/app-config.service.ts
+++ b/projects/grid-failure-information-table-app/src/app/app-config.service.ts
@@ -12,6 +12,7 @@
  ********************************************************************************/
 import { Injectable } from '@angular/core';
 import { HttpClient } from '@angular/common/http';
+import { Settings } from '@grid-failure-information-app/shared/models';
 
 @Injectable({
   providedIn: 'root',
@@ -20,6 +21,6 @@
   constructor(private http: HttpClient) {}
 
   getConfig() {
-    return this.http.get('public-settings');
+    return this.http.get<Settings>('public-settings');
   }
 }
diff --git a/projects/grid-failure-information-table-app/src/app/app.component.spec.ts b/projects/grid-failure-information-table-app/src/app/app.component.spec.ts
index 79a3fb9..3821ac2 100644
--- a/projects/grid-failure-information-table-app/src/app/app.component.spec.ts
+++ b/projects/grid-failure-information-table-app/src/app/app.component.spec.ts
@@ -16,8 +16,9 @@
 import { GridFailure, Settings } from '@grid-failure-information-app/shared/models';
 import { of } from 'rxjs';
 import { DatePipe } from '@angular/common';
+import { VisibilityEnum } from '@grid-failure-information-app/shared/constants/enums';
 
-describe('AppComponent', () => {
+describe('AppComponent ', () => {
   let component: TableComponent;
   let service: AppTableService;
   let configService: AppConfigService;
@@ -26,7 +27,7 @@
 
   beforeEach(() => {
     service = {
-      loadGridFailureData: () => of(true),
+      loadGridFailureData: () => of([new GridFailure()]),
     } as any;
     configService = {
       getConfig: () => of(true),
@@ -63,9 +64,16 @@
   });
 
   it('should assign all gridfailures to table', () => {
+    let config = new Settings();
+    config.dataExternInitialVisibility = VisibilityEnum.SHOW;
+    configService = {
+      getConfig: () => of(config),
+    } as any;
+    component = new TableComponent(service, configService, null);
     component.postcode = '';
     component['_datePipe'] = { transform: () => '18.09.2020 / 10:17' } as any;
-    expect(component.gridFailures.length).toEqual(gridFailureMapListAll.length);
+    component.ngOnInit();
+    expect(component.gridFailures.length).toEqual(1);
   });
 
   it('should assign only gridfailures with postcode 007 to table', () => {
diff --git a/projects/grid-failure-information-table-app/src/app/app.component.ts b/projects/grid-failure-information-table-app/src/app/app.component.ts
index a83235a..bccf565 100644
--- a/projects/grid-failure-information-table-app/src/app/app.component.ts
+++ b/projects/grid-failure-information-table-app/src/app/app.component.ts
@@ -16,7 +16,7 @@
 import { APP_TABLE_COLDEF } from '@grid-failure-information-table-app/app/app-table-column-definition';
 import { GridOptions } from 'ag-grid-community';
 import { Globals } from '@grid-failure-information-app/shared/constants/globals';
-import { Subscription } from 'rxjs';
+import { Subscription, combineLatest } from 'rxjs';
 import { DatePipe } from '@angular/common';
 import { AppConfigService } from '@grid-failure-information-table-app/app/app-config.service';
 import { take } from 'rxjs/operators';
@@ -39,6 +39,7 @@
 
   private _gridApi;
   private _gridFailuresAll: GridFailure[] = [];
+  private _gridFailuresAllConfigured: GridFailure[];
   private _subscription: Subscription = new Subscription();
 
   constructor(private _appTableService: AppTableService, private _configService: AppConfigService, private _datePipe: DatePipe) {
@@ -52,36 +53,28 @@
     value = value.trim();
     let filterFunc = (x: GridFailure) => x.postcode === value || x.freetextPostcode === value;
     if (!!this._gridFailuresAll && this._gridFailuresAll.length > 0) {
-      this.gridFailures = value.length > 0 ? this._gridFailuresAll.filter(filterFunc) : this._gridFailuresAll;
+      this.gridFailures = value.length > 0 ? this._gridFailuresAll.filter(filterFunc) : this._gridFailuresAllConfigured;
     }
   }
 
   ngOnInit() {
-    this._subscription.add(
-      this._configService
-        .getConfig()
-        .pipe(take(1))
-        .subscribe((config: Settings) => {
-          if (config && config.visibilityConfiguration) {
-            APP_TABLE_COLDEF.forEach((column: any) => {
-              column['hide'] = config.visibilityConfiguration.tableExternColumnVisibility[column['field']] === VisibilityEnum.HIDE;
-            });
-            this.columnDefs = APP_TABLE_COLDEF;
-          }
-        })
-    );
-    this._subscription.add(
-      this._appTableService
-        .loadGridFailureData()
-        .pipe(take(1))
-        .subscribe((data: GridFailure[]) => {
-          this.gridFailures = data;
-          this._gridFailuresAll = data;
-          if (this._datePipe) {
-            this.lastModDate = this._datePipe.transform(this._getLastModeDate(), Globals.DATE_TIME_FORMAT);
-          }
-        })
-    );
+    this._subscription = combineLatest([this._configService.getConfig(), this._appTableService.loadGridFailureData()])
+      .pipe(take(1))
+      .subscribe(([config, data]) => {
+        if (config && config.visibilityConfiguration) {
+          APP_TABLE_COLDEF.forEach((column: any) => {
+            column['hide'] = config.visibilityConfiguration.tableExternColumnVisibility[column['field']] === VisibilityEnum.HIDE;
+          });
+          this.columnDefs = APP_TABLE_COLDEF;
+        }
+        this.gridFailures = config && config.dataExternInitialVisibility === VisibilityEnum.HIDE ? [] : data;
+        this._gridFailuresAll = data;
+        this._gridFailuresAllConfigured = config && config.dataExternInitialVisibility === VisibilityEnum.HIDE ? [] : data;
+        if (this._datePipe) {
+          this.lastModDate = this._datePipe.transform(this._getLastModeDate(), Globals.DATE_TIME_FORMAT);
+        }
+      });
+
     this.gridOptions = {
       localeText: Globals.LOCALE_TEXT,
     };
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
index 031f129..ae5e3dd 100644
--- 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
@@ -21,6 +21,7 @@
   public overviewMapInitialLatitude: string = null;
   public overviewMapInitialLongitude: string = null;
   public visibilityConfiguration: VisibilityConfigurationInterface = null;
+  public dataExternInitialVisibility: string = null;
 
   public constructor(data: any = null) {
     Object.keys(data || {})
diff --git a/projects/openk/grid-failure-information-map/src/shared/utility/utilityHelpers.spec.ts b/projects/openk/grid-failure-information-map/src/shared/utility/utilityHelpers.spec.ts
index c1d8917..df78e04 100644
--- a/projects/openk/grid-failure-information-map/src/shared/utility/utilityHelpers.spec.ts
+++ b/projects/openk/grid-failure-information-map/src/shared/utility/utilityHelpers.spec.ts
@@ -11,6 +11,7 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 import * as utilityHelpers from '@openk-libs/grid-failure-information-map/shared/utility/utilityHelpers';
+import { VisibilityConfigurationInterface } from '@openk-libs/grid-failure-information-map/shared/models/visibility-configuration.interface';
 
 describe('utilityHelpers', () => {
   it('should parse string to Integer via toInteger()', () => {
@@ -43,4 +44,10 @@
     let testValue = utilityHelpers.convertISOToLocalDateTime(dateString);
     expect(testValue).toBe('19.11.2020 / 14:13');
   });
+
+  it('should return true for detailFieldVisibility in case no config is provided', () => {
+    let config: VisibilityConfigurationInterface = null;
+    let testValue = utilityHelpers.determineDetailFieldVisibility(config, 'fieldVisibility', 'description');
+    expect(testValue).toBeTruthy();
+  });
 });