diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/ProcessHelper.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/ProcessHelper.java
index 2e35f34..3e8635e 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/ProcessHelper.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/ProcessHelper.java
@@ -10,14 +10,17 @@
 import org.eclipse.openk.gridfailureinformation.model.RefFailureClassification;
 import org.eclipse.openk.gridfailureinformation.model.RefStatus;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformation;
+import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationPublicationChannel;
 import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationDto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
 import java.util.Optional;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 @Log4j2
 @RequiredArgsConstructor
@@ -62,9 +65,14 @@
     }
 
     public void publishFailureInformation( FailureInformationDto dto ) {
-        String[] channels = new String[dto.getPublicationChannels().size()];
+
+        TblFailureInformation tblFailureInfo = environment.getFailureInformationRepository().findByUuid(dto.getUuid()).orElseThrow(()-> new NotFoundException(""));
+        List<TblFailureInformationPublicationChannel> channelList = environment.getChannelRepository().findByTblFailureInformation(tblFailureInfo);
+
+        String[] channels = new String[channelList.size()];
         environment.getExportService().exportFailureInformation(dto.getUuid(),
-                dto.getPublicationChannels().toArray(channels));
+                channelList.stream().map(x->x.getPublicationChannel()).collect(Collectors.toList()).toArray(channels));
+
     }
 
     public void resetPublishedStateForChannels( FailureInformationDto dto ) {
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformation.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformation.java
index cc9fbca..08ba8d2 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformation.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformation.java
@@ -14,7 +14,9 @@
 */
 package org.eclipse.openk.gridfailureinformation.model;
 
+import lombok.AccessLevel;
 import lombok.Data;
+import lombok.Setter;
 import org.springframework.data.annotation.CreatedBy;
 import org.springframework.data.annotation.CreatedDate;
 import org.springframework.data.annotation.LastModifiedBy;
@@ -110,21 +112,24 @@
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(
             name = "tblFailureInformationDistributionGroup",
-            joinColumns = {@JoinColumn(name = "fkTblFailureInformation")},
+            joinColumns = {@JoinColumn(updatable = false, name = "fkTblFailureInformation")},
             inverseJoinColumns = {@JoinColumn(name = "fkTblDistributionGroup")}
     )
-   private List<TblDistributionGroup> distributionGroups = new LinkedList<>();
+
+    private List<TblDistributionGroup> distributionGroups = new LinkedList<>();
 
     @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(
             name = "tblFailureInformationStation",
-            joinColumns = {@JoinColumn(name = "fkTblFailureInformation")},
+            joinColumns = {@JoinColumn(updatable = false, name = "fkTblFailureInformation")},
             inverseJoinColumns = {@JoinColumn(name = "stationStationId", referencedColumnName="stationId") }
     )
     private Set<TblStation> stations = new HashSet<>();
 
     @OneToOne(mappedBy = "tblFailureInformation")
     private TblFailureInformationReminderMailSent failureInformationReminderMailSent;
+
+    //@Setter(AccessLevel.NONE)
     @OneToMany(cascade=CascadeType.ALL, mappedBy="tblFailureInformation", orphanRemoval = true)
     private List<TblFailureInformationPublicationChannel> publicationChannelList = new ArrayList<>();
 
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformationPublicationChannel.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformationPublicationChannel.java
index 326103b..d199e12 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformationPublicationChannel.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformationPublicationChannel.java
@@ -32,7 +32,7 @@
     private Long id;
 
     @ManyToOne
-    @JoinColumn( name = "fk_tbl_failure_information")
+    @JoinColumn( name = "fkTblFailureInformation")
     //@NotNull
     private TblFailureInformation tblFailureInformation;
     //@NotNull
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationService.java
index 942f8aa..d7783c7 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationService.java
@@ -159,7 +159,9 @@
         if( getRefStatus(failureInformationDto).getId() != GfiProcessState.QUALIFIED.getStatusValue()) {
             throw new BadRequestException("Publishing is only possible with state 'qualified'");
         }
-        if( failureInformationDto.getPublicationChannels().isEmpty()) {
+        TblFailureInformation tblFailureInfo = failureInformationRepository.findByUuid(failureInformationDto.getUuid()).orElseThrow(()-> new NotFoundException(""));
+        List<TblFailureInformationPublicationChannel>  channelList = failureInformationPublicationChannelRepository.findByTblFailureInformation(tblFailureInfo);
+        if(  channelList.isEmpty()) {
             throw new BadRequestException("Publishing is only possible with at least one selected channel");
         }
         return processGrid(failureInformationDto, GfiProcessState.CHECKED_FOR_PUBLISH_);
@@ -238,11 +240,20 @@
 //        if(sourceDto.getPublicationChannels() != null){
 //            updatePublicationChannels(sourceDto, destTblFailureInformation);
 //        }
-
+        resolvePublicationChannels(destTblFailureInformation);
         resolveStationIds(destTblFailureInformation, sourceDto);
         resolveDistributionGroups(destTblFailureInformation, sourceDto);
     }
 
+    private void resolvePublicationChannels(TblFailureInformation destTblFailureInformation) {
+
+        List<TblFailureInformationPublicationChannel> channelList = failureInformationPublicationChannelRepository.findByTblFailureInformation(destTblFailureInformation);
+
+           if(!channelList.isEmpty()){
+               destTblFailureInformation.setPublicationChannelList(channelList);
+           }
+    }
+
     private void resolveDistributionGroups(TblFailureInformation destTblFailureInformation, FailureInformationDto sourceDto) {
         if( sourceDto.getDistributionGroupUuids() != null ) {
             resolveDistributionGroupUuids(destTblFailureInformation, sourceDto);
@@ -270,6 +281,8 @@
         for (UUID distributionGroupUuid : sourceDto.getDistributionGroupUuids()) {
             distributionGroupList.add(distributionGroupRepository.findByUuid(distributionGroupUuid).orElseThrow(() -> new NotFoundException("distribution.group.uuid.not.existing")));
         }
+
+        destTblFailureInformation.setDistributionGroups(distributionGroupList.stream().collect(Collectors.toList()));
     }
 
     private void resolveCondensed(TblFailureInformation destTblFailureInformation, FailureInformationDto sourceDto) {
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationServiceTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationServiceTest.java
index 136fe7c..4a190cb 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationServiceTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationServiceTest.java
@@ -69,6 +69,8 @@
     private AddressRepository addressRepository;
     @MockBean
     private DistributionGroupRepository distributionGroupRepository;
+    @MockBean
+    private FailureInformationPublicationChannelRepository failureInformationPublicationChannelRepository;
 
     @Test
     public void shouldFindFailureInformations() {
@@ -487,6 +489,7 @@
         RefExpectedReason refExpectedReason = MockDataHelper.mockRefExpectedReason();
         TblStation tblStation = MockDataHelper.mockTblStation();
         TblDistributionGroup tblDistributionGroup = MockDataHelper.mockTblDistributionGroup();
+        List<TblFailureInformationPublicationChannel> publicationChannelList = MockDataHelper.mockTblFailureInformationPublicationChannelList();
 
         when(statusRepository.findById(anyLong())).thenReturn(Optional.of(refStatus));
         when(failureInformationRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(fiTbl), Optional.of(fiTbl));
@@ -497,6 +500,7 @@
         when(expectedReasonRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(refExpectedReason));
         when(stationRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(tblStation));
         when(distributionGroupRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(tblDistributionGroup));
+        when(failureInformationPublicationChannelRepository.findByTblFailureInformation(any(TblFailureInformation.class))).thenReturn(publicationChannelList);
 
         fiDto.setUuid(null);
 
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java
index ebb0b2f..1361769 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java
@@ -1279,6 +1279,14 @@
         return tfipChannel;
     }
 
+    public static List<TblFailureInformationPublicationChannel> mockTblFailureInformationPublicationChannelList(){
+        List<TblFailureInformationPublicationChannel> channelList = new LinkedList<>();
+        channelList.add(mockTblFailureInformationPublicationChannel());
+        channelList.add(mockTblFailureInformationPublicationChannel2());
+
+        return channelList;
+    }
+
     public static List<ArrayList<BigDecimal>> mockPolygonCoordinatesList(){
 
         List<ArrayList<BigDecimal>> cordinatesList = new LinkedList<>();
