diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-api-client.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-api-client.ts
index 6c42a93..e0a5032 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-api-client.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-api-client.ts
@@ -221,6 +221,12 @@
     return null;
   }
 
+  @GET('/grid-failure-informations/{gridFailureId}/channels')
+  @Adapter(GridFailureService.publicationChannelListAdapter)
+  public getGridFailurePublicationChannels(@Path('gridFailureId') gridFailureId: string): Observable<PublicationChannel[]> {
+    return null;
+  }
+
   @POST('/grid-failure-informations/{gridFailureId}/channels')
   @Adapter(GridFailureService.publicationChannelAdapter)
   public postPublicationChannelAssignment(
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.html b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.html
index 0ea8a36..3530425 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.html
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.html
@@ -543,10 +543,7 @@
                     type="checkbox"
                     class="custom-control-input"
                     id="{{ 'channel' + i }}"
-                    [checked]="
-                      gridFailureDetailsSandbox.currentFormState.value.publicationChannels['value'] &&
-                      gridFailureDetailsSandbox.currentFormState.value.publicationChannels['value'].includes(channel)
-                    "
+                    [checked]="gridFailureDetailsSandbox.selectedPublicationChannels && gridFailureDetailsSandbox.selectedPublicationChannels.includes(channel)"
                     (change)="gridFailureDetailsSandbox.setPublicationChannels(channel, $event.target.checked)"
                   />
                   <label class="custom-control-label" for="{{ 'channel' + i }}">{{ channel }} </label>
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.spec.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.spec.ts
index 09aacd5..e6e5cd0 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.spec.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.component.spec.ts
@@ -141,4 +141,10 @@
     component.clearSearchInput();
     expect(component.searchInput.nativeElement.value).toBeFalsy();
   });
+
+  it('should disable unnecessary required properties when setLocation was called', () => {
+    const spy = spyOn(gridFailureSandbox, 'disableUnnecessaryRequiredProperties');
+    component.setLocation();
+    expect(spy).toHaveBeenCalled();
+  });
 });
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.spec.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.spec.ts
index 168b70c..e6761a1 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.spec.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.spec.ts
@@ -14,7 +14,14 @@
 import { Router } from '@angular/router';
 import { GridFailureDetailsSandbox } from '@grid-failure-information-app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox';
 import { StateEnum } from '@grid-failure-information-app/shared/constants/enums';
-import { FailureBranch, FailureHousenumber, FailureStation, GridFailure, DistributionGroup } from '@grid-failure-information-app/shared/models';
+import {
+  FailureBranch,
+  FailureHousenumber,
+  FailureStation,
+  GridFailure,
+  DistributionGroup,
+  PublicationChannel,
+} from '@grid-failure-information-app/shared/models';
 import { State } from '@grid-failure-information-app/shared/store';
 import * as gridFailureActions from '@grid-failure-information-app/shared/store/actions/grid-failures.action';
 import { UtilService } from '@grid-failure-information-app/shared/utility/utility.service';
@@ -51,6 +58,7 @@
     service.gridFailureDetailsFormState$ = of((INITIAL_STATE.value.branchId = '00' as any));
     service.noBranchId = '123';
     service.addressPostCodes$ = of(['test', 'test1', 'test2', 'hello']);
+    service.gridFailurePublicationChannels$ = of([new PublicationChannel()]);
   }));
 
   it('should create GridFailureDetailsSandbox service', () => {
@@ -655,6 +663,11 @@
     expect(appState.dispatch).toHaveBeenCalledWith(distributionGroupActions.loadDistributionGroups());
   });
 
+  it('should dispatch loadGridFailurePublicationChannels Action via loadGridFailurePublicationChannels()', () => {
+    service.loadGridFailurePublicationChannels('x');
+    expect(appState.dispatch).toHaveBeenCalledWith(gridFailureActions.loadGridFailurePublicationChannels({ payload: 'x' }));
+  });
+
   it('should compare maxVersionNumber vs. current versionNumber via checkForMaxVersion()', () => {
     service.maxVersionNumber = 1;
     service.currentFormState = { value: { versionNumber: 1 } as any } as any;
@@ -687,51 +700,25 @@
 
   it('should displayNotification when publishing is attempted without at least one selected channel', () => {
     const spy: any = spyOn(service['_utilService'], 'displayNotification');
-    const gfdetail = new GridFailure();
-    gfdetail.id = 'id';
-    gfdetail.publicationChannels = new Array();
-    gfdetail.publicationChannels['value'] = [];
-    service.currentFormState = INITIAL_STATE;
-    (service.currentFormState as any).isValid = true;
-    (service.currentFormState as any).value = gfdetail;
+    service.selectedPublicationChannels = [];
     service.setPublishedState();
     expect(spy).toHaveBeenCalled;
   });
 
   it('should call saveGridFailure() when publishing with at least one selected channel', () => {
     const spy: any = spyOn(service, 'saveGridFailure');
-    const gfdetail = new GridFailure();
-    gfdetail.id = 'id';
-    gfdetail.publicationChannels = new Array();
-    gfdetail.publicationChannels['value'] = ['SMS'];
-    service.currentFormState = INITIAL_STATE;
-    (service.currentFormState as any).isValid = true;
-    (service.currentFormState as any).value = gfdetail;
+    service.selectedPublicationChannels = ['MAIL'];
     service.setPublishedState();
     expect(spy).toHaveBeenCalled;
   });
 
   it('should dispatch createPublicationChannelAssignment action if a channel was checked', () => {
-    const gfdetail = new GridFailure();
-    gfdetail.id = 'id';
-    gfdetail.publicationChannels = new Array();
-    gfdetail.publicationChannels['value'] = ['SMS'];
-    service.currentFormState = INITIAL_STATE;
-    (service.currentFormState as any).isValid = true;
-    (service.currentFormState as any).value = gfdetail;
     service['_gridFailureId'] = 'x1';
     service.setPublicationChannels('SMS', true);
     expect(appState.dispatch).toHaveBeenCalledWith(gridFailureActions.createPublicationChannelAssignment({ gridFailureId: 'x1', channel: 'SMS' }));
   });
 
   it('should dispatch deletePublicationChannelAssignment action if a channel was unchecked', () => {
-    const gfdetail = new GridFailure();
-    gfdetail.id = 'id';
-    gfdetail.publicationChannels = new Array();
-    gfdetail.publicationChannels['value'] = ['SMS'];
-    service.currentFormState = INITIAL_STATE;
-    (service.currentFormState as any).isValid = true;
-    (service.currentFormState as any).value = gfdetail;
     service['_gridFailureId'] = 'x1';
     service.setPublicationChannels('SMS', false);
     expect(appState.dispatch).toHaveBeenCalledWith(gridFailureActions.deletePublicationChannelAssignment({ gridFailureId: 'x1', channel: 'SMS' }));
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts
index 21d1936..ebecb34 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-details.sandbox.ts
@@ -1,4 +1,3 @@
-import { BranchNameEnum } from './../../../shared/constants/enums';
 /********************************************************************************
  * Copyright (c) 2020 Contributors to the Eclipse Foundation
  *
@@ -121,11 +120,14 @@
   public gridFailureDistributionGroupsLoading$: Observable<boolean> = this.appState$.select(store.getGridFailureDistributionGroupsLoading);
   public distributionGroups$: Observable<models.DistributionGroup[]> = this.appState$.select(store.getDistributionGroupsData);
   public exportChannels$: Observable<string[]> = this.appState$.select(store.getExportChannels);
+  public gridFailurePublicationChannels$: Observable<models.PublicationChannel[]> = this.appState$.select(store.getGridFailurePublicationChannelsData);
   public disablePublishButton: boolean;
   public disableStationAttributes = false;
+  public selectedPublicationChannels: Array<string>;
 
   private _gridFailureId: string;
   private _selectedStation: models.FailureStation;
+  private _stations: Array<models.FailureStation> = new Array<models.FailureStation>();
   private _assignedDistributionGroups: Array<models.DistributionGroup>;
   private _stations: Array<models.FailureStation> = new Array<models.FailureStation>();
 
@@ -219,9 +221,11 @@
     this.loadGridFailureBranches();
     this._setGridFailureStations();
   }
+
   public setGridFailureId(gridFailureId: string) {
     this._gridFailureId = gridFailureId;
   }
+
   public loadGridFailureDistributionGroups(gridFailureId: string): void {
     this.appState$.dispatch(gridFailureActions.loadGridFailureDistributionGroups({ payload: gridFailureId }));
   }
@@ -230,6 +234,10 @@
     this.appState$.dispatch(distributionGroupActions.loadDistributionGroups());
   }
 
+  public loadGridFailurePublicationChannels(gridFailureId: string): void {
+    this.appState$.dispatch(gridFailureActions.loadGridFailurePublicationChannels({ payload: gridFailureId }));
+  }
+
   public setState(newState: string): void {
     this.gridFailureStates$
       .pipe(
@@ -246,7 +254,7 @@
   }
 
   public setPublishedState(): void {
-    if (this.currentFormState.value.publicationChannels['value'].length === 0) {
+    if (this.selectedPublicationChannels.length === 0) {
       this._utilService.displayNotification('PublicationRequiresAtLeastOneChannel', 'alert');
     } else {
       this.saveGridFailure(true);
@@ -405,7 +413,6 @@
         ofType(gridFailureActions.loadGridFailureVersionsSuccess),
         takeUntil(this._endSubscriptions$),
         map(action => {
-          this.disablePublishButton = this.currentFormState.value.publicationStatus === enums.PublicationStatusEnum.VE;
           const gridFailures: models.GridFailure[] = action['payload'];
           return !!gridFailures && Math.max(...gridFailures.map(o => o.versionNumber));
         })
@@ -449,6 +456,11 @@
         this._assignedDistributionGroups = assignedGroups;
       });
 
+    this.gridFailurePublicationChannels$.pipe(takeUntil(this._endSubscriptions$)).subscribe((channels: Array<models.PublicationChannel>) => {
+      this.selectedPublicationChannels = channels.map(s => s.publicationChannel);
+      this.disablePublishButton = channels.length > 0 && !channels.find(channel => !channel.published);
+    });
+
     this.gridFailureDetailsFormState$.subscribe(gridFailureDetails => {
       let failureRadius: models.FailureRadius;
       if (!!gridFailureDetails.value.radiusId) {
@@ -587,28 +599,10 @@
   }
 
   public setPublicationChannels(channel: string, checked: boolean) {
-    let publicationChannels = this.currentFormState.value.publicationChannels['value'];
     if (checked) {
       this.appState$.dispatch(gridFailureActions.createPublicationChannelAssignment({ gridFailureId: this._gridFailureId, channel: channel }));
-      this.actionsSubject
-        .pipe(
-          ofType(gridFailureActions.createPublicationChannelAssignmentSuccess),
-          map(action => action.payload),
-          takeUntil(this._endSubscriptions$)
-        )
-        .subscribe((publicationChannel: models.PublicationChannel) => {
-          publicationChannels.push(publicationChannel.publicationChannel);
-          if (this.disablePublishButton && !publicationChannel.published) {
-            this.disablePublishButton = false;
-          }
-          this.appState$.dispatch(new SetValueAction(INITIAL_STATE.controls.publicationChannels.id, box(publicationChannels)));
-        });
     } else {
       this.appState$.dispatch(gridFailureActions.deletePublicationChannelAssignment({ gridFailureId: this._gridFailureId, channel: channel }));
-      this.actionsSubject.pipe(ofType(gridFailureActions.deletePublicationChannelAssignmentSuccess), takeUntil(this._endSubscriptions$)).subscribe(() => {
-        publicationChannels = publicationChannels.filter((x: string) => x !== channel);
-        this.appState$.dispatch(new SetValueAction(INITIAL_STATE.controls.publicationChannels.id, box(publicationChannels)));
-      });
     }
   }
 
@@ -741,14 +735,14 @@
   }
 
   private _setNoBranchId(branches: models.FailureBranch[]): void {
-    const noBranch: models.FailureBranch = branches.find(branch => branch.name === BranchNameEnum.NO_BRANCH);
+    const noBranch: models.FailureBranch = branches.find(branch => branch.name === enums.BranchNameEnum.NO_BRANCH);
     this.noBranchId = !!noBranch ? noBranch.id : null;
     this.appState$.dispatch(new SetUserDefinedPropertyAction(FORM_ID, NO_BRANCH_ID_KEY, this.noBranchId));
   }
 
   private _setGasBranchId(branches: models.FailureBranch[]): void {
     let gasBranchId: string;
-    const gasBranch: models.FailureBranch = branches.find(branch => branch.name === BranchNameEnum.GAS);
+    const gasBranch: models.FailureBranch = branches.find(branch => branch.name === enums.BranchNameEnum.GAS);
     gasBranchId = !!gasBranch ? gasBranch.id : null;
     this.appState$.dispatch(new SetUserDefinedPropertyAction(FORM_ID, GAS_BRANCH_ID_KEY, gasBranchId));
   }
@@ -761,6 +755,7 @@
     this._gridFailureId = null;
     this.maxVersionNumber = null;
     this._assignedDistributionGroups = null;
+    this.selectedPublicationChannels = null;
     navigateHome(this._router);
   }
 
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-distribution-groups/grid-failure-distribution-groups-column-definition.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-distribution-groups/grid-failure-distribution-groups-column-definition.ts
index 5b9c9ce..45e96db 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-distribution-groups/grid-failure-distribution-groups-column-definition.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure-details/grid-failure-distribution-groups/grid-failure-distribution-groups-column-definition.ts
@@ -22,6 +22,7 @@
   {
     field: 'distributionText',
     headerName: 'DistributionGroup.Text',
+    maxWidth: 900,
     sortable: true,
     filter: 'setFilterComponent',
   },
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.resolver.spec.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.resolver.spec.ts
index 17e134f..951b0df 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.resolver.spec.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.resolver.spec.ts
@@ -35,6 +35,7 @@
       loadGridFailureStations() {},
       loadDistributionGroups() {},
       loadGridFailureDistributionGroups() {},
+      loadGridFailurePublicationChannels() {},
     } as any;
   });
 
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.resolver.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.resolver.ts
index 513574d..d17b1ea 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.resolver.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.resolver.ts
@@ -32,6 +32,8 @@
       this._detailSandbox.loadGridFailureVersions(gridFailureId);
       // load distribution group
       this._detailSandbox.loadGridFailureDistributionGroups(gridFailureId);
+      // load publication channels
+      this._detailSandbox.loadGridFailurePublicationChannels(gridFailureId);
     }
 
     this._detailSandbox.loadGridFailureBranches();
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.service.spec.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.service.spec.ts
index f37eadc..dac1c66 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.service.spec.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.service.spec.ts
@@ -111,4 +111,10 @@
     const item = GridFailureService.distributionGroupAdapter(response);
     expect(item.id).toBe(response.id);
   });
+
+  it('should transform publication channel response', () => {
+    const response: any = { id: 'X' };
+    const item = GridFailureService.publicationChannelAdapter(response);
+    expect(item.id).toBe(response.id);
+  });
 });
diff --git a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.service.ts b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.service.ts
index 33601d3..76f0ccf 100644
--- a/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.service.ts
+++ b/projects/grid-failure-information-app/src/app/pages/grid-failure/grid-failure.service.ts
@@ -88,6 +88,10 @@
     return new DistributionGroup(response);
   }
 
+  static publicationChannelListAdapter(response: any): Array<PublicationChannel> {
+    return response.map(responseItem => new PublicationChannel(responseItem));
+  }
+
   static publicationChannelAdapter(response: any): PublicationChannel {
     return new PublicationChannel(response);
   }
diff --git a/projects/grid-failure-information-app/src/app/shared/models/grid-failure.model.ts b/projects/grid-failure-information-app/src/app/shared/models/grid-failure.model.ts
index efb5962..82ce234 100644
--- a/projects/grid-failure-information-app/src/app/shared/models/grid-failure.model.ts
+++ b/projects/grid-failure-information-app/src/app/shared/models/grid-failure.model.ts
@@ -71,7 +71,6 @@
   public failureInformationCondensedId: string = null;
   public addressPolygonPoints: Array<[Number, Number]> | Boxed<Array<[Number, Number]>> = null;
   public description: string = null;
-  public publicationChannels: Array<string> = null;
 
   public constructor(data: any = null) {
     super(data);
diff --git a/projects/grid-failure-information-app/src/app/shared/models/publication-channel.model.ts b/projects/grid-failure-information-app/src/app/shared/models/publication-channel.model.ts
index 644ea42..6c0d6b4 100644
--- a/projects/grid-failure-information-app/src/app/shared/models/publication-channel.model.ts
+++ b/projects/grid-failure-information-app/src/app/shared/models/publication-channel.model.ts
@@ -11,9 +11,9 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 export class PublicationChannel {
-  public failureInformationId: string = null;
+  public id: string = null;
   public publicationChannel: string = null;
-  public published: string = null;
+  public published: boolean = null;
 
   public constructor(data: any = null) {
     Object.keys(data || {})
diff --git a/projects/grid-failure-information-app/src/app/shared/store/actions/grid-failures.action.ts b/projects/grid-failure-information-app/src/app/shared/store/actions/grid-failures.action.ts
index 7c478f3..728d34a 100644
--- a/projects/grid-failure-information-app/src/app/shared/store/actions/grid-failures.action.ts
+++ b/projects/grid-failure-information-app/src/app/shared/store/actions/grid-failures.action.ts
@@ -23,7 +23,6 @@
   FailureAddress,
   DistributionGroup,
   PublicationChannel,
-  Polygon,
 } from '@grid-failure-information-app/shared/models';
 
 export interface ILoadGridFailuresSuccess {
@@ -162,6 +161,10 @@
 export const deleteDistributionGroupAssignmentSuccess = createAction('[DistributionGroupAssignment] Delete Success');
 export const deleteDistributionGroupAssignmentFail = createAction('[DistributionGroupAssignment] Delete Fail', props<{ payload: string }>());
 
+export const loadGridFailurePublicationChannels = createAction('[PublicationChannels] Load', props<{ payload: string }>());
+export const loadGridFailurePublicationChannelsSuccess = createAction('[PublicationChannels] Load Success', props<{ payload: Array<PublicationChannel> }>());
+export const loadGridFailurePublicationChannelsFail = createAction('[PublicationChannels] Load Fail', props<{ payload: string }>());
+
 export const createPublicationChannelAssignment = createAction('[PublicationChannelAssignment] Create', props<{ gridFailureId: string; channel: string }>());
 export const createPublicationChannelAssignmentSuccess = createAction(
   '[PublicationChannelAssignment] Create Success',
@@ -169,7 +172,7 @@
 );
 export const createPublicationChannelAssignmentFail = createAction('[PublicationChannelAssignment] Create Fail', props<{ payload: string }>());
 
-export const deletePublicationChannelAssignment = createAction('[PublicationGroupAssignment] Delete', props<{ gridFailureId: string; channel: string }>());
+export const deletePublicationChannelAssignment = createAction('[PublicationChannelAssignment] Delete', props<{ gridFailureId: string; channel: string }>());
 export const deletePublicationChannelAssignmentSuccess = createAction('[PublicationChannelAssignment] Delete Success');
 export const deletePublicationChannelAssignmentFail = createAction('[PublicationChannelAssignment] Delete Fail', props<{ payload: string }>());
 
diff --git a/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.spec.ts b/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.spec.ts
index 332bf24..2cc6c7e 100644
--- a/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.spec.ts
+++ b/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.spec.ts
@@ -69,6 +69,7 @@
       deleteGridFailureStation() {},
       getGridFailurePolygon() {},
       getFailureReminder() {},
+      getGridFailurePublicationChannels() {},
     } as any;
     store = {
       dispatch() {},
@@ -623,6 +624,25 @@
     actions$.next(gridFailureActions.deleteDistributionGroupAssignment({ gridFailureId: '1', groupId: '2' }));
   });
 
+  it('should dispatch loadGridFailurePublicationChannelsSuccess action triggered by loadGridFailurePublicationChannels action', done => {
+    apiResponse = [new PublicationChannel({ id: '1' })];
+    spyOn(apiClient, 'getGridFailurePublicationChannels').and.returnValue(of(apiResponse));
+    effects.getGridFailurePublicationChannels$.pipe(take(1)).subscribe(result => {
+      expect(result).toEqual(gridFailureActions.loadGridFailurePublicationChannelsSuccess({ payload: apiResponse }));
+    });
+    done();
+    actions$.next(gridFailureActions.loadGridFailurePublicationChannels({ payload: '1' }));
+  });
+
+  it('should dispatch loadGridFailurePublicationChannelsFail action triggered by loadGridFailurePublicationChannels action Error', done => {
+    spyOn(apiClient, 'getGridFailurePublicationChannels').and.returnValue(throwError('x'));
+    effects.getGridFailurePublicationChannels$.pipe(take(1)).subscribe(result => {
+      expect(result).toEqual(gridFailureActions.loadGridFailurePublicationChannelsFail({ payload: 'x' }));
+    });
+    done();
+    actions$.next(gridFailureActions.loadGridFailurePublicationChannels({ payload: '1' }));
+  });
+
   it('should dispatch createPublicationChannelAssignmentSuccess action triggered by createPublicationChannelAssignment action', done => {
     apiResponse = new PublicationChannel({ failureInformationId: '1' });
     spyOn(apiClient, 'postPublicationChannelAssignment').and.returnValue(of(apiResponse));
diff --git a/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.ts b/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.ts
index 5af4a14..ef4d76a 100644
--- a/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.ts
+++ b/projects/grid-failure-information-app/src/app/shared/store/effects/grid-failures.effect.ts
@@ -30,6 +30,7 @@
   FailureHousenumber,
   FailureAddress,
   DistributionGroup,
+  PublicationChannel,
 } from '@grid-failure-information-app/shared/models';
 import { Store } from '@ngrx/store';
 
@@ -404,12 +405,25 @@
     )
   );
 
+  getGridFailurePublicationChannels$: any = createEffect(() =>
+    this._actions$.pipe(
+      ofType(gridFailureActions.loadGridFailurePublicationChannels),
+      switchMap(action => {
+        return this._apiClient
+          .getGridFailurePublicationChannels(action.payload)
+          .map((publicationChannels: PublicationChannel[]) => gridFailureActions.loadGridFailurePublicationChannelsSuccess({ payload: publicationChannels }))
+          .catch(error => of(gridFailureActions.loadGridFailurePublicationChannelsFail({ payload: error })));
+      })
+    )
+  );
+
   createPublicationChannelAssignment$: any = createEffect(() =>
     this._actions$.pipe(
       ofType(gridFailureActions.createPublicationChannelAssignment),
       switchMap(action => {
         return this._apiClient.postPublicationChannelAssignment(action.gridFailureId, action.channel).pipe(
           map(item => {
+            this._store.dispatch(gridFailureActions.loadGridFailurePublicationChannels({ payload: action.gridFailureId }));
             return gridFailureActions.createPublicationChannelAssignmentSuccess({ payload: item });
           }),
           catchError(error => of(gridFailureActions.createPublicationChannelAssignmentFail({ payload: error })))
@@ -424,6 +438,7 @@
       switchMap(action => {
         return this._apiClient.deletePublicationChannelAssignment(action.gridFailureId, action.channel).pipe(
           map(item => {
+            this._store.dispatch(gridFailureActions.loadGridFailurePublicationChannels({ payload: action.gridFailureId }));
             return gridFailureActions.deletePublicationChannelAssignmentSuccess();
           }),
           catchError(error => of(gridFailureActions.deletePublicationChannelAssignmentFail({ payload: error })))
diff --git a/projects/grid-failure-information-app/src/app/shared/store/index.ts b/projects/grid-failure-information-app/src/app/shared/store/index.ts
index f1d789b..1b89973 100644
--- a/projects/grid-failure-information-app/src/app/shared/store/index.ts
+++ b/projects/grid-failure-information-app/src/app/shared/store/index.ts
@@ -35,6 +35,8 @@
 import * as fromDistributionGroupsDetailForm from '@grid-failure-information-app/shared/store/reducers/distribution-groups/distribution-group-details-form.reducer';
 import * as fromDistributionGroupMembers from '@grid-failure-information-app/shared/store/reducers/distribution-groups/distribution-group-members.reducer';
 import * as fromGridFailureDistributionGroups from '@grid-failure-information-app/shared/store/reducers/grid-failures/grid-failure-distribution-groups.reducer';
+import * as fromGridFailurePublicationChannels from '@grid-failure-information-app/shared/store/reducers/grid-failures/grid-failure-publication-channels.reducer';
+
 import { createFeatureSelector } from '@ngrx/store';
 import { createSelector } from 'reselect';
 import { GridFailure, DistributionGroup } from '@grid-failure-information-app/shared/models';
@@ -62,6 +64,7 @@
   stations: fromStations.State;
   condensedGridFailures: fromCondensedGridFailures.State;
   gridFailureDistributionGroups: fromGridFailureDistributionGroups.State;
+  gridFailurePublicationChannels: fromGridFailurePublicationChannels.State;
   gridFailureReminder: fromGridFailureReminder.State;
 }
 
@@ -96,6 +99,7 @@
   stations: fromStations.reducer,
   condensedGridFailures: fromCondensedGridFailures.reducer,
   gridFailureDistributionGroups: fromGridFailureDistributionGroups.reducer,
+  gridFailurePublicationChannels: fromGridFailurePublicationChannels.reducer,
   gridFailureReminder: fromGridFailureReminder.reducer,
 };
 
@@ -222,6 +226,13 @@
 export const getGridFailureDistributionGroupsFailed = createSelector(selectGridFailureDistributionGroups, fromGridFailureDistributionGroups.getFailed);
 export const getGridFailureDistributionGroupsData = createSelector(selectGridFailureDistributionGroups, fromGridFailureDistributionGroups.getData);
 
+// GridFailurePublicationChannels
+export const selectGridFailurePublicationChannels = createSelector(selectGridFailuresState, (state: GridFailureState) => state.gridFailurePublicationChannels);
+export const getGridFailurePublicationChannelsLoaded = createSelector(selectGridFailurePublicationChannels, fromGridFailurePublicationChannels.getLoaded);
+export const getGridFailurePublicationChannelsLoading = createSelector(selectGridFailurePublicationChannels, fromGridFailurePublicationChannels.getLoading);
+export const getGridFailurePublicationChannelsFailed = createSelector(selectGridFailurePublicationChannels, fromGridFailurePublicationChannels.getFailed);
+export const getGridFailurePublicationChannelsData = createSelector(selectGridFailurePublicationChannels, fromGridFailurePublicationChannels.getData);
+
 /**
  * DistributionGroups store functions
  */
diff --git a/projects/grid-failure-information-app/src/app/shared/store/reducers/grid-failures/grid-failure-publication-channels.reducer.spec.ts b/projects/grid-failure-information-app/src/app/shared/store/reducers/grid-failures/grid-failure-publication-channels.reducer.spec.ts
new file mode 100644
index 0000000..9ee8911
--- /dev/null
+++ b/projects/grid-failure-information-app/src/app/shared/store/reducers/grid-failures/grid-failure-publication-channels.reducer.spec.ts
@@ -0,0 +1,85 @@
+/********************************************************************************
+ * Copyright (c) 2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ ********************************************************************************/
+import {
+  GridFailurePublicationChannelsReducer,
+  INITIAL_STATE,
+  getData,
+  getLoading,
+  getLoaded,
+  getFailed,
+  reducer,
+} from '@grid-failure-information-app/shared/store/reducers/grid-failures/grid-failure-publication-channels.reducer';
+import * as gridFailureActions from '@grid-failure-information-app/shared/store/actions/grid-failures.action';
+import { PublicationChannel } from '@grid-failure-information-app/shared/models';
+
+describe('GridFailurePublicationChannelsReducer reducer', () => {
+  it('should return the initial state', () => {
+    const action = { type: 'NOOP' } as any;
+    const result = reducer(undefined, action);
+
+    expect(result).toBe(INITIAL_STATE);
+  });
+
+  it('should trigger loading state', () => {
+    const action = gridFailureActions.loadGridFailurePublicationChannels({ payload: 'x' });
+    const result = GridFailurePublicationChannelsReducer(INITIAL_STATE, action);
+
+    expect(result).toEqual({
+      ...INITIAL_STATE,
+      loading: true,
+    });
+  });
+
+  it('should trigger loaded state', () => {
+    const items = { payload: [new PublicationChannel()] };
+    const action = gridFailureActions.loadGridFailurePublicationChannelsSuccess(items);
+    const result = GridFailurePublicationChannelsReducer(INITIAL_STATE, action);
+
+    expect(result.loaded).toBe(true);
+  });
+
+  it('should trigger failed state', () => {
+    const error = { payload: 'err_msg' };
+    const action = gridFailureActions.loadGridFailurePublicationChannelsFail(error);
+    const result = GridFailurePublicationChannelsReducer(INITIAL_STATE, action);
+
+    expect(result).toEqual({
+      ...INITIAL_STATE,
+      failed: true,
+    });
+  });
+
+  it('getData return state.data', () => {
+    const state = { ...INITIAL_STATE };
+    const result = getData(state);
+    expect(result).toBe(state.data);
+  });
+
+  it('getLoading return state.loading', () => {
+    const state = { ...INITIAL_STATE };
+    const result = getLoading(state);
+    expect(result).toBe(state.loading);
+  });
+
+  it('getLoaded return state.loaded', () => {
+    const state = { ...INITIAL_STATE };
+    const result = getLoaded(state);
+    expect(result).toBe(state.loaded);
+  });
+
+  it('getFailed return state.failed', () => {
+    const state = { ...INITIAL_STATE };
+    const result = getFailed(state);
+    expect(result).toBe(state.failed);
+  });
+});
diff --git a/projects/grid-failure-information-app/src/app/shared/store/reducers/grid-failures/grid-failure-publication-channels.reducer.ts b/projects/grid-failure-information-app/src/app/shared/store/reducers/grid-failures/grid-failure-publication-channels.reducer.ts
new file mode 100644
index 0000000..a895a21
--- /dev/null
+++ b/projects/grid-failure-information-app/src/app/shared/store/reducers/grid-failures/grid-failure-publication-channels.reducer.ts
@@ -0,0 +1,69 @@
+/********************************************************************************
+ * Copyright (c) 2020 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ ********************************************************************************/
+import * as gridFailureActions from '@grid-failure-information-app/shared/store/actions/grid-failures.action';
+import { PublicationChannel } from '@grid-failure-information-app/shared/models';
+import { createReducer, on } from '@ngrx/store';
+
+export interface State {
+  loading: boolean;
+  loaded: boolean;
+  failed: boolean;
+  data: Array<PublicationChannel>;
+}
+
+export const INITIAL_STATE: State = {
+  loading: false,
+  loaded: false,
+  failed: false,
+  data: [],
+};
+
+export const GridFailurePublicationChannelsReducer = createReducer(
+  INITIAL_STATE,
+  on(gridFailureActions.loadGridFailurePublicationChannels, (state: any, action: any) => {
+    return {
+      ...state,
+      loading: true,
+      loaded: false,
+      failed: false,
+      data: [],
+    };
+  }),
+  on(gridFailureActions.loadGridFailurePublicationChannelsSuccess, (state: any, action: any) => {
+    return {
+      ...state,
+      loading: false,
+      loaded: true,
+      failed: false,
+      data: action['payload'],
+    };
+  }),
+  on(gridFailureActions.loadGridFailurePublicationChannelsFail, (state: any, action: any) => {
+    return {
+      ...state,
+      loaded: false,
+      loading: false,
+      failed: true,
+      data: [],
+    };
+  })
+);
+
+export function reducer(state = INITIAL_STATE, action: any): State {
+  return GridFailurePublicationChannelsReducer(state, action);
+}
+
+export const getData = (state: State) => state.data;
+export const getLoading = (state: State) => state.loading;
+export const getLoaded = (state: State) => state.loaded;
+export const getFailed = (state: State) => state.failed;
