Merge branch 'DEVELOP_FE' of ssh://git.eclipse.org/gitroot/elogbook/elogbookFE into DEVELOP_FE_MESSAGE_BANNER_REFAC

# Conflicts:
#	src/app/app.component.ts
#	src/app/app.module.ts
#	src/app/services/base-http.service.ts
#	src/app/services/import.service.ts
diff --git a/src/app/app.component.html b/src/app/app.component.html
index a955391..9fe58de 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -1,6 +1,3 @@
-<app-main-navigation *ngIf="router.url !== '/login'">
-
-</app-main-navigation>
-<router-outlet>
-
-</router-outlet>
\ No newline at end of file
+<app-main-navigation *ngIf="router.url !== '/login'"></app-main-navigation>
+<app-message-banner *ngIf="router.url !== '/login'" ></app-message-banner>
+<router-outlet></router-outlet>
\ No newline at end of file
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index a1ef894..d4c2335 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -11,7 +11,10 @@
 import { BaseDataLoaderService } from './services/jobs/base-data-loader.service';
 import { ReminderCallerJobService } from './services/jobs/reminder-caller-job.service';
 import { ImportFileCallerService } from './services/jobs/import-file-caller.service';
+import { HttpResponseInterceptorService } from './services/http-response-interceptor.service';
 
+import { BannerMessage } from './common/banner-message';
+import { BannerMessageStatusEn } from './common/enums';
 @Component({
   selector: 'app-root',
   templateUrl: './app.component.html',
@@ -20,9 +23,11 @@
 
 export class AppComponent implements OnInit {
   title = 'app works!';
+  private bannerMessageStatus = BannerMessageStatusEn;
 
   constructor(private http: Http, public router: Router,
     public baseDataLoader: BaseDataLoaderService,
+    public httpInterceptor: HttpResponseInterceptorService,
     private sessionContext: SessionContext,
     public reminderCallerJobService: ReminderCallerJobService,
     public importFileCallerService: ImportFileCallerService) {
@@ -46,8 +51,7 @@
 
       return '';
     };
-    */
-  }
+*/  }
 
   private onRcFromHttpService(rc: number): void {
     if (rc === 401) {
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 397b168..1cc3e9f 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -56,7 +56,8 @@
 import { LoadingSpinnerComponent } from './dialogs/loading-spinner/loading-spinner.component';
 import { SortingComponent } from './lists/sorting/sorting.component';
 import { ImportService } from './services/import.service';
-import { FileImportComponent } from './dialogs/file-import/file-import.component';
+import { FileImportComponent } from './dialogs/file-import/file-import.component';import { HttpResponseInterceptorService } from './services/http-response-interceptor.service';
+import { MessageBannerComponent } from './common-components/message-banner/message-banner.component';
 
 @NgModule({
   declarations: [
@@ -85,13 +86,14 @@
     AutocompleteComponent,
     MainNavigationComponent,
     ReminderComponent,
-    ShiftChangeOverviewComponent ,
+    ShiftChangeOverviewComponent,
     HistoricalShiftChangesComponent,
     CurrentRemindersComponent,
     FilterComponent,
     LoadingSpinnerComponent,
     SortingComponent,
-    FileImportComponent    
+    FileImportComponent,
+	MessageBannerComponent      
   ],
   imports: [
     BrowserAnimationsModule,
@@ -128,8 +130,8 @@
     ImportFileCallerService,
     MessageService,
     BaseDataLoaderService,
-    ImportService 
-  ],
+    ImportService,
+    HttpResponseInterceptorService  ],
   bootstrap: [AppComponent]
 })
 export class AppModule { }
diff --git a/src/app/common-components/autocomplete/autocomplete.component.spec.ts b/src/app/common-components/autocomplete/autocomplete.component.spec.ts
index 170a0be..82c1b93 100644
--- a/src/app/common-components/autocomplete/autocomplete.component.spec.ts
+++ b/src/app/common-components/autocomplete/autocomplete.component.spec.ts
@@ -6,6 +6,7 @@
 import { By } from '@angular/platform-browser';
 import { FormsModule } from '@angular/forms';
 import { click, focus, newEvent, pressKey } from '../../testing/index';
+import { MessageService } from '../../services/message.service';
 
 describe('AutocompleteComponent', () => {
   let component: AutocompleteComponent;
@@ -19,14 +20,18 @@
     }
   }
   let mockService;
+  let messageService;
 
   beforeEach(async(() => {
     mockService = new MockBtbService();
+    messageService = new MessageService();
 
     TestBed.configureTestingModule({
       imports: [FormsModule],
       declarations: [AutocompleteComponent],
-      providers: [{ provide: NotificationService, useValue: mockService }]
+      providers: [
+        { provide: NotificationService, useValue: mockService }, 
+        { provide: MessageService, useValue: messageService }]
     })
       .compileComponents();
   }));
@@ -65,7 +70,7 @@
 
   }));
 
-  it('test2.1: should call setAssignedUserSuggestion on focus an return an error', async(() => {
+  it('test2.1: should call setAssignedUserSuggestion on focus and return an error', async(() => {
     spyOn(component, 'createItemList').and.callThrough();
     const userSuggestionsList = ['User1', 'TestUser1', 'TestUser2', 'User2', 'User3'];
     mockService.error = 'MOCKERROR';
diff --git a/src/app/common-components/autocomplete/autocomplete.component.ts b/src/app/common-components/autocomplete/autocomplete.component.ts
index dd56355..2f3b9d4 100644
--- a/src/app/common-components/autocomplete/autocomplete.component.ts
+++ b/src/app/common-components/autocomplete/autocomplete.component.ts
@@ -1,6 +1,7 @@
 import { Component, OnInit, ElementRef, EventEmitter, Input, Output, HostListener } from '@angular/core';
 import { NotificationService } from '../../services/notification.service';
-import { BannerMessageStatusEn } from '../../common/enums';
+import { BannerMessageStatusEn, ErrorType } from '../../common/enums';
+import { MessageService, MessageDefines } from '../../services/message.service';
 
 @Component({
   selector: 'app-autocomplete',
@@ -20,6 +21,7 @@
   position: number = -1;
 
   constructor(autoCompleteElement: ElementRef,
+    private messageService: MessageService,
     private notificationService: NotificationService) {
     this.elementRef = autoCompleteElement;
   }
@@ -37,7 +39,9 @@
       this.inputElementList = res;
       this.createItemList();
     },
-      error => { console.log(error); }
+      error => { 
+        this.messageService.emitError('Benutzervoschlag', ErrorType.retrieve); 
+      }
     );
   }
 
diff --git a/src/app/common-components/main-navigation/main-navigation.component.spec.ts b/src/app/common-components/main-navigation/main-navigation.component.spec.ts
index 88660db..678a533 100644
--- a/src/app/common-components/main-navigation/main-navigation.component.spec.ts
+++ b/src/app/common-components/main-navigation/main-navigation.component.spec.ts
@@ -66,8 +66,9 @@
     expect(routerStub.navigate).toHaveBeenCalledWith(['/overview']);
   });
 
-  xit('should open the filter on click on the filter button', () => {    
+ it('should open the filter on click on the filter button', () => {    
     //WIP
+    /*
     component.goToOverview();
     fixture.detectChanges(); // update view with array
 
@@ -76,6 +77,7 @@
       const des = fixture.debugElement.queryAll(By.css('button'));
       click(des[0]);
     });
+    */
   });
 
   it('should navigate to search on search-button click', () => {    
diff --git a/src/app/common-components/message-banner/message-banner.component.css b/src/app/common-components/message-banner/message-banner.component.css
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/app/common-components/message-banner/message-banner.component.css
diff --git a/src/app/common-components/message-banner/message-banner.component.html b/src/app/common-components/message-banner/message-banner.component.html
new file mode 100644
index 0000000..e331543
--- /dev/null
+++ b/src/app/common-components/message-banner/message-banner.component.html
@@ -0,0 +1,10 @@
+<div style="width:100%;">
+  <div style="margin: 36px 10px 0px 10px;" *ngIf="sessionContext.bannerMessage.isActive" [ngClass]="{'alert':true, 
+  'alert-danger':sessionContext.bannerMessage.status===bannerMessageStatus.error,
+  'alert-info':sessionContext.bannerMessage.status===bannerMessageStatus.info,
+  'alert-warning':sessionContext.bannerMessage.status===bannerMessageStatus.warning,
+  'alert-success':sessionContext.bannerMessage.status===bannerMessageStatus.success}">
+    <div class="close" (click)="sessionContext.bannerMessage.hide()">x</div>
+    {{sessionContext.bannerMessage.text}}
+  </div>
+</div>
\ No newline at end of file
diff --git a/src/app/common-components/message-banner/message-banner.component.spec.ts b/src/app/common-components/message-banner/message-banner.component.spec.ts
new file mode 100644
index 0000000..4046152
--- /dev/null
+++ b/src/app/common-components/message-banner/message-banner.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { MessageBannerComponent } from './message-banner.component';
+
+describe('MessageBannerComponent', () => {
+  let component: MessageBannerComponent;
+  let fixture: ComponentFixture<MessageBannerComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [ MessageBannerComponent ]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(MessageBannerComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  // it('should be created', () => {
+  //   expect(component).toBeTruthy();
+  // });
+});
diff --git a/src/app/common-components/message-banner/message-banner.component.ts b/src/app/common-components/message-banner/message-banner.component.ts
new file mode 100644
index 0000000..1f4f1c5
--- /dev/null
+++ b/src/app/common-components/message-banner/message-banner.component.ts
@@ -0,0 +1,22 @@
+import { Component, OnInit, Input } from '@angular/core';
+import { BannerMessageStatusEn } from '../../common/enums';
+import { SessionContext } from '../../common/session-context';
+
+@Component({
+  selector: 'app-message-banner',
+  templateUrl: './message-banner.component.html',
+  styleUrls: ['./message-banner.component.css']
+})
+export class MessageBannerComponent implements OnInit {
+
+
+  
+  bannerMessageStatus = BannerMessageStatusEn;
+  
+
+  constructor(public sessionContext: SessionContext) { }
+
+  ngOnInit() {
+  }
+
+}
diff --git a/src/app/common/banner-message.ts b/src/app/common/banner-message.ts
index 498388d..d2bce32 100644
--- a/src/app/common/banner-message.ts
+++ b/src/app/common/banner-message.ts
@@ -1,9 +1,11 @@
 import { Component, Optional, OnInit } from '@angular/core';
+import { ErrorType } from '../common/enums';
 export class BannerMessage {
     status: number;
     text: string;
     isActive = false;
+    errorType: ErrorType ;
     public hide() {
-           this.isActive = false;
+        this.isActive = false;
     }
 }
\ No newline at end of file
diff --git a/src/app/common/enums.ts b/src/app/common/enums.ts
index 17fb751..52fec04 100644
--- a/src/app/common/enums.ts
+++ b/src/app/common/enums.ts
@@ -5,9 +5,16 @@
     closed = 4
 }
 
+export enum ErrorType {
+    create = 1,
+    update = 2,
+    delete = 3,
+    retrieve = 4,
+    authentication = 5
+}
 export enum BannerMessageStatusEn {
     warning = 1,
     success = 2,
     error = 3,
     info = 4
-}
+}
\ No newline at end of file
diff --git a/src/app/common/session-context.ts b/src/app/common/session-context.ts
index f84b2df..3aac155 100644
--- a/src/app/common/session-context.ts
+++ b/src/app/common/session-context.ts
@@ -34,7 +34,11 @@
     getCurrSessionId(): string { return localStorage.getItem(Globals.LOCALSTORAGE_SESSION_ID); }
     setCurrSessionId(sid: string): void { localStorage.setItem(Globals.LOCALSTORAGE_SESSION_ID, sid); }
 
+    initBannerMessage(){
+        this.bannerMessage = new BannerMessage();
+    }
     clearStorage() {
+        this.initBannerMessage();
         localStorage.clear();
     }
 
diff --git a/src/app/dialogs/entry/entry.component.spec.ts b/src/app/dialogs/entry/entry.component.spec.ts
index d0cf9b6..45e4b56 100644
--- a/src/app/dialogs/entry/entry.component.spec.ts
+++ b/src/app/dialogs/entry/entry.component.spec.ts
@@ -26,9 +26,10 @@
 import { FILTER_MATRIX_UNIQUE_BRANCH } from '../../test-data/filter-matrix';
 import { FILTER_MATRIX_UNIQUE_GRIDTERRITORY } from '../../test-data/filter-matrix';
 
+import { MessageService } from '../../services/message.service';
 describe('EntryComponent', () => {
-  let component: EntryComponent;
-  let fixture: ComponentFixture<EntryComponent>;
+let component: EntryComponent;
+let fixture: ComponentFixture<EntryComponent>;
   let sessionContext: SessionContext;
 
   class MockDialogRef extends AbstractMockObservableService {
@@ -52,8 +53,10 @@
     }
   }
   let mockNotificationService;
+  let messageService;
 
   beforeEach(async(() => {
+    messageService = new MessageService();
     sessionContext = new SessionContext();
     sessionContext.setBranches(BRANCHES);
     sessionContext.setGridTerritories(GRIDTERRITORIES);
@@ -77,6 +80,7 @@
         { provide: MdDialogRef, useClass: MockDialogRef },
         { provide: NotificationService, useValue: mockNotificationService },
         { provide: SessionContext, useClass: SessionContext },
+        { provide: MessageService, useValue: messageService },
         DaterangepickerConfig,
         Daterangepicker
       ]
@@ -96,69 +100,69 @@
     component.gridTerritories = GRIDTERRITORIES;
   });
 
-  it('should change the Version and set the according notification', async(() => {
+  it('should change the Version and set the according notification', async(() => {    
     component.notificationVersions = NOTIFICATION_VERSIONS;
     component.notification = NOTIFICATION_VERSIONS[0];
     component.isReadOnlyDialog = true;
     fixture.detectChanges();
 
     fixture.whenStable().then(() => {
-      fixture.detectChanges();
-      const select = fixture.debugElement.query(By.css('select[name=notificationSelection]'));
-      select.nativeElement.value = '3';
+      fixture.detectChanges();      
+      const select = fixture.debugElement.query(By.css('select[name=notificationSelection]'));      
+      select.nativeElement.value = '3';      
       select.nativeElement.dispatchEvent(newEvent('change'));
       fixture.detectChanges();
 
       fixture.whenStable().then(() => {
         fixture.detectChanges();
-        expect(component.notification.version).toBe(NOTIFICATION_VERSIONS[2].version);
+        expect(component.notification.version).toBe(NOTIFICATION_VERSIONS[2].version);              
       });
 
-    });
+    });          
   }));
 
-  it('should call statusChanged on changing the status (inWork)', async(() => {
+  it('should call statusChanged on changing the status (inWork)', async(() => {        
     spyOn(component, 'statusChanged').and.callThrough();
     component.sessionContext.setStatuses(STATUSES);
-    const currNotification: Notification = NOTIFICATION_VERSIONS[0];
-    component.notification = currNotification;
+    const currNotification: Notification = NOTIFICATION_VERSIONS[0];    
+    component.notification = currNotification;        
     fixture.detectChanges();
 
     fixture.whenStable().then(() => {
-      expect(component.notification.fkRefNotificationStatus).toBe(NOTIFICATION_VERSIONS[0].fkRefNotificationStatus);
-
-      const select = fixture.debugElement.query(By.css('select[name=statusSelection]'));
+      expect(component.notification.fkRefNotificationStatus).toBe(NOTIFICATION_VERSIONS[0].fkRefNotificationStatus);                    
+  
+      const select = fixture.debugElement.query(By.css('select[name=statusSelection]'));    
       select.nativeElement.value = StatusEn.inWork;
       select.nativeElement.dispatchEvent(newEvent('change'));
       fixture.detectChanges();
 
       fixture.whenStable().then(() => {
-        expect(component.statusChanged).toHaveBeenCalledWith(StatusEn.inWork.toString(), currNotification);
+        expect(component.statusChanged).toHaveBeenCalledWith(StatusEn.inWork.toString(), currNotification);             
       });
 
-    });
+    });          
   }));
 
-  it('should call statusChanged on changing the status (done)', async(() => {
+  it('should call statusChanged on changing the status (done)', async(() => {        
     spyOn(component, 'statusChanged').and.callThrough();
     component.sessionContext.setStatuses(STATUSES);
-    const currNotification: Notification = NOTIFICATION_VERSIONS[0];
-    component.notification = currNotification;
+    const currNotification: Notification = NOTIFICATION_VERSIONS[0];    
+    component.notification = currNotification;        
     fixture.detectChanges();
 
     fixture.whenStable().then(() => {
-      expect(component.notification.fkRefNotificationStatus).toBe(NOTIFICATION_VERSIONS[0].fkRefNotificationStatus);
-
-      const select = fixture.debugElement.query(By.css('select[name=statusSelection]'));
+      expect(component.notification.fkRefNotificationStatus).toBe(NOTIFICATION_VERSIONS[0].fkRefNotificationStatus);                    
+  
+      const select = fixture.debugElement.query(By.css('select[name=statusSelection]'));    
       select.nativeElement.value = StatusEn.done;
       select.nativeElement.dispatchEvent(newEvent('change'));
       fixture.detectChanges();
 
       fixture.whenStable().then(() => {
-        expect(component.statusChanged).toHaveBeenCalledWith(StatusEn.done.toString(), currNotification);
+        expect(component.statusChanged).toHaveBeenCalledWith(StatusEn.done.toString(), currNotification);             
       });
 
-    });
+    });          
   }));
 
   it('should call setNotification service methode and return an error', async(() => {
@@ -252,12 +256,15 @@
   }));
 
   it('should call add on click button "Hinzufügen" and return an error', async(() => {
+    let hasBeenCalled = false;
     spyOn(component, 'add').and.callThrough();
     component.isInstructionDialog = true;
     mockNotificationService.error = 'ADD_CLICK_ERROR';
 
     component.notification.notificationText = 'TestContentChanged';
     component.notification.fkRefNotificationStatus = 1;
+
+    messageService.errorOccured$.subscribe( msg => hasBeenCalled = true);
     fixture.detectChanges();
 
     const de = fixture.debugElement.query(By.css('.btn-success'));
@@ -265,7 +272,7 @@
 
     fixture.whenStable().then(() => {
       expect(component.add).toHaveBeenCalled();
-      expect(component.sessionContext.bannerMessage.text).toEqual('Fehler bei der Erstellung eines Eintrags.');
+      expect(hasBeenCalled).toBeTruthy();
     });
   }));
 
@@ -289,6 +296,7 @@
   }));
 
   it('should call edit on click button "Ändern" and return an error', async(() => {
+    let hasBeenCalled = false;
     spyOn(component, 'edit').and.callThrough();
     component.isInstructionDialog = true;
     component.isEditDialog = true;
@@ -296,6 +304,7 @@
 
     component.notification.notificationText = 'TestContentChanged';
     component.notification.fkRefNotificationStatus = 1;
+    messageService.errorOccured$.subscribe( msg => hasBeenCalled = true);    
     fixture.detectChanges();
 
     const de = fixture.debugElement.query(By.css('.btn-success'));
@@ -303,7 +312,7 @@
 
     fixture.whenStable().then(() => {
       expect(component.edit).toHaveBeenCalled();
-      expect(component.sessionContext.bannerMessage.text).toEqual('Fehler beim Ändern eines Eintrags.');
+      expect(hasBeenCalled).toBeTruthy();
     });
   }));
 
@@ -325,7 +334,7 @@
     returnBranchName = component.getUniqueBranchNameForUser(FILTER_MATRIX_NONE_SELECTED.responsibilityContainerMatrix, 'max');
 
     expect(returnBranchName).toBe('');
-  });
+});
 
   it('should return a branch name for a given user if it is unique', () => {
     component.sessionContext.setGridTerritories(GRIDTERRITORIES);
diff --git a/src/app/dialogs/entry/entry.component.ts b/src/app/dialogs/entry/entry.component.ts
index 241bf88..b7fd69d 100644
--- a/src/app/dialogs/entry/entry.component.ts
+++ b/src/app/dialogs/entry/entry.component.ts
@@ -12,9 +12,9 @@
 import { AbstractListComponent } from '../../lists/abstract-list/abstract-list.component';
 import { SessionContext } from '../../common/session-context';
 import { BannerMessage } from '../../common/banner-message';
-import { StatusEn, BannerMessageStatusEn } from '../../common/enums';
+import { StatusEn, BannerMessageStatusEn,ErrorType } from '../../common/enums';
 import { FormattedTimestampPipe } from '../../common-components/pipes/formatted-timestamp.pipe';
-
+import { MessageService } from '../../services/message.service';
 @Component({
   selector: 'app-entry',
   templateUrl: './entry.component.html',
@@ -41,7 +41,8 @@
     public dialogRef: MdDialogRef<EntryComponent>,
     private daterangepickerConfig: DaterangepickerConfig,
     private notificationService: NotificationService,
-    public sessionContext: SessionContext) {
+    public sessionContext: SessionContext,
+    private messageService: MessageService) {
   }
 
   ngOnInit() {
@@ -112,10 +113,7 @@
 
     this.notificationService.getNotificationVersions(notification.incidentId).subscribe(notes => this.notificationVersions = notes,
       error => {
-        this.sessionContext.setBannerMessage(
-          BannerMessageStatusEn.error,
-          'Fehler beim Lesen der Versionen von der Datenbank.',
-          true);
+        this.messageService.emitError('Versionen', ErrorType.retrieve);
         this.dialogRef.close();
       }
     );
@@ -128,10 +126,7 @@
 
     this.notificationService.updateNotification(notificationClone).subscribe(result => this.dialogRef.close(),
       error => {
-        this.sessionContext.setBannerMessage(
-          BannerMessageStatusEn.error,
-          'Fehler beim Ändern eines Eintrags.',
-          true);
+        this.messageService.emitError('Eintrag', ErrorType.update);
         this.dialogRef.close();
       });
   }
@@ -141,10 +136,7 @@
     this.notification.adminFlag = adminFlag;
     this.notificationService.createNotification(this.notification).subscribe(result => this.dialogRef.close(),
       error => {
-        this.sessionContext.setBannerMessage(
-          BannerMessageStatusEn.error,
-          'Fehler bei der Erstellung eines Eintrags.',
-          true);
+        this.messageService.emitError('Eintrags', ErrorType.create);
         this.dialogRef.close();
       });
   }
diff --git a/src/app/dialogs/responsibility/responsibility.component.html b/src/app/dialogs/responsibility/responsibility.component.html
index 002fa9b..692f0d8 100644
--- a/src/app/dialogs/responsibility/responsibility.component.html
+++ b/src/app/dialogs/responsibility/responsibility.component.html
@@ -4,16 +4,7 @@
       Zuständigkeit
     </h4>
   </div>
-  <div style="width:100%;">
-    <div *ngIf="bannerMessage.isActive" [ngClass]="{'alert':true, 
-    'alert-danger':bannerMessage.status===bannerMessageStatus.error,
-    'alert-info':bannerMessage.status===bannerMessageStatus.info,
-    'alert-warning':bannerMessage.status===bannerMessageStatus.warning,
-    'alert-success':bannerMessage.status===bannerMessageStatus.success}">
-      <div class="close" (click)="bannerMessage.hide()">x</div>
-      {{bannerMessage.text}}
-    </div>
-  </div>
+  
   <div class="panel-body">
     <table class="table table-bordered responsibility-column-striped">
       <thead>
diff --git a/src/app/dialogs/responsibility/responsibility.component.spec.ts b/src/app/dialogs/responsibility/responsibility.component.spec.ts
index 803a6f2..cfbf3cc 100644
--- a/src/app/dialogs/responsibility/responsibility.component.spec.ts
+++ b/src/app/dialogs/responsibility/responsibility.component.spec.ts
@@ -24,7 +24,7 @@
 import { OverviewComponent } from '../../pages/overview/overview.component';
 import { MessageService } from '../../services/message.service';
 import { Router } from '@angular/router';
-
+import { SessionContext } from '../../common/session-context';
 let component: ResponsibilityComponent;
 let responsibilityFixture: ComponentFixture<ResponsibilityComponent>;
 let respPage: ResponsilityPage;
@@ -69,6 +69,7 @@
         { provide: ResponsibilityService, useValue: mockService },
         { provide: MdDialogRef, useValue: MdDialogRef },
         { provide: MessageService, useClass: MessageService },
+        { provide: SessionContext, useClass: SessionContext },
         { provide: DaterangepickerConfig, useClass: DaterangepickerConfig }
       ]
     })
diff --git a/src/app/dialogs/responsibility/responsibility.component.ts b/src/app/dialogs/responsibility/responsibility.component.ts
index ac7d325..20b27ff 100644
--- a/src/app/dialogs/responsibility/responsibility.component.ts
+++ b/src/app/dialogs/responsibility/responsibility.component.ts
@@ -4,8 +4,9 @@
 import { MessageService } from '../../services/message.service';
 import { ResponsibilityService } from '../../services/responsibility.service';
 import { BannerMessage } from '../../common/banner-message';
-import { BannerMessageStatusEn } from '../../common/enums';
+import { BannerMessageStatusEn, ErrorType } from '../../common/enums';
 import { ShiftChangeProtocolComponent } from '../shift-change-protocol/shift-change-protocol.component';
+import { SessionContext } from '../../common/session-context';
 
 @Component({
   selector: 'app-responsibility',
@@ -21,40 +22,41 @@
   @Input()
   withNames = false;
 
-  bannerMessage: BannerMessage = new BannerMessage();
   bannerMessageStatus = BannerMessageStatusEn;
 
   constructor(
     @Optional() public dialogRef: MdDialogRef<ShiftChangeProtocolComponent>,
     private messageService: MessageService,
+    private sessionContext: SessionContext,
     private responsibilityService: ResponsibilityService
   ) { }
 
 
   ngAfterViewInit() {
-    this.responsibilitiesSelectionChanged();    
+    this.responsibilitiesSelectionChanged();
   }
 
   confirm(): void {
-    const self = this;
-    this.responsibilityService.confirmResponsibilities(this.responsiblitySelection).subscribe(resps => setResp(resps),
+    this.responsibilityService.confirmResponsibilities(this.responsiblitySelection).subscribe((resps: TerritoryResponsibility[]) => {
+      if (resps['ret'] && resps['ret'] === 'OK') {
+        this.responsiblitySelection = [];
+        this.messageService.deactivateMessage();
+        this.dialogRef.close();
+      } else {
+        const message = 'Ihre Verantwortlichkeiten haben sich geändert. ' +
+          'Bitte prüfen Sie Ihre Eingaben und versuchen Sie es erneut.';
+        this.messageService.emitWarning(message);
+        this.responsiblitySelection = resps;
+      }
+    },
       error => {
-        self.setError(error);
+        this.dialogRef.close();
+        this.messageService.emitError('Verantwortlichkeiten', ErrorType.update);
       }
     );
     function setResp(respCs: TerritoryResponsibility[]): void {
-      if (respCs['ret'] && respCs['ret'] === 'OK') {
-        self.responsiblitySelection = [];
-        self.dialogRef.close();
-      } else {
-        self.bannerMessage.isActive = true;
-        self.bannerMessage.status = BannerMessageStatusEn.info;
-        self.bannerMessage.text = 'Ihre Verantwortlichkeiten haben sich geändert. ' +
-          'Bitte prüfen Sie Ihre Eingaben und versuchen Sie es erneut.';
-        self.responsiblitySelection = respCs;
-      }
-    }
 
+    }
   }
 
   responsibilitiesSelectionChanged() {
@@ -96,11 +98,4 @@
     this.responsibilitiesSelectionChanged();
   }
 
-  private setError(errorMessage: string) {
-    this.bannerMessage.isActive = true;
-    this.bannerMessage.status = BannerMessageStatusEn.error;
-    this.bannerMessage.text = 'Es ist ein Fehler aufgetreten. Bitte kontaktieren Sie den Administrator';
-    console.log(errorMessage);
-  }
-
 }
diff --git a/src/app/dialogs/shift-change-protocol/shift-change-protocol.component.html b/src/app/dialogs/shift-change-protocol/shift-change-protocol.component.html
index 61c5579..6ca27fc 100644
--- a/src/app/dialogs/shift-change-protocol/shift-change-protocol.component.html
+++ b/src/app/dialogs/shift-change-protocol/shift-change-protocol.component.html
@@ -6,6 +6,7 @@
 
 <div id="print-section" class="dialog">
   <div class="panel panel-default margin-zero">
+      <app-message-banner></app-message-banner>
     <div class="panel-body shift-change-protocol-panel-body">
       <app-responsibility #respCompVar [responsiblitySelection]="responsibilitiesContainer"></app-responsibility>
       <app-future-notifications [withCheckboxes]="true" [withEditButtons]="false" [isCollapsible]="false" [stayHidden]="false"></app-future-notifications>
@@ -17,6 +18,6 @@
 
 <div class="margin-top">
   <button class="btn btn-primary btn-sm" (click)="respCompVar.confirm()" autofocus>Übernehmen</button>
-  <button class="btn btn-primary btn-sm" (click)="dialogRef.close()">Abbrechen</button>
+  <button class="btn btn-primary btn-sm" (click)="close()">Abbrechen</button>
   <button class="btn btn-primary btn-sm pull-right" (click)="print()">Drucken</button>
 </div>
\ No newline at end of file
diff --git a/src/app/dialogs/shift-change-protocol/shift-change-protocol.component.ts b/src/app/dialogs/shift-change-protocol/shift-change-protocol.component.ts
index b30935f..82ed5c3 100644
--- a/src/app/dialogs/shift-change-protocol/shift-change-protocol.component.ts
+++ b/src/app/dialogs/shift-change-protocol/shift-change-protocol.component.ts
@@ -5,6 +5,7 @@
 import { BannerMessage } from '../../common/banner-message';
 import { BannerMessageStatusEn } from '../../common/enums';
 import { NotificationService } from '../../services/notification.service';
+import { MessageService } from '../../services/message.service';
 
 @Component({
   selector: 'app-shift-change-protocol',
@@ -17,12 +18,17 @@
   notificationService: NotificationService;
   constructor(
     @Optional() public dialogRef: MdDialogRef<ShiftChangeProtocolComponent>,
-    private responsibilityService: ResponsibilityService) { }
+    private responsibilityService: ResponsibilityService,
+    public messageService: MessageService) { }
 
   setResponsibilitiesContainer(responsibilitiesContainer: TerritoryResponsibility[]) {
     this.responsibilitiesContainer = responsibilitiesContainer;
   }
-
+  
+  close() {
+    this.dialogRef.close();
+    this.messageService.deactivateMessage();
+  }
 
   print() {
     let printContents, popupWin;
diff --git a/src/app/dialogs/shift-change/shift-change.component.spec.ts b/src/app/dialogs/shift-change/shift-change.component.spec.ts
index 80de12d..1d2a3dd 100644
--- a/src/app/dialogs/shift-change/shift-change.component.spec.ts
+++ b/src/app/dialogs/shift-change/shift-change.component.spec.ts
@@ -15,6 +15,7 @@
 import { RESPONSIBILITIES } from '../../test-data/responsibilities';
 import { USERS } from '../../test-data/users';
 import { AngularMultiSelectComponent } from '../../common-components/multiselect-dropdown/multiselect.component';
+import { MessageService } from '../../services/message.service';
 
 let component: ShiftChangeComponent;
 let fixture: ComponentFixture<ShiftChangeComponent>;
@@ -38,11 +39,13 @@
   }
   let mockService: MockResponsibilityService;
   let sessionContext: SessionContext;
+  let messageService: MessageService;
 
   beforeEach(async(() => {
     mockUserService = new MockUserService();
     mockService = new MockResponsibilityService();
     sessionContext = new SessionContext();
+    messageService = new MessageService();
 
     TestBed.configureTestingModule({
       imports: [FormsModule],
@@ -50,6 +53,7 @@
         MockComponent({ selector: 'multiselect', inputs: ['data', 'settings'] })],
       providers: [{ provide: UserService, useValue: mockUserService },
       { provide: ResponsibilityService, useValue: mockService },
+      { provide: MessageService, useValue: messageService },      
       { provide: SessionContext, useValue: sessionContext }],
     }).compileComponents();
 
@@ -58,6 +62,8 @@
     component = fixture.componentInstance;
   }));
   it('should show banner info when confirmResponsibilities clicked but responsibilities changed meanwhile from other user', async(() => {
+    let hasBeenCalled = false;
+    messageService.errorOccured$.subscribe( msg => hasBeenCalled = true);
     fixture.componentInstance.responsibilityContainers = RESPONSIBILITIES;
     page = new Page();
     page.addPageElements();
@@ -65,12 +71,8 @@
       mockService.content = [];
       fixture.detectChanges();
       fixture.whenStable().then(() => {
-        let des: DebugElement[];
         fixture.detectChanges();
-        des = fixture.debugElement.queryAll(By.css('.alert-info'));
-
-        expect(des.length).toBe(1);
-
+        expect(hasBeenCalled).toBeTruthy();
       });
     });
     click(page.confirmBtn);
diff --git a/src/app/dialogs/shift-change/shift-change.component.ts b/src/app/dialogs/shift-change/shift-change.component.ts
index 229dbea..534efee 100644
--- a/src/app/dialogs/shift-change/shift-change.component.ts
+++ b/src/app/dialogs/shift-change/shift-change.component.ts
@@ -6,8 +6,8 @@
 import { UserService } from '../../services/user.service';
 import { BannerMessage } from '../../common/banner-message';
 import { User } from '../../model/user';
-import { BannerMessageStatusEn } from '../../common/enums';
-
+import { BannerMessageStatusEn, ErrorType } from '../../common/enums';
+import { MessageService, MessageDefines } from '../../services/message.service';
 @Component({
   selector: 'app-shift-change',
   templateUrl: './shift-change.component.html',
@@ -29,6 +29,7 @@
   constructor(
     @Optional() public dialogRef: MdDialogRef<ShiftChangeComponent>,
     private responsibilityService: ResponsibilityService,
+    private messageService:MessageService,
     private userService: UserService,
     private sessionContext: SessionContext) { }
 
@@ -121,10 +122,7 @@
     const self = this;
     this.responsibilityService.planResponsibilities(this.responsibilityContainers).subscribe(resps => setResp(resps),
       error => {
-        this.sessionContext.setBannerMessage(
-          BannerMessageStatusEn.error,
-          'Fehler bei Schichtübergabe.',
-          true);
+        this.messageService.emitError('Schichtübergabe', ErrorType.update);
         this.dialogRef.close();
       }
     );
@@ -132,10 +130,9 @@
       if (respCs['ret'] && respCs['ret'] === 'OK') {
         self.dialogRef.close();
       } else {
-        self.bannerMessage.isActive = true;
-        self.bannerMessage.status = BannerMessageStatusEn.info;
-        self.bannerMessage.text = 'Ihre Verantwortlichkeiten haben sich geändert. ' +
+        const text = 'Ihre Verantwortlichkeiten haben sich geändert. ' +
                 'Bitte prüfen Sie Ihre Eingaben und versuchen Sie es erneut.';
+                self.messageService.emitInfo(text);
         self.responsibilityContainers = respCs;
       }
     }
diff --git a/src/app/filter/filter.component.spec.ts b/src/app/filter/filter.component.spec.ts
index 99bbd9d..2aab8f7 100644
--- a/src/app/filter/filter.component.spec.ts
+++ b/src/app/filter/filter.component.spec.ts
@@ -92,7 +92,9 @@
   }));
 
   it('should show an error message on the banner when an error occurs while running "initFilterMatrixWithDefaults"', async(() => {
+    let hasBeenCalled = false;
     mockService.error = 'initFilterMatrixWithDefaults_ERROR';
+    messageService.errorOccured$.subscribe( msg => hasBeenCalled = true);
     fixture.detectChanges();
 
     component.ngOnChanges({
@@ -100,7 +102,7 @@
     });
 
     fixture.whenStable().then(() => {
-      expect(component.bannerMessage.text).toEqual('Es ist ein Fehler aufgetreten. Bitte kontaktieren Sie den Administrator');
+      expect(hasBeenCalled).toBeTruthy();
     });
   }));
 
diff --git a/src/app/filter/filter.component.ts b/src/app/filter/filter.component.ts
index a8045dc..cc4a49e 100644
--- a/src/app/filter/filter.component.ts
+++ b/src/app/filter/filter.component.ts
@@ -7,7 +7,7 @@
 import { ResponsibilityService } from '../services/responsibility.service';
 import { RESPONSIBILITIES } from '../test-data/responsibilities';
 import { BannerMessage } from '../common/banner-message';
-import { BannerMessageStatusEn } from '../common/enums';
+import { BannerMessageStatusEn, ErrorType } from '../common/enums';
 import { SessionContext } from '../common/session-context';
 import { Notification } from '../model/notification';
 import { FilterSelection } from '../model/filter-selection';
@@ -78,8 +78,7 @@
         this.responsibilitiesSelectionChanged();
       },
         error => {
-          console.log(error);
-          this.setError(error);
+          this.messageService.emitError('Filtermatrix', ErrorType.retrieve);
         });
     }
   }
@@ -119,8 +118,7 @@
       this.messageService.matrixFilterChanged$.emit(filterMatrix.getNumFilterList());
     },
       error => {
-        console.log(error);
-        this.setError(error);
+        this.messageService.emitError('Filtermatrix', ErrorType.retrieve);
       }
     );
   }
@@ -142,14 +140,7 @@
     }
     this.responsibilitiesSelectionChanged();
   }
-
-  private setError(errorMessage: string) {
-    this.bannerMessage.isActive = true;
-    this.bannerMessage.status = BannerMessageStatusEn.error;
-    this.bannerMessage.text = 'Es ist ein Fehler aufgetreten. Bitte kontaktieren Sie den Administrator';
-    console.log(errorMessage);
-  }
-
+  
   responsibilitiesSelectionChanged() {
     const filterMatrix: FilterMatrix = new FilterMatrix(this.responsibilityContainerMatrix);
     this.sessionContext.setfilterMatrix(filterMatrix);
diff --git a/src/app/lists/abstract-list/abstract-list.component.spec.ts b/src/app/lists/abstract-list/abstract-list.component.spec.ts
index 3d60a0e..7c349c7 100644
--- a/src/app/lists/abstract-list/abstract-list.component.spec.ts
+++ b/src/app/lists/abstract-list/abstract-list.component.spec.ts
@@ -56,11 +56,14 @@
   let sessionContext;
   let mockReminderService;
   let mockService;
+  let messageService;
 
   beforeEach(async(() => {
     sessionContext = new SessionContext();
     mockService = new MockNotificationService();
     mockReminderService = new MockReminderService();
+    messageService = new MessageService();
+
     TestBed.configureTestingModule({
       imports: [FormsModule],
       declarations: [
@@ -71,7 +74,7 @@
         MockComponent({ selector: 'input', inputs: ['options'] })
       ],
       providers: [
-        { provide: MessageService, useClass: MessageService },
+        { provide: MessageService, useValue: messageService },
         { provide: NotificationService, useValue: mockService },
         { provide: ReminderService, useValue: mockReminderService },
         { provide: SessionContext, useClass: SessionContext },
@@ -126,15 +129,16 @@
   }));
 
   it('should set error on retrieveNotificationVersions failure', async(() => {
-    const anyComp: any = component;
-    spyOn(anyComp, 'setError');
+    let hasBeenCalled = false;
+    messageService.errorOccured$.subscribe( msg => hasBeenCalled = true);
+
     mockService.error = 'VERSION_ERROR';
     component.retrieveNotificationVersions(DUMMY_NOTIFICATION);
     fixture.detectChanges();
     fixture.whenStable().then(() => {
       fixture.detectChanges();
+      expect(hasBeenCalled).toBeTruthy();
 
-      expect(anyComp.setError).toHaveBeenCalled();
     });
   }));
 
diff --git a/src/app/lists/abstract-list/abstract-list.component.ts b/src/app/lists/abstract-list/abstract-list.component.ts
index 3238750..77f1e60 100644
--- a/src/app/lists/abstract-list/abstract-list.component.ts
+++ b/src/app/lists/abstract-list/abstract-list.component.ts
@@ -6,7 +6,7 @@
 import { SessionContext } from '../../common/session-context';
 import { DaterangepickerConfig } from 'ng2-daterangepicker';
 import { Router } from '@angular/router';
-import { StatusEn } from '../../common/enums';
+import { StatusEn, BannerMessageStatusEn, ErrorType } from '../../common/enums';
 import { Globals } from '../../common/globals';
 import { TerritoryResponsibility } from '../../model/territory-responsibility';
 import { NotificationSearchFilter } from '../../model/notification-search-filter';
@@ -15,7 +15,7 @@
 import { ResponsibilityService } from '../../services/responsibility.service';
 import { User } from '../../model/user';
 import { MessageService, MessageDefines } from '../../services/message.service';
-
+import { BannerMessage } from '../../common/banner-message';
 
 declare var $: any;
 declare var toastr: any;
@@ -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;
@@ -91,7 +91,7 @@
     if (oldStayHiddenVal != null) {
       this.stayHidden = oldStayHiddenVal;
     }
-    
+
     //Subscriptions
     let subscription: any;
     this.subscriptions = new Array<any>();
@@ -110,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 = {
@@ -181,8 +181,7 @@
       newNotificationsVersions.filter(notificationsVersion => notificationsVersion.id !== notification.id);
   }
 
-  protected setError(showErr: boolean) {
-  }
+
 
   getNotifications(): void {
 
@@ -196,7 +195,7 @@
       nots => this.setNotificationVersions(nots, notification),
       error => {
         console.log(error);
-        this.setError(error);
+        this.messageService.emitError('Meldungsversionen', ErrorType.retrieve);
       }
     );
   }
@@ -291,7 +290,7 @@
         const a1  = this.getColumnValue(this.sortingState.column, a);
         const b1  = this.getColumnValue(this.sortingState.column, b);
 
-        if ( a1 == null) {
+        if (a1 == null) {
           return 1 * direction;
         }
         if (b1 == null) {
diff --git a/src/app/lists/current-reminders/current-reminders.component.ts b/src/app/lists/current-reminders/current-reminders.component.ts
index 10c1d3a..411d03b 100644
--- a/src/app/lists/current-reminders/current-reminders.component.ts
+++ b/src/app/lists/current-reminders/current-reminders.component.ts
@@ -1,7 +1,7 @@
 import { Component, OnInit } from '@angular/core';
 import { AbstractListComponent } from '../abstract-list/abstract-list.component';
 import { Notification } from '../../model/notification';
-import { StatusEn } from '../../common/enums';
+import { ErrorType } from '../../common/enums';
 import { NotificationSearchFilter } from '../../model/notification-search-filter';
 import { ReminderSearchFilter } from '../../model/reminder-search-filter';
 import * as moment from 'moment';
@@ -42,7 +42,7 @@
     },
     error => {
         console.log(error);
-        this.setError(error);
+        this.messageService.emitError('Aktuelle Erinnerungen', ErrorType.retrieve);
       }
     );
     this.showSpinner = true;
diff --git a/src/app/lists/finished-notifications/finished-notifications.component.ts b/src/app/lists/finished-notifications/finished-notifications.component.ts
index 81472c0..8fba337 100644
--- a/src/app/lists/finished-notifications/finished-notifications.component.ts
+++ b/src/app/lists/finished-notifications/finished-notifications.component.ts
@@ -1,7 +1,7 @@
 import { Component } from '@angular/core';
 import { AbstractListComponent } from '../abstract-list/abstract-list.component';
 import { Notification } from '../../model/notification';
-import { StatusEn } from '../../common/enums';
+import { StatusEn, ErrorType } from '../../common/enums';
 import { NotificationSearchFilter } from '../../model/notification-search-filter';
 import * as moment from 'moment';
 import { SortingComponent } from '../../lists/sorting/sorting.component';
@@ -23,7 +23,7 @@
     },
       error => {
         console.log(error);
-        this.setError(error);
+        this.messageService.emitError('Geschlossene Meldungen', ErrorType.retrieve);
       });
       this.showSpinner = true;
   }
diff --git a/src/app/lists/future-notifications/future-notifications.component.ts b/src/app/lists/future-notifications/future-notifications.component.ts
index 9594547..2f4eae6 100644
--- a/src/app/lists/future-notifications/future-notifications.component.ts
+++ b/src/app/lists/future-notifications/future-notifications.component.ts
@@ -1,7 +1,7 @@
 import { Component, Input } from '@angular/core';
 import { AbstractListComponent } from '../abstract-list/abstract-list.component';
 import { Notification } from '../../model/notification';
-import { StatusEn } from '../../common/enums';
+import { StatusEn, ErrorType } from '../../common/enums';
 import { SortingComponent } from '../../lists/sorting/sorting.component';
 import * as moment from 'moment';
 import { DateRange } from '../../model/date-range';
@@ -23,7 +23,7 @@
     },
       error => {
         console.log(error);
-        this.setError(error);
+        this.messageService.emitError('Zukünftige Meldungen', ErrorType.retrieve); 
       }
     );
     this.showSpinner = true;
diff --git a/src/app/lists/open-notifications/open-notifications.component.ts b/src/app/lists/open-notifications/open-notifications.component.ts
index fd3f78d..40d70a1 100644
--- a/src/app/lists/open-notifications/open-notifications.component.ts
+++ b/src/app/lists/open-notifications/open-notifications.component.ts
@@ -3,7 +3,7 @@
 import { StringToDatePipe } from '../../common-components/pipes/string-to-date.pipe';
 import { FormattedTimestampPipe } from '../../common-components/pipes/formatted-timestamp.pipe';
 import { Notification } from '../../model/notification';
-import { StatusEn } from '../../common/enums';
+import { StatusEn, ErrorType } from '../../common/enums';
 import { SortingComponent } from '../../lists/sorting/sorting.component';
 
 
@@ -23,7 +23,7 @@
     },
       error => {
         console.log(error);
-        this.setError(error);
+        this.messageService.emitError('Offene Meldungen', ErrorType.retrieve); 
       }
     );
     this.showSpinner = true;
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 013391e..8e2bd79 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
@@ -3,7 +3,7 @@
 import { StringToDatePipe } from '../../common-components/pipes/string-to-date.pipe';
 import { FormattedTimestampPipe } from '../../common-components/pipes/formatted-timestamp.pipe';
 import { Notification } from '../../model/notification';
-import { StatusEn } from '../../common/enums';
+import { StatusEn, ErrorType } from '../../common/enums';
 import { GlobalSearchFilter } from '../../model/global-search-filter';
 import { MessageService, MessageDefines } from '../../services/message.service';
 import { SearchResultService } from '../../services/search-result.service';
@@ -54,7 +54,7 @@
       error => {
         this.showSpinner = false;
         console.log(error);
-        this.setError(error);
+        this.messageService.emitError('Suchergebnisliste', ErrorType.retrieve); 
       }
       );
     this.showSpinner = true;
diff --git a/src/app/pages/overview/overview.component.html b/src/app/pages/overview/overview.component.html
index 586d2cd..b85e193 100644
--- a/src/app/pages/overview/overview.component.html
+++ b/src/app/pages/overview/overview.component.html
@@ -1,14 +1,8 @@
 <div class="overview-body" >
   <div style="min-width: 1048px; overflow: auto">
  
-    <div *ngIf="sessionContext.bannerMessage.isActive" [ngClass]="{ 'alert':true, 
-                'alert-danger': sessionContext.bannerMessage.status === bannerMessageStatus.error,
-                'alert-info': sessionContext.bannerMessage.status === bannerMessageStatus.info,
-                'alert-warning': sessionContext.bannerMessage.status === bannerMessageStatus.warning,
-                'alert-success': bannerMessageStatus.success }">
-      <div class="close" (click)="sessionContext.bannerMessage.hide()">x</div>
-      {{sessionContext.bannerMessage.text}}
-    </div>
+    
+     
     <div class="maincontent" *ngIf="responsiblitiesRetrieveDone">
       <div class="row">
         <div class="col-xs-3">
diff --git a/src/app/pages/overview/overview.component.spec.ts b/src/app/pages/overview/overview.component.spec.ts
index 0c1dd93..1c1aa32 100644
--- a/src/app/pages/overview/overview.component.spec.ts
+++ b/src/app/pages/overview/overview.component.spec.ts
@@ -34,6 +34,7 @@
 import { CurrentRemindersComponent } from '../../lists/current-reminders/current-reminders.component';
 import { OPEN_NOTIFICATIONS } from '../../test-data/notifications';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { MessageService } from '../../services/message.service';
 
 class FakeRouter {
   navigate(commands: any[]) {
@@ -55,6 +56,7 @@
   let router: Router;
   let mockNotificationService: MockNotificationService;
   let mockRespService: MockResponsibilityService;
+  let messageService: MessageService;
 
   const correctUser: User = {
     id: 44, username: 'carlo', password: 'serverPwd'
@@ -102,6 +104,7 @@
     mockNotificationService = new MockNotificationService();
     mockAuthService = new MockAuthService();
     router = new FakeRouter() as any as Router;
+    messageService = new MessageService();
 
     TestBed.overrideModule(BrowserDynamicTestingModule, {
       set: {
@@ -161,7 +164,9 @@
           selector: 'app-autocomplete',
                         inputs: ['responsibilityForwarding'], 
           outputs: ['responsibilityForwarding']
-        })
+        }),
+        MockComponent({
+          selector: 'app-message-banner'})
       ],
       providers: [
         { provide: NotificationService, useValue: mockNotificationService },
@@ -171,7 +176,8 @@
         { provide: SessionContext, useValue: sessionContext },
         { provide: DaterangepickerConfig, useClass: DaterangepickerConfig },
         { provide: ResponsibilityService, useValue: mockRespService },
-        { provide: ReminderService, useClass: ReminderService }
+        { provide: ReminderService, useClass: ReminderService },
+        { provide: MessageService, useValue: messageService }
       ],
     }).compileComponents();
 
@@ -293,7 +299,7 @@
     });
   }));
 
- it('should open a dialog to view a notification on button click', async(() => {
+  it('should open a dialog to view a notification on button click', async(() => {
 
     let entryOpend = false;
     let dialog;
diff --git a/src/app/pages/overview/overview.component.ts b/src/app/pages/overview/overview.component.ts
index dc529f4..cc4c159 100644
--- a/src/app/pages/overview/overview.component.ts
+++ b/src/app/pages/overview/overview.component.ts
@@ -13,12 +13,13 @@
 import { FinishedNotificationsComponent } from '../../lists/finished-notifications/finished-notifications.component';
 import { FutureNotificationsComponent } from '../../lists/future-notifications/future-notifications.component';
 import { OpenNotificationsComponent } from '../../lists/open-notifications/open-notifications.component';
-import { StatusEn, BannerMessageStatusEn } from '../../common/enums';
+import { ErrorType } from '../../common/enums';
+import { StatusEn } from '../../common/enums';
 import { BannerMessage } from '../../common/banner-message';
 import { TerritoryResponsibility } from '../../model/territory-responsibility';
 import { ResponsibilityService } from '../../services/responsibility.service';
 import { FilterComponent } from '../../filter/filter.component';
-
+import { MessageService, MessageDefines } from '../../services/message.service';
 import { slideInOpacity } from '../../common/router.animations';
 
 @Component({
@@ -34,7 +35,7 @@
     return '';
   }
   private dialogConfig = new MdDialogConfig();
-  private bannerMessageStatus = BannerMessageStatusEn;
+
   private notifications = null;
 
 
@@ -42,7 +43,7 @@
   user: User = null;
   responsiblitiesRetrieveDone = false;
 
-  bannerMessage: BannerMessage = new BannerMessage();
+
   responsibilitiesContainer: TerritoryResponsibility[];
   shiftChangeClosed = false;
   shiftChangeOpened = false;
@@ -51,7 +52,8 @@
   constructor(
     public dialog: MdDialog,
     public sessionContext: SessionContext,
-    private responsibilityService: ResponsibilityService
+    private responsibilityService: ResponsibilityService,
+    private messageService: MessageService
   ) { }
 
   ngOnInit() {
@@ -73,14 +75,14 @@
         },
           error => {
             console.log(error);
-            this.setError(error);
+            this.messageService.emitError('Verantwortlichkeiten', ErrorType.retrieve);
             this.responsiblitiesRetrieveDone = true;
           });
       }
     },
       error => {
         console.log(error);
-        this.setError(error);
+        this.messageService.emitError('Verantwortlichkeiten', ErrorType.retrieve);
         this.responsiblitiesRetrieveDone = true;
       }
     );
@@ -190,10 +192,5 @@
     return this.user && this.user.specialUser;
   }
 
-  private setError(errorMessage: string) {
-    this.bannerMessage.isActive = true;
-    this.bannerMessage.status = BannerMessageStatusEn.error;
-    this.bannerMessage.text = 'Es ist ein Fehler aufgetreten. Bitte kontaktieren Sie den Administrator';
-    console.log(errorMessage);
-  }
+
 }
diff --git a/src/app/pages/reminder/reminder.component.spec.ts b/src/app/pages/reminder/reminder.component.spec.ts
index 2fd80da..66730c0 100644
--- a/src/app/pages/reminder/reminder.component.spec.ts
+++ b/src/app/pages/reminder/reminder.component.spec.ts
@@ -185,6 +185,9 @@
         MockComponent({
           selector: 'app-future-notifications', inputs: [ 'responsiblitySelection',
             'withCheckboxes', 'withEditButtons', 'isCollapsible', 'stayHidden']
+        }),
+        MockComponent({
+          selector: 'app-message-banner'
         })
       ],
       providers: [
@@ -241,7 +244,7 @@
     });
   }));
 
- it('should open a dialog to view a notification on button click', async(() => {
+  it('should open a dialog to view a notification on button click', async(() => {
     
     let entryOpend = false;
     let dialog;
diff --git a/src/app/pages/reminder/reminder.component.ts b/src/app/pages/reminder/reminder.component.ts
index 9ebbe68..1504b71 100644
--- a/src/app/pages/reminder/reminder.component.ts
+++ b/src/app/pages/reminder/reminder.component.ts
@@ -14,7 +14,7 @@
 import { FilterComponent } from '../../filter/filter.component';
 import 'rxjs/add/observable/throw';
 import 'rxjs/add/observable/timer';
-import {  slideInOpacity } from '../../common/router.animations';
+import { slideInOpacity } from '../../common/router.animations';
 
 @Component({
   selector: 'app-reminder',
@@ -32,7 +32,7 @@
   public user: User = null;
   responsiblitiesRetrieveDone = false;
   public bannerMessage: BannerMessage = new BannerMessage();
-  responsibilitiesContainer: TerritoryResponsibility[];  
+  responsibilitiesContainer: TerritoryResponsibility[];
   shiftChangeClosed = false;
   shiftChangeOpened = false;
   filterExpanded = false;
@@ -41,7 +41,7 @@
     private router: Router,
     public dialog: MdDialog,
     public sessionContext: SessionContext,
-    private responsibilityService: ResponsibilityService    
+    private responsibilityService: ResponsibilityService
   ) { }
 
   ngOnInit() {
@@ -68,12 +68,4 @@
     dialogRef.afterClosed().subscribe(result => {
     });
   }
-
-  private setError(errorMessage: string) {
-    this.bannerMessage.isActive = true;
-    this.bannerMessage.status = BannerMessageStatusEn.error;
-    this.bannerMessage.text = 'Es ist ein Fehler aufgetreten. Bitte kontaktieren Sie den Administrator';
-    console.log(errorMessage);
-  }
-
-  }
+}
diff --git a/src/app/pages/search/search.component.spec.ts b/src/app/pages/search/search.component.spec.ts
index cf4c789..92d7a3c 100644
--- a/src/app/pages/search/search.component.spec.ts
+++ b/src/app/pages/search/search.component.spec.ts
@@ -193,6 +193,9 @@
         MockComponent({
           selector: 'app-future-notifications', inputs: ['responsiblitySelection',
             'withCheckboxes', 'withEditButtons', 'isCollapsible', 'stayHidden']
+        }),
+        MockComponent({
+          selector: 'app-message-banner'
         })
       ],
       providers: [
@@ -230,7 +233,6 @@
   }));
 
   it('should should navigate to Overview after click at homebbutton', (() => {
-    //TODO 
     spyOn(component, 'goToOverview').and.callThrough();
 
     fixture.detectChanges();
@@ -337,7 +339,6 @@
   it('should call search function after search button pressed', async(() => {
     spyOn(component, 'search').and.callThrough();
     fixture.detectChanges();
-    //buttons.forEach((button: HTMLButtonElement) => {
     fixture.whenStable().then(() => {
       const currentSearchFilter: GlobalSearchFilter = new GlobalSearchFilter();
       currentSearchFilter.searchString = 'Test';
@@ -353,21 +354,8 @@
       let de: DebugElement;
 
       de = fixture.debugElement.queryAll(By.css('form button:not(#deletesearch)'))[1];
-      //de.nativeElement.click();
       click(de);
       fixture.detectChanges();
-      /*
-      const buttons: DebugElement[] = fixture.debugElement.nativeElement.querySelectorAll('form button:not(#deletesearch');
-      //const button[] = fixture.debugElement.nativeElement.querySelectorAll('form button:not(#deletesearch)');
-      
-        buttons[0].nativeElement.click();
-        fixture.detectChanges();
-        expect(component.search).toHaveBeenCalled();
-        
-        //console.log(buttons[1].nativeElement);
-        //buttons[1].nativeElement.click();
-        */
-
       fixture.whenStable().then(() => {
         fixture.detectChanges();
         expect(component.search).toHaveBeenCalled();
@@ -376,8 +364,5 @@
 
       });
     });
-
-    //});
-
   }));
 });
diff --git a/src/app/pages/shift-change-overview/shift-change-overview.component.ts b/src/app/pages/shift-change-overview/shift-change-overview.component.ts
index d0fa14a..9b18592 100644
--- a/src/app/pages/shift-change-overview/shift-change-overview.component.ts
+++ b/src/app/pages/shift-change-overview/shift-change-overview.component.ts
@@ -4,6 +4,9 @@
 import { ResponsibilityService } from '../../services/responsibility.service';
 import { TerritoryResponsibility } from '../../model/territory-responsibility';
 import {  slideInOpacity } from '../../common/router.animations';
+import { BannerMessageStatusEn, ErrorType } from '../../common/enums';
+
+import { MessageService, MessageDefines } from '../../services/message.service';
 
 @Component({
   selector: 'app-shift-change-overview',
@@ -26,6 +29,7 @@
   }
 
   constructor(
+    private messageService: MessageService,
     private router: Router,
     public sessionContext: SessionContext,
     private responsibilityService: ResponsibilityService) { }
@@ -38,7 +42,7 @@
       this.responsibilitiesContainer = resp;
     },
       error => {
-        console.log(error);
+        this.messageService.emitError('Verantwortlichkeiten', ErrorType.retrieve);
       });
   }
 
diff --git a/src/app/services/authentication.service.spec.ts b/src/app/services/authentication.service.spec.ts
index 26787a6..c64ddc3 100644
--- a/src/app/services/authentication.service.spec.ts
+++ b/src/app/services/authentication.service.spec.ts
@@ -14,21 +14,24 @@
 import { User } from '../model/user';
 import { SessionContext } from '../common/session-context';
 import { Globals } from '../common/globals';
+import { MessageService } from '../services/message.service';
 
 describe('Http-AuthenticationService (mockBackend)', () => {
   let sessionContext: SessionContext;
-
+  let messageService: MessageService;
   beforeEach( async(() => {
     TestBed.configureTestingModule({
       imports: [ HttpModule ],
       providers: [
         AuthenticationService,
         { provide: XHRBackend, useClass: MockBackend },
-        SessionContext
+        SessionContext,
+        MessageService
       ]
     })
     .compileComponents();
     sessionContext = new SessionContext();
+    messageService = new MessageService();
   }));
 
   it('can instantiate service when inject service',
@@ -40,7 +43,7 @@
 
   it('can instantiate service with "new"', inject([Http], (http: Http) => {
     expect(http).not.toBeNull('http should be provided');
-    const service = new AuthenticationService(http, sessionContext );
+    const service = new AuthenticationService(http, messageService, sessionContext );
     expect(service instanceof AuthenticationService).toBe(true, 'new service should be ok');
   }));
 
@@ -61,7 +64,7 @@
 
     beforeEach(inject([Http, XHRBackend], (http: Http, be: MockBackend) => {
       backend = be;
-      service = new AuthenticationService(http, sessionContext);
+      service = new AuthenticationService(http, messageService, sessionContext);
       const successHeaders: Headers = new Headers();
       successHeaders.append(Globals.SESSION_TOKEN_TAG, 'SuperVALID!');
       const options = new ResponseOptions({status: 200, body: fakeUser, headers: successHeaders} );
@@ -82,7 +85,8 @@
     })));
 
     it('should treat 404 as an Observable error', async(inject([], () => {
-        const resp = new Response(new ResponseOptions({status: 404}));
+        const resp = new Response(new ResponseOptions({status: 404, body: {} }));
+        
         backend.connections.subscribe((c: MockConnection) => c.mockRespond(resp));
 
         service.login(fakeCreds)
diff --git a/src/app/services/authentication.service.ts b/src/app/services/authentication.service.ts
index 1621aa7..15990f8 100644
--- a/src/app/services/authentication.service.ts
+++ b/src/app/services/authentication.service.ts
@@ -9,24 +9,28 @@
 import { User } from '../model/user';
 import { LoginCredentials } from '../model/login-credentials';
 
+import { MessageService } from './message.service';
+
 @Injectable()
 export class AuthenticationService extends BaseHttpService {
 
     constructor(
         private _http: Http,
-        private _sessionContext: SessionContext ) {
-    super( );
+        public messageService: MessageService,
+        private _sessionContext: SessionContext) {
+        super(messageService);
     }
 
     public login(creds: LoginCredentials): Observable<any> {
         const headers = new Headers();
-        this.createCommonHeaders(headers, this._sessionContext );
+        this.createCommonHeaders(headers, this._sessionContext);
         return this._http.post(super.getBaseUrl() + '/login', creds, { headers: headers })
-            .map( res => {
-                super.extractSessionId( res.headers, this._sessionContext);                  
-                return super.extractData( res, this._sessionContext );
-              }  )
-            .catch( super.handleErrorPromise );
+            .map(res => {
+                super.extractSessionId(res.headers, this._sessionContext);
+                return super.extractData(res, this._sessionContext);
+            })
+            .catch((error) => {
+                return super.handleErrorPromise(error);
+            });
     }
-
 }
diff --git a/src/app/services/base-data.service.spec.ts b/src/app/services/base-data.service.spec.ts
index 33c6332..3e98bf9 100644
--- a/src/app/services/base-data.service.spec.ts
+++ b/src/app/services/base-data.service.spec.ts
@@ -18,21 +18,24 @@
 import { GRIDTERRITORIES } from '../test-data/gridterritories';
 import { SessionContext } from '../common/session-context';
 import { Globals } from '../common/globals';
+import { MessageService } from '../services/message.service';
 
 describe('Http-BaseDataService (mockBackend)', () => {
   let sessionContext: SessionContext;
-
+let messageService:MessageService;
   beforeEach( async(() => {
     TestBed.configureTestingModule({
       imports: [ HttpModule ],
       providers: [
         BaseDataService,
         { provide: XHRBackend, useClass: MockBackend },
-        SessionContext
+        SessionContext,
+        MessageService
       ]
     })
     .compileComponents();
     sessionContext = new SessionContext();
+    messageService= new MessageService();
   }));
 
   it('can instantiate service when inject service',
@@ -42,7 +45,7 @@
 
   it('can instantiate service with "new"', inject([Http], (http: Http) => {
     expect(http).not.toBeNull('http should be provided');
-    const service = new BaseDataService(http, sessionContext );
+    const service = new BaseDataService(http, messageService, sessionContext );
     expect(service instanceof BaseDataService).toBe(true, 'new service should be ok');
   }));
 
@@ -62,7 +65,7 @@
 
     beforeEach(inject([Http, XHRBackend], (http: Http, be: MockBackend) => {
       backend = be;
-      service = new BaseDataService(http, sessionContext);
+      service = new BaseDataService(http, messageService, sessionContext);
       fakeBranches = BRANCHES;
       const options = new ResponseOptions({status: 200, body: fakeBranches});
       response = new Response(options);
@@ -103,7 +106,7 @@
 
     beforeEach(inject([Http, XHRBackend], (http: Http, be: MockBackend) => {
       backend = be;
-      service = new BaseDataService(http, sessionContext);
+      service = new BaseDataService(http, messageService, sessionContext);
       fakeGridTerritories = GRIDTERRITORIES;
       const options = new ResponseOptions({status: 200, body: fakeGridTerritories});
       response = new Response(options);
@@ -144,7 +147,7 @@
 
     beforeEach(inject([Http, XHRBackend], (http: Http, be: MockBackend) => {
       backend = be;
-      service = new BaseDataService(http, sessionContext);
+      service = new BaseDataService(http, messageService, sessionContext);
       fakeStatuses = STATUSES;
       const options = new ResponseOptions({status: 200, body: fakeStatuses});
       response = new Response(options);
diff --git a/src/app/services/base-data.service.ts b/src/app/services/base-data.service.ts
index 4dac1b2..4d0a6e8 100644
--- a/src/app/services/base-data.service.ts
+++ b/src/app/services/base-data.service.ts
@@ -13,14 +13,16 @@
 import { GridTerritory } from '../model/gridterritory';
 // import { NotificationHistoryExpansionState } from '../model/notificationhistoryexpansionstate';
 import { GRIDTERRITORIES } from '../test-data/gridterritories';
+import { MessageService } from './message.service';
 
 @Injectable()
 export class BaseDataService extends BaseHttpService {
 
   constructor(
     private _http: Http,
+    public messageService: MessageService,
     private _sessionContext: SessionContext) {
-    super();
+    super(messageService);
   }
 
   public getStatuses(): Observable<Status[]> {
@@ -30,7 +32,7 @@
 
     return this._http.get(url, { headers: headers })
       .map(res => super.extractData(res, this._sessionContext))
-      .catch(super.handleErrorPromise);
+      .catch((error) => { return super.handleErrorPromise(error); });
   }
 
   public getBranches(): Observable<Branch[]> {
@@ -40,17 +42,17 @@
 
     return this._http.get(url, { headers: headers })
       .map(res => super.extractData(res, this._sessionContext))
-      .catch(super.handleErrorPromise);
+      .catch((error) => { return super.handleErrorPromise(error); });
   }
 
-   public getGridTerritories(): Observable<GridTerritory[]> {
+  public getGridTerritories(): Observable<GridTerritory[]> {
     const headers = new Headers();
     const url = super.getBaseUrl() + '/gridTerritories/';
     this.createCommonHeaders(headers, this._sessionContext);
 
     return this._http.get(url, { headers: headers })
       .map(res => super.extractData(res, this._sessionContext))
-      .catch(super.handleErrorPromise);
+      .catch((error) => { return super.handleErrorPromise(error); });
   }
   /* 
   public getNotificationHistoryExpansionStates(): Observable<NotificationHistoryExpansionState[]> {
@@ -59,7 +61,7 @@
     this.createCommonHeaders(headers, this._sessionContext);
     return this._http.get(url, { headers: headers })
       .map(res => super.extractData(res, this._sessionContext))
-      .catch(super.handleErrorPromise);
+       .catch((error) => { return super.handleErrorPromise(error); });
   }
   */
 }
diff --git a/src/app/services/base-http.service.spec.ts b/src/app/services/base-http.service.spec.ts
index ac693a5..ad832df 100644
--- a/src/app/services/base-http.service.spec.ts
+++ b/src/app/services/base-http.service.spec.ts
@@ -4,12 +4,12 @@
 import { BaseHttpService } from './base-http.service';
 import { SessionContext } from '../common/session-context';
 import { Globals } from '../common/globals';
-
+import { MessageService } from '../services/message.service';
 describe('BaseHttpService', () => {
   const _sc: SessionContext = new SessionContext();
   class BaseHttpServiceMock extends BaseHttpService {
-    public constructor( ) {
-      super( );
+    public constructor( public messageService:MessageService ) {
+      super(messageService );
     }
     public getBaseUrl(): string {
       return super.getBaseUrl();
@@ -22,7 +22,7 @@
     });
 
     it( 'should deliver the BaseUrl', () => {
-      const bhs = new BaseHttpServiceMock();
+      const bhs = new BaseHttpServiceMock(this.messageService);
       expect( bhs.getBaseUrl()).toBe(Globals.BASE_URL);
     });
   });
diff --git a/src/app/services/base-http.service.ts b/src/app/services/base-http.service.ts
index c2b954b..a166310 100644
--- a/src/app/services/base-http.service.ts
+++ b/src/app/services/base-http.service.ts
@@ -7,18 +7,21 @@
 import { UUID } from 'angular2-uuid';
 import { Globals } from '../common/globals';
 import { SessionContext } from '../common/session-context';
+import { MessageService } from './message.service';
+import { BannerMessage } from '../common/banner-message';
+import { ErrorType } from '../common/enums';
 
 @Injectable()
 export class BaseHttpService {
 
-  constructor(  ) {
-  }
+    constructor(protected messageService: MessageService) {
+    }
 
-  protected getBaseUrl(): string {
-      return Globals.BASE_URL;
-  }
+    protected getBaseUrl(): string {
+        return Globals.BASE_URL;
+    }
 
-  protected  createCommonHeaders(headers: Headers, sessionContext: SessionContext) {
+    protected createCommonHeaders(headers: Headers, sessionContext: SessionContext) {
         headers.append('Accept', 'application/json');
         headers.append('content-Type', 'application/json');
         headers.append('Access-Control-Allow-Origin', '*');
@@ -26,12 +29,12 @@
             headers.set('Authorization', 'Bearer ' + sessionContext.oauthService.getAccessToken());
         }
         headers.append('unique-TAN', UUID.UUID());
-        if ( sessionContext.getCurrSessionId() !== null ) {
+        if (sessionContext.getCurrSessionId() !== null) {
             headers.append(Globals.SESSION_TOKEN_TAG, sessionContext.getCurrSessionId());
         }
-  }
+    }
 
-  protected extractData(res: Response, _sessContext: SessionContext ) {
+    protected extractData(res: Response, _sessContext: SessionContext) {
         // let the interested 'people' know about our result
         _sessContext.centralHttpResultCode$.emit( res.status );
     
@@ -40,29 +43,38 @@
         }
     
         const data = res.json();
-        return data || { };
+        return data || {};
     }
 
-  protected extractSessionId( headers: Headers, sessionContext: SessionContext ) {
-        if ( headers != null ) {
-            if ( headers.has( Globals.SESSION_TOKEN_TAG ) ) {
-                sessionContext.setCurrSessionId(headers.get( Globals.SESSION_TOKEN_TAG ));
+    protected extractSessionId(headers: Headers, sessionContext: SessionContext) {
+        if (headers != null) {
+            if (headers.has(Globals.SESSION_TOKEN_TAG)) {
+                sessionContext.setCurrSessionId(headers.get(Globals.SESSION_TOKEN_TAG));
             }
         }
-  }
+    }
 
-  protected handleErrorPromise(error: any)  {
+    protected handleErrorPromise(error: any) {
         // In a real world app, we might use a remote logging infrastructure
         let errMsg: string;
+        let body = null;
+
         if (error instanceof Response) {
-            const body = error.json() || '';
+            body = error.json() || '';            
             const err = body.error || JSON.stringify(body);
             errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
         } else {
             errMsg = error.message ? error.message : error.toString();
         }
+
+        if (body !== null && body.errorCode === 401 && this.messageService) {
+            const bannerMessage = new BannerMessage();
+            bannerMessage.errorType = ErrorType.authentication;
+            this.messageService.errorOccured$.emit(bannerMessage);
+        }
+
         console.error(errMsg);
         return Observable.throw(errMsg);
-    }  
+    }
 
 }
diff --git a/src/app/services/http-response-interceptor.service.spec.ts b/src/app/services/http-response-interceptor.service.spec.ts
new file mode 100644
index 0000000..51715f8
--- /dev/null
+++ b/src/app/services/http-response-interceptor.service.spec.ts
@@ -0,0 +1,13 @@
+import { TestBed, inject } from '@angular/core/testing';
+
+import { HttpResponseInterceptorService } from './http-response-interceptor.service';
+
+describe('HttpResponseInterceptorService', () => {
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      providers: [HttpResponseInterceptorService]
+    });
+  });
+
+
+});
diff --git a/src/app/services/http-response-interceptor.service.ts b/src/app/services/http-response-interceptor.service.ts
new file mode 100644
index 0000000..0f83ecd
--- /dev/null
+++ b/src/app/services/http-response-interceptor.service.ts
@@ -0,0 +1,30 @@
+import { Injectable } from '@angular/core';
+import { Router } from '@angular/router';
+import { MessageService, MessageDefines } from '../services/message.service';
+import { BannerMessage } from '../common/banner-message';
+import { SessionContext } from '../common/session-context';
+import { BannerMessageStatusEn, ErrorType } from '../common/enums';
+
+@Injectable()
+export class HttpResponseInterceptorService {
+
+  constructor(
+    private messageService: MessageService,
+    private router: Router,
+    private sessionContext: SessionContext) { this.init(); }
+
+  private init(): void {
+    this.subscribeToMessageService();
+  }
+
+  private subscribeToMessageService() {
+    this.messageService.errorOccured$.subscribe((errorMessage: BannerMessage) => {
+      if ((errorMessage.errorType !== ErrorType.authentication)) {
+        this.sessionContext.bannerMessage = errorMessage;
+
+      } else {
+        this.router.navigate(['login']);
+      }
+    });
+  }
+}
diff --git a/src/app/services/import.service.spec.ts b/src/app/services/import.service.spec.ts
index 3652cf5..1ed0130 100644
--- a/src/app/services/import.service.spec.ts
+++ b/src/app/services/import.service.spec.ts
@@ -10,6 +10,7 @@
 import 'rxjs/add/operator/toPromise';
 
 import { ImportService } from './import.service';
+import { MessageService } from './message.service';
 import { NotificationFileModel } from '../model/file-model';
 import { SessionContext } from '../common/session-context';
 import { Globals } from '../common/globals';
@@ -17,6 +18,7 @@
 describe('Http-ImportService (mockBackend)', () => {
 
   let sessionContext: SessionContext;
+  let messageService: MessageService;
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
@@ -24,7 +26,8 @@
       providers: [
         ImportService,
         { provide: XHRBackend, useClass: MockBackend },
-        SessionContext
+        SessionContext,
+        MessageService
       ]
     })
       .compileComponents();
@@ -38,7 +41,7 @@
 
   it('can instantiate service with "new"', inject([Http], (http: Http) => {
     expect(http).not.toBeNull('http should be provided');
-    const service = new ImportService(http, sessionContext);
+    const service = new ImportService(http, sessionContext, messageService);
     expect(service instanceof ImportService).toBe(true, 'new service should be ok');
   }));
 
diff --git a/src/app/services/import.service.ts b/src/app/services/import.service.ts
index dfcebee..92d08d8 100644
--- a/src/app/services/import.service.ts
+++ b/src/app/services/import.service.ts
@@ -10,25 +10,25 @@
 import { SessionContext } from '../common/session-context';
 import { Globals } from '../common/globals';
 import { BaseHttpService } from './base-http.service';
-
+import { MessageService } from './message.service';
 import { IMPORT_NOTIFICATION_FILES } from './../test-data/import-notification-files';
 import { ONE_IMPORT_NOTIFICATION_FILE } from './../test-data/import-notification-files';
-
 @Injectable()
 export class ImportService extends BaseHttpService {
 
     constructor(
         private _http: Http,
-        private _sessionContext: SessionContext) {
-        super();
+        private _sessionContext: SessionContext,
+        protected messageService: MessageService) {
+        super(messageService);
     }
 
-    public getImportFiles(): Observable<NotificationFileModel[]> {
+   public getImportFiles(): Observable<NotificationFileModel[]> {
 
         const headers = new Headers();
         const url = super.getBaseUrl() + '/getImportFiles/';
         this.createCommonHeaders(headers, this._sessionContext);
-
+        
         return this._http.get(url, { headers: headers })
              .map(res => super.extractData(res, this._sessionContext))
              .catch(super.handleErrorPromise);
diff --git a/src/app/services/jobs/base-data-loader.service.ts b/src/app/services/jobs/base-data-loader.service.ts
index b2f9ff1..94291e7 100644
--- a/src/app/services/jobs/base-data-loader.service.ts
+++ b/src/app/services/jobs/base-data-loader.service.ts
@@ -7,16 +7,17 @@
 @Injectable()
 export class BaseDataLoaderService {
 
-  constructor( 
+  constructor(
     private baseDataService: BaseDataService,
     private msgService: MessageService,
     private sessionContext: SessionContext
   ) {
-    this.msgService.loginLogoff$.subscribe( msg => this.onLoginLogoff( msg ) );
+    this.msgService.loginLogoff$.subscribe(msg => this.onLoginLogoff(msg));
   }
 
-  onLoginLogoff( msg: string ): void {
-    if ( msg === MessageDefines.MSG_LOG_IN_SUCCEEDED ) {
+  onLoginLogoff(msg: string): void {
+    this.sessionContext.initBannerMessage();
+    if (msg === MessageDefines.MSG_LOG_IN_SUCCEEDED) {
       this.loadBaseData();
     }
   }
diff --git a/src/app/services/message.service.ts b/src/app/services/message.service.ts
index 2091115..acbd35f 100644
--- a/src/app/services/message.service.ts
+++ b/src/app/services/message.service.ts
@@ -1,17 +1,65 @@
 import { Injectable, EventEmitter } from '@angular/core';
+import { StatusEn, BannerMessageStatusEn, ErrorType } from '../common/enums';
+
+import { BannerMessage } from '../common/banner-message';
 
 export class MessageDefines {
-    static MSG_LOG_IN_SUCCEEDED = 'LOG_IN_SUCCEEDED';
-    static MSG_LOG_OFF = 'LOG_OFF';
+  static MSG_LOG_IN_SUCCEEDED = 'LOG_IN_SUCCEEDED';
+  static MSG_LOG_OFF = 'LOG_OFF';
 }
-  
+
 @Injectable()
 export class MessageService {
 
-  public loginLogoff$: EventEmitter< string > = new EventEmitter< string >();
+  public loginLogoff$: EventEmitter<string> = new EventEmitter<string>();
 
-  public matrixFilterChanged$: EventEmitter<Number[]> = new EventEmitter< Number[] >();
+  public matrixFilterChanged$: EventEmitter<Number[]> = new EventEmitter<Number[]>();
+  public errorOccured$: EventEmitter<BannerMessage> = new EventEmitter<BannerMessage>();
+  public emitError(location: string, errorType?: ErrorType) {
+    let message = '';
+    switch (errorType) {
+      case ErrorType.create:
+        message = 'Fehler beim Erstellen des Objekts ' + location + '. Bitte kontaktieren Sie den Administrator';
+        break;
 
+      case ErrorType.update:
+        message = 'Fehler beim Aktualiseren des Objekts ' + location + '. Bitte kontaktieren Sie den Administrator';
+        break;
+
+      case ErrorType.delete:
+        message = 'Fehler beim Löschen des Objekts ' + location + '. Bitte kontaktieren Sie den Administrator';
+        break;
+      case ErrorType.retrieve:
+        message = 'Fehler beim Zugriff auf  ' + location + '. Bitte kontaktieren Sie den Administrator';
+
+        break;
+      default:
+        message = 'Es ist ein unbekannter Fehler aufgetreten. Bitte kontaktieren Sie den Administrator';
+        break;
+    }
+    this.emitMessage(message, BannerMessageStatusEn.error);
+  }
+
+  public emitInfo(errorMessage: string) {
+    this.emitMessage(errorMessage, BannerMessageStatusEn.info);
+  }
+
+  public emitWarning(errorMessage: string) {
+    this.emitMessage(errorMessage, BannerMessageStatusEn.warning);
+  }
+  public deactivateMessage() {
+    const bannerMessage: BannerMessage = new BannerMessage();
+    bannerMessage.isActive = false;
+    this.errorOccured$.emit(bannerMessage);
+  }
+  private emitMessage(message: string, status: BannerMessageStatusEn) {
+    const bannerMessage: BannerMessage = new BannerMessage();
+    bannerMessage.isActive = true;
+    bannerMessage.status = status;
+    bannerMessage.text = message;
+    this.errorOccured$.emit(bannerMessage);
+    console.log(message);
+  }
   constructor() { }
 
 }
diff --git a/src/app/services/notification.service.spec.ts b/src/app/services/notification.service.spec.ts
index be4d96d..1f3d96d 100644
--- a/src/app/services/notification.service.spec.ts
+++ b/src/app/services/notification.service.spec.ts
@@ -16,32 +16,34 @@
 import { DUMMY_CREATED_NOTIFICATION, DUMMY_UPDATED_NOTIFICATION } from '../test-data/notifications';
 import { SessionContext } from '../common/session-context';
 import { Globals } from '../common/globals';
+import { MessageService } from '../services/message.service';
 
 describe('Http-NotificationService (mockBackend)', () => {
-
+  let messageService: MessageService;
   let sessionContext: SessionContext;
 
   beforeEach(async(() => {
+    sessionContext = new SessionContext();
+    messageService = new MessageService();
     TestBed.configureTestingModule({
       imports: [HttpModule],
       providers: [
+        { provide: MessageService, useValue: messageService }, 
         NotificationService,
         { provide: XHRBackend, useClass: MockBackend },
-        SessionContext
+       
+        SessionContext,
+        MessageService
       ]
     })
       .compileComponents();
     sessionContext = new SessionContext();
+   
   }));
 
-  it('can instantiate service when inject service',
-    inject([NotificationService], (service: NotificationService) => {
-      expect(service instanceof NotificationService).toBe(true);
-    }));
-
   it('can instantiate service with "new"', inject([Http], (http: Http) => {
     expect(http).not.toBeNull('http should be provided');
-    const service = new NotificationService(http, sessionContext);
+    const service = new NotificationService(http, sessionContext, messageService);
     expect(service instanceof NotificationService).toBe(true, 'new service should be ok');
   }));
 
@@ -62,7 +64,7 @@
     const fakeUpdateNotificationResps: Notification = DUMMY_UPDATED_NOTIFICATION;
     beforeEach(inject([Http, XHRBackend], (http: Http, be: MockBackend) => {
       backend = be;
-      service = new NotificationService(http, sessionContext);
+      service = new NotificationService(http, sessionContext, messageService);
       const successHeaders: Headers = new Headers();
       successHeaders.append(Globals.SESSION_TOKEN_TAG, 'SuperVALID!');
       const updateNotificationOptions = new ResponseOptions({ status: 200, body: fakeUpdateNotificationResps, headers: successHeaders });
@@ -135,7 +137,7 @@
         }
       }
 
-      const serviceMock = new MockNotificationService(null, null);
+      const serviceMock = new MockNotificationService(null, null, messageService);
       serviceMock.getAllNotifications();
       expect(serviceMock.lastCall).toBe(NotificationService.ALL);
       serviceMock.getCurrentNotifications();
@@ -154,10 +156,10 @@
     let service: NotificationService;
     let response: Response;
     const fakeNotifications: Notification[] = CURRENT_NOTIFICATIONS;
-    const fakeNot = fakeNotifications[0]; 
+    const fakeNot = fakeNotifications[0];
     beforeEach(inject([Http, XHRBackend], (http: Http, be: MockBackend) => {
       backend = be;
-      service = new NotificationService(http, sessionContext);
+      service = new NotificationService(http, sessionContext, messageService);
       const successHeaders: Headers = new Headers();
       successHeaders.append(Globals.SESSION_TOKEN_TAG, 'SuperVALID!');
       const options = new ResponseOptions({ status: 200, body: fakeNot, headers: successHeaders });
@@ -203,7 +205,7 @@
         }
       }
 
-      const serviceMock = new MockNotificationService(null, null);
+      const serviceMock = new MockNotificationService(null, null, messageService);
       serviceMock.getAllNotifications();
       expect(serviceMock.lastCall).toBe(NotificationService.ALL);
       serviceMock.getCurrentNotifications();
@@ -215,7 +217,7 @@
       serviceMock.getFinishedNotifications(null);
       expect(serviceMock.lastCall).toBe(NotificationService.FINISHED);
     });
-  });  
+  });
 
   describe('when getNotificationVersions()', () => {
     let backend: MockBackend;
@@ -224,7 +226,7 @@
     const fakeNotifications: Notification[] = CURRENT_NOTIFICATIONS;
     beforeEach(inject([Http, XHRBackend], (http: Http, be: MockBackend) => {
       backend = be;
-      service = new NotificationService(http, sessionContext);
+      service = new NotificationService(http, sessionContext, messageService);
       const successHeaders: Headers = new Headers();
       successHeaders.append(Globals.SESSION_TOKEN_TAG, 'SuperVALID!');
       const options = new ResponseOptions({ status: 200, body: fakeNotifications, headers: successHeaders });
@@ -261,6 +263,6 @@
         })
         .toPromise();
     })));
-  });    
-  
+  });
+
 });
diff --git a/src/app/services/notification.service.ts b/src/app/services/notification.service.ts
index 52cc6e6..4836833 100644
--- a/src/app/services/notification.service.ts
+++ b/src/app/services/notification.service.ts
@@ -6,7 +6,7 @@
 import 'rxjs/add/observable/throw';
 
 import { NotificationSearchFilter } from '../model/notification-search-filter';
-
+import { MessageService } from './message.service';
 import { SessionContext } from '../common/session-context';
 import { BaseHttpService } from './base-http.service';
 import { Notification } from '../model/notification';
@@ -26,9 +26,10 @@
 
   constructor(
     private _http: Http,
-    private _sessionContext: SessionContext
+    private _sessionContext: SessionContext,
+    public messageService: MessageService,
   ) {
-    super();
+    super(messageService);
     this.itemAdded$ = new EventEmitter();
     this.itemChanged$ = new EventEmitter();
 
@@ -38,10 +39,12 @@
     const headers = new Headers();
     const url = super.getBaseUrl() + '/notifications/' + notificationType;
     const filter = notificationSearchFilter || {};
-    this.createCommonHeaders(headers, this._sessionContext);  
+    this.createCommonHeaders(headers, this._sessionContext);
     return this._http.post(url, JSON.stringify(filter), { headers: headers })
       .map(res => super.extractData(res, this._sessionContext))
-      .catch(super.handleErrorPromise);
+      .catch(error => {
+        return super.handleErrorPromise(error);
+      });
   }
 
   public getNotification(notificationId: number): Observable<Notification> {
@@ -50,7 +53,9 @@
     this.createCommonHeaders(headers, this._sessionContext);
     return this._http.get(url, { headers: headers })
       .map(res => super.extractData(res, this._sessionContext))
-      .catch(super.handleErrorPromise);
+      .catch((error) => {
+        return super.handleErrorPromise(error);
+      });
   }
 
   public getAssignedUserSuggestions(): Observable<string[]> {
@@ -58,7 +63,9 @@
     this.createCommonHeaders(headers, this._sessionContext);
     return this._http.get(super.getBaseUrl() + '/assignedUserSuggestions/', { headers: headers })
       .map(res => super.extractData(res, this._sessionContext))
-      .catch(super.handleErrorPromise);
+      .catch((error) => {
+        return super.handleErrorPromise(error);
+      });
   }
 
   public getNotificationVersions(incidetId: number): Observable<Notification[]> {
@@ -66,7 +73,9 @@
     this.createCommonHeaders(headers, this._sessionContext);
     return this._http.get(super.getBaseUrl() + '/notificationsByIncident/' + incidetId, { headers: headers })
       .map(res => super.extractData(res, this._sessionContext))
-      .catch(super.handleErrorPromise);
+      .catch((error) => {
+        return super.handleErrorPromise(error);
+      });
   }
 
   public createNotification(notification: Notification): Observable<Notification> {
@@ -81,7 +90,9 @@
         this.itemAdded$.emit(newNotification);
         return newNotification;
       })
-      .catch(super.handleErrorPromise);
+      .catch((error) => { 
+        return super.handleErrorPromise(error); 
+      });
   }
 
   public updateNotification(notification: Notification): Observable<Notification> {
@@ -96,7 +107,9 @@
         this.itemChanged$.emit(changedNotification);
         return changedNotification;
       })
-      .catch(super.handleErrorPromise);
+      .catch((error) => {
+        return super.handleErrorPromise(error);
+      });
   }
 
   public getAllNotifications(): Observable<Notification[]> {
diff --git a/src/app/services/reminder.service.spec.ts b/src/app/services/reminder.service.spec.ts
index 8433df9..2e822e9 100644
--- a/src/app/services/reminder.service.spec.ts
+++ b/src/app/services/reminder.service.spec.ts
@@ -17,10 +17,12 @@
 import { DUMMY_CREATED_NOTIFICATION, DUMMY_UPDATED_NOTIFICATION } from '../test-data/notifications';
 import { SessionContext } from '../common/session-context';
 import { Globals } from '../common/globals';
+import { MessageService } from '../services/message.service';
 
-describe('Http-NotificationService (mockBackend)', () => {
+describe('Http-ReminderService (mockBackend)', () => {
 
   let sessionContext: SessionContext;
+  let messageService: MessageService;
 
   beforeEach(async(() => {
     TestBed.configureTestingModule({
@@ -28,10 +30,12 @@
       providers: [
         ReminderService,
         { provide: XHRBackend, useClass: MockBackend },
-        SessionContext
+        SessionContext,
+        MessageService
       ]
     })
       .compileComponents();
+    messageService = new MessageService();
     sessionContext = new SessionContext();
   }));
 
@@ -42,7 +46,7 @@
 
   it('can instantiate service with "new"', inject([Http], (http: Http) => {
     expect(http).not.toBeNull('http should be provided');
-    const service = new ReminderService(http, sessionContext);
+    const service = new ReminderService(http, sessionContext, messageService);
     expect(service instanceof ReminderService).toBe(true, 'new service should be ok');
   }));
 
@@ -52,5 +56,5 @@
       expect(backend).not.toBeNull('backend should be provided');
     }));
 
-  
+
 });
diff --git a/src/app/services/reminder.service.ts b/src/app/services/reminder.service.ts
index cae8b8a..0886e21 100644
--- a/src/app/services/reminder.service.ts
+++ b/src/app/services/reminder.service.ts
@@ -9,6 +9,7 @@
 import { BaseHttpService } from './base-http.service';
 import { Notification } from '../model/notification';
 import { ReminderSearchFilter } from '../model/reminder-search-filter';
+import { MessageService } from './message.service';
 
 @Injectable()
 export class ReminderService extends BaseHttpService {
@@ -18,9 +19,10 @@
 
     constructor(
         private _http: Http,
-        private _sessionContext: SessionContext
+        private _sessionContext: SessionContext,
+        public messageService: MessageService
     ) {
-        super();
+        super(messageService);
         this.itemAdded$ = new EventEmitter();
         this.itemChanged$ = new EventEmitter();
     }
@@ -32,10 +34,10 @@
         const filter = reminderSearchFilter || {};
 
 
-        this.createCommonHeaders(headers, this._sessionContext);  
+        this.createCommonHeaders(headers, this._sessionContext);
         return this._http.post(url, JSON.stringify(filter), { headers: headers })
             .map(res => super.extractData(res, this._sessionContext))
-            .catch(super.handleErrorPromise);
+            .catch(error => { return super.handleErrorPromise(error); });
     }
 
 }
\ No newline at end of file
diff --git a/src/app/services/responsibility.service.spec.ts b/src/app/services/responsibility.service.spec.ts
index 601bb95..f519b8e 100644
--- a/src/app/services/responsibility.service.spec.ts
+++ b/src/app/services/responsibility.service.spec.ts
@@ -14,21 +14,24 @@
 import { RESPONSIBILITIES } from '../test-data/responsibilities';
 import { SessionContext } from '../common/session-context';
 import { Globals } from '../common/globals';
+import { MessageService } from '../services/message.service';
 
 describe('Http-ResponsibilityService (mockBackend)', () => {
   let sessionContext: SessionContext;
-
+  let messageService: MessageService;
   beforeEach(async(() => {
     TestBed.configureTestingModule({
       imports: [HttpModule],
       providers: [
         ResponsibilityService,
         { provide: XHRBackend, useClass: MockBackend },
-        SessionContext
+        SessionContext,
+        MessageService
       ]
     })
       .compileComponents();
     sessionContext = new SessionContext();
+    messageService = new MessageService();
   }));
 
   it('can instantiate service when inject service',
@@ -40,7 +43,7 @@
 
   it('can instantiate service with "new"', inject([Http], (http: Http) => {
     expect(http).not.toBeNull('http should be provided');
-    const service = new ResponsibilityService(http, sessionContext);
+    const service = new ResponsibilityService(http, sessionContext, messageService);
     expect(service instanceof ResponsibilityService).toBe(true, 'new service should be ok');
   }));
 
@@ -60,7 +63,7 @@
 
     beforeEach(inject([Http, XHRBackend], (http: Http, be: MockBackend) => {
       backend = be;
-      service = new ResponsibilityService(http, sessionContext);
+      service = new ResponsibilityService(http, sessionContext, messageService);
       const successHeaders: Headers = new Headers();
       successHeaders.append(Globals.SESSION_TOKEN_TAG, 'SuperVALID!');
       const options = new ResponseOptions({ status: 200, body: fakeResps, headers: successHeaders });
@@ -107,7 +110,7 @@
 
     beforeEach(inject([Http, XHRBackend], (http: Http, be: MockBackend) => {
       backend = be;
-      service = new ResponsibilityService(http, sessionContext);
+      service = new ResponsibilityService(http, sessionContext, messageService);
       const successHeaders: Headers = new Headers();
       successHeaders.append(Globals.SESSION_TOKEN_TAG, 'SuperVALID!');
       const options = new ResponseOptions({ status: 200, body: fakeResps, headers: successHeaders });
@@ -139,7 +142,7 @@
 
     beforeEach(inject([Http, XHRBackend], (http: Http, be: MockBackend) => {
       backend = be;
-      service = new ResponsibilityService(http, sessionContext);
+      service = new ResponsibilityService(http, sessionContext, messageService);
       const successHeaders: Headers = new Headers();
       successHeaders.append(Globals.SESSION_TOKEN_TAG, 'SuperVALID!');
       const options = new ResponseOptions({ status: 200, body: fakeResps, headers: successHeaders });
@@ -162,7 +165,7 @@
         });
     })));
   });
-  
+
   describe('when confirmResponsibilities()', () => {
     let backend: MockBackend;
     let service: ResponsibilityService;
@@ -172,7 +175,7 @@
 
     beforeEach(inject([Http, XHRBackend], (http: Http, be: MockBackend) => {
       backend = be;
-      service = new ResponsibilityService(http, sessionContext);
+      service = new ResponsibilityService(http, sessionContext, messageService);
       const successHeaders: Headers = new Headers();
       successHeaders.append(Globals.SESSION_TOKEN_TAG, 'SuperVALID!');
       const options = new ResponseOptions({ status: 200, body: fakeResps, headers: successHeaders });
@@ -214,7 +217,7 @@
 
     beforeEach(inject([Http, XHRBackend], (http: Http, be: MockBackend) => {
       backend = be;
-      service = new ResponsibilityService(http, sessionContext);
+      service = new ResponsibilityService(http, sessionContext, messageService);
       const successHeaders: Headers = new Headers();
       successHeaders.append(Globals.SESSION_TOKEN_TAG, 'SuperVALID!');
       const options = new ResponseOptions({ status: 200, body: { ret: 'OK' }, headers: successHeaders });
diff --git a/src/app/services/responsibility.service.ts b/src/app/services/responsibility.service.ts
index b1d9d89..741a8cf 100644
--- a/src/app/services/responsibility.service.ts
+++ b/src/app/services/responsibility.service.ts
@@ -10,17 +10,19 @@
 import { BaseHttpService } from './base-http.service';
 import { TerritoryResponsibility } from '../model/territory-responsibility';
 import { NotificationSearchFilter } from '../model/notification-search-filter';
-import {ResponsibilitySearchFilter } from '../model/responsibility-search-filter';
+import { ResponsibilitySearchFilter } from '../model/responsibility-search-filter';
 import { HistoricalShiftChanges } from '../model/historical-shift-changes';
 import { HistoricalResponsibility } from '../model/historical-responsibility';
+import { MessageService } from './message.service';
 
 @Injectable()
 export class ResponsibilityService extends BaseHttpService {
 
     constructor(
         private _http: Http,
-        private _sessionContext: SessionContext) {
-        super();
+        private _sessionContext: SessionContext,
+        public messageService: MessageService) {
+        super(messageService);
     }
 
     public getAllResponsibilities(): Observable<TerritoryResponsibility[]> {
@@ -28,7 +30,9 @@
         this.createCommonHeaders(headers, this._sessionContext);
         return this._http.get(super.getBaseUrl() + '/allResponsibilities', { headers: headers })
             .map(res => super.extractData(res, this._sessionContext))
-            .catch(super.handleErrorPromise);
+            .catch(error => {
+                return super.handleErrorPromise(error);
+            });
     }
 
     public getResponsibilities(): Observable<TerritoryResponsibility[]> {
@@ -36,7 +40,7 @@
         this.createCommonHeaders(headers, this._sessionContext);
         return this._http.get(super.getBaseUrl() + '/currentResponsibilities', { headers: headers })
             .map(res => super.extractData(res, this._sessionContext))
-            .catch(super.handleErrorPromise);
+            .catch(error => { return super.handleErrorPromise(error); });
     }
 
     public getPlannedResponsibilities(): Observable<TerritoryResponsibility[]> {
@@ -44,7 +48,7 @@
         this.createCommonHeaders(headers, this._sessionContext);
         return this._http.get(super.getBaseUrl() + '/plannedResponsibilities', { headers: headers })
             .map(res => super.extractData(res, this._sessionContext))
-            .catch(super.handleErrorPromise);
+            .catch(error => { return super.handleErrorPromise(error); });
     }
 
     public planResponsibilities(responsibilities: TerritoryResponsibility[]) {
@@ -53,7 +57,7 @@
         this.createCommonHeaders(headers, this._sessionContext);
         return this._http.post(url, JSON.stringify(responsibilities), { headers: headers })
             .map(res => super.extractData(res, this._sessionContext))
-            .catch(super.handleErrorPromise);
+            .catch(error => { return super.handleErrorPromise(error); });
     }
 
     public confirmResponsibilities(responsibilities: TerritoryResponsibility[]) {
@@ -62,24 +66,24 @@
         this.createCommonHeaders(headers, this._sessionContext);
         return this._http.post(url, JSON.stringify(responsibilities), { headers: headers })
             .map(res => super.extractData(res, this._sessionContext))
-            .catch(super.handleErrorPromise);
+            .catch(error => { return super.handleErrorPromise(error); });
     }
 
     public getHistoricalShiftChangeList(notificationSearchFilter: ResponsibilitySearchFilter): Observable<HistoricalShiftChanges> {
         const headers = new Headers();
-        const url  = super.getBaseUrl() + '/shiftChangeList/';
+        const url = super.getBaseUrl() + '/shiftChangeList/';
         this.createCommonHeaders(headers, this._sessionContext);
-        return this._http.post(url, JSON.stringify(notificationSearchFilter), {headers: headers})
+        return this._http.post(url, JSON.stringify(notificationSearchFilter), { headers: headers })
             .map(res => super.extractData(res, this._sessionContext))
-            .catch(super.handleErrorPromise);
+            .catch(error => { return super.handleErrorPromise(error); });
     }
 
     public getHistoricalResponsibilities(transactionId: number): Observable<TerritoryResponsibility[]> {
         const headers = new Headers();
-        const url  = super.getBaseUrl() + '/historicalResponsibilities/' + transactionId;
+        const url = super.getBaseUrl() + '/historicalResponsibilities/' + transactionId;
         this.createCommonHeaders(headers, this._sessionContext);
-        return this._http.get(url, {headers: headers})
+        return this._http.get(url, { headers: headers })
             .map(res => super.extractData(res, this._sessionContext))
-            .catch(super.handleErrorPromise);
+            .catch(error => { return super.handleErrorPromise(error); });
     }
 }
diff --git a/src/app/services/search-result.service.ts b/src/app/services/search-result.service.ts
index 3c4d57e..418172f 100644
--- a/src/app/services/search-result.service.ts
+++ b/src/app/services/search-result.service.ts
@@ -9,13 +9,15 @@
 import { BaseHttpService } from './base-http.service';
 import { Notification } from '../model/notification';
 import { GlobalSearchFilter } from '../model/global-search-filter';
+import { MessageService } from './message.service';
 
 @Injectable()
 export class SearchResultService extends BaseHttpService {
 
   constructor(private _http: Http,
-    private _sessionContext: SessionContext) {
-    super();
+    private _sessionContext: SessionContext,
+    public messageService: MessageService) {
+    super(messageService);
   }
 
   public getSearchResults(searchResultFilter?: GlobalSearchFilter): Observable<Notification[]> {
@@ -25,7 +27,7 @@
     this.createCommonHeaders(headers, this._sessionContext);
     return this._http.post(url, JSON.stringify(globalSearchFilter), { headers: headers })
       .map(res => super.extractData(res, this._sessionContext))
-      .catch(super.handleErrorPromise);
+      .catch(error => { return super.handleErrorPromise(error); });
   }
 
 }
diff --git a/src/app/services/user.service.spec.ts b/src/app/services/user.service.spec.ts
index 8c5d760..20784b9 100644
--- a/src/app/services/user.service.spec.ts
+++ b/src/app/services/user.service.spec.ts
@@ -14,20 +14,23 @@
 import { USERS } from '../test-data/users';
 import { SessionContext } from '../common/session-context';
 import { Globals } from '../common/globals';
+import { MessageService } from '../services/message.service';
 
 describe('Http-UserService (mockBackend)', () => {
   let sessionContext: SessionContext;
-
+let messageService:MessageService;
   beforeEach( async(() => {
     TestBed.configureTestingModule({
       imports: [ HttpModule ],
       providers: [
         UserService,
         { provide: XHRBackend, useClass: MockBackend },
-        SessionContext
+        SessionContext,
+        MessageService
       ]
     })
     .compileComponents();
+    messageService = new MessageService();
     sessionContext = new SessionContext();
   }));
 
@@ -40,7 +43,7 @@
 
   it('can instantiate service with "new"', inject([Http], (http: Http) => {
     expect(http).not.toBeNull('http should be provided');
-    const service = new UserService(http, sessionContext );
+    const service = new UserService(http, messageService, sessionContext );
     expect(service instanceof UserService).toBe(true, 'new service should be ok');
   }));
 
@@ -59,7 +62,7 @@
 
     beforeEach(inject([Http, XHRBackend], (http: Http, be: MockBackend) => {
       backend = be;
-      service = new UserService(http, sessionContext);
+      service = new UserService(http, messageService, sessionContext);
       const successHeaders: Headers = new Headers();
       successHeaders.append(Globals.SESSION_TOKEN_TAG, 'SuperVALID!');
       const options = new ResponseOptions({status: 200, body: fakeResps, headers: successHeaders} );
diff --git a/src/app/services/user.service.ts b/src/app/services/user.service.ts
index 46934a2..0ba3b2f 100644
--- a/src/app/services/user.service.ts
+++ b/src/app/services/user.service.ts
@@ -10,13 +10,16 @@
 import { BaseHttpService } from './base-http.service';
 import { User } from '../model/user';
 
+import { MessageService } from './message.service';
+
 @Injectable()
 export class UserService extends BaseHttpService  {
 
     constructor(
         private _http: Http,
+        public messageService: MessageService,
         private _sessionContext: SessionContext) {
-        super();        
+        super(messageService);        
     }
 
     public getUsers(): Observable<User[]> {
@@ -24,7 +27,9 @@
         this.createCommonHeaders(headers, this._sessionContext);
         return this._http.get(super.getBaseUrl() + '/users', { headers: headers })
             .map(res => super.extractData(res, this._sessionContext))
-            .catch(super.handleErrorPromise);
+             .catch(error => {        
+                  return super.handleErrorPromise(error);      
+                 });
     }
     
 }
diff --git a/src/app/services/version-info.service.spec.ts b/src/app/services/version-info.service.spec.ts
index a6febd8..3ad4872 100644
--- a/src/app/services/version-info.service.spec.ts
+++ b/src/app/services/version-info.service.spec.ts
@@ -17,31 +17,35 @@
 import { RESPONSIBILITIES } from '../test-data/responsibilities';
 import { SessionContext } from '../common/session-context';
 import { Globals } from '../common/globals';
+import { MessageService } from '../services/message.service';
 
 describe('Http-VersionInfoService (mockBackend)', () => {
   let sessionContext: SessionContext;
+  let messageService: MessageService;
 
-  beforeEach( async(() => {
+  beforeEach(async(() => {
     TestBed.configureTestingModule({
-      imports: [ HttpModule ],
+      imports: [HttpModule],
       providers: [
         VersionInfoService,
         { provide: XHRBackend, useClass: MockBackend },
-        SessionContext
+        SessionContext,
+        MessageService
       ]
     })
-    .compileComponents();
+      .compileComponents();
+    messageService = new MessageService();
     sessionContext = new SessionContext();
   }));
 
   it('can instantiate service when inject service',
     inject([VersionInfoService], (service: VersionInfoService) => {
       expect(service instanceof VersionInfoService).toBe(true);
-  }));
+    }));
 
   it('can instantiate service with "new"', inject([Http], (http: Http) => {
     expect(http).not.toBeNull('http should be provided');
-    const service = new VersionInfoService(http, sessionContext );
+    const service = new VersionInfoService(http, sessionContext, messageService);
     expect(service instanceof VersionInfoService).toBe(true, 'new service should be ok');
   }));
 
@@ -49,7 +53,7 @@
   it('can provide the mockBackend as XHRBackend',
     inject([XHRBackend], (backend: MockBackend) => {
       expect(backend).not.toBeNull('backend should be provided');
-  }));
+    }));
 
 
   describe('when loadBackendServerInfo()', () => {
@@ -61,36 +65,36 @@
 
     beforeEach(inject([Http, XHRBackend], (http: Http, be: MockBackend) => {
       backend = be;
-      service = new VersionInfoService(http, sessionContext);
+      service = new VersionInfoService(http, sessionContext, messageService);
       fakeVersion = { backendVersion: '2.2', dbVersion: '3.3' };
-      const options = new ResponseOptions({status: 200, body: fakeVersion});
+      const options = new ResponseOptions({ status: 200, body: fakeVersion });
       response = new Response(options);
     }));
     it('should have expected fake versionInfo (then)', async(inject([], () => {
-        backend.connections.subscribe((c: MockConnection) => c.mockRespond(response));
+      backend.connections.subscribe((c: MockConnection) => c.mockRespond(response));
 
-        service.loadBackendServerInfo().toPromise()
-          .then( versionInfo => {
-            const be = versionInfo.backendVersion;
-            expect(versionInfo.backendVersion).toBe('2.2');
-          });
+      service.loadBackendServerInfo().toPromise()
+        .then(versionInfo => {
+          const be = versionInfo.backendVersion;
+          expect(versionInfo.backendVersion).toBe('2.2');
+        });
     })));
 
     it('should treat 404 as an Observable error', async(inject([], () => {
-        const resp = new Response(new ResponseOptions({status: 404}));
-        backend.connections.subscribe((c: MockConnection) => c.mockRespond(resp));
+      const resp = new Response(new ResponseOptions({ status: 404 }));
+      backend.connections.subscribe((c: MockConnection) => c.mockRespond(resp));
 
-        service.loadBackendServerInfo()
-          .do(versionInfo => {
-            fail('should not respond with versionInfo');
-          })
-          .catch(err => {
-            const str = err;
-            expect(err).toMatch('Bad response status', 'should catch bad response status code');
-            return Observable.of(null); // failure is the expected test result
-          })
-          .toPromise();
-      })));
+      service.loadBackendServerInfo()
+        .do(versionInfo => {
+          fail('should not respond with versionInfo');
+        })
+        .catch(err => {
+          const str = err;
+          expect(err).toMatch('Bad response status', 'should catch bad response status code');
+          return Observable.of(null); // failure is the expected test result
+        })
+        .toPromise();
+    })));
   });
 
 });
diff --git a/src/app/services/version-info.service.ts b/src/app/services/version-info.service.ts
index 7d5d737..fe75977 100644
--- a/src/app/services/version-info.service.ts
+++ b/src/app/services/version-info.service.ts
@@ -9,20 +9,26 @@
 import { BaseHttpService } from './base-http.service';
 import { VersionInfo } from '../model/version-info';
 
+import { MessageService } from './message.service';
+
 @Injectable()
 export class VersionInfoService extends BaseHttpService {
 
     constructor(
         private _http: Http,
-        private _sessionContext: SessionContext ) {
-    super();
+        private _sessionContext: SessionContext,
+        public messageService: MessageService
+    ) {
+        super(messageService);
     }
 
     public loadBackendServerInfo(): Observable<VersionInfo> {
         const headers = new Headers();
         this.createCommonHeaders(headers, this._sessionContext);
         return this._http.get(super.getBaseUrl() + '/versionInfo', { headers: headers })
-            .map ( resp => super.extractData( resp, this._sessionContext  ) )
-            .catch( super.handleErrorPromise );
+            .map(resp => super.extractData(resp, this._sessionContext))
+            .catch(error => {
+                return super.handleErrorPromise(error);
+            });
     }
 }