diff --git a/DockerfileDevelopBE b/DockerfileDevelopBE
index d419d71..7a03ebf 100644
--- a/DockerfileDevelopBE
+++ b/DockerfileDevelopBE
@@ -18,10 +18,6 @@
 # set working directory
 WORKDIR /app
 
-# SET NPM PROXY
-RUN npm config set proxy http://webproxy3.pta.de:8080
-RUN npm config set https-proxy http://webproxy3.pta.de:8080
-
 # INSTALL AND CACHE APP DEPENDENCIES
 COPY package.json /app/package.json
 RUN npm install
diff --git a/DockerfileFeatureBE b/DockerfileFeatureBE
index 395fad5..45fb4b5 100644
--- a/DockerfileFeatureBE
+++ b/DockerfileFeatureBE
@@ -18,10 +18,6 @@
 # set working directory
 WORKDIR /app
 
-# SET NPM PROXY
-RUN npm config set proxy http://webproxy3.pta.de:8080
-RUN npm config set https-proxy http://webproxy3.pta.de:8080
-
 # INSTALL AND CACHE APP DEPENDENCIES
 COPY package.json /app/package.json
 RUN npm install
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 782f007..c84afc8 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
@@ -344,11 +344,11 @@
         .subscribe((payload: any) => {
           this.setFormStatePristine();
           if (payload && payload.id) {
-            this._router.navigateByUrl('/grid-failures/' + payload.id);
+            this._router.navigateByUrl('/grid-failures/' + payload.id).then(() => {
+              this._reloadDetail();
+            });
           } else {
-            if (this._configService.getEnv('env') !== 'test') {
-              window.location.reload();
-            }
+            this._reloadDetail();
           }
         });
 
@@ -920,4 +920,10 @@
         break;
     }
   }
+
+  private _reloadDetail() {
+    if (this._configService.getEnv('env') !== 'test') {
+      window.location.reload();
+    }
+  }
 }
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 ea0f137..b4c00bb 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
@@ -38,32 +38,28 @@
   protected _endSubscriptions$: Subject<boolean> = new Subject();
 
   filterCheckboxList(text: string) {
-    text
-      .trim()
-      .toLowerCase()
-      .split(' ')
-      .forEach(filterWord => {
-        const trimmedFilterWord = filterWord.trim();
-        if (Object.keys(this.setItems).length > 0) {
-          // setItems allready there ??
-          for (var itemKey in this.setItems) {
-            if (this._contains(itemKey, trimmedFilterWord)) {
-              // filtertext is in itemKey ??
-              this._extendFilteredItem(trimmedFilterWord);
-            } else {
-              this._filteredItems[itemKey] = this.setItems[itemKey];
-              delete this.setItems[itemKey];
-            }
-          }
-        } else {
+    var filterWord = text.toLowerCase();
+    const trimmedFilterWord = filterWord;
+    if (Object.keys(this.setItems).length > 0) {
+      // setItems allready there ??
+      for (var itemKey in this.setItems) {
+        if (this._contains(itemKey, trimmedFilterWord)) {
+          // filtertext is in itemKey ??
           this._extendFilteredItem(trimmedFilterWord);
-        }
-        if (this.filterText.length === 0) {
-          this.selectAll();
         } else {
-          this.selectAllChecked = false;
+          this._filteredItems[itemKey] = this.setItems[itemKey];
+          delete this.setItems[itemKey];
         }
-      });
+      }
+    } else {
+      this._extendFilteredItem(trimmedFilterWord);
+    }
+    if (this.filterText.length === 0) {
+      this.selectAll();
+    } else {
+      this.selectAllChecked = false;
+    }
+
     this._params.filterChangedCallback();
   }
 
diff --git a/projects/grid-failure-information-web-cache/DockerfileWebCache b/projects/grid-failure-information-web-cache/DockerfileWebCache
index 838d289..b1799b3 100644
--- a/projects/grid-failure-information-web-cache/DockerfileWebCache
+++ b/projects/grid-failure-information-web-cache/DockerfileWebCache
@@ -18,10 +18,6 @@
 # set working directory
 WORKDIR /app
 
-# SET NPM PROXY
-RUN npm config set proxy http://webproxy3.pta.de:8080
-RUN npm config set https-proxy http://webproxy3.pta.de:8080
-
 # INSTALL AND CACHE APP DEPENDENCIES
 COPY package.json /app/package.json
 RUN npm install
