diff --git a/xos/synchronizer/providers/metronetworkrestprovider.py b/xos/synchronizer/providers/metronetworkrestprovider.py
index 1e00a90..2cb03ab 100644
--- a/xos/synchronizer/providers/metronetworkrestprovider.py
+++ b/xos/synchronizer/providers/metronetworkrestprovider.py
@@ -55,10 +55,171 @@
         else:
             raise Exception("OnosApiError: get_network_ports()")
 
+    def get_network_ports(self):
+
+        objs = []
+
+        restCtrlUrl = self.networkdevice.restCtrlUrl
+        username = self.networkdevice.username
+        password = self.networkdevice.password
+
+        resp = requests.get("{}/mef-sca-api/SCA_ETH_FPP_UNI_N".format(restCtrlUrl),
+                            auth=HTTPBasicAuth(username, password))
+
+        if resp.status_code == 200:
+            for uni in resp.json():
+                hostname = uni['transportPort']['Hostname']
+                port = uni['transportPort']['Port']
+
+                # Default values
+                bwpCfgCbs = 0
+                bwpCfgEbs = 0
+                bwpCfgCir = 0
+                bwpCfgEir = 0
+
+                if 'interfaceCfgIngressBwp' in uni:
+                    bwpCfgCbs = uni['interfaceCfgIngressBwp']['bwpCfgCbs']
+                    bwpCfgEbs = uni['interfaceCfgIngressBwp']['bwpCfgEbs']
+                    bwpCfgCir = uni['interfaceCfgIngressBwp']['bwpCfgCir']
+                    bwpCfgEir = uni['interfaceCfgIngressBwp']['bwpCfgEir']
+
+                uniPort = NetworkEdgePort()
+                uniPort.element = self.networkdevice
+                uniPort.pid = "{}.{}/{}".format(self.networkdevice.id, hostname, port)
+                uniPort.bwpCfgCbs = bwpCfgCbs
+                uniPort.bwpCfgEbs = bwpCfgEbs
+                uniPort.bwpCfgCir = bwpCfgCir
+                uniPort.bwpCfgEir = bwpCfgEir
+
+                objs.append(uniPort)
+
+            return objs
+
+        else:
+            raise Exception("OnosApiError: get_network_ports()")
+
+    def get_network_eline_link(self, networkDevice, evc):
+
+        sid = evc['id']
+        uni1 = evc['SCA_ETH_Flow_Points'][0]
+        hostname = uni1['scaEthFppUniN']['transportPort']['Hostname']
+        port = uni1['scaEthFppUniN']['transportPort']['Port']
+
+        edgePort1 = NetworkEdgePort()
+        edgePort1.element = networkDevice
+        edgePort1.pid = "{}.{}/{}".format(networkDevice.id, hostname, port)
+
+        if 'interfaceCfgIngressBwp' in uni1['scaEthFppUniN']:
+            edgePort1.bwpCfgCbs = uni1['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCbs']
+            edgePort1.bwpCfgEbs = uni1['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEbs']
+            edgePort1.bwpCfgCir = uni1['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCir']
+            edgePort1.bwpCfgEir = uni1['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEir']
+
+        uni2 = evc['SCA_ETH_Flow_Points'][1]
+        hostname = uni2['scaEthFppUniN']['transportPort']['Hostname']
+        port = uni2['scaEthFppUniN']['transportPort']['Port']
+
+        edgePort2 = NetworkEdgePort()
+        edgePort2.element = networkDevice
+        edgePort2.pid = "{}.{}/{}".format(networkDevice.id, hostname, port)
+
+        if 'interfaceCfgIngressBwp' in uni1['scaEthFppUniN']:
+            edgePort2.bwpCfgCbs = uni2['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCbs']
+            edgePort2.bwpCfgEbs = uni2['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEbs']
+            edgePort2.bwpCfgCir = uni2['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCir']
+            edgePort2.bwpCfgEir = uni2['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEir']
+
+        edgeToEdgeConnectivity = NetworkEdgeToEdgePointConnection()
+        edgeToEdgeConnectivity.sid = sid
+        edgeToEdgeConnectivity.type = "Point_To_Point"
+        edgeToEdgeConnectivity.uni1 = edgePort1
+        edgeToEdgeConnectivity.uni2 = edgePort2
+        edgeToEdgeConnectivity.operstate = "active"
+        edgeToEdgeConnectivity.adminstate = "enabled"
+
+        return(edgeToEdgeConnectivity)
+
+    def get_network_elan_link(self, networkDevice, evc):
+
+        sid = evc['id']
+        eps = []
+
+        for ep in evc['SCA_ETH_Flow_Points']:
+            hostname = ep['scaEthFppUniN']['transportPort']['Hostname']
+            port = ep['scaEthFppUniN']['transportPort']['Port']
+
+            edgePort = NetworkEdgePort()
+            edgePort.element = networkDevice
+            edgePort.pid = "{}.{}/{}".format(networkDevice.id, hostname, port)
+
+            if 'interfaceCfgIngressBwp' in ep['scaEthFppUniN']:
+                edgePort.bwpCfgCbs = ep['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCbs']
+                edgePort.bwpCfgEbs = ep['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEbs']
+                edgePort.bwpCfgCir = ep['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCir']
+                edgePort.bwpCfgEir = ep['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEir']
+
+            eps.append(edgePort)
+
+        multipointToMultipointConnectivity = NetworkMultipointToMultipointConnection()
+        multipointToMultipointConnectivity.sid = sid
+        multipointToMultipointConnectivity.type = "Multipoint_To_Multipoint"
+        multipointToMultipointConnectivity.eps = eps
+        multipointToMultipointConnectivity.operstate = "active"
+        multipointToMultipointConnectivity.adminstate = "enabled"
+
+        return(multipointToMultipointConnectivity)
+
+    def get_network_etree_link(self, networkDevice, evc):
+
+        sid = evc['id']
+        eps = []
+
+        root = evc['SCA_ETH_Flow_Points'][0]
+        hostname = root['scaEthFppUniN']['transportPort']['Hostname']
+        port = root['scaEthFppUniN']['transportPort']['Port']
+
+        edgePort = NetworkEdgePort()
+        edgePort.element = networkDevice
+        edgePort.pid = "{}.{}/{}".format(networkDevice.id, hostname, port)
+
+        if 'interfaceCfgIngressBwp' in root['scaEthFppUniN']:
+            edgePort.bwpCfgCbs = root['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCbs']
+            edgePort.bwpCfgEbs = root['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEbs']
+            edgePort.bwpCfgCir = root['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCir']
+            edgePort.bwpCfgEir = root['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEir']
+
+        edgeToMultipointConnectivity = NetworkEdgeToMultipointConnection()
+        edgeToMultipointConnectivity.sid = sid
+        edgeToMultipointConnectivity.type = "Root_Multipoint"
+        edgeToMultipointConnectivity.root = edgePort
+
+        for ep in evc['SCA_ETH_Flow_Points'][1:]:
+            hostname = ep['scaEthFppUniN']['transportPort']['Hostname']
+            port = ep['scaEthFppUniN']['transportPort']['Port']
+
+            edgePort = NetworkEdgePort()
+            edgePort.element = networkDevice
+            edgePort.pid = "{}.{}/{}".format(networkDevice.id, hostname, port)
+
+            if 'interfaceCfgIngressBwp' in ep['scaEthFppUniN']:
+                edgePort.bwpCfgCbs = ep['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCbs']
+                edgePort.bwpCfgEbs = ep['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEbs']
+                edgePort.bwpCfgCir = ep['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCir']
+                edgePort.bwpCfgEir = ep['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEir']
+
+            eps.append(edgePort)
+
+        edgeToMultipointConnectivity.eps = eps
+        edgeToMultipointConnectivity.operstate = "active"
+        edgeToMultipointConnectivity.adminstate = "enabled"
+
+        return(edgeToMultipointConnectivity)
+
     def get_network_links(self):
 
         objs = []
 
+        networkDevice = self.networkdevice
         restCtrlUrl = self.networkdevice.restCtrlUrl
         username = self.networkdevice.username
         password = self.networkdevice.password
@@ -68,69 +229,24 @@
 
         if resp.status_code == 200:
             for evc in resp.json():
-                id = evc['id']
                 evcServiceType = evc['evcServiceType']
-
                 if (evcServiceType == "Point_To_Point"):
-                    uni1 = evc['SCA_ETH_Flow_Points'][0]
-                    hostname = uni1['scaEthFppUniN']['transportPort']['Hostname']
-                    port = uni1['scaEthFppUniN']['transportPort']['Port']
-
-                    if 'interfaceCfgIngressBwp' in uni1['scaEthFppUniN']:
-                        bwpCfgCbs = uni1['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCbs']
-                        bwpCfgEbs = uni1['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEbs']
-                        bwpCfgCir = uni1['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCir']
-                        bwpCfgEir = uni1['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEir']
-
-                    edgePort1 = NetworkEdgePort()
-                    edgePort1.element = self.networkdevice
-                    edgePort1.pid = "{}.{}/{}".format(self.networkdevice.id, hostname, port)
-                    edgePort1.bwpCfgCbs = bwpCfgCbs
-                    edgePort1.bwpCfgEbs = bwpCfgEbs
-                    edgePort1.bwpCfgCir = bwpCfgCir
-                    edgePort1.bwpCfgEir = bwpCfgEir
-
-                    uni2 = evc['SCA_ETH_Flow_Points'][1]
-                    hostname = uni2['scaEthFppUniN']['transportPort']['Hostname']
-                    port = uni2['scaEthFppUniN']['transportPort']['Port']
-
-                    if 'interfaceCfgIngressBwp' in uni1['scaEthFppUniN']:
-                        bwpCfgCbs = uni2['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCbs']
-                        bwpCfgEbs = uni2['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEbs']
-                        bwpCfgCir = uni2['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgCir']
-                        bwpCfgEir = uni2['scaEthFppUniN']['interfaceCfgIngressBwp']['bwpCfgEir']
-
-                    edgePort2 = NetworkEdgePort()
-                    edgePort2.element = self.networkdevice
-                    edgePort2.pid = "{}.{}/{}".format(self.networkdevice.id, hostname, port)
-                    edgePort2.bwpCfgCbs = bwpCfgCbs
-                    edgePort2.bwpCfgEbs = bwpCfgEbs
-                    edgePort2.bwpCfgCir = bwpCfgCir
-                    edgePort2.bwpCfgEir = bwpCfgEir
-
-                edgeToEdgeConnectivity = NetworkEdgeToEdgePointConnection()
-                edgeToEdgeConnectivity.sid = id
-                edgeToEdgeConnectivity.type = evcServiceType
-                edgeToEdgeConnectivity.uni1 = edgePort1
-                edgeToEdgeConnectivity.uni2 = edgePort2
-                edgeToEdgeConnectivity.operstate = "active"
-                edgeToEdgeConnectivity.adminstate = "enabled"
-
-                objs.append(edgeToEdgeConnectivity)
-
-            return objs
-
+                    objs.append(self.get_network_eline_link(networkDevice, evc))
+                elif (evcServiceType == "Multipoint_To_Multipoint"):
+                    objs.append(self.get_network_elan_link(networkDevice, evc))
+                elif (evcServiceType == "Root_Multipoint"):
+                    objs.append(self.get_network_etree_link(networkDevice, evc))
+                else:
+                    raise Exception("OnosApiError: get_network_links() - unknown link type")
         else:
             raise Exception("OnosApiError: get_network_links()")
 
-    def create_point_to_point_connectivity(self, obj):
+        return objs
 
-        restCtrlUrl = self.networkdevice.restCtrlUrl
-        username = self.networkdevice.username
-        password = self.networkdevice.password
+    def create_point_to_point_connectivity_json_data(self, obj):
 
-        evcServiceType = obj.type
-        # evcServiceType = "Point_To_Point"
+        p2p_json_data = {}
+        p2p_json_data["evcServiceType"] = "Point_To_Point"
 
         uni1 = obj.uni1
         uni1Id = uni1.pid
@@ -142,6 +258,19 @@
         uni1BwpCfgCir = uni1.bwpCfgCir
         uni1BwpCfgEir = uni1.bwpCfgEir
 
+        uni1_json_data = {}
+        uni1_json_data['scaEthFppUniN'] = {}
+        uni1_json_data['scaEthFppUniN']['ceVlanId'] = obj.vlanid
+        uni1_json_data['scaEthFppUniN']["transportPort"] = {}
+        uni1_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"] = {}
+
+        uni1_json_data['scaEthFppUniN']["transportPort"]["Hostname"] = uni1Hostname
+        uni1_json_data['scaEthFppUniN']["transportPort"]["Port"] = uni1Port
+        uni1_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCbs"] = uni1BwpCfgCbs
+        uni1_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEbs"] = uni1BwpCfgEbs
+        uni1_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCir"] = uni1BwpCfgCir
+        uni1_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEir"] = uni1BwpCfgEir
+
         uni2 = obj.uni2
         uni2Id = uni2.pid
         uni2IdToken = (uni2Id.split('.', 1))[1].split('/', 1)
@@ -152,27 +281,137 @@
         uni2BwpCfgCir = uni2.bwpCfgCir
         uni2BwpCfgEir = uni2.bwpCfgEir
 
-        data = {
-            "evcServiceType": evcServiceType,
-            "SCA_ETH_Flow_Points": [
-                {
-                    "scaEthFppUniN": {"transportPort": {"Hostname": uni1Hostname, "Port": uni1Port},
-                                      "interfaceCfgIngressBwp": {"bwpCfgCbs": uni1BwpCfgCbs,
-                                                                 "bwpCfgEbs": uni1BwpCfgEbs,
-                                                                 "bwpCfgCir": uni1BwpCfgCir,
-                                                                 "bwpCfgEir": uni1BwpCfgEir}}},
-                {
-                    "scaEthFppUniN": {"transportPort": {"Hostname": uni2Hostname, "Port": uni2Port},
-                                      "interfaceCfgIngressBwp": {"bwpCfgCbs": uni2BwpCfgCbs,
-                                                                 "bwpCfgEbs": uni2BwpCfgEbs,
-                                                                 "bwpCfgCir": uni2BwpCfgCir,
-                                                                 "bwpCfgEir": uni2BwpCfgEir}}}]
-        }
+        uni2_json_data = {}
+        uni2_json_data['scaEthFppUniN'] = {}
+        uni2_json_data['scaEthFppUniN']['ceVlanId'] = obj.vlanid
+        uni2_json_data['scaEthFppUniN']["transportPort"] = {}
+        uni2_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"] = {}
+
+        uni2_json_data['scaEthFppUniN']["transportPort"]["Hostname"] = uni2Hostname
+        uni2_json_data['scaEthFppUniN']["transportPort"]["Port"] = uni2Port
+        uni2_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCbs"] = uni2BwpCfgCbs
+        uni2_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEbs"] = uni2BwpCfgEbs
+        uni2_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCir"] = uni2BwpCfgCir
+        uni2_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEir"] = uni2BwpCfgEir
+
+        p2p_json_data["SCA_ETH_Flow_Points"] = []
+        p2p_json_data["SCA_ETH_Flow_Points"].append(uni1_json_data)
+        p2p_json_data["SCA_ETH_Flow_Points"].append(uni2_json_data)
+
+        return p2p_json_data
+
+    # nchoi: create elan service json data
+    def create_multipoint_to_multipoint_connectivity_json_data(self, obj):
+
+        mp2mp_json_data = {}
+        mp2mp_json_data["evcServiceType"] = "Multipoint_To_Multipoint"
+        mp2mp_json_data["SCA_ETH_Flow_Points"] = []
+
+        for ep in obj.eps.all():
+            uniId = ep.pid
+            uniIdToken = (uniId.split('.', 1))[1].split('/', 1)
+            uniHostname = uniIdToken[0]
+            uniPort = uniIdToken[1]
+            uniBwpCfgCbs = ep.bwpCfgCbs
+            uniBwpCfgEbs = ep.bwpCfgEbs
+            uniBwpCfgCir = ep.bwpCfgCir
+            uniBwpCfgEir = ep.bwpCfgEir
+
+            uni_json_data = {}
+            uni_json_data['scaEthFppUniN'] = {}
+            uni_json_data['scaEthFppUniN']['ceVlanId'] = obj.vlanid
+            uni_json_data['scaEthFppUniN']["transportPort"] = {}
+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"] = {}
+
+            uni_json_data['scaEthFppUniN']["transportPort"]["Hostname"] = uniHostname
+            uni_json_data['scaEthFppUniN']["transportPort"]["Port"] = uniPort
+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCbs"] = uniBwpCfgCbs
+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEbs"] = uniBwpCfgEbs
+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCir"] = uniBwpCfgCir
+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEir"] = uniBwpCfgEir
+
+            mp2mp_json_data["SCA_ETH_Flow_Points"].append(uni_json_data)
+
+        return mp2mp_json_data
+
+    # nchoi: create etree service json data
+    def create_root_multipoint_connectivity_json_data(self, obj):
+
+        r2mp_json_data = {}
+        r2mp_json_data["evcServiceType"] = "Root_Multipoint"
+        r2mp_json_data["SCA_ETH_Flow_Points"] = []
+
+        root = obj.root
+        uniId = root.pid
+        uniIdToken = (uniId.split('.', 1))[1].split('/', 1)
+        uniHostname = uniIdToken[0]
+        uniPort = uniIdToken[1]
+        uniBwpCfgCbs = root.bwpCfgCbs
+        uniBwpCfgEbs = root.bwpCfgEbs
+        uniBwpCfgCir = root.bwpCfgCir
+        uniBwpCfgEir = root.bwpCfgEir
+
+        uni_json_data = {}
+        uni_json_data['scaEthFppUniN'] = {}
+        uni_json_data['scaEthFppUniN']['ceVlanId'] = obj.vlanid
+        uni_json_data['scaEthFppUniN']["transportPort"] = {}
+        uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"] = {}
+
+        uni_json_data['scaEthFppUniN']["transportPort"]["Hostname"] = uniHostname
+        uni_json_data['scaEthFppUniN']["transportPort"]["Port"] = uniPort
+        uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCbs"] = uniBwpCfgCbs
+        uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEbs"] = uniBwpCfgEbs
+        uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCir"] = uniBwpCfgCir
+        uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEir"] = uniBwpCfgEir
+
+        r2mp_json_data["SCA_ETH_Flow_Points"].append(uni_json_data)
+
+        for ep in obj.eps.all():
+            uniId = ep.pid
+            uniIdToken = (uniId.split('.', 1))[1].split('/', 1)
+            uniHostname = uniIdToken[0]
+            uniPort = uniIdToken[1]
+            uniBwpCfgCbs = ep.bwpCfgCbs
+            uniBwpCfgEbs = ep.bwpCfgEbs
+            uniBwpCfgCir = ep.bwpCfgCir
+            uniBwpCfgEir = ep.bwpCfgEir
+
+            uni_json_data = {}
+            uni_json_data['scaEthFppUniN'] = {}
+            uni_json_data['scaEthFppUniN']['ceVlanId'] = obj.vlanid
+            uni_json_data['scaEthFppUniN']["transportPort"] = {}
+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"] = {}
+
+            uni_json_data['scaEthFppUniN']["transportPort"]["Hostname"] = uniHostname
+            uni_json_data['scaEthFppUniN']["transportPort"]["Port"] = uniPort
+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCbs"] = uniBwpCfgCbs
+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEbs"] = uniBwpCfgEbs
+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgCir"] = uniBwpCfgCir
+            uni_json_data['scaEthFppUniN']["interfaceCfgIngressBwp"]["bwpCfgEir"] = uniBwpCfgEir
+
+            r2mp_json_data["SCA_ETH_Flow_Points"].append(uni_json_data)
+
+        return r2mp_json_data
+
+    def create_network_connectivity(self, obj):
+
+        restCtrlUrl = self.networkdevice.restCtrlUrl
+        username = self.networkdevice.username
+        password = self.networkdevice.password
+
+        evcServiceType = obj.type
+        if (evcServiceType == "Point_To_Point"):
+            network_connectivity_json_data = self.create_point_to_point_connectivity_json_data(obj)
+        elif (evcServiceType == "Multipoint_To_Multipoint"):
+            network_connectivity_json_data = self.create_multipoint_to_multipoint_connectivity_json_data(obj)
+        elif (evcServiceType == "Root_Multipoint"):
+            network_connectivity_json_data = self.create_root_multipoint_connectivity_json_data(obj)
+        else:
+            raise Exception("OnosApiError: get_network_links() - unknown link type")
 
         headers = {'Content-Type': 'application/json'}
-
         resp = requests.post('{}/mef-sca-api/SCA_ETH_FDFr_EC'.format(restCtrlUrl),
-                             data=json.dumps(data), headers=headers, auth=HTTPBasicAuth(username, password))
+                             data=json.dumps(network_connectivity_json_data), headers=headers, auth=HTTPBasicAuth(username, password))
 
         if resp.status_code == 201:
             result = resp.json()
@@ -192,6 +431,7 @@
             obj.adminstate = "invalid"  # what's the meaning?
             obj.operstate = "inactive"
             obj.backend_status = '204 - No network resource'
+
             return False
 
         elif resp.status_code == 500:
@@ -201,9 +441,9 @@
             return False
 
         else:
-            raise Exception("OnosApiError: create_point_to_point_connectivity()")
+            raise Exception("OnosApiError: create_network_connectivity()")
 
-    def delete_point_to_point_connectivity(self, obj):
+    def delete_network_connectivity(self, obj):
 
         restCtrlUrl = self.networkdevice.restCtrlUrl
         username = self.networkdevice.username
@@ -229,4 +469,4 @@
             return False
 
         else:
-            raise Exception("OnosApiError: delete_point_to_point_connectivity()")
+            raise Exception("OnosApiError: delete_network_connectivity()")
diff --git a/xos/synchronizer/providers/metronetworktestprovider.py b/xos/synchronizer/providers/metronetworktestprovider.py
index 3c3f179..3bcbb92 100644
--- a/xos/synchronizer/providers/metronetworktestprovider.py
+++ b/xos/synchronizer/providers/metronetworktestprovider.py
@@ -3,6 +3,7 @@
 
 from xos.logger import Logger, logging
 from services.metronetwork.models import *
+from core.models import Site
 from synchronizers.metronetwork.providers.metronetworkprovider import MetroNetworkProvider
 
 logger = Logger(level=logging.INFO)
@@ -15,40 +16,18 @@
     # Method for retrieving all network ports from the backend system
     def get_network_ports(self):
         #
-        # Our Test Network Consists of three NetworkDevices (which correspond to ONOS instances):
+        # Our Test Network Consists of one NetworkDevice (which correspond to ONOS instance):
         #
-        #                    ONOS1-CORDPOD1
-        #                    ONOS2-MetroNetwork
-        #                    ONOW3-CORDPOD2
+        #  8 Ports
+        #  1 Eline (2 ports)
+        #  1 Etree (3 ports)
+        #  1 Elan (3 ports)
         #
-        #
-        #    Uni-NetworkEdgePort3--
-        #    Uni-NetworkEdgePort11-
-        #    Uni-NetworkEdgePort5--ONOS1-CORDPOD1-NetworkPort6
-        #            NetworkPort4--                     |
-        #                                        NetworkPort1-ONOS2-MetroNetwork
-        #                                        NetworkPort2-
-        #                                             |
-        #    Uni-NetworkEdgePort7--ONOS3-CORDPOD2-NetworkPort10
-        #    Uni-NetworkEdgePort9--
-        #    Uni-NetworkEdgePort12-
-        #        NetworkPort8--
-        #
-        #  Note: NetworkPorts can be endpoints of Interlinks and NetworkPointToPointConnections
-        #              they can be seem as a simple port.
-        #        NetworkEdgePorts are UNIs in the network, so are specicially user facing.
-        #
-        #
-        # InterLinks - Port1 - Port6
-        #              Port2 - Port10
-        #
-        # NetworkPointToPointConnections: Port1 - Port2
-        #                                 Port4 - Port6
-        #                                 Port8 - Port10
-        #
-        # NetworkEdgeToEdgePointConnections: Port3 - Port7
-        #
-        # NetworkMultipointConnection: Port11 - Port5 - Port9 - Port12
+        #  2 Sites - Representing Two R-CORD Pods
+        #  2 Ports, One-per-site
+        #  1 Bandwidth Profile
+        #  2 Service Spokes
+        #  1 VnodGlobalService
 
         objs = []
 
@@ -56,14 +35,9 @@
         if self.networkdevice.id != 'TestMetroNet':
             return objs
 
-        # Ok - in the test class we cheat and create one NetworkDevice with 8 NetworkEdgePorts
+        # Set the parent device id to just be the Test NetworkDevice
         device1 = NetworkDevice()
-        device1.id = 'TestCORDNet'
-        device1.administrativeState = 'enabled'
-        device1.restCtrlUrl = 'testCordPod1.onlab.net:8000'
-        device1.username = 'karaf'
-        device1.password = 'karaf'
-        objs.append(device1)
+        device1.id = self.networkdevice.id
 
         port1 = NetworkEdgePort()
         port1.element = device1
@@ -176,11 +150,6 @@
         for port in allports:
             objs.append(port)
 
-        # Ok - in the test class we cheat and take down the adjunct Fake NetworkDevices Devices
-        device1 = NetworkDevice()
-        device1.id = 'TestCORDNet'
-        objs.append(device1)
-
         return objs
 
     def get_network_links(self):
@@ -189,7 +158,7 @@
 
         # Connectivity object - Point to Point
         cordpod1device = NetworkDevice()
-        cordpod1device.id = 'TestCORDNet'
+        cordpod1device.id = self.networkdevice.id
 
         # Edge to Edge Point Connectivity Objects
         edgetoedgeconnectivity = NetworkEdgeToEdgePointConnection()
@@ -239,6 +208,81 @@
         edge2multipointconnectivity.eps_createbuffer = json.dumps(myjsonstr)
         objs.append(edge2multipointconnectivity)
 
+        # Create Objects for VnodGlobal Sort of Testing
+
+        # Bandwidth Profile
+
+        bwprofile = BandwidthProfile()
+        bwprofile.bwpcfgcbs  = 0
+        bwprofile.bwpcfgcir = 0
+        bwprofile.bwpcfgebs = 0
+        bwprofile.bwpcfgeir = 0
+        bwprofile.name = 'TestBWP'
+        objs.append(bwprofile)
+
+        # Two Sites
+        site1 = Site()
+        site1.name = 'CORDPod1'
+        site1.login_base = 'CordPod1'
+        site1.site_url = 'http://1.2.3.4:8080/VnodLocalApi'
+        objs.append(site1)
+
+        site2 = Site()
+        site2.name = 'CORDPod2'
+        site2.login_base = 'CordPod2'
+        site2.site_url = 'http://10.11.12.13:8080/VnodLocalApi'
+        objs.append(site2)
+
+        # Two Ports - one per Site
+
+        remoteport1 = RemotePort()
+        remoteport1.name = "CORDPOD1:Port1"
+        remoteport1.sitename = 'CordPod1'
+        remoteport1.edgeportname = cordpod1device.id + "." + "of:000000001/1"
+        objs.append(remoteport1)
+
+        remoteport2 = RemotePort()
+        remoteport2.name = "CORDPOD2:Port1"
+        remoteport2.sitename = 'CordPod2'
+        remoteport2.edgeportname = cordpod1device.id + "." + "of:000000001/2"
+        objs.append(remoteport2)
+
+        # One Spoke/Site
+        spoke1 = ServiceSpoke()
+        spoke1.name = 'TestSpoke1'
+        spoke1.remoteportname = "CORDPOD1:Port1"
+        spoke1.remotevnodid = 'CORDPod1:VnodLocal:1'
+        spoke1.operstate = 'inactive'
+        spoke1.adminstate = 'enabled'
+        spoke1.sitename = 'CordPod1'
+        objs.append(spoke1)
+
+        spoke2 = ServiceSpoke()
+        spoke2.name = 'TestSpoke2'
+        spoke2.remoteportname = "CORDPOD2:Port1"
+        spoke2.remotevnodid = 'CORDPod2:VnodLocal:1'
+        spoke2.operstate = 'active'
+        spoke2.adminstate = 'enabled'
+        spoke2.sitename = 'CordPod2'
+        objs.append(spoke2)
+
+        # One VnodGlobal Service
+        vnodglobal = VnodGlobalService()
+        vnodglobal.name = 'VnodGlobalPtToPtTest1'
+        vnodglobal.type = 'eline'
+        vnodglobal.vlanid = '100'
+        vnodglobal.operstate = 'active'
+        vnodglobal.adminstate = 'enabled'
+        vnodglobal.servicehandle = 'testhandle1'
+        vnodglobal.pointtopointsid = 'onos_eline_id'
+        vnodglobal.bwpname = 'TestBWP'
+
+        # Create JSON array for post-save behaviour
+        #
+        spokes = ['TestSpoke1', 'TestSpoke2']
+        myjsonstr = {'spokes': spokes}
+        vnodglobal.spokes_createbuffer = json.dumps(myjsonstr)
+        objs.append(vnodglobal)
 
         return objs
 
