diff --git a/build.gradle b/build.gradle
index a416f7a0e9b4af47e2e8a618d24f076d709f32f7..472fa35762201d8fb5d8fa3b08885f51d0d06c8c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -166,7 +166,7 @@ def ecoreInputFiles = [ecoreFile]
 def ecoreOutputFiles = [ecoreRelastAspect,
                         ecoreRelastGrammar]
 
-def relastInputFiles = [ecoreRelastGrammar, './src/main/jastadd/base/marking/Marking.relast', './src/main/jastadd/engine/balloonMarking/BalloonMarking.relast', './src/main/jastadd/engine/balloonMarking/BalloonExecution.relast', './src/main/jastadd/base/io/IoPN.relast', './src/main/jastadd/base/clauses/expressions.relast']
+def relastInputFiles = [ecoreRelastGrammar, './src/main/jastadd/base/marking/Marking.relast', './src/main/jastadd/engine/connection/SignalConnection.relast','./src/main/jastadd/engine/balloonMarking/BalloonMarking.relast', './src/main/jastadd/engine/balloonMarking/BalloonExecution.relast', './src/main/jastadd/base/io/IoPN.relast', './src/main/jastadd/base/clauses/expressions.relast']
 def relastOutputFiles = ['src/gen/jastadd/pnml/placeTransition.ast', 'src/gen/jastadd/pnml/placeTransition.jadd']
 
 task ecoreToRelast(type: JavaExec) {
@@ -217,11 +217,11 @@ task ragConnect(type: JavaExec) {
               'src/main/jastadd/base/io/IoPN.relast',
              'src/main/jastadd/base/clauses/expressions.relast',
             'src/main/jastadd/base/marking/Marking.relast',
+            'src/main/jastadd/engine/connection/SignalConnection.relast',
             'src/main/jastadd/engine/balloonMarking/BalloonMarking.relast',
             'src/gen/jastadd/pnml/placeTransition.relast',
-     //      'src/gen/jastadd/pnml/placeTransition.ast',
             'src/main/jastadd/engine/connection/Dineros.connect',
-            '--rootNode=PetriNet',
+            '--rootNode=InputSignalConnector',
             '--List=JastAddList',
             '--incremental=param',
             '--tracing=flush',
diff --git a/src/main/jastadd/engine/balloonMarking/BalloonMarking.jrag b/src/main/jastadd/engine/balloonMarking/BalloonMarking.jrag
index 3e251d12d6f7c6025c17884addf408510c187d30..e22de68d58f8ad47123c27d9cee9749a82bc75d7 100644
--- a/src/main/jastadd/engine/balloonMarking/BalloonMarking.jrag
+++ b/src/main/jastadd/engine/balloonMarking/BalloonMarking.jrag
@@ -1,6 +1,6 @@
 aspect BalloonMarking {
 
-    inh BalloonMarking OutputSignalPlace.balloonMarking();
+    inh BalloonMarking DinerosPlace.balloonMarking();
 
     eq PetriNetDoc.getChild().balloonMarking() = null;
 
@@ -10,56 +10,6 @@ aspect BalloonMarking {
 
     eq BalloonMarking.getPetriNet().marking() = null;
 
-    // updates automatically based on dependencies to the corresponding place
-    syn String OutputSignalBinding.outputSignalValue(){
-
-        OutputSignalPlace osp = this.containingPlace().asOutputSignalPlace();
-        BalloonMarking marking = osp.balloonMarking();
-        BalloonMarkedPlace markedPlace = marking.resolveBalloonPlaceById(this.getPlaceID());
-
-        JastAddList<EqualityOutputMapping> eomList = this.getEqualityOMListNoTransform();
-        JastAddList<ThresholdOutputMapping> tomList = this.getThresholdOMListNoTransform();
-        JastAddList<RangeOutputMapping> romList = this.getRangeOMListNoTransform();
-
-        // eom
-        int result = -1;
-            for (EqualityOutputMapping eom : eomList) {
-                if ((eom.getValue() == markedPlace.getNumBalloonMarking()) && result == -1) {
-                    result = eom.getResult();
-                break;
-            }
-        }
-
-        // tom
-        //  if (result > -1) {
-        for (ThresholdOutputMapping tom : tomList) {
-            if (tom.getValue() <= markedPlace.getNumBalloonMarking()) {
-                result = tom.getResult();
-                break;
-            }
-        }
-        //     }
-
-        // rom
-        //      if (result > -1) {
-        for (RangeOutputMapping rom : romList) {
-            if ((rom.getLowerBound() <= markedPlace.getNumBalloonMarking()) && (rom.getUpperBound() >= markedPlace.getNumBalloonMarking())) {
-                result = rom.getResult();
-                break;
-            }
-        }
-        //       }
-
-        // 0 (disabled Signal) is default
-        if (result == -1) {
-            result = 0;
-        }
-
-        String output = String.valueOf(result) + "-" + this.getOutputSignalID();
-
-        return output;
-    }
-
     public BalloonMarking PetriNet.initializeBalloonMarking() throws IOException, SAXException, ParserConfigurationException {
 
         BalloonMarking marking = new BalloonMarking();
diff --git a/src/main/jastadd/engine/connection/Dineros.connect b/src/main/jastadd/engine/connection/Dineros.connect
index 695a151c33485b6d1d1c75f3bb0bf4579ba32a84..e2d0955e7e07dffbb9173bf7299c0678e8a0d0e7 100644
--- a/src/main/jastadd/engine/connection/Dineros.connect
+++ b/src/main/jastadd/engine/connection/Dineros.connect
@@ -1,11 +1,9 @@
-receive InputSignalBinding.InputSignalValue using InputSignalTransformation;
-send OutputSignalBinding.outputSignalValue(String) using OutputSignalTransformation;
+receive SignalConnection.CurrentValue using InputSignalTransformation;
 
-// mapping definitions
-OutputSignalTransformation maps String s to String {:
-  return s;
-:}
+InputSignalTransformation maps String s to boolean {:
+  if(s.equals("true")){
+    return true;
+  }
 
-InputSignalTransformation maps String s to int {:
-  return Integer.parseInt(s);
+  return false;
 :}
diff --git a/src/main/jastadd/engine/connection/SignalConnection.relast b/src/main/jastadd/engine/connection/SignalConnection.relast
new file mode 100644
index 0000000000000000000000000000000000000000..ec4ec9781652416d66011d4d0b0acaa10ef91bab
--- /dev/null
+++ b/src/main/jastadd/engine/connection/SignalConnection.relast
@@ -0,0 +1,2 @@
+InputSignalConnector ::= SignalConnection:SignalConnection*;
+SignalConnection ::= <Id:String> <CurrentValue:Boolean>;
\ No newline at end of file
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 06bd21be0568b07eff9bac656678bc6a88662acf..f7377927a7beb0e4bd29446cea7b967fb5e18937 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
@@ -9,7 +9,6 @@ import de.tudresden.inf.st.pnml.engine.ros.DiNeRosDefaultSubscriber;
 import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode;
 import de.tudresden.inf.st.pnml.engine.testNodes.DinerosTestClientNode;
 import de.tudresden.inf.st.pnml.engine.transform.PetriNetInitializer;
-import de.tudresden.inf.st.pnml.jastadd.model.*;
 import org.ros.node.DefaultNodeMainExecutor;
 import org.ros.node.NodeConfiguration;
 import org.ros.node.NodeMainExecutor;
@@ -44,7 +43,7 @@ public class Main {
         // isTest();
 
         // osTest();
-    }
+    }/*
 
     @SuppressWarnings("unused")
     private static void osTest() throws IOException, SAXException, ParserConfigurationException {
@@ -336,5 +335,5 @@ public class Main {
 
         System.out.println("----- AFTER -----");
         System.out.println(bm.print());
-    }
+    }*/
 }
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 746925ef3463fa58cf5a4ec5d8a509795249c23d..3143ae50ade7d51743cb28a86c673fbc20264c0b 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
@@ -36,8 +36,8 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
     protected BalloonCallbackStorage callbackStorage;
     private final Map<java.lang.String, DiNeRosSubscriber> dinerosSubscribers = new HashMap<>();
     private final Map<java.lang.String, DiNeRosServer> dinerosServiceServers = new HashMap<>();
-    private final Map<InputSignalTransition, Publisher<std_msgs.String>> dinerosPublishers = new HashMap<>();
-    private final Map<InputSignalTransition, ServiceClient<StringServiceRequest, StringServiceResponse>> dinerosServiceClients = new HashMap<>();
+    private final Map<DinerosTransition, Publisher<std_msgs.String>> dinerosPublishers = new HashMap<>();
+    private final Map<DinerosTransition, ServiceClient<StringServiceRequest, StringServiceResponse>> dinerosServiceClients = new HashMap<>();
     protected ConnectedNode connectedNode;
     private boolean stopNode = false;
 
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 17b4d17ff2d20e533484ce525dbe1dd402c22625..5e87d504271ad063f349c71bce44ff63d721f519 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
@@ -6,7 +6,9 @@ import java.io.IOException;
 
 public class PetriNetInitializer {
 
-    public static void initMutualTransitionInformation(String suffix, Transition t, InputSignalTransition target) {
+    public static void initMutableTransitionInformation(String suffix, Transition t, DinerosTransition target) {
+
+        DinerosTransition dt = t.asDinerosTransition();
 
         String usedSuffix = "";
 
@@ -14,76 +16,87 @@ public class PetriNetInitializer {
             usedSuffix = "-" + suffix;
         }
 
-        if (t.asInputSignalTransition().getStaticTransitionInformation().isDefaultTransitionInformation()) {
-            TransitionInformation ti = new DefaultTransitionInformation();
-            ti.setType(t.asInputSignalTransition().getStaticTransitionInformation().getType());
-            ti.setSubNet(t.asInputSignalTransition().getStaticTransitionInformation().getSubNet() + usedSuffix);
-            ti.setLocation(t.asInputSignalTransition().getStaticTransitionInformation().getLocation());
-            ti.setInstance(t.asInputSignalTransition().getStaticTransitionInformation().getInstance());
-            target.setMutualTransitionInformation(ti);
-        } else if (t.asInputSignalTransition().getStaticTransitionInformation().isTopicTransitionInformation()) {
-            TopicTransitionInformation tri = new TopicTransitionInformation();
-            tri.setInstance(t.asInputSignalTransition().getStaticTransitionInformation().getInstance());
-            tri.setOutputLimit(t.asInputSignalTransition().getStaticTransitionInformation().getOutputLimit());
-            tri.setLocation(t.asInputSignalTransition().getStaticTransitionInformation().getLocation());
-            tri.setSubNet(t.asInputSignalTransition().getStaticTransitionInformation().getSubNet() + usedSuffix);
-            tri.setType(t.asInputSignalTransition().getStaticTransitionInformation().getType());
-            tri.setInputLimit(t.asInputSignalTransition().getStaticTransitionInformation().getInputLimit());
-            tri.setTopic(t.asInputSignalTransition().getStaticTransitionInformation().asTopicTransitionInformation().getTopic());
-            target.setMutualTransitionInformation(tri);
-        } else if (t.asInputSignalTransition().getStaticTransitionInformation().isServiceTransitionInformation()) {
-            ServiceTransitionInformation sri = new ServiceTransitionInformation();
-            sri.setInstance(t.asInputSignalTransition().getStaticTransitionInformation().getInstance());
-            sri.setOutputLimit(t.asInputSignalTransition().getStaticTransitionInformation().getOutputLimit());
-            sri.setLocation(t.asInputSignalTransition().getStaticTransitionInformation().getLocation());
-            sri.setSubNet(t.asInputSignalTransition().getStaticTransitionInformation().getSubNet() + usedSuffix);
-            sri.setType(t.asInputSignalTransition().getStaticTransitionInformation().getType());
-            sri.setInputLimit(t.asInputSignalTransition().getStaticTransitionInformation().getInputLimit());
-            sri.setServiceName(t.asInputSignalTransition().getStaticTransitionInformation().asServiceTransitionInformation().getServiceName());
-            target.setMutualTransitionInformation(sri);
+        if (t.asDinerosTransition().getStaticTransitionInformation().isSignalTransitionInformation()) {
+            SignalTransitionInformation ti = new SignalTransitionInformation();
+            ti.setSubNet(dt.getStaticTransitionInformation().getSubNet() + usedSuffix);
+            ti.setNode(dt.getStaticTransitionInformation().getNode());
+            ti.setClause(dt.getStaticTransitionInformation().asSignalTransitionInformation().getClause().deepCopy());
+            target.setMutableTransitionInformation(ti);
+        } else if (dt.getStaticTransitionInformation().isTopicTransitionInformation()) {
+            deepCopyTopicTransitionInformation(target, dt, usedSuffix);
+        } else if (dt.getStaticTransitionInformation().isServiceTransitionInformation()) {
+            deepCopyServiceTransitionInformation(target, dt, usedSuffix);
         }
     }
 
-    public static void initInputSignalConnections(PetriNet petriNet, String host, String protocol) throws IOException {
-
-        for(Transition t : petriNet.allTransitions()){
-            for(InputSignalBinding staticIsb : t.asInputSignalTransition().getStaticInputSignalBindingList()){
-                InputSignalBinding mutualIsb = new InputSignalBinding();
-                mutualIsb.setId(staticIsb.getId());
-                mutualIsb.setInputSignalValue(staticIsb.getInputSignalValue());
-                mutualIsb.setTransitionID(t.getId());
-                mutualIsb.setInputSignalID(staticIsb.getInputSignalID());
-                t.asInputSignalTransition().addMutualInputSignalBinding(mutualIsb);
-                mutualIsb.connectInputSignalValue(protocol + "://" + host + "/" + staticIsb.getInputSignalID());
-            }
+    private static void deepCopyServiceTransitionInformation(DinerosTransition target, DinerosTransition dt, String usedSuffix) {
+        ServiceTransitionInformation sri = new ServiceTransitionInformation();
+        sri.setNode(dt.getStaticTransitionInformation().getNode());
+        sri.setSubNet(dt.getStaticTransitionInformation().getSubNet() + usedSuffix);
+        sri.setServiceName(dt.getStaticTransitionInformation().asServiceTransitionInformation().getServiceName());
+
+        ServiceChannel sc = new ServiceChannel();
+        sc.setResponsePlaceId(dt.getStaticTransitionInformation().asServiceTransitionInformation().getServerChannel().getResponsePlaceId());
+        sc.setRequestPlaceId(dt.getStaticTransitionInformation().asServiceTransitionInformation().getServerChannel().getRequestPlaceId());
+        sc.setId(sc.getId());
+        sri.setServerChannel(sc);
+
+        for(ServiceChannel sci : dt.getStaticTransitionInformation().asServiceTransitionInformation().getClientChannelList()){
+            ServiceChannel newClientChannel = new ServiceChannel();
+            newClientChannel.setId(sci.getId());
+            newClientChannel.setResponsePlaceId(sci.getResponsePlaceId());
+            newClientChannel.setRequestPlaceId(sci.getRequestPlaceId());
+            sri.addClientChannel(newClientChannel);
         }
+
+        target.setMutableTransitionInformation(sri);
     }
 
-    public static void initOutputSignalConnections(PetriNet petriNet, String host, String protocol) throws IOException {
+    private static void deepCopyTopicTransitionInformation(DinerosTransition target, DinerosTransition dt, String usedSuffix) {
+        TopicTransitionInformation tri = new TopicTransitionInformation();
+        tri.setNode(dt.getStaticTransitionInformation().getNode());
+        tri.setSubNet(dt.getStaticTransitionInformation().getSubNet() + usedSuffix);
+        tri.setTopic(dt.getStaticTransitionInformation().asTopicTransitionInformation().getTopic());
+
+        for(SubscriberPort sp : dt.getStaticTransitionInformation().asTopicTransitionInformation().getSubscriberPortList()){
+            SubscriberPort newSp = new SubscriberPort();
+            newSp.setLimit(sp.getLimit());
+            newSp.setPlaceId(sp.getPlaceId());
+            tri.getSubscriberPortList().add(newSp);
+        }
 
-        for(Place p : petriNet.allPlaces()) {
+        for(PublisherPort pp : dt.getStaticTransitionInformation().asTopicTransitionInformation().getPublisherPortList()){
+            PublisherPort newPp = new PublisherPort();
+            newPp.setLimit(pp.getLimit());
+            newPp.setPlaceId(pp.getPlaceId());
+            tri.getPublisherPortList().add(newPp);
+        }
 
-            OutputSignalPlace osp = p.asOutputSignalPlace();
+        target.setMutableTransitionInformation(tri);
+    }
 
-            for (OutputSignalBinding osb : osp.getOutputSignalBindingList()) {
+    public static void initInputSignalConnections(PetriNet petriNet, String host, String protocol, InputSignalConnector inputSignalConnector) throws IOException {
 
-                osb.connectOutputSignalValue(protocol + "://" + host + "/" + osb.getOutputSignalID(), true);
+        for(String signalId : petriNet.getInputSignalDefinition().keySet()){
 
-            }
+            SignalConnection sc = new SignalConnection();
+            sc.setCurrentValue(Boolean.parseBoolean(petriNet.getInputSignalDefinition().get(signalId)));
+            sc.setId(signalId);
+            inputSignalConnector.addSignalConnection(sc);
+            sc.connectCurrentValue(protocol + "://" + host + "/" + signalId);
         }
     }
 
-    public void init(PetriNet petriNet, String host, String protocol){
+    public void init(PetriNet petriNet, String host, String protocol, InputSignalConnector isc){
 
         for(Transition t : petriNet.allTransitions()){
-            initMutualTransitionInformation(null, t, t.asInputSignalTransition());
+            initMutableTransitionInformation(null, t, t.asDinerosTransition());
         }
 
         try {
-            initOutputSignalConnections(petriNet, host, protocol);
-            initInputSignalConnections(petriNet, host, protocol);
+            initInputSignalConnections(petriNet, host, protocol, isc);
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
-}
+}
\ No newline at end of file
diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/transform/ServiceTransformer.java b/src/main/java/de/tudresden/inf/st/pnml/engine/transform/ServiceTransformer.java
index f787be30733344a33a0a9426a1bec22b43e9dc2c..77ddd72753f31d6b3229cdf76f276a162da4fd7b 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/engine/transform/ServiceTransformer.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/engine/transform/ServiceTransformer.java
@@ -9,7 +9,7 @@ import java.util.Set;
 
 public class ServiceTransformer {
 
-    public static InputSignalTransition includeServerInstance(PetriNet petriNet, String subnet, String suffix, List<String> addedElementIds){
+    public static DinerosTransition includeServerInstance(PetriNet petriNet, String subnet, String suffix, List<String> addedElementIds){
 
         Page topPage = petriNet.getPage(0);
         InputSignalTransition serverInstanceInputTransition = null;
@@ -65,7 +65,7 @@ public class ServiceTransformer {
         petriNet.flushTreeCache();
 
         for (Transition t : getTransitionsBySubnet(petriNet, subnet)) {
-            InputSignalTransition copy = getInputSignalTransition();
+            DinerosTransition copy = getInputSignalTransition();
             copy.setId(t.getId() + "-" + suffix);
             copy.getName().setText(t.getName().getText());
             copy.setMutualInputSignalBindingList(t.asInputSignalTransition().getMutualInputSignalBindingList().treeCopy());
@@ -76,7 +76,7 @@ public class ServiceTransformer {
                 copy.setNodeGraphics(t.getNodeGraphics().treeCopy());
             }
 
-            PetriNetInitializer.initMutualTransitionInformation(suffix, t, copy);
+            PetriNetInitializer.initMutableTransitionInformation(suffix, t, copy);
 
             topPage.addObject(copy);
             addedElementIds.add(copy.getId());