diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/GfiGrid.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/GfiGrid.java
index 610d505..3fb2a3d 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/GfiGrid.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/GfiGrid.java
@@ -24,8 +24,7 @@
 import org.eclipse.openk.gridfailureinformation.constants.Constants;
 import org.springframework.stereotype.Component;
 
-import static org.eclipse.openk.gridfailureinformation.bpmn.base.tasks.DecisionTask.OutputPort.NO;
-import static org.eclipse.openk.gridfailureinformation.bpmn.base.tasks.DecisionTask.OutputPort.YES;
+import static org.eclipse.openk.gridfailureinformation.bpmn.base.tasks.DecisionTask.OutputPort.*;
 import static org.eclipse.openk.gridfailureinformation.bpmn.impl.GfiProcessState.*;
 
 @Log4j2
@@ -52,6 +51,9 @@
 
         ProcessTask canceledEndpoint = register( CANCELED,
                 new UIStoreFailureInformationTask( "State CANCELED UI Task", true));
+
+        DecisionTask decidePublished = new DecideFailureInfoPublished();
+        ProcessTask storePubStatusWithdrawnOnCancel = new StorePublishStatusTask(Constants.PUB_STATUS_ZURUECKGEZOGEN);
         ProcessTask publishMessage = register( QUALIFIED,
                 new UIStoreFailureInformationTask( "State QUALIFIED UI Task", true));
 
@@ -80,7 +82,6 @@
         enterMessage.connectOutputTo( storeEditStatusCreated );
         // -> nein
         storeEditStatusCreated.connectOutputTo( qualifyMessage );
-        // TODO Beabreitungsstatus: aktualisiert berücksichtigen: Zweig: Meldung aktualisieren
         qualifyMessage.connectOutputTo(decideCanceled);
         //Meldung storniert?
         decideCanceled.connectOutputTo( YES, storeEditStatusCanceled ); //Status nicht speichern da sonst doppelt, -> nächster Porzessschritt
@@ -88,12 +89,17 @@
 
         storeEditStatusQualified.connectOutputTo(publishMessage);
         publishMessage.connectOutputTo(decideUpdated);
-        decideUpdated.connectOutputTo(YES, storeEditStatusUpdated);
-        //decideUpdated.connectOutputTo(NO, completedEndpoint);
-        decideUpdated.connectOutputTo(NO, setEndDate);
+        decideUpdated.connectOutputTo(PORT1, storeEditStatusUpdated);
+        decideUpdated.connectOutputTo(PORT2, setEndDate);
+        decideUpdated.connectOutputTo(PORT3, storeEditStatusCanceled);
         setEndDate.connectOutputTo(storePublicationStatusWithdrawn);
         storePublicationStatusWithdrawn.connectOutputTo(completedEndpoint);
 
+        storeEditStatusCanceled.connectOutputTo(decidePublished);
+        decidePublished.connectOutputTo( YES, storePubStatusWithdrawnOnCancel);
+        decidePublished.connectOutputTo( NO, canceledEndpoint);
+        storePubStatusWithdrawnOnCancel.connectOutputTo( canceledEndpoint );
+
         storeForceEditStatusQualified.connectOutputTo(publishMessageToChannels);
         publishMessageToChannels.connectOutputTo(storePublicationStatusPublished);
         storePublicationStatusPublished.connectOutputTo(updateMessage);
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/DecideFailureInfoPublished.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/DecideFailureInfoPublished.java
new file mode 100644
index 0000000..fe76268
--- /dev/null
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/DecideFailureInfoPublished.java
@@ -0,0 +1,48 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2018 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
+ *******************************************************************************
+ */
+
+package org.eclipse.openk.gridfailureinformation.bpmn.impl.tasks;
+
+import lombok.extern.log4j.Log4j2;
+import org.eclipse.openk.gridfailureinformation.bpmn.base.ProcessException;
+import org.eclipse.openk.gridfailureinformation.bpmn.base.tasks.DecisionTask;
+import org.eclipse.openk.gridfailureinformation.bpmn.impl.GfiProcessSubject;
+import org.eclipse.openk.gridfailureinformation.constants.Constants;
+
+@Log4j2
+public class DecideFailureInfoPublished extends DecisionTask<GfiProcessSubject> {
+
+    public DecideFailureInfoPublished() {
+        super("Decision: Ist die Störungsinformation veröffentlicht?");
+    }
+
+    @Override
+    public OutputPort decide(GfiProcessSubject subject) throws ProcessException {
+        boolean isPublished = Constants.PUB_STATUS_VEROEFFENTLICHT.equals(
+                subject.getFailureInformationDto().getPublicationStatus()
+        );
+
+        String loggerOutput1 = "Decide: ";
+
+        if (isPublished) {
+            log.debug(loggerOutput1 + getDescription() + "\" -> Firing YES");
+            return OutputPort.YES;
+        } else {
+            log.debug(loggerOutput1 + getDescription() + "\" -> Firing NO");
+            return OutputPort.NO;
+        }
+    }
+
+}
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/DecideFailureInfoUpdated.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/DecideFailureInfoUpdated.java
index 11538aa..00f03df 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/DecideFailureInfoUpdated.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/tasks/DecideFailureInfoUpdated.java
@@ -38,12 +38,18 @@
         String loggerOutput1 = "Decide: ";
 
         if (newState == GfiProcessState.UPDATED) {
-            log.debug(loggerOutput1 + getDescription() + "\" -> Firing YES");
-            return OutputPort.YES;
-        } else if (newState == GfiProcessState.COMPLETED) {
-            log.debug(loggerOutput1 + getDescription() + "\" -> Firing NO");
-            return OutputPort.NO;
-        } else {
+            log.debug(loggerOutput1 + getDescription() + "\" -> Firing PORT1");
+            return OutputPort.PORT1;
+        }
+        else if (newState == GfiProcessState.COMPLETED) {
+            log.debug(loggerOutput1 + getDescription() + "\" -> Firing PORT2");
+            return OutputPort.PORT2;
+        }
+        else if (newState == GfiProcessState.CANCELED) {
+            log.debug(( loggerOutput1 + getDescription() + "\" -> Firing PORT3"));
+            return OutputPort.PORT3;
+        }
+        else {
             throw new ProcessException(this.getDescription() + ": Invalid status request:" + newState,
                     new InternalServerErrorException("invalid.status.request"));
         }
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/DecideFailureInfoPublishedTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/DecideFailureInfoPublishedTest.java
new file mode 100644
index 0000000..3fe3eb5
--- /dev/null
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/bpmn/impl/DecideFailureInfoPublishedTest.java
@@ -0,0 +1,28 @@
+package org.eclipse.openk.gridfailureinformation.bpmn.impl;
+
+import org.eclipse.openk.gridfailureinformation.bpmn.base.ProcessException;
+import org.eclipse.openk.gridfailureinformation.bpmn.base.tasks.DecisionTask;
+import org.eclipse.openk.gridfailureinformation.bpmn.impl.tasks.DecideFailureInfoPublished;
+import org.eclipse.openk.gridfailureinformation.constants.Constants;
+import org.eclipse.openk.gridfailureinformation.support.MockDataHelper;
+import org.eclipse.openk.gridfailureinformation.viewmodel.FailureInformationDto;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class DecideFailureInfoPublishedTest {
+
+
+    @Test
+    public void shouldDecideCorrectly() throws ProcessException {
+        FailureInformationDto fiDto = MockDataHelper.mockFailureInformationDto();
+        fiDto.setPublicationStatus(Constants.PUB_STATUS_VEROEFFENTLICHT);
+        GfiProcessSubject sub = GfiProcessSubject.of(fiDto, null);
+        DecisionTask dtask = new DecideFailureInfoPublished();
+        assertEquals(DecisionTask.OutputPort.YES, dtask.decide(sub));
+
+        sub.getFailureInformationDto().setPublicationStatus(Constants.PUB_STATUS_UNVEROEFFENTLICHT);
+        assertEquals(DecisionTask.OutputPort.NO, dtask.decide(sub));
+    }
+
+}
