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 a2861e8e131b605f3fe7e2946dfe750740eda29f..d1514b5e118bff1e3346b87ce50d9117c4a471ed 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
@@ -363,8 +363,13 @@ public class ChannelFlatter extends Flatter {
             Set<OutputSignalPlace> topicInputPlaces = new HashSet<>();
 
             System.out.println("[FLATTER] Copying server net: " + serverSubnet);
+
+            // TODO: get the directly connected elements
+            List<Tuple2<Node, Node>> externalElementsToReconnect = new ArrayList<>(); // true -> element is source
+            getDirectlyConnectedElements(petriNet, serverSubnet, externalElementsToReconnect);
+
             Pair<OutputSignalPlace, OutputSignalPlace> ioPlacePair = copyServerNet(petriNet, serverPlaces, serverTransitions, topicInputPlaces,
-                    serverInstanceCount + "-" + clientCount, serverSubnet, copiedObjects);
+                    serverInstanceCount + "-" + clientCount, serverSubnet, copiedObjects, externalElementsToReconnect);
 
             // new needed publisher nets (reason: publishers are potentially also cloned)
             int topicInputPlaceCount = 0;
@@ -561,9 +566,50 @@ public class ChannelFlatter extends Flatter {
         return petriNet;
     }
 
+    private static void getDirectlyConnectedElements(PetriNet petriNet, String serverSubnet, List<Tuple2<Node, Node>> externalElementsToReconnect) {
+        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)){
+                    externalElementsToReconnect.add(new Tuple2<>(a.getSource(), p));
+                    break;
+                }
+            }
+
+            for(Arc a : p.getOutArcList()){
+                if(a.getTarget().asTransitionNode().asTransition().asInputSignalTransition().getStaticTransitionInformation().getSubNet()
+                        .equals(serverSubnet) && !p.asOutputSignalPlace().getStaticPlaceInformation().getSubNet().equals(serverSubnet)){
+                    externalElementsToReconnect.add(new Tuple2<>(p, a.getTarget()));
+                    break;
+                }
+            }
+        }
+
+        for (Transition t : petriNet.allTransitions()){
+
+            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));
+                    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<>(a.getSource(), t));
+                    break;
+                }
+            }
+        }
+    }
+
     private static Pair<OutputSignalPlace, OutputSignalPlace> copyServerNet(PetriNet petriNet, Set<Place> serverPlaces,
                                                                             Set<Transition> serverTransitions, Set<OutputSignalPlace> topicInputPlaces,
-                                                                            String suffix, String serverSubnet, Set<PnObject> copiedObjects) {
+                                                                            String suffix, String serverSubnet, Set<PnObject> copiedObjects,
+                                                                            List<Tuple2<Node, Node>> externalElementsToReconnect) {
 
         final String instanceId = "server-instance-" + UUID.randomUUID().toString();
 
@@ -603,6 +649,19 @@ public class ChannelFlatter extends Flatter {
             topPage.addObject(copy);
             addedPnObjects.add(copy);
 
+            for(Tuple2<Node, Node> t : externalElementsToReconnect){
+
+                if(p.getId().equals(t.get_1().getId())){
+                    createAndIncludeArc(topPage, "ext-" + t.get_1().getId() + "-to-" + t.get_2().getId(), t.get_1(), p);
+                }
+
+                if(p.getId().equals(t.get_2().getId())){
+                    createAndIncludeArc(topPage, "ext-" + t.get_2().getId() + "-to-" + t.get_1().getId(), p, t.get_1());
+                }
+            }
+
+            // todo: remove old arcs connecting external elements
+
             for (Arc a : p.getOutArcList()) {
                 if (!a.getTarget().getSubnet().equals(serverSubnet)) {