diff --git a/src/app/lists/abstract-list/abstract-list.component.ts b/src/app/lists/abstract-list/abstract-list.component.ts
index df340ac..cd55c43 100644
--- a/src/app/lists/abstract-list/abstract-list.component.ts
+++ b/src/app/lists/abstract-list/abstract-list.component.ts
@@ -37,7 +37,7 @@
   @Input() withDatePicker = true;
   @Input() withEditButtons = true;
   @Input() isCollapsible = true;
-  @Input() stayHidden = true;
+  @Input() stayHidden = true;  
   @Input() gridId: string;
   showSpinner = false;
   globals = Globals;
@@ -52,15 +52,11 @@
   startDate: Date;
   user: User = null;
   collapseStateId: string;
-  pager: any = {};
-  page: any = {};
+
   sortingState: SortingState = new SortingState();
   subscription: any;
-  pagedItems: any[];
 
-  private notificationHistoryExpansionStates: NotificationHistoryExpansionState[] = new Array<NotificationHistoryExpansionState>();
   private subscriptions: Array<any>;
-
   constructor(
     protected messageService: MessageService,
     protected notificationService: NotificationService,
@@ -84,15 +80,6 @@
 
   ngOnInit() {
     this.init();
-  }
-  setPage(page: number) {
-    if (page < 1 || page > this.pager.totalPages) {
-      return;
-    }
-
-    this.pager = this.notificationService.getPager(this.notifications.length, page);
-
-    this.pagedItems = this.notifications.slice(this.pager.startIndex, this.pager.endIndex + 1);
 
   }
   protected init() {
@@ -104,7 +91,7 @@
     if (oldStayHiddenVal != null) {
       this.stayHidden = oldStayHiddenVal;
     }
-
+    
     //Subscriptions
     let subscription: any;
     this.subscriptions = new Array<any>();
@@ -123,7 +110,7 @@
     this.subscriptions.push(subscription);
 
     subscription = this.reminderService.itemChanged$.subscribe(item => this.onItemChanged(item));
-    this.subscriptions.push(subscription);
+    this.subscriptions.push(subscription);  
 
     //Daterangepicker Config
     this.daterangepickerConfig.settings = {
@@ -174,20 +161,15 @@
   protected setNotifications(newNotifications: Notification[]) {
     this.notifications = newNotifications;
     this.defaultList = Object.assign(new Array<Notification>(), newNotifications);
-  
-    this.setPage(1);
     newNotifications.forEach(notification => {
       notification.historyOpen = this.sessionContext.getNotificationHistoryExpansionStateById(notification.incidentId);
       if (notification.historyOpen) {
         this.retrieveNotificationVersions(notification);
       }
     });
-
-
     const sortingState = this.sessionContext.getSortingState(this.gridId);
-    if (!sortingState) {
+    if (!sortingState)
       return;
-    }
 
     this.sortingState = sortingState;
     this.sort(undefined);
@@ -282,7 +264,7 @@
     if (column) {
 
       this.sortingState.isDesc = !this.sortingState.isDesc;
-      if (this.sortingState.column !== undefined && this.sortingState.column !== column) {
+      if (this.sortingState.column !== undefined && this.sortingState.column != column) {
         this.sortingState.counter = 1;
         this.sortingState.isDesc = true;
       } else {
@@ -292,32 +274,36 @@
     }
 
 
-    const direction = this.sortingState.isDesc ? 1 : -1;
+    let direction = this.sortingState.isDesc ? 1 : -1;
 
 
 
-    if (this.sortingState.defaultState && !column || this.sortingState.counter > 0 && this.sortingState.counter % 3 === 0) {
+    if (this.sortingState.defaultState  && !column || this.sortingState.counter > 0 && this.sortingState.counter % 3 == 0) {
       this.sortingState.counter = 0;
       this.notifications = Object.assign(new Array<Notification>(), this.defaultList);
       this.sortingState.defaultState = true;
       this.sortingState.isDesc = false;
-    } else {
+    }
+    else {
       this.sortingState.defaultState = false;
       this.notifications.sort((a, b) => {
 
-        const a1 = this.getColumnValue(this.sortingState.column, a);
-        const b1 = this.getColumnValue(this.sortingState.column, b);
+        var a1  = this.getColumnValue(this.sortingState.column, a);
+        var b1  = this.getColumnValue(this.sortingState.column, b);
 
-        if (a1 == null) {
+        if ( a1 == null) {
           return 1 * direction;
         }
         if (b1 == null) {
           return -1 * direction;
-        } else if (a1 < b1) {
+        }
+        else if (a1 < b1) {
           return -1 * direction;
-        } else if (a1 > b1) {
+        }
+        else if (a1 > b1) {
           return 1 * direction;
-        } else {
+        }
+        else {
           return 0;
         }
       });
@@ -329,17 +315,15 @@
 
     switch (columnName) {
       case 'fkRefBranch':
-        return this.sessionContext.getBrancheById(notification.fkRefBranch) ?
-          this.sessionContext.getBrancheById(notification.fkRefBranch).name.toLowerCase() : null;
+        return this.sessionContext.getBrancheById(notification.fkRefBranch) ? this.sessionContext.getBrancheById(notification.fkRefBranch).name.toLowerCase() : null;
       case 'fkRefNotificationStatus':
-        return this.sessionContext.getStatusById(notification.fkRefNotificationStatus) ?
-          this.sessionContext.getStatusById(notification.fkRefNotificationStatus).name.toLowerCase() : null;
+        return this.sessionContext.getStatusById(notification.fkRefNotificationStatus) ? this.sessionContext.getStatusById(notification.fkRefNotificationStatus).name.toLowerCase() : null;
       case 'fkRefGridTerritory':
-        return this.sessionContext.getGridTerritoryById(notification.fkRefGridTerritory) ?
-          this.sessionContext.getGridTerritoryById(notification.fkRefGridTerritory).name.toLowerCase() : null;
+        return this.sessionContext.getGridTerritoryById(notification.fkRefGridTerritory) ? this.sessionContext.getGridTerritoryById(notification.fkRefGridTerritory).name.toLowerCase() : null;
       default:
-        return notification[columnName] ? notification[columnName].toLowerCase() : null;
+        return notification[columnName] ? notification[columnName].toLowerCase(): null;
     }
 
   }
 }
+
diff --git a/src/app/lists/search-result-list/search-result-list.component.html b/src/app/lists/search-result-list/search-result-list.component.html
index cbfc941..86b93aa 100644
--- a/src/app/lists/search-result-list/search-result-list.component.html
+++ b/src/app/lists/search-result-list/search-result-list.component.html
@@ -1,121 +1,103 @@
 <div class="panel panel-default">
-  <div class="panel-heading">
-    <h4 class="panel-title">
-      <a *ngIf="isCollapsible" data-toggle="collapse" href="#collapse4">Suchergebnisse</a>
-      <div *ngIf="!isCollapsible">Suchergebnisse</div>
-    </h4>
-
-  </div>
-  <div id="collapse4" class="panel-collapse collapse in">
-    <div class="panel-body">
-      <table class="table table-striped table-bordered" *ngIf="!showSpinner">
-        <thead>
-          <tr>
-            <th *ngIf="withCheckboxes" class="notification-check-col">
-              <input type="checkbox" [(ngModel)]="selectAll" (change)="changeAllSelection()">
-            </th>
-            <th class="search-result-tab-first-col">
-                <app-sorting [initColumnName]="'beginDate'" (click)="sort('beginDate')"  [isDesc]="sortingState?.isDesc" [defaultState]="sortingState?.defaultState" [columnName]="sortingState?.column">Beginnt am</app-sorting>
-            </th>
-            <th class="search-result-tab-version-col">Version</th>
-            <th class="notification-tab-branch">
-                <app-sorting [initColumnName]="'fkRefBranch'" (click)="sort('fkRefBranch')"  [isDesc]="sortingState?.isDesc" [defaultState]="sortingState?.defaultState" [columnName]="sortingState?.column"></app-sorting>
+    <div class="panel-heading">
+      <h4 class="panel-title">
+        <a *ngIf="isCollapsible" data-toggle="collapse" href="#collapse4">Suchergebnisse</a>
+        <div *ngIf="!isCollapsible">Suchergebnisse</div>
+      </h4>
+    </div>
+    <div id="collapse4" class="panel-collapse collapse in">
+      <div class="panel-body">
+        <table class="table table-striped table-bordered" *ngIf="!showSpinner">
+          <thead>
+            <tr>
+              <th *ngIf="withCheckboxes" class="notification-check-col">
+                <input type="checkbox" [(ngModel)]="selectAll" (change)="changeAllSelection()">
               </th>
-              <th class="notification-tab-grid-territory">
-                <app-sorting  [initColumnName]="'fkRefGridTerritory'" (click)="sort('fkRefGridTerritory')" [isDesc]="sortingState?.isDesc" [defaultState]="sortingState?.defaultState" [columnName]="sortingState?.column"> </app-sorting>
+              <th class="search-result-tab-first-col">
+                  <app-sorting [initColumnName]="'beginDate'" (click)="sort('beginDate')"  [isDesc]="sortingState?.isDesc" [defaultState]="sortingState?.defaultState" [columnName]="sortingState?.column">Beginnt am</app-sorting>
               </th>
-              <th class="notification-tab-description">
-                  <app-sorting [initColumnName]="'notificationText'" (click)="sort('notificationText')" [isDesc]="sortingState?.isDesc" [defaultState]="sortingState?.defaultState"  [columnName]="sortingState?.column">Kurztext </app-sorting>
+              <th class="search-result-tab-version-col">Version</th>
+              <th class="notification-tab-branch">
+                  <app-sorting [initColumnName]="'fkRefBranch'" (click)="sort('fkRefBranch')"  [isDesc]="sortingState?.isDesc" [defaultState]="sortingState?.defaultState" [columnName]="sortingState?.column"></app-sorting>
                 </th>
-            <th class="notification-tab-status">
-                <app-sorting [initColumnName]="'fkRefNotificationStatus'" (click)="sort('fkRefNotificationStatus')"  [isDesc]="sortingState?.isDesc" [defaultState]="sortingState?.defaultState" [columnName]="sortingState?.column">Status</app-sorting>
-            </th>
-            <th class="notification-tab-moduser">
-                <app-sorting [initColumnName]="'responsibilityControlPoint'" (click)="sort('responsibilityControlPoint')"  [isDesc]="sortingState?.isDesc" [defaultState]="sortingState?.defaultState" [columnName]="sortingState?.column">Letzter Bearbeiter</app-sorting>
-            </th>
-            <th class="notification-tab-responsibility-forwarding">
-                <app-sorting [initColumnName]="'responsibilityForwarding'" (click)="sort('responsibilityForwarding')" [isDesc]="sortingState?.isDesc" [defaultState]="sortingState?.defaultState"  [columnName]="sortingState?.column">Zuständigkeit / weitergeleitet an</app-sorting>
-            </th>
-            <th class="notification-tab-edit-buttons"></th>
-          </tr>
-        </thead>
-        <tbody>
-          <tr *ngFor="let notification of pagedItems">
-            <td colspan="9" style="padding:0px;" border=3>
-              <table style="width:100%">
-                <tbody>
-                  <tr [ngClass]="{'sameIncident' : isIncidentIdChange(notification)}">
-                    <tr>
-                    <td *ngIf="withCheckboxes" class="notification-check-col" [ngClass]="{'incident-id-change' : incidentIdChange}">
-                      <input type="checkbox" [(ngModel)]="notification.selected" (change)="selectionChanged()">
-                    </td>
-                    <td class="search-result-tab-first-col" [ngClass]="{'incident-id-change' : incidentIdChange}">{{ notification.beginDate | formattedTimestamp: 'DD.MM.YYYY HH:mm' }}
-                    </td>
-                    <td class="search-result-tab-version-col" [ngClass]="{'incident-id-change' : incidentIdChange}">{{notification.version}}</td>
-                    <td class="notification-tab-branch" [ngClass]="{'incident-id-change' : incidentIdChange, 
-                                                        'gas' : isBranchGas(notification.fkRefBranch), 'power' : isBranchPower(notification.fkRefBranch), 
-                                                        'water' : isBranchWater(notification.fkRefBranch), 'heating' : isBranchHeating(notification.fkRefBranch)}">
-                      <span>
-                          {{ sessionContext.getBrancheById(notification.fkRefBranch)?.name }}
+                <th class="notification-tab-grid-territory">
+                  <app-sorting  [initColumnName]="'fkRefGridTerritory'" (click)="sort('fkRefGridTerritory')" [isDesc]="sortingState?.isDesc" [defaultState]="sortingState?.defaultState" [columnName]="sortingState?.column"> </app-sorting>
+                </th>
+                <th class="notification-tab-description">
+                    <app-sorting [initColumnName]="'notificationText'" (click)="sort('notificationText')" [isDesc]="sortingState?.isDesc" [defaultState]="sortingState?.defaultState"  [columnName]="sortingState?.column">Kurztext </app-sorting>
+                  </th>
+              <th class="notification-tab-status">
+                  <app-sorting [initColumnName]="'fkRefNotificationStatus'" (click)="sort('fkRefNotificationStatus')"  [isDesc]="sortingState?.isDesc" [defaultState]="sortingState?.defaultState" [columnName]="sortingState?.column">Status</app-sorting>
+              </th>
+              <th class="notification-tab-moduser">
+                  <app-sorting [initColumnName]="'responsibilityControlPoint'" (click)="sort('responsibilityControlPoint')"  [isDesc]="sortingState?.isDesc" [defaultState]="sortingState?.defaultState" [columnName]="sortingState?.column">Letzter Bearbeiter</app-sorting>
+              </th>
+              <th class="notification-tab-responsibility-forwarding">
+                  <app-sorting [initColumnName]="'responsibilityForwarding'" (click)="sort('responsibilityForwarding')" [isDesc]="sortingState?.isDesc" [defaultState]="sortingState?.defaultState"  [columnName]="sortingState?.column">Zuständigkeit / weitergeleitet an</app-sorting>
+              </th>
+              <th class="notification-tab-edit-buttons"></th>
+            </tr>
+          </thead>
+          <tbody>
+            <tr *ngFor="let notification of notifications; let  i = index">
+              <td colspan="9" style="padding:0px;" border=3>
+                <table style="width:100%">
+                  <tbody>
+                    <tr  [ngClass]="{'incident-id-change' : notifications[i] && notifications[i+1] && notifications[i].incidentId !== notifications[i+1].incidentId}">
+                      <td *ngIf="withCheckboxes" class="notification-check-col" >
+                        <input type="checkbox" [(ngModel)]="notification.selected" (change)="selectionChanged()">
+                      </td>
+                      <td class="search-result-tab-first-col" >{{ notification.beginDate | formattedTimestamp: 'DD.MM.YYYY HH:mm' }}
+                      </td>
+                      <td class="search-result-tab-version-col" >{{notification.version}}</td>
+                      <td class="notification-tab-branch" [ngClass]="{
+                                                          'gas' : isBranchGas(notification.fkRefBranch), 'power' : isBranchPower(notification.fkRefBranch), 
+                                                          'water' : isBranchWater(notification.fkRefBranch), 'heating' : isBranchHeating(notification.fkRefBranch)}">
+                        <span>
+                            {{ sessionContext.getBrancheById(notification.fkRefBranch)?.name }}
+                          </span>
+                      </td>
+                      <td class="notification-tab-grid-territory" >
+                        <span>
+                            {{ sessionContext.getGridTerritoryById(notification.fkRefGridTerritory)?.name }}
+                          </span>
+                      </td>
+                      <td class="notification-tab-description"  data-toggle="tooltip" [attr.data-original-title]="notification.notificationText"
+                        style="overflow:hidden;text-overflow: ellipsis;">
+                        <span>
+                          {{ notification.notificationText }}
                         </span>
-                    </td>
-                    <td class="notification-tab-grid-territory" [ngClass]="{'incident-id-change' : incidentIdChange}">
-                      <span>
-                          {{ sessionContext.getGridTerritoryById(notification.fkRefGridTerritory)?.name }}
-                        </span>
-                    </td>
-                    <td class="notification-tab-description" [ngClass]="{'incident-id-change' : incidentIdChange}" data-toggle="tooltip" [attr.data-original-title]="notification.notificationText"
-                      style="overflow:hidden;text-overflow: ellipsis;">
-                      <span>
-                        {{ notification.notificationText }}
-                      </span>
-                    </td>
-                    <td class="notification-tab-status" [ngClass]="{'finished' : isStatusClassFinished(notification.fkRefNotificationStatus), 'incident-id-change' : idx!==0 && incidentIdChange}">
-                      <span>
-                          {{ sessionContext.getStatusById(notification.fkRefNotificationStatus)?.name }}
-                        </span>
-                    </td>
-                    <td class="notification-tab-moduser" [ngClass]="{'incident-id-change' : incidentIdChange}">
-                      <span>
-                          {{ notification.responsibilityControlPoint }}
-                        </span>
-                    </td>
-                    <td class="notification-tab-responsibility-forwarding" [ngClass]="{'incident-id-change' : incidentIdChange}">
-                      <span>
-                          {{ notification.responsibilityForwarding }}
-                        </span>
-                    </td>
-                    <td class="notification-tab-edit-buttons" [ngClass]="{'incident-id-change' : incidentIdChange}">
-                      <button type="button" class="btn btn-default btn-sm" (click)="lookUpNotification(notification)">
-                              <span class="glyphicon glyphicon-eye-open"></span>
-                          </button>
-                    </td>
-                  </tr>
-                </tbody>
-              </table>
-            </td>
-          </tr>
-        </tbody>
-       
-      </table>
-      <app-loading-spinner *ngIf="showSpinner"></app-loading-spinner>    </div>
-    <div class="panel-footer">    
-      <ul *ngIf="pager.pages && pager.pages.length" class="pagination">
-        <li [ngClass]="{disabled:pager.currentPage === 1}">
-            <a (click)="setPage(1)"><<</a>
-        </li>
-        <li [ngClass]="{disabled:pager.currentPage === 1}">
-            <a (click)="setPage(pager.currentPage - 1)"><</a>
-        </li>
-        <li *ngFor="let page of pager.pages" [ngClass]="{active:pager.currentPage === page}">
-            <a (click)="setPage(page)">{{page}}</a>
-        </li>
-        <li [ngClass]="{disabled:pager.currentPage === pager.totalPages}">
-            <a (click)="setPage(pager.currentPage + 1)">></a>
-        </li>
-        <li [ngClass]="{disabled:pager.currentPage === pager.totalPages}">
-            <a (click)="setPage(pager.totalPages)">>></a>
-        </li>
-    </ul></div>
+                      </td>
+                      <td class="notification-tab-status" [ngClass]="{'finished' : isStatusClassFinished(notification.fkRefNotificationStatus)}">
+                        <span>
+                            {{ sessionContext.getStatusById(notification.fkRefNotificationStatus)?.name }}
+                          </span>
+                      </td>
+                      <td class="notification-tab-moduser" >
+                        <span>
+                            {{ notification.responsibilityControlPoint }}
+                          </span>
+                      </td>
+                      <td class="notification-tab-responsibility-forwarding" >
+                        <span>
+                            {{ notification.responsibilityForwarding }}
+                          </span>
+                      </td>
+                      <td class="notification-tab-edit-buttons"  >
+                        <button type="button" class="btn btn-default btn-sm" (click)="lookUpNotification(notification)">
+                                <span class="glyphicon glyphicon-eye-open"></span>
+                            </button>
+                      </td>
+                    </tr>
+                  </tbody>
+                </table>
+              </td>
+            </tr>
+          </tbody>
+        </table>
+        <app-loading-spinner *ngIf="showSpinner"></app-loading-spinner>
+      </div>
+    </div>
   </div>
-</div>
\ No newline at end of file
+  
+  
\ No newline at end of file
diff --git a/src/app/lists/search-result-list/search-result-list.component.ts b/src/app/lists/search-result-list/search-result-list.component.ts
index 0adc5d0..e184d4c 100644
--- a/src/app/lists/search-result-list/search-result-list.component.ts
+++ b/src/app/lists/search-result-list/search-result-list.component.ts
@@ -11,6 +11,7 @@
 import { ReminderService } from '../../services/reminder.service'; //TODO remove this from abstract list
 import { DaterangepickerConfig } from 'ng2-daterangepicker'; //TODO remove this from abstract list
 import { SessionContext } from '../../common/session-context';
+import { LoadingSpinnerComponent } from '../../dialogs/loading-spinner/loading-spinner.component';
 
 @Component({
   selector: 'app-search-result-list',
@@ -18,6 +19,7 @@
   styleUrls: ['./search-result-list.component.css', '../abstract-list/abstract-list.component.css'],
 })
 export class SearchResultListComponent extends AbstractListComponent implements OnChanges {
+  column: string;
 
   @Input()
   globalSearchFilter: GlobalSearchFilter;
@@ -31,7 +33,7 @@
     protected notificationService: NotificationService, protected reminderService: ReminderService,
     protected sessionContext: SessionContext,
     protected daterangepickerConfig: DaterangepickerConfig) {
-    super(messageService, notificationService, reminderService, sessionContext, daterangepickerConfig)
+    super(messageService, notificationService, reminderService, sessionContext, daterangepickerConfig);
   }
 
   public isStatusClassFinished(fkRefStatus: number): boolean {
@@ -80,15 +82,5 @@
   isBranchHeating(branchId: number): boolean {
     return this.sessionContext.getBranchClassById(branchId) == 'heating';
   }
-
-  isIncidentIdChange(actualNotification: Notification): boolean {
-    if (this.oldNotification == null || this.oldNotification == undefined || this.oldNotification.incidentId != actualNotification.incidentId) {
-      this.oldNotification = actualNotification;
-      this.incidentIdChange = true;
-    }
-    else {
-      this.incidentIdChange = false;
-    }
-    return this.incidentIdChange;
-  }
 }
+
diff --git a/src/app/model/sorting-state.ts b/src/app/model/sorting-state.ts
new file mode 100644
index 0000000..ed49827
--- /dev/null
+++ b/src/app/model/sorting-state.ts
@@ -0,0 +1,6 @@
+export class SortingState {
+    column: string = '';
+    counter: number;
+    defaultState: boolean;
+    isDesc: boolean;
+}
\ No newline at end of file
diff --git a/src/app/services/notification.service.ts b/src/app/services/notification.service.ts
index 282ce68..52cc6e6 100644
--- a/src/app/services/notification.service.ts
+++ b/src/app/services/notification.service.ts
@@ -13,7 +13,6 @@
 import { FilterSelection } from '../model/filter-selection';
 import { TerritoryResponsibility } from '../model/territory-responsibility';
 
-
 @Injectable()
 export class NotificationService extends BaseHttpService {
   public static ALL = 'active';
@@ -34,53 +33,7 @@
     this.itemChanged$ = new EventEmitter();
 
   }
-  public getPager(totalItems: number, currentPage: number = 1, pageSize: number = 20) {
-    let totalPages = Math.ceil(totalItems / pageSize);
-    
-            let startPage: number, endPage: number;
-            if (totalPages <= 20) {
-                // less than 10 total pages so show all
-                startPage = 1;
-                endPage = totalPages;
-            } else {
-                // more than 10 total pages so calculate start and end pages
-                if (currentPage <= 6) {
-                    startPage = 1;
-                    endPage = 20;
-                } else if (currentPage + 4 >= totalPages) {
-                    startPage = totalPages - 9;
-                    endPage = totalPages;
-                } else {
-                    startPage = currentPage - 5;
-                    endPage = currentPage + 4;
-                }
-            }
-    
-            // calculate start and end item indexes
-            let startIndex = (currentPage - 1) * pageSize;
-            let endIndex = Math.min(startIndex + pageSize - 1, totalItems - 1);
-    
-            // create an array of pages to ng-repeat in the pager control
-            let pages = this.range(startPage, endPage);
-    
-            // return object with all pager properties required by the view
-            return {
-                totalItems: totalItems,
-                currentPage: currentPage,
-                pageSize: pageSize,
-                totalPages: totalPages,
-                startPage: startPage,
-                endPage: endPage,
-                startIndex: startIndex,
-                endIndex: endIndex,
-                pages: pages
-            };
-}
-private range(j, k) { 
-  return Array
-      .apply(null, Array((k - j) + 1))
-      .map(function(discard, n){ return n + j; }); 
-}
+
   public getNotifications(notificationType: string, notificationSearchFilter?: NotificationSearchFilter): Observable<Notification[]> {
     const headers = new Headers();
     const url = super.getBaseUrl() + '/notifications/' + notificationType;
@@ -163,4 +116,3 @@
   }
 
 }
-
