diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java b/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java
index 57767c62c7097f6d2a9ad8c2850764991c25ebe9..2e87c01448e07dcf4a4f1469d43b37f43c53207e 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java
@@ -72,7 +72,8 @@ public class Main {
 
             BalloonMarkedPlace bmp = bm.resolveBalloonPlace(p);
             bmp.addBalloonMarking(bt);
-        //    petriNet.flushTreeCache();
+            //bmp.addBalloonMarking(bt);
+            petriNet.flushTreeCache();
 
             for ( OutputSignalBinding b : p.asOutputSignalPlace().getOutputSignalBindingList()){
                 System.out.println("New Num: " + bm.resolveBalloonPlace(p).getNumBalloonMarking());
diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/execution/TransitionCallbackService.java b/src/main/java/de/tudresden/inf/st/pnml/engine/execution/TransitionCallbackService.java
new file mode 100644
index 0000000000000000000000000000000000000000..a68f3a7427bb81f235a178eff1685f6905d70cec
--- /dev/null
+++ b/src/main/java/de/tudresden/inf/st/pnml/engine/execution/TransitionCallbackService.java
@@ -0,0 +1,53 @@
+package de.tudresden.inf.st.pnml.engine.execution;
+
+import de.tudresden.inf.st.pnml.jastadd.model.BalloonCallbackStorage;
+import de.tudresden.inf.st.pnml.jastadd.model.BalloonTransition;
+import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TransitionCallbackService {
+
+    public static TransitionCallbackService INSTANCE = null;
+
+    private BalloonCallbackStorage balloonCallbackStorage = null;
+
+    private TransitionCallbackService() {}
+
+    public static TransitionCallbackService getInstance() {
+        if(INSTANCE == null) {
+            INSTANCE = new TransitionCallbackService();
+        }
+
+        return INSTANCE;
+    }
+
+    public void init(BalloonCallbackStorage balloonCallbackStorage) {
+        this.balloonCallbackStorage = balloonCallbackStorage;
+    }
+
+    public void registerCallback(PetriNet petriNet, String transitionId, TransitionCallback transitionCallback){
+
+        if(balloonCallbackStorage == null){
+            return;
+        }
+
+        BalloonTransition balloonTransition = balloonCallbackStorage.resolveBalloonTransition(petriNet.getTransitionById(transitionId));
+        List<TransitionCallback> transitionCallbacks = new ArrayList<>();
+        transitionCallbacks.add(transitionCallback);
+        registerCallback(petriNet, transitionId, transitionCallbacks);
+
+    }
+
+    public void registerCallback(PetriNet petriNet, String transitionId, List<TransitionCallback> transitionCallbacks){
+
+        if(balloonCallbackStorage == null){
+            return;
+        }
+
+        BalloonTransition balloonTransition = balloonCallbackStorage.resolveBalloonTransition(petriNet.getTransitionById(transitionId));
+        balloonTransition.setBalloonCallbacks(transitionCallbacks);
+
+    }
+}