diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java b/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java
index 76f99e14b1abfbb9e8ae9236bdcad55981d08bd6..61141e8085823647eb25c4c41f891dfa8627c059 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/engine/ros/DiNeRosNode.java
@@ -1,5 +1,6 @@
 package de.tudresden.inf.st.pnml.engine.ros;
 
+import de.tudresden.inf.st.pnml.base.constants.PnmlConstants;
 import de.tudresden.inf.st.pnml.base.data.ClauseValuesDefinition;
 import de.tudresden.inf.st.pnml.engine.transform.PetriNetInitializer;
 import de.tudresden.inf.st.pnml.jastadd.model.*;
@@ -8,7 +9,10 @@ import org.ros.concurrent.CancellableLoop;
 import org.ros.namespace.GraphName;
 import org.ros.node.AbstractNodeMain;
 import org.ros.node.ConnectedNode;
+import org.ros.node.topic.Publisher;
+import org.ros.node.topic.Subscriber;
 import org.xml.sax.SAXException;
+import std_msgs.String;
 
 import javax.xml.parsers.ParserConfigurationException;
 import java.io.IOException;
@@ -20,7 +24,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
     public static final java.lang.String NOTIFICATION_MARKING_CHANGE = "markingChange";
     public static final java.lang.String NOTIFICATION_SIGNAL_CHANGE = "signalChange";
     public static final java.lang.String NOTIFICATION_WAIT_ENDED = "waitEnded";
-    public static final java.lang.String NOTIFICATION_STARTUP_ENDED = "waitEnded";
+    public static final java.lang.String NOTIFICATION_STARTUP_ENDED = "startEnded";
 
     public final java.lang.String nodeName;
     public final PetriNet petriNet;
@@ -30,7 +34,10 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
     protected InputSignalConnector inputSignalConnector = new InputSignalConnector();
     private boolean stopNode = false;
 
-    public DiNeRosNode(java.lang.String nodeName, PetriNet petriNet, String rcHost, String gcProtocol) {
+    final Map<DinerosPlace, Subscriber> dinerosSubscribers = new HashMap<>();
+    final Map<DinerosPlace, Publisher<String>> dinerosPublishers = new HashMap<>();
+
+    public DiNeRosNode(java.lang.String nodeName, PetriNet petriNet, java.lang.String rcHost, java.lang.String gcProtocol) {
         this.nodeName = nodeName;
         this.petriNet = petriNet;
 
@@ -52,13 +59,13 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
         this.inputSignalConnector = inputSignalConnector;
     }
 
-    private final void internalNodeLoop() {
+    private void internalNodeLoop() {
 
         this.connectedNode.executeCancellableLoop(new CancellableLoop() {
 
             @Override
             protected void loop() {
-                if(!stopNode) {
+                if (!stopNode) {
                     nodeLoop();
                 }
             }
@@ -67,23 +74,28 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
 
     protected abstract void nodeLoop();
 
-    protected final void stop(){
+    protected final void stop() {
         stopNode = true;
         this.connectedNode.shutdown();
     }
 
-    public synchronized void notify(java.lang.String notificationType){
+    public synchronized void notify(java.lang.String notificationType) {
 
         Set<Transition> signalFilteredTransitions = getSignalFilteredTransitions();
 
-        if (notificationType.equals(NOTIFICATION_MARKING_CHANGE)) {
-            onMarkingChangeInternal(signalFilteredTransitions);
-        } else if (notificationType.equals(NOTIFICATION_SIGNAL_CHANGE)) {
-            onSignalChangeInternal(signalFilteredTransitions);
-        } else if (notificationType.equals(NOTIFICATION_WAIT_ENDED)) {
-            onWaitEndedInternal(signalFilteredTransitions);
-        } else if (notificationType.equals(NOTIFICATION_STARTUP_ENDED)) {
-            onStartupEndedInternal(signalFilteredTransitions);
+        switch (notificationType) {
+            case NOTIFICATION_MARKING_CHANGE:
+                onMarkingChangeInternal(signalFilteredTransitions);
+                break;
+            case NOTIFICATION_SIGNAL_CHANGE:
+                onSignalChangeInternal(signalFilteredTransitions);
+                break;
+            case NOTIFICATION_WAIT_ENDED:
+                onWaitEndedInternal(signalFilteredTransitions);
+                break;
+            case NOTIFICATION_STARTUP_ENDED:
+                onStartupEndedInternal(signalFilteredTransitions);
+                break;
         }
 
     }
@@ -94,10 +106,10 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
 
         ClauseValuesDefinition clauseValuesDefinition = new ClauseValuesDefinition();
 
-        for(Transition transition : marking.enabledBalloonTransitions()) {
+        for (Transition transition : marking.enabledBalloonTransitions()) {
             if (transition.asDinerosTransition().getStaticTransitionInformation()
                     .asSignalTransitionInformation().getClause() != null) {
-                for (String signalId : transition.asDinerosTransition().getStaticTransitionInformation()
+                for (java.lang.String signalId : transition.asDinerosTransition().getStaticTransitionInformation()
                         .asSignalTransitionInformation().getClause().signals()) {
                     for (SignalConnection sc : inputSignalConnector.getSignalConnections()) {
                         if (signalId.equals(sc.getId())) {
@@ -130,19 +142,19 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
             }
         }
 
-        if(res.isFiringSelectionFail()){
+        if (res.isFiringSelectionFail()) {
             System.err.println("[DiNeROS-Node] [" + nodeName + "] Firing selection action failed!");
             return res;
         }
 
         System.out.println("FIRING TRANSITION");
         marking.fireTransition(res.asFiringSelectionSuccess()
-                .getTransition(), callbackStorage, inputSignalConnector, this,true);
+                .getTransition(), callbackStorage, inputSignalConnector, this, true);
 
         return res;
     }
 
-    private void onStartupEndedInternal(Set<Transition> enabledTransitions){
+    private void onStartupEndedInternal(Set<Transition> enabledTransitions) {
 
         System.out.println("Calling onStartupEndedInternal");
 
@@ -150,7 +162,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
         getTransitionSelectionResult(res);
     }
 
-    private void onMarkingChangeInternal(Set<Transition> enabledTransitions){
+    private void onMarkingChangeInternal(Set<Transition> enabledTransitions) {
 
         System.out.println("Calling onMarkingChangeInternal");
 
@@ -158,7 +170,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
         getTransitionSelectionResult(res);
     }
 
-    private void onSignalChangeInternal(Set<Transition> enabledTransitions){
+    private void onSignalChangeInternal(Set<Transition> enabledTransitions) {
 
         System.out.println("Calling onSignalChangeInternal");
 
@@ -167,7 +179,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
 
     }
 
-    private void onWaitEndedInternal(Set<Transition> enabledTransitions){
+    private void onWaitEndedInternal(Set<Transition> enabledTransitions) {
 
         System.out.println("Calling onWaitEndedInternal");
 
@@ -203,18 +215,45 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
         // TODO
 
         // init publishers
-        // TODO
+        HashMap<java.lang.String, ArrayList<java.lang.String>> channelPubElementMap
+                = petriNet.getChannelElemensByKey(PnmlConstants.CHANNEL_PLACE_TYPE_PUB_KEY);
+
+        for (java.lang.String key : channelPubElementMap.keySet()) {
+            // TODO: modify fire method -> if a target is publisher-place, than it has to fire; thus, add node-param to it for all needed data
+            for (java.lang.String placeId : channelPubElementMap.get(key)) {
+                final Publisher<String> publisher = connectedNode.newPublisher(key, String._TYPE);
+                dinerosPublishers.put(petriNet.getPlaceById(placeId).asDinerosPlace(), publisher);
+            }
+        }
 
         // init subscribers
-        // TODO
+        HashMap<java.lang.String, ArrayList<java.lang.String>> channelSubElementMap
+                = petriNet.getChannelElemensByKey(PnmlConstants.CHANNEL_PLACE_TYPE_SUB_KEY);
+
+        for (java.lang.String key : channelSubElementMap.keySet()) {
+            for (java.lang.String placeId : channelSubElementMap.get(key)) {
+
+                Subscriber<String> subscriber = connectedNode.newSubscriber(key, String._TYPE);
+
+
+                subscriber.addMessageListener(message -> {
+                    // TODO
+
+                }, petriNet.getChannelElementLimitById(placeId));
+
+                dinerosSubscribers.put(petriNet.getPlaceById(placeId).asDinerosPlace(), subscriber);
+
+            }
+        }
 
         System.out.println("[INIT NODE] Executing first marking query.");
-        TransitionSelectionResult firstFiringResult = onStartupEnded(marking.enabledBalloonTransitions());
+        //  TransitionSelectionResult firstFiringResult =
+        this.notify(NOTIFICATION_STARTUP_ENDED);
 
-        if(firstFiringResult.isFiringSelectionSuccess()){
+       /* if(firstFiringResult.isFiringSelectionSuccess()){
             marking.fireTransition(firstFiringResult.asFiringSelectionSuccess()
                     .getTransition(), callbackStorage, inputSignalConnector, this,true);
-        }
+        }*/
 
         this.internalNodeLoop();
     }
diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/transform/PetriNetInitializer.java b/src/main/java/de/tudresden/inf/st/pnml/engine/transform/PetriNetInitializer.java
index 089696d9f5e0abff908621eb125baaec52bc1f20..af9ff830a7b3330332f3bf89968171b51c0633d7 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/engine/transform/PetriNetInitializer.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/engine/transform/PetriNetInitializer.java
@@ -1,7 +1,6 @@
 package de.tudresden.inf.st.pnml.engine.transform;
 
 import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode;
-import de.tudresden.inf.st.pnml.engine.testNodes.DinerosTestNode;
 import de.tudresden.inf.st.pnml.jastadd.model.*;
 
 import java.io.IOException;