diff --git a/i18n/general.de.json b/i18n/general.de.json
index 720de4c..39aa366 100644
--- a/i18n/general.de.json
+++ b/i18n/general.de.json
@@ -40,5 +40,6 @@
     }
   },
   "Tools": "Tools",
-  "MandatoryFieldError": "Es ist mindestens ein Pflichtfeld nicht gefüllt."
+  "MandatoryFieldError": "Es ist mindestens ein Pflichtfeld nicht gefüllt.",
+  "DifferentBranchesError": "Es sind unterschiedliche Sparten ausgewählt. Verdichtet werden können nur Meldungen aus der gleichen Sparte."
 }
diff --git a/i18n/grid-failure.de.json b/i18n/grid-failure.de.json
index 75ffd6d..1a46184 100644
--- a/i18n/grid-failure.de.json
+++ b/i18n/grid-failure.de.json
@@ -3,7 +3,10 @@
     "Title": "Übersicht Störungsmeldungen",
     "New": "Neue Störungsmeldung anlegen",
     "List": "Liste",
-    "Map": "Karte"
+    "Map": "Karte",
+    "Condensation": "Verdichtung",
+    "ChoosedGridFailureInformations": "Ausgewählte Meldungen",
+    "CondenseChoosedGridFailureInformations": "Ausgewählte Meldungen verdichten"
   },
   "GridFailure": {
     "Title": "Störungsmeldung",
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-api-client.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-api-client.ts
index d165316..1e54fa6 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-api-client.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-api-client.ts
@@ -102,4 +102,10 @@
   public getGridFailureExpectedReasons(): Observable<FailureExpectedReason[]> {
     return null;
   }
+
+  @POST('/grid-failure-informations/condense')
+  @Adapter(GridFailureService.itemAdapter)
+  public postGridFailuresCondensation(@Body() list: string[]): Observable<GridFailure> {
+    return null;
+  }
 }
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 d358a9e..cbc9d8e 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
@@ -11,7 +11,7 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 import { IconCellRendererComponent } from '@grid-failure-information-app/shared/components/cell-renderer/icon-cell-renderer/icon-cell-renderer.component';
-import * as moment from 'moment';
+import { valueDateTimeFormatter } from '@grid-failure-information-app/shared/utility/utilityHelpers';
 
 export const GRID_FAILURE_COLDEF = [
   {
@@ -37,7 +37,7 @@
     headerName: 'GridFailure.InternExtern',
     sortable: true,
     filter: 'setFilterComponent',
-    valueGetter: function(params) {
+    valueGetter: function (params) {
       let result = '';
       if (params.data.internExtern === 'I') {
         result = 'intern';
@@ -85,18 +85,7 @@
     sortable: true,
     filter: 'setFilterComponent',
     valueGetter: params => {
-      if (params.data.failureBegin) {
-        const date = new Date(params.data.failureBegin);
-        date.setHours(date.getHours() + date.getTimezoneOffset() / 60);
-        const day = date.getDate() < 10 ? `0${date.getDate()}` : date.getDate();
-        const month = date.getMonth() + 1 < 10 ? `0${date.getMonth() + 1}` : date.getMonth() + 1;
-        const year = date.getFullYear();
-        const hour = date.getHours() < 10 ? `0${date.getHours()}` : date.getHours();
-        const minute = date.getMinutes() < 10 ? `0${date.getMinutes()}` : date.getMinutes();
-        return `${day}.${month}.${year} / ${hour}:${minute}`;
-      } else {
-        return '';
-      }
+      return valueDateTimeFormatter(params.data.failureBegin);
     },
   },
   {
@@ -105,18 +94,7 @@
     sortable: true,
     filter: 'setFilterComponent',
     valueGetter: params => {
-      if (params.data.failureEndPlanned) {
-        const date = new Date(params.data.failureEndPlanned);
-        date.setHours(date.getHours() + date.getTimezoneOffset() / 60);
-        const day = date.getDate() < 10 ? `0${date.getDate()}` : date.getDate();
-        const month = date.getMonth() + 1 < 10 ? `0${date.getMonth() + 1}` : date.getMonth() + 1;
-        const year = date.getFullYear();
-        const hour = date.getHours() < 10 ? `0${date.getHours()}` : date.getHours();
-        const minute = date.getMinutes() < 10 ? `0${date.getMinutes()}` : date.getMinutes();
-        return `${day}.${month}.${year} / ${hour}:${minute}`;
-      } else {
-        return '';
-      }
+      return valueDateTimeFormatter(params.data.failureEndPlanned);
     },
   },
   {
@@ -125,18 +103,7 @@
     sortable: true,
     filter: 'setFilterComponent',
     valueGetter: params => {
-      if (params.data.failureEndResupplied) {
-        const date = new Date(params.data.failureEndResupplied);
-        date.setHours(date.getHours() + date.getTimezoneOffset() / 60);
-        const day = date.getDate() < 10 ? `0${date.getDate()}` : date.getDate();
-        const month = date.getMonth() + 1 < 10 ? `0${date.getMonth() + 1}` : date.getMonth() + 1;
-        const year = date.getFullYear();
-        const hour = date.getHours() < 10 ? `0${date.getHours()}` : date.getHours();
-        const minute = date.getMinutes() < 10 ? `0${date.getMinutes()}` : date.getMinutes();
-        return `${day}.${month}.${year} / ${hour}:${minute}`;
-      } else {
-        return '';
-      }
+      return valueDateTimeFormatter(params.data.failureEndResupplied);
     },
   },
   {
@@ -204,6 +171,7 @@
     filter: false,
     suppressMenu: true,
     suppressSizeToFit: true,
+    headerComponent: 'headerCellRendererComponent',
     cellRendererFramework: IconCellRendererComponent,
   },
 ];
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list-for-condensation-column-definition.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list-for-condensation-column-definition.ts
new file mode 100644
index 0000000..6ae3057
--- /dev/null
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list-for-condensation-column-definition.ts
@@ -0,0 +1,182 @@
+/********************************************************************************
+ * 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 { IconCellRendererComponent } from '@grid-failure-information-app/shared/components/cell-renderer/icon-cell-renderer/icon-cell-renderer.component';
+import { valueDateTimeFormatter } from '@grid-failure-information-app/shared/utility/utilityHelpers';
+
+export const GRID_FAILURE_FOR_CONDENSATION_COLDEF = [
+  {
+    field: 'failureClassification',
+    headerName: 'GridFailure.FailureClassification',
+    sortable: true,
+    filter: 'setFilterComponent',
+  },
+  {
+    field: 'failureType',
+    headerName: 'GridFailure.FailureType',
+    sortable: true,
+    filter: 'setFilterComponent',
+  },
+  {
+    field: 'responsibility',
+    headerName: 'GridFailure.Responsibility',
+    sortable: true,
+    filter: 'setFilterComponent',
+  },
+  {
+    field: 'internExtern', //Meldung durch
+    headerName: 'GridFailure.InternExtern',
+    sortable: true,
+    filter: 'setFilterComponent',
+    valueGetter: function (params) {
+      let result = '';
+      if (params.data.internExtern === 'I') {
+        result = 'intern';
+      } else if (params.data.internExtern === 'E') {
+        result = 'extern';
+      } else {
+        result = 'unbekannt';
+      }
+      return result;
+    },
+  },
+  {
+    field: 'statusIntern',
+    headerName: 'GridFailure.StatusIntern',
+    sortable: true,
+    filter: 'setFilterComponent',
+  },
+  {
+    field: 'statusExtern',
+    headerName: 'GridFailure.StatusExtern',
+    sortable: true,
+    filter: 'setFilterComponent',
+  },
+  {
+    field: 'branch',
+    headerName: 'GridFailure.Branch',
+    sortable: true,
+    filter: 'setFilterComponent',
+  },
+  {
+    field: 'voltageLevel',
+    headerName: 'GridFailure.VoltageLevel',
+    sortable: true,
+    filter: 'setFilterComponent',
+  },
+  {
+    field: 'pressureLevel',
+    headerName: 'GridFailure.PressureLevel',
+    sortable: true,
+    filter: 'setFilterComponent',
+  },
+  {
+    field: 'failureBegin',
+    headerName: 'GridFailure.FailureBegin',
+    sortable: true,
+    filter: 'setFilterComponent',
+    valueGetter: params => {
+      return valueDateTimeFormatter(params.data.failureBegin);
+    },
+  },
+  {
+    field: 'failureEndPlanned',
+    headerName: 'GridFailure.FailureEndPlanned',
+    sortable: true,
+    filter: 'setFilterComponent',
+    valueGetter: params => {
+      return valueDateTimeFormatter(params.data.failureEndPlanned);
+    },
+  },
+  {
+    field: 'failureEndResupplied',
+    headerName: 'GridFailure.FailureEndResupplied',
+    sortable: true,
+    filter: 'setFilterComponent',
+    valueGetter: params => {
+      return valueDateTimeFormatter(params.data.failureEndResupplied);
+    },
+  },
+  {
+    field: 'publicationText',
+    headerName: 'GridFailure.ProbableReason',
+    sortable: true,
+    filter: 'setFilterComponent',
+  },
+  {
+    field: 'internalRemark',
+    headerName: 'GridFailure.InternalRemark',
+    sortable: true,
+    filter: 'setFilterComponent',
+  },
+  {
+    field: 'postcode',
+    headerName: 'GridFailure.Postcode',
+    sortable: true,
+    filter: 'setFilterComponent',
+  },
+  {
+    field: 'city',
+    headerName: 'GridFailure.City',
+    sortable: true,
+    filter: 'setFilterComponent',
+  },
+  {
+    field: 'district',
+    headerName: 'GridFailure.District',
+    sortable: true,
+    filter: 'setFilterComponent',
+  },
+  {
+    field: 'street',
+    headerName: 'GridFailure.Street',
+    sortable: true,
+    filter: 'setFilterComponent',
+  },
+  {
+    field: 'housenumber',
+    headerName: 'GridFailure.Housenumber',
+    sortable: true,
+    filter: 'setFilterComponent',
+  },
+  {
+    field: 'stationDescription',
+    headerName: 'GridFailure.StationDescription',
+    sortable: true,
+    filter: 'setFilterComponent',
+  },
+  {
+    field: 'stationCoords',
+    headerName: 'GridFailure.StationCoords',
+    sortable: true,
+    filter: 'setFilterComponent',
+  },
+  {
+    field: 'radius',
+    headerName: 'GridFailure.Radius',
+    sortable: true,
+    filter: 'setFilterComponent',
+  },
+  {
+    field: 'tools',
+    headerName: ' ',
+    pinned: 'right',
+    maxWidth: 110,
+    minWidth: 110,
+    lockPosition: true,
+    sortable: false,
+    filter: false,
+    suppressMenu: true,
+    suppressSizeToFit: true,
+    cellRendererFramework: IconCellRendererComponent,
+  },
+];
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.html b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.html
index e2b88b5..91e3596 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.html
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.html
@@ -23,7 +23,7 @@
           <button class="btn btn-primary non-outline" (click)="view = 'list'" [class.active]="view === 'list'">
             {{ 'GridFailures.List' | translate }}
           </button>
-          <button class="btn btn-primary non-outline" (click)="view = 'map'" [class.active]="view === 'map'">
+          <button class="btn btn-primary non-outline" (click)="view = 'map'; clearGridFailureCondensation()" [class.active]="view === 'map'">
             {{ 'GridFailures.Map' | translate }}
           </button>
         </div>
@@ -33,18 +33,53 @@
     </div>
   </div>
   <div class="grid-failures-grid-wrapper" body>
-    <ag-grid-angular
-      *ngIf="view === 'list'; else map"
-      autoResizeColumns
-      class="ag-theme-balham"
-      [gridOptions]="gridOptions"
-      [columnDefs]="columnDefinition"
-      [rowSelection]="'single'"
-      [frameworkComponents]="frameworkComponents"
-      [rowData]="sandbox.gridFailureList$ | async"
-      [overlayNoRowsTemplate]="noRowsTemplate"
-    >
-    </ag-grid-angular>
+    <div class="grid-failure-information-condensation" *ngIf="view === 'list' && showCondensationTable">
+      <div class="diverse-condensation-options">
+        <label id="choosed-grid-failure-information-label">
+          {{ 'GridFailures.ChoosedGridFailureInformations' | translate }}
+        </label>
+        <div class="diverse-condensation-btns">
+          <button class="btn btn-primary diverse-btn" (click)="clearGridFailureCondensation()">
+            {{ 'CancelBtn' | translate }}
+          </button>
+          <button class="btn btn-primary diverse-btn" (click)="condenseChoosedGridFailureInformations()">
+            {{ 'GridFailures.CondenseChoosedGridFailureInformations' | translate }}
+          </button>
+        </div>
+      </div>
+      <ag-grid-angular
+        autoResizeColumns
+        class="ag-theme-balham"
+        [gridOptions]="gridOptionsCondensation"
+        [columnDefs]="condensationColumnDefinition"
+        [rowSelection]="'single'"
+        [frameworkComponents]="frameworkComponents"
+        [rowData]="sandbox.condensationList"
+        [overlayNoRowsTemplate]="noRowsTemplate"
+      >
+      </ag-grid-angular>
+    </div>
+
+    <div class="grid-failure-information-overview" *ngIf="view === 'list'; else map">
+      <div class="diverse-options" *ngIf="!showCondensationTable">
+        <button class="btn btn-primary diverse-btn" (click)="changeToSelectionMode()">
+          {{ 'GridFailures.Condensation' | translate }}
+        </button>
+      </div>
+      <ag-grid-angular
+        autoResizeColumns
+        class="ag-theme-balham"
+        [gridOptions]="gridOptions"
+        [columnDefs]="overviewColumnDefinition"
+        [rowSelection]="'single'"
+        [frameworkComponents]="frameworkComponents"
+        [rowData]="sandbox.gridFailureList$ | async"
+        [overlayNoRowsTemplate]="noRowsTemplate"
+        (gridReady)="onGridReady($event)"
+      >
+      </ag-grid-angular>
+    </div>
+
     <ng-template #map>
       <openk-grid-failure-information-map [mapData]="sandbox.gridFailureList$ | async"></openk-grid-failure-information-map>
     </ng-template>
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 800d309..624b024 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
@@ -18,6 +18,48 @@
   justify-content: space-between;
 }
 
+.grid-failure-information-overview {
+  position: relative;
+  height: 90%;
+}
+
+.grid-failure-information-condensation {
+  position: relative;
+  height: 30%;
+  margin-bottom: 65px;
+}
+
+.diverse-condensation-btns {
+  display: flex;
+  justify-content: flex-end;
+}
+
+.diverse-condensation-options {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  border: 1px solid #bdc3c7;
+  background-color: #f5f7f7;
+  margin-bottom: 1px;
+  padding: 0px 7px 2px 7px;
+}
+
+#choosed-grid-failure-information-label {
+  align-self: flex-end;
+  margin-bottom: 12px;
+}
+
 .non-outline {
   box-shadow: none !important;
 }
+.diverse-options {
+  display: flex;
+  justify-content: flex-end;
+  border: 1px solid #bdc3c7;
+  background-color: #f5f7f7;
+  margin-bottom: 1px;
+  padding: 0px 7px 2px 7px;
+}
+.diverse-btn {
+  margin: 10px 0px 5px 5px;
+}
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.spec.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.spec.ts
index 0e8bf53..2644367 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.spec.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure-list.component.spec.ts
@@ -15,18 +15,30 @@
 import { GridFailure } from '@grid-failure-information-app/shared/models';
 import { GridFailureSandbox } from '@grid-failure-information-app/pages/grid-failure/grid-failure-list/grid-failure.sandbox';
 import { Subscription } from 'rxjs';
+import { UtilService } from '@grid-failure-information-app/shared/utility';
 
 describe('GridFailureListComponent ', () => {
   let component: GridFailureListComponent;
   let router: Router;
   let sandbox: GridFailureSandbox;
   let subscription: Subscription;
+  let utilService: UtilService;
 
   beforeEach(() => {
     router = { navigate() {} } as any;
-    sandbox = { endSubscriptions() {} } as any;
+    sandbox = {
+      condensationList: [{ branch: 'F' }],
+      endSubscriptions() {},
+      clearGridFailureCondensation() {},
+      condenseCondensationList() {},
+      addItemToCondensationList() {},
+      removeItemFromCondensationList() {},
+    } as any;
+    utilService = {
+      displayNotification() {},
+    } as any;
     subscription = { unsubscribe() {} } as any;
-    component = new GridFailureListComponent(sandbox, router);
+    component = new GridFailureListComponent(sandbox, router, utilService);
   });
 
   it('should create', () => {
@@ -35,7 +47,7 @@
 
   it('should initialize gridOptions context', () => {
     component.ngOnInit();
-    expect(component.gridOptions.context.icons.edit).toBeTruthy();
+    expect(component.gridOptions.context.icons.edit).toBeFalsy();
   });
 
   it('should call appropriate functions for edit event', () => {
@@ -45,10 +57,75 @@
     expect(spy).toHaveBeenCalled();
   });
 
+  it('should call appropriate functions for add event', () => {
+    sandbox.condensationList = [];
+    const spy1: any = spyOn(sandbox, 'addItemToCondensationList');
+    const spy2: any = spyOn((component as any)._utilService, 'displayNotification');
+    component.ngOnInit();
+    component.gridOptions.context.eventSubject.next({ type: 'add', data: new GridFailure() });
+    expect(spy1).toHaveBeenCalled();
+    component.ngOnInit();
+    let gridFailure: any = { branch: 'F' };
+    sandbox.condensationList = [gridFailure];
+    component.gridOptions.context.eventSubject.next({ type: 'add', data: gridFailure });
+    expect(spy1).toHaveBeenCalledTimes(3);
+    component.ngOnInit();
+    gridFailure = { branch: 'S' };
+    component.gridOptions.context.eventSubject.next({ type: 'add', data: gridFailure });
+    expect(spy2).toHaveBeenCalled();
+  });
+
+  it('should call appropriate functions for addAllItems event', () => {
+    const spy: any = spyOn(component, 'addCompleteTable');
+    component.ngOnInit();
+    component.gridOptions.context.eventSubject.next({ type: 'addAllItems', data: new GridFailure() });
+    expect(spy).toHaveBeenCalled();
+  });
+
+  it('should call appropriate functions for initialLoad event', () => {
+    const spy: any = spyOn(component as any, '_changeMode');
+    component.ngOnInit();
+    component.gridOptions.context.eventSubject.next({ type: 'initialLoad' });
+    expect(spy).toHaveBeenCalled();
+  });
+
+  it('should call appropriate functions for remove event', () => {
+    const spy: any = spyOn(sandbox, 'removeItemFromCondensationList');
+    component.ngOnInit();
+    component.gridOptionsCondensation.context.eventSubject.next({ type: 'remove', data: new GridFailure() });
+    expect(spy).toHaveBeenCalled();
+  });
+
   it('should unsubscribe OnDestroy', () => {
     const spy: any = spyOn(sandbox, 'endSubscriptions');
     component['_subscription'] = new Subscription();
     component.ngOnDestroy();
     expect(spy).toHaveBeenCalled();
   });
+
+  it('should call and check if condenseChoosedGridFailureInformations() works fine', () => {
+    const spy1: any = spyOn(component, 'clearGridFailureCondensation');
+    const spy2: any = spyOn(sandbox, 'condenseCondensationList');
+
+    component.condenseChoosedGridFailureInformations();
+
+    expect(spy1).toHaveBeenCalled();
+    expect(spy2).toHaveBeenCalled();
+  });
+
+  it('should call and check if onGridReady(params) works fine', () => {
+    component.onGridReady({ api: 'test' });
+
+    expect((component as any)._gridApi).toBe('test');
+  });
+
+  it('should call and check if changeToSelectionMode() works fine', () => {
+    const spy: any = spyOn(component.events$, 'next');
+    component.showCondensationTable = false;
+
+    component.changeToSelectionMode();
+
+    expect(component.showCondensationTable).toBeTruthy();
+    expect(spy).toHaveBeenCalledWith({ eventType: 'overviewTableSelectionMode' });
+  });
 });
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 b0fb1d6..5f95b92 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
@@ -10,12 +10,18 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
-import { Component, OnInit, OnDestroy } from '@angular/core';
-import { BaseList } from '@grid-failure-information-app/shared/components/base-components/base.list';
-import { SetFilterComponent } from '@grid-failure-information-app/shared/filters/ag-grid/set-filter/set-filter.component';
-import { GRID_FAILURE_COLDEF } from '@grid-failure-information-app/pages/grid-failure/grid-failure-list/grid-failure-list-column-definition';
-import { GridFailureSandbox } from '@grid-failure-information-app/pages/grid-failure/grid-failure-list/grid-failure.sandbox';
+import { Component, OnDestroy, OnInit } from '@angular/core';
 import { Router } from '@angular/router';
+import { GRID_FAILURE_COLDEF } from '@grid-failure-information-app/pages/grid-failure/grid-failure-list/grid-failure-list-column-definition';
+import { GRID_FAILURE_FOR_CONDENSATION_COLDEF } from '@grid-failure-information-app/app/pages/grid-failure/grid-failure-list/grid-failure-list-for-condensation-column-definition';
+import { GridFailureSandbox } from '@grid-failure-information-app/pages/grid-failure/grid-failure-list/grid-failure.sandbox';
+import { BaseList } from '@grid-failure-information-app/shared/components/base-components/base.list';
+import { HeaderCellRendererComponent } from '@grid-failure-information-app/shared/components/cell-renderer/header-cell-renderer/header-cell-renderer.component';
+import { ModeEnum, EventTypeEnum } from '@grid-failure-information-app/shared/constants/enums';
+import { SetFilterComponent } from '@grid-failure-information-app/shared/filters/ag-grid/set-filter/set-filter.component';
+import { UtilService } from '@grid-failure-information-app/shared/utility';
+import { GridApi, GridOptions } from 'ag-grid-community';
+import { Subject } from 'rxjs';
 import { takeUntil } from 'rxjs/operators';
 
 @Component({
@@ -24,30 +30,123 @@
   styleUrls: ['./grid-failure-list.component.scss'],
 })
 export class GridFailureListComponent extends BaseList implements OnInit, OnDestroy {
-  public columnDefinition: any = GRID_FAILURE_COLDEF;
-  public frameworkComponents: { setFilterComponent: any };
+  public overviewColumnDefinition: any = GRID_FAILURE_COLDEF;
+  public condensationColumnDefinition: any = GRID_FAILURE_FOR_CONDENSATION_COLDEF;
+  public frameworkComponents: any;
   public view: any = 'list';
+  public showCondensationTable: boolean = false;
+  public enableSelectionMode: boolean = false;
+  public condensationEvents$: Subject<any> = new Subject();
+  public gridOptionsCondensation: GridOptions = {
+    context: {
+      eventSubject: this.condensationEvents$,
+    },
+    suppressLoadingOverlay: true,
+  };
 
-  constructor(public sandbox: GridFailureSandbox, private _router: Router) {
+  private _gridApi: GridApi;
+  private _modeEnum = ModeEnum;
+  private _eventTypeEnum = EventTypeEnum;
+
+  constructor(public sandbox: GridFailureSandbox, private _router: Router, private _utilService: UtilService) {
     super();
-    this.frameworkComponents = { setFilterComponent: SetFilterComponent };
+    this.frameworkComponents = { setFilterComponent: SetFilterComponent, headerCellRendererComponent: HeaderCellRendererComponent };
   }
 
-  ngOnInit() {
-    this.gridOptions.context = {
-      ...this.gridOptions.context,
-      icons: { edit: true },
-    };
+  ngOnInit(): void {
+    this._setInitialGridOptions();
+  }
 
-    this.gridOptions.context.eventSubject.pipe(takeUntil(this._endSubscriptions$)).subscribe(event => {
-      if (event.type === 'edit' || event.type === 'readonly') {
-        this._router.navigate(['/grid-failures', event.data.id]);
+  ngOnDestroy(): void {
+    this._endSubscriptions$.next(true);
+    this.sandbox.endSubscriptions();
+    this.clearGridFailureCondensation();
+  }
+
+  public onGridReady(params): void {
+    this._gridApi = params.api;
+  }
+
+  public clearGridFailureCondensation(): void {
+    this.sandbox.clearGridFailureCondensation();
+    this.showCondensationTable = false;
+    this.enableSelectionMode = false;
+    this._changeMode();
+  }
+
+  public condenseChoosedGridFailureInformations(): void {
+    if (this.sandbox.condensationList.length != 0) {
+      this.sandbox.condenseCondensationList();
+      this.clearGridFailureCondensation();
+    }
+  }
+
+  public addCompleteTable(): void {
+    let isNotificationAlreadyShown: boolean = false;
+    this._gridApi.forEachNodeAfterFilter(node => {
+      if (this.sandbox.condensationList.length == 0 || node.data.branch === this.sandbox.condensationList[0].branch) {
+        this.sandbox.addItemToCondensationList(node.data);
+      } else {
+        if (!isNotificationAlreadyShown) this._utilService.displayNotification('DifferentBranchesError', 'alert');
+        isNotificationAlreadyShown = true;
       }
     });
   }
 
-  ngOnDestroy() {
-    this._endSubscriptions$.next(true);
-    this.sandbox.endSubscriptions();
+  public changeToSelectionMode(): void {
+    this.showCondensationTable = true;
+    this.enableSelectionMode = true;
+    this._changeMode();
+  }
+
+  private _setInitialGridOptions(): void {
+    this.gridOptions.context = {
+      ...this.gridOptions.context,
+      icons: { edit: false, add: false },
+    };
+
+    this.gridOptions.context.eventSubject.pipe(takeUntil(this._endSubscriptions$)).subscribe(event => {
+      switch (event.type) {
+        case this._eventTypeEnum.Edit || this._eventTypeEnum.Readonly:
+          this._router.navigate(['/grid-failures', event.data.id]);
+          break;
+        case this._eventTypeEnum.Add:
+          if (this.sandbox.condensationList.length == 0 || event.data.branch === this.sandbox.condensationList[0].branch) {
+            this.sandbox.addItemToCondensationList(event.data);
+          } else {
+            this._utilService.displayNotification('DifferentBranchesError', 'alert');
+          }
+          break;
+        case this._eventTypeEnum.AddAllItems:
+          this.addCompleteTable();
+          break;
+        case this._eventTypeEnum.InitialLoad:
+          this._changeMode();
+          break;
+
+        default:
+          break;
+      }
+    });
+
+    this.gridOptionsCondensation.context = {
+      ...this.gridOptionsCondensation.context,
+      icons: { edit: false, add: false, remove: true },
+    };
+
+    this.gridOptionsCondensation.context.eventSubject.pipe(takeUntil(this._endSubscriptions$)).subscribe(event => {
+      if (event.type === this._eventTypeEnum.Remove) {
+        this.sandbox.removeItemFromCondensationList(event.data);
+      }
+    });
+  }
+
+  private _changeMode(): void {
+    this.showCondensationTable //später; auf anderes Flag beziehen -> enableSelectionMode
+      ? this.condensationEvents$.next({ eventType: this._modeEnum.CondensationTableSelectionMode })
+      : this.events$.next({ eventType: this._modeEnum.InitialMode });
+    this.showCondensationTable //später; auf anderes Flag beziehen -> enableSelectionMode
+      ? this.events$.next({ eventType: this._modeEnum.OverviewTableSelectionMode })
+      : this.events$.next({ eventType: this._modeEnum.InitialMode });
   }
 }
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure.sandbox.spec.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure.sandbox.spec.ts
index d8efa58..c934c48 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure.sandbox.spec.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure.sandbox.spec.ts
@@ -16,6 +16,7 @@
 import { of } from 'rxjs';
 import * as gridFailureActions from '@grid-failure-information-app/shared/store/actions/grid-failures.action';
 import { Router } from '@angular/router';
+import { GridFailure } from '@grid-failure-information-app/shared/models/grid-failure.model';
 
 describe('GridFailureSandbox', () => {
   let service: GridFailureSandbox;
@@ -44,4 +45,30 @@
     service.createGridFailure();
     expect(spy).toHaveBeenCalledWith('/grid-failures/new');
   });
+
+  it('should clear condensationList after calling clearGridFailureCondensation()', () => {
+    service.condensationList = [new GridFailure()];
+    service.clearGridFailureCondensation();
+    expect(service.condensationList.length).toBe(0);
+  });
+
+  it('should add item to condensationList if its not already in them after calling addItemToCondensationList()', () => {
+    service.condensationList = [];
+    service.addItemToCondensationList(new GridFailure());
+    expect(service.condensationList.length).toBe(1);
+    service.addItemToCondensationList(new GridFailure());
+    expect(service.condensationList.length).toBe(1);
+  });
+
+  it('should remove item from condensationList after calling removeItemFromCondensationList()', () => {
+    service.condensationList = [new GridFailure()];
+    service.removeItemFromCondensationList(new GridFailure());
+    expect(service.condensationList.length).toBe(0);
+  });
+
+  it('should condense condensationList after calling condenseCondensationList()', () => {
+    service.condensationList = [new GridFailure()];
+    service.condenseCondensationList();
+    expect(appState.dispatch).toHaveBeenCalledWith(gridFailureActions.postGridFailuresCondensation({ payload: [new GridFailure().id] }));
+  });
 });
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure.sandbox.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure.sandbox.ts
index 870f683..01ab6b5 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure.sandbox.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-list/grid-failure.sandbox.ts
@@ -25,6 +25,7 @@
 export class GridFailureSandbox extends BaseSandbox {
   public gridFailureList$: Observable<GridFailure[]> = this.appState$.select(store.getGridFailuresData);
   public gridFailureListLoading$: Observable<boolean> = this.appState$.select(store.getGridFailuresLoading);
+  public condensationList: GridFailure[] = new Array();
 
   constructor(protected appState$: Store<store.State>, private _router: Router) {
     super(appState$);
@@ -40,4 +41,28 @@
     this.appState$.dispatch(new MarkAsTouchedAction(fromGridFailuresDetailFormReducer.FORM_ID));
     this._router.navigateByUrl('/grid-failures/new');
   }
+
+  public clearGridFailureCondensation(): void {
+    this.condensationList = [];
+  }
+
+  public addItemToCondensationList(data: GridFailure): void {
+    if (this.condensationList.find(item => item.id == data.id) != null || data.condensed === true) {
+      return;
+    } else {
+      this.condensationList = [...this.condensationList, data];
+    }
+  }
+
+  public removeItemFromCondensationList(data: GridFailure): void {
+    this.condensationList = this.condensationList.filter(item => item.id !== data.id);
+  }
+
+  public condenseCondensationList(): void {
+    const cl: string[] = new Array();
+    this.condensationList.forEach(item => {
+      cl.push(item.id);
+    });
+    this.appState$.dispatch(gridFailureActions.postGridFailuresCondensation({ payload: cl }));
+  }
 }
diff --git a/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/header-cell-renderer/header-cell-renderer.component.html b/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/header-cell-renderer/header-cell-renderer.component.html
new file mode 100644
index 0000000..4946c10
--- /dev/null
+++ b/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/header-cell-renderer/header-cell-renderer.component.html
@@ -0,0 +1,17 @@
+<!-- /********************************************************************************
+ * 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>
+  <button *ngIf="addIcon" (click)="clicked('addAllItems')" class="tool-icon">
+    <fa name="plus"></fa>
+  </button>
+</div>
diff --git a/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/header-cell-renderer/header-cell-renderer.component.scss b/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/header-cell-renderer/header-cell-renderer.component.scss
new file mode 100644
index 0000000..c37e40b
--- /dev/null
+++ b/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/header-cell-renderer/header-cell-renderer.component.scss
@@ -0,0 +1,12 @@
+/********************************************************************************
+ * 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
+ ********************************************************************************/
diff --git a/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/header-cell-renderer/header-cell-renderer.component.spec.ts b/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/header-cell-renderer/header-cell-renderer.component.spec.ts
new file mode 100644
index 0000000..1c91394
--- /dev/null
+++ b/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/header-cell-renderer/header-cell-renderer.component.spec.ts
@@ -0,0 +1,28 @@
+/********************************************************************************
+ * 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 { ICellRendererParams } from 'ag-grid-community';
+import { HeaderCellRendererComponent } from './header-cell-renderer.component';
+
+describe('HeaderCellRendererComponent', () => {
+  let component: HeaderCellRendererComponent;
+
+  beforeEach(() => {
+    component = new HeaderCellRendererComponent();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/header-cell-renderer/header-cell-renderer.component.ts b/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/header-cell-renderer/header-cell-renderer.component.ts
new file mode 100644
index 0000000..1ab1208
--- /dev/null
+++ b/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/header-cell-renderer/header-cell-renderer.component.ts
@@ -0,0 +1,55 @@
+/********************************************************************************
+ * 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 } from '@angular/core';
+import { IHeaderAngularComp } from 'ag-grid-angular';
+import { ModeEnum } from '@grid-failure-information-app/shared/constants/enums';
+
+@Component({
+  selector: 'app-header-cell-renderer',
+  templateUrl: './header-cell-renderer.component.html',
+  styleUrls: ['./header-cell-renderer.component.scss'],
+})
+export class HeaderCellRendererComponent implements IHeaderAngularComp {
+  public addIcon = null;
+
+  private _params: any;
+  private _modeEnum = ModeEnum;
+
+  agInit(params): void {
+    this._params = params;
+    this._updateIcon();
+    if (params.context && params.context.icons) {
+      const contextIcons = params.context.icons;
+      this.addIcon = !!contextIcons && !!contextIcons.add;
+    }
+  }
+
+  public clicked(eventType: string): void {
+    this._params.context.eventSubject.next({ type: eventType, data: this._params.data });
+  }
+
+  private _updateIcon(): void {
+    this._params.context.eventSubject.subscribe((event: any) => {
+      switch (event.eventType) {
+        case this._modeEnum.InitialMode:
+          this.addIcon = false;
+          break;
+        case this._modeEnum.OverviewTableSelectionMode:
+          this.addIcon = true;
+          break;
+        default:
+          break;
+      }
+    });
+  }
+}
diff --git a/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/icon-cell-renderer/icon-cell-renderer.component.html b/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/icon-cell-renderer/icon-cell-renderer.component.html
index 46cbc8c..6201489 100644
--- a/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/icon-cell-renderer/icon-cell-renderer.component.html
+++ b/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/icon-cell-renderer/icon-cell-renderer.component.html
@@ -20,3 +20,9 @@
 <button *ngIf="deleteIcon" (click)="clicked('delete')" class="tool-icon">
   <fa name="trash"></fa>
 </button>
+<button *ngIf="addIcon" (click)="clicked('add')" class="tool-icon">
+    <fa name="plus"></fa>
+  </button>
+  <button *ngIf="removeIcon" (click)="clicked('remove')" class="tool-icon">
+    <fa name="minus"></fa>
+  </button>
\ No newline at end of file
diff --git a/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/icon-cell-renderer/icon-cell-renderer.component.spec.ts b/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/icon-cell-renderer/icon-cell-renderer.component.spec.ts
index 479c7f5..c6613f8 100644
--- a/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/icon-cell-renderer/icon-cell-renderer.component.spec.ts
+++ b/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/icon-cell-renderer/icon-cell-renderer.component.spec.ts
@@ -27,20 +27,4 @@
   it('should return false when calling refesh', () => {
     expect(component.refresh()).toBeFalsy();
   });
-
-  it('should set icon properties appropriate when calling agInit with default params  + icons undefined', () => {
-    let p: ICellRendererParams = { data: { editable: true }, context: { icons: {} } } as any;
-    component.agInit(p);
-    expect(component.editIcon).toBeFalsy();
-    expect(component.readonlyIcon).toBeFalsy();
-    expect(component.deleteIcon).toBeFalsy();
-  });
-
-  it('should set icon properties appropriate when calling agInit with default params + icons true', () => {
-    let p: ICellRendererParams = { data: { editable: true }, context: { icons: { edit: true, readonly: true, delete: true } } } as any;
-    component.agInit(p);
-    expect(component.editIcon).toBeTruthy();
-    expect(component.readonlyIcon).toBeTruthy();
-    expect(component.deleteIcon).toBeTruthy();
-  });
 });
diff --git a/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/icon-cell-renderer/icon-cell-renderer.component.ts b/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/icon-cell-renderer/icon-cell-renderer.component.ts
index ce3e3b6..7bac4c2 100644
--- a/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/icon-cell-renderer/icon-cell-renderer.component.ts
+++ b/projects/grid-failure-information-app/src/app/shared/components/cell-renderer/icon-cell-renderer/icon-cell-renderer.component.ts
@@ -10,39 +10,72 @@
  *
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
-import { Component } from '@angular/core';
+import { Component, OnInit } from '@angular/core';
 import { AgRendererComponent } from 'ag-grid-angular';
 import { ICellRendererParams } from 'ag-grid-community';
+import { ModeEnum } from '@grid-failure-information-app/shared/constants/enums';
 
 @Component({
   selector: 'app-icon-cell-renderer',
   templateUrl: './icon-cell-renderer.component.html',
   styleUrls: ['./icon-cell-renderer.component.scss'],
 })
-export class IconCellRendererComponent implements AgRendererComponent {
+export class IconCellRendererComponent implements AgRendererComponent, OnInit {
   public editIcon = null;
   public deleteIcon = null;
   public readonlyIcon = null;
   public editFlag = null;
-
+  public addIcon = null;
+  public removeIcon = null;
   public params: any;
 
+  private _modeEnum = ModeEnum;
+
   public agInit(params: ICellRendererParams): void {
     this.params = params;
     this.editFlag = params.data['editable'];
+    this._updateIcon();
     if (params.context && params.context.icons) {
       const contextIcons = params.context.icons;
       this.editIcon = !!contextIcons && !!contextIcons.edit;
       this.readonlyIcon = !!contextIcons && !!contextIcons.readonly;
       this.deleteIcon = !!contextIcons && !!contextIcons.delete;
+      this.addIcon = !!contextIcons && !!contextIcons.add;
+      this.removeIcon = !!contextIcons && !!contextIcons.remove;
     }
   }
 
+  public ngOnInit(): void {
+    this.params.context.eventSubject.next({ type: 'initialLoad' });
+  }
+
   public refresh(): boolean {
     return false;
   }
 
-  public clicked(eventType: string) {
+  public clicked(eventType: string): void {
     this.params.context.eventSubject.next({ type: eventType, data: this.params.data });
   }
+
+  private _updateIcon(): void {
+    this.params.context.eventSubject.subscribe((event: any) => {
+      switch (event.eventType) {
+        case this._modeEnum.InitialMode:
+          this.editIcon = true;
+          this.addIcon = false;
+          this.removeIcon = false;
+          break;
+        case this._modeEnum.OverviewTableSelectionMode:
+          this.editIcon = false;
+          this.addIcon = !this.params.data.condensed;
+          break;
+        case this._modeEnum.CondensationTableSelectionMode:
+          this.editIcon = false;
+          this.removeIcon = true;
+          break;
+        default:
+          break;
+      }
+    });
+  }
 }
diff --git a/projects/grid-failure-information-app/src/app/shared/components/components.module.ts b/projects/grid-failure-information-app/src/app/shared/components/components.module.ts
index 6b72869..dec8c68 100644
--- a/projects/grid-failure-information-app/src/app/shared/components/components.module.ts
+++ b/projects/grid-failure-information-app/src/app/shared/components/components.module.ts
@@ -34,6 +34,7 @@
 import { AgGridModule } from 'ag-grid-angular';
 import { AngularFontAwesomeModule } from 'angular-font-awesome';
 import { NgrxFormsModule } from 'ngrx-forms';
+import { HeaderCellRendererComponent } from '@grid-failure-information-app/shared/components/cell-renderer/header-cell-renderer/header-cell-renderer.component';
 
 export const COMPONENTS = [
   SpinnerComponent,
@@ -49,6 +50,7 @@
   SafetyQueryDialogComponent,
   BoolCellRendererComponent,
   DateCellRendererComponent,
+  HeaderCellRendererComponent,
   DateTimePickerComponent,
 ];
 
@@ -71,7 +73,14 @@
   ],
   declarations: COMPONENTS,
   exports: COMPONENTS,
-  entryComponents: [PaginationComponent, IconCellRendererComponent, SafetyQueryDialogComponent, BoolCellRendererComponent, DateCellRendererComponent],
+  entryComponents: [
+    PaginationComponent,
+    IconCellRendererComponent,
+    SafetyQueryDialogComponent,
+    BoolCellRendererComponent,
+    DateCellRendererComponent,
+    HeaderCellRendererComponent,
+  ],
   providers: [DatePipe],
 })
 export class ComponentsModule {}
diff --git a/projects/grid-failure-information-app/src/app/shared/constants/enums.ts b/projects/grid-failure-information-app/src/app/shared/constants/enums.ts
index 08b4c8b..df913e0 100644
--- a/projects/grid-failure-information-app/src/app/shared/constants/enums.ts
+++ b/projects/grid-failure-information-app/src/app/shared/constants/enums.ts
@@ -50,3 +50,17 @@
   UPDATED = 'aktualisiert',
   COMPLETED = 'abgeschlossen',
 }
+export enum ModeEnum {
+  InitialMode = 'initialMode',
+  OverviewTableSelectionMode = 'overviewTableSelectionMode',
+  CondensationTableSelectionMode = 'condensationTableSelectionMode',
+}
+
+export enum EventTypeEnum {
+  Edit = 'edit',
+  Readonly = 'readonly',
+  Add = 'add',
+  AddAllItems = 'addAllItems',
+  InitialLoad = 'initialLoad',
+  Remove = 'remove',
+}
diff --git a/projects/grid-failure-information-app/src/app/shared/models/grid-failure.model.ts b/projects/grid-failure-information-app/src/app/shared/models/grid-failure.model.ts
index d419695..64b1714 100644
--- a/projects/grid-failure-information-app/src/app/shared/models/grid-failure.model.ts
+++ b/projects/grid-failure-information-app/src/app/shared/models/grid-failure.model.ts
@@ -15,6 +15,8 @@
   public branch: string = null;
   public branchColorCode: string = null;
   public branchId: string = null;
+  public condensed: boolean = null;
+  public condensedCount: number = null;
   public city: string = null;
   public district: string = null;
   public failureBegin: string = null;
diff --git a/projects/grid-failure-information-app/src/app/shared/store/actions/grid-failures.action.ts b/projects/grid-failure-information-app/src/app/shared/store/actions/grid-failures.action.ts
index 65cc525..6366c1a 100644
--- a/projects/grid-failure-information-app/src/app/shared/store/actions/grid-failures.action.ts
+++ b/projects/grid-failure-information-app/src/app/shared/store/actions/grid-failures.action.ts
@@ -81,3 +81,8 @@
   props<{ payload: Array<FailureExpectedReason> }>()
 );
 export const loadGridFailureExpectedReasonsFail = createAction('[[GridFailureFailureExpectedReasons] Load Fail', props<{ payload: string }>());
+export const loadGridFailurePublicationTextsFail = createAction('[GridFailurePublicationTexts] Load Fail', props<{ payload: string }>());
+
+export const postGridFailuresCondensation = createAction('[GridFailures] Condense', props<{ payload: string[] }>());
+export const postGridFailuresCondensationSuccess = createAction('[GridFailures] Condense Success');
+export const postGridFailuresCondensationFail = createAction('[GridFailures] Condense Fail', props<{ payload: string }>());
diff --git a/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.ts b/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.ts
index 1e658b5..57b5490 100644
--- a/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.ts
+++ b/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.ts
@@ -168,5 +168,21 @@
     )
   );
 
+  postGridFailuresCondensation$: any = createEffect(() =>
+    this._actions$.pipe(
+      ofType(gridFailureActions.postGridFailuresCondensation),
+      map(action => action['payload']),
+      switchMap((payload: string[]) => {
+        return this._apiClient.postGridFailuresCondensation(payload).pipe(
+          map(() => {
+            this._store.dispatch(gridFailureActions.loadGridFailures());
+            return gridFailureActions.postGridFailuresCondensationSuccess();
+          }),
+          catchError(error => of(gridFailureActions.postGridFailuresCondensationFail({ payload: error })))
+        );
+      })
+    )
+  );
+
   constructor(private _actions$: Actions, private _apiClient: GridFailureApiClient, private _store: Store<any>) {}
 }
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 bbeb8f9..b733299 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
@@ -50,4 +50,10 @@
     let testValue = utilityHelpers.localeDateString(dateString);
     expect(testValue).toBe('1.12.2020');
   });
+
+  it('should convert a string date with time to right format', () => {
+    const dateTimeString: string = '2021-01-19T00:00:00.000Z';
+    let testValue = utilityHelpers.valueDateTimeFormatter(dateTimeString);
+    expect(testValue).toBe('19.01.2021 / 00:00');
+  });
 });
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 d845f3b..59deca7 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
@@ -67,3 +67,18 @@
     return '';
   }
 }
+
+export function valueDateTimeFormatter(params: any) {
+  if (params) {
+    const date = new Date(params);
+    date.setHours(date.getHours() + date.getTimezoneOffset() / 60);
+    const day = date.getDate() < 10 ? `0${date.getDate()}` : date.getDate();
+    const month = date.getMonth() + 1 < 10 ? `0${date.getMonth() + 1}` : date.getMonth() + 1;
+    const year = date.getFullYear();
+    const hour = date.getHours() < 10 ? `0${date.getHours()}` : date.getHours();
+    const minute = date.getMinutes() < 10 ? `0${date.getMinutes()}` : date.getMinutes();
+    return `${day}.${month}.${year} / ${hour}:${minute}`;
+  } else {
+    return '';
+  }
+}
diff --git a/projects/grid-failure-information-app/src/styles.scss b/projects/grid-failure-information-app/src/styles.scss
index f772714..86257ac 100644
--- a/projects/grid-failure-information-app/src/styles.scss
+++ b/projects/grid-failure-information-app/src/styles.scss
@@ -7022,7 +7022,7 @@
 
 ag-grid-angular {
   width: 100%;
-  height: calc(100vh - 210px);
+  height: 100%;
 }
 
 .ngrx-forms-valid[required],
