diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/constants/Constants.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/constants/Constants.java
index 0162baa..f937246 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/constants/Constants.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/constants/Constants.java
@@ -47,6 +47,10 @@
 
     public static final String FREETEXT_ADDRESS_TYPE="freetext";
 
+    public static final String LOCATION_TYPE_ADDRESS="address";
+    public static final String LOCATION_TYPE_MAP="map";
+    public static final String LOCATION_TYPE_STATION="station";
+
     private Constants() {
         // empty Constructor for the sake of SONAR
     }
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 534688b..51e798b 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
@@ -17,6 +17,7 @@
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang.StringUtils;
 import org.eclipse.openk.gridfailureinformation.bpmn.impl.GfiProcessState;
+import org.eclipse.openk.gridfailureinformation.bpmn.impl.tasks.ProcessHelper;
 import org.eclipse.openk.gridfailureinformation.constants.Constants;
 import org.eclipse.openk.gridfailureinformation.exceptions.InternalServerErrorException;
 import org.eclipse.openk.gridfailureinformation.mapper.FailureInformationMapper;
@@ -68,6 +69,9 @@
     @Autowired
     ImportDataValidator importDataValidator;
 
+    @Autowired
+    ProcessHelper processHelper;
+
     public boolean validateAndImport(ImportDataDto importDataDto) {
         ForeignFailureDataDto foreignFailureDataDto = importDataValidator.readSafeForeignFailureInfo(importDataDto);
 
@@ -104,6 +108,12 @@
 
             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);
+                log.info("External failure information [MetaId: " + importDataDto.getMetaId() + "] from "
+                        + importDataDto.getSource() + "is prepared for autopublish to channel: " + Constants.PUBLICATION_CHANNEL_OWNDMZ);
+            }
             return retVal;
         } else {
 
@@ -128,6 +138,7 @@
                 );
             } else {
                 if (foreignFailureDataDto.isAutopublish()) {
+                    processHelper.resetPublishedStateForChannels(updatedDto);
                     log.info("Autopublish for external failure information [" + importDataDto.getMetaId() + "] from " + importDataDto.getSource() + " is true, current status remains unchanged.");
                 }
             }
@@ -171,6 +182,7 @@
         failureInformationDto.setHousenumber(foreignFailureDataDto.getHousenumber());
 
         setCoordinates(foreignFailureDataDto, failureInformationDto);
+        setLoationType(failureInformationDto);
 
         failureInformationDto.setStationIds(new LinkedList<>());
         if( foreignStationId != null && !foreignStationId.isEmpty()) {
@@ -191,6 +203,17 @@
         failureInformationDto.setObjectReferenceExternalSystem(importDataDto.getAssembledRefId());
     }
 
+    private void setLoationType(FailureInformationDto failureInformationDto) {
+        failureInformationDto.setFaultLocationArea(Constants.LOCATION_TYPE_ADDRESS);
+        if (failureInformationDto.getLatitude() != null && failureInformationDto.getLongitude() != null
+        && StringUtils.isBlank(failureInformationDto.getStreet())) {
+            failureInformationDto.setFaultLocationArea(Constants.LOCATION_TYPE_MAP);
+            failureInformationDto.setFreetextCity(failureInformationDto.getCity());
+            failureInformationDto.setFreetextDistrict(failureInformationDto.getDistrict());
+            failureInformationDto.setFreetextPostcode(failureInformationDto.getPostcode());
+        }
+    }
+
     private void setCoordinates(ForeignFailureDataDto foreignFailureDataDto, FailureInformationDto failureInformationDto) {
         BigDecimal latitude = foreignFailureDataDto.getLatitude();
         BigDecimal longitude = foreignFailureDataDto.getLongitude();
