diff --git a/src/main/jastadd/flatter/rewrites/ServiceRewrites.jadd b/src/main/jastadd/flatter/rewrites/ServiceRewrites.jadd
new file mode 100644
index 0000000000000000000000000000000000000000..1702d88e9bb1acc15e0914b1a564e40953ed5b73
--- /dev/null
+++ b/src/main/jastadd/flatter/rewrites/ServiceRewrites.jadd
@@ -0,0 +1,33 @@
+aspect ServiceRewrites {
+
+     rewrite Page {
+     when ( getType() != null && getType().equals(PnmlConstants.PAGE_TYPE_SERVER) && !getId().endsWith(PnmlConstants.PAGE_SERVER_INSTANCE_SUFFIX) )
+        to Page {
+
+              int serverCapacity = 0;
+              for(DinerosTransition dt : petriNet().allDinerosTransitions()){
+                if(dt.getStaticTransitionInformation().isServiceTransitionInformation()){
+                  serverCapacity = dt.getStaticTransitionInformation().asServiceTransitionInformation().getServerChannel().getCapacity();
+                  break;
+                }
+              }
+
+              Page containerPage = new Page();
+              containerPage.setId(this.getId() + "-" + PnmlConstants.PAGE_SERVER_CONTAINER_SUFFIX);
+
+              for( int i = 0; i < serverCapacity; i++){
+                Page serverInstancePage = this.treeCopyNoTransform();
+                serverInstancePage.setId(serverInstancePage.getId() + "-" + i + "-" + PnmlConstants.PAGE_SERVER_INSTANCE_SUFFIX);
+
+                for(PnObject pnObject : serverInstancePage.getObjectList()){
+                  pnObject.setId(pnObject.getId() + "-" + i + "-" + PnmlConstants.PAGE_SERVER_INSTANCE_SUFFIX);
+                  pnObject.getName().setText(pnObject.getId());
+                }
+
+                containerPage.addObject(serverInstancePage);
+              }
+
+              return containerPage;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/jastadd/flatter/rewrites/SignalRewrites.jadd b/src/main/jastadd/flatter/rewrites/SignalRewrites.jadd
new file mode 100644
index 0000000000000000000000000000000000000000..497b7487343da42906f06f918458a258e38b2809
--- /dev/null
+++ b/src/main/jastadd/flatter/rewrites/SignalRewrites.jadd
@@ -0,0 +1,4 @@
+aspect SignalRewrites {
+
+
+}
\ No newline at end of file
diff --git a/src/main/jastadd/flatter/rewrites/TopicRewrites.jadd b/src/main/jastadd/flatter/rewrites/TopicRewrites.jadd
new file mode 100644
index 0000000000000000000000000000000000000000..ab6613b587b4530e486e3b0ff0e80edf871424f9
--- /dev/null
+++ b/src/main/jastadd/flatter/rewrites/TopicRewrites.jadd
@@ -0,0 +1,3 @@
+aspect TopicRewrites {
+
+}
\ No newline at end of file
diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/Main.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/Main.java
index 495eb3e298925d2389e385ddff5acd3a486956e4..8af6b0f61e0627c92b1234a9085faf8a5db8973c 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/flatter/Main.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/Main.java
@@ -4,9 +4,6 @@ import de.tudresden.inf.st.pnml.flatter.config.ConfigReader;
 import de.tudresden.inf.st.pnml.flatter.tina.KtzioProxy;
 import de.tudresden.inf.st.pnml.flatter.tina.SiftProxy;
 import de.tudresden.inf.st.pnml.flatter.tina.TinaProxy;
-import de.tudresden.inf.st.pnml.flatter.transform.ChannelFlatter;
-import de.tudresden.inf.st.pnml.flatter.transform.ReferenceFlatter;
-import de.tudresden.inf.st.pnml.flatter.transform.SignalFlatter;
 import de.tudresden.inf.st.pnml.jastadd.model.*;
 import de.tudresden.inf.st.pnml.jastadd.model.PnmlParser;
 import fr.lip6.move.pnml.framework.utils.exception.InvalidIDException;
@@ -21,23 +18,23 @@ public class Main {
 
     public static void main(String[] args) throws IOException, InvalidIDException, InterruptedException {
 
-        String configPath = (args.length > 1) ? args[1] : null;
+       /* String configPath = (args.length > 1) ? args[1] : null;
         String pnmlPath = (args.length > 0) ? args[0] : null;
 
         if (pnmlPath == null || configPath == null) {
             System.out.println("No model found on given input path.");
             return;
-        }
+        }*/
 
         // parse the global not flatted petri net
-        // pnmlPath = "../pnml-relast-nets/src/main/resources/useCaseNets/Paper/RoboticUseCase-AllLayers.pnml";
+        String pnmlPath = "/home/sebastian/git/dineros/dineros-v2/dineros/pnml-relast-base/src/main/resources/nets/TestNet2.pnml";
         // configPath = "src/main/config/siftConfig.json";
         PetriNet petriNet = PnmlParser.parsePnml(pnmlPath).get(0);
 
         // read config for analyzer from file
-        ConfigReader cr = new ConfigReader(configPath);
+    /*    ConfigReader cr = new ConfigReader(configPath);
         String[] tinaConfig = cr.getTinaConfigParams();
-        String[] siftConfig = cr.getSiftConfigParams();
+        String[] siftConfig = cr.getSiftConfigParams();*/
 
         // make sure that we have a valid marking
         System.out.println("[FLATTER] Checking marking.");
@@ -50,54 +47,53 @@ public class Main {
             }
         }
 
+        /*
         // remove references / pages
         System.out.println("[FLATTER] Breaking references and pages.");
         ReferenceFlatter.flatReferencesAndPages(petriNet);
-        // printNet(petriNet);
 
         // flat topic publishers / subscribers to instance based semantics
         System.out.println("[FLATTER] Breaking down topic channels.");
         PetriNet topicFlattedPetriNet = ChannelFlatter.flatTopicChannels(petriNet);
-        // printNet(petriNet);
 
         // flat service clients / servers to instance based semantics
         System.out.println("[FLATTER] Breaking down service channels.");
         PetriNet serviceFlattedPetriNet = ChannelFlatter.flatServiceChannels(topicFlattedPetriNet);
-        // printNet(serviceFlattedPetriNet);
 
         // flat input signals
         System.out.println("[FLATTER] Breaking down signals.");
         PetriNet signalFlattedPetriNet = SignalFlatter.flatSignals(serviceFlattedPetriNet);
-        printNet(signalFlattedPetriNet);
+        printNet(signalFlattedPetriNet);*/
 
         // export flatted net to pnml
+        printNet(petriNet, true, false);
         System.out.println("[FLATTER] Exporting to pnml.");
         String exportId = UUID.randomUUID().toString();
         String pnmlExportPath = PnmlExporter.serializeToPnmlFile(petriNet, "flatted-" + exportId);
 
         //  convert and add inhibitor arcs
-        System.out.println("[FLATTER] Converting to net format.");
+      /*  System.out.println("[FLATTER] Converting to net format.");
         NdrioProxy ndrioProxy = new NdrioProxy();
         String homeDirectory = System.getProperty("user.dir");
         String fid = UUID.randomUUID().toString();
-        String ndrioTargetPath = homeDirectory + "/temp/net/" + fid + "flatted-" + exportId + ".net";
+        String ndrioTargetPath = homeDirectory + "/temp/net/" + fid + "flatted-" + exportId + ".net";*/
 
         // resolve inhibitor arcs
-        System.out.println("[FLATTER] Including inhibitor arcs into net format.");
+    /*    System.out.println("[FLATTER] Including inhibitor arcs into net format.");
         String inhibitorTargetPath = homeDirectory + "/temp/net/" + fid + "flatted-inh-" + exportId + ".net";
         ndrioProxy.pnml2net(pnmlExportPath, ndrioTargetPath);
-        ndrioProxy.includeInhibitorArcs(petriNet, ndrioTargetPath, inhibitorTargetPath);
+        ndrioProxy.includeInhibitorArcs(petriNet, ndrioTargetPath, inhibitorTargetPath);*/
 
         // insert into tina
-        if (tinaConfig.length > 1) {
+      /*  if (tinaConfig.length > 1) {
             System.out.println("[FLATTER] Inserting into tina.");
             TinaProxy tinaProxy = new TinaProxy();
             String tinaTargetPath = homeDirectory + "/temp/tina/" + "tina-result-" + exportId + ".txt";
             tinaProxy.analyzePetriNet(inhibitorTargetPath, tinaTargetPath, tinaConfig);
-        }
+        }*/
 
         // insert into sift
-        if (siftConfig.length > 1) {
+     /*   if (siftConfig.length > 1) {
             System.out.println("[FLATTER] Inserting into sift.");
             SiftProxy siftProxy = new SiftProxy();
             String siftTargetPath = homeDirectory + "/temp/sift/" + "sift-result-" + exportId + ".ktz";
@@ -107,7 +103,7 @@ public class Main {
             KtzioProxy ktzioProxy = new KtzioProxy();
             String ktzioPath = homeDirectory + "/temp/sift/" + "sift-result-converted-" + exportId + ".txt";
             ktzioProxy.convertBinaryToText(siftTargetPath, ktzioPath);
-        }
+        }*/
 
         // insert into struct
         // TODO in v2
@@ -122,13 +118,13 @@ public class Main {
 
     }
 
-    public static void printNet(PetriNet petriNet) {
+    public static void printNet(PetriNet petriNet, boolean withArcs, boolean withToolSpecifics) {
 
         System.out.println("--------------- STRUCTURE ---------------");
         System.out.println("----------------- PLACES ----------------");
 
         for (Place p : petriNet.allPlaces()) {
-            System.out.println("Place " + p.asOutputSignalPlace().getId() + " -- " + p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet());
+            System.out.println("Place " + p.asDinerosPlace().getId() + " -- " + p.asDinerosPlace().getStaticPlaceInformation().getSubNet());
             if (p.getInitialMarking() != null) {
                 System.out.println("--- Marking: " + p.getInitialMarking().getText());
             } else {
@@ -146,31 +142,24 @@ public class Main {
 
         for (Transition t : petriNet.allTransitions()) {
 
-            if (t.asInputSignalTransition().getStaticTransitionInformation().isServiceTransitionInformation()) {
-                System.out.println("--- Transition: " + t.getId() + " subnet: " + t.asInputSignalTransition().getStaticTransitionInformation().getSubNet()
-                        + " service: " + t.asInputSignalTransition().getStaticTransitionInformation().asServiceTransitionInformation().getServiceName() + " ---------");
-            } else if (t.asInputSignalTransition().getStaticTransitionInformation().isTopicTransitionInformation()) {
-                System.out.println("--- Transition: " + t.getId() + " subnet: " + t.asInputSignalTransition().getStaticTransitionInformation().getSubNet()
-                        + " topic: " + t.asInputSignalTransition().getStaticTransitionInformation().asTopicTransitionInformation().getTopic() + " ---------");
+            if (t.asDinerosTransition().getStaticTransitionInformation().isServiceTransitionInformation()) {
+                System.out.println("--- Transition: " + t.getId() + " subnet: " + t.asDinerosTransition().getStaticTransitionInformation().getSubNet()
+                        + " service: " + t.asDinerosTransition().getStaticTransitionInformation().asServiceTransitionInformation().getServiceName() + " ---------");
+            } else if (t.asDinerosTransition().getStaticTransitionInformation().isTopicTransitionInformation()) {
+                System.out.println("--- Transition: " + t.getId() + " subnet: " + t.asDinerosTransition().getStaticTransitionInformation().getSubNet()
+                        + " topic: " + t.asDinerosTransition().getStaticTransitionInformation().asTopicTransitionInformation().getTopic() + " ---------");
             } else {
-                System.out.println("--- Transition: " + t.getId() + " subnet: " + t.asInputSignalTransition().getStaticTransitionInformation().getSubNet() + " --- name: " + t.getName().getText());
+                System.out.println("--- Transition: " + t.getId() + " subnet: " + t.asDinerosTransition().getStaticTransitionInformation().getSubNet() + " --- name: " + t.getName().getText());
             }
 
-            //     for(Arc a : t.getInArcs()){
-            //      System.out.println("incomming arc: " + a.getId());
-            //     }
-            //      if(t.asInputSignalTransition().getInputSignalClause() != null && t.asInputSignalTransition().getInputSignalClause().getNumChild() > 0){
-            //          System.out.println("------ Clause: " + t.asInputSignalTransition().getInputSignalClause().printExp());
-            //      }
+            for (Place p : t.asDinerosTransition().incomingPlaces()) {
 
-            for (Place p : t.asInputSignalTransition().incomingPlaces()) {
-
-                System.out.println("------ Inputplace:  " + p.getId() + " subnet: " + p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet() + " ---------");
+                System.out.println("------ Inputplace:  " + p.getId() + " subnet: " + p.asDinerosPlace().getStaticPlaceInformation().getSubNet() + " ---------");
             }
 
-            for (Place p : t.asInputSignalTransition().outgoingPlaces()) {
+            for (Place p : t.asDinerosTransition().outgoingPlaces()) {
 
-                System.out.println("------ Outputplace: " + p.getId() + " subnet: " + p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet() + " ---------");
+                System.out.println("------ Outputplace: " + p.getId() + " subnet: " + p.asDinerosPlace().getStaticPlaceInformation().getSubNet() + " ---------");
             }
         }
 
@@ -186,39 +175,36 @@ public class Main {
             System.out.println("--- RefTransition: " + rt.getId());
         }
 
-        System.out.println("----------------- ARCS -----------------");
+        if (withArcs) {
+            System.out.println("----------------- ARCS -----------------");
 
-        for (Arc a : petriNet.allArcs()) {
-            System.out.println("Arc: " + a.getId() + " -- source: " + a.getSource().getId() + " -- target: " + a.getTarget().getId());
+            for (Arc a : petriNet.allArcs()) {
+                System.out.println("Arc: " + a.getId() + " -- source: " + a.getSource().getId() + " -- target: " + a.getTarget().getId());
+            }
         }
 
+
         System.out.println("--------------- T SIGNALS (STATIC)---------------");
 
         for (Transition t : petriNet.allTransitions()) {
-            InputSignalTransition ist = t.asInputSignalTransition();
+            DinerosTransition ist = t.asDinerosTransition();
 
-            if (ist != null && ist.getStaticInputSignalBindingList() != null) {
-                ist.getStaticInputSignalBindingList().forEach(inputSignalBinding -> System.out.println(" (" + t.getName().getText() + ") Signal: " + inputSignalBinding.getInputSignalID()));
+            if (ist != null && ist.getMutableTransitionInformation() == null) {
+                if(ist.getStaticTransitionInformation().isSignalTransitionInformation()){
+                    System.out.println(ist.getStaticTransitionInformation().asSignalTransitionInformation().getClause().printClause());
+                }
             }
         }
 
-        System.out.println("--------------- T SIGNALS (MUTUAL)---------------");
-
-        for (Transition t : petriNet.allTransitions()) {
-            InputSignalTransition ist = t.asInputSignalTransition();
+        if(withToolSpecifics) {
+            System.out.println("--------------- TOOL SPECIFIC ---------------");
 
-            if (ist != null && ist.getMutualInputSignalBindingList() != null) {
-                ist.getMutualInputSignalBindingList().forEach(inputSignalBinding -> System.out.println(" (" + t.getName().getText() + ") Signal: " + inputSignalBinding.getInputSignalID()));
+            for (Transition t : petriNet.allTransitions()) {
+                DinerosTransition ist = t.asDinerosTransition();
+                if (ist != null && ist.getNumToolspecific() > 0) {
+                    System.out.println("ToolSpecific: (" + ist.getName().getText() + ") " + ist.getToolspecific(0).getFormattedXMLBuffer().toString());
+                }
             }
         }
-
-        //     System.out.println("--------------- TOOL SPECIFIC ---------------");
-
-       /* for (Transition t : petriNet.allTransitions()) {
-            InputSignalTransition ist = t.asInputSignalTransition();
-            if (ist != null && ist.getNumToolspecific() > 0) {
-                 System.out.println("ToolSpecific: (" + ist.getName().getText() + ") " + ist.getToolspecific(0).getFormattedXMLBuffer().toString());
-            }
-        }*/
     }
 }
\ No newline at end of file
diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/template/PrimitiveTemplates.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/template/PrimitiveTemplates.java
index 454ed9b8235cba59632bdb4fc634426acd629a48..7190bb7314dda1ae64fe1ec1b2d5ebe2e1ac902b 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/flatter/template/PrimitiveTemplates.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/template/PrimitiveTemplates.java
@@ -4,26 +4,26 @@ import de.tudresden.inf.st.pnml.jastadd.model.*;
 
 public class PrimitiveTemplates extends PnmlTemplate{
 
-    public static InputSignalTransition getInputSignalTransition(){
+    public static DinerosTransition getDinerosTransition(){
 
-        PetriNet templateNet = PnmlParser.parsePnml(homeDirectory + "/src/main/resources/elements/InputSignalTransition.pnml").get(0);
+        PetriNet templateNet = PnmlParser.parsePnml(homeDirectory + "/src/main/resources/elements/DinerosTransition.pnml").get(0);
 
         for(Transition t : templateNet.allTransitions()){
-            if(t.getId().equals("InputSignalTransition")){
-                return t.asInputSignalTransition();
+            if(t.getId().equals("DinerosTransition")){
+                return t.asDinerosTransition();
             }
         }
 
         return null;
     }
 
-    public static OutputSignalPlace getOutputSignalPlace(){
+    public static DinerosPlace getDinerosPlace(){
 
-        PetriNet templateNet = PnmlParser.parsePnml(homeDirectory + "/src/main/resources/elements/OutputSignalPlace.pnml").get(0);
+        PetriNet templateNet = PnmlParser.parsePnml(homeDirectory + "/src/main/resources/elements/DinerosPlace.pnml").get(0);
 
         for(Place p : templateNet.allPlaces()){
-            if(p.getId().equals("OutputSignalPlace")){
-                return p.asOutputSignalPlace();
+            if(p.getId().equals("DinerosPlace")){
+                return p.asDinerosPlace();
             }
         }
 
diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/ChannelFlatter.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/ChannelFlatter.java
index e9cf70a4152588e3ba25a59d7ddc4d010b407255..14141ab5855a7411828ce3ae26831046fdf8bc3a 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/ChannelFlatter.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/ChannelFlatter.java
@@ -1,8 +1,5 @@
 package de.tudresden.inf.st.pnml.flatter.transform;
 
-import de.tudresden.inf.st.pnml.base.constants.PnmlConstants;
-import de.tudresden.inf.st.pnml.base.data.CommunicatorInformation;
-import de.tudresden.inf.st.pnml.flatter.template.*;
 import de.tudresden.inf.st.pnml.jastadd.model.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -16,740 +13,6 @@ public class ChannelFlatter extends Flatter {
 
     private static final Logger logger = LoggerFactory.getLogger(ChannelFlatter.class);
 
-    public static PetriNet flatTopicChannels(PetriNet petriNet) {
-
-        int publisherCount = 0;
-        int dispatcherCount = 0;
-        int callbackCount = 0;
-        int channelCount = 0;
-
-        List<Arc> arcsToRemove = new ArrayList<>();
-        List<Transition> transitionsToRemove = new ArrayList<>();
-
-        // process topic transitions
-        for (Transition t : petriNet.allTransitions()) {
-
-            if (t.asInputSignalTransition().getStaticTransitionInformation().isTopicTransitionInformation()) {
-
-                logger.error("Found topic transition: " + t.getId());
-                int senderCapacity = t.asInputSignalTransition().getStaticTransitionInformation().getInputLimit();
-                int receiverCapacity = t.asInputSignalTransition().getStaticTransitionInformation().getOutputLimit();
-
-                // collect inputs and outputs
-                Map<String, Place> inputMapping = new HashMap<>();
-                Map<String, List<Place>> outputMapping = new HashMap<>();
-
-                // get needed input information
-                for (Arc a : t.getInArcs()) {
-                    Place p = (Place) a.getSource().asPlaceNode();
-                    inputMapping.put(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet(), p);
-                }
-
-                // get needed output information
-                for (Arc a : t.getOutArcs()) {
-                    Place p = (Place) a.getTarget().asPlaceNode();
-
-                    if (outputMapping.containsKey(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet())) {
-                        outputMapping.get(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet()).add(p);
-                    } else {
-                        List<Place> pList = new ArrayList<>();
-                        pList.add(p);
-                        outputMapping.put(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet(), pList);
-                    }
-                }
-
-                // create und insert "the channel" elements
-                insertChannelElements(petriNet, channelCount);
-
-                Page topPage = petriNet.getPage(0);
-
-                for (Map.Entry<String, Place> entry : inputMapping.entrySet()) {
-
-                    // include the template publisher
-                    PetriNet publisherPetriNet = TopicTemplates.getTopicPublisherPetriNet(String.valueOf(publisherCount), senderCapacity);
-                    includeTemplateInstance(petriNet, publisherPetriNet, entry.getKey(), entry.getValue().asOutputSignalPlace().getStaticPlaceInformation().getLocation());
-
-                    // connect the publisher inputs
-                    Arc inputArc = new Arc();
-                    Arc overFlowArc = new Arc();
-                    Arc outArc = new Arc();
-                    inputArc.setId("pub-inputArc-" + publisherCount);
-                    overFlowArc.setId("pub-overFlowArc-" + publisherCount);
-                    outArc.setId("pub-outArc-" + publisherCount);
-
-
-                    inputArc.setSource(entry.getValue());
-                    inputArc.setTarget((Node) getPnObjectByID(petriNet, TemplateConstants.PUBLISHER_INPUT_TRANSITION + "-" + publisherCount));
-
-                    overFlowArc.setSource(entry.getValue());
-                    overFlowArc.setTarget((Node) getPnObjectByID(petriNet, TemplateConstants.PUBLISHER_OVERFLOW_TRANSITION + "-" + publisherCount));
-
-                    outArc.setSource((Node) getPnObjectByID(petriNet, TemplateConstants.PUBLISHER_OUTPUT_TRANSITION + "-" + publisherCount));
-                    outArc.setTarget((Node) getPnObjectByID(petriNet, TemplateConstants.CHANNEL_CONNECTOR_PLACE + "-" + channelCount));
-
-                    topPage.addObject(inputArc);
-                    topPage.addObject(overFlowArc);
-                    topPage.addObject(outArc);
-
-                    // increase for unique ids
-                    publisherCount++;
-                }
-
-                petriNet.flushTreeCache();
-
-                // subscribers
-                for (Map.Entry<String, List<Place>> entry : outputMapping.entrySet()) {
-
-                    // include dispatcher queues
-                    PetriNet dispatcherNet = TopicTemplates.getTopicDispatcherPetriNet(String.valueOf(dispatcherCount), 16);
-                    includeTemplateInstance(petriNet, dispatcherNet, entry.getKey(), entry.getValue().get(0).asOutputSignalPlace().getStaticPlaceInformation().getLocation());
-
-                    Arc channelToDispatcherArc = new Arc();
-                    channelToDispatcherArc.setId("channelToDispatcherArc-" + dispatcherCount);
-                    channelToDispatcherArc.setSource((Node) getPnObjectByID(petriNet, TemplateConstants.CHANNEL_CONNECTOR_TRANSITION + "-" + channelCount));
-                    channelToDispatcherArc.setTarget((Node) getPnObjectByID(petriNet, TemplateConstants.DISPATCHER_INPUT_PLACE + "-" + dispatcherCount));
-                    topPage.addObject(channelToDispatcherArc);
-
-                    petriNet.flushTreeCache();
-
-                    // include subscriber queues
-                    for (Place p : entry.getValue()) {
-
-                        PetriNet subscriberNet = TopicTemplates.getTopicCallbackQueuePetriNet(String.valueOf(callbackCount), receiverCapacity);
-                        includeTemplateInstance(petriNet, subscriberNet, entry.getKey(), p.asOutputSignalPlace().getStaticPlaceInformation().getLocation());
-
-                        // callbackInputArc
-                        createAndIncludeArc(topPage, "callbackInputArc-" + dispatcherCount, (Node) getPnObjectByID(petriNet, TemplateConstants.DISPATCHER_OUTPUT_TRANSITION + "-" + dispatcherCount),
-                                (Node) getPnObjectByID(petriNet, TemplateConstants.CALLBACK_INPUT_PLACE + "-" + callbackCount));
-
-                        // callbackOverFlowArc
-                        createAndIncludeArc(topPage, "callbackOverFlowArc-" + dispatcherCount, (Node) getPnObjectByID(petriNet, TemplateConstants.CALLBACK_INPUT_PLACE + "-" + dispatcherCount),
-                                (Node) getPnObjectByID(petriNet, TemplateConstants.CALLBACK_OVERFLOW_TRANSITION + "-" + callbackCount));
-
-                        // callbackOutArc
-                        createAndIncludeArc(topPage, "callbackOutArc-" + dispatcherCount, (Node) getPnObjectByID(petriNet, TemplateConstants.CALLBACK_OUTPUT_TRANSITION + "-" + dispatcherCount), p);
-
-                        callbackCount++;
-                    }
-
-                    dispatcherCount++;
-                }
-
-                petriNet.flushTreeCache();
-
-                // objects to be cleaned up
-                arcsToRemove.addAll(t.getInArcs());
-                arcsToRemove.addAll(t.getOutArcs());
-                transitionsToRemove.add(t);
-
-            }
-
-            channelCount++;
-        }
-
-        // clean up old channel data
-        for (Arc a : arcsToRemove) {
-            a.removeSelf();
-        }
-
-        for (Transition t : transitionsToRemove) {
-            t.removeSelf();
-        }
-
-        petriNet.flushTreeCache();
-
-        return petriNet;
-    }
-
-    private static PlaceInformation generateChannelPlaceInformation() {
-
-        PlaceInformation newPi = new PlaceInformation();
-        newPi.setLocation("channel");
-        newPi.setSubNet("channel");
-        newPi.setType(PnmlConstants.PLACE_TYPE_DISCRETE);
-
-        return newPi;
-    }
-
-    private static void insertChannelElements(PetriNet petriNet, int channelCount) {
-
-        OutputSignalPlace channelPlace = new OutputSignalPlace();
-        channelPlace.setMutualPlaceInformation(generateChannelPlaceInformation());
-
-        InputSignalTransition channelTransition = new InputSignalTransition();
-        TransitionInformation newTi = new DefaultTransitionInformation();
-        newTi.setLocation("channel");
-        newTi.setSubNet("channel");
-        newTi.setType(PnmlConstants.TRANSITION_TYPE_DISCRETE);
-        channelTransition.setMutualTransitionInformation(newTi);
-
-        Name nChannelPlace = new Name();
-        nChannelPlace.setText(TemplateConstants.CHANNEL_CONNECTOR_PLACE + "-" + channelCount);
-        channelPlace.setName(nChannelPlace);
-        channelPlace.setId(TemplateConstants.CHANNEL_CONNECTOR_PLACE + "-" + channelCount);
-
-        Name nChannelTransition = new Name();
-        nChannelTransition.setText(TemplateConstants.CHANNEL_CONNECTOR_TRANSITION + "-" + channelCount);
-        channelTransition.setName(nChannelTransition);
-        channelTransition.setId(TemplateConstants.CHANNEL_CONNECTOR_TRANSITION + "-" + channelCount);
-
-        Page topPage = petriNet.getPage(0);
-        topPage.addObject(channelPlace);
-        topPage.addObject(channelTransition);
-
-        Arc channelArc = new Arc();
-        channelArc.setId("ChannelArc-" + channelCount);
-        channelArc.setTarget(channelTransition);
-        channelArc.setSource(channelPlace);
-        topPage.addObject(channelArc);
-
-        petriNet.flushTreeCache();
-    }
-
-    /**
-     * Get the service call trees leaves. Works only with a net without references and only a single top level page.
-     *
-     * @param petriNet the unflatted net
-     * @return set of leave subnets
-     */
-    private static Set<InputSignalTransition> getUnflattedServiceCallLeaves(PetriNet petriNet, Set<String> resolved) {
-
-        Set<InputSignalTransition> leaves = new HashSet<>();
-
-        for (Transition t : petriNet.allTransitions()) {
-
-            if (t.asInputSignalTransition().getStaticTransitionInformation().isServiceTransitionInformation()
-                    && t.asInputSignalTransition().getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST)) {
-
-                int inCount = t.incomingPlaces().size();
-                int inLeafCount = 0;
-
-                for (Place p : t.incomingPlaces()) {
-                    String sourceSubnet = p.asOutputSignalPlace().getSubnet();
-
-                    CommunicatorInformation cInfo = petriNet.getCommunicatorInformation(resolved);
-
-                    for (Map.Entry<String, String> entry : cInfo.getCommunicatorMapping().entries()) {
-
-                        boolean isClient = false;
-                        boolean isServer = false;
-
-                        if (entry.getValue().equals(PnmlConstants.SERVICE_CLIENT) && entry.getKey().equals(sourceSubnet)) {
-                            isClient = true;
-                        }
-
-                        for (Map.Entry<String, String> entry2 : cInfo.getCommunicatorMapping().entries()) {
-
-                            if (entry2.getValue().equals(PnmlConstants.SERVICE_SERVER) && entry2.getKey().equals(sourceSubnet)) {
-                                isServer = true;
-                                break;
-                            }
-                        }
-
-                        if (isClient && !isServer) {
-                            inLeafCount++;
-                        }
-                    }
-                }
-
-                if (inCount == inLeafCount) {
-                    leaves.add(t.asInputSignalTransition());
-                }
-            }
-        }
-        return leaves;
-    }
-
-    /**
-     * Flattening of service constructs, important: circular service calls are not allowed!
-     *
-     * @param petriNet petriNet the unflatted net
-     * @return the service flatted net
-     */
-    public static PetriNet flatServiceChannels(PetriNet petriNet) {
-
-        Set<String> resolvedSubnets = new HashSet<>();
-        Set<String> reconnectedClients = new HashSet<>();
-
-        Set<InputSignalTransition> unflattedLeaves = getUnflattedServiceCallLeaves(petriNet, resolvedSubnets);
-
-        int serverInstanceCount = 0;
-
-        // flat everything but the final service calls
-        while (unflattedLeaves.size() > 0) {
-
-            for (InputSignalTransition t : unflattedLeaves) {
-                flatServiceChannelsInternal(petriNet, serverInstanceCount, t, reconnectedClients);
-
-                for (Place p : t.outgoingPlaces()) {
-                    resolvedSubnets.add(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet());
-                    break;
-                }
-
-                unflattedLeaves = getUnflattedServiceCallLeaves(petriNet, resolvedSubnets);
-                serverInstanceCount++;
-                break;
-            }
-        }
-
-        // flat the final service calls
-        for (Transition t : petriNet.allTransitions()) {
-            if (t.asInputSignalTransition().getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST)) {
-                System.out.println("Flatting a root service transition: " + t.getId());
-                flatServiceChannelsInternal(petriNet, serverInstanceCount, t.asInputSignalTransition(), reconnectedClients);
-                serverInstanceCount++;
-            }
-        }
-
-        return petriNet;
-    }
-
-    private static PetriNet flatServiceChannelsInternal(PetriNet petriNet, int serverInstanceCount, InputSignalTransition requestTransitionPnObject, Set<String> reconnectedClients) {
-
-        Page topPage = petriNet.getPage(0);
-
-        // get response and request transition
-        InputSignalTransition requestTransition = requestTransitionPnObject.asInputSignalTransition();
-        InputSignalTransition responseTransition = Objects.requireNonNull(getResponseTransition(petriNet, requestTransition)).asInputSignalTransition();
-
-        // get elements of server subnet
-        Set<Place> serverPlaces = new HashSet<>();
-        Set<Transition> serverInTransitions = new HashSet<>();
-        Set<Transition> serverOutTransitions = new HashSet<>();
-        Set<Transition> serverTransitions = new HashSet<>();
-        Set<RefPlace> serverRefPlaces = new HashSet<>();
-        Set<RefTransition> serverRefTransitions = new HashSet<>();
-        Set<Arc> innerArcs = null;
-        Set<PnObject> serverObjectsWithoutArcs = null;
-        Set<PnObject> copiedObjects = new HashSet<>();
-
-        String serverSubnet = null;
-        for (Place p : requestTransition.outgoingPlaces()) {
-            serverSubnet = p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet();
-            getObjectsBySubnet(petriNet, serverSubnet, serverPlaces, serverTransitions, serverRefPlaces, serverRefTransitions);
-            innerArcs = getSubnetArcs(petriNet, serverSubnet);
-            serverObjectsWithoutArcs = getObjectsBySubnet(petriNet, serverSubnet);
-            break;
-        }
-
-        // create clones of the server
-
-        // insert channel queue template
-        String queue_suffix = "serverInstance-" + serverInstanceCount;
-        OutputSignalPlace queueCapacityPlace = PrimitiveTemplates.getOutputSignalPlace();
-        assert queueCapacityPlace != null;
-        queueCapacityPlace.setId(TemplateConstants.SERVICE_QUEUE_CAPACITY_PLACE + "-" + queue_suffix);
-
-        PlaceInformation pi = new PlaceInformation();
-        pi.setSubNet("channel");
-        pi.setLocation("channel");
-        pi.setType(PnmlConstants.PLACE_TYPE_DISCRETE);
-        queueCapacityPlace.setMutualPlaceInformation(pi);
-        queueCapacityPlace.getInitialMarking().setText(16);
-        Name qCapName = new Name();
-        qCapName.setText(TemplateConstants.SERVICE_QUEUE_CAPACITY_PLACE + "-" + queue_suffix);
-        queueCapacityPlace.setName(qCapName);
-        topPage.addObject(queueCapacityPlace);
-
-        int clientCount = 0;
-
-        List<Tuple2<Node, Node>> externalElementsToReconnect = new ArrayList<>(); // true -> element is source
-        List<Arc> oldConnectorArcs = getDirectlyConnectedElements(petriNet, serverSubnet, externalElementsToReconnect);
-
-        for (Place incomingPlace : requestTransition.incomingPlaces()) {
-
-            // create clone for each client
-            Set<OutputSignalPlace> topicInputPlaces = new HashSet<>();
-
-            System.out.println("[FLATTER] Copying server net: " + serverSubnet);
-            Pair<OutputSignalPlace, OutputSignalPlace> ioPlacePair = copyServerNet(petriNet, serverPlaces, serverTransitions, topicInputPlaces,
-                    serverInstanceCount + "-" + clientCount, serverSubnet, copiedObjects, externalElementsToReconnect);
-
-            // new needed publisher nets (reason: publishers are potentially also cloned)
-            int topicInputPlaceCount = 0;
-
-            for (OutputSignalPlace topicInputPlace : topicInputPlaces) {
-
-                String suffix = "serverInstance-" + serverInstanceCount + "-clientCount-" + clientCount + "-topicInput-" + topicInputPlaceCount;
-
-                int capacity = 0;
-                for (Arc a : topicInputPlace.getOutArcList()) {
-                    for (Place p : a.getTarget().asTransitionNode().asTransition().incomingPlaces()) {
-                        if (p.getId().contains(TemplateConstants.PUBLISHER_CAPACITY_PLACE)) {
-                            capacity = p.getInitialMarking().getText();
-                        }
-                    }
-                }
-
-                PetriNet publisherPetriNet = TopicTemplates.getTopicPublisherPetriNet(suffix, capacity);
-                includeTemplateInstance(petriNet, publisherPetriNet, topicInputPlace.getStaticPlaceInformation().getSubNet(), topicInputPlace.getStaticPlaceInformation().getLocation());
-
-                // connect the publisher inputs
-                Arc inputArc = new Arc();
-                Arc overFlowArc = new Arc();
-                inputArc.setId("pub-inputArc-" + suffix);
-                overFlowArc.setId("pub-overFlowArc-" + suffix);
-
-                inputArc.setSource(topicInputPlace);
-                inputArc.setTarget((Node) getPnObjectByID(petriNet, TemplateConstants.PUBLISHER_INPUT_TRANSITION + "-" + suffix));
-
-                overFlowArc.setSource(topicInputPlace);
-                overFlowArc.setTarget((Node) getPnObjectByID(petriNet, TemplateConstants.PUBLISHER_OVERFLOW_TRANSITION + "-" + suffix));
-
-                topPage.addObject(inputArc);
-                topPage.addObject(overFlowArc);
-
-                topicInputPlaceCount++;
-            }
-
-            petriNet.flushTreeCache();
-
-            // insert channel connection template
-            String channel_suffix = "serverInstance-" + serverInstanceCount + "-clientCount-" + clientCount;
-            PetriNet serviceChannelPetriNet = ServiceTemplates.getServiceConnectionTemplate(channel_suffix);
-            includeTemplateInstance(petriNet, serviceChannelPetriNet, "channel", "channel");
-
-            // link the template instance to the net via arcs
-            OutputSignalPlace inPlace = null;
-
-            // is null if newly created (by cloning) by flatter
-            if (getPlaceByID(petriNet, incomingPlace.getId()) == null) {
-
-                for(Place p : petriNet.allPlaces()){
-                    if (p.asOutputSignalPlace().getMutualPlaceInformation() != null) {
-                        if (p.asOutputSignalPlace().getMutualPlaceInformation().getTraceInfo().equals(incomingPlace.getId())) {
-
-                            System.out.println("Reconnecting client to server: " + p.getId() + " --> " + TemplateConstants.SERVICE_CLIENT_INPUT_TRANSITION + "-" + channel_suffix);
-                            createAndIncludeArc(topPage, "channel-client-input-arc-" + channel_suffix, p,
-                                    getTransitionByID(petriNet, TemplateConstants.SERVICE_CLIENT_INPUT_TRANSITION + "-" + channel_suffix));
-                            reconnectedClients.add(p.getId());
-                            inPlace = p.asOutputSignalPlace();
-                            break;
-                        }
-                    }
-                }
-            } else {
-                createAndIncludeArc(topPage, "channel-client-input-arc-" + channel_suffix, incomingPlace,
-                        getTransitionByID(petriNet, TemplateConstants.SERVICE_CLIENT_INPUT_TRANSITION + "-" + channel_suffix));
-            }
-
-            // works currently only with one service client per subnet
-            if (getPlaceByID(petriNet, responseTransition.getOutArcs().get(clientCount).getTarget().getId()) == null) {
-
-                for (Place p : petriNet.allPlaces()) {
-                    if (p.asOutputSignalPlace().getMutualPlaceInformation() != null) {
-                        if (p.asOutputSignalPlace().getMutualPlaceInformation().getSubNet().equals(inPlace.getMutualPlaceInformation().getSubNet())
-                                && !p.getId().equals(inPlace.getId())) {
-
-                            for (Arc a : responseTransition.getOutArcs()) {
-
-                                if (p.asOutputSignalPlace().getMutualPlaceInformation().getTraceInfo().equals(a.getTarget().getId())) {
-                                    System.out.println("Reconnecting server to client: " + TemplateConstants.SERVICE_CLIENT_OUTPUT_TRANSITION + "-" + channel_suffix + " --> " + p.getId());
-
-                                    createAndIncludeArc(topPage, "channel-client-output-arc-" +
-                                            channel_suffix, getTransitionByID(petriNet, TemplateConstants.SERVICE_CLIENT_OUTPUT_TRANSITION + "-" + channel_suffix), p);
-                                    reconnectedClients.add(p.getId());
-                                    break;
-                                }
-                            }
-                        }
-                    }
-                }
-            } else {
-                createAndIncludeArc(topPage, "channel-client-output-arc-" + channel_suffix, getTransitionByID(petriNet, TemplateConstants.SERVICE_CLIENT_OUTPUT_TRANSITION + "-" + channel_suffix),
-                        responseTransition.getOutArcs().get(clientCount).getTarget());
-            }
-
-            // service instance input transition -> service input place
-            createAndIncludeArc(topPage, "channel-server-input-arc-" + channel_suffix,
-                    getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_INPUT_TRANSITION + "-" + channel_suffix), ioPlacePair._1);
-
-            // service instance output place -> service instance output transition
-            createAndIncludeArc(topPage, "channel-server-output-arc-" + channel_suffix, ioPlacePair._2,
-                    getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_OUTPUT_TRANSITION + "-" + channel_suffix));
-
-            createAndIncludeArc(topPage, "queue-to-server-place-arc-" + channel_suffix, getPlaceByID(petriNet, TemplateConstants.SERVICE_QUEUE_TO_SERVER_PLACE + "-" + channel_suffix),
-                    getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_INPUT_TRANSITION + "-" + channel_suffix));
-            createAndIncludeArc(topPage, "server-output-to-queue-cap-arc-" + channel_suffix, getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_OUTPUT_TRANSITION + "-" + channel_suffix),
-                    getPlaceByID(petriNet, TemplateConstants.SERVICE_QUEUE_CAPACITY_PLACE + "-" + queue_suffix));
-            createAndIncludeArc(topPage, "client-connector-to-service-to-queue-arc-" + channel_suffix, getTransitionByID(petriNet, TemplateConstants.SERVICE_CLIENT_CONNECTOR_TRANSITION + "-" + channel_suffix),
-                    getPlaceByID(petriNet, TemplateConstants.SERVICE_TO_QUEUE_PLACE + "-" + channel_suffix));
-
-            // Arcs integrating the capacity place
-            createAndIncludeInhibitorArc(topPage, "server-cap-to-overflow-arc-" + channel_suffix,
-                    queueCapacityPlace, getTransitionByID(petriNet, TemplateConstants.SERVICE_QUEUE_OVERFLOW_TRANSITION + "-" + channel_suffix));
-            createAndIncludeArc(topPage, "server-to-queue-arc-" + channel_suffix,
-                    queueCapacityPlace, getTransitionByID(petriNet, TemplateConstants.SERVICE_QUEUE_CONNECTOR_TRANSITION + "-" + channel_suffix));
-            createAndIncludeArc(topPage, "serveroutput-to-capacity-arc-" + channel_suffix, getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_OUTPUT_TRANSITION + "-" + channel_suffix),
-                    queueCapacityPlace);
-
-            serverOutTransitions.add(getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_OUTPUT_TRANSITION + "-" + channel_suffix));
-            serverInTransitions.add(getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_INPUT_TRANSITION + "-" + channel_suffix));
-
-            // FeedbackPlace Integration
-            OutputSignalPlace serverFeedbackPlace = PrimitiveTemplates.getOutputSignalPlace();
-            serverFeedbackPlace.setId(TemplateConstants.SERVICE_FEEDBACK_PLACE + "-" + channel_suffix);
-            Place capPlace = getPlaceByID(petriNet, TemplateConstants.SERVICE_QUEUE_CAPACITY_PLACE + "-" + queue_suffix);
-            assert capPlace != null;
-            serverFeedbackPlace.setToolspecificList(capPlace.getToolspecificList().treeCopy());
-            serverFeedbackPlace.getName().setText(TemplateConstants.SERVICE_FEEDBACK_PLACE + "-" + channel_suffix);
-            serverFeedbackPlace.setNodeGraphics(capPlace.getNodeGraphics().treeCopy());
-            serverFeedbackPlace.getInitialMarking().setText(1);
-
-            Name sFeedbackPlaceName = new Name();
-            sFeedbackPlaceName.setText(TemplateConstants.SERVICE_FEEDBACK_PLACE + "-" + channel_suffix);
-            serverFeedbackPlace.setName(sFeedbackPlaceName);
-            topPage.addObject(serverFeedbackPlace);
-
-            createAndIncludeArc(topPage, "feedbackplace-to-inputtransition-arc-" + channel_suffix, serverFeedbackPlace,
-                    getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_INPUT_TRANSITION + "-" + channel_suffix));
-            createAndIncludeArc(topPage, "outputtransition-to-feedbackplace-arc-" + channel_suffix,
-                    getTransitionByID(petriNet, TemplateConstants.SERVICE_SERVER_OUTPUT_TRANSITION + "-" + channel_suffix), serverFeedbackPlace);
-
-            // flush
-            petriNet.flushTreeCache();
-            clientCount++;
-        }
-
-        petriNet.flushTreeCache();
-
-        for (PnObject po : copiedObjects) {
-            po.removeSelf();
-        }
-
-        for (Arc a : innerArcs) {
-            a.removeSelf();
-        }
-
-        for( Arc oldArc : oldConnectorArcs){
-            oldArc.removeSelf();
-        }
-
-        for (PnObject po : serverObjectsWithoutArcs) {
-            po.removeSelf();
-        }
-
-        petriNet.flushTreeCache();
-        serverInstanceCount++;
-
-        for (Arc a : requestTransition.getOutArcs()) {
-            // System.out.println("REMOVING ARC: " + a.getId());
-            a.removeSelf();
-        }
-
-        for (Arc a : requestTransition.getInArcs()) {
-            // System.out.println("REMOVING ARC: " + a.getId());
-            a.removeSelf();
-        }
-
-        for (Arc a : responseTransition.getOutArcs()) {
-            // System.out.println("REMOVING ARC: " + a.getId());
-            a.removeSelf();
-        }
-
-        for (Arc a : responseTransition.getInArcs()) {
-            // System.out.println("REMOVING ARC: " + a.getId());
-            a.removeSelf();
-        }
-
-        //System.out.println("REMOVING REQ: " + requestTransition.getId());
-        requestTransition.removeSelf();
-        //System.out.println("REMOVING RES: " + responseTransition.getId());
-        responseTransition.removeSelf();
-
-        petriNet.flushTreeCache();
-
-        return petriNet;
-    }
-
-    private static List<Arc> getDirectlyConnectedElements(PetriNet petriNet, String serverSubnet, List<Tuple2<Node, Node>> externalElementsToReconnect) {
-
-        List<Arc> connectingArcs = new ArrayList<>();
-
-        for (Place p : petriNet.allPlaces()){
-
-            for(Arc a : p.getInArcList()){
-                if(a.getSource().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getSubNet()
-                        .equals(serverSubnet) && !p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet().equals(serverSubnet)){
-
-                    String tType = a.getSource().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getType();
-                    if(!tType.equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST) && !tType.equals(PnmlConstants.TRANSITION_TYPE_SERVICE_RESPONSE)){
-                        externalElementsToReconnect.add(new Tuple2<>(a.getSource(), p));
-                        connectingArcs.add(a);
-                        break;
-                    }
-                }
-            }
-
-            for(Arc a : p.getOutArcList()){
-                if(a.getTarget().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getSubNet()
-                        .equals(serverSubnet) && !p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet().equals(serverSubnet)){
-
-                    String tType = a.getTarget().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getType();
-                    if(!tType.equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST) && !tType.equals(PnmlConstants.TRANSITION_TYPE_SERVICE_RESPONSE)) {
-                        externalElementsToReconnect.add(new Tuple2<>(p, a.getTarget()));
-                        connectingArcs.add(a);
-                        break;
-                    }
-                }
-            }
-        }
-
-        for (Transition t : petriNet.allTransitions()){
-
-
-            if(!t.asInputSignalTransition().getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST)
-                    && !t.asInputSignalTransition().getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_RESPONSE)) {
-                for (Arc a : t.getInArcList()) {
-                    if (a.getSource().asPlaceNode().asPlace().asOutputSignalPlace().getStaticPlaceInformation().getSubNet()
-                            .equals(serverSubnet) && !t.asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(serverSubnet)) {
-                        externalElementsToReconnect.add(new Tuple2<>(a.getSource(), t));
-                        connectingArcs.add(a);
-                        break;
-                    }
-                }
-
-                for (Arc a : t.getOutArcList()) {
-                    if (a.getTarget().asPlaceNode().asPlace().asOutputSignalPlace().getStaticPlaceInformation().getSubNet()
-                            .equals(serverSubnet) && !t.asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(serverSubnet)) {
-                        externalElementsToReconnect.add(new Tuple2<>(t, a.getTarget()));
-                        connectingArcs.add(a);
-                        break;
-                    }
-                }
-            }
-        }
-
-        return connectingArcs;
-    }
-
-    private static Pair<OutputSignalPlace, OutputSignalPlace> copyServerNet(PetriNet petriNet, Set<Place> serverPlaces,
-                                                                            Set<Transition> serverTransitions, Set<OutputSignalPlace> topicInputPlaces,
-                                                                            String suffix, String serverSubnet, Set<PnObject> copiedObjects,
-                                                                            List<Tuple2<Node, Node>> externalElementsToReconnect) {
-
-        petriNet.flushTreeCache();
-
-        final String instanceId = "server-instance-" + UUID.randomUUID().toString();
-
-        Page topPage = petriNet.getPage(0);
-        OutputSignalPlace serverInPlace = null;
-        OutputSignalPlace serverOutPlace = null;
-
-        copiedObjects.addAll(serverPlaces);
-        copiedObjects.addAll(serverTransitions);
-
-        // Elements
-        for (Place p : serverPlaces) {
-            OutputSignalPlace copy = PrimitiveTemplates.getOutputSignalPlace();
-            assert copy != null;
-            copy.setId(p.getId() + "-" + suffix);
-            Name copyName = new Name();
-            copyName.setText(copy.getId());
-            copy.setName(copyName);
-
-            copy.setToolspecificList(p.getToolspecificList().treeCopy());
-            copy.getName().setText(p.getName().getText() + "-" + suffix);
-            copy.setNodeGraphics(p.getNodeGraphics().treeCopy());
-
-            // copy initial marking of places
-            PTMarking m = new PTMarking();
-            m.setText(p.getInitialMarking().getText());
-
-            PlaceInformation pi = new PlaceInformation();
-            pi.setSubNet(p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet() + "-" + suffix);
-            pi.setLocation(p.asOutputSignalPlace().getStaticPlaceInformation().getLocation());
-            pi.setInstance(instanceId);
-            pi.setType(p.asOutputSignalPlace().getStaticPlaceInformation().getType());
-            pi.setTraceInfo(p.getId());
-
-            copy.setMutualPlaceInformation(pi);
-
-            topPage.addObject(copy);
-
-            for (Arc a : p.getOutArcList()) {
-                if (!a.getTarget().getSubnet().equals(serverSubnet)) {
-
-                    if (!a.getTarget().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_RESPONSE)
-                            && !a.getTarget().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getLocation().equals("channel")) {
-                        logger.error("Found topic input place which needs to be re-flatted: " + copy.getId());
-                        topicInputPlaces.add(petriNet.getPlaceFromPlaceNode(copy.asPlaceNode()).asOutputSignalPlace());
-                    }
-                }
-
-                if (petriNet.getTransitionFromTransitionNode(a.getTarget().asTransitionNode()).
-                        asInputSignalTransition().getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_RESPONSE)) {
-                    serverOutPlace = copy.asOutputSignalPlace();
-                }
-            }
-
-            for (Arc a : p.getInArcList()) {
-                if (petriNet.getTransitionFromTransitionNode(a.getSource().asTransitionNode()).asInputSignalTransition().
-                        getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST)) {
-                    serverInPlace = copy.asOutputSignalPlace();
-                }
-            }
-        }
-
-        petriNet.flushTreeCache();
-
-        for (Transition t : serverTransitions) {
-            InputSignalTransition copy = PrimitiveTemplates.getInputSignalTransition();
-            assert copy != null;
-            copy.setId(t.getId() + "-" + suffix);
-            copy.getName().setText(t.getName().getText());
-            copy.setMutualInputSignalBindingList(t.asInputSignalTransition().getMutualInputSignalBindingList().treeCopy());
-            copy.getName().setText(t.getName().getText() + "-" + suffix);
-            copy.setToolspecificList(t.getToolspecificList().treeCopy());
-            copy.setNodeGraphics(t.getNodeGraphics().treeCopy());
-
-            TransitionInformation ti = new DefaultTransitionInformation();
-            ti.setType(t.asInputSignalTransition().getStaticTransitionInformation().getType());
-            ti.setSubNet(t.asInputSignalTransition().getStaticTransitionInformation().getSubNet() + "-" + suffix);
-            ti.setLocation(t.asInputSignalTransition().getStaticTransitionInformation().getLocation());
-            ti.setInstance(instanceId);
-            ti.setTraceInfo(t.getId());
-
-            copy.setMutualTransitionInformation(ti);
-
-            topPage.addObject(copy);
-
-            for(Tuple2<Node, Node> tuple : externalElementsToReconnect){
-
-                //System.out.println("--1: " + tuple.get_1().getId() + ", 2: " + tuple.get_2().getId() + " ,t: " + t.getId());
-                if(t.getId().equals(tuple.get_1().getId())){
-                    createAndIncludeArc(topPage, "ext-" + copy.getId() + "-to-" + tuple.get_2().getId(), copy, tuple.get_2());
-                }
-                if(t.getId().equals(tuple.get_2().getId())){
-                    createAndIncludeArc(topPage, "ext-" +  tuple.get_1().getId() + "-to-" + copy.getId(), tuple.get_1(), copy);
-                }
-            }
-        }
-
-        petriNet.flushTreeCache();
-
-        // we removed refs in step one, so no need to copy them
-
-        // Arcs
-        for (Arc a : getInnerSubnetArcs(petriNet, serverSubnet)) {
-
-            Arc newArc = a.treeCopy();
-
-            String sourceId = a.getSource().getId() + "-" + suffix;
-            newArc.setSource((Node) getPnObjectByID(petriNet, sourceId));
-            String targetId = a.getTarget().getId() + "-" + suffix;
-            newArc.setTarget((Node) getPnObjectByID(petriNet, targetId));
-            newArc.setId(sourceId + "-to-" + targetId);
-
-            topPage.addObject(newArc);
-            copiedObjects.add(a);
-        }
-
-        petriNet.flushTreeCache();
-
-        return new Pair<>(serverInPlace, serverOutPlace);
-    }
-
     private static Set<Arc> getInnerSubnetArcs(PetriNet petriNet, String subnet) {
 
         Set<Arc> arcs = new HashSet<>();
@@ -758,13 +21,13 @@ public class ChannelFlatter extends Flatter {
 
             if (a.getTarget().isTransitionNode() && a.getSource().isPlaceNode()) {
 
-                if (a.getTarget().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(subnet) &&
-                        a.getSource().asPlaceNode().asPlace().asOutputSignalPlace().getStaticPlaceInformation().getSubNet().equals(subnet)) {
+                if (a.getTarget().asTransitionNode().asTransition().asDinerosTransition().getStaticTransitionInformation().getSubNet().equals(subnet) &&
+                        a.getSource().asPlaceNode().asPlace().asDinerosPlace().getStaticPlaceInformation().getSubNet().equals(subnet)) {
                     arcs.add(a);
                 }
             } else {
-                if (a.getSource().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(subnet) &&
-                        a.getTarget().asPlaceNode().asPlace().asOutputSignalPlace().getStaticPlaceInformation().getSubNet().equals(subnet)) {
+                if (a.getSource().asTransitionNode().asTransition().asDinerosTransition().getStaticTransitionInformation().getSubNet().equals(subnet) &&
+                        a.getTarget().asPlaceNode().asPlace().asDinerosPlace().getStaticPlaceInformation().getSubNet().equals(subnet)) {
                     arcs.add(a);
                 }
             }
@@ -791,47 +54,32 @@ public class ChannelFlatter extends Flatter {
     private static String getArcTargetSubnet(Arc arc) {
 
         if (arc.getTarget().isTransitionNode()) {
-            return arc.getTarget().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getSubNet();
+            return arc.getTarget().asTransitionNode().asTransition().asDinerosTransition().getStaticTransitionInformation().getSubNet();
         } else {
-            return arc.getTarget().asPlaceNode().asPlace().asOutputSignalPlace().getStaticPlaceInformation().getSubNet();
+            return arc.getTarget().asPlaceNode().asPlace().asDinerosPlace().getStaticPlaceInformation().getSubNet();
         }
     }
 
     private static String getArcSourceSubnet(Arc arc) {
 
         if (arc.getSource().isTransitionNode()) {
-            return arc.getSource().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getSubNet();
+            return arc.getSource().asTransitionNode().asTransition().asDinerosTransition().getStaticTransitionInformation().getSubNet();
         } else {
-            return arc.getSource().asPlaceNode().asPlace().asOutputSignalPlace().getStaticPlaceInformation().getSubNet();
+            return arc.getSource().asPlaceNode().asPlace().asDinerosPlace().getStaticPlaceInformation().getSubNet();
         }
     }
 
-    private static Transition getResponseTransition(PetriNet petriNet, Transition requestTransition) {
-
-        for (Transition t : petriNet.allTransitions()) {
-            if (t.asInputSignalTransition().getStaticTransitionInformation().isServiceTransitionInformation()
-                    && t.asInputSignalTransition().getStaticTransitionInformation().getType().equals(PnmlConstants.TRANSITION_TYPE_SERVICE_RESPONSE)) {
-                if(t.asInputSignalTransition().getStaticTransitionInformation().getSubNet()
-                        .equals(requestTransition.asInputSignalTransition().getStaticTransitionInformation().getSubNet())){
-                    return t;
-                }
-            }
-        }
-
-        return null;
-    }
-
     private static void getObjectsBySubnet(PetriNet petriNet, String subnet, Set<Place> serverPlaces,
                                            Set<Transition> serverTransitions, Set<RefPlace> serverRefPlaces, Set<RefTransition> serverRefTransitions) {
 
         for (Transition t : petriNet.allTransitions()) {
-            if (t.asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(subnet)) {
+            if (t.asDinerosTransition().getStaticTransitionInformation().getSubNet().equals(subnet)) {
                 serverTransitions.add(t);
             }
         }
 
         for (Place p : petriNet.allPlaces()) {
-            if (p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet().equals(subnet)) {
+            if (p.asDinerosPlace().getStaticPlaceInformation().getSubNet().equals(subnet)) {
                 serverPlaces.add(p);
             }
         }
@@ -854,13 +102,13 @@ public class ChannelFlatter extends Flatter {
         Set<PnObject> pnObjects = new HashSet<>();
 
         for (Transition t : petriNet.allTransitions()) {
-            if (t.asInputSignalTransition().getStaticTransitionInformation().getSubNet().equals(subnet)) {
+            if (t.asDinerosTransition().getStaticTransitionInformation().getSubNet().equals(subnet)) {
                 pnObjects.add(t);
             }
         }
 
         for (Place p : petriNet.allPlaces()) {
-            if (p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet().equals(subnet)) {
+            if (p.asDinerosPlace().getStaticPlaceInformation().getSubNet().equals(subnet)) {
                 pnObjects.add(p);
             }
         }
diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/Flatter.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/Flatter.java
index 5b18bc4658c12bdb8a4675132e37501a6fdef900..1f97368f2006c3569af01104a8bd5de72b95b5fa 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/Flatter.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/Flatter.java
@@ -35,7 +35,7 @@ public abstract class Flatter {
         return a;
     }
 
-    protected static void includeTemplateInstance(PetriNet petriNet, PetriNet templateInstance, String subnet, String location) {
+   /* protected static void includeTemplateInstance(PetriNet petriNet, PetriNet templateInstance, String subnet, String location) {
 
         // after tina-flat we do only have on page
         Page topPage = petriNet.getPage(0);
@@ -85,7 +85,7 @@ public abstract class Flatter {
         }
 
         petriNet.flushTreeCache();
-    }
+    }*/
 
 
     protected static Place getPlaceByID(PetriNet petriNet, String Id) {
diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/SignalFlatter.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/SignalFlatter.java
index 4fc260e1d65c9e7addac571d944d95190a2651c6..a6345ae7310bf55aceb09ee04b80f3efb7916eb0 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/SignalFlatter.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/transform/SignalFlatter.java
@@ -9,7 +9,7 @@ import java.util.*;
 
 public class SignalFlatter extends Flatter{
 
-    public static PetriNet flatSignals(PetriNet petriNet) {
+    /*public static PetriNet flatSignals(PetriNet petriNet) {
 
         Page topPage = petriNet.getPage(0);
 
@@ -245,5 +245,5 @@ public class SignalFlatter extends Flatter{
         iOsp.setId(TemplateConstants.INPUT_SIGNAL_PLACE_INACTIVE + "-" + signalId + "-" + count);
         aOsp.getName().setText(TemplateConstants.INPUT_SIGNAL_PLACE_ACTIVE + "-" + signalId + "-" + count);
         iOsp.getName().setText(TemplateConstants.INPUT_SIGNAL_PLACE_INACTIVE + "-" + signalId + "-" + count);
-    }
+    }*/
 }
diff --git a/src/main/resources/elements/OutputSignalPlace.pnml b/src/main/resources/elements/DinerosPlace.pnml
similarity index 92%
rename from src/main/resources/elements/OutputSignalPlace.pnml
rename to src/main/resources/elements/DinerosPlace.pnml
index fad5346fee469c303d071cb8b3f06446d90d5c36..31985f25f730ee7bcdfe5ab2e84de73d64e68e1a 100644
--- a/src/main/resources/elements/OutputSignalPlace.pnml
+++ b/src/main/resources/elements/DinerosPlace.pnml
@@ -3,8 +3,8 @@
         <name>
             <text>OutputSignalPlaceNet</text>
         </name>
-        <page id="OutputSignalPlacePage">
-            <place id="OutputSignalPlace">
+        <page id="DinerosPlacePage">
+            <place id="DinerosPlace">
                 <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
                     <location>none</location>
                     <subnet>none</subnet>
diff --git a/src/main/resources/elements/InputSignalTransition.pnml b/src/main/resources/elements/DinerosTransition.pnml
similarity index 91%
rename from src/main/resources/elements/InputSignalTransition.pnml
rename to src/main/resources/elements/DinerosTransition.pnml
index a94aa6357fc39220731bd5c0bf20164f8ec48496..02e0d36bd0abde969c83c679906f0a60cbe02ff6 100644
--- a/src/main/resources/elements/InputSignalTransition.pnml
+++ b/src/main/resources/elements/DinerosTransition.pnml
@@ -3,8 +3,8 @@
         <name>
             <text>InputSignalTransitionNet</text>
         </name>
-        <page id="InputSignalTransitionPage">
-            <transition id="InputSignalTransition">
+        <page id="DinerosTransitionPage">
+            <transition id="DinerosTransition">
                 <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
                     <location>none</location>
                     <subnet>none</subnet>