diff --git a/build.gradle b/build.gradle
index 4f8a10197f3c80bba9cd79f148c31900ca9390e6..336f5bbfa8cc158893aa58864f95cdb8e4fa8e5a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -56,5 +56,10 @@ task fatJar(type: Jar) {
         configurations.runtimeClasspath.collect {it.isDirectory() ? it : zipTree(it) }
     }
 
-    manifest.attributes "Main-Class": "${mainClassName}"
+    manifest.attributes "Main-Class": "de.tudresden.inf.st.sample.Main"
+}
+
+run {
+    mainClassName = 'de.tudresden.inf.st.sample.Main'
+    standardInput = System.in
 }
diff --git a/libs/pnml-relast-engine-fatjar-0.1.jar b/libs/pnml-relast-engine-fatjar-0.1.jar
index 06f20b04c51a4af521214389dc8ee0a206229fab..d3af3f2fe8490694a105ed70a5e35335b92b5293 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 ec7db71247cd951208b8d763291961158ed33dfe..33c34860845168e089db8598462fd42faaae5476 100644
--- a/src/main/java/de/tudresden/inf/st/sample/Main.java
+++ b/src/main/java/de/tudresden/inf/st/sample/Main.java
@@ -1,5 +1,6 @@
 package de.tudresden.inf.st.sample;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import de.tudresden.inf.st.pnml.engine.execution.TransitionCallback;
 import de.tudresden.inf.st.pnml.engine.execution.TransitionCallbackService;
 import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode;
@@ -8,6 +9,7 @@ import de.tudresden.inf.st.pnml.jastadd.model.BalloonCallbackStorage;
 import de.tudresden.inf.st.pnml.jastadd.model.BalloonMarking;
 import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
 import de.tudresden.inf.st.pnml.jastadd.model.PnmlParser;
+import de.tudresden.inf.st.sample.balloon.Token;
 import de.tudresden.inf.st.sample.callback.AbstractNetCallback;
 import de.tudresden.inf.st.sample.callback.CallbackMapper;
 import de.tudresden.inf.st.sample.communication.Node2Subscriber1;
@@ -41,13 +43,25 @@ public class Main {
 
     public static void main(java.lang.String[] args) throws IOException, ParserConfigurationException, SAXException {
 
+        /*ObjectMapper mapper = new ObjectMapper();
+
+        Token t = new Token();
+        t.setField("Test");
+        t.getFieldList().add("TestListElement");
+
+        System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(t));
+
+        if(t != null){
+            return;
+        }*/
+
         /*
          * <Generated>
          * Petri Net base data initialization
          */
 
         // actual petri net paths are generated
-        String[] petriNetPaths = {"/src/main/resources/nets/publisher-net.pnml", "/src/main/resources/nets/subscriber-net.pnml"};
+        String[] petriNetPaths = {"src/main/resources/nets/publisher-net.pnml", "src/main/resources/nets/subscriber-net.pnml"};
         List<PetriNet> petriNets = new ArrayList<>();
         Map<String, BalloonMarking> markings = new HashMap<>();
         Map<String, BalloonCallbackStorage> callbackStorages = new HashMap<>();
@@ -75,13 +89,17 @@ public class Main {
         Map<String, List<AbstractNetCallback>> callbackMap1 = CallbackMapper.initCallbacksForNode1(petriNets.get(0));
 
         for (Map.Entry<String, List<AbstractNetCallback>> entry : callbackMap1.entrySet()) {
-            transitionCallbackService.registerCallback(petriNets.get(0), entry.getKey(), (TransitionCallback) entry.getValue());
+            for(AbstractNetCallback anc : entry.getValue()){
+                transitionCallbackService.registerCallback(petriNets.get(0), entry.getKey(), anc);
+            }
         }
 
         Map<String, List<AbstractNetCallback>> callbackMap2 = CallbackMapper.initCallbacksForNode2(petriNets.get(1));
 
         for (Map.Entry<String, List<AbstractNetCallback>> entry : callbackMap2.entrySet()) {
-            transitionCallbackService.registerCallback(petriNets.get(1), entry.getKey(), (TransitionCallback) entry.getValue());
+            for(AbstractNetCallback anc : entry.getValue()){
+                transitionCallbackService.registerCallback(petriNets.get(1), entry.getKey(), anc);
+            }
         }
 
         /*
diff --git a/src/main/java/de/tudresden/inf/st/sample/callback/CallbackMapper.java b/src/main/java/de/tudresden/inf/st/sample/callback/CallbackMapper.java
index 3f4a28f777f234c100ae7593b37f7625ec59b884..4f96aae1de5d00f25d49760cf5830d7413533780 100644
--- a/src/main/java/de/tudresden/inf/st/sample/callback/CallbackMapper.java
+++ b/src/main/java/de/tudresden/inf/st/sample/callback/CallbackMapper.java
@@ -1,7 +1,11 @@
 package de.tudresden.inf.st.sample.callback;
 
+import de.tudresden.inf.st.pnml.engine.execution.DefaultTransitionCallback;
+import de.tudresden.inf.st.pnml.engine.execution.TransitionCallback;
 import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
+import de.tudresden.inf.st.pnml.jastadd.model.Transition;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -18,6 +22,16 @@ public class CallbackMapper {
 
         // TODO: implementation by user
 
+        SampleNetCallback callback = new SampleNetCallback("default_cb", 1, new ArrayList<>());
+
+        for(Transition t : petriNet.allTransitions()){
+            if(t.asInputSignalTransition().getStaticTransitionInformation().isDefaultTransitionInformation()){
+                List<AbstractNetCallback> cbList = new ArrayList<>();
+                cbList.add(callback);
+                callbackMap.put(t.getId(), cbList);
+            }
+        }
+
         return callbackMap;
     }
 
@@ -28,6 +42,16 @@ public class CallbackMapper {
 
         // TODO: implementation by user
 
+        SampleNetCallback callback = new SampleNetCallback("default_cb", 1, new ArrayList<>());
+
+        for(Transition t : petriNet.allTransitions()){
+            if(t.asInputSignalTransition().getStaticTransitionInformation().isDefaultTransitionInformation()){
+                List<AbstractNetCallback> cbList = new ArrayList<>();
+                cbList.add(callback);
+                callbackMap.put(t.getId(), cbList);
+            }
+        }
+
         return callbackMap;
     }
 }
diff --git a/src/main/java/de/tudresden/inf/st/sample/callback/SampleNetCallback.java b/src/main/java/de/tudresden/inf/st/sample/callback/SampleNetCallback.java
new file mode 100644
index 0000000000000000000000000000000000000000..9bcd27ed1e58f9fbc5e243e2071b0d08a75c0c0e
--- /dev/null
+++ b/src/main/java/de/tudresden/inf/st/sample/callback/SampleNetCallback.java
@@ -0,0 +1,18 @@
+package de.tudresden.inf.st.sample.callback;
+
+import de.tudresden.inf.st.sample.balloon.Token;
+
+import java.util.List;
+
+public class SampleNetCallback extends AbstractNetCallback{
+
+    public SampleNetCallback(String id, int priority, List<String> params) {
+        super(id, priority, params);
+    }
+
+    @Override
+    public void processTokenCallback(List<Token> tokens) {
+        System.out.println("Executing callback: " + getId());
+        tokens.subList(1, tokens.size()).clear();
+    }
+}
diff --git a/src/main/java/de/tudresden/inf/st/sample/communication/Node2Subscriber1.java b/src/main/java/de/tudresden/inf/st/sample/communication/Node2Subscriber1.java
index 4a912da4ef7cff26f00f06ab63456aae86e23146..247e1500c40d439d64ccefbdf40451365569d718 100644
--- a/src/main/java/de/tudresden/inf/st/sample/communication/Node2Subscriber1.java
+++ b/src/main/java/de/tudresden/inf/st/sample/communication/Node2Subscriber1.java
@@ -6,12 +6,23 @@ import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
 
 public class Node2Subscriber1 extends AbstractDinerosSubscriber {
 
-
     @Override
     public boolean subscribe(BalloonMarking balloonMarking, BalloonCallbackStorage balloonCallbackStorage, PetriNet petriNet, String subnet) {
 
         // TODO: Implementation by user
 
-        return false;
+        System.out.println("Firing transition t2");
+        balloonMarking.fireTransition(petriNet.getTransitionById("t2"), balloonCallbackStorage, true);
+
+        try {
+            Thread.sleep(1000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+
+        System.out.println("Firing transition t3");
+        balloonMarking.fireTransition(petriNet.getTransitionById("t3"), balloonCallbackStorage, true);
+
+        return true;
     }
 }
diff --git a/src/main/java/de/tudresden/inf/st/sample/nodes/Node1.java b/src/main/java/de/tudresden/inf/st/sample/nodes/Node1.java
index 983ec8f4ea52b53441f21971b15317ff3187a9e2..8362675df3ae0c48f6eeb3e93bfb7e3106129005 100644
--- a/src/main/java/de/tudresden/inf/st/sample/nodes/Node1.java
+++ b/src/main/java/de/tudresden/inf/st/sample/nodes/Node1.java
@@ -4,7 +4,6 @@ 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.BalloonMarking;
 import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
-import org.ros.concurrent.CancellableLoop;
 
 /**
  * <Generated>
@@ -22,14 +21,19 @@ public class Node1 extends DiNeRosNode {
     @Override
     protected void nodeLoop() {
 
-        this.connectedNode.executeCancellableLoop(new CancellableLoop() {
 
-            @Override
-            protected void loop() throws InterruptedException {
+        // TODO: Implementation by user
 
-                // TODO: Implementation by user
+        try {
+            Thread.sleep(2000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
 
-            }
-        });
+        System.out.println("Firing publisher transition");
+        firePublisherTransition(petriNet.getTransitionById("channelTransition-publisher-0").asInputSignalTransition());
+
+        stop();
     }
+
 }
\ No newline at end of file
diff --git a/src/main/java/de/tudresden/inf/st/sample/nodes/Node2.java b/src/main/java/de/tudresden/inf/st/sample/nodes/Node2.java
index cd647e5ab38f29b280264711be68ef92d6342c68..5d29123ac9cc15d410f7b7ca4734668abbf6205a 100644
--- a/src/main/java/de/tudresden/inf/st/sample/nodes/Node2.java
+++ b/src/main/java/de/tudresden/inf/st/sample/nodes/Node2.java
@@ -4,6 +4,7 @@ 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.BalloonMarking;
 import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
+import org.ros.concurrent.CancellableLoop;
 
 /**
  * <Generated>
@@ -17,4 +18,11 @@ public class Node2 extends DiNeRosNode {
     public Node2(String nodeName, PetriNet petriNet, BalloonMarking marking, BalloonCallbackStorage callbackStorage) {
         super(nodeName, petriNet, marking, callbackStorage);
     }
+
+    @Override
+    protected void nodeLoop() {
+
+        // TODO: Implementation by user
+
+    }
 }
diff --git a/src/main/resources/nets/publisher-net.pnml b/src/main/resources/nets/publisher-net.pnml
index 2d551b03eeecab649c31619fd8ac18f9e09644b9..96dd206a91f563ae8e70b9e0d2493253bddd502f 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="n-E2D0-BCF46-0" type="http://www.pnml.org/version-2009/grammar/ptnet">
+    <net id="pub-net-1" type="http://www.pnml.org/version-2009/grammar/ptnet">
         <page id="top">
             <page id="channelPage">
                 <place id="channelInPlace">
@@ -7,13 +7,16 @@
                         <text>channelInPlace</text>
                     </name>
                     <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
-
-
+                        <balloonMarking>
+                            <tokens>
+                                <token> { "field" : "Test", "fieldList" : [ "TestListElement" ] } </token>
+                            </tokens>
+                        </balloonMarking>
                         <location>loc2</location>
                         <subnet>locA</subnet>
                     </toolspecific>
                     <initialMarking>
-                        <text>0</text>
+                        <text>1</text>
                     </initialMarking>
                 </place>
                 <transition id="channelTransition-publisher-0">
diff --git a/src/main/resources/nets/subscriber-net.pnml b/src/main/resources/nets/subscriber-net.pnml
index 129a2ca56e4aa872397b15284ba694324d8c581f..f463ea0a1ad38ed1be507183bfa1201a5439fae6 100644
--- a/src/main/resources/nets/subscriber-net.pnml
+++ b/src/main/resources/nets/subscriber-net.pnml
@@ -1,5 +1,5 @@
 <pnml xmlns="http://www.pnml.org/version-2009/grammar/pnml">
-    <net id="n-E2D0-BCF46-0" type="http://www.pnml.org/version-2009/grammar/ptnet">
+    <net id="sub-net-1" type="http://www.pnml.org/version-2009/grammar/ptnet">
         <page id="top">
             <page id="targetPage">
                 <place id="outRefPlace">
@@ -7,8 +7,19 @@
                         <text>outRefPlace</text>
                     </name>
                     <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
+                        <location>loc3</location>
+                        <subnet>locB</subnet>
+                    </toolspecific>
+                    <initialMarking>
+                        <text>0</text>
+                    </initialMarking>
+                </place>
 
-
+                <place id="p2">
+                    <name>
+                        <text>p2</text>
+                    </name>
+                    <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
                         <location>loc3</location>
                         <subnet>locB</subnet>
                     </toolspecific>
@@ -16,6 +27,34 @@
                         <text>0</text>
                     </initialMarking>
                 </place>
+
+                <transition id="t2">
+                    <name>
+                        <text>t2</text>
+                    </name>
+                    <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
+                        <location>loc3</location>
+                        <subnet>locB</subnet>
+                    </toolspecific>
+                </transition>
+
+                <transition id="t3">
+                    <name>
+                        <text>t3</text>
+                    </name>
+                    <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
+                        <location>loc3</location>
+                        <subnet>locB</subnet>
+                    </toolspecific>
+                </transition>
+
+                <arc id="a3" source="outRefPlace" target="t2">
+                </arc>
+                <arc id="a4" source="t2" target="p2">
+                </arc>
+                <arc id="a5" source="p2" target="t3">
+                </arc>
+
             </page>
             <page id="channelPage">
                 <transition id="channelTransition-subscriber-0">