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 eb14ef8..14d3d99 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
@@ -225,7 +225,7 @@
     sortable: true,
     comparator: stringInsensitiveComparator,
     suppressMovable: true,
-    filter: 'setFilterComponent',
+    filter: 'fuzzySetFilterComponent',
     valueSeparator: ', ',
   },
   {
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 92c4216..ee54f11 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
@@ -29,6 +29,7 @@
 import * as store from '@grid-failure-information-app/shared/store';
 import { Store } from '@ngrx/store';
 import { GridFailure } from '@grid-failure-information-app/shared/models';
+import { FuzzySetFilterComponent } from '@grid-failure-information-app/shared/filters/ag-grid/fuzzy-set-filter/fuzzy-set-filter.component';
 
 @Component({
   selector: 'app-grid-failure-list',
@@ -62,7 +63,11 @@
 
   constructor(public sandbox: GridFailureSandbox, private appState$: Store<store.State>, private _router: Router, private _utilService: UtilService) {
     super();
-    this.frameworkComponents = { setFilterComponent: SetFilterComponent, headerCellRendererComponent: HeaderCellRendererComponent };
+    this.frameworkComponents = {
+      setFilterComponent: SetFilterComponent,
+      fuzzySetFilterComponent: FuzzySetFilterComponent,
+      headerCellRendererComponent: HeaderCellRendererComponent,
+    };
   }
 
   ngOnInit(): void {
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.module.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.module.ts
index 80d9064..b928a2a 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.module.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.module.ts
@@ -42,6 +42,7 @@
 import { UtilityModule } from '@grid-failure-information-app/shared/utility';
 import { PipesModule } from '@grid-failure-information-app/shared/pipes/pipes.module';
 import { GridFailureInformationMapModule } from 'openk/grid-failure-information-map/src/public-api';
+import { FuzzySetFilterComponent } from '@grid-failure-information-app/shared/filters/ag-grid/fuzzy-set-filter/fuzzy-set-filter.component';
 @NgModule({
   imports: [
     CommonModule,
@@ -59,7 +60,7 @@
     UtilityModule,
     PipesModule,
     StoreModule.forFeature('grid-failure', gridFailureReducers),
-    AgGridModule.withComponents([SetFilterComponent]),
+    AgGridModule.withComponents([SetFilterComponent, FuzzySetFilterComponent]),
     EffectsModule.forFeature([GridFailuresEffects]),
     ContainersModule,
     PipesModule,
diff --git a/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/fuzzy-set-filter/fuzzy-set-filter.component.css b/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/fuzzy-set-filter/fuzzy-set-filter.component.css
new file mode 100644
index 0000000..d7e7381
--- /dev/null
+++ b/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/fuzzy-set-filter/fuzzy-set-filter.component.css
@@ -0,0 +1,43 @@
+/********************************************************************************
+ * 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
+ ********************************************************************************/
+label {
+  white-space: nowrap;
+}
+
+span {
+  margin: 3px;
+}
+
+.ag-grid-filter-container {
+  height: auto;
+  width: 250px;
+  margin: 4px;
+  border: 1px solid lightgrey;
+  z-index: 100;
+}
+
+.ag-grid-filter-text {
+  width: 99%;
+  margin: 1px;
+}
+
+.ag-grid-filter {
+  border-bottom: 1px solid lightgrey;
+  margin: 2px;
+}
+
+.ag-grid-filter-checkbox {
+  overflow-y: scroll;
+  overflow: hidden;
+  margin: 2px;
+}
diff --git a/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/fuzzy-set-filter/fuzzy-set-filter.component.html b/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/fuzzy-set-filter/fuzzy-set-filter.component.html
new file mode 100644
index 0000000..6d52e0f
--- /dev/null
+++ b/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/fuzzy-set-filter/fuzzy-set-filter.component.html
@@ -0,0 +1,46 @@
+<!-- /********************************************************************************
+* 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
+********************************************************************************/ -->
+<div class="ag-grid-filter-container">
+  <div class="ag-grid-filter">
+    <input mdInput class="ag-grid-filter-text" [(ngModel)]="filterText" name="'filterText'" (input)="filterCheckboxList($event.target.value)" />
+  </div>
+  <div class="ag-grid-filter">
+    <div class="checkbox">
+      <label
+        ><input type="checkbox" (change)="selectAll($event)" [checked]="selectAllChecked" /><span>{{ 'GridFailures.SelectAll' | translate }}</span></label
+      >
+    </div>
+  </div>
+  <div class="ag-grid-filter-checkbox">
+    <label *ngFor="let setItem of setItems | keyvalue" style="display: block;">
+      <input
+        type="checkbox"
+        [checked]="setItem.value.checked"
+        (change)="notifyFilter($event)"
+        [id]="setItem?.key"
+        *ngIf="setItem.key != 'null' && setItem.key != ''"
+      />
+      <span *ngIf="setItem.key != 'null' && setItem.key != ''">{{ setItem?.key }}</span>
+    </label>
+    <label *ngFor="let setItem of setItems | keyvalue" style="display: block;">
+      <input
+        type="checkbox"
+        [checked]="setItem.value.checked"
+        (change)="notifyFilter($event)"
+        [id]="setItem?.key"
+        *ngIf="setItem.key == 'null' && setItem.key != ''"
+      />
+      <span *ngIf="setItem.key == 'null' && setItem.key != ''">{{ 'GridFailures.NullValue' | translate }}</span>
+    </label>
+  </div>
+</div>
diff --git a/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/fuzzy-set-filter/fuzzy-set-filter.component.spec.ts b/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/fuzzy-set-filter/fuzzy-set-filter.component.spec.ts
new file mode 100644
index 0000000..ad0be59
--- /dev/null
+++ b/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/fuzzy-set-filter/fuzzy-set-filter.component.spec.ts
@@ -0,0 +1,300 @@
+/********************************************************************************
+ * 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 { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { FuzzySetFilterComponent } from '@grid-failure-information-app/shared/filters/ag-grid/fuzzy-set-filter/fuzzy-set-filter.component';
+
+describe('FuzzySetFilterComponent', () => {
+  let component: FuzzySetFilterComponent;
+  let fixture: ComponentFixture<FuzzySetFilterComponent>;
+
+  beforeEach(() => {
+    const params: any = {
+      node: 'x',
+      colDef: {
+        colId: 'testColId',
+      },
+      rowModel: {
+        nodeManager: {
+          allNodesMap: {
+            0: { id: '0' },
+            1: { id: '1' },
+          },
+        },
+      },
+      doesRowPassOtherFilter() {},
+      filterChangedCallback() {},
+      api: {
+        getModel() {
+          return {
+            rowsToDisplay: {
+              map: () => {
+                return ['Störung'];
+              },
+            },
+          };
+        },
+        gridOptionsWrapper: { gridOptions: { onGridSizeChanged: () => {}, onRowDataChanged: () => {} } },
+      },
+    } as any;
+    component = new FuzzySetFilterComponent();
+    component['_params'] = params;
+    component.setItems = {
+      FilterText1: { checked: true },
+      FilterText2: { checkde: false },
+    };
+    component['_valueGetter'] = () => {
+      return { id: '0' };
+    };
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+
+  it('should extend the setItems in _extendFilterItem when filterWord is test', () => {
+    const filterItems = { test: { checked: true } };
+    (component as any)._filteredItems = filterItems;
+    (component as any)._extendFilteredItem('test');
+    expect('test' in component.setItems).toBeTruthy();
+  });
+
+  it('should filterCheckboxList with setItems', () => {
+    component.setItems = [
+      { AAA: {}, checked: true },
+      { BBB: {}, checked: true },
+    ];
+    const compAnonym = component as any;
+    compAnonym._params = { filterChangedCallback() {} };
+    component.filterCheckboxList('X');
+    const filteredItem = compAnonym._filteredItems[0];
+    expect(filteredItem).toEqual({ AAA: {}, checked: true });
+  });
+
+  it('should set selectAllChecked false is an non-empty filter text is provided', () => {
+    component.setItems = [
+      { AAA: {}, checked: true },
+      { BBB: {}, checked: true },
+    ];
+    const compAnonym = component as any;
+    compAnonym._params = { filterChangedCallback() {} };
+    component.filterText = 'Test';
+    component.filterCheckboxList('X');
+    expect(component.selectAllChecked).toBeFalsy();
+  });
+
+  it('should add filtered filterItem to the filterModel in _addItemToFilterModel()', () => {
+    const compAnonym = component as any;
+    compAnonym.filterText = 'Filter';
+    compAnonym._addItemToFilterModel({}, 'FilterText');
+    expect(compAnonym.setItems).toBeDefined();
+    expect(compAnonym.setItems['FilterText']).toBeDefined();
+  });
+
+  it('should add a checked filtered filterItem to the filterModel in _addItemToFilterModel()', () => {
+    const oldFilterItems = {};
+    const compAnonym = component as any;
+    compAnonym.filterText = 'Filter';
+    compAnonym._addItemToFilterModel(oldFilterItems, 'FilterText');
+    expect(compAnonym.setItems).toBeDefined();
+    expect(compAnonym.setItems['FilterText']).toBeDefined();
+    expect(compAnonym.setItems['FilterText']['checked']).toBeTruthy();
+  });
+
+  it('should add a checked filterItem to the filterModel in _addItemToFilterModel()', () => {
+    const oldFilterItems = {
+      FilterText: {
+        checked: true,
+      },
+    };
+    const compAnonym = component as any;
+    compAnonym.filterText = '';
+    compAnonym._addItemToFilterModel(oldFilterItems, 'FilterText');
+    expect(compAnonym.setItems).toBeDefined();
+    expect(compAnonym.setItems['FilterText']).toBeDefined();
+    expect(compAnonym.setItems['FilterText']['checked']).toBeTruthy();
+  });
+
+  it('should setItems in response to filteredItems', () => {
+    component.setItems = [{ BBB: {}, checked: false }];
+    component['_filteredItem'] = [{ BBB: {}, checked: true }];
+    const compAnonym = component as any;
+    compAnonym._params = { filterChangedCallback() {} };
+    component.filterCheckboxList('B');
+    expect(component.setItems['BBB']).toEqual(component['_filteredItem']['BBB']);
+  });
+
+  it('should return isFilterActive', () => {
+    component.setItems = [{ checked: true }, { checked: true }];
+    expect(component.isFilterActive()).toBeFalsy();
+  });
+
+  it('should return model', () => {
+    component.setItems = 666;
+    expect(component.getModel().values).toBe(666);
+  });
+
+  it('should set model 1', () => {
+    component.setItems = 666;
+    component.setModel(null);
+    expect(component.setItems).toEqual([]);
+  });
+
+  it('should set model 2', () => {
+    component.setItems = 666;
+    component.setModel({ values: 333 });
+    expect(component.setItems).toEqual(333);
+  });
+
+  it('should set checked of setItems via notifyFilter (checked true)', () => {
+    component['_params'] = { filterChangedCallback() {} } as any;
+    component.setItems = { null: { checked: false } };
+    const event = { target: { id: 'null', checked: true } } as any;
+    component.notifyFilter(event);
+    expect(component.setItems.null.checked).toBeTruthy();
+  });
+
+  it('should set checked of setItems via notifyFilter (checked false)', () => {
+    component['_params'] = { filterChangedCallback() {} } as any;
+    component.setItems = { null: { checked: false } };
+    const event = { target: { id: 'null', checked: false } } as any;
+    component.notifyFilter(event);
+    expect(component.setItems.null.checked).toBeFalsy();
+  });
+
+  it('should set selectAllChecked false if filterText is empty', () => {
+    component['_params'] = { filterChangedCallback() {} } as any;
+    component.setItems = { null: { checked: false } };
+    component.filterText = '';
+    const event = { target: { id: 'null', checked: true } } as any;
+    component.notifyFilter(event);
+    expect(component.selectAllChecked).toBeFalsy();
+  });
+
+  it('should selectAll via selectAll with given event', () => {
+    component['_params'] = { filterChangedCallback() {} } as any;
+    component.setItems = { null: { checked: false } };
+    const event = { target: { id: 'null', checked: true } } as any;
+    component.selectAll(event);
+    expect(component.selectAllChecked).toBeTruthy();
+  });
+
+  it('should selectAll via selectAll without a given event', () => {
+    component['_params'] = { filterChangedCallback() {} } as any;
+    component.setItems = { null: { checked: false } };
+    component.selectAll();
+    expect(component.selectAllChecked).toBeTruthy();
+  });
+
+  it('should not pass filter for undefined setItems', () => {
+    const params = { node: 'x' } as any;
+    component['_valueGetter'] = () => {};
+    const returnValue = component.doesFilterPass(params);
+    expect(returnValue).toBeFalsy();
+  });
+
+  it('should not pass filter for itemKey null', () => {
+    const params = { node: '' } as any;
+    component['_valueGetter'] = () => params.node;
+    component.setItems = { null: { checked: false } };
+    const returnValue = component.doesFilterPass(params);
+    expect(returnValue).toBeFalsy();
+  });
+
+  it('should return true after calling doesFilterPass(..) with filter 50 and node value 50 ', () => {
+    component['_valueGetter'] = () => 50;
+    component.setItems = { 50: { checked: true } };
+    const returnValue = component.doesFilterPass({} as any);
+    expect(returnValue).toBeTruthy();
+  });
+
+  it('should return false after calling doesFilterPass(..) with filter 50 and node value 666 ', () => {
+    component['_valueGetter'] = () => 666;
+    component.setItems = { 50: { checked: true } };
+    const returnValue = component.doesFilterPass({} as any);
+    expect(returnValue).toBeFalsy();
+  });
+
+  it('should return false after calling doesFilterPass(..) with filter "oncle" and node value "tom" ', () => {
+    component['_valueGetter'] = () => 'tom';
+    component.setItems = { oncle: { checked: true } };
+    const returnValue = component.doesFilterPass({} as any);
+    expect(returnValue).toBeFalsy();
+  });
+
+  it('should return true after calling doesFilterPass(..) with filter "oncle" and node value "oncle" ', () => {
+    component['_valueGetter'] = () => 'oncle';
+    component.setItems = { oncle: { checked: true } };
+    const returnValue = component.doesFilterPass({} as any);
+    expect(returnValue).toBeTruthy();
+  });
+
+  it('should return true after calling doesFilterPass(..) with filter "oncle" and node value "oncle tom" ', () => {
+    component['_valueGetter'] = () => 'oncle tom';
+    component.setItems = { oncle: { checked: true } };
+    const returnValue = component.doesFilterPass({} as any);
+    expect(returnValue).toBeTruthy();
+  });
+
+  it('should set params via agInit()', () => {
+    const params: any = {
+      node: 'x',
+      colDef: {
+        colId: 'testColId',
+      },
+      rowModel: {
+        nodeManager: {
+          allNodesMap: {
+            0: { id: '0' },
+            1: { id: '1' },
+          },
+        },
+      },
+      doesRowPassOtherFilter() {},
+      filterChangedCallback() {},
+      api: {
+        getModel() {
+          return {
+            rowsToDisplay: {
+              map: () => {
+                return ['Störung'];
+              },
+            },
+          };
+        },
+        gridOptionsWrapper: {
+          gridOptions: {
+            onGridSizeChanged: () => {},
+            onRowDataChanged: () => {},
+          },
+        },
+      },
+    } as any;
+    component['_valueGetter'] = () => {
+      return { id: '0' };
+    };
+    component.agInit(params);
+    expect(component['_params']).toEqual(params as any);
+  });
+
+  it('should setFilterItems via afterGuiAttached', () => {
+    const spy = spyOn(component as any, '_setFilterItems');
+    component.afterGuiAttached('x');
+    expect(spy).toHaveBeenCalled();
+  });
+
+  it('should return false in _areAllFilterItemsSelected() when filter textbox is not empty', () => {
+    component.filterText = '0815';
+    const allFilterItemsSelected: boolean = (component as any)._areAllFilterItemsSelected();
+    expect(allFilterItemsSelected).toBe(false);
+  });
+});
diff --git a/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/fuzzy-set-filter/fuzzy-set-filter.component.ts b/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/fuzzy-set-filter/fuzzy-set-filter.component.ts
new file mode 100644
index 0000000..325a7bc
--- /dev/null
+++ b/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/fuzzy-set-filter/fuzzy-set-filter.component.ts
@@ -0,0 +1,47 @@
+/********************************************************************************
+ * 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 { Component, OnInit } from '@angular/core';
+import { IDoesFilterPassParams, IFilterParams, RowDataChangedEvent, RowNode } from 'ag-grid-community';
+import { SetFilterComponent } from '@grid-failure-information-app/shared/filters/ag-grid/set-filter/set-filter.component';
+
+@Component({
+  selector: 'fuzzy-filter-cell',
+  templateUrl: './fuzzy-set-filter.component.html',
+  styleUrls: ['./fuzzy-set-filter.component.css'],
+})
+export class FuzzySetFilterComponent extends SetFilterComponent {
+  doesFilterPass(params: IDoesFilterPassParams): boolean {
+    const nodeValue = this._valueGetter(params.node);
+    let passed: boolean = false;
+
+    for (let itemKey in this.setItems) {
+      if (isNaN(nodeValue)) {
+        if (itemKey === 'null') {
+          passed = !nodeValue || nodeValue === ''; // nodeValue is falsy or empty string
+        } else {
+          passed = !!nodeValue && nodeValue.includes(itemKey);
+        }
+      } else {
+        // is numeric or null
+        if (!nodeValue) {
+          passed = nodeValue === null && itemKey === 'null';
+        } else {
+          passed = nodeValue.toString() === itemKey;
+        }
+      }
+      passed = passed && this.setItems[itemKey].checked;
+      if (passed) return passed;
+    }
+    return passed;
+  }
+}
diff --git a/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/set-filter/set-filter.component.spec.ts b/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/set-filter/set-filter.component.spec.ts
index 1098295..b0489df 100644
--- a/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/set-filter/set-filter.component.spec.ts
+++ b/projects/grid-failure-information-app/src/app/shared/filters/ag-grid/set-filter/set-filter.component.spec.ts
@@ -243,7 +243,7 @@
     component['_valueGetter'] = () => 'oncle tom';
     component.setItems = { oncle: { checked: true } };
     const returnValue = component.doesFilterPass({} as any);
-    expect(returnValue).toBeTruthy();
+    expect(returnValue).toBeFalsy();
   });
 
   it('should set params via agInit()', () => {
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 6bdc12b..ea0f137 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
@@ -32,7 +32,7 @@
 
   private _filteredItems: any = {};
   private _params: IFilterParams;
-  private _valueGetter: (rowNode: RowNode) => any;
+  protected _valueGetter: (rowNode: RowNode) => any;
   private _filterId: string = '';
 
   protected _endSubscriptions$: Subject<boolean> = new Subject();
@@ -43,22 +43,25 @@
       .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, filterWord)) {
+            if (this._contains(itemKey, trimmedFilterWord)) {
+              // filtertext is in itemKey ??
+              this._extendFilteredItem(trimmedFilterWord);
+            } else {
               this._filteredItems[itemKey] = this.setItems[itemKey];
               delete this.setItems[itemKey];
-            } else {
-              this._extendFilteredItem(filterWord);
             }
           }
         } else {
-          this._extendFilteredItem(filterWord);
+          this._extendFilteredItem(trimmedFilterWord);
         }
-        if (this.filterText.length !== 0) {
-          this.selectAllChecked = false;
-        } else {
+        if (this.filterText.length === 0) {
           this.selectAll();
+        } else {
+          this.selectAllChecked = false;
         }
       });
     this._params.filterChangedCallback();
@@ -90,28 +93,8 @@
   }
 
   doesFilterPass(params: IDoesFilterPassParams): boolean {
-    const nodeValue = this._valueGetter(params.node);
-    let passed: boolean = false;
-
-    for (let itemKey in this.setItems) {
-      if (isNaN(nodeValue)) {
-        if (itemKey === 'null') {
-          passed = !nodeValue || nodeValue === ''; // nodeValue is falsy or empty string
-        } else {
-          passed = !!nodeValue && nodeValue.includes(itemKey);
-        }
-      } else {
-        // is numeric or null
-        if (!nodeValue) {
-          passed = nodeValue === null && itemKey === 'null';
-        } else {
-          passed = nodeValue.toString() === itemKey;
-        }
-      }
-      passed = passed && this.setItems[itemKey].checked;
-      if (passed) return passed;
-    }
-    return passed;
+    const itemKey = this._valueGetter(params.node);
+    return this.setItems[itemKey || null] !== undefined && this.setItems[itemKey || null].checked;
   }
 
   getModel(): any {
diff --git a/projects/grid-failure-information-app/src/app/shared/filters/filters.module.ts b/projects/grid-failure-information-app/src/app/shared/filters/filters.module.ts
index dd6cf57..6eaed20 100644
--- a/projects/grid-failure-information-app/src/app/shared/filters/filters.module.ts
+++ b/projects/grid-failure-information-app/src/app/shared/filters/filters.module.ts
@@ -15,9 +15,10 @@
 import { CommonModule } from '@angular/common';
 import { TranslateModule } from '@ngx-translate/core';
 import { FormsModule } from '@angular/forms';
+import { FuzzySetFilterComponent } from '@grid-failure-information-app/shared/filters/ag-grid/fuzzy-set-filter/fuzzy-set-filter.component';
 
 @NgModule({
-  declarations: [SetFilterComponent],
+  declarations: [SetFilterComponent, FuzzySetFilterComponent],
   exports: [SetFilterComponent],
   imports: [FormsModule, CommonModule, TranslateModule],
 })
