Merge branch 'DEVELOP' of ssh://git.eclipse.org:29418/openk-usermodules/org.eclipse.openk-usermodules.gridFailureInformation.backend into MIGRATE_TO_ORACLE
diff --git a/.idea/sonarlint/issuestore/index.pb b/.idea/sonarlint/issuestore/index.pb
index 46f406e..d4fa902 100644
--- a/.idea/sonarlint/issuestore/index.pb
+++ b/.idea/sonarlint/issuestore/index.pb
@@ -2,4 +2,20 @@
 
 mgfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/config/DmzExportSchedulerConfig.java,b\2\b294790a0abf6e6345fdbe7b70e1480d994e4db9
 d
-4gfsBackendService/src/main/resources/application.yml,3\4\34d646736ecacfcbb8cb9909b3cdaa5e74530360
\ No newline at end of file
+4gfsBackendService/src/main/resources/application.yml,3\4\34d646736ecacfcbb8cb9909b3cdaa5e74530360
+z
+JgfsBackendService/src/main/resources/db/migration/V0_46__CREATE_GFI_DB.sql,1\2\12d83cf53667985296308217bb938346ec30dfd0
+œ
+laddressImport/src/test/java/org/eclipse/openk/gridfailureinformation/importadresses/jobs/JobManagerTest.java,3\5\35804fe8dc95851adec9d3eeabdd78ca650f3ac6
+V
+&gfsBackendService/Dockerfile_DevServer,f\5\f5b5d8322602fcae4be1013578986089a5e5acd0
+I
+gfsBackendService/pom.xml,b\8\b8d294268e747529c4155fac3bab551c65aeddba
+^
+.gfsBackendService/Dockerfile_DevServerUnsecure,7\d\7d1f11155aeaeedb6ca734ebe7ed60be35052252
+y
+IgfsBackendService/src/main/resources/db/migration/V0_1__CREATE_GFI_DB.sql,a\f\af976f53a5adee972a90cc8ade824991fc4ff366
+z
+JgfsBackendService/src/main/resources/db/migration/V0_47__CREATE_GFI_DB.sql,c\5\c52c239c5ea0f0e00ccafc87512d0617b22040de
+S
+#gfsBackendService/Dockerfile_Branch,f\9\f9b95f78c7148f2ae671235c95fa2726f710ce20
\ No newline at end of file
diff --git a/addressImport/pom.xml b/addressImport/pom.xml
index 3a71380..5434452 100644
--- a/addressImport/pom.xml
+++ b/addressImport/pom.xml
@@ -145,7 +145,21 @@
 			<artifactId>h2</artifactId>
 			<version>${h2.version}</version>
 		</dependency>
-
+		<dependency>
+			<groupId>com.oracle.database.jdbc</groupId>
+			<artifactId>ojdbc8</artifactId>
+			<version>19.6.0.0</version>
+		</dependency>
+		<dependency>
+			<groupId>com.oracle.database.jdbc</groupId>
+			<artifactId>ucp</artifactId>
+			<version>19.6.0.0</version>
+		</dependency>
+		<dependency>
+			<groupId>org.hibernate</groupId>
+			<artifactId>hibernate-core</artifactId>
+			<version>5.4.2.Final</version>
+		</dependency>
 		<dependency>
 			<groupId>com.rabbitmq</groupId>
 			<artifactId>amqp-client</artifactId>
diff --git a/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/config/OracleConfig.java b/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/config/OracleConfig.java
new file mode 100644
index 0000000..5bbe4cd
--- /dev/null
+++ b/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/config/OracleConfig.java
@@ -0,0 +1,60 @@
+package org.eclipse.openk.gridfailureinformation.importadresses.config;
+
+import lombok.SneakyThrows;
+import lombok.extern.log4j.Log4j2;
+import oracle.ucp.jdbc.PoolDataSource;
+import oracle.ucp.jdbc.PoolDataSourceFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+import javax.sql.DataSource;
+import java.sql.SQLException;
+
+@Log4j2
+@Configuration
+@ConditionalOnProperty(
+        value="spring.datasource.enable-oracle-configuration",
+        havingValue = "true",
+        matchIfMissing = false)
+public class OracleConfig {
+    @Value("${spring.datasource.url}")
+    private String url;
+    @Value("${spring.datasource.username}")
+    private String username;
+    @Value("${spring.datasource.password}")
+    private String password;
+    @Value("${oracle.ucp.minPoolSize}")
+    private String minPoolSize;
+
+    @Value("${oracle.ucp.maxPoolSize}")
+    private String maxPoolSize;
+
+    @Value("${spring.datasource.driver-class-name:oracle.jdbc.pool.OracleDataSource}")
+    private String driverClassName;
+
+    @SneakyThrows
+    @Bean(name = "OracleUniversalConnectionPool")
+    @Primary
+    public DataSource getDataSource() {
+        PoolDataSource pds = null;
+        try {
+            pds = PoolDataSourceFactory.getPoolDataSource();
+
+            pds.setConnectionFactoryClassName(driverClassName);
+            pds.setURL(url);
+            pds.setUser(username);
+            pds.setPassword(password);
+            pds.setMinPoolSize(Integer.valueOf(minPoolSize));
+            pds.setInitialPoolSize(10);
+            pds.setMaxPoolSize(Integer.valueOf(maxPoolSize));
+
+        } catch (SQLException ea) {
+            log.error("Error connecting to the database: " + ea.getMessage());
+        }
+
+        return pds;
+    }
+}
\ No newline at end of file
diff --git a/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/model/TblAddress.java b/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/model/TblAddress.java
index b52a85c..06a97cd 100644
--- a/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/model/TblAddress.java
+++ b/addressImport/src/main/java/org/eclipse/openk/gridfailureinformation/importadresses/model/TblAddress.java
@@ -22,10 +22,11 @@
 
 @Data
 @Entity
+@Table(name = "TBL_GFI_ADDRESS")
 public class TblAddress {
     @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "tbl_address_id_seq")
-    @SequenceGenerator(name = "tbl_address_id_seq", sequenceName = "tbl_address_id_seq", allocationSize = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "TBL_GFI_ADDRESS_ID_SEQ")
+    @SequenceGenerator(name = "TBL_GFI_ADDRESS_ID_SEQ", sequenceName = "TBL_GFI_ADDRESS_ID_SEQ", allocationSize = 1)
     @Column(name = "id", updatable = false)
     private Long id;
     private UUID uuid;
diff --git a/addressImport/src/main/resources/application.yml b/addressImport/src/main/resources/application.yml
index 8a116ed..091e612 100644
--- a/addressImport/src/main/resources/application.yml
+++ b/addressImport/src/main/resources/application.yml
@@ -12,9 +12,25 @@
 #  *******************************************************************************
 spring:
   datasource:
-    url: jdbc:postgresql://entopticadirx:5432/GridFailureInfoDevServer
-    username: ${GFI_DB_USERNAME}
-    password: ${GFI_DB_PASSWORD}
+## ---- postgres ---------------------------------------------------
+#    url: jdbc:postgresql://entopticadirx:5432/GridFailureInfoDevServer
+#    username: ${GFI_DB_USERNAME}
+#    password: ${GFI_DB_PASSWORD}
+# ------------------------------------------------------------------
+## ---- oracle -----------------------------------------------------
+    enable-oracle-configuration: true
+    url: jdbc:oracle:thin:@LIDLORADB2.PTA.DE:1521:NAPDB00
+    username: dietricf
+    password: dietricf000
+  jpa:
+    database-platform: org.hibernate.dialect.Oracle10gDialect
+    show-sql: false
+
+oracle:
+  ucp:
+    minPoolSize: 2
+    maxPoolSize: 10
+# End Orale Config---------------------------------------------------
 
 server:
   port: 9164
@@ -173,4 +189,76 @@
     gas-connections: /opt/mics/addressImport/importFiles/EREP_CSV_GAS_HAUSANSCHLUSS.csv
     telecommunication-connections: /opt/mics/addressImport/importFiles/EREP_CSV_TELEKOMMUNIKATION_HAUSANSCHLUSS.csv
     districtheating-connections: /opt/mics/addressImport/importFiles/EREP_CSV_FERNWAERME_HAUSANSCHLUSS.csv
-    power-stations: /opt/mics/addressImport/importFiles/EREP_CSV_STROM_STATION.csv
\ No newline at end of file
+    power-stations: /opt/mics/addressImport/importFiles/EREP_CSV_STROM_STATION.csv
+
+---
+
+
+spring:
+  profiles: localdev
+  datasource:
+    ## ---- postgres ---------------------------------------------------
+    #    url: jdbc:postgresql://entopticadirx:5432/GridFailureInfoDevelop
+    #    username: ${GFI_DB_USERNAME}
+    #    password: ${GFI_DB_PASSWORD}
+    # ------------------------------------------------------------------
+    ## ---- oracle -----------------------------------------------------
+    enable-oracle-configuration: true
+    url: jdbc:oracle:thin:@LIDLORADB2.PTA.DE:1521:NAPDB00
+    username: dietricf
+    password: dietricf000
+  jpa:
+    database-platform: org.hibernate.dialect.Oracle10gDialect
+    show-sql: false
+
+oracle:
+  ucp:
+    minPoolSize: 2
+    maxPoolSize: 10
+# End Orale Config---------------------------------------------------
+
+adressimport:
+  cleanup: true
+  cron: 0 1 0 1 * ?
+  file:
+    addresses: C:/jworkspace/openKonsequenz/grid-failure-information/gridFailureInformation.backend/addressImport/importFiles/EREP_CSV_ADRESSEN.csv
+    power-connections: C:/jworkspace/openKonsequenz/grid-failure-information/gridFailureInformation.backend/addressImport/importFiles/EREP_CSV_STROM_HAUSANSCHLUSS.csv
+    water-connections: C:/jworkspace/openKonsequenz/grid-failure-information/gridFailureInformation.backend/addressImport/importFiles/EREP_CSV_WASSER_HAUSANSCHLUSS.csv
+    gas-connections: C:/jworkspace/openKonsequenz/grid-failure-information/gridFailureInformation.backend/addressImport/importFiles/EREP_CSV_GAS_HAUSANSCHLUSS.csv
+    telecommunication-connections: C:/jworkspace/openKonsequenz/grid-failure-information/gridFailureInformation.backend/addressImport/importFiles/EREP_CSV_TELEKOMMUNIKATION_HAUSANSCHLUSS.csv
+    districtheating-connections: C:/jworkspace/openKonsequenz/grid-failure-information/gridFailureInformation.backend/addressImport/importFiles/EREP_CSV_FERNWAERME_HAUSANSCHLUSS.csv
+    power-stations: C:/jworkspace/openKonsequenz/grid-failure-information/gridFailureInformation.backend/addressImport/importFiles/EREP_CSV_STROM_STATION.csv
+
+server:
+  port: 9164
+  max-http-header-size: 262144
+  servlet:
+    session:
+      tracking-modes: cookie
+
+jwt:
+  tokenHeader: Authorization
+  useStaticJwt: false
+  staticJwt: eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJIYlI3Z2pobmE2eXJRZnZJTWhUSV9tY2g3ZmtTQWVFX3hLTjBhZVl0bjdjIn0.eyJqdGkiOiI5MGI0NGFkOC1iYjlmLTQ1MzktYTQwYy0yYjQyZTNkNjNiOGEiLCJleHAiOjE1Nzg2NTU3OTUsIm5iZiI6MCwiaWF0IjoxNTc4NjU1NDk1LCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvYXV0aC9yZWFsbXMvRWxvZ2Jvb2siLCJhdWQiOiJlbG9nYm9vay1iYWNrZW5kIiwic3ViIjoiODYyNjY5NmYtZjFhMi00ZGI1LTkyZWYtZTlhMjQ2Njg1YTU0IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiZWxvZ2Jvb2stYmFja2VuZCIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjJmMWIzODE5LWZjNjQtNDEzNC1iNWQxLWY3ZWY4NzU5NDBkNCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsia29uLWFkbWluIiwia29uLXdyaXRlciIsImtvbi1hY2Nlc3MiLCJrb24tcmVhZGVyIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnt9LCJuYW1lIjoiVGVzdGVyRmlyc3RuYW1lX3J3YSBUZXN0ZXJMYXN0bmFtZV9yd2EiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ0ZXN0dXNlcl9yd2EiLCJnaXZlbl9uYW1lIjoiVGVzdGVyRmlyc3RuYW1lX3J3YSIsImZhbWlseV9uYW1lIjoiVGVzdGVyTGFzdG5hbWVfcndhIn0.DAYXuv4tKn8RXqO1jyttnD-tF4nShUBQyfe4bKbAiPAyY2x5YbAf3M4eXnLrGqo8-loGKldICC28bL0LaMA3KKkQEOfW5sfpGqoN6212vs89mOklt0TJYc5PMXwFgJ5WC_TKjdwq7-aaDafOEWehV0U1ut3s-94ovNYIEn29nzXm2W1ldoXJEq03F880jlysQ5zlRvGF7eXEEpFfI2URyyNQ2UWh0Ssfq-gOAt2pbF1u6prA5RfvUmZ3v1eu21YLGZtgqPqxb1l6odyH3ip15j_HdgnTeo52ymxuRUj65Mskme3V5ev2DitHI9vZgnpV8Idhb4TTWliBeGCOMfDFCg
+
+services:
+  authNAuth:
+    name: authNAuthService
+
+authNAuthService:
+  ribbon:
+    listOfServers: http://localhost:8080
+
+cors:
+  corsEnabled: true
+
+logging:
+  level:
+    root: INFO
+    org.eclipse.openk: DEBUG
+    org.springframework.web: ERROR
+    org.hibernate: ERROR
+
+swagger:
+  baseUrl: /addressImporter
+
diff --git a/addressImport/src/main/resources/db/migration/V1_2__CHANGE_ADDRESS_TABLE.sql b/addressImport/src/main/resources/db/migration/V1_2__CHANGE_ADDRESS_TABLE.sql
new file mode 100644
index 0000000..ddd60a9
--- /dev/null
+++ b/addressImport/src/main/resources/db/migration/V1_2__CHANGE_ADDRESS_TABLE.sql
@@ -0,0 +1,117 @@
+-----------------------------------------------------------------------------------
+-- *******************************************************************************
+-- * Copyright (c) 2019 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
+-- *******************************************************************************
+-----------------------------------------------------------------------------------
+
+
+
+-- ----------------------------------------------------------------------------
+-- ----------------------------------------------------------------------------
+-- Tables ADDRESSIMPORT
+-- ----------------------------------------------------------------------------
+-- ----------------------------------------------------------------------------
+
+DROP TABLE IF EXISTS public.TBL_GFI_ADDRESS CASCADE;
+DROP SEQUENCE IF EXISTS public.TBL_GFI_ADDRESS_ID_SEQ;
+
+DROP TABLE IF EXISTS public.TBL_ADDRESS CASCADE;
+DROP SEQUENCE IF EXISTS public.TBL_ADDRESS_ID_SEQ;
+
+-- ---------------------------------------------
+-- TABLE TBL_ADDRESS
+-- ---------------------------------------------
+CREATE SEQUENCE public.TBL_GFI_ADDRESS_ID_SEQ
+  INCREMENT 1
+  MINVALUE 1
+  MAXVALUE 9223372036854775807
+  START 1
+  CACHE 1;
+ALTER TABLE public.TBL_GFI_ADDRESS_ID_SEQ
+  OWNER TO GFI_SERVICE;
+
+CREATE TABLE public.TBL_GFI_ADDRESS
+(
+  ID integer NOT NULL DEFAULT nextval('TBL_GFI_ADDRESS_ID_SEQ'::regclass),
+  UUID uuid NOT NULL,
+  SDOX1 numeric(9,2) NOT NULL,
+  SDOY1 numeric(10,2) NOT NULL,
+  G3EFID numeric,
+  POSTCODE character varying(30),
+  COMMUNITY character varying(255),
+  DISTRICT character varying(255),
+  STREET character varying(255),
+  HOUSENUMBER character varying(30),
+  WATER_CONNECTION boolean,
+  WATER_GROUP character varying(255),
+  GAS_CONNECTION boolean,
+  GAS_GROUP character varying(255),
+  POWER_CONNECTION boolean,
+  DISTRICTHEATING_CONNECTION boolean,
+  TELECOMM_CONNECTION boolean,
+  STATION_ID character varying(30),
+  LONGITUDE numeric(9,6),
+  LATITUDE numeric(9,6),
+  CONSTRAINT TBL_ADDRESS_PKEY PRIMARY KEY (id)
+);
+
+ALTER TABLE public.TBL_GFI_ADDRESS
+  OWNER TO GFI_SERVICE;
+GRANT ALL ON TABLE public.TBL_GFI_ADDRESS TO GFI_SERVICE;
+
+CREATE INDEX idx_tbl_gfiaddress_g3efid ON public.TBL_GFI_ADDRESS ( G3EFID );
+CREATE INDEX idx_tbl_gfiaddress_postcode ON public.TBL_GFI_ADDRESS ( POSTCODE );
+CREATE INDEX idx_tbl_gfiaddress_community ON public.TBL_GFI_ADDRESS ( COMMUNITY );
+CREATE INDEX idx_tbl_gfiaddress_district ON public.TBL_GFI_ADDRESS ( DISTRICT );
+CREATE INDEX idx_tbl_gfiaddress_street ON public.TBL_GFI_ADDRESS ( STREET );
+CREATE INDEX idx_tbl_gfiaddress_station_id ON public.TBL_GFI_ADDRESS ( STATION_ID );
+
+
+-- ---------------------------------------------
+-- TABLE TBL_STATION
+-- ---------------------------------------------
+
+DROP TABLE IF EXISTS public.TBL_STATION CASCADE;
+DROP SEQUENCE IF EXISTS public.TBL_STATION_ID_SEQ;
+
+CREATE SEQUENCE public.TBL_STATION_ID_SEQ
+  INCREMENT 1
+  MINVALUE 1
+  MAXVALUE 9223372036854775807
+  START 1
+  CACHE 1;
+ALTER TABLE public.TBL_STATION_ID_SEQ
+  OWNER TO GFI_SERVICE;
+
+CREATE TABLE public.TBL_STATION
+(
+  ID integer NOT NULL DEFAULT nextval('TBL_STATION_ID_SEQ'::regclass),
+  UUID uuid NOT NULL,
+  SDOX1 numeric(9,2) NOT NULL,
+  SDOY1 numeric(10,2) NOT NULL,
+  G3EFID numeric,
+  STATION_ID character varying(30),
+  STATION_NAME character varying(255),
+  LONGITUDE numeric(9,6),
+  LATITUDE numeric(9,6),
+  CONSTRAINT TBL_STATION_PKEY PRIMARY KEY (id)
+);
+
+ALTER TABLE public.TBL_STATION
+  OWNER TO GFI_SERVICE;
+GRANT ALL ON TABLE public.TBL_STATION TO GFI_SERVICE;
+
+CREATE INDEX idx_tbl_station_g3efid ON public.TBL_STATION ( G3EFID );
+CREATE INDEX idx_tbl_station_station_id ON public.TBL_STATION ( STATION_ID );
+CREATE INDEX idx_tbl_station_uuid ON public.TBL_STATION ( UUID );
+
+
diff --git a/gfsBackendService/pom.xml b/gfsBackendService/pom.xml
index a00189d..39a17de 100644
--- a/gfsBackendService/pom.xml
+++ b/gfsBackendService/pom.xml
@@ -174,7 +174,21 @@
 			<artifactId>h2</artifactId>
 			<version>${h2.version}</version>
 		</dependency>
-		<!-- https://mvnrepository.com/artifact/com.icegreen/greenmail-spring -->
+		<dependency>
+			<groupId>com.oracle.database.jdbc</groupId>
+			<artifactId>ojdbc8</artifactId>
+			<version>19.6.0.0</version>
+		</dependency>
+		<dependency>
+			<groupId>com.oracle.database.jdbc</groupId>
+			<artifactId>ucp</artifactId>
+			<version>19.6.0.0</version>
+		</dependency>
+		<dependency>
+			<groupId>org.hibernate</groupId>
+			<artifactId>hibernate-core</artifactId>
+			<version>5.4.2.Final</version>
+		</dependency>
 		<dependency>
 			<groupId>com.icegreen</groupId>
 			<artifactId>greenmail-spring</artifactId>
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/config/OracleConfig.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/config/OracleConfig.java
new file mode 100644
index 0000000..5729eb1
--- /dev/null
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/config/OracleConfig.java
@@ -0,0 +1,60 @@
+package org.eclipse.openk.gridfailureinformation.config;
+
+import lombok.SneakyThrows;
+import lombok.extern.log4j.Log4j2;
+import oracle.ucp.jdbc.PoolDataSource;
+import oracle.ucp.jdbc.PoolDataSourceFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+import javax.sql.DataSource;
+import java.sql.SQLException;
+
+@Log4j2
+@Configuration
+@ConditionalOnProperty(
+        value="spring.datasource.enable-oracle-configuration",
+        havingValue = "true",
+        matchIfMissing = false)
+public class OracleConfig {
+    @Value("${spring.datasource.url}")
+    private String url;
+    @Value("${spring.datasource.username}")
+    private String username;
+    @Value("${spring.datasource.password}")
+    private String password;
+    @Value("${oracle.ucp.minPoolSize}")
+    private String minPoolSize;
+
+    @Value("${oracle.ucp.maxPoolSize}")
+    private String maxPoolSize;
+
+    @Value("${spring.datasource.driver-class-name:oracle.jdbc.pool.OracleDataSource}")
+    private String driverClassName;
+
+    @SneakyThrows
+    @Bean(name = "OracleUniversalConnectionPool")
+    @Primary
+    public DataSource getDataSource() {
+        PoolDataSource pds = null;
+        try {
+            pds = PoolDataSourceFactory.getPoolDataSource();
+
+            pds.setConnectionFactoryClassName(driverClassName);
+            pds.setURL(url);
+            pds.setUser(username);
+            pds.setPassword(password);
+            pds.setMinPoolSize(Integer.valueOf(minPoolSize));
+            pds.setInitialPoolSize(10);
+            pds.setMaxPoolSize(Integer.valueOf(maxPoolSize));
+
+        } catch (SQLException ea) {
+            log.error("Error connecting to the database: " + ea.getMessage());
+        }
+
+        return pds;
+    }
+}
\ No newline at end of file
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationDistributionGroupMapper.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationDistributionGroupMapper.java
index 452d779..8a674aa 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationDistributionGroupMapper.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationDistributionGroupMapper.java
@@ -24,16 +24,9 @@
 @Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
 public interface FailureInformationDistributionGroupMapper {
     @Mappings({
-            @Mapping(source = "fkTblFailureInformation", target = "failureInformationId"),
-            @Mapping(source = "fkTblDistributionGroup", target = "distributionGroupId")
+            @Mapping(source = "failureInformation.id", target = "failureInformationId"),
+            @Mapping(source = "distributionGroup.id", target = "distributionGroupId")
     })
     FailureInformationDistributionGroupDto toFailureInfoDistributionGroupDto(TblFailureInformationDistributionGroup tblFailureInformationDistributionGroup);
 
-
-    @Mappings({
-            @Mapping(target = "fkTblFailureInformation", source = "failureInformationId"),
-            @Mapping(target = "fkTblDistributionGroup", source = "distributionGroupId")
-    })
-    TblFailureInformationDistributionGroup toTblFailureInformationDistributionGroup(FailureInformationDistributionGroupDto failureInformationDistributionGroupDto);
-
 }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationStationMapper.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationStationMapper.java
index 4c96501..1cc61d4 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationStationMapper.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/mapper/FailureInformationStationMapper.java
@@ -14,7 +14,7 @@
  */
 package org.eclipse.openk.gridfailureinformation.mapper;
 
-import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationStation;
+import org.eclipse.openk.gridfailureinformation.model.TblFailinfoStation;
 import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationStationDto;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
@@ -24,14 +24,8 @@
 @Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
 public interface FailureInformationStationMapper {
     @Mappings({
-            @Mapping(source = "fkTblFailureInformation", target = "failureInformationId")
+            @Mapping(source = "failureInformation.id", target = "failureInformationId")
     })
-    FailureInformationStationDto toFailureInfoStationDto(TblFailureInformationStation tblFailureInformationStation);
-
-
-    @Mappings({
-            @Mapping(target = "fkTblFailureInformation", source = "failureInformationId")
-    })
-    TblFailureInformationStation toTblFailureInformationStation(FailureInformationStationDto failureInformationStationDto);
+    FailureInformationStationDto toFailureInfoStationDto(TblFailinfoStation tblFailureInformationStation);
 
 }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/HtblFailureInformation.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/HtblFailureInformation.java
index 8bb0f25..b47d637 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/HtblFailureInformation.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/HtblFailureInformation.java
@@ -68,6 +68,7 @@
     private String stationCoords;
     private BigDecimal longitude;
     private BigDecimal latitude;
+    @Column( name = "object_ref_ext_system")
     private String objectReferenceExternalSystem;
     private String publicationStatus;
     private String publicationFreetext;
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/HtblFailureInformationStation.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/HtblFailureInformationStation.java
index 895b9a0..5ef216e 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/HtblFailureInformationStation.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/HtblFailureInformationStation.java
@@ -22,14 +22,16 @@
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
 import java.util.Date;
 
 @Data
 @Entity
+@Table( name = "HTBL_FAILINFO_STATION")
 public class HtblFailureInformationStation {
     @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "htbl_failure_information_station_id_seq")
-    @SequenceGenerator(name = "htbl_failure_information_station_id_seq", sequenceName = "htbl_failure_information_station_id_seq", allocationSize = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "HTBL_FAILINFO_STATION_ID_SEQ")
+    @SequenceGenerator(name = "HTBL_FAILINFO_STATION_ID_SEQ", sequenceName = "HTBL_FAILINFO_STATION_ID_SEQ", allocationSize = 1)
     @Column(name = "hid", updatable = false)
     private Long hid;
     private Date hdate;
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/RefBranch.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/RefBranch.java
index 27059b0..0b513cb 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/RefBranch.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/RefBranch.java
@@ -16,15 +16,22 @@
 
 import lombok.Data;
 
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
 import java.util.UUID;
 
 @Data
 @Entity
+@Table( name = "REF_GFI_BRANCH")
 public class RefBranch {
     @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "ref_branch_id_seq")
-    @SequenceGenerator(name = "ref_branch_id_seq", sequenceName = "ref_branch_id_seq", allocationSize = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "ref_gfi_branch_id_seq")
+    @SequenceGenerator(name = "ref_gfi_branch_id_seq", sequenceName = "ref_gfi_branch_id_seq", allocationSize = 1)
     @Column(name = "id", updatable = false)
     private Long id;
     private UUID uuid;
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/RefFailureClassification.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/RefFailureClassification.java
index 34a8c60..a094087 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/RefFailureClassification.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/RefFailureClassification.java
@@ -23,8 +23,8 @@
 @Entity
 public class RefFailureClassification {
     @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "ref_failure_classification_id_seq")
-    @SequenceGenerator(name = "ref_failure_classification_id_seq", sequenceName = "ref_failure_classification_id_seq", allocationSize = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "REF_FAILURE_CLASS_ID_SEQ")
+    @SequenceGenerator(name = "REF_FAILURE_CLASS_ID_SEQ", sequenceName = "REF_FAILURE_CLASS_ID_SEQ", allocationSize = 1)
     @Column(name = "id", updatable = false)
     private Long id;
     private UUID uuid;
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblAddress.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblAddress.java
index ec80d80..1d1a5c2 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblAddress.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblAddress.java
@@ -16,16 +16,23 @@
 
 import lombok.Data;
 
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
 import java.math.BigDecimal;
 import java.util.UUID;
 
 @Data
 @Entity
+@Table(name = "TBL_GFI_ADDRESS")
 public class TblAddress {
     @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "tbl_address_id_seq")
-    @SequenceGenerator(name = "tbl_address_id_seq", sequenceName = "tbl_address_id_seq", allocationSize = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "TBL_GFI_ADDRESS_ID_SEQ")
+    @SequenceGenerator(name = "TBL_GFI_ADDRESS_ID_SEQ", sequenceName = "TBL_GFI_ADDRESS_ID_SEQ", allocationSize = 1)
     @Column(name = "id", updatable = false)
     private Long id;
     private UUID uuid;
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblDistributionGroupMember.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblDistributionGroupMember.java
index ba75b13..9ce4c5f 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblDistributionGroupMember.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblDistributionGroupMember.java
@@ -30,8 +30,8 @@
 @Entity
 public class TblDistributionGroupMember {
     @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "tbl_distribution_group_member_id_seq")
-    @SequenceGenerator(name = "tbl_distribution_group_member_id_seq", sequenceName = "tbl_distribution_group_member_id_seq", allocationSize = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "TBL_DISTR_GROUP_MEMB_ID_SEQ")
+    @SequenceGenerator(name = "TBL_DISTR_GROUP_MEMB_ID_SEQ", sequenceName = "TBL_DISTR_GROUP_MEMB_ID_SEQ", allocationSize = 1)
     @Column(name = "id", updatable = false)
     private Long id;
     private UUID uuid;
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformationStation.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailinfoStation.java
similarity index 68%
rename from gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformationStation.java
rename to gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailinfoStation.java
index 07725ef..5594a78 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformationStation.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailinfoStation.java
@@ -20,14 +20,21 @@
 
 @Data
 @Entity
-public class TblFailureInformationStation {
+public class TblFailinfoStation {
     @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "tbl_failure_information_station_id_seq")
-    @SequenceGenerator(name = "tbl_failure_information_station_id_seq", sequenceName = "tbl_failure_information_station_id_seq", allocationSize = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "tbl_fi_station_id_seq")
+    @SequenceGenerator(name = "tbl_fi_station_id_seq", sequenceName = "tbl_fi_station_id_seq", allocationSize = 1)
     @Column(name = "id", updatable = false)
     private Long id;
 
-    private Long fkTblFailureInformation;
+    @ManyToOne
+    @JoinColumn( name = "fk_tbl_failure_information")
+    private TblFailureInformation failureInformation;
+
+
+    /*@ManyToOne
+    @JoinColumn( name = "station_station_id")
+    private TblStation station;*/
     private String stationStationId;
 
 }
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 89563e1..824acf4 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
@@ -70,7 +70,10 @@
     private String stationCoords;
     private BigDecimal longitude;
     private BigDecimal latitude;
+
+    @Column( name = "object_ref_ext_system")
     private String objectReferenceExternalSystem;
+
     private String publicationStatus;
     private String publicationFreetext;
     private Boolean condensed;
@@ -115,7 +118,7 @@
     private RefExpectedReason refExpectedReason;
 
     @ManyToOne
-    @JoinColumn( name = "fk_tbl_failure_information_condensed")
+    @JoinColumn( name = "fk_tbl_failinfo_condensed")
     private TblFailureInformation tblFailureInformationCondensed;
 
     @Transient
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformationDistributionGroup.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformationDistributionGroup.java
index 2835d15..3065fd9 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformationDistributionGroup.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformationDistributionGroup.java
@@ -16,18 +16,31 @@
 
 import lombok.Data;
 
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
 
 @Data
 @Entity
+@Table( name = "tbl_failinfo_distgroup")
 public class TblFailureInformationDistributionGroup {
     @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "tbl_failure_information_distribution_group_id_seq")
-    @SequenceGenerator(name = "tbl_failure_information_distribution_group_id_seq", sequenceName = "tbl_failure_information_distribution_group_id_seq", allocationSize = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "TBL_FAILINFO_DISTGROUP_ID_SEQ")
+    @SequenceGenerator(name = "TBL_FAILINFO_DISTGROUP_ID_SEQ", sequenceName = "TBL_FAILINFO_DISTGROUP_ID_SEQ", allocationSize = 1)
     @Column(name = "id", updatable = false)
     private Long id;
 
-    private Long fkTblFailureInformation;
-    private Long fkTblDistributionGroup;
+    @ManyToOne
+    @JoinColumn( name = "fk_tbl_failure_information")
+    private TblFailureInformation failureInformation;
 
+    @ManyToOne
+    @JoinColumn( name = "fk_tbl_distribution_group")
+    private TblDistributionGroup distributionGroup;
 }
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 d199e12..c7c4621 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
@@ -14,30 +14,35 @@
 */
 package org.eclipse.openk.gridfailureinformation.model;
 
-import lombok.Data;
 import lombok.Getter;
 import lombok.Setter;
 
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
 
 //@Data
 @Getter
 @Setter
 @Entity
+@Table( name="tbl_failinfo_pub_channel")
 public class TblFailureInformationPublicationChannel {
     @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "tbl_failure_information_publication_channel_seq")
-    @SequenceGenerator(name = "tbl_failure_information_publication_channel_seq", sequenceName = "tbl_failure_information_publication_channel_seq", allocationSize = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "tbl_fi_pub_channel_seq")
+    @SequenceGenerator(name = "tbl_fi_pub_channel_seq", sequenceName = "tbl_fi_pub_channel_seq", allocationSize = 1)
     @Column(name = "id", updatable = false)
     private Long id;
 
     @ManyToOne
     @JoinColumn( name = "fkTblFailureInformation")
-    //@NotNull
     private TblFailureInformation tblFailureInformation;
-    //@NotNull
     private String publicationChannel;
-    //@NotNull
     private boolean published;
 
 
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformationReminderMailSent.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformationReminderMailSent.java
index 761ff81..75276ec 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformationReminderMailSent.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/model/TblFailureInformationReminderMailSent.java
@@ -16,15 +16,24 @@
 
 import lombok.Data;
 
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.SequenceGenerator;
+import javax.persistence.Table;
 import java.util.Date;
 
 @Data
 @Entity
+@Table( name = "tbl_failinfo_remind_mail_sent" )
 public class TblFailureInformationReminderMailSent {
     @Id
-    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "tbl_failure_information_reminder_mail_sent_id_seq")
-    @SequenceGenerator(name = "tbl_failure_information_reminder_mail_sent_id_seq", sequenceName = "tbl_failure_information_reminder_mail_sent_id_seq", allocationSize = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "tbl_failinfo_reminsent_id_seq")
+    @SequenceGenerator(name = "tbl_failinfo_reminsent_id_seq", sequenceName = "tbl_failinfo_reminsent_id_seq", allocationSize = 1)
     @Column(name = "id", updatable = false)
     private Long id;
 
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/DistributionGroupRepository.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/DistributionGroupRepository.java
index 9d3dae7..179de84 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/DistributionGroupRepository.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/DistributionGroupRepository.java
@@ -32,9 +32,11 @@
     Optional<TblDistributionGroup> findByUuid(UUID uuid);
 
     Optional<TblDistributionGroup> findByName(String name);
-
+/*
     @Query( "SELECT dg from TblDistributionGroup dg " +
-            "JOIN TblFailureInformationDistributionGroup fidg ON dg.id = fidg.fkTblDistributionGroup " +
-            "WHERE fidg.fkTblFailureInformation = :fiid")
+            "JOIN TblFailureInformationDistributionGroup.distributionGroup fidg ON dg.id = fidg.distributionGroup.id " +
+            "WHERE fidg.failureInformation.id = :fiid")
+
     List<TblDistributionGroup> findByFailureInformationId(Long fiid);
+    */
 }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/FailureInformationDistributionGroupRepository.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/FailureInformationDistributionGroupRepository.java
index 75ab211..41eb1bd 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/FailureInformationDistributionGroupRepository.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/FailureInformationDistributionGroupRepository.java
@@ -25,7 +25,8 @@
 @Repository
 public interface FailureInformationDistributionGroupRepository extends JpaRepository<TblFailureInformationDistributionGroup, Long > {
 
-    Optional<TblFailureInformationDistributionGroup> findByFkTblFailureInformationAndFkTblDistributionGroup(Long failureInfoId, Long groupId);
-    List<TblFailureInformationDistributionGroup> findByFkTblFailureInformation(Long id);
-    void deleteByFkTblFailureInformation(Long id);
+    Optional<TblFailureInformationDistributionGroup> findByFailureInformationIdAndDistributionGroupId(Long failureInfoId, Long groupId);
+    void deleteByFailureInformationId(Long id);
+
+    List<TblFailureInformationDistributionGroup> findByFailureInformationId( Long failureInformationId);
 }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/FailureInformationStationRepository.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/FailureInformationStationRepository.java
index 13dce8c..5241913 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/FailureInformationStationRepository.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/FailureInformationStationRepository.java
@@ -15,7 +15,7 @@
 
 package org.eclipse.openk.gridfailureinformation.repository;
 
-import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationStation;
+import org.eclipse.openk.gridfailureinformation.model.TblFailinfoStation;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
@@ -25,15 +25,14 @@
 import java.util.UUID;
 
 @Repository
-public interface FailureInformationStationRepository extends JpaRepository<TblFailureInformationStation, Long > {
+public interface FailureInformationStationRepository extends JpaRepository<TblFailinfoStation, Long > {
 
-    Optional<TblFailureInformationStation> findByFkTblFailureInformationAndStationStationId(Long failureInfoId, String stationStationId);
-    List<TblFailureInformationStation> findByFkTblFailureInformation(Long id);
-    void deleteByFkTblFailureInformation(Long id);
+    Optional<TblFailinfoStation> findByFailureInformationIdAndStationStationId(Long failureInfoId, String stationStationId);
+    List<TblFailinfoStation> findByFailureInformationId(Long id);
+    void deleteByFailureInformationId(Long id);
 
-    @Query("SELECT ts.uuid FROM TblFailureInformationStation fis " +
-            "JOIN TblFailureInformation fi ON fis.fkTblFailureInformation = fi.id " +
+    @Query( "SELECT ts.uuid FROM TblFailinfoStation fis " +
             "JOIN TblStation ts ON fis.stationStationId = ts.stationId " +
-            "WHERE fi.uuid = :uuid ORDER BY fis.id")
+            "WHERE fis.failureInformation.uuid = :uuid" )
     List<UUID> findUuidByFkTblFailureInformation( UUID uuid );
 }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/AddressService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/AddressService.java
index 518de9d..839688b 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/AddressService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/AddressService.java
@@ -27,6 +27,7 @@
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.TreeSet;
 import java.util.UUID;
@@ -138,7 +139,7 @@
                 communityList = addressRepository.findAllCommunitys();
         }
 
-        return communityList.stream().filter(c -> !c.isEmpty()).collect(toCollection(ArrayList::new));
+        return communityList.stream().filter(Objects::nonNull).filter(c -> !c.isEmpty()).collect(toCollection(ArrayList::new));
     }
 
 
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ExportService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ExportService.java
index 0416414..28c3afd 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ExportService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/ExportService.java
@@ -33,8 +33,10 @@
 import org.eclipse.openk.gridfailureinformation.model.RefStatus;
 import org.eclipse.openk.gridfailureinformation.model.TblDistributionGroup;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformation;
+import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationDistributionGroup;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationPublicationChannel;
 import org.eclipse.openk.gridfailureinformation.repository.DistributionGroupRepository;
+import org.eclipse.openk.gridfailureinformation.repository.FailureInformationDistributionGroupRepository;
 import org.eclipse.openk.gridfailureinformation.repository.FailureInformationPublicationChannelRepository;
 import org.eclipse.openk.gridfailureinformation.repository.FailureInformationRepository;
 import org.eclipse.openk.gridfailureinformation.repository.StatusRepository;
@@ -112,6 +114,9 @@
     private DistributionGroupRepository distributionGroupRepository;
 
     @Autowired
+    private FailureInformationDistributionGroupRepository failureInformationDistributionGroupRepository;
+
+    @Autowired
     private ResourceConfig resourceConfig;
 
     @Autowired
@@ -156,8 +161,8 @@
                 //Nullsafe check
                 if (Boolean.TRUE.equals(rChannel.getIsMailType())) {
                     //Holen der Verteilergruppen (Pro Verteilergruppe eine Message auf RabbitMQ)
-                    List<TblDistributionGroup> distributionGroups =
-                            distributionGroupRepository.findByFailureInformationId(existingTblFailureInfo.getId());
+                    List<TblFailureInformationDistributionGroup> distributionGroups =
+                            failureInformationDistributionGroupRepository.findByFailureInformationId(existingTblFailureInfo.getId());
 
                     if (distributionGroups == null || distributionGroups.isEmpty()) {
                         log.warn("no distribution group found for failureInfo: "
@@ -165,7 +170,7 @@
                         return false;
                     }
 
-                    distributionGroups.forEach( x -> prepareMessage(existingTblFailureInfo, x, rChannel, processState));
+                    distributionGroups.forEach( x -> prepareMessage(existingTblFailureInfo, x.getDistributionGroup(), rChannel, processState));
 
                 }
                 else {
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationDistributionGroupService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationDistributionGroupService.java
index 53c4cd8..1f2c0f9 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationDistributionGroupService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationDistributionGroupService.java
@@ -57,8 +57,9 @@
     public List<DistributionGroupDto> findDistributionGroupsByFailureInfo(UUID failureInfoUuid ) {
         TblFailureInformation existingTblFailureInfo = failureInformationRepository.findByUuid( failureInfoUuid )
                 .orElseThrow(NotFoundException::new);
-        return distributionGroupRepository.findByFailureInformationId(existingTblFailureInfo.getId())
+        return failureInformationDistributionGroupRepository.findByFailureInformationId(existingTblFailureInfo.getId())
                 .stream()
+                .map( TblFailureInformationDistributionGroup::getDistributionGroup )
                 .map( distributionGroupMapper::toDistributionGroupDto )
                 .collect(Collectors.toList());
     }
@@ -72,7 +73,9 @@
         TblDistributionGroup distributionGroup = distributionGroupRepository.findByUuid(groupDto.getUuid())
                 .orElseThrow( () -> new NotFoundException("distribution.group.uuid.not.existing"));
 
-        List<TblDistributionGroup> distributionGroups =  distributionGroupRepository.findByFailureInformationId(failureInformation.getId());
+        List<TblDistributionGroup> distributionGroups =  failureInformationDistributionGroupRepository.findByFailureInformationId(failureInformation.getId()).stream()
+                .map( TblFailureInformationDistributionGroup::getDistributionGroup)
+                .collect(Collectors.toList());
 
         for (TblDistributionGroup group : distributionGroups) {
             if (group.getUuid().equals(groupDto.getUuid())) {
@@ -81,8 +84,8 @@
         }
 
         TblFailureInformationDistributionGroup assignmentToSave = new TblFailureInformationDistributionGroup();
-        assignmentToSave.setFkTblFailureInformation(failureInformation.getId());
-        assignmentToSave.setFkTblDistributionGroup(distributionGroup.getId());
+        assignmentToSave.setFailureInformation(failureInformation);
+        assignmentToSave.setDistributionGroup(distributionGroup);
 
         TblFailureInformationDistributionGroup savedFailureInfoGroup = failureInformationDistributionGroupRepository.save(assignmentToSave);
 
@@ -99,7 +102,7 @@
                 .orElseThrow( () -> new BadRequestException("distribution.group.uuid.not.existing"));
 
         TblFailureInformationDistributionGroup tblFailureInformationDistributionGroup
-                = failureInformationDistributionGroupRepository.findByFkTblFailureInformationAndFkTblDistributionGroup(failureInformation.getId(), distributionGroup.getId())
+                = failureInformationDistributionGroupRepository.findByFailureInformationIdAndDistributionGroupId(failureInformation.getId(), distributionGroup.getId())
                     .orElseThrow(() -> new BadRequestException("failure.info.distribution.group.not.existing"));
 
         failureInformationDistributionGroupRepository.delete(tblFailureInformationDistributionGroup);
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 4a75c96..66c8ad3 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
@@ -33,10 +33,10 @@
 import org.eclipse.openk.gridfailureinformation.model.RefExpectedReason;
 import org.eclipse.openk.gridfailureinformation.model.RefStatus;
 import org.eclipse.openk.gridfailureinformation.model.TblAddress;
+import org.eclipse.openk.gridfailureinformation.model.TblFailinfoStation;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformation;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationPublicationChannel;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationReminderMailSent;
-import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationStation;
 import org.eclipse.openk.gridfailureinformation.model.TblStation;
 import org.eclipse.openk.gridfailureinformation.repository.AddressRepository;
 import org.eclipse.openk.gridfailureinformation.repository.BranchRepository;
@@ -264,14 +264,14 @@
         if(stationList.size() > stationSet.size()){
             throw new OperationDeniedException(OperationType.INSERT, "double.assignment.of.stations");
         }
-        List<TblFailureInformationStation> tblFailureStations
-                = failureInformationStationRepository.findByFkTblFailureInformation(tblToStore.getId());
+        List<TblFailinfoStation> tblFailureStations
+                = failureInformationStationRepository.findByFailureInformationId(tblToStore.getId());
         failureInformationStationRepository.deleteAll(tblFailureStations);
 
         stationList.forEach(x-> {
-            TblFailureInformationStation newRecord = new TblFailureInformationStation();
+            TblFailinfoStation newRecord = new TblFailinfoStation();
             newRecord.setStationStationId(x.getStationId());
-            newRecord.setFkTblFailureInformation(tblToStore.getId());
+            newRecord.setFailureInformation(tblToStore);
             failureInformationStationRepository.save(newRecord);
         });
 
@@ -535,16 +535,16 @@
         Set<String> stationsSuperSet = new HashSet<>();
         listFailureInfos.forEach( x ->
             stationsSuperSet.addAll(
-                failureInformationStationRepository.findByFkTblFailureInformation(x.getId())
+                failureInformationStationRepository.findByFailureInformationId(x.getId())
                     .stream()
-                        .map( TblFailureInformationStation::getStationStationId )
+                        .map( TblFailinfoStation::getStationStationId )
                         .collect(Collectors.toList())
             )
         );
-        final List<TblFailureInformationStation> byFkTblFailureInformation = failureInformationStationRepository.findByFkTblFailureInformation(condensedFailureInformation.getId());
+        final List<TblFailinfoStation> byFkTblFailureInformation = failureInformationStationRepository.findByFailureInformationId(condensedFailureInformation.getId());
         Set<String> stationsOfOldExistingCondensedFi =
                 byFkTblFailureInformation.stream()
-                .map( TblFailureInformationStation::getStationStationId )
+                .map( TblFailinfoStation::getStationStationId )
                 .collect(Collectors.toSet());
 
         // store the set for the newly created failure info
@@ -552,8 +552,8 @@
                 .stream()
                 .filter( x -> !stationsOfOldExistingCondensedFi.contains(x))
                 .forEach( x -> {
-                    TblFailureInformationStation fis = new TblFailureInformationStation();
-                    fis.setFkTblFailureInformation(condensedFailureInformation.getId());
+                    TblFailinfoStation fis = new TblFailinfoStation();
+                    fis.setFailureInformation(condensedFailureInformation);
                     fis.setStationStationId(x);
                     failureInformationStationRepository.save(fis);
         });
@@ -852,10 +852,10 @@
                 failureInformationReminderMailSentRepository.deleteByTblFailureInformation(existingTblFailureInformation);
             }
 
-            failureInformationStationRepository.findByFkTblFailureInformation(existingTblFailureInformation.getId())
+            failureInformationStationRepository.findByFailureInformationId(existingTblFailureInformation.getId())
                     .forEach(failureInformationStationRepository::delete);
 
-            failureInformationDistributionGroupRepository.findByFkTblFailureInformation(existingTblFailureInformation.getId())
+            failureInformationDistributionGroupRepository.findByFailureInformationId(existingTblFailureInformation.getId())
                     .forEach(failureInformationDistributionGroupRepository::delete);
 
             failureInformationRepository.findByFailureInformationCondensedUuid(existingTblFailureInformation.getUuid())
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 19bff4e..91e1222 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
@@ -21,7 +21,7 @@
 import org.eclipse.openk.gridfailureinformation.mapper.FailureInformationStationMapper;
 import org.eclipse.openk.gridfailureinformation.mapper.StationMapper;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformation;
-import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationStation;
+import org.eclipse.openk.gridfailureinformation.model.TblFailinfoStation;
 import org.eclipse.openk.gridfailureinformation.model.TblStation;
 import org.eclipse.openk.gridfailureinformation.repository.FailureInformationRepository;
 import org.eclipse.openk.gridfailureinformation.repository.FailureInformationStationRepository;
@@ -87,17 +87,17 @@
         TblStation station = stationRepository.findByUuid(groupDto.getUuid())
                 .orElseThrow(() -> new NotFoundException("station.uuid.not.existing"));
 
-        Optional<TblFailureInformationStation> fiStation = failureInformationStationRepository.findByFkTblFailureInformationAndStationStationId(failureInformation.getId(), station.getStationId());
+        Optional<TblFailinfoStation> fiStation = failureInformationStationRepository.findByFailureInformationIdAndStationStationId(failureInformation.getId(), station.getStationId());
 
         if (fiStation.isPresent()) {
             throw new OperationDeniedException(OperationType.INSERT, "double.assignment.of.stations");
         }
 
-        TblFailureInformationStation assignmentToSave = new TblFailureInformationStation();
-        assignmentToSave.setFkTblFailureInformation(failureInformation.getId());
+        TblFailinfoStation assignmentToSave = new TblFailinfoStation();
+        assignmentToSave.setFailureInformation(failureInformation);
         assignmentToSave.setStationStationId(station.getStationId());
 
-        TblFailureInformationStation savedFailureInfoGroup = failureInformationStationRepository.save(assignmentToSave);
+        TblFailinfoStation savedFailureInfoGroup = failureInformationStationRepository.save(assignmentToSave);
 
         return failureInformationStationMapper.toFailureInfoStationDto(savedFailureInfoGroup);
 
@@ -111,8 +111,8 @@
         TblStation station = stationRepository.findByUuid(groupUuid)
                 .orElseThrow( () -> new BadRequestException("station.uuid.not.existing"));
 
-        TblFailureInformationStation tblFailureInformationStation
-                = failureInformationStationRepository.findByFkTblFailureInformationAndStationStationId(failureInformation.getId(), station.getStationId())
+        TblFailinfoStation tblFailureInformationStation
+                = failureInformationStationRepository.findByFailureInformationIdAndStationStationId(failureInformation.getId(), station.getStationId())
                     .orElseThrow(() -> new BadRequestException("failure.info.station.not.existing"));
 
         failureInformationStationRepository.delete(tblFailureInformationStation);
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/HistFailureInformationStationService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/HistFailureInformationStationService.java
index 7fcdeb1..696c183 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/HistFailureInformationStationService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/HistFailureInformationStationService.java
@@ -80,11 +80,11 @@
 
     public List<HistFailureInformationStationDto> insertHistFailureInfoStationsForGfi(TblFailureInformation failureInformation) {
 
-        List<TblFailureInformationStation> fiStations =  failureInformationStationRepository.findByFkTblFailureInformation(failureInformation.getId());
+        List<TblFailinfoStation> fiStations =  failureInformationStationRepository.findByFailureInformationId(failureInformation.getId());
         List<HtblFailureInformationStation> savedFailureInformationStations = new ArrayList<>();
 
         if (!fiStations.isEmpty()) {
-            for (TblFailureInformationStation tblFiStation : fiStations) {
+            for (TblFailinfoStation tblFiStation : fiStations) {
                 HtblFailureInformationStation htblFailureInfoStationToSave = new HtblFailureInformationStation();
 
                 htblFailureInfoStationToSave.setFkTblFailureInformation(failureInformation.getId());
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 3c63dd5..c169faf 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
@@ -93,102 +93,109 @@
 
 
     @Transactional
-    private FailureInformationDto doImport(ImportDataDto importDataDto, ForeignFailureDataDto foreignFailureDataDto) {
+    public FailureInformationDto doImport(ImportDataDto importDataDto, ForeignFailureDataDto foreignFailureDataDto) {
         FailureInformationDto existingDto = failureInformationService.findByObjectReferenceExternalSystem(importDataDto.getAssembledRefId());
 
-        FailureInformationDto failureInformationDto;
-
         if( existingDto == null ) {
-            failureInformationDto = setNewFromForeignDto(importDataDto, foreignFailureDataDto);
-
-            GfiProcessState gfiProcessState;
-            if (foreignFailureDataDto.isPlanned()) {
-                gfiProcessState = GfiProcessState.PLANNED;
-            } else {
-                gfiProcessState = GfiProcessState.NEW;
-            }
-
-            if (foreignFailureDataDto.isAutopublish()) {
-                gfiProcessState = GfiProcessState.QUALIFIED;
-                failureInformationDto.setPublicationStatus(Constants.PUB_STATUS_VEROEFFENTLICHT);
-            }
-
-            FailureInformationDto retVal = failureInformationService.insertFailureInfo(failureInformationDto, gfiProcessState);
-            log.info("External failure information [MetaId: " + importDataDto.getMetaId() + "] from "
-                    + importDataDto.getSource() + " imported (inserted).");
-
-            if (foreignFailureDataDto.isAutopublish()) {
-                failureInformationService.insertPublicationChannelForFailureInfo(retVal.getUuid(), Constants.PUBLICATION_CHANNEL_OWNDMZ, true);
-                log.info("External failure information [MetaId: " + importDataDto.getMetaId() + "] from "
-                        + importDataDto.getSource() + " is prepared for autopublish to channel: " + Constants.PUBLICATION_CHANNEL_OWNDMZ);
-            }
-            return retVal;
+            return importNewFailureInfo(importDataDto, foreignFailureDataDto);
         } else {
 
-            if (foreignFailureDataDto.isOnceOnlyImport()) {
-                log.debug("External failure information [MetaId: " + importDataDto.getMetaId() + "] from "
-                        + importDataDto.getSource() + " won't be imported because it has already been imported" +
-                        " once and flag isOnceOnlyImport is true.");
-                return null;
-            }
-
-            UUID statusInternIdExistingDto = existingDto.getStatusInternId();
-
-            //When status of already existing failureinformation completed or canceled do not update but log it.
-            if (statusInternIdExistingDto.equals(statusService.getStatusFromId(GfiProcessState.COMPLETED.getStatusValue()).getUuid()) ||
-                    statusInternIdExistingDto.equals(statusService.getStatusFromId(GfiProcessState.CANCELED.getStatusValue()).getUuid())) {
-                log.info("External failure information [MetaId: " + importDataDto.getMetaId() + "] from " + importDataDto.getSource() +
-                        " tried to update already existing failure information [UUID: "+ existingDto.getUuid() + "]" +
-                        " but was ignored since its status is already CANCELED or COMPLETED.");
-                return null;
-            }
-
-            FailureInformationDto existingDtoClone = null;
-            try {
-                existingDtoClone = objectMapper
-                        .readValue(objectMapper.writeValueAsString(existingDto), FailureInformationDto.class);
-            } catch (JsonProcessingException e) {
-                log.error("Error parsing object (JSON)", e);
-            }
-
-            FailureInformationDto updatedDto = setUpdateFromForeignDto(importDataDto, foreignFailureDataDto, existingDto);
-
-            //Is the content of the new failureinformation different compared to the already existing one
-            if (foreignFailureDataDto.isExcludeEquals() && updatedDto.equals(existingDtoClone)){
-                log.debug("External failure information [MetaId: " + importDataDto.getMetaId() + "] from "
-                        + importDataDto.getSource() + " hasn't changed, no update will be executed.");
-                return null;
-            }
-
-
-            Assert.notNull(existingDtoClone, "existingDtoClone was null");
-            //Don't update if the failureinformation was already edited by an user
-            if (foreignFailureDataDto.isExcludeAlreadyEdited() && !Objects.equals(updatedDto.getModUser(), existingDtoClone.getModUser())){ //NOSONAR assertion for existingDtoClone exists and logically existingDtoClone must be valid
-                log.debug("External failure information [MetaId: " + importDataDto.getMetaId() + "] from "
-                        + importDataDto.getSource() + " has already been edited in SIT by an user, no update will be executed.");
-                return null;
-            }
-
-            if(!foreignFailureDataDto.isAutopublish() && statusInternIdExistingDto.equals(
-                    statusService.getStatusFromId(GfiProcessState.QUALIFIED.getStatusValue()).getUuid()
-            )) {
-                updatedDto.setStatusInternId(
-                        statusService.getStatusFromId(GfiProcessState.UPDATED.getStatusValue()).getUuid()
-                );
-            } else {
-                if (foreignFailureDataDto.isAutopublish()) {
-                    log.info("Autopublish for external failure information [MetaId: " + importDataDto.getMetaId() + "] from "
-                            + importDataDto.getSource() + " is true, current status remains unchanged.");
-                }
-            }
-
-            FailureInformationDto retVal = failureInformationService.updateFailureInfo(updatedDto);
-            log.info("External failure information [" + importDataDto.getMetaId() + "] from " + importDataDto.getSource() + " imported (updated).");
-            return retVal;
+            return importExistingDto(importDataDto, foreignFailureDataDto, existingDto);
 
         }
     }
 
+    private FailureInformationDto importExistingDto(ImportDataDto importDataDto, ForeignFailureDataDto foreignFailureDataDto, FailureInformationDto existingDto) {
+        if (foreignFailureDataDto.isOnceOnlyImport()) {
+            log.debug("External failure information [MetaId: " + importDataDto.getMetaId() + "] from "
+                    + importDataDto.getSource() + " won't be imported because it has already been imported" +
+                    " once and flag isOnceOnlyImport is true.");
+            return null;
+        }
+
+        UUID statusInternIdExistingDto = existingDto.getStatusInternId();
+
+        //When status of already existing failureinformation completed or canceled do not update but log it.
+        if (statusInternIdExistingDto.equals(statusService.getStatusFromId(GfiProcessState.COMPLETED.getStatusValue()).getUuid()) ||
+                statusInternIdExistingDto.equals(statusService.getStatusFromId(GfiProcessState.CANCELED.getStatusValue()).getUuid())) {
+            log.info("External failure information [MetaId: " + importDataDto.getMetaId() + "] from " + importDataDto.getSource() +
+                    " tried to update already existing failure information [UUID: "+ existingDto.getUuid() + "]" +
+                    " but was ignored since its status is already CANCELED or COMPLETED.");
+            return null;
+        }
+
+        FailureInformationDto existingDtoClone = null;
+        try {
+            existingDtoClone = objectMapper
+                    .readValue(objectMapper.writeValueAsString(existingDto), FailureInformationDto.class);
+        } catch (JsonProcessingException e) {
+            log.error("Error parsing object (JSON)", e);
+        }
+
+        FailureInformationDto updatedDto = setUpdateFromForeignDto(importDataDto, foreignFailureDataDto, existingDto);
+
+        //Is the content of the new failureinformation different compared to the already existing one
+        if (foreignFailureDataDto.isExcludeEquals() && updatedDto.equals(existingDtoClone)){
+            log.debug("External failure information [MetaId: " + importDataDto.getMetaId() + "] from "
+                    + importDataDto.getSource() + " hasn't changed, no update will be executed.");
+            return null;
+        }
+
+
+        Assert.notNull(existingDtoClone, "existingDtoClone was null");
+        //Don't update if the failureinformation was already edited by an user
+        if (foreignFailureDataDto.isExcludeAlreadyEdited() && !Objects.equals(updatedDto.getModUser(), existingDtoClone.getModUser())){ //NOSONAR assertion for existingDtoClone exists and logically existingDtoClone must be valid
+            log.debug("External failure information [MetaId: " + importDataDto.getMetaId() + "] from "
+                    + importDataDto.getSource() + " has already been edited in SIT by an user, no update will be executed.");
+            return null;
+        }
+
+        if(!foreignFailureDataDto.isAutopublish() && statusInternIdExistingDto.equals(
+                statusService.getStatusFromId(GfiProcessState.QUALIFIED.getStatusValue()).getUuid()
+        )) {
+            updatedDto.setStatusInternId(
+                    statusService.getStatusFromId(GfiProcessState.UPDATED.getStatusValue()).getUuid()
+            );
+        } else {
+            if (foreignFailureDataDto.isAutopublish()) {
+                log.info("Autopublish for external failure information [MetaId: " + importDataDto.getMetaId() + "] from "
+                        + importDataDto.getSource() + " is true, current status remains unchanged.");
+            }
+        }
+
+        FailureInformationDto retVal = failureInformationService.updateFailureInfo(updatedDto);
+        log.info("External failure information [" + importDataDto.getMetaId() + "] from " + importDataDto.getSource() + " imported (updated).");
+        return retVal;
+    }
+
+    private FailureInformationDto importNewFailureInfo(ImportDataDto importDataDto, ForeignFailureDataDto foreignFailureDataDto) {
+        FailureInformationDto failureInformationDto;
+        failureInformationDto = setNewFromForeignDto(importDataDto, foreignFailureDataDto);
+
+        GfiProcessState gfiProcessState;
+        if (foreignFailureDataDto.isPlanned()) {
+            gfiProcessState = GfiProcessState.PLANNED;
+        } else {
+            gfiProcessState = GfiProcessState.NEW;
+        }
+
+        if (foreignFailureDataDto.isAutopublish()) {
+            gfiProcessState = GfiProcessState.QUALIFIED;
+            failureInformationDto.setPublicationStatus(Constants.PUB_STATUS_VEROEFFENTLICHT);
+        }
+
+        FailureInformationDto retVal = failureInformationService.insertFailureInfo(failureInformationDto, gfiProcessState);
+        log.info("External failure information [MetaId: " + importDataDto.getMetaId() + "] from "
+                + importDataDto.getSource() + " imported (inserted).");
+
+        if (foreignFailureDataDto.isAutopublish()) {
+            failureInformationService.insertPublicationChannelForFailureInfo(retVal.getUuid(), Constants.PUBLICATION_CHANNEL_OWNDMZ, true);
+            log.info("External failure information [MetaId: " + importDataDto.getMetaId() + "] from "
+                    + importDataDto.getSource() + " is prepared for autopublish to channel: " + Constants.PUBLICATION_CHANNEL_OWNDMZ);
+        }
+        return retVal;
+    }
+
     public FailureInformationDto setNewFromForeignDto(ImportDataDto importDataDto, ForeignFailureDataDto foreignFailureDataDto) {
         FailureInformationDto failureInformationDto = failureInformationMapper.mapForeignFiDtoToGfiDto(foreignFailureDataDto);
 
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/util/ExternalStatusCalculator.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/util/ExternalStatusCalculator.java
index 27ca03c..a707e83 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/util/ExternalStatusCalculator.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/util/ExternalStatusCalculator.java
@@ -24,7 +24,9 @@
 import java.time.ZoneId;
 import java.util.Date;
 
-import static org.eclipse.openk.gridfailureinformation.constants.Constants.*;
+import static org.eclipse.openk.gridfailureinformation.constants.Constants.EXT_STATUS_FINISHED;
+import static org.eclipse.openk.gridfailureinformation.constants.Constants.EXT_STATUS_IN_WORK;
+import static org.eclipse.openk.gridfailureinformation.constants.Constants.EXT_STATUS_PLANNED;
 
 public class ExternalStatusCalculator {
     private ExternalStatusCalculator() {}
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/util/GroupMemberPlzFilter.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/util/GroupMemberPlzFilter.java
index 7c6d32f..34a3b83 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/util/GroupMemberPlzFilter.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/util/GroupMemberPlzFilter.java
@@ -16,7 +16,7 @@
 
 import org.eclipse.openk.gridfailureinformation.model.TblAddress;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformation;
-import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationStation;
+import org.eclipse.openk.gridfailureinformation.model.TblFailinfoStation;
 import org.eclipse.openk.gridfailureinformation.repository.AddressRepository;
 import org.eclipse.openk.gridfailureinformation.repository.FailureInformationStationRepository;
 import org.eclipse.openk.gridfailureinformation.viewmodel.DistributionGroupMemberDto;
@@ -49,8 +49,8 @@
         if( tblFi.getPostcode() != null ) {
             postcodesInFi.add(tblFi.getPostcode());
         }
-        List<String> stationsIds = fiStationRepository.findByFkTblFailureInformation(tblFi.getId()).stream()
-                .map(TblFailureInformationStation::getStationStationId)
+        List<String> stationsIds = fiStationRepository.findByFailureInformationId(tblFi.getId()).stream()
+                .map(TblFailinfoStation::getStationStationId)
                 .collect(Collectors.toList());
 
         stationsIds.forEach( x -> postcodesInFi.addAll(evaluatePostcodesForStation( x )));
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/FailureInformationDto.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/FailureInformationDto.java
index 529ae1d..a68aed9 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/FailureInformationDto.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/FailureInformationDto.java
@@ -25,7 +25,6 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
-import java.util.Objects;
 import java.util.UUID;
 
 @Data
diff --git a/gfsBackendService/src/main/resources/application.yml b/gfsBackendService/src/main/resources/application.yml
index c80ee04..ea97878 100644
--- a/gfsBackendService/src/main/resources/application.yml
+++ b/gfsBackendService/src/main/resources/application.yml
@@ -388,6 +388,64 @@
 
 swagger:
   enabled: true
+---
+
+spring:
+  profiles: oracle
+  datasource:
+    enable-oracle-configuration: true
+    url: jdbc:oracle:thin:@LIDLORADB2.PTA.DE:1521:NAPDB00
+    username: dietricf
+    password: dietricf000
+  jpa:
+    database-platform: org.hibernate.dialect.Oracle10gDialect
+    show-sql: false
+
+  rabbitmq:
+    # Importkanal
+    importExchange: sitImportExchange_branch
+    importQueue: sitImportQueue_branch
+    importkey: sitImportExchange.failureImportKey
+
+    # Exportkanäle
+    exportExchange: sitExportExchange_branch
+    channels:
+      - name: Mail
+        exportQueue: sit_mail_export_queue_branch
+        exportKey: sit_mail_export_key
+        isMailType: true
+      - name: Störungsauskunft.de
+        exportQueue: sit_stoerungsauskunft_export_queue_branch
+        exportKey: sit_stoerungsauskunft_export_key
+      - name: Störinfotool-eigene-Web-Komponenten
+        exportQueue: sit_own_export_queue
+        exportKey: sit_own_export_key
+
+oracle:
+  ucp:
+    minPoolSize: 2
+    maxPoolSize: 10
+
+logging:
+  level:
+    root: INFO
+    org.eclipse.openk: DEBUG
+    org.springframework.web: ERROR
+    org.hibernate: ERROR
+
+jwt:
+  tokenHeader: Authorization
+  useStaticJwt: false
+  staticJwt: eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJIYlI3Z2pobmE2eXJRZnZJTWhUSV9tY2g3ZmtTQWVFX3hLTjBhZVl0bjdjIn0.eyJqdGkiOiJlMmQ2YjE3Zi1iMWUyLTQxMzUtOTM1YS0zOWRiMmFkMzE5MjYiLCJleHAiOjE1ODYwMTI1MzUsIm5iZiI6MCwiaWF0IjoxNTg2MDEyMjM1LCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvYXV0aC9yZWFsbXMvRWxvZ2Jvb2siLCJhdWQiOiJlbG9nYm9vay1iYWNrZW5kIiwic3ViIjoiMzMzMmRmOWItYmYyMy00Nzg5LThmMmQtM2JhZTM2MzA4YzNkIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiZWxvZ2Jvb2stYmFja2VuZCIsImF1dGhfdGltZSI6MCwic2Vzc2lvbl9zdGF0ZSI6IjYxMzRmN2RhLTdlNjQtNDJjNy05NjYyLTY0ZGNhZTk1MjQ5YSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZ3JpZC1mYWlsdXJlLXF1YWxpZmllciIsImdyaWQtZmFpbHVyZS1jcmVhdG9yIiwiZ3JpZC1mYWlsdXJlLWFjY2VzcyIsImdyaWQtZmFpbHVyZS1hZG1pbiIsImdyaWQtZmFpbHVyZS1wdWJsaXNoZXIiXX0sInJlc291cmNlX2FjY2VzcyI6e30sIm5hbWUiOiJTdGF0aWMgSldUIiwicHJlZmVycmVkX3VzZXJuYW1lIjoidGVzdHVzZXJfZ2ZpX3N0YXRpY2p3dCIsImdpdmVuX25hbWUiOiJTdGF0aWMiLCJmYW1pbHlfbmFtZSI6IkpXVCJ9.SWpekZHxlDNWbaaZ2fHlts00c1Xi6yIb0ZMr9f8ujSI_6LVYuHx8FTt6g9tinyVcx5gQKfrooRW28Cdq1EVuexNtTtZ7ciKk4iEo_kgqUgRvHCwO7HQl2igpoGErheYD0kj3-u4Te6NPHKtXWIEfGyl0ZQBD2c4vtaCTQAy5Ilb146G7p_IcLYaZgpJPlGG0Bf2oZ0UqTQsrXxRJkXWARDz8D4lIrN84lAbqNlPlSZDN-8xp_z6mXgWpvgeZuFoYHItJMg2cjR0SXH-ycbWVXctRNQJfTWR0acIhp_nB_Xe6JlUx2vls99EVw-WUrd0hc8Y9658HdeyktvpQLDxP2g
+
+server:
+  port: 9165
+
+cors:
+  corsEnabled: true
+
+swagger:
+  enabled: true
 
 ---
 
diff --git a/gfsBackendService/src/main/resources/application_localdev.yml b/gfsBackendService/src/main/resources/application_localdev.yml
index a4b9ea1..ecc1e0b 100644
--- a/gfsBackendService/src/main/resources/application_localdev.yml
+++ b/gfsBackendService/src/main/resources/application_localdev.yml
@@ -13,8 +13,8 @@
 backend-version: 1.0.0
 spring:
   datasource:
-    #url: jdbc:postgresql://entopticadirx:5432/GridFailureInfoDevelop
-    url: jdbc:postgresql://entopticadirx:5432/GridFailureInfoDevServer
+    url: jdbc:postgresql://entopticadirx:5432/GridFailureInfoDevelop
+    #url: jdbc:postgresql://entopticadirx:5432/GridFailureInfoDevServer
     username: ${GFI_DB_USERNAME}
     password: ${GFI_DB_PASSWORD}
     max-active: 5
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/ExportServiceTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/ExportServiceTest.java
index 8371712..dabf293 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/ExportServiceTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/ExportServiceTest.java
@@ -20,17 +20,17 @@
 import org.eclipse.openk.gridfailureinformation.config.rabbitMq.RabbitMqConfig;
 import org.eclipse.openk.gridfailureinformation.config.rabbitMq.RabbitMqProperties;
 import org.eclipse.openk.gridfailureinformation.exceptions.NotFoundException;
-import org.eclipse.openk.gridfailureinformation.mapper.FailureInformationMapper;
 import org.eclipse.openk.gridfailureinformation.model.RefStatus;
 import org.eclipse.openk.gridfailureinformation.model.TblDistributionGroup;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformation;
+import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationDistributionGroup;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationPublicationChannel;
 import org.eclipse.openk.gridfailureinformation.repository.DistributionGroupRepository;
+import org.eclipse.openk.gridfailureinformation.repository.FailureInformationDistributionGroupRepository;
 import org.eclipse.openk.gridfailureinformation.repository.FailureInformationPublicationChannelRepository;
 import org.eclipse.openk.gridfailureinformation.repository.FailureInformationRepository;
 import org.eclipse.openk.gridfailureinformation.repository.StatusRepository;
 import org.eclipse.openk.gridfailureinformation.support.MockDataHelper;
-import org.eclipse.openk.gridfailureinformation.util.ExternalStatusCalculator;
 import org.eclipse.openk.gridfailureinformation.viewmodel.DistributionGroupMemberDto;
 import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationDto;
 import org.junit.jupiter.api.Test;
@@ -47,9 +47,18 @@
 import java.util.Optional;
 import java.util.UUID;
 
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.when;
 
 @DataJpaTest
 @ContextConfiguration(classes = {TestConfiguration.class})
@@ -71,6 +80,9 @@
     private FailureInformationPublicationChannelRepository publicationChannelRepository;
 
     @MockBean
+    private FailureInformationDistributionGroupRepository failureInformationDistributionGroupRepository;
+
+    @MockBean
     private DistributionGroupRepository distributionGroupRepository;
 
     @MockBean
@@ -172,7 +184,7 @@
         RabbitMqChannel rabbitMqChannel =  MockDataHelper.mockRabbitMqChannelMail();
         TblFailureInformation tblFailureInformation = MockDataHelper.mockTblFailureInformation();
 
-        List<TblDistributionGroup> listTblDistributionGroups= MockDataHelper.mockDistributionGroupList();
+        List<TblFailureInformationDistributionGroup> listTblDistributionGroups= MockDataHelper.mockTblFailureInformationDistributionGroupList();
 
         List<DistributionGroupMemberDto> listTblDistributionGroupMemberDtos =  MockDataHelper.mockDistributionGroupMemberDtoList();
 
@@ -180,7 +192,7 @@
         when(statusRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(refStatus));
         when (failureInformationRepository.findByUuid( any(UUID.class))).thenReturn(Optional.of(tblFailureInformation));
         when(distributionGroupMemberService.getMembersByGroupId(any(UUID.class))).thenReturn(listTblDistributionGroupMemberDtos);
-        when(distributionGroupRepository.findByFailureInformationId(anyLong())).thenReturn(listTblDistributionGroups);
+        when(failureInformationDistributionGroupRepository.findByFailureInformationId(anyLong())).thenReturn(listTblDistributionGroups);
         when(publicationChannelRepository.save(any(TblFailureInformationPublicationChannel.class))).thenReturn(new TblFailureInformationPublicationChannel());
         doNothing().when(rabbitMqConfig).checkExchangeAndQueueOnRabbitMq(anyString(), anyString());
         doReturn(rabbitMqChannel).when(exportServiceLocal).getAvailableRabbitMqChannel(anyString());
@@ -189,7 +201,7 @@
 
         boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels, null);
 
-        Mockito.verify(rabbitTemplate, times(2)).convertAndSend(any(), any(), any(Object.class));
+        Mockito.verify(rabbitTemplate, times(3)).convertAndSend(any(), any(), any(Object.class));
         assertTrue(isMailPushed);
 
     }
@@ -212,8 +224,8 @@
         tblFailureInformation.setCity(null);
         tblFailureInformation.setRefExpectedReason(null);
 
-        List<TblDistributionGroup> listTblDistributionGroups= MockDataHelper.mockDistributionGroupList();
-        when(distributionGroupRepository.findByFailureInformationId(anyLong())).thenReturn(listTblDistributionGroups);
+        List<TblFailureInformationDistributionGroup> listTblDistributionGroups= MockDataHelper.mockTblFailureInformationDistributionGroupList();
+        when(failureInformationDistributionGroupRepository.findByFailureInformationId(anyLong())).thenReturn(listTblDistributionGroups);
         List<DistributionGroupMemberDto> listTblDistributionGroupMemberDtos =  MockDataHelper.mockDistributionGroupMemberDtoList();
         RefStatus refStatus = MockDataHelper.mockRefStatusQUALIFIED();
         when(statusRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(refStatus));
@@ -227,7 +239,7 @@
 
         boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels, null);
 
-        Mockito.verify(rabbitTemplate, times(2)).convertAndSend(any(), any(), any(Object.class));
+        Mockito.verify(rabbitTemplate, times(3)).convertAndSend(any(), any(), any(Object.class));
         assertTrue(isMailPushed);
 
     }
@@ -256,9 +268,9 @@
         tblFailureInformation.setHousenumber("10-1");
 
         RefStatus refStatus = MockDataHelper.mockRefStatusQUALIFIED();
+        List<TblFailureInformationDistributionGroup> listTblDistributionGroups= MockDataHelper.mockTblFailureInformationDistributionGroupList();
         when(statusRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(refStatus));
-        List<TblDistributionGroup> listTblDistributionGroups= MockDataHelper.mockDistributionGroupList();
-        when(distributionGroupRepository.findByFailureInformationId(anyLong())).thenReturn(listTblDistributionGroups);
+        when(failureInformationDistributionGroupRepository.findByFailureInformationId(anyLong())).thenReturn(listTblDistributionGroups);
         List<DistributionGroupMemberDto> listTblDistributionGroupMemberDtos =  MockDataHelper.mockDistributionGroupMemberDtoList();
 
         when (failureInformationRepository.findByUuid( any(UUID.class))).thenReturn(Optional.of(tblFailureInformation));
@@ -277,7 +289,7 @@
 
         boolean isMailPushed = exportServiceLocal.exportFailureInformation(UUID.randomUUID(), channels, null);
 
-        Mockito.verify(rabbitTemplate, times(2)).convertAndSend(any(), any(), any(Object.class));
+        Mockito.verify(rabbitTemplate, times(3)).convertAndSend(any(), any(), any(Object.class));
         assertTrue(isMailPushed);
 
     }
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationDistributionGroupServiceTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationDistributionGroupServiceTest.java
index 4915b1e..b0058c8 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationDistributionGroupServiceTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationDistributionGroupServiceTest.java
@@ -72,10 +72,10 @@
         List<DistributionGroupDto> distributionGroupDtoList = MockDataHelper.mockDistributionGroupList().stream()
                 .map( distributionGroupMapper::toDistributionGroupDto )
                 .collect(Collectors.toList());
-        List<TblDistributionGroup> tblDistGroupList = MockDataHelper.mockDistributionGroupList();
+        List<TblFailureInformationDistributionGroup> tblDistGroupList = MockDataHelper.mockFailureInformationDistributionGroupList();
 
         when(failureInformationRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(failureInformation));
-        when(distributionGroupRepository.findByFailureInformationId(anyLong())).thenReturn(tblDistGroupList);
+        when(failureInformationDistributionGroupRepository.findByFailureInformationId(anyLong())).thenReturn(tblDistGroupList);
 
 
         List<DistributionGroupDto> distributionGroups = failureInformationDistributionGroupService.findDistributionGroupsByFailureInfo(UUID.randomUUID());
@@ -99,8 +99,8 @@
         FailureInformationDistributionGroupDto savedDto = failureInformationDistributionGroupService.insertFailureInfoDistributionGroup(UUID.randomUUID(), groupDto);
 
         assertNotNull(savedDto.getDistributionGroupId());
-        assertEquals(savedDto.getDistributionGroupId(), failureInfoGroup.getFkTblDistributionGroup());
-        assertEquals(savedDto.getFailureInformationId(), failureInfoGroup.getFkTblFailureInformation());
+        assertEquals(savedDto.getDistributionGroupId(), failureInfoGroup.getDistributionGroup().getId());
+        assertEquals(savedDto.getFailureInformationId(), failureInfoGroup.getFailureInformation().getId());
     }
 
 
@@ -110,17 +110,17 @@
         TblFailureInformation failureInformation = MockDataHelper.mockTblFailureInformation();
         TblDistributionGroup distributionGroup = MockDataHelper.mockTblDistributionGroup();
         DistributionGroupDto groupDto = MockDataHelper.mockDistributionGroupDto();
-        List<TblDistributionGroup> dgList = MockDataHelper.mockDistributionGroupList();
+        List<TblFailureInformationDistributionGroup> dgList = MockDataHelper.mockTblFailureInformationDistributionGroupList();
 
         when(failureInformationRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(failureInformation));
         when(distributionGroupRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(distributionGroup));
         when(failureInformationDistributionGroupRepository.save(any(TblFailureInformationDistributionGroup.class))).thenReturn(failureInfoGroup);
-        when(distributionGroupRepository.findByFailureInformationId(anyLong())).thenReturn(dgList);
+        when(failureInformationDistributionGroupRepository.findByFailureInformationId(anyLong())).thenReturn(dgList);
         FailureInformationDistributionGroupDto savedDto = failureInformationDistributionGroupService.insertFailureInfoDistributionGroup(UUID.randomUUID(), groupDto);
 
         assertNotNull(savedDto.getDistributionGroupId());
-        assertEquals(savedDto.getDistributionGroupId(), failureInfoGroup.getFkTblDistributionGroup());
-        assertEquals(savedDto.getFailureInformationId(), failureInfoGroup.getFkTblFailureInformation());
+        assertEquals(savedDto.getDistributionGroupId(), failureInfoGroup.getDistributionGroup().getId());
+        assertEquals(savedDto.getFailureInformationId(), failureInfoGroup.getFailureInformation().getId());
     }
 
     @Test
@@ -129,13 +129,13 @@
         TblFailureInformation failureInformation = MockDataHelper.mockTblFailureInformation();
         TblDistributionGroup distributionGroup = MockDataHelper.mockTblDistributionGroup();
         DistributionGroupDto groupDto = MockDataHelper.mockDistributionGroupDto();
-        List<TblDistributionGroup> dgList = MockDataHelper.mockDistributionGroupList();
-        dgList.get(0).setUuid(groupDto.getUuid());
+        List<TblFailureInformationDistributionGroup> dgList = MockDataHelper.mockTblFailureInformationDistributionGroupList();
+        dgList.get(0).getDistributionGroup().setUuid(groupDto.getUuid());
 
         when(failureInformationRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(failureInformation));
         when(distributionGroupRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(distributionGroup));
         when(failureInformationDistributionGroupRepository.save(any(TblFailureInformationDistributionGroup.class))).thenReturn(failureInfoGroup);
-        when(distributionGroupRepository.findByFailureInformationId(anyLong())).thenReturn(dgList);
+        when(failureInformationDistributionGroupRepository.findByFailureInformationId(anyLong())).thenReturn(dgList);
         assertThrows(OperationDeniedException.class, () -> failureInformationDistributionGroupService.insertFailureInfoDistributionGroup(UUID.randomUUID(), groupDto));
     }
 
@@ -147,7 +147,7 @@
 
         when(failureInformationRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(failureInformation));
         when(distributionGroupRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(distributionGroup));
-        when(failureInformationDistributionGroupRepository.findByFkTblFailureInformationAndFkTblDistributionGroup(anyLong(), anyLong())).thenReturn(Optional.of(failureInfoGroup));
+        when(failureInformationDistributionGroupRepository.findByFailureInformationIdAndDistributionGroupId(anyLong(), anyLong())).thenReturn(Optional.of(failureInfoGroup));
         Mockito.doNothing().when(failureInformationDistributionGroupRepository).delete( isA( TblFailureInformationDistributionGroup.class ));
 
         failureInformationDistributionGroupService.deleteFailureInfoDistributionGroup(UUID.randomUUID(), UUID.randomUUID());
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 6cb6cb1..d06bfea 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
@@ -29,11 +29,11 @@
 import org.eclipse.openk.gridfailureinformation.model.RefStatus;
 import org.eclipse.openk.gridfailureinformation.model.TblAddress;
 import org.eclipse.openk.gridfailureinformation.model.TblDistributionGroup;
+import org.eclipse.openk.gridfailureinformation.model.TblFailinfoStation;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformation;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationDistributionGroup;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationPublicationChannel;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationReminderMailSent;
-import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationStation;
 import org.eclipse.openk.gridfailureinformation.model.TblStation;
 import org.eclipse.openk.gridfailureinformation.repository.AddressRepository;
 import org.eclipse.openk.gridfailureinformation.repository.BranchRepository;
@@ -1194,7 +1194,7 @@
 
         tblFailureInformation.setRefStatusIntern(refStatus);
 
-        when(failureInformationDistributionGroupRepository.findByFkTblFailureInformation(anyLong())).thenReturn(MockDataHelper.mockTblFailureInformationDistributionGroupList());
+        when(failureInformationDistributionGroupRepository.findByFailureInformationId(anyLong())).thenReturn(MockDataHelper.mockTblFailureInformationDistributionGroupList());
         Mockito.doNothing().when(failureInformationDistributionGroupRepository).delete(any(TblFailureInformationDistributionGroup.class));
 
         when(failureInformationPublicationChannelRepository.findByTblFailureInformation(any(TblFailureInformation.class))).thenReturn(MockDataHelper.mockTblFailureInformationPublicationChannelList());
@@ -1203,8 +1203,8 @@
         when(failureInformationReminderMailSentRepository.findByTblFailureInformation(any(TblFailureInformation.class))).thenReturn(Optional.of(MockDataHelper.mockTblFailureInformationReminderMailSent()));
         Mockito.doNothing().when(failureInformationReminderMailSentRepository).delete(any(TblFailureInformationReminderMailSent.class));
 
-        when(failureInformationStationRepository.findByFkTblFailureInformation(anyLong())).thenReturn(MockDataHelper.mockTblFailureInformationStationList());
-        Mockito.doNothing().when(failureInformationStationRepository).delete(any(TblFailureInformationStation.class));
+        when(failureInformationStationRepository.findByFailureInformationId(anyLong())).thenReturn(MockDataHelper.mockTblFailureInformationStationList());
+        Mockito.doNothing().when(failureInformationStationRepository).delete(any(TblFailinfoStation.class));
 
         when(failureInformationRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(tblFailureInformation));
         Mockito.doNothing().when(failureInformationRepository).delete( any(TblFailureInformation.class));
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationStationServiceTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationStationServiceTest.java
index 28721b0..af527d5 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationStationServiceTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/FailureInformationStationServiceTest.java
@@ -17,7 +17,7 @@
 import org.eclipse.openk.gridfailureinformation.config.TestConfiguration;
 import org.eclipse.openk.gridfailureinformation.mapper.StationMapper;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformation;
-import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationStation;
+import org.eclipse.openk.gridfailureinformation.model.TblFailinfoStation;
 import org.eclipse.openk.gridfailureinformation.model.TblStation;
 import org.eclipse.openk.gridfailureinformation.repository.FailureInformationRepository;
 import org.eclipse.openk.gridfailureinformation.repository.FailureInformationStationRepository;
@@ -86,32 +86,32 @@
 
     @Test
     void shouldInsertAStationForFailureInfo() {
-        TblFailureInformationStation failureInfoGroup = MockDataHelper.mockTblFailureInformationStation();
+        TblFailinfoStation failureInfoGroup = MockDataHelper.mockTblFailureInformationStation();
         TblFailureInformation failureInformation = MockDataHelper.mockTblFailureInformation();
         TblStation station = MockDataHelper.mockTblStation();
         StationDto stationDto = MockDataHelper.mockStationDto();
 
         when(failureInformationRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(failureInformation));
         when(stationRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(station));
-        when(failureInformationStationRepository.save(any(TblFailureInformationStation.class))).thenReturn(failureInfoGroup);
+        when(failureInformationStationRepository.save(any(TblFailinfoStation.class))).thenReturn(failureInfoGroup);
 
         FailureInformationStationDto savedDto = failureInformationStationService.insertFailureInfoStation(UUID.randomUUID(), stationDto);
 
         assertNotNull(savedDto.getStationStationId());
         assertEquals(savedDto.getStationStationId(), failureInfoGroup.getStationStationId());
-        assertEquals(savedDto.getFailureInformationId(), failureInfoGroup.getFkTblFailureInformation());
+        assertEquals(savedDto.getFailureInformationId(), failureInfoGroup.getFailureInformation().getId());
     }
 
     @Test
     void shouldRemoveStationFromFailureInfo() {
-        TblFailureInformationStation failureInfoStation = MockDataHelper.mockTblFailureInformationStation();
+        TblFailinfoStation failureInfoStation = MockDataHelper.mockTblFailureInformationStation();
         TblFailureInformation failureInformation = MockDataHelper.mockTblFailureInformation();
         TblStation station = MockDataHelper.mockTblStation();
 
         when(failureInformationRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(failureInformation));
         when(stationRepository.findByUuid(any(UUID.class))).thenReturn(Optional.of(station));
-        when(failureInformationStationRepository.findByFkTblFailureInformationAndStationStationId(anyLong(), anyString())).thenReturn(Optional.of(failureInfoStation));
-        Mockito.doNothing().when(failureInformationStationRepository).delete( isA( TblFailureInformationStation.class ));
+        when(failureInformationStationRepository.findByFailureInformationIdAndStationStationId(anyLong(), anyString())).thenReturn(Optional.of(failureInfoStation));
+        Mockito.doNothing().when(failureInformationStationRepository).delete( isA( TblFailinfoStation.class ));
 
         failureInformationStationService.deleteFailureInfoStation(UUID.randomUUID(), UUID.randomUUID());
 
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/HistFailureInformationStationServiceTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/HistFailureInformationStationServiceTest.java
index 21a30c5..a4c3024 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/HistFailureInformationStationServiceTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/HistFailureInformationStationServiceTest.java
@@ -94,12 +94,12 @@
     void shouldInsertStationsForFailureInfoVersion() {
         HtblFailureInformationStation histFailureInfoStation = MockDataHelper.mockHistTblFailureInformationStation();
         TblFailureInformation failureInformation = MockDataHelper.mockTblFailureInformation();
-        List<TblFailureInformationStation> fiStations = new LinkedList<>();
+        List<TblFailinfoStation> fiStations = new LinkedList<>();
         fiStations.add(MockDataHelper.mockTblFailureInformationStation());
         fiStations.add(MockDataHelper.mockTblFailureInformationStation());
 
         when(histFailureInformationStationRepository.save(any(HtblFailureInformationStation.class))).thenReturn(histFailureInfoStation);
-        when(failureInformationStationRepository.findByFkTblFailureInformation(anyLong())).thenReturn(fiStations);
+        when(failureInformationStationRepository.findByFailureInformationId(anyLong())).thenReturn(fiStations);
 
         List<HistFailureInformationStationDto> savedHistFailureInfoStationDtos = histFailureInformationStationService.insertHistFailureInfoStationsForGfi(failureInformation);
 
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/ImportServiceTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/ImportServiceTest.java
index 044dc22..9f02457 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/ImportServiceTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/ImportServiceTest.java
@@ -20,7 +20,12 @@
 import org.eclipse.openk.gridfailureinformation.exceptions.InternalServerErrorException;
 import org.eclipse.openk.gridfailureinformation.support.MockDataHelper;
 import org.eclipse.openk.gridfailureinformation.util.ImportDataValidator;
-import org.eclipse.openk.gridfailureinformation.viewmodel.*;
+import org.eclipse.openk.gridfailureinformation.viewmodel.BranchDto;
+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.StatusDto;
 import org.junit.jupiter.api.Test;
 import org.mockito.stubbing.Answer;
 import org.powermock.reflect.Whitebox;
@@ -28,7 +33,6 @@
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.boot.test.mock.mockito.SpyBean;
 import org.springframework.test.context.ContextConfiguration;
 
 import java.math.BigDecimal;
@@ -37,8 +41,17 @@
 import java.util.List;
 import java.util.UUID;
 
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.Mockito.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyLong;
+import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 @DataJpaTest
 @ContextConfiguration(classes = {TestConfiguration.class})
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 27c274f..2585bfa 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
@@ -32,7 +32,7 @@
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationDistributionGroup;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationPublicationChannel;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationReminderMailSent;
-import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationStation;
+import org.eclipse.openk.gridfailureinformation.model.TblFailinfoStation;
 import org.eclipse.openk.gridfailureinformation.model.TblImportData;
 import org.eclipse.openk.gridfailureinformation.model.TblStation;
 import org.eclipse.openk.gridfailureinformation.model.Version;
@@ -1349,6 +1349,21 @@
     }
 
 
+    public static List<TblFailureInformationDistributionGroup> mockFailureInformationDistributionGroupList() {
+        List<TblDistributionGroup> distributionGroupList = new ArrayList<>();
+
+        distributionGroupList.add(mockTblDistributionGroup());
+        distributionGroupList.add(mockTblDistributionGroup2());
+        return distributionGroupList.stream()
+                .map( x -> {
+                    TblFailureInformationDistributionGroup newRel = new TblFailureInformationDistributionGroup();
+                    newRel.setFailureInformation( mockTblFailureInformation());
+                    newRel.setDistributionGroup(x);
+                    return newRel; })
+                .collect(Collectors.toList());
+    }
+
+
     public static DistributionGroupDto mockDistributionGroupDto(){
 
         DistributionGroupDto distributionGroupDto = new DistributionGroupDto();
@@ -1462,21 +1477,21 @@
     }
 
 
-    public static  TblFailureInformationStation mockTblFailureInformationStation() {
-        TblFailureInformationStation tblFailureInformationStation = new TblFailureInformationStation();
+    public static TblFailinfoStation mockTblFailureInformationStation() {
+        TblFailinfoStation tblFailureInformationStation = new TblFailinfoStation();
         tblFailureInformationStation.setStationStationId("23456");
-        tblFailureInformationStation.setFkTblFailureInformation(98765L);
+        tblFailureInformationStation.setFailureInformation(mockTblFailureInformation());
         tblFailureInformationStation.setId(299L);
         return tblFailureInformationStation;
     }
 
-    public static List<TblFailureInformationStation> mockTblFailureInformationStationList(){
-        TblFailureInformationStation mock1 =  mockTblFailureInformationStation();
-        TblFailureInformationStation mock2 =  mockTblFailureInformationStation();
-        TblFailureInformationStation mock3 =  mockTblFailureInformationStation();
-        TblFailureInformationStation mock4 =  mockTblFailureInformationStation();
+    public static List<TblFailinfoStation> mockTblFailureInformationStationList(){
+        TblFailinfoStation mock1 =  mockTblFailureInformationStation();
+        TblFailinfoStation mock2 =  mockTblFailureInformationStation();
+        TblFailinfoStation mock3 =  mockTblFailureInformationStation();
+        TblFailinfoStation mock4 =  mockTblFailureInformationStation();
 
-        List<TblFailureInformationStation> list = Arrays.asList(mock1, mock2, mock3, mock4);
+        List<TblFailinfoStation> list = Arrays.asList(mock1, mock2, mock3, mock4);
         return list;
     }
 
@@ -1489,8 +1504,8 @@
 
     public static  TblFailureInformationDistributionGroup mockTblFailureInformationDistributionGroup() {
         TblFailureInformationDistributionGroup tblFailureInformationDistributionGroup = new TblFailureInformationDistributionGroup();
-        tblFailureInformationDistributionGroup.setFkTblDistributionGroup(5L);
-        tblFailureInformationDistributionGroup.setFkTblFailureInformation(8L);
+        tblFailureInformationDistributionGroup.setDistributionGroup(mockTblDistributionGroup()); // 5L
+        tblFailureInformationDistributionGroup.setFailureInformation(mockTblFailureInformation()); // 8L
         tblFailureInformationDistributionGroup.setId(99L);
         return tblFailureInformationDistributionGroup;
     }
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/util/GroupMemberPlzFilterTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/util/GroupMemberPlzFilterTest.java
index b00260c..d50be2c 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/util/GroupMemberPlzFilterTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/util/GroupMemberPlzFilterTest.java
@@ -17,7 +17,7 @@
 import org.assertj.core.util.Lists;
 import org.eclipse.openk.gridfailureinformation.model.TblAddress;
 import org.eclipse.openk.gridfailureinformation.model.TblFailureInformation;
-import org.eclipse.openk.gridfailureinformation.model.TblFailureInformationStation;
+import org.eclipse.openk.gridfailureinformation.model.TblFailinfoStation;
 import org.eclipse.openk.gridfailureinformation.repository.AddressRepository;
 import org.eclipse.openk.gridfailureinformation.repository.FailureInformationStationRepository;
 import org.eclipse.openk.gridfailureinformation.support.MockDataHelper;
@@ -64,12 +64,12 @@
         memberDtoList.get(2).setPostcodeList(Arrays.asList("77777", "88888"));
         memberDtoList.get(3).setPostcodeList(Lists.emptyList());
 
-        List<TblFailureInformationStation> fiStations = MockDataHelper.mockTblFailureInformationStationList();
+        List<TblFailinfoStation> fiStations = MockDataHelper.mockTblFailureInformationStationList();
         fiStations.get(0).setStationStationId("ST01");
         fiStations.get(1).setStationStationId("ST02");
         fiStations.get(2).setStationStationId("ST03");
         fiStations.get(3).setStationStationId("ST04");
-        when( fiStationRepository.findByFkTblFailureInformation(eq( tblFailureInformation.getId())))
+        when( fiStationRepository.findByFailureInformationId(eq( tblFailureInformation.getId())))
                 .thenReturn(fiStations);
 
         TblAddress[] addresses = new TblAddress[5];