diff --git a/build.gradle b/build.gradle
index 336f5bbfa8cc158893aa58864f95cdb8e4fa8e5a..b52774b9140029264c09280f35519450a67fe876 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,7 +5,7 @@ buildscript {
 }
 
 group 'de.tudresden.inf.st'
-version '0.1'
+version '1.0'
 
 apply plugin: 'java'
 apply plugin: 'java-library'
@@ -46,17 +46,72 @@ jar {
 
 }
 
-task fatJar(type: Jar) {
-    dependsOn jar
+task jarSubscriberNode(type: Jar) {
     group = "build"
 
-    archiveAppendix = "fatjar"
+    manifest {
+        attributes "Main-Class": "de.tudresden.inf.st.sample.launch.SubscriberNodeLauncher"
+    }
+
+    from sourceSets.main.output
+    from {
+        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
+    }
+
+    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
+    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
+    archiveBaseName = 'pnml-pkg-sample-subscriberNode'
+}
+
+task jarPublisherNode(type: Jar) {
+    group = "build"
+
+    manifest {
+        attributes "Main-Class": "de.tudresden.inf.st.sample.launch.PublisherNodeLauncher"
+    }
+
+    from sourceSets.main.output
+    from {
+        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
+    }
+
+    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
+    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
+    archiveBaseName = 'pnml-pkg-sample-publisherNode'
+}
+
+task jarServerNode(type: Jar) {
+    group = "build"
+
+    manifest {
+        attributes "Main-Class": "de.tudresden.inf.st.sample.launch.ServerNodeLauncher"
+    }
+
+    from sourceSets.main.output
+    from {
+        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
+    }
+
+    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
+    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
+    archiveBaseName = 'pnml-pkg-sample-serverNode'
+}
+
+task jarClientNode(type: Jar) {
+    group = "build"
+
+    manifest {
+        attributes "Main-Class": "de.tudresden.inf.st.sample.launch.ClientNodeLauncher"
+    }
+
     from sourceSets.main.output
     from {
-        configurations.runtimeClasspath.collect {it.isDirectory() ? it : zipTree(it) }
+        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
     }
 
-    manifest.attributes "Main-Class": "de.tudresden.inf.st.sample.Main"
+    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
+    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
+    archiveBaseName = 'pnml-pkg-sample-clientNode'
 }
 
 run {
diff --git a/libs/pnml-relast-engine-fatjar-0.1.jar b/libs/pnml-relast-engine-fatjar-0.1.jar
index 962eac47cbea654f89f42dfb0775e21f7ec936ba..cd70cdc0c41b4275912ac74fed28170c08d679aa 100644
Binary files a/libs/pnml-relast-engine-fatjar-0.1.jar and b/libs/pnml-relast-engine-fatjar-0.1.jar differ
diff --git a/src/main/java/de/tudresden/inf/st/sample/Main.java b/src/main/java/de/tudresden/inf/st/sample/Main.java
index 740e6c056a3a3a36983c4306c0dec6481710a42d..60261af9f885698728f58510529cb6d76be320d9 100644
--- a/src/main/java/de/tudresden/inf/st/sample/Main.java
+++ b/src/main/java/de/tudresden/inf/st/sample/Main.java
@@ -38,13 +38,13 @@ public class Main {
         List<String> petriNetPaths = new ArrayList<>();
         petriNetPaths.add("src/main/resources/nets/publisher-net.pnml");
         petriNetPaths.add("src/main/resources/nets/subscriber-net.pnml");
-        petriNetPaths.add("src/main/resources/nets/client-net.pnml");
-        petriNetPaths.add("src/main/resources/nets/server-net.pnml");
+        // petriNetPaths.add("src/main/resources/nets/client-net.pnml");
+        // petriNetPaths.add("src/main/resources/nets/server-net.pnml");
 
         // Parse the PNML files
         List<PetriNet> petriNets = new ArrayList<>();
         for(String petriNetPath : petriNetPaths){
-            petriNets.add(PnmlParser.parsePnml(petriNetPath).get(0));
+            petriNets.add(PnmlParser.parsePnml(petriNetPath, false).get(0));
         }
 
         // Initialize the Handling
@@ -57,20 +57,27 @@ public class Main {
         // Create the ROS nodes
         DiNeRosNode node0 = new PublisherNode("PublisherNode", petriNets.get(0), MQTT_HOST, "mqtt");
         DiNeRosNode node1 = new SubscriberNode("SubscriberNode", petriNets.get(1), MQTT_HOST, "mqtt");
-        DiNeRosNode node2 = new ClientNode("ClientNode", petriNets.get(2), MQTT_HOST, "mqtt");
-        DiNeRosNode node3 = new ServerNode("ServerNode", petriNets.get(3), MQTT_HOST, "mqtt");
+        // DiNeRosNode node2 = new ClientNode("ClientNode", petriNets.get(2), MQTT_HOST, "mqtt");
+        // DiNeRosNode node3 = new ServerNode("ServerNode", petriNets.get(3), MQTT_HOST, "mqtt");
 
         // Setup handlers of the ROS nodes
-        HandlingBinder.bindHandlersToPublisherNode(petriNets.get(0));
-        HandlingBinder.bindHandlersToSubscriberNode(petriNets.get(0));
-        HandlingBinder.bindHandlersToClientNode(petriNets.get(0));
-        HandlingBinder.bindHandlersToServerNode(petriNets.get(0));
+        HandlingBinder.bindHandlersToPublisherNode(node0);
+        HandlingBinder.bindHandlersToSubscriberNode(node1);
+        // HandlingBinder.bindHandlersToClientNode(node2);
+        // HandlingBinder.bindHandlersToServerNode(node3);
 
         // Start the ROS nodes
         new Thread(() -> nodeMainExecutor.execute(node0, nodeConfiguration)) {{start();}};
+
+        /*try {
+            Thread.sleep(1000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }*/
+
         new Thread(() -> nodeMainExecutor.execute(node1, nodeConfiguration)) {{start();}};
-        new Thread(() -> nodeMainExecutor.execute(node2, nodeConfiguration)) {{start();}};
-        new Thread(() -> nodeMainExecutor.execute(node3, nodeConfiguration)) {{start();}};
+        // new Thread(() -> nodeMainExecutor.execute(node2, nodeConfiguration)) {{start();}};
+        // new Thread(() -> nodeMainExecutor.execute(node3, nodeConfiguration)) {{start();}};
 
     }
 }
diff --git a/src/main/java/de/tudresden/inf/st/sample/handling/HandlerFunctions.java b/src/main/java/de/tudresden/inf/st/sample/handling/HandlerFunctions.java
index 79a90fd5e9fd52ec4550137bae51679acf6175c6..f6fa8c49f51aa3d20516bd06e5a1e3c1b44b96cb 100644
--- a/src/main/java/de/tudresden/inf/st/sample/handling/HandlerFunctions.java
+++ b/src/main/java/de/tudresden/inf/st/sample/handling/HandlerFunctions.java
@@ -8,6 +8,7 @@ import java.util.function.Function;
 public final class HandlerFunctions {
 
     final static Function<List<Map<String, Object>>, List<Map<String, Object>>> SAMPLE_COLOR_HANDLING_FUNCTION =  maps -> {
+        System.out.println("Executing SAMPLE_COLOR_HANDLING_FUNCTION.");
         for(Map<String, Object> m : maps){
             m.keySet().stream().filter(s -> false).forEach(s -> m.replace("color", "light-red"));
         }
@@ -15,6 +16,7 @@ public final class HandlerFunctions {
     };
 
     final static Function<List<Map<String, Object>>, List<Map<String, Object>>> SAMPLE_SUCCESS_HANDLING_FUNCTION =  maps -> {
+        System.out.println("Executing SAMPLE_SUCCESS_HANDLING_FUNCTION.");
         for(Map<String, Object> m : maps){
             m.keySet().stream().filter(s -> false).forEach(s -> m.replace("pickPlaceSuccess", true));
         }
@@ -22,7 +24,7 @@ public final class HandlerFunctions {
     };
 
     final static Function<List<Map<String, Object>>, List<Map<String, Object>>> SAMPLE_FINAL_HANDLING_FUNCTION = maps -> {
-
+        System.out.println("Executing SAMPLE_FINAL_HANDLING_FUNCTION.");
         List<Map<String, Object>> sList = new ArrayList<>();
         sList.add(maps.get(0));
         return sList;
diff --git a/src/main/java/de/tudresden/inf/st/sample/handling/HandlingBinder.java b/src/main/java/de/tudresden/inf/st/sample/handling/HandlingBinder.java
index 522fdb87a35362452386dc4fefbca0f2c02d9d3f..75cae44b337403e9ccc97125ab8bbee31ddddf5d 100644
--- a/src/main/java/de/tudresden/inf/st/sample/handling/HandlingBinder.java
+++ b/src/main/java/de/tudresden/inf/st/sample/handling/HandlingBinder.java
@@ -1,6 +1,7 @@
 package de.tudresden.inf.st.sample.handling;
 
 
+import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode;
 import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
 
 /**
@@ -8,21 +9,21 @@ import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
  */
 public class HandlingBinder {
 
-   public static void bindHandlersToClientNode(PetriNet petriNet){
-       petriNet.registerHandler("ClientTransition1", 1, HandlerFunctions.SAMPLE_FINAL_HANDLING_FUNCTION);
+   public static void bindHandlersToClientNode(DiNeRosNode node){
+       node.registerHandler("ClientTransition1", 1, HandlerFunctions.SAMPLE_FINAL_HANDLING_FUNCTION);
    }
 
-    public static void bindHandlersToServerNode(PetriNet petriNet){
-       petriNet.registerHandler("ConnectorTransition", 1, HandlerFunctions.SAMPLE_SUCCESS_HANDLING_FUNCTION);
-       petriNet.registerHandler("ConnectorTransition", 2, HandlerFunctions.SAMPLE_FINAL_HANDLING_FUNCTION);
+    public static void bindHandlersToServerNode(DiNeRosNode node){
+        node.registerHandler("ConnectorTransition", 1, HandlerFunctions.SAMPLE_SUCCESS_HANDLING_FUNCTION);
+        node.registerHandler("ConnectorTransition", 2, HandlerFunctions.SAMPLE_FINAL_HANDLING_FUNCTION);
     }
 
-    public static void bindHandlersToPublisherNode(PetriNet petriNet){
-        petriNet.registerHandler("SortRed", 1, HandlerFunctions.SAMPLE_COLOR_HANDLING_FUNCTION);
-        petriNet.registerHandler("SortRed", 2, HandlerFunctions.SAMPLE_FINAL_HANDLING_FUNCTION);
+    public static void bindHandlersToPublisherNode(DiNeRosNode node){
+        node.registerHandler("SortRed", 1, HandlerFunctions.SAMPLE_COLOR_HANDLING_FUNCTION);
+        node.registerHandler("SortRed", 2, HandlerFunctions.SAMPLE_FINAL_HANDLING_FUNCTION);
     }
 
-    public static void bindHandlersToSubscriberNode(PetriNet petriNet){
-        petriNet.registerHandler("SubTransition", 1, HandlerFunctions.SAMPLE_FINAL_HANDLING_FUNCTION);
+    public static void bindHandlersToSubscriberNode(DiNeRosNode node){
+        node.registerHandler("SubTransition", 1, HandlerFunctions.SAMPLE_FINAL_HANDLING_FUNCTION);
     }
 }
diff --git a/src/main/java/de/tudresden/inf/st/sample/launch/ClientNodeLauncher.java b/src/main/java/de/tudresden/inf/st/sample/launch/ClientNodeLauncher.java
new file mode 100644
index 0000000000000000000000000000000000000000..695a2649d383c893f17e0baf8b91af8f4ef5ec8c
--- /dev/null
+++ b/src/main/java/de/tudresden/inf/st/sample/launch/ClientNodeLauncher.java
@@ -0,0 +1,52 @@
+package de.tudresden.inf.st.sample.launch;
+
+import de.tudresden.inf.st.pnml.engine.execution.TransitionHandlerService;
+import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode;
+import de.tudresden.inf.st.pnml.jastadd.model.BalloonCallbackStorage;
+import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
+import de.tudresden.inf.st.pnml.jastadd.model.PnmlParser;
+import de.tudresden.inf.st.sample.handling.HandlingBinder;
+import de.tudresden.inf.st.sample.nodes.ClientNode;
+import org.ros.node.DefaultNodeMainExecutor;
+import org.ros.node.NodeConfiguration;
+import org.ros.node.NodeMainExecutor;
+
+import java.net.URI;
+
+public class ClientNodeLauncher {
+
+    // actual ros / mqtt host url is inserted based on configuration
+    private static final String ROS_HOST = "localhost";
+    private static final String ROS_MASTER_URI = "http://localhost:11311";
+    private static final String MQTT_HOST = "localhost";
+
+    private static final NodeConfiguration nodeConfiguration = NodeConfiguration.newPublic(ROS_HOST);
+    private static final NodeMainExecutor nodeMainExecutor = DefaultNodeMainExecutor.newDefault();
+
+    public static void main(java.lang.String[] args) {
+
+        // Setup ROS Master
+        nodeConfiguration.setMasterUri(URI.create(ROS_MASTER_URI));
+
+        // Petri Net base data initialization
+        String petriNetPath = "/nets/client-net.pnml";
+
+        // Parse the PNML file
+        PetriNet petriNet = PnmlParser.parsePnml(petriNetPath, true).get(0);
+
+        // Initialize the Handling
+        TransitionHandlerService transitionHandlerService = TransitionHandlerService.getInstance();
+        BalloonCallbackStorage storage = petriNet.initializeCallbackStorage();
+        transitionHandlerService.init(petriNet.getId(), storage);
+
+        // Create the ROS nodes
+        DiNeRosNode node2 = new ClientNode("ClientNode", petriNet, MQTT_HOST, "mqtt");
+
+        // Setup handlers of the ROS nodes
+        HandlingBinder.bindHandlersToClientNode(node2);
+
+        // Start the ROS node
+        new Thread(() -> nodeMainExecutor.execute(node2, nodeConfiguration)) {{start();}};
+
+    }
+}
diff --git a/src/main/java/de/tudresden/inf/st/sample/launch/PublisherNodeLauncher.java b/src/main/java/de/tudresden/inf/st/sample/launch/PublisherNodeLauncher.java
new file mode 100644
index 0000000000000000000000000000000000000000..5486a5b9f193a8f611ca2db98c981c5396d5db77
--- /dev/null
+++ b/src/main/java/de/tudresden/inf/st/sample/launch/PublisherNodeLauncher.java
@@ -0,0 +1,51 @@
+package de.tudresden.inf.st.sample.launch;
+
+import de.tudresden.inf.st.pnml.engine.execution.TransitionHandlerService;
+import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode;
+import de.tudresden.inf.st.pnml.jastadd.model.BalloonCallbackStorage;
+import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
+import de.tudresden.inf.st.pnml.jastadd.model.PnmlParser;
+import de.tudresden.inf.st.sample.handling.HandlingBinder;
+import de.tudresden.inf.st.sample.nodes.PublisherNode;
+import org.ros.node.DefaultNodeMainExecutor;
+import org.ros.node.NodeConfiguration;
+import org.ros.node.NodeMainExecutor;
+
+import java.net.URI;
+
+public class PublisherNodeLauncher {
+
+    // actual ros / mqtt host url is inserted based on configuration
+    private static final String ROS_HOST = "localhost";
+    private static final String ROS_MASTER_URI = "http://localhost:11311";
+    private static final String MQTT_HOST = "localhost";
+
+    private static final NodeConfiguration nodeConfiguration = NodeConfiguration.newPublic(ROS_HOST);
+    private static final NodeMainExecutor nodeMainExecutor = DefaultNodeMainExecutor.newDefault();
+
+    public static void main(java.lang.String[] args) {
+
+        // Setup ROS Master
+        nodeConfiguration.setMasterUri(URI.create(ROS_MASTER_URI));
+
+        // Petri Net base data initialization
+        String petriNetPath = "/nets/publisher-net.pnml";
+
+        // Parse the PNML file
+        PetriNet petriNet = PnmlParser.parsePnml(petriNetPath, true).get(0);
+
+        // Initialize the Handling
+        TransitionHandlerService transitionHandlerService = TransitionHandlerService.getInstance();
+        BalloonCallbackStorage storage = petriNet.initializeCallbackStorage();
+        transitionHandlerService.init(petriNet.getId(), storage);
+
+        // Create the ROS node
+        DiNeRosNode node0 = new PublisherNode("PublisherNode", petriNet, MQTT_HOST, "mqtt");
+
+        // Setup handlers of the ROS node
+        HandlingBinder.bindHandlersToPublisherNode(node0);
+
+        // Start the ROS node
+        new Thread(() -> nodeMainExecutor.execute(node0, nodeConfiguration)) {{start();}};
+    }
+}
diff --git a/src/main/java/de/tudresden/inf/st/sample/launch/ServerNodeLauncher.java b/src/main/java/de/tudresden/inf/st/sample/launch/ServerNodeLauncher.java
new file mode 100644
index 0000000000000000000000000000000000000000..b94773e4bafe69da19fc1aed1e6d904ebb2e09d1
--- /dev/null
+++ b/src/main/java/de/tudresden/inf/st/sample/launch/ServerNodeLauncher.java
@@ -0,0 +1,52 @@
+package de.tudresden.inf.st.sample.launch;
+
+import de.tudresden.inf.st.pnml.engine.execution.TransitionHandlerService;
+import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode;
+import de.tudresden.inf.st.pnml.jastadd.model.BalloonCallbackStorage;
+import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
+import de.tudresden.inf.st.pnml.jastadd.model.PnmlParser;
+import de.tudresden.inf.st.sample.handling.HandlingBinder;
+import de.tudresden.inf.st.sample.nodes.ServerNode;
+import org.ros.node.DefaultNodeMainExecutor;
+import org.ros.node.NodeConfiguration;
+import org.ros.node.NodeMainExecutor;
+
+import java.net.URI;
+
+public class ServerNodeLauncher {
+
+    // actual ros / mqtt host url is inserted based on configuration
+    private static final String ROS_HOST = "localhost";
+    private static final String ROS_MASTER_URI = "http://localhost:11311";
+    private static final String MQTT_HOST = "localhost";
+
+    private static final NodeConfiguration nodeConfiguration = NodeConfiguration.newPublic(ROS_HOST);
+    private static final NodeMainExecutor nodeMainExecutor = DefaultNodeMainExecutor.newDefault();
+
+    public static void main(java.lang.String[] args) {
+
+        // Setup ROS Master
+        nodeConfiguration.setMasterUri(URI.create(ROS_MASTER_URI));
+
+        // Petri Net base data initialization
+        String petriNetPath = "/nets/server-net.pnml";
+
+        // Parse the PNML file
+        PetriNet petriNet = PnmlParser.parsePnml(petriNetPath, true).get(0);
+
+        // Initialize the Handling
+        TransitionHandlerService transitionHandlerService = TransitionHandlerService.getInstance();
+        BalloonCallbackStorage storage = petriNet.initializeCallbackStorage();
+        transitionHandlerService.init(petriNet.getId(), storage);
+
+        // Create the ROS nodes
+        DiNeRosNode node3 = new ServerNode("ServerNode", petriNet, MQTT_HOST, "mqtt");
+
+        // Setup handlers of the ROS node
+        HandlingBinder.bindHandlersToServerNode(node3);
+
+        // Start the ROS node
+        new Thread(() -> nodeMainExecutor.execute(node3, nodeConfiguration)) {{start();}};
+
+    }
+}
diff --git a/src/main/java/de/tudresden/inf/st/sample/launch/SubscriberNodeLauncher.java b/src/main/java/de/tudresden/inf/st/sample/launch/SubscriberNodeLauncher.java
new file mode 100644
index 0000000000000000000000000000000000000000..7950ef1d5a5c11711c30a13863f42ee93fa5e3cd
--- /dev/null
+++ b/src/main/java/de/tudresden/inf/st/sample/launch/SubscriberNodeLauncher.java
@@ -0,0 +1,52 @@
+package de.tudresden.inf.st.sample.launch;
+
+import de.tudresden.inf.st.pnml.engine.execution.TransitionHandlerService;
+import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode;
+import de.tudresden.inf.st.pnml.jastadd.model.BalloonCallbackStorage;
+import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
+import de.tudresden.inf.st.pnml.jastadd.model.PnmlParser;
+import de.tudresden.inf.st.sample.handling.HandlingBinder;
+import de.tudresden.inf.st.sample.nodes.SubscriberNode;
+import org.ros.node.DefaultNodeMainExecutor;
+import org.ros.node.NodeConfiguration;
+import org.ros.node.NodeMainExecutor;
+
+import java.net.URI;
+
+public class SubscriberNodeLauncher {
+
+    // actual ros / mqtt host url is inserted based on configuration
+    private static final String ROS_HOST = "localhost";
+    private static final String ROS_MASTER_URI = "http://localhost:11311";
+    private static final String MQTT_HOST = "localhost";
+
+    private static final NodeConfiguration nodeConfiguration = NodeConfiguration.newPublic(ROS_HOST);
+    private static final NodeMainExecutor nodeMainExecutor = DefaultNodeMainExecutor.newDefault();
+
+    public static void main(java.lang.String[] args) {
+
+        // Setup ROS Master
+        nodeConfiguration.setMasterUri(URI.create(ROS_MASTER_URI));
+
+        // Petri Net base data initialization
+        String petriNetPath = "/nets/subscriber-net.pnml";
+
+        // Parse the PNML files
+        PetriNet petriNet = PnmlParser.parsePnml(petriNetPath, true).get(0);
+
+        // Initialize the Handling
+        TransitionHandlerService transitionHandlerService = TransitionHandlerService.getInstance();
+        BalloonCallbackStorage storage = petriNet.initializeCallbackStorage();
+        transitionHandlerService.init(petriNet.getId(), storage);
+
+        // Create the ROS node
+        DiNeRosNode node1 = new SubscriberNode("SubscriberNode", petriNet, MQTT_HOST, "mqtt");
+
+        // Setup handlers of the ROS node
+        HandlingBinder.bindHandlersToSubscriberNode(node1);
+
+        // Start the ROS node
+        new Thread(() -> nodeMainExecutor.execute(node1, nodeConfiguration)) {{start();}};
+
+    }
+}
diff --git a/src/main/java/de/tudresden/inf/st/sample/nodes/ClientNode.java b/src/main/java/de/tudresden/inf/st/sample/nodes/ClientNode.java
index d199e5221c0a6753f7457c398a555a70d8410235..de4cc9c7b45a4bbee8d173efb1cdc5a6ccbbec09 100644
--- a/src/main/java/de/tudresden/inf/st/sample/nodes/ClientNode.java
+++ b/src/main/java/de/tudresden/inf/st/sample/nodes/ClientNode.java
@@ -11,14 +11,26 @@ public class ClientNode extends DiNeRosNode {
         super(nodeName, petriNet, rcHost, gcProtocol);
     }
 
+    @Override
+    protected void nodeLoop() {
+        try {
+            Thread.sleep(4000);
+            System.out.println(this.marking.print());
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+    }
+
     @Override
     protected TransitionSelectionResult onChange(List<Transition> list) {
+        System.out.println("Executing onChange in ClientNode.");
         return list.size() == 0 ?
                 new FiringSelectionNone() : fireRandomEnabledTransition(list);
     }
 
     @Override
     protected TransitionSelectionResult onStartupEnded(List<Transition> list) {
+        System.out.println("Executing onStartupEnded in ClientNode.");
         return list.size() == 0 ?
                 new FiringSelectionNone() : fireRandomEnabledTransition(list);
     }
diff --git a/src/main/java/de/tudresden/inf/st/sample/nodes/PublisherNode.java b/src/main/java/de/tudresden/inf/st/sample/nodes/PublisherNode.java
index 3bac0bea18a0329f264641e78caf06a6ff8a28ce..9253455b0806107c1d20151a70397111fa742175 100644
--- a/src/main/java/de/tudresden/inf/st/sample/nodes/PublisherNode.java
+++ b/src/main/java/de/tudresden/inf/st/sample/nodes/PublisherNode.java
@@ -11,15 +11,45 @@ public class PublisherNode extends DiNeRosNode {
         super(nodeName, petriNet, rcHost, gcProtocol);
     }
 
+    @Override
+    protected void nodeLoop() {
+        try {
+            Thread.sleep(3000);
+            System.out.println(this.marking.print());
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+    }
+
     @Override
     protected TransitionSelectionResult onChange(List<Transition> list) {
-        return list.size() == 0 ?
+        System.out.println("Executing onChange in ClientNode.");
+
+        TransitionSelectionResult res = list.size() == 0 ?
                 new FiringSelectionNone() : fireRandomEnabledTransition(list);
+
+        if(res.isFiringSelectionNone()){
+            System.out.println("FiringSelectionNone (onChange, Pub)");
+        } else {
+            System.out.println("Sub firing (onChange): " + res.asFiringSelectionSuccess().getTransition().getId());
+        }
+
+        return res;
     }
 
     @Override
     protected TransitionSelectionResult onStartupEnded(List<Transition> list) {
-        return list.size() == 0 ?
+        System.out.println("Executing onStartupEnded in ClientNode.");
+
+        TransitionSelectionResult res = list.size() == 0 ?
                 new FiringSelectionNone() : fireRandomEnabledTransition(list);
+
+        if(res.isFiringSelectionNone()){
+            System.out.println("FiringSelectionNone (onChange, Pub)");
+        } else {
+            System.out.println("Sub firing (onChange): " + res.asFiringSelectionSuccess().getTransition().getId());
+        }
+
+        return res;
     }
 }
diff --git a/src/main/java/de/tudresden/inf/st/sample/nodes/ServerNode.java b/src/main/java/de/tudresden/inf/st/sample/nodes/ServerNode.java
index 858c20d0497b6d9caa19555d4f00ecc776ee901d..a702b999992738a436111757677faf9e5f74a5f8 100644
--- a/src/main/java/de/tudresden/inf/st/sample/nodes/ServerNode.java
+++ b/src/main/java/de/tudresden/inf/st/sample/nodes/ServerNode.java
@@ -11,15 +11,55 @@ public class ServerNode extends DiNeRosNode {
         super(nodeName, petriNet, rcHost, gcProtocol);
     }
 
+    @Override
+    protected void nodeLoop() {
+        try {
+            Thread.sleep(4000);
+            System.out.println(this.marking.print());
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+    }
+
     @Override
     protected TransitionSelectionResult onChange(List<Transition> list) {
-        return list.size() == 0 ?
+
+        for(Transition t : petriNet.allTransitions()){
+            System.out.println("T:" + t.getId());
+        }
+
+        for(Arc a : petriNet.allArcs()){
+            System.out.println("A: " + a.getId() + " s: " + a.getSource().getId() + " t: " + a.getTarget().getId());
+        }
+
+        TransitionSelectionResult res = list.size() == 0 ?
                 new FiringSelectionNone() : fireRandomEnabledTransition(list);
+
+        if(res.isFiringSelectionNone()){
+            System.out.println(this.marking.print());
+            System.out.println("[" + nodeName + "] FiringSelectionNone (onChange)");
+            return res.asFiringSelectionNone();
+        } else {
+            System.out.println(this.marking.print());
+            System.out.println("[" + nodeName + "] Firing (onChange): "
+                    + res.asFiringSelectionSuccess().getTransition().getId());
+            return res.asFiringSelectionSuccess();
+        }
     }
 
     @Override
     protected TransitionSelectionResult onStartupEnded(List<Transition> list) {
-        return list.size() == 0 ?
+
+        TransitionSelectionResult res = list.size() == 0 ?
                 new FiringSelectionNone() : fireRandomEnabledTransition(list);
+
+        if(res.isFiringSelectionNone()){
+            System.out.println("[" + nodeName + "] FiringSelectionNone (onStartupEnded)");
+        } else {
+            System.out.println("[" + nodeName + "] Firing (onStartupEnded): "
+                    + res.asFiringSelectionSuccess().getTransition().getId());
+        }
+
+        return res;
     }
 }
diff --git a/src/main/java/de/tudresden/inf/st/sample/nodes/SubscriberNode.java b/src/main/java/de/tudresden/inf/st/sample/nodes/SubscriberNode.java
index 8baa58e23397520306bdc60e70c0b806410fdea8..d3de2819277902e469569a2f52db890898d877af 100644
--- a/src/main/java/de/tudresden/inf/st/sample/nodes/SubscriberNode.java
+++ b/src/main/java/de/tudresden/inf/st/sample/nodes/SubscriberNode.java
@@ -11,15 +11,44 @@ public class SubscriberNode extends DiNeRosNode {
         super(nodeName, petriNet, rcHost, gcProtocol);
     }
 
+    @Override
+    protected void nodeLoop() {
+        try {
+            Thread.sleep(2000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+    }
+
     @Override
     protected TransitionSelectionResult onChange(List<Transition> list) {
-        return list.size() == 0 ?
+
+        TransitionSelectionResult res = list.size() == 0 ?
                 new FiringSelectionNone() : fireRandomEnabledTransition(list);
+
+        if(res.isFiringSelectionNone()){
+            System.out.println("[" + nodeName + "] FiringSelectionNone (onChange)");
+            return res.asFiringSelectionNone();
+        } else {
+            System.out.println("[" + nodeName + "] Firing (onChange): "
+                    + res.asFiringSelectionSuccess().getTransition().getId());
+            return res.asFiringSelectionSuccess();
+        }
     }
 
     @Override
     protected TransitionSelectionResult onStartupEnded(List<Transition> list) {
-        return list.size() == 0 ?
+
+        TransitionSelectionResult res = list.size() == 0 ?
                 new FiringSelectionNone() : fireRandomEnabledTransition(list);
+
+        if(res.isFiringSelectionNone()){
+            System.out.println("[" + nodeName + "] FiringSelectionNone (onStartupEnded)");
+        } else {
+            System.out.println("[" + nodeName + "] Firing (onStartupEnded): "
+                    + res.asFiringSelectionSuccess().getTransition().getId());
+        }
+
+        return res;
     }
 }
diff --git a/src/main/resources/nets/publisher-net.pnml b/src/main/resources/nets/publisher-net.pnml
index 24807d74cfce60d1672f6a2adfc7a11594a1ad08..7a4b5a60d0a763cda1890e502a6047ae708ffbff 100644
--- a/src/main/resources/nets/publisher-net.pnml
+++ b/src/main/resources/nets/publisher-net.pnml
@@ -1,5 +1,5 @@
 <pnml xmlns="http://www.pnml.org/version-2009/grammar/pnml">
-    <net id="PTNET-0" type="http://www.pnml.org/version-2009/grammar/ptnet">
+    <net id="PTNET-1" type="http://www.pnml.org/version-2009/grammar/ptnet">
         <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
             <inputsignals>
                 <inputsignal>
@@ -7,6 +7,9 @@
                     <initialvalue>false</initialvalue>
                 </inputsignal>
             </inputsignals>
+            <ports>
+                <port name="sampleTopic" placeType="pub" limit="10">pub1</port>
+            </ports>
         </toolspecific>
 
         <page id="top">
@@ -64,11 +67,5 @@
         <name>
             <text>TopicNet</text>
         </name>
-        <toolspecific tool="de.tudresden.inf.st.pnml.splitter" version="0.0.1">
-            <ports>
-                <port name="sampleTopic" placeType="pub">pub1</port>
-                <port name="sampleTopic" placeType="sub">sub1</port>
-            </ports>
-        </toolspecific>
     </net>
 </pnml>
diff --git a/src/main/resources/nets/server-net.pnml b/src/main/resources/nets/server-net.pnml
index 3b603fee15cb5050ab09aa9f4b06381d08b29dbd..27cb7eacd08c396368000becc22ed6d5f8f83014 100644
--- a/src/main/resources/nets/server-net.pnml
+++ b/src/main/resources/nets/server-net.pnml
@@ -1,5 +1,5 @@
 <pnml xmlns="http://www.pnml.org/version-2009/grammar/pnml">
-    <net id="PTNET-0" type="http://www.pnml.org/version-2009/grammar/ptnet">
+    <net id="PTNET-2" type="http://www.pnml.org/version-2009/grammar/ptnet">
         <page id="top">
             <page id="targetPage">
                 <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
@@ -53,10 +53,8 @@
         </name>
         <toolspecific tool="de.tudresden.inf.st.pnml.splitter" version="0.0.1">
             <ports>
-                <port limit="-1" name="sampleService" placeType="creq">req1</port>
-                <port limit="-1" name="sampleService" placeType="cres">res1</port>
-                <port limit="16" name="sampleService" placeType="sreq">serverIn</port>
-                <port limit="16" name="sampleService" placeType="sres">serverOut</port>
+                <port limit="2" name="sampleService" placeType="sreq">serverIn</port>
+                <port limit="2" name="sampleService" placeType="sres">serverOut</port>
             </ports>
         </toolspecific>
     </net>
diff --git a/src/main/resources/nets/subscriber-net.pnml b/src/main/resources/nets/subscriber-net.pnml
index 0b951970011d061ed03b9be6962939f68f7af74e..c036088ed38fb3b3f9d4aa6f88366f9667e65080 100644
--- a/src/main/resources/nets/subscriber-net.pnml
+++ b/src/main/resources/nets/subscriber-net.pnml
@@ -1,5 +1,8 @@
 <pnml xmlns="http://www.pnml.org/version-2009/grammar/pnml">
-    <net id="PTNET-0" type="http://www.pnml.org/version-2009/grammar/ptnet">
+    <net id="PTNET-3" type="http://www.pnml.org/version-2009/grammar/ptnet">
+        <ports>
+            <port name="sampleTopic" placeType="sub" limit="10">sub1</port>
+        </ports>
         <page id="top">
             <page id="targetPage">
                 <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
@@ -41,15 +44,13 @@
                     </initialMarking>
                 </place>
             </page>
+            <arc id="sa0" source="sub1" target="SubTransition">
+            </arc>
+            <arc id="sa1" source="SubTransition" target="sub2">
+            </arc>
         </page>
         <name>
             <text>TopicNet</text>
         </name>
-        <toolspecific tool="de.tudresden.inf.st.pnml.splitter" version="0.0.1">
-            <ports>
-                <port name="sampleTopic" placeType="pub">pub1</port>
-                <port name="sampleTopic" placeType="sub">sub1</port>
-            </ports>
-        </toolspecific>
     </net>
 </pnml>