diff --git a/src/emuvim/api/sonata/dummygatekeeper.py b/src/emuvim/api/sonata/dummygatekeeper.py
index 59960a9..ff217f0 100755
--- a/src/emuvim/api/sonata/dummygatekeeper.py
+++ b/src/emuvim/api/sonata/dummygatekeeper.py
@@ -85,8 +85,8 @@
     return r
 # private subnet definitions for the generated interfaces
 # 10.10.xxx.0/24
-SAP_SUBNETS = generate_subnets('10.10', 0, subnet_size=50, mask=24)
-# 10.20.xxx.0/24
+SAP_SUBNETS = generate_subnets('10.10', 0, subnet_size=50, mask=30)
+# 10.20.xxx.0/30
 ELAN_SUBNETS = generate_subnets('10.20', 0, subnet_size=50, mask=24)
 # 10.30.xxx.0/30
 ELINE_SUBNETS = generate_subnets('10.30', 0, subnet_size=50, mask=30)
@@ -534,7 +534,7 @@
         elif sap["type"] == "external":
             target_dc = sap.get("dc")
             # add interface to dc switch
-            target_dc.attachExternalSAP(sap['name'], str(sap['net']))
+            target_dc.attachExternalSAP(sap['name'], sap['net'])
 
     def _connect_elines(self, eline_fwd_links, instance_uuid):
         """
@@ -563,26 +563,28 @@
 
             elif src_sap_id in self.saps_ext:
                 src_id = src_sap_id
-                src_if_name = src_sap_id
+                # set intf name to None so the chaining function will choose the first one
+                src_if_name = None
                 src_name = self.vnf_id2vnf_name[src_id]
                 dst_name = self.vnf_id2vnf_name[dst_id]
                 dst_vnfi = self._get_vnf_instance(instance_uuid, dst_name)
                 if dst_vnfi is not None:
                     # choose first ip address in sap subnet
                     sap_net = self.saps[src_sap_id]['net']
-                    sap_ip = "{0}/{1}".format(str(sap_net[1]), sap_net.prefixlen)
+                    sap_ip = "{0}/{1}".format(str(sap_net[2]), sap_net.prefixlen)
                     self._vnf_reconfigure_network(dst_vnfi, dst_if_name, sap_ip)
                     setChaining = True
 
             elif dst_sap_id in self.saps_ext:
                 dst_id = dst_sap_id
-                dst_if_name = dst_sap_id
+                # set intf name to None so the chaining function will choose the first one
+                dst_if_name = None
                 src_name = self.vnf_id2vnf_name[src_id]
                 dst_name = self.vnf_id2vnf_name[dst_id]
                 src_vnfi = self._get_vnf_instance(instance_uuid, src_name)
                 if src_vnfi is not None:
                     sap_net = self.saps[dst_sap_id]['net']
-                    sap_ip = "{0}/{1}".format(str(sap_net[1]), sap_net.prefixlen)
+                    sap_ip = "{0}/{1}".format(str(sap_net[2]), sap_net.prefixlen)
                     self._vnf_reconfigure_network(src_vnfi, src_if_name, sap_ip)
                     setChaining = True
 
diff --git a/src/emuvim/dcemulator/node.py b/src/emuvim/dcemulator/node.py
index 5cfc9ef..3587aff 100755
--- a/src/emuvim/dcemulator/node.py
+++ b/src/emuvim/dcemulator/node.py
@@ -25,18 +25,18 @@
 acknowledge the contributions of their colleagues of the SONATA
 partner consortium (www.sonata-nfv.eu).
 """
-from mininet.node import Docker
+from mininet.node import Docker, OVSBridge
 from mininet.link import Link
 from emuvim.dcemulator.resourcemodel import NotEnoughResourcesAvailable
 import logging
-import time
-import json
+
 
 LOG = logging.getLogger("dcemulator.node")
 LOG.setLevel(logging.DEBUG)
 
 
 DCDPID_BASE = 1000  # start of switch dpid's used for data center switches
+EXTSAPDPID_BASE = 2000  # start of switch dpid's used for external SAP switches
 
 class EmulatorCompute(Docker):
     """
@@ -135,6 +135,11 @@
         DCDPID_BASE += 1
         return DCDPID_BASE
 
+    def _get_next_extSAP_dpid(self):
+        global EXTSAPDPID_BASE
+        EXTSAPDPID_BASE += 1
+        return EXTSAPDPID_BASE
+
     def create(self):
         """
         Each data center is represented by a single switch to which
@@ -248,23 +253,17 @@
 
         return True
 
-    def attachExternalSAP(self, sap_name, sap_ip):
-        # create SAP as OVS internal interface
-        sap_intf = self.switch.attachInternalIntf(sap_name, sap_ip)
+    def attachExternalSAP(self, sap_name, sap_net, **params):
+        # create SAP as separate OVS switch with an assigned ip address
+        sap_ip = str(sap_net[1]) + '/' + str(sap_net.prefixlen)
+        sap_switch = self.net.addExtSAP(sap_name, sap_ip, dpid=hex(self._get_next_extSAP_dpid())[2:], **params)
+        sap_switch.start()
 
-        # add this as a link to the DCnetwork graph, so it is available for routing
-        attr_dict2 = {'src_port_id': sap_name, 'src_port_nr': None,
-                      'src_port_name': sap_name,
-                      'dst_port_id': self.switch.ports[sap_intf], 'dst_port_nr': self.switch.ports[sap_intf],
-                      'dst_port_name': sap_intf.name}
-        self.net.DCNetwork_graph.add_edge(sap_name, self.switch.name, attr_dict=attr_dict2)
+        # link SAP to the DC switch
+        self.net.addLink(sap_switch, self.switch, cls=Link)
 
-        attr_dict2 = {'dst_port_id': sap_name, 'dst_port_nr': None,
-                      'dst_port_name': sap_name,
-                      'src_port_id': self.switch.ports[sap_intf], 'src_port_nr': self.switch.ports[sap_intf],
-                      'src_port_name': sap_intf.name}
-        self.net.DCNetwork_graph.add_edge(self.switch.name, sap_name, attr_dict=attr_dict2)
-
+        # allow connection to the external internet through the host
+        self.net.addSAPNAT(sap_switch, str(sap_net))
 
     def listCompute(self):
         """
