diff --git a/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/repository/StationRepository.java b/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/repository/StationRepository.java
index f4d1ad8..030d2db 100644
--- a/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/repository/StationRepository.java
+++ b/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/repository/StationRepository.java
@@ -27,5 +27,5 @@
 
     List<TblStation> findAll();
 
-    Optional<TblStation> findByG3efid(Long g3efid);
+    Optional<TblStation> findByStationId(String stationId);
 }
diff --git a/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/service/StationService.java b/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/service/StationService.java
index 8e937cd..7464a76 100644
--- a/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/service/StationService.java
+++ b/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/service/StationService.java
@@ -46,11 +46,18 @@
     public StationDto updateOrInsertStationByG3efid(StationDto stationDto) {
 
         try {
-            Optional<TblStation> optTblStation = stationRepository.findByG3efid(stationDto.getG3efid());
+            Optional<TblStation> optTblStation = stationRepository.findByStationId(stationDto.getStationId());
 
             if (optTblStation.isPresent() ) {
                 TblStation tblStationToSave =  optTblStation.get();
 
+                tblStationToSave.setSdox1(stationDto.getSdox1());
+                tblStationToSave.setSdoy1(stationDto.getSdoy1());
+                tblStationToSave.setG3efid(stationDto.getG3efid());
+                tblStationToSave.setStationName(stationDto.getStationName());
+                tblStationToSave.setLatitude(stationDto.getLatitude());
+                tblStationToSave.setLongitude(stationDto.getLongitude());
+
                 TblStation savedStation = stationRepository.save(tblStationToSave);
                 return stationMapper.toStationDto(savedStation);
             } else {
diff --git a/addressImport/src/test/java/org/eclipse/openk/gridfailureinformation/importadresses/service/StationServiceTest.java b/addressImport/src/test/java/org/eclipse/openk/gridfailureinformation/importadresses/service/StationServiceTest.java
index 414bab9..f5855c9 100644
--- a/addressImport/src/test/java/org/eclipse/openk/gridfailureinformation/importadresses/service/StationServiceTest.java
+++ b/addressImport/src/test/java/org/eclipse/openk/gridfailureinformation/importadresses/service/StationServiceTest.java
@@ -59,7 +59,7 @@
         StationDto stationDto = MockDataHelper.mockStationDto(1);
         stationDto.setUuid(null);
 
-        when(stationRepository.findByG3efid(any(Long.class))).thenReturn(Optional.empty());
+        when(stationRepository.findByStationId(any(String.class))).thenReturn(Optional.empty());
         when(stationRepository.save(any(TblStation.class)))
                 .then((Answer<TblStation>) invocation -> {
                     Object[] args = invocation.getArguments();
@@ -79,7 +79,7 @@
         TblStation tblStation = stationMapper.toTableStation(stationDto);
 
 
-        when(stationRepository.findByG3efid(any(Long.class))).thenReturn(Optional.of(tblStation));
+        when(stationRepository.findByStationId(any(String.class))).thenReturn(Optional.of(tblStation));
         when(stationRepository.save(any(TblStation.class)))
                 .then((Answer<TblStation>) invocation -> {
                     Object[] args = invocation.getArguments();
@@ -97,7 +97,7 @@
         StationDto stationDto = MockDataHelper.mockStationDto(1);
         TblStation tblStation = stationMapper.toTableStation(stationDto);
 
-        when(stationRepository.findByG3efid(any(Long.class))).thenReturn(Optional.of(tblStation));
+        when(stationRepository.findByStationId(any(String.class))).thenReturn(Optional.of(tblStation));
         when(stationRepository.save(any(TblStation.class)))
                 .thenThrow(new IllegalArgumentException());
 
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationMapper.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationMapper.java
index ae2714f..be1ad8f 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationMapper.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationMapper.java
@@ -24,6 +24,7 @@
 
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 @Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
@@ -80,9 +81,9 @@
     }
     @AfterMapping
     default void populateStationIds(TblFailureInformation source, @MappingTarget FailureInformationDto failureInformationDto){
-        List<TblStation> sourceList = source.getStations();
+        Set<TblStation> stations = source.getStations();
 
-        failureInformationDto.setStationIds( sourceList != null ? sourceList.stream().map(TblStation::getUuid).collect(Collectors.toList()) : new LinkedList<>());
+        failureInformationDto.setStationIds( stations != null ? stations.stream().map(TblStation::getUuid).collect(Collectors.toList()) : new LinkedList<>());
     }
     @AfterMapping
     default void populatePublicationChannels(TblFailureInformation source, @MappingTarget FailureInformationDto failureInformationDto){
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 1d4e91f..3ae1c6b 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
@@ -120,13 +120,13 @@
     )
    private List<TblDistributionGroup> distributionGroups = new LinkedList<>();
 
-    @ManyToMany
+    @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(
             name = "tblFailureInformationStation",
             joinColumns = {@JoinColumn(name = "fkTblFailureInformation")},
             inverseJoinColumns = {@JoinColumn(name = "stationStationId", referencedColumnName="stationId") }
     )
-    private List<TblStation> stations = new LinkedList<>();
+    private Set<TblStation> stations = new HashSet<>();
 
     @OneToOne(mappedBy = "tblFailureInformation")
     private TblFailureInformationReminderMailSent failureInformationReminderMailSent;
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/StationRepository.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/StationRepository.java
index f00a4c9..990acf7 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/StationRepository.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/StationRepository.java
@@ -17,8 +17,6 @@
 
 import org.eclipse.openk.gridfailureinformation.model.TblStation;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -32,9 +30,6 @@
 
     Optional<TblStation> findByUuid(UUID uuid);
 
-    @Query("select s from TblStation s where s.stationId = :stationid and s.stationName = :stationname")
-    List<TblStation> findStationsByIdAndName(@Param("stationid") String stationid, @Param("stationname") String stationname);
-
     Optional<TblStation> findByStationId(String stationId);
 
 
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 f3262f1..c279114 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
@@ -354,6 +354,8 @@
 
     protected void updatePublicationChannels(FailureInformationDto sourceDto, TblFailureInformation destTblFailureInformation ){
 
+        if( sourceDto.getStationIds() != null ) {
+            Set<TblStation> stationList = new HashSet<>();
         // Löschen zugeordneter Kanäle mit published = false
         TblFailureInformation existingTblFailureInformation = failureInformationRepository.findByUuid(sourceDto.getUuid())
                 .orElseThrow(() -> new NotFoundException(Constants.FAILURE_INFO_UUID_NOT_EXISTING));
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationStationService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationStationService.java
index cf6b66f..f72c773 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationStationService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationStationService.java
@@ -33,6 +33,7 @@
 
 import javax.transaction.Transactional;
 import java.util.List;
+import java.util.Set;
 import java.util.UUID;
 import java.util.stream.Collectors;
 
@@ -75,7 +76,7 @@
         TblStation station = stationRepository.findByUuid(groupDto.getUuid())
                 .orElseThrow(() -> new NotFoundException("station.uuid.not.existing"));
 
-        List<TblStation> stations =  failureInformation.getStations();
+        Set<TblStation> stations =  failureInformation.getStations();
         if (!stations.isEmpty()) {
             for (TblStation group : stations) {
                 if (group.getUuid().equals(groupDto.getUuid())) {
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ImportService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ImportService.java
index 095edf5..79d56b1 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ImportService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ImportService.java
@@ -5,14 +5,14 @@
 import org.eclipse.openk.gridfailureinformation.exceptions.InternalServerErrorException;
 import org.eclipse.openk.gridfailureinformation.mapper.FailureInformationMapper;
 import org.eclipse.openk.gridfailureinformation.util.ImportDataValidator;
-import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationDto;
-import org.eclipse.openk.gridfailureinformation.viewmodel.ForeignFailureDataDto;
-import org.eclipse.openk.gridfailureinformation.viewmodel.ImportDataDto;
-import org.eclipse.openk.gridfailureinformation.viewmodel.RadiusDto;
+import org.eclipse.openk.gridfailureinformation.viewmodel.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
+import java.util.LinkedList;
+import java.util.List;
 import java.util.Optional;
 import java.util.UUID;
 
@@ -34,6 +34,9 @@
     StatusService statusService;
 
     @Autowired
+    StationService stationService;
+
+    @Autowired
     FailureInformationMapper failureInformationMapper;
 
     @Autowired
@@ -52,7 +55,7 @@
     }
 
 
-
+    @Transactional
     private FailureInformationDto doImport(ImportDataDto importDataDto, ForeignFailureDataDto foreignFailureDataDto) {
         FailureInformationDto existingDto = failureInformationService.findByObjectReferenceExternalSystem(importDataDto.getAssembledRefId());
 
@@ -117,7 +120,13 @@
         failureInformationDto.setPostcode(foreignFailureDataDto.getPostcode());
         failureInformationDto.setPressureLevel(foreignFailureDataDto.getPressureLevel());
         failureInformationDto.setStationDescription(foreignFailureDataDto.getStationDescription());
-        failureInformationDto.setStationId(foreignFailureDataDto.getStationId());
+        String foreignStationId = foreignFailureDataDto.getStationId();
+        failureInformationDto.setStationId(foreignStationId);
+        failureInformationDto.setStationIds(new LinkedList<>());
+        if( foreignStationId != null && !foreignStationId.isEmpty()) {
+            importStation(failureInformationDto.getStationIds(), foreignStationId);
+        }
+
         failureInformationDto.setStreet(foreignFailureDataDto.getStreet());
         failureInformationDto.setVoltageLevel(foreignFailureDataDto.getVoltageLevel());
 
@@ -134,6 +143,16 @@
         failureInformationDto.setObjectReferenceExternalSystem(importDataDto.getAssembledRefId());
     }
 
+    private void importStation(List<UUID> targetList, String stationIdToImport) {
+        StationDto selectedStation = stationService.getStationsById( stationIdToImport );
+        if( selectedStation != null ) {
+            targetList.add(selectedStation.getUuid());
+        }
+        if( !stationIdToImport.isEmpty() && targetList.isEmpty() ) {
+            log.warn("Import message delivered a stationId("+stationIdToImport+") that could not be resolved!");
+        }
+    }
+
     private void importRadius(long foreignRadius, FailureInformationDto failureInformationDto) {
         Optional<RadiusDto> bestFitHigh = radiusService.getRadii().stream()
                 .filter( r -> r.getRadius() >= foreignRadius )
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/StationService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/StationService.java
index 03d2cf8..db229af 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/StationService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/StationService.java
@@ -15,12 +15,14 @@
 package org.eclipse.openk.gridfailureinformation.service;
 
 import org.eclipse.openk.gridfailureinformation.mapper.StationMapper;
+import org.eclipse.openk.gridfailureinformation.model.TblStation;
 import org.eclipse.openk.gridfailureinformation.repository.StationRepository;
 import org.eclipse.openk.gridfailureinformation.viewmodel.StationDto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 @Service
@@ -39,10 +41,12 @@
     }
 
 
-    public List<StationDto> getStationsByIdAndName(String stationId, String stationName) {
-        return stationRepository.findStationsByIdAndName(stationId, stationName).stream()
-                .map(stationMapper::toStationDto)
-                .collect(Collectors.toList());
+    public StationDto getStationsById(String stationId) {
+        Optional<TblStation> tblStation = stationRepository.findByStationId(stationId);
+        if( tblStation.isPresent()) {
+            return stationMapper.toStationDto(tblStation.get());
+        }
+        return null;
     }
 
 }
diff --git a/gfsBackendService/src/main/resources/application_localdev.yml b/gfsBackendService/src/main/resources/application_localdev.yml
index 9400b00..e686c93 100644
--- a/gfsBackendService/src/main/resources/application_localdev.yml
+++ b/gfsBackendService/src/main/resources/application_localdev.yml
@@ -23,9 +23,9 @@
     port: 5672
     username: ${GFI_RABBITMQ_USERNAME}
     password: ${GFI_RABBITMQ_PASSWORD}
-    import_exchange: importExchangeLocalDev
-    failure_import_queue: failureImportQueueLocalDev
-    failure_import_routingkey: importExchangeLocalDev.failureImportKeyLocalDev
+    import_exchange: importExchangeLocalDev_fd
+    failure_import_queue: failureImportQueueLocalDev_fd
+    failure_import_routingkey: importExchangeLocalDev.failureImportKeyLocalDev_fd
     export_exchange: exportExchangeLocalDev
     channels:
       - name: MAIL
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/StationServiceTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/StationServiceTest.java
index 56f4dc5..242a4e2 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/StationServiceTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/StationServiceTest.java
@@ -27,6 +27,7 @@
 import org.springframework.test.context.ContextConfiguration;
 
 import java.util.List;
+import java.util.Optional;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
@@ -58,13 +59,10 @@
     @Test
     public void shouldFindASingleBranchByIdAndName() {
         TblStation mockTblStation = MockDataHelper.mockTblStation();
-        List<TblStation> mockTblStationList = MockDataHelper.mockTblStationList();
-        when(stationRepository.findStationsByIdAndName(any(String.class), any(String.class))).thenReturn(mockTblStationList);
-        List<StationDto> stationDtoList = stationService.getStationsByIdAndName("xyz", "abc");
+        when(stationRepository.findByStationId(any(String.class))).thenReturn(Optional.of(mockTblStation));
+        StationDto stationDto = stationService.getStationsById("xyz");
 
-        assertEquals(stationDtoList.size(), mockTblStationList.size());
-        assertEquals(2, stationDtoList.size());
-        assertEquals(stationDtoList.get(1).getUuid(), mockTblStationList.get(1).getUuid());
+        assertEquals(stationDto.getUuid(), mockTblStation.getUuid());
     }
 
 
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 da03d99..a207f20 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
@@ -29,6 +29,7 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 import static org.eclipse.openk.gridfailureinformation.constants.Constants.INTERNAL_SHORT;
 
@@ -152,7 +153,7 @@
         obj.setRefStatusIntern(mockRefStatus());
 
         obj.setDistributionGroups(mockDistributionGroupList());
-        obj.setStations(mockTblStationList());
+        obj.setStations(mockTblStationList().stream().collect(Collectors.toSet()));
 
         return obj;
     }
@@ -200,7 +201,7 @@
 
         obj.setRefStatusIntern(mockRefStatus());
         obj.setDistributionGroups(mockDistributionGroupList());
-        obj.setStations(mockTblStationList());
+        obj.setStations(mockTblStationList().stream().collect(Collectors.toSet()));
         return obj;
     }
 
@@ -974,7 +975,7 @@
 
     public static List<TblStation> mockTblStationList(){
 
-        List<TblStation> stationList = new ArrayList();
+        List<TblStation> stationList = new LinkedList();
         stationList.add(mockTblStation());
         stationList.add(mockTblStation2());
         return  stationList;
