diff --git a/xos/Makefile.service b/xos/Makefile.service
new file mode 100644
index 0000000..9fb96f4
--- /dev/null
+++ b/xos/Makefile.service
@@ -0,0 +1,18 @@
+# Replace the line below with the location of xosgen
+PREFIX=.
+XOSGEN=$(PREFIX)/tool/xosgen
+
+DJANGO_TARGET=$(PREFIX)/targets/service.xtarget
+XPROTOS_TMP := $(shell mktemp)
+
+xprotos = $(wildcard *.xproto)
+
+all: models.py
+
+models.py: $(xprotos)
+	$(XOSGEN) --attic attic --target $(DJANGO_TARGET) --output $@ $<
+
+.PHONY: all
+	
+clean:
+	rm -f models.py
diff --git a/xos/admin.py b/xos/admin.py
index 9f5a2b0..10814b0 100644
--- a/xos/admin.py
+++ b/xos/admin.py
@@ -4,120 +4,36 @@
 from core.admin import XOSBaseAdmin
 from django.contrib import admin
 from django import forms
-from services.metronetwork.models import *
 
 
-class MetroNetworkSystemAdmin(ReadOnlyAwareAdmin):
-    model = MetroNetworkSystem
-    verbose_name = "MetroNetwork System"
-    verbose_name_plural = "MetroNetwork System"
-    list_display = ("name", "administrativeState")
-    list_display_links = ('name',)
-    fieldsets = [(None, {
-        'fields': ['name', 'administrativeState', 'description'],
-        'classes': ['suit-tab suit-tab-general']})]
-
-class NetworkDeviceAdminForm(forms.ModelForm):
-
-    password = forms.CharField(required=False, widget = forms.PasswordInput(render_value=True))
-
-    class Meta:
-        model = NetworkDevice
-        fields = '__all__'
-
-
-class NetworkDeviceAdmin(XOSBaseAdmin):
-    verbose_name = "Network Device"
-    verbose_name_plural = "Network Devices"
-    form = NetworkDeviceAdminForm
-    list_display = ('id', 'restCtrlUrl', 'administrativeState', 'username')
-    list_display_links = ('id', 'restCtrlUrl', 'administrativeState', 'username')
-
-    fields = ('id', 'restCtrlUrl', 'administrativeState', 'username', 'password')
-
-class NetworkEdgePortAdmin(XOSBaseAdmin):
-    verbose_name = "Network Edge Port"
-    verbose_name_plural = "Network Edge Ports"
-    list_display = ('id', 'pid', 'element', 'bwpCfgCbs', 'bwpCfgEbs', 'bwpCfgCir', 'bwpCfgEir', 'name', 'location', 'latlng')
-    list_display_links = ('id', 'pid', 'element', 'bwpCfgCbs', 'bwpCfgEbs', 'bwpCfgCir', 'bwpCfgEir')
-
-    fields = ('id', 'pid', 'element', 'bwpCfgCbs', 'bwpCfgEbs', 'bwpCfgCir', 'bwpCfgEir', 'name', 'location', 'latlng')
-    readonly_fields = ('id', 'pid', 'element', 'bwpCfgCbs', 'bwpCfgEbs', 'bwpCfgCir', 'bwpCfgEir')
-
-class NetworkEdgeToEdgePointConnectionAdmin(XOSBaseAdmin):
-    verbose_name = "Metro Network E-Line Service"
-    verbose_name_plural = "Metro Network E-Line Services"
-    list_display = ('id', 'name', 'sid', 'type', 'vlanid', 'uni1', 'uni2', 'adminstate', 'operstate')
-    list_display_links = ('id', 'name', 'sid', 'type', 'vlanid', 'uni1', 'uni2', 'adminstate', 'operstate')
-
-    fields = ('id', 'name', 'sid', 'type', 'vlanid', 'uni1', 'uni2', 'adminstate', 'operstate', 'backend_status')
-    readonly_fields = ('id', 'sid', 'backend_status')
-
-class NetworkMultipointToMultipointConnectionAdmin(XOSBaseAdmin):
-    verbose_name = "Metro Network E-LAN Service"
-    verbose_name_plural = "Metro Network E-LAN Services"
-    list_display = ('id', 'name', 'sid', 'type', 'vlanid', 'adminstate', 'operstate')
-    list_display_links = ('id', 'name', 'sid', 'type', 'vlanid', 'adminstate', 'operstate')
-
-    fields = ('id', 'name', 'sid', 'type', 'vlanid', 'eps', 'adminstate', 'operstate', 'backend_status')
-    readonly_fields = ('id', 'sid', 'backend_status')
-
-class NetworkEdgeToMultipointConnectionAdmin(XOSBaseAdmin):
-    verbose_name = "Metro Network E-Tree Service"
-    verbose_name_plural = "Metro Network E-Tree Services"
-    list_display = ('id', 'name', 'sid', 'type', 'vlanid', 'adminstate', 'operstate')
-    list_display_links = ('id', 'name', 'sid', 'type', 'vlanid', 'adminstate', 'operstate')
-
-    fields = ('id', 'name', 'sid', 'type', 'vlanid', 'root', 'eps', 'adminstate', 'operstate', 'backend_status')
-    readonly_fields = ('id', 'sid', 'backend_status')
-
-class RemotePortAdmin(XOSBaseAdmin):
-    verbose_name = "Remote Port"
-    verbose_name_plural = "Remote Ports"
-    list_display = ('name', 'remoteportsite', 'edgeport')
-    list_display_links = ('name', 'remoteportsite', 'edgeport')
-
-    fields = ('name', 'remoteportsite', 'edgeport')
-
-class BandwidthProfileAdmin(XOSBaseAdmin):
+class XOSMetronetBandwithProfileAdmin(XOSBaseAdmin):
     verbose_name = "Bandwidth Profile"
-    verbose_name_plural = "Bandwidth Profiles"
-    list_display = ('bwpcfgcbs', 'bwpcfgebs', 'bwpcfgcir', 'bwpcfgeir', 'name')
-    list_display_links = ('bwpcfgcbs', 'bwpcfgebs', 'bwpcfgcir', 'bwpcfgeir', 'name')
+    list_display = ('cbs','ebs','cir','eir','name')
 
-    fields = ('bwpcfgcbs', 'bwpcfgebs', 'bwpcfgcir', 'bwpcfgeir', 'name')
+    fields = ('cbs', 'ebs', 'cir', 'eir', 'name')
 
-class ServiceSpokeAdmin(XOSBaseAdmin):
-    verbose_name = "Service Spoke"
-    verbose_name_plural = "Service Spokes"
-    list_display = ('name','vnodlocalsite', 'remotesubscriber', 'adminstate', 'operstate', 'autoattached')
-    list_display_links = ('name','vnodlocalsite', 'remotesubscriber', 'adminstate', 'operstate', 'autoattached')
+class XOSMetronetUNIAdmin(XOSBaseAdmin):
+    verbose_name = "User Network Interface"
+    list_display = ('tenant', 'vlanIds', 'cpe_id', 'latlng', 'name')
+    fields = ('tenant','vlanIds', 'cpe_id', 'latlng', 'name')
 
-    fields = ('name', 'id','vnodlocalsite', 'vnodlocalport', 'remotesubscriber', 'adminstate', 'operstate', 'backend_status', 'autoattached')
-    readonly_fields = ('id', 'remotesubscriber', 'adminstate', 'operstate', 'backend_status')
+class XOSMetronetEnterpriseLocationAdmin(XOSBaseAdmin):
+    verbose_name = "Enterprise Location"
+    list_display = ('name', 'cord_site_ip', 'cord_site_port', 'cord_site_username', 'cord_site_password', 'cord_site_type')
+    fields = ('name', 'cord_site_ip', 'cord_site_port', 'cord_site_username', 'cord_site_password', 'cord_site_type')
 
-class VnodGlobalServiceAdmin(XOSBaseAdmin):
-    verbose_name = "VNOD Global Service"
-    verbose_name_plural = "VNOD Global Services"
-    list_display = ('servicehandle', 'vlanid', 'type','operstate', 'adminstate')
-    list_display_links = ('servicehandle', 'vlanid', 'type','operstate', 'adminstate')
+class XOSMetronetOnosModelAdmin(XOSBaseAdmin):
+    verbose_name = "Open Network Operating System"
+    list_display = ('name', 'onos_ip', 'onos_port', 'onos_username', 'onos_password', 'onos_type')
+    fields = ('name', 'onos_ip', 'onos_port', 'onos_username', 'onos_password', 'onos_type')
 
-    fields = (
-        'id', 'servicehandle', 'vlanid', 'type', 'metronetworkmultipoint', 'metronetworkpointtopoint', 'metronetworkroottomultipoint', 'operstate', 'adminstate', 'spokes', 'bandwidthProfile')
-    readonly_fields = (
-        'id', 'operstate', 'backend_status', 'metronetworkmultipoint', 'metronetworkpointtopoint', 'metronetworkroottomultipoint')
+class XOSMetronetELineAdmin(XOSBaseAdmin):
+    verbose_name = "Ethernet Virtual Private Line"
+    list_display = ('name', 'connect_point_1_id', 'connect_point_2_id', 'vlanids', 'cord_site_name', 'bwp')
+    fields = ('name', 'connect_point_1_id', 'connect_point_2_id', 'vlanids', 'cord_site_name', 'bwp')
 
-admin.site.register(MetroNetworkSystem, MetroNetworkSystemAdmin)
-admin.site.register(NetworkDevice, NetworkDeviceAdmin)
-admin.site.register(NetworkEdgePort, NetworkEdgePortAdmin)
-admin.site.register(NetworkEdgeToEdgePointConnection, NetworkEdgeToEdgePointConnectionAdmin)
-admin.site.register(NetworkMultipointToMultipointConnection, NetworkMultipointToMultipointConnectionAdmin)
-admin.site.register(NetworkEdgeToMultipointConnection, NetworkEdgeToMultipointConnectionAdmin)
-admin.site.register(BandwidthProfile, BandwidthProfileAdmin)
-admin.site.register(ServiceSpoke, ServiceSpokeAdmin)
-admin.site.register(VnodGlobalService, VnodGlobalServiceAdmin)
-admin.site.register(RemotePort, RemotePortAdmin)
-
-
-
-
+admin.site.register(XOSMetronetBandwithProfile, XOSMetronetBandwithProfileAdmin)
+admin.site.register(XOSMetronetUNI, XOSMetronetUNIAdmin)
+admin.site.register(XOSMetronetEnterpriseLocation, XOSMetronetEnterpriseLocationAdmin)
+admin.site.register(XOSMetronetOnosModel, XOSMetronetOnosModelAdmin)
+admin.site.register(XOSMetronetELine, XOSMetronetELineAdmin)
\ No newline at end of file
diff --git a/xos/api/service/metronetworkservice/metronetworkservice.py b/xos/api/service/metronetworkservice/metronetworkservice.py
deleted file mode 100644
index cf6623d..0000000
--- a/xos/api/service/metronetworkservice/metronetworkservice.py
+++ /dev/null
@@ -1,908 +0,0 @@
-from django.http import HttpResponseBadRequest
-from rest_framework.response import Response
-from rest_framework.views import APIView
-from rest_framework import serializers, filters, status
-from api.xosapi_helpers import PlusModelSerializer, XOSViewSet, ReadOnlyField
-from services.metronetwork.models import *
-from random import randint
-import json
-from django.core.exceptions import ObjectDoesNotExist
-from django.core import serializers as jsonserializer
-
-class MetroNetworkSystemSerializer(PlusModelSerializer):
-        id = ReadOnlyField()
-        humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-
-        class Meta:
-            model = MetroNetworkSystem
-            fields = ('humanReadableName',
-                      'id',
-                      'restUrl',
-                      'administrativeState',
-                      'operationalState')
-
-        def getHumanReadableName(self, obj):
-            return obj.name
-
-class MetroNetworkSystemViewSet(XOSViewSet):
-    base_name = "metronetworksystem"
-    method_name = "metronetworksystem"
-    method_kind = "viewset"
-    queryset = MetroNetworkSystem.objects.all()
-    serializer_class = MetroNetworkSystemSerializer
-
-    @classmethod
-    def get_urlpatterns(self, api_path="^"):
-        patterns = super(MetroNetworkSystemViewSet, self).get_urlpatterns(api_path=api_path)
-
-        return patterns
-
-    def list(self, request):
-        object_list = self.filter_queryset(self.get_queryset())
-
-        serializer = self.get_serializer(object_list, many=True)
-
-        return Response(serializer.data)
-
-
-class NetworkEdgePortSerializer(PlusModelSerializer):
-    id = ReadOnlyField()
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-
-    class Meta:
-        model = NetworkEdgePort
-        fields = ('humanReadableName',
-                  'pid',
-                  'id',
-                  'element',
-                  'bwpCfgCbs',
-                  'bwpCfgEbs',
-                  'bwpCfgCir',
-                  'bwpCfgEir',
-                  'name',
-                  'location',
-                  'latlng')
-
-
-    def getHumanReadableName(self, obj):
-        return obj.id
-
-class NetworkEdgePortViewSet(XOSViewSet):
-    base_name = "UNI"
-    method_name = "UNI"
-    method_kind = "viewset"
-    queryset = NetworkEdgePort.objects.all()
-    serializer_class = NetworkEdgePortSerializer
-
-    @classmethod
-    def get_urlpatterns(self, api_path="^"):
-        patterns = super(NetworkEdgePortViewSet, self).get_urlpatterns(api_path=api_path)
-
-        return patterns
-
-    def list(self, request):
-        object_list = self.filter_queryset(self.get_queryset())
-
-        serializer = self.get_serializer(object_list, many=True)
-
-        return Response(serializer.data)
-
-class NetworkEdgeToEdgePointConnectionSerializer(PlusModelSerializer):
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-    uni1 = NetworkEdgePortSerializer(required=True, read_only=False)
-    uni2 = NetworkEdgePortSerializer(required=True, read_only=False)
-
-    class Meta:
-        model = NetworkEdgeToEdgePointConnection
-
-        fields = ('humanReadableName',
-                  'sid',
-                  'id',
-                  'type',
-                  'uni1',
-                  'uni2',
-                  'operstate',
-                  'adminstate'
-                  )
-
-    def getHumanReadableName(self, obj):
-        return obj.id
-
-class NetworkEdgeToEdgePointConnectionViewSet(XOSViewSet):
-    base_name = "ELINE"
-    method_name = "ELINE"
-    method_kind = "viewset"
-    queryset = NetworkEdgeToEdgePointConnection.get_service_objects().all()
-    serializer_class = NetworkEdgeToEdgePointConnectionSerializer
-
-    @classmethod
-    def get_urlpatterns(self, api_path="^"):
-        patterns = super(NetworkEdgeToEdgePointConnectionViewSet, self).get_urlpatterns(api_path=api_path)
-
-        return patterns
-
-    def list(self, request):
-
-        object_list = self.filter_queryset(self.get_queryset())
-
-        serializer = self.get_serializer(object_list, many=True)
-
-        return Response(serializer.data)
-
-    def destroy(self, request, pk=None):
-        ELineConnectionToDelete = NetworkEdgeToEdgePointConnection.objects.get(pk=pk)
-
-        if (ELineConnectionToDelete):
-            ELineConnectionToDelete.adminstate = 'deactivationrequested'
-            ELineConnectionToDelete.save()
-        else:
-            return Response(status=status.HTTP_400_BAD_REQUEST)
-
-        return Response(status=status.HTTP_200_OK)
-
-
-    def create(self, validated_data):
-
-        ELineConnection = NetworkEdgeToEdgePointConnection()
-        ELineConnection.sid = validated_data.data.get('sid')
-        ELineConnection.adminstate = validated_data.data.get('adminstate')
-        ELineConnection.operstate = validated_data.data.get('operstate')
-        ELineConnection.sid = validated_data.data.get('sid')
-        ELineConnection.type = 'Point_To_Point'
-
-        uni1 = validated_data.data.get('uni1')
-        uni2 = validated_data.data.get('uni2')
-
-        uni1 = NetworkEdgePort.objects.get(pk=uni1['id'])
-        uni2 = NetworkEdgePort.objects.get(pk=uni2['id'])
-
-        ELineConnection.uni1 = uni1
-        ELineConnection.uni2 = uni2
-        ELineConnection.save()
-
-        response_data = {}
-        response_data['sid'] = ELineConnection.sid
-        response_data['adminstate'] = ELineConnection.adminstate
-        response_data['operstate'] = ELineConnection.operstate
-        response_data['type'] = ELineConnection.type
-
-        response_data['uni1'] = {}
-        response_data['uni1']['id'] = uni1.id
-        response_data['uni1']['pid'] = uni1.pid
-        response_data['uni1']['bwpCfgCbs'] = uni1.bwpCfgCbs
-        response_data['uni1']['bwpCfgEbs'] = uni1.bwpCfgEbs
-        response_data['uni1']['bwpCfgCir'] = uni1.bwpCfgCir
-        response_data['uni1']['bwpCfgEir'] = uni1.bwpCfgEir
-        response_data['uni1']['name'] = uni1.name
-        response_data['uni1']['location'] = uni1.location
-        response_data['uni1']['latlng'] = uni1.latlng
-
-        response_data['uni2'] = {}
-        response_data['uni2']['id'] = uni2.id
-        response_data['uni2']['pid'] = uni2.pid
-        response_data['uni2']['bwpCfgCbs'] = uni2.bwpCfgCbs
-        response_data['uni2']['bwpCfgEbs'] = uni2.bwpCfgEbs
-        response_data['uni2']['bwpCfgCir'] = uni2.bwpCfgCir
-        response_data['uni2']['bwpCfgEir'] = uni2.bwpCfgEir
-        response_data['uni2']['name'] = uni1.name
-        response_data['uni2']['location'] = uni1.location
-        response_data['uni2']['latlng'] = uni1.latlng
-
-        return Response(response_data)
-
-class NetworkEdgeToMultipointConnectionSerializer(PlusModelSerializer):
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-    root = NetworkEdgePortSerializer(required=True, read_only=False)
-    eps = NetworkEdgePortSerializer(required=True, read_only=False, many=True)
-
-    class Meta:
-        model = NetworkEdgeToMultipointConnection
-
-        fields = ('humanReadableName',
-                  'sid',
-                  'id',
-                  'type',
-                  'root',
-                  'eps',
-                  'operstate',
-                  'adminstate'
-                  )
-
-    def getHumanReadableName(self, obj):
-        return obj.id
-
-class NetworkEdgeToMultipointConnectionViewSet(XOSViewSet):
-    base_name = "ETREE"
-    method_name = "ETREE"
-    method_kind = "viewset"
-    queryset = NetworkEdgeToMultipointConnection.get_service_objects().all()
-    serializer_class = NetworkEdgeToMultipointConnectionSerializer
-
-    @classmethod
-    def get_urlpatterns(self, api_path="^"):
-        patterns = super(NetworkEdgeToMultipointConnectionViewSet, self).get_urlpatterns(api_path=api_path)
-
-        return patterns
-
-    def list(self, request):
-
-        object_list = self.filter_queryset(self.get_queryset())
-
-        serializer = self.get_serializer(object_list, many=True)
-
-        return Response(serializer.data)
-
-    def destroy(self, request, pk=None):
-        ETreeConnectionToDelete = NetworkEdgeToMultipointConnection.objects.get(pk=pk)
-
-        if (ETreeConnectionToDelete):
-            ETreeConnectionToDelete.adminstate = 'deactivationrequested'
-            ETreeConnectionToDelete.save()
-        else:
-            return Response(status=status.HTTP_400_BAD_REQUEST)
-
-        return Response(status=status.HTTP_200_OK)
-
-    def create(self, validated_data):
-
-        ETreeConnection = NetworkEdgeToMultipointConnection()
-        ETreeConnection.sid = validated_data.data.get('sid')
-        ETreeConnection.adminstate = validated_data.data.get('adminstate')
-        ETreeConnection.operstate = validated_data.data.get('operstate')
-        ETreeConnection.sid = validated_data.data.get('sid')
-        ETreeConnection.type = 'Root_Multipoint'
-
-        root_id = validated_data.data.get('root')
-        eps_list = validated_data.data.get('eps')
-
-        root = NetworkEdgePort.objects.get(pk=root_id)
-        ETreeConnection.root = root
-        ETreeConnection.save()
-
-        for ep in eps_list:
-            port = NetworkEdgePort.objects.get(pk=ep['id'])
-            ETreeConnection.eps.add(port)
-
-        response_data = {}
-        response_data['sid'] = ETreeConnection.sid
-        response_data['adminstate'] = ETreeConnection.adminstate
-        response_data['operstate'] = ETreeConnection.operstate
-        response_data['type'] = ETreeConnection.type
-
-        response_data['root'] = {}
-        response_data['root']['id'] = root.id
-        response_data['root']['pid'] = root.pid
-        response_data['root']['bwpCfgCbs'] = root.bwpCfgCbs
-        response_data['root']['bwpCfgEbs'] = root.bwpCfgEbs
-        response_data['root']['bwpCfgCir'] = root.bwpCfgCir
-        response_data['root']['bwpCfgEir'] = root.bwpCfgEir
-        response_data['root']['name'] = root.name
-        response_data['root']['location'] = root.location
-        response_data['root']['latlng'] = root.latlng
-
-        eps_data = []
-        for ep in ETreeConnection.eps.all():
-            port = {}
-            port['id'] = ep.id
-            port['pid'] = ep.pid
-            port['bwpCfgCbs'] = ep.bwpCfgCbs
-            port['bwpCfgEbs'] = ep.bwpCfgEbs
-            port['bwpCfgCir'] = ep.bwpCfgCir
-            port['bwpCfgEir'] = ep.bwpCfgEir
-            port['name'] = ep.name
-            port['location'] = ep.location
-            port['latlng'] = ep.latlng
-            eps_data.append(port)
-
-        response_data['eps'] = eps_data
-
-        return Response(response_data)
-
-class NetworkMultipointToMultipointConnectionSerializer(PlusModelSerializer):
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-    eps = NetworkEdgePortSerializer(required=True, read_only=False, many=True)
-
-    class Meta:
-        model = NetworkMultipointToMultipointConnection
-
-        fields = ('humanReadableName',
-                  'sid',
-                  'id',
-                  'type',
-                  'eps',
-                  'operstate',
-                  'adminstate'
-                  )
-
-    def getHumanReadableName(self, obj):
-        return obj.id
-
-class NetworkMultipointToMultipointConnectionViewSet(XOSViewSet):
-    base_name = "ELAN"
-    method_name = "ELAN"
-    method_kind = "viewset"
-    queryset = NetworkMultipointToMultipointConnection.get_service_objects().all()
-    serializer_class = NetworkMultipointToMultipointConnectionSerializer
-
-    @classmethod
-    def get_urlpatterns(self, api_path="^"):
-        patterns = super(NetworkMultipointToMultipointConnectionViewSet, self).get_urlpatterns(api_path=api_path)
-
-        return patterns
-
-    def list(self, request):
-
-        object_list = self.filter_queryset(self.get_queryset())
-
-        serializer = self.get_serializer(object_list, many=True)
-
-        return Response(serializer.data)
-
-    def destroy(self, request, pk=None):
-        ETreeConnectionToDelete = NetworkMultipointToMultipointConnection.objects.get(pk=pk)
-
-        if (ETreeConnectionToDelete):
-            ETreeConnectionToDelete.adminstate = 'deactivationrequested'
-            ETreeConnectionToDelete.save()
-        else:
-            return Response(status=status.HTTP_400_BAD_REQUEST)
-
-        return Response(status=status.HTTP_200_OK)
-
-    def create(self, validated_data):
-
-        ELanConnection = NetworkMultipointToMultipointConnection()
-        ELanConnection.sid = validated_data.data.get('sid')
-        ELanConnection.adminstate = validated_data.data.get('adminstate')
-        ELanConnection.operstate = validated_data.data.get('operstate')
-        ELanConnection.sid = validated_data.data.get('sid')
-        ELanConnection.type = 'Multipoint_To_Multipoint'
-
-        eps_list = validated_data.data.get('eps')
-        ELanConnection.save()
-
-        for ep in eps_list:
-            port = NetworkEdgePort.objects.get(pk=ep['id'])
-            ELanConnection.eps.add(port)
-
-        response_data = {}
-        response_data['sid'] = ELanConnection.sid
-        response_data['adminstate'] = ELanConnection.adminstate
-        response_data['operstate'] = ELanConnection.operstate
-        response_data['type'] = ELanConnection.type
-
-        eps_data = []
-        for ep in ELanConnection.eps.all():
-            port = {}
-            port['id'] = ep.id
-            port['pid'] = ep.pid
-            port['bwpCfgCbs'] = ep.bwpCfgCbs
-            port['bwpCfgEbs'] = ep.bwpCfgEbs
-            port['bwpCfgCir'] = ep.bwpCfgCir
-            port['bwpCfgEir'] = ep.bwpCfgEir
-            port['name'] = ep.name
-            port['location'] = ep.location
-            port['latlng'] = ep.latlng
-            eps_data.append(port)
-
-        response_data['eps'] = eps_data
-
-        return Response(response_data)
-
-############################
-
-class BandwidthProfileSerializer(PlusModelSerializer):
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-
-    class Meta:
-        model = BandwidthProfile
-
-
-        fields = ('humanReadableName',
-                  'id',
-                  'bwpcfgcbs',
-                  'bwpcfgebs',
-                  'bwpcfgcir',
-                  'bwpcfgeir',
-                  'name'
-                  )
-
-    def getHumanReadableName(self, obj):
-        return obj.name
-
-class BandwidthProfileViewSet(XOSViewSet):
-    base_name = "BANDWIDTH_PROFILE"
-    method_name = "BANDWIDTH_PROFILE"
-    method_kind = "viewset"
-    queryset = BandwidthProfile.objects.all()
-    serializer_class = BandwidthProfileSerializer
-
-    @classmethod
-    def get_urlpatterns(self, api_path="^"):
-        patterns = super(BandwidthProfileViewSet, self).get_urlpatterns(api_path=api_path)
-
-        return patterns
-
-    def list(self, request):
-
-        object_list = self.filter_queryset(self.get_queryset())
-
-        serializer = self.get_serializer(object_list, many=True)
-
-        return Response(serializer.data)
-
-    def create(self, validated_data):
-
-        bandwidthProfile = BandwidthProfile()
-        bandwidthProfile.name = validated_data.data.get('name')
-        bandwidthProfile.bwpcfgcbs = validated_data.data.get('bwpcfgcbs')
-        bandwidthProfile.bwpcfgebs = validated_data.data.get('bwpcfgebs')
-        bandwidthProfile.bwpcfgcir = validated_data.data.get('bwpcfgcir')
-        bandwidthProfile.bwpcfgeir = validated_data.data.get('bwpcfgeir')
-
-        bandwidthProfile.save()
-
-        response_data = {}
-        response_data['name'] = bandwidthProfile.name
-        response_data['bwpcfgcbs'] = bandwidthProfile.bwpcfgcbs
-        response_data['bwpcfgebs'] = bandwidthProfile.bwpcfgebs
-        response_data['bwpcfgcir'] = bandwidthProfile.bwpcfgeir
-        response_data['bwpcfgcir'] = bandwidthProfile.bwpcfgcir
-        response_data['id'] = bandwidthProfile.id
-
-        return Response(response_data)
-
-class UserNetworkInterfaceSerializer(PlusModelSerializer):
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-
-    class Meta:
-        model = UserNetworkInterface
-
-        fields = ('humanReadableName',
-                  'id',
-                  'bwpcfgcbs',
-                  'bwpcfgebs',
-                  'bwpcfgcir',
-                  'bwpcfgeir',
-                  'name'
-                  )
-
-    def getHumanReadableName(self, obj):
-        return obj.name
-
-class UserNetworkInterfaceViewSet(XOSViewSet):
-    base_name = "USER_NETWORK_INTERFACE"
-    method_name = "USER_NETWORK_INTERFACE"
-    method_kind = "viewset"
-    queryset = UserNetworkInterface.objects.all()
-    serializer_class = UserNetworkInterfaceSerializer
-
-    @classmethod
-    def get_urlpatterns(self, api_path="^"):
-        patterns = super(UserNetworkInterfaceViewSet, self).get_urlpatterns(api_path=api_path)
-
-        return patterns
-
-    def list(self, request):
-
-        object_list = self.filter_queryset(self.get_queryset())
-
-        serializer = self.get_serializer(object_list, many=True)
-
-        return Response(serializer.data)
-
-    def create(self, validated_data):
-
-        userNetworkInterface = UserNetworkInterface()
-
-        userNetworkInterface.name = validated_data.data.get('name')
-        userNetworkInterface.capacity = validated_data.data.get('capacity')
-        userNetworkInterface.bw_used = validated_data.data.get('bw_used')
-        userNetworkInterface.vlanIds = validated_data.data.get('vlanIds')
-        userNetworkInterface.location = validated_data.data.get('location')
-        userNetworkInterface.latlng = validated_data.data.get('latlng')
-
-        copyin_props = ['enabled', 'capacity', 'bw_used', 'vlanIds', 'location', 'latlng', 'name']
-
-        userNetworkInterface.save()
-
-        response_data = {}
-        response_data['name'] = userNetworkInterface.name
-        response_data['capacity'] = userNetworkInterface.capacity
-        response_data['bw_used'] = userNetworkInterface.bw_used
-        response_data['vlanIds'] = userNetworkInterface.vlanIds
-        response_data['location'] = userNetworkInterface.location
-        response_data['latlng'] = userNetworkInterface.latlng
-        response_data['id'] = userNetworkInterface.id
-
-        return Response(response_data)
-
-class VnodSiteSerializer(PlusModelSerializer):
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-
-    class Meta:
-        model = Site
-
-        fields = ('humanReadableName',
-                  'site_url',
-                  'enabled',
-                  'longitude',
-                  'latitude',
-                  'name'
-                  )
-
-    def getHumanReadableName(self, obj):
-        return obj.name
-
-class RemotePortSerializer(PlusModelSerializer):
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-    edgeport = NetworkEdgePortSerializer(read_only=True)
-    remoteportsite = VnodSiteSerializer(read_only=True)
-
-    class Meta:
-        model = RemotePort
-
-        fields = ('humanReadableName',
-                  'name',
-                  'edgeport',
-                  'id',
-                  'remoteportsite'
-                  )
-
-    def getHumanReadableName(self, obj):
-        return obj.name
-
-class ServiceSpokeSerializer(PlusModelSerializer):
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-    vnodlocalsite = VnodSiteSerializer(read_only=True)
-    vnodlocalport = RemotePortSerializer(read_only=True)
-
-    class Meta:
-        model = ServiceSpoke
-
-        fields = ('humanReadableName',
-                  'id',
-                  'name',
-                  'remotesubscriber',
-                  'remotevnodid',
-                  'autoattached',
-                  'operstate',
-                  'vnodlocalsite',
-                  'vnodlocalport'
-                  )
-
-    def getHumanReadableName(self, obj):
-        return obj.name
-
-class VnodGlobalServiceSerializer(PlusModelSerializer):
-    humanReadableName = serializers.SerializerMethodField("getHumanReadableName")
-    metronetworkroottomultipoint = NetworkEdgeToMultipointConnectionSerializer(read_only=True)
-    metronetworkmultipoint = NetworkMultipointToMultipointConnectionSerializer(read_only=True)
-    metronetworkpointtopoint = NetworkEdgeToEdgePointConnectionSerializer(read_only=True)
-    spokes = ServiceSpokeSerializer(read_only=True, many=True)
-    bandwidthProfile = BandwidthProfileSerializer(read_only=True)
-
-    class Meta:
-        model = VnodGlobalService
-
-        fields = ('humanReadableName',
-                  'servicehandle',
-                  'vlanid',
-                  'id',
-                  'type',
-                  'operstate',
-                  'adminstate',
-                  'metronetworkroottomultipoint',
-                  'metronetworkmultipoint',
-                  'metronetworkpointtopoint',
-                  'spokes',
-                  'bandwidthProfile',
-                  'name'
-                  )
-
-    def getHumanReadableName(self, obj):
-        return obj.name
-
-class VnodGlobalServiceViewSet(XOSViewSet):
-    base_name = "VNOD_GLOBAL_SERVICE"
-    method_name = "VNOD_GLOBAL_SERVICE"
-    method_kind = "viewset"
-    queryset = VnodGlobalService.get_service_objects().all()
-    serializer_class = VnodGlobalServiceSerializer
-
-    @classmethod
-    def get_urlpatterns(self, api_path="^"):
-        patterns = super(VnodGlobalServiceViewSet, self).get_urlpatterns(api_path=api_path)
-
-        return patterns
-
-    def list(self, request):
-
-        object_list = self.filter_queryset(self.get_queryset())
-
-        serializer = self.get_serializer(object_list, many=True)
-
-        return Response(serializer.data)
-
-    def destroy(self, request, pk=None):
-        VnodGlobalServiceToDelete = VnodGlobalService.objects.get(pk=pk)
-
-        if (VnodGlobalServiceToDelete):
-            VnodGlobalServiceToDelete.adminstate = 'deactivationrequested'
-            VnodGlobalServiceToDelete.save()
-        else:
-            return Response(status=status.HTTP_400_BAD_REQUEST)
-
-        return Response(status=status.HTTP_200_OK)
-
-    def create(self, validated_data):
-
-        vnodGlobalService = VnodGlobalService()
-
-        vnodGlobalService.name = validated_data.data.get('name')
-
-        if VnodGlobalService.objects.filter(
-                name=vnodGlobalService.name).exists():
-            return HttpResponseBadRequest('Error: VnodGlobalService name \'' +  vnodGlobalService.name
-                            + '\' already exists.')
-
-        vnodGlobalService.servicehandle = validated_data.data.get('servicehandle')
-        vnodGlobalService.adminstate = 'enabled'
-        vnodGlobalService.operstate = 'inactive'
-        vnodGlobalService.type = validated_data.data.get('type')
-
-        vnodGlobalService.vlanid = self.getUniqueVlandId()
-
-        bandwidth_profile = validated_data.data.get('bandwidthProfile')
-        bandwidthprofile = BandwidthProfile.objects.get(pk=bandwidth_profile['id'])
-        if (bandwidth_profile):
-            vnodGlobalService.bandwidthProfile = bandwidthprofile
-
-        vnodGlobalService.save()
-
-        spokes_list = validated_data.data.get('spokes')
-        if (spokes_list is None):
-            vnodGlobalService.delete()
-            return HttpResponseBadRequest('Error: No spokes found in request.')
-
-        for spoke in spokes_list:
-            vnodlocalsite = Site.objects.get(pk=spoke['vnodlocalsite']['id'])
-            servicespoke = ServiceSpoke()
-            servicespoke.vnodlocalsite = vnodlocalsite
-            servicespoke.vnodlocalport = self.getRandomRemotePort(vnodlocalsite)
-            servicespoke.name = spoke['name']
-            if (spoke.get('autoattached')):
-                servicespoke.autoattached = spoke['autoattached']
-            servicespoke.operstate = 'inactive'
-            servicespoke.adminstate = 'disabled'
-            servicespoke.save()
-            vnodGlobalService.spokes.add(servicespoke)
-
-        serializer = self.get_serializer(vnodGlobalService)
-        return Response(serializer.data)
-
-    def getUniqueVlandId(self):
-        unique = False
-        while not unique:
-            vlanid = randint(1, 4095)
-            vnodglobalservice = VnodGlobalService.get_service_objects().filter(vlanid=vlanid)
-            if (not vnodglobalservice):
-                unique = True
-        return vlanid
-
-    def getRandomRemotePort(self, site):
-        remotePort = RemotePort.objects.get(remoteportsite__name=site.name)
-        if (remotePort):
-            return remotePort
-        return None
-
-    @classmethod
-    def calculateVnodGlobalOperState(self, servicehandle):
-        vnodglobalservice = VnodGlobalService.get_service_objects().filter(servicehandle=servicehandle)
-        if (not vnodglobalservice):
-            HttpResponseBadRequest('Error: Could not find VnodGlobalObject with servicehandle=' + servicehandle)
-
-        vnodglobalservice = vnodglobalservice[0]
-        all_spokes_active_and_enabled = True
-
-        for spoke in vnodglobalservice.spokes.all():
-            if (spoke.operstate != 'active' or spoke.adminstate != 'enabled'):
-                all_spokes_active_and_enabled = False
-                break;
-
-        if (all_spokes_active_and_enabled):
-            vnodglobalservice.operstate = 'active'
-        else:
-            vnodglobalservice.operstate = 'inactive'
-
-        vnodglobalservice.save()
-        return all_spokes_active_and_enabled
-
-    @classmethod
-    def createService(self, servicehandle):
-        vnodglobalservice = VnodGlobalService.get_service_objects().filter(servicehandle=servicehandle)
-        if (not vnodglobalservice):
-            HttpResponseBadRequest('Error: Could not find VnodGlobalObject with servicehandle=' + servicehandle)
-
-        vnodglobalservice = vnodglobalservice[0]
-        if (vnodglobalservice.type == 'eline'):
-
-            spokes = vnodglobalservice.spokes.all()
-            uni1 = spokes[0].vnodlocalport.edgeport
-            uni2 = spokes[1].vnodlocalport.edgeport
-            name = 'ELine-' + str(vnodglobalservice.id)
-            type = 'Point_To_Point'
-            operstate = 'active'
-            adminstate = 'activationrequested'
-
-            eline = NetworkEdgeToEdgePointConnection()
-            eline.name = name
-            eline.type = type
-            eline.operstate = operstate
-            eline.adminstate = adminstate
-            eline.vlanid = vnodglobalservice.vlanid
-            eline.sid = name
-            eline.uni1 = NetworkEdgePort.objects.get(pid=uni1.pid)
-            eline.uni2 = NetworkEdgePort.objects.get(pid=uni2.pid)
-
-            eline.save()
-            vnodglobalservice.metronetworkpointtopoint = eline
-            vnodglobalservice.save()
-
-        elif (vnodglobalservice.type == 'elan'):
-
-            spokes = vnodglobalservice.spokes.all()
-
-            name = 'ELAN-' + str(vnodglobalservice.id)
-            type = 'Multipoint_To_Multipoint'
-            operstate = 'active'
-            adminstate = 'activationrequested'
-
-            elan = NetworkMultipointToMultipointConnection()
-            elan.name = name
-            elan.type = type
-            elan.operstate = 'inactive'
-            elan.adminstate = 'disabled'
-            elan.vlanid = vnodglobalservice.vlanid
-            elan.save()
-
-            for spoke in spokes:
-                uni = NetworkEdgePort.objects.get(pid=spoke.vnodlocalport.edgeport.pid)
-                elan.eps.add(uni)
-
-            elan.operstate = operstate
-            elan.adminstate = adminstate
-            elan.save()
-
-            vnodglobalservice.metronetworkmultipoint = elan
-            vnodglobalservice.save()
-
-        # TODO: elif (vnodglobalservice.type == 'etree'):
-
-class VnodGlobalServiceAutoAttachmentView(APIView):
-    method_kind = "list"
-    method_name = "vnodglobal_api_autoattach"
-
-    def get(self, request, format=None):
-        params = request.query_params
-        sitename = params.get('sitename')
-
-        if ( sitename is None):
-            HttpResponseBadRequest("Error: Request requires] 'sitename' as a query param.")
-
-        vnodglobalservices = VnodGlobalService.get_service_objects().filter(spokes__autoattached=True,
-                                                                            spokes__operstate='inactive',
-                                                                            spokes__vnodlocalsite__name=sitename)
-
-        if (not vnodglobalservices):
-            HttpResponseBadRequest({"handles" : []})
-
-        handles = []
-        for vnodglobalservice in vnodglobalservices:
-            if (vnodglobalservice.adminstate != 'disabled'):
-                handles.append(vnodglobalservice.servicehandle)
-
-        response_data = {'servicehandles' : handles}
-        return Response(response_data)
-
-class VnodGlobalServiceConfigurationView(APIView):
-    method_kind = "list"
-    method_name = "vnodglobal_api_configuration"
-
-    def get(self, request, format=None):
-        params = request.query_params
-        servicehandle = params.get('servicehandle')
-        sitename = params.get('sitename')
-
-        if (servicehandle is None or sitename is None):
-            HttpResponseBadRequest("Error: Request requires 'servicehandle' and 'sitename' as query params.")
-
-        vnodglobalservice = VnodGlobalService.get_service_objects().filter(servicehandle=servicehandle)
-        if (not vnodglobalservice):
-            HttpResponseBadRequest('Error: Could not find VnodGlobalObject with servicehandle=' + servicehandle)
-
-        vnodglobalservice = vnodglobalservice[0]
-        response_data = {}
-        response_data['vlanid'] = vnodglobalservice.vlanid
-
-        for spoke in vnodglobalservice.spokes.all():
-            if (spoke.vnodlocalsite.name == sitename and spoke.adminstate != 'configured'):
-                response_data['port'] = {}
-                response_data['port']['name'] = spoke.vnodlocalport.name
-                break;
-
-        return Response(response_data)
-
-class VnodGlobalServiceActivationView(APIView):
-    method_kind = "list"
-    method_name = "vnodglobal_api_activation"
-
-    def post(self, request, format=None):
-        body_json = request.body
-        body = json.loads(body_json)
-
-        servicehandle=body['servicehandle']
-        sitename=body['sitename']
-        activate = body['activate']
-        vnodlocalid = body['vnodlocalid']
-        portid = body.get('portid')
-
-        if (activate == 'true' or activate == 'True'):
-            isActivate = True
-        else:
-            isActivate = False
-
-        vnodglobalservice = VnodGlobalService.get_service_objects().filter(servicehandle=servicehandle)
-        if (not vnodglobalservice):
-            HttpResponseBadRequest('Error: Could not find VnodGlobalObject with servicehandle=' + servicehandle)
-
-        vnodglobalservice = vnodglobalservice[0]
-
-        for spoke in vnodglobalservice.spokes.all():
-            if (spoke.vnodlocalsite.name == sitename and spoke.vnodlocalport.name == portid):
-                spoke_id = spoke.id
-                servicespoke = ServiceSpoke.objects.get(id=spoke_id)
-                servicespoke.remotevnodid = vnodlocalid
-                servicespoke.save()
-                break;
-
-        return Response()
-
-class VnodGlobalServiceAdminOperationalStateView(APIView):
-    method_kind = "list"
-    method_name = "vnodglobal_api_status"
-
-    def post(self, request, format=None):
-        body_json = request.body
-        body = json.loads(body_json)
-
-        servicehandle = body['servicehandle']
-        sitename = body['sitename']
-        operstate = body.get('operstate')
-        adminstate = body.get('adminstate')
-        portid = body.get('portid')
-
-        vnodglobalservice = VnodGlobalService.get_service_objects().filter(servicehandle=servicehandle)
-        if (not vnodglobalservice):
-            HttpResponseBadRequest('Error: Could not find VnodGlobalObject with servicehandle=' + servicehandle)
-
-        vnodglobalservice = vnodglobalservice[0]
-
-        for spoke in vnodglobalservice.spokes.all():
-            if (spoke.vnodlocalsite.name == sitename and spoke.vnodlocalport.name == portid):
-                spoke_id = spoke.id
-                servicespoke = ServiceSpoke.objects.get(id=spoke_id)
-                if (operstate):
-                    servicespoke.operstate = operstate
-                if (adminstate):
-                    servicespoke.adminstate = adminstate
-                servicespoke.save()
-                break;
-
-        isGlobalActive = VnodGlobalServiceViewSet.calculateVnodGlobalOperState(servicehandle=servicehandle)
-
-        if (vnodglobalservice.metronetworkmultipoint is None and vnodglobalservice.metronetworkpointtopoint is None and
-                    vnodglobalservice.metronetworkroottomultipoint is None and isGlobalActive):
-            VnodGlobalServiceViewSet.createService(servicehandle=servicehandle)
-
-        return Response()
diff --git a/xos/attic/remoteport_model.py b/xos/attic/eline_model.py
similarity index 100%
rename from xos/attic/remoteport_model.py
rename to xos/attic/eline_model.py
diff --git a/xos/attic/remoteport_model.py b/xos/attic/enterprisetenant_model.py
similarity index 100%
copy from xos/attic/remoteport_model.py
copy to xos/attic/enterprisetenant_model.py
diff --git a/xos/attic/header.py b/xos/attic/header.py
index f4db591..83b7a8c 100644
--- a/xos/attic/header.py
+++ b/xos/attic/header.py
@@ -6,8 +6,8 @@
 from core.models import PlCoreBase
 from core.models import Site
 
-METRONETWORK_KIND = "metronetwork"
-SERVICE_NAME = 'metronetwork'
+METRONETWORK_KIND = "metronet"
+SERVICE_NAME = 'metronet'
 SERVICE_NAME_ELINE_VERBOSE = 'E-Line Service'
 SERVICE_NAME_ELAN_VERBOSE = 'E-LAN Service'
 SERVICE_NAME_ETREE_VERBOSE = 'E-Tree Service'
diff --git a/xos/attic/metronetworksystem_model.py b/xos/attic/metronetworksystem_model.py
deleted file mode 100644
index 358cf8d..0000000
--- a/xos/attic/metronetworksystem_model.py
+++ /dev/null
@@ -1,15 +0,0 @@
-def __init__(self, *args, **kwargs):
-    super(MetroNetworkSystem, self).__init__(*args, **kwargs)
-
-def getAdminstrativeState(self):
-     return self.administrativeState
-
-def setAdminstrativeState(self, value):
-    self.administrativeState = value
-
-def getOperationalState(self):
-    return self.operationalState
-
-def getRestUrl(self):
-    return self.restUrl
-
diff --git a/xos/attic/networkedgeport_model.py b/xos/attic/networkedgeport_model.py
deleted file mode 100644
index 52f17fe..0000000
--- a/xos/attic/networkedgeport_model.py
+++ /dev/null
@@ -1,22 +0,0 @@
-def __unicode__(self):
-    return u'%s' % (self.pid)
-
-def save(self, *args, **kwargs):
-
-    if self.latlng:
-        try:
-            latlng_value = getattr(self, 'latlng').strip()
-            if (latlng_value.startswith('[') and latlng_value.endswith(']') and latlng_value.index(',') > 0):
-                lat = latlng_value[1: latlng_value.index(',')].strip()
-                lng = latlng_value[latlng_value.index(',') + 1: len(latlng_value) - 1].strip()
-
-                #If lat and lng are not floats, the code below should result in an error.
-                lat_validation = float(lat)
-                lng_validation = float(lng)
-            else:
-                raise ValueError("The lat/lng value is not formatted correctly.")
-        except:
-            raise ValueError("The lat/lng value is not formatted correctly.")
-
-    super(NetworkEdgePort, self).save(*args, **kwargs)
-
diff --git a/xos/attic/servicespoke_model.py b/xos/attic/servicespoke_model.py
deleted file mode 100644
index 3fd623e..0000000
--- a/xos/attic/servicespoke_model.py
+++ /dev/null
@@ -1 +0,0 @@
-def __unicode__(self):  return u'%s' % (self.name)
diff --git a/xos/attic/remoteport_model.py b/xos/attic/transportnetowrk_model.py
similarity index 100%
copy from xos/attic/remoteport_model.py
copy to xos/attic/transportnetowrk_model.py
diff --git a/xos/attic/usernetworkinterfaces_model.py b/xos/attic/usernetworkinterface_model.py
similarity index 100%
rename from xos/attic/usernetworkinterfaces_model.py
rename to xos/attic/usernetworkinterface_model.py
diff --git a/xos/metronetwork-onboard.yaml b/xos/metro-net-onboard.yaml
similarity index 70%
rename from xos/metronetwork-onboard.yaml
rename to xos/metro-net-onboard.yaml
index e4ecb69..4608141 100644
--- a/xos/metronetwork-onboard.yaml
+++ b/xos/metro-net-onboard.yaml
@@ -7,16 +7,16 @@
 
 topology_template:
   node_templates:
-     servicecontroller#metronetwork:
+     # this is the culprit probably
+     metronet:
       type: tosca.nodes.ServiceController
       properties:
           base_url: file:///opt/xos_services/metro-net/xos/
           # The following will concatenate with base_url automatically, if
           # base_url is non-null.
           xproto: ./
-          admin: admin.py
-          rest_service: subdirectory:metronetworkservice api/service/metronetworkservice/metronetworkservice.py
           synchronizer: synchronizer/manifest
-          synchronizer_run: metronetworkervice-synchronizer.py
-          tosca_resource: tosca/resources/metronetservice.py
+          synchronizer_run: metronetwork-synchronizer.py
           tosca_custom_types: metronet.yaml
+          tosca_resource: tosca/resources/metronetservice.py
+          #admin: admin.py
diff --git a/xos/metronet.m4 b/xos/metronet.m4
index c9e6eb8..9c5a807 100644
--- a/xos/metronet.m4
+++ b/xos/metronet.m4
@@ -7,110 +7,198 @@
 
 node_types:
 
-   tosca.nodes.VNodGlobalService:
-        description: >
-            CORD: The MetroNet Service.
-        derived_from: tosca.nodes.Root
-        capabilities:
-            xos_base_service_caps
-        properties:
-            xos_base_props
-            xos_base_service_props
-
-   tosca.nodes.MetroNetworkSystem:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The Metro Network Service.
-        capabilities:
-            xos_base_service_caps
-        properties:
-            xos_base_props
-            xos_base_service_props
-            administrativeState:
-                type: string
-                required: true
-            restUrl:
-                type: string
-                required: false
-
-
-   tosca.nodes.MetroNetworkDevice:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The Metro Network Device.
-        properties:
-            xos_base_props
-            restCtrlUrl:
-                type: string
-                required: true
-            username:
-                type: string
-                required: true
-            password:
-                type: string
-                required: true
-            administrativeState:
-                type: string
-                required: true
-            authType:
-                type: string
-                required: false
-            id:
-                type: string
-                required: true
-
-   tosca.nodes.EcordBandwidthProfile:
+    tosca.nodes.BandwidthProfile:
         derived_from: tosca.nodes.Root
         description: >
             CORD: The ecord bandwith profile.
         capabilities:
         properties:
-            xos_base_props
-            bwpcfgcbs:
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object
+            cbs:
                 type: integer
                 required: false
-            bwpcfgebs:
+            ebs:
                 type: integer
                 required: false
-            bwpcfgcir:
+            cir:
                 type: integer
                 required: false
-            bwpcfgeir:
+            eir:
                 type: integer
                 required: false
             name:
                 type: string
                 required: true
 
-   tosca.nodes.EcordUserNetworkInterface:
+    tosca.nodes.UserNetworkInterface:
         derived_from: tosca.nodes.Root
         description: >
             CORD: The ecord user netowrk interface
         capabilities:
         properties:
-            xos_base_props
-            enabled:
+            no-delete:
                 type: boolean
-                required: false
-            capacity:
-                type: integer
-                required: false
-            bw_used:
-                type: integer
-                required: false
-            vlanIds:
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
                 type: string
                 required: false
+                descrption: Replaces/renames this object
+            cpe_id:
+                type: string
+                required: false
+            tenant:
+                type: string
+                required: true
             name:
                 type: string
                 required: true
-            location:
-                type: string
-                required: false
             latlng:
                 type: string
                 required: false
 
-   tosca.relationships.UsesBandwidthProfile:
-        derived_from: tosca.relationships.Root
-        valid_target_types: [ tosca.capabilities.xos.EcordBandwidthProfile ]
\ No newline at end of file
+    tosca.nodes.OnosModel:
+        derived_from: tosca.nodes.Root
+        description: >
+            CORD: The ecord ONOS model
+        capabilities:
+        properties:
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object
+            name:
+                type: string
+                required: false
+            onos_ip:
+                type: string
+                required: false
+            onos_port:
+                type: integer
+                required: false
+            onos_username:
+                type: string
+                required: false
+            onos_password:
+                type: string
+                required: false
+            onos_type:
+                type: string
+                required: false
+
+    tosca.nodes.EnterpriseLocation:
+        derived_from: tosca.nodes.Root
+        description: >
+            CORD: The ecord enterprise location
+        capabilities:
+        properties:
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object
+            name:
+                type: string
+                required: false
+            cord_site_ip:
+                type: string
+                required: false
+            cord_site_port:
+                type: integer
+                required: false
+            cord_site_username:
+                type: string
+                required: false
+            cord_site_password:
+                type: string
+                required: false
+            cord_site_type:
+                type: string
+                required: false
+
+    tosca.nodes.ELine:
+        derived_from: tosca.nodes.Root
+        description: >
+            CORD: The ecord Ethernet Virtual Private Line
+        capabilities:
+        properties:
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object
+            name:
+                type: string
+                required: false
+            connect_point_1_id:
+                type: string
+                required: false
+            connect_point_2_id:
+                type: string
+                required: false
+            vlanids:
+                type: string
+                required: false
+            cord_site_name:
+                type: string
+                required: false
+            bwp:
+                type: string
+                required: false
\ No newline at end of file
diff --git a/xos/metronet.m4.old b/xos/metronet.m4.old
new file mode 100644
index 0000000..c9e6eb8
--- /dev/null
+++ b/xos/metronet.m4.old
@@ -0,0 +1,116 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+# compile this with "m4 metronet.m4 > metronet.yaml"
+
+# include macros
+include(macros.m4)
+
+node_types:
+
+   tosca.nodes.VNodGlobalService:
+        description: >
+            CORD: The MetroNet Service.
+        derived_from: tosca.nodes.Root
+        capabilities:
+            xos_base_service_caps
+        properties:
+            xos_base_props
+            xos_base_service_props
+
+   tosca.nodes.MetroNetworkSystem:
+        derived_from: tosca.nodes.Root
+        description: >
+            CORD: The Metro Network Service.
+        capabilities:
+            xos_base_service_caps
+        properties:
+            xos_base_props
+            xos_base_service_props
+            administrativeState:
+                type: string
+                required: true
+            restUrl:
+                type: string
+                required: false
+
+
+   tosca.nodes.MetroNetworkDevice:
+        derived_from: tosca.nodes.Root
+        description: >
+            CORD: The Metro Network Device.
+        properties:
+            xos_base_props
+            restCtrlUrl:
+                type: string
+                required: true
+            username:
+                type: string
+                required: true
+            password:
+                type: string
+                required: true
+            administrativeState:
+                type: string
+                required: true
+            authType:
+                type: string
+                required: false
+            id:
+                type: string
+                required: true
+
+   tosca.nodes.EcordBandwidthProfile:
+        derived_from: tosca.nodes.Root
+        description: >
+            CORD: The ecord bandwith profile.
+        capabilities:
+        properties:
+            xos_base_props
+            bwpcfgcbs:
+                type: integer
+                required: false
+            bwpcfgebs:
+                type: integer
+                required: false
+            bwpcfgcir:
+                type: integer
+                required: false
+            bwpcfgeir:
+                type: integer
+                required: false
+            name:
+                type: string
+                required: true
+
+   tosca.nodes.EcordUserNetworkInterface:
+        derived_from: tosca.nodes.Root
+        description: >
+            CORD: The ecord user netowrk interface
+        capabilities:
+        properties:
+            xos_base_props
+            enabled:
+                type: boolean
+                required: false
+            capacity:
+                type: integer
+                required: false
+            bw_used:
+                type: integer
+                required: false
+            vlanIds:
+                type: string
+                required: false
+            name:
+                type: string
+                required: true
+            location:
+                type: string
+                required: false
+            latlng:
+                type: string
+                required: false
+
+   tosca.relationships.UsesBandwidthProfile:
+        derived_from: tosca.relationships.Root
+        valid_target_types: [ tosca.capabilities.xos.EcordBandwidthProfile ]
\ No newline at end of file
diff --git a/xos/metronet.xproto b/xos/metronet.xproto
index 4094bf4..0e6b35a 100644
--- a/xos/metronet.xproto
+++ b/xos/metronet.xproto
@@ -1,136 +1,59 @@
-option name = "metronetwork";
+option name = "metronet";
 
-message MetroNetworkSystem (PlCoreBase){
-     option verbose_name = "Metro Network System";
+message EnterpriseLocation (PlCoreBase){
+     option verbose_name = "Enterprise Localation";
 
      required string name = 1 [db_index = False, max_length = 256, null = False, blank = False];
-     required string description = 2 [db_index = False, max_length = 1024, null = False, blank = False];
-     required string restUrl = 3 [db_index = False, max_length = 256, null = False, blank = False];
-     required string administrativeState = 4 [default = "disabled", choices = "(('enabled', 'Enabled'), ('disabled', 'Disabled'))", max_length = 16, blank = False, null = False, db_index = False];
-     required string operationalState = 5 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('active', 'Active'), ('inactive', 'Inactive'))"];
+     required string cord_site_ip = 2 [help_text = "ip of the local site", db_index = False, max_length = 64, null = False, blank = False];
+     required int32 cord_site_port = 3 [help_text = "port of the local site", db_index = False, null = False, blank = False];
+     required string cord_site_username = 4 [help_text = "username of the local site", db_index = False, max_length = 64, null = False, blank = False];
+     required string cord_site_password  = 5 [help_text = "password of the local site", db_index = False, max_length = 64, null = False, blank = False];
+     required string cord_site_type = 6 [default = "xos", choices = "(('onos', 'ONOS'), ('xos', 'XOS'))", db_index = False, max_length = 64, null = False, blank = False];
+
 }
 
-message NetworkDevice (PlCoreBase){
-     option verbose_name = "Network Device";
+message OnosModel (PlCoreBase){
+     option verbose_name = "Open Network Operating System";
 
-     optional string name = 1 [help_text = "Device friendly name", max_length = 20, null = True, db_index = False, blank = True];
-     required string restCtrlUrl = 2 [db_index = False, max_length = 256, null = False, blank = False];
-     required string authType = 3 [blank = False, max_length = 16, null = False, db_index = False, choices = "(('basic', 'Basic'), ('key', 'Key'), ('oauth', 'OAuth'))"];
-     required string username = 4 [db_index = False, max_length = 32, null = False, blank = True];
-     required string password = 5 [db_index = False, max_length = 32, null = False, blank = True];
-     required string administrativeState = 6 [default = "disabled", choices = "(('enabled', 'Enabled'), ('disabled', 'Disabled'), ('syncrequested', 'SyncRequested'), ('syncinprogress', 'SyncInProgress'))", max_length = 16, blank = False, null = False, db_index = False];
+     required string name = 1 [db_index = False, max_length = 256, null = False, blank = False];
+     required string onos_ip = 2 [help_text = "ip of the transport manager", db_index = False, max_length = 64, null = False, blank = False];
+     required int32 onos_port = 3 [help_text = "port of the transport manager", db_index = False, null = False, blank = False];
+     required string onos_username = 4 [help_text = "username of the transport manager", db_index = False, max_length = 64, null = False, blank = False];
+     required string onos_password  = 5 [help_text = "password of the transport manager", db_index = False, max_length = 64, null = False, blank = False];
+     required string onos_type = 6 [default = "local", choices = "(('local', 'Local'), ('global', 'Global'))", db_index = False, max_length = 64, null = False, blank = False];
+
 }
 
-message NetworkEdgePort (PlCoreBase){
-     option verbose_name = "Network Edge Port";
+message UserNetworkInterface (PlCoreBase){
+     option verbose_name = "User Network Interface";
 
-     required manytoone element->NetworkDevice:networkedgeport = 1 [db_index = True, null = False, blank = False];
-     required string pid = 2 [db_index = False, max_length = 256, null = False, blank = False];
-     required int32 bwpCfgCbs = 3 [db_index = False, null = False, blank = True];
-     required int32 bwpCfgEbs = 4 [db_index = False, null = False, blank = True];
-     required int32 bwpCfgCir = 5 [db_index = False, null = False, blank = True];
-     required int32 bwpCfgEir = 6 [db_index = False, null = False, blank = True];
-     required string name = 7 [db_index = False, max_length = 256, null = False, blank = True];
-     required string location = 8 [db_index = False, max_length = 256, null = False, blank = True];
-     required string latlng = 9 [db_index = False, max_length = 50, null = False, blank = True];
+     required string tenant = 1 [help_text = "tenat name",db_index = False, max_length = 256, null = False, blank = False];
+     required string cpe_id = 2 [db_index = False, max_length = 1024, null = False, blank = False];
+     required string latlng = 3 [help_text = "location, i.e. [37.773972, -122.431297]", db_index = False, max_length = 256, null = False, blank = False];
+     optional string name = 4 [db_index = False, max_length = 256, null = False, blank = False];
 }
 
 
-message NetworkEdgeToEdgePointConnection (Service){
-     option verbose_name = "E-Line Service";
-
-     required string sid = 1 [db_index = False, max_length = 256, null = False, blank = True];
-     required string type = 2 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('direct', 'Direct'), ('tunnel', 'Tunnel'), ('optical', 'Optical'), ('virtual', 'Virtual'), ('Point_To_Point', 'Point To Point'))"];
-     required string vlanid = 3 [db_index = False, max_length = 64, null = False, blank = False];
-     required manytoone uni1->NetworkEdgePort:EdgePointToEdgePointSrc = 4 [db_index = True, null = False, blank = False];
-     required manytoone uni2->NetworkEdgePort:EdgePointToEdgePointDst = 5 [db_index = True, null = False, blank = False];
-     required string operstate = 6 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('active', 'Active'), ('inactive', 'Inactive'))"];
-     required string adminstate = 7 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('disabled', 'Disabled'), ('activationrequested', 'ActivationRequested'), ('enabled', 'Enabled'), ('invalid', 'Invalid'), ('deactivationrequested', 'DeactivationRequested'))"];
-}
-
-
-message NetworkEdgeToMultipointConnection (Service){
-     option verbose_name = "E-Line Service";
-
-     required string sid = 1 [db_index = False, max_length = 256, null = False, blank = True];
-     required string type = 2 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('vlan', 'VLAN'), ('ip', 'IP'), ('ethernet', 'Ethernet'), ('Root_Multipoint', 'Root Multipoint'))"];
-     required string vlanid = 3 [db_index = False, max_length = 64, null = False, blank = False];
-     required manytoone root->NetworkEdgePort:EdgeToMultipointRoot = 4 [db_index = True, null = False, blank = False];
-     required string operstate = 5 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('active', 'Active'), ('inactive', 'Inactive'))"];
-     required string adminstate = 6 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('disabled', 'Disabled'), ('activationrequested', 'ActivationRequested'), ('enabled', 'Enabled'), ('invalid', 'Invalid'), ('deactivationrequested', 'DeactivationRequested'))"];
-     required manytomany eps->NetworkEdgePort/NetworkMultipointToMultipointConnection_eps:networkedgetomultipointconnection_eps = 7 [db_index = False, null = False, blank = False];
-}
-
-
-message NetworkMultipointToMultipointConnection (Service){
-     option verbose_name = "E-LAN Service";
-
-     required string sid = 1 [db_index = False, max_length = 256, null = False, blank = True];
-     required string type = 2 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('vlan', 'VLAN'), ('ip', 'IP'), ('ethernet', 'Ethernet'), ('Multipoint_To_Multipoint', 'Multipoint To Multipoint'))"];
-     required string vlanid = 3 [db_index = False, max_length = 64, null = False, blank = False];
-     required string operstate = 4 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('active', 'Active'), ('inactive', 'Inactive'))"];
-     required string adminstate = 5 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('disabled', 'Disabled'), ('activationrequested', 'ActivationRequested'), ('enabled', 'Enabled'), ('invalid', 'Invalid'), ('deactivationrequested', 'DeactivationRequested'))"];
-     required manytomany eps->NetworkEdgePort/NetworkMultipointToMultipointConnection_eps:networkmultipointtomultipointconnection_eps = 6 [db_index = False, null = False, blank = False];
-}
-
 message BandwidthProfile (PlCoreBase){
      option verbose_name = "Bandwidth Profile";
 
-     required int32 bwpcfgcbs = 1 [db_index = False, null = False, blank = False];
-     required int32 bwpcfgebs = 2 [db_index = False, null = False, blank = False];
-     required int32 bwpcfgcir = 3 [db_index = False, null = False, blank = False];
-     required int32 bwpcfgeir = 4 [db_index = False, null = False, blank = False];
-     required string name = 5 [db_index = False, max_length = 256, null = False, blank = False];
+     required string name = 1 [db_index = False, max_length = 256, null = False, blank = False];
+     required int32 cbs = 2 [help_text = "committed burst size", db_index = False, null = False, blank = False];
+     required int32 ebs = 3 [help_text = "expected burst size", db_index = False, null = False, blank = False];
+     required int32 cir = 4 [help_text = "committed information rate", db_index = False, null = False, blank = False];
+     required int32 eir = 5 [help_text = "expected information rate", db_index = False, null = False, blank = False];
+
 }
 
-message RemotePort (PlCoreBase){
-     option verbose_name = "Remote Port";
+message ELine (PlCoreBase){
+     option verbose_name = "Ethernet Virtual Private Line";
 
-     required manytoone remoteportsite->Site:RemotePortSite = 1 [db_index = True, null = False, blank = False];
-     required manytoone edgeport->NetworkEdgePort:RemotePortEdgePort = 2 [db_index = True, null = False, blank = False];
-     required string name = 3 [db_index = False, max_length = 256, null = False, blank = False];
+     required string name = 1 [db_index = False, max_length = 256, null = False, blank = False];
+     required string connect_point_1_id = 2 [db_index = False, max_length = 256, null = False, blank = False];
+     required string connect_point_2_id = 3 [db_index = False, max_length = 64, null = False, blank = False];
+     required string vlanids = 4 [help_text = "comma separated list of vlanIds", db_index = False, null = False, blank = False];
+     required string cord_site_name = 5 [db_index = False, max_length = 64, null = False, blank = False];
+     required string bwp  = 6 [help_text = "bandwidth profile name", db_index = False, max_length = 256, null = False, blank = False];
+
 }
 
-
-message ServiceSpoke (PlCoreBase){
-     option verbose_name = "Service Spoke";
-
-     required manytoone vnodlocalsite->Site:VnodLocalSite = 1 [db_index = True, null = False, blank = False];
-     required manytoone vnodlocalport->RemotePort:VnodLocalPort = 2 [db_index = True, null = False, blank = False];
-     required string name = 3 [db_index = False, max_length = 256, null = False, blank = False];
-     required string remotesubscriber = 4 [db_index = False, max_length = 256, null = False, blank = True];
-     required string remotevnodid = 5 [db_index = False, max_length = 256, null = False, blank = True];
-     required bool autoattached = 6 [default = False, null = False, db_index = False, blank = True];
-     required string operstate = 7 [default = "inactive", choices = "(('active', 'Active'), ('inactive', 'Inactive'))", max_length = 256, blank = False, null = False, db_index = False];
-     required string adminstate = 8 [default = "disabled", choices = "(('disabled', 'Disabled'), ('configured', 'Configured'), ('impaired', 'Impaired'), ('enabled', 'Enabled'))", max_length = 64, blank = False, null = False, db_index = False];
-}
-
-message VnodGlobalService (Service){
-     option verbose_name = "Virtual Network On Demand Global Service"; 
-
-     required string servicehandle = 1 [db_index = False, max_length = 64, null = False, blank = False];
-     required string vlanid = 2 [db_index = False, max_length = 64, null = False, blank = False];
-     required string type = 3 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('eline', 'E-Line Service'), ('elan', 'E-LAN Service'), ('etree', 'E-Tree Service'))"];
-     optional manytoone metronetworkroottomultipoint->NetworkEdgeToMultipointConnection:EtreeService = 4 [db_index = True, null = True, blank = False];
-     optional manytoone metronetworkmultipoint->NetworkMultipointToMultipointConnection:ElanService = 5 [db_index = True, null = True, blank = False];
-     optional manytoone metronetworkpointtopoint->NetworkEdgeToEdgePointConnection:ElineService = 6 [db_index = True, null = True, blank = False];
-     required string operstate = 7 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('active', 'Active'), ('inactive', 'Inactive'))"];
-     required string adminstate = 8 [default = "enabled", choices = "(('disabled', 'Disabled'), ('activationrequested', 'ActivationRequested'), ('enabled', 'Enabled'), ('invalid', 'Invalid'), ('deactivationrequested', 'DeactivationRequested'))", max_length = 256, blank = False, null = False, db_index = False];
-     required manytoone bandwidthProfile->BandwidthProfile:BandwidthProfile = 9 [db_index = True, null = False, blank = False];
-     required manytomany spokes->ServiceSpoke/VnodGlobalService_spokes:ServiceSpokes = 10 [db_index = False, null = False, blank = False];
-}
-
-message UserNetworkInterface (PlCoreBase){
-     option verbose_name = "User Network Interface"; 
-
-     required int32 enabled = 1 [db_index = False, null = False, blank = False];
-     required int32 capacity = 2 [db_index = False, null = False, blank = False];
-     required int32 bw_used = 3 [db_index = False, null = False, blank = False];
-     required string vlanIds = 4 [db_index = False, max_length = 256, null = False, blank = False];
-     required string location = 5 [db_index = False, max_length = 256, null = False, blank = True];
-     required string latlng = 6 [db_index = False, max_length = 50, null = False, blank = True];
-     required string name = 7 [db_index = False, max_length = 256, null = False, blank = False];
-}
-
-
-
diff --git a/xos/metronet.yaml b/xos/metronet.yaml
index 6a700fa..9ac1400 100644
--- a/xos/metronet.yaml
+++ b/xos/metronet.yaml
@@ -22,170 +22,7 @@
 
 node_types:
 
-   tosca.nodes.VNodGlobalService:
-        description: >
-            CORD: The MetroNet Service.
-        derived_from: tosca.nodes.Root
-        capabilities:
-            scalable:
-                type: tosca.capabilities.Scalable
-            service:
-                type: tosca.capabilities.xos.Service
-        properties:
-            no-delete:
-                type: boolean
-                default: false
-                description: Do not allow Tosca to delete this object
-            no-create:
-                type: boolean
-                default: false
-                description: Do not allow Tosca to create this object
-            no-update:
-                type: boolean
-                default: false
-                description: Do not allow Tosca to update this object
-            replaces:
-                type: string
-                required: false
-                descrption: Replaces/renames this object
-            kind:
-                type: string
-                default: generic
-                description: Type of service.
-            view_url:
-                type: string
-                required: false
-                description: URL to follow when icon is clicked in the Service Directory.
-            icon_url:
-                type: string
-                required: false
-                description: ICON to display in the Service Directory.
-            enabled:
-                type: boolean
-                default: true
-            published:
-                type: boolean
-                default: true
-                description: If True then display this Service in the Service Directory.
-            public_key:
-                type: string
-                required: false
-                description: Public key to install into Instances to allows Services to SSH into them.
-            private_key_fn:
-                type: string
-                required: false
-                description: Location of private key file
-            versionNumber:
-                type: string
-                required: false
-                description: Version number of Service.
-
-   tosca.nodes.MetroNetworkSystem:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The Metro Network Service.
-        capabilities:
-            scalable:
-                type: tosca.capabilities.Scalable
-            service:
-                type: tosca.capabilities.xos.Service
-        properties:
-            no-delete:
-                type: boolean
-                default: false
-                description: Do not allow Tosca to delete this object
-            no-create:
-                type: boolean
-                default: false
-                description: Do not allow Tosca to create this object
-            no-update:
-                type: boolean
-                default: false
-                description: Do not allow Tosca to update this object
-            replaces:
-                type: string
-                required: false
-                descrption: Replaces/renames this object
-            kind:
-                type: string
-                default: generic
-                description: Type of service.
-            view_url:
-                type: string
-                required: false
-                description: URL to follow when icon is clicked in the Service Directory.
-            icon_url:
-                type: string
-                required: false
-                description: ICON to display in the Service Directory.
-            enabled:
-                type: boolean
-                default: true
-            published:
-                type: boolean
-                default: true
-                description: If True then display this Service in the Service Directory.
-            public_key:
-                type: string
-                required: false
-                description: Public key to install into Instances to allows Services to SSH into them.
-            private_key_fn:
-                type: string
-                required: false
-                description: Location of private key file
-            versionNumber:
-                type: string
-                required: false
-                description: Version number of Service.
-            administrativeState:
-                type: string
-                required: true
-            restUrl:
-                type: string
-                required: false
-
-
-   tosca.nodes.MetroNetworkDevice:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The Metro Network Device.
-        properties:
-            no-delete:
-                type: boolean
-                default: false
-                description: Do not allow Tosca to delete this object
-            no-create:
-                type: boolean
-                default: false
-                description: Do not allow Tosca to create this object
-            no-update:
-                type: boolean
-                default: false
-                description: Do not allow Tosca to update this object
-            replaces:
-                type: string
-                required: false
-                descrption: Replaces/renames this object
-            restCtrlUrl:
-                type: string
-                required: true
-            username:
-                type: string
-                required: true
-            password:
-                type: string
-                required: true
-            administrativeState:
-                type: string
-                required: true
-            authType:
-                type: string
-                required: false
-            id:
-                type: string
-                required: true
-
-   tosca.nodes.EcordBandwidthProfile:
+    tosca.nodes.BandwidthProfile:
         derived_from: tosca.nodes.Root
         description: >
             CORD: The ecord bandwith profile.
@@ -207,23 +44,23 @@
                 type: string
                 required: false
                 descrption: Replaces/renames this object
-            bwpcfgcbs:
+            cbs:
                 type: integer
                 required: false
-            bwpcfgebs:
+            ebs:
                 type: integer
                 required: false
-            bwpcfgcir:
+            cir:
                 type: integer
                 required: false
-            bwpcfgeir:
+            eir:
                 type: integer
                 required: false
             name:
                 type: string
                 required: true
 
-   tosca.nodes.EcordUserNetworkInterface:
+    tosca.nodes.UserNetworkInterface:
         derived_from: tosca.nodes.Root
         description: >
             CORD: The ecord user netowrk interface
@@ -245,28 +82,138 @@
                 type: string
                 required: false
                 descrption: Replaces/renames this object
-            enabled:
-                type: boolean
-                required: false
-            capacity:
-                type: integer
-                required: false
-            bw_used:
-                type: integer
-                required: false
-            vlanIds:
+            cpe_id:
                 type: string
                 required: false
+            tenant:
+                type: string
+                required: true
             name:
                 type: string
                 required: true
-            location:
-                type: string
-                required: false
             latlng:
                 type: string
                 required: false
 
-   tosca.relationships.UsesBandwidthProfile:
-        derived_from: tosca.relationships.Root
-        valid_target_types: [ tosca.capabilities.xos.EcordBandwidthProfile ]
\ No newline at end of file
+    tosca.nodes.OnosModel:
+        derived_from: tosca.nodes.Root
+        description: >
+            CORD: The ecord ONOS model
+        capabilities:
+        properties:
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object
+            name:
+                type: string
+                required: false
+            onos_ip:
+                type: string
+                required: false
+            onos_port:
+                type: integer
+                required: false
+            onos_username:
+                type: string
+                required: false
+            onos_password:
+                type: string
+                required: false
+            onos_type:
+                type: string
+                required: false
+
+    tosca.nodes.EnterpriseLocation:
+        derived_from: tosca.nodes.Root
+        description: >
+            CORD: The ecord enterprise location
+        capabilities:
+        properties:
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object
+            name:
+                type: string
+                required: false
+            cord_site_ip:
+                type: string
+                required: false
+            cord_site_port:
+                type: integer
+                required: false
+            cord_site_username:
+                type: string
+                required: false
+            cord_site_password:
+                type: string
+                required: false
+            cord_site_type:
+                type: string
+                required: false
+
+    tosca.nodes.ELine:
+        derived_from: tosca.nodes.Root
+        description: >
+            CORD: The ecord Ethernet Virtual Private Line
+        capabilities:
+        properties:
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object
+            name:
+                type: string
+                required: false
+            connect_point_1_id:
+                type: string
+                required: false
+            connect_point_2_id:
+                type: string
+                required: false
+            vlanids:
+                type: string
+                required: false
+            cord_site_name:
+                type: string
+                required: false
+            bwp:
+                type: string
+                required: false
\ No newline at end of file
diff --git a/xos/metronet.yaml.old b/xos/metronet.yaml.old
new file mode 100644
index 0000000..b6d2de3
--- /dev/null
+++ b/xos/metronet.yaml.old
@@ -0,0 +1,272 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+# compile this with "m4 metronet.m4.old > metronet.yaml"
+
+# include macros
+# Note: Tosca derived_from isn't working the way I think it should, it's not
+#    inheriting from the parent template. Until we get that figured out, use
+#    m4 macros do our inheritance
+
+
+# Service
+
+
+# Subscriber
+
+
+
+
+# end m4 macros
+
+
+
+node_types:
+
+   tosca.nodes.VNodGlobalService:
+        description: >
+            CORD: The MetroNet Service.
+        derived_from: tosca.nodes.Root
+        capabilities:
+            scalable:
+                type: tosca.capabilities.Scalable
+            service:
+                type: tosca.capabilities.xos.Service
+        properties:
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object
+            kind:
+                type: string
+                default: generic
+                description: Type of service.
+            view_url:
+                type: string
+                required: false
+                description: URL to follow when icon is clicked in the Service Directory.
+            icon_url:
+                type: string
+                required: false
+                description: ICON to display in the Service Directory.
+            enabled:
+                type: boolean
+                default: true
+            published:
+                type: boolean
+                default: true
+                description: If True then display this Service in the Service Directory.
+            public_key:
+                type: string
+                required: false
+                description: Public key to install into Instances to allows Services to SSH into them.
+            private_key_fn:
+                type: string
+                required: false
+                description: Location of private key file
+            versionNumber:
+                type: string
+                required: false
+                description: Version number of Service.
+
+   tosca.nodes.MetroNetworkSystem:
+        derived_from: tosca.nodes.Root
+        description: >
+            CORD: The Metro Network Service.
+        capabilities:
+            scalable:
+                type: tosca.capabilities.Scalable
+            service:
+                type: tosca.capabilities.xos.Service
+        properties:
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object
+            kind:
+                type: string
+                default: generic
+                description: Type of service.
+            view_url:
+                type: string
+                required: false
+                description: URL to follow when icon is clicked in the Service Directory.
+            icon_url:
+                type: string
+                required: false
+                description: ICON to display in the Service Directory.
+            enabled:
+                type: boolean
+                default: true
+            published:
+                type: boolean
+                default: true
+                description: If True then display this Service in the Service Directory.
+            public_key:
+                type: string
+                required: false
+                description: Public key to install into Instances to allows Services to SSH into them.
+            private_key_fn:
+                type: string
+                required: false
+                description: Location of private key file
+            versionNumber:
+                type: string
+                required: false
+                description: Version number of Service.
+            administrativeState:
+                type: string
+                required: true
+            restUrl:
+                type: string
+                required: false
+
+
+   tosca.nodes.MetroNetworkDevice:
+        derived_from: tosca.nodes.Root
+        description: >
+            CORD: The Metro Network Device.
+        properties:
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object
+            restCtrlUrl:
+                type: string
+                required: true
+            username:
+                type: string
+                required: true
+            password:
+                type: string
+                required: true
+            administrativeState:
+                type: string
+                required: true
+            authType:
+                type: string
+                required: false
+            id:
+                type: string
+                required: true
+
+   tosca.nodes.EcordBandwidthProfile:
+        derived_from: tosca.nodes.Root
+        description: >
+            CORD: The ecord bandwith profile.
+        capabilities:
+        properties:
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object
+            bwpcfgcbs:
+                type: integer
+                required: false
+            bwpcfgebs:
+                type: integer
+                required: false
+            bwpcfgcir:
+                type: integer
+                required: false
+            bwpcfgeir:
+                type: integer
+                required: false
+            name:
+                type: string
+                required: true
+
+   tosca.nodes.EcordUserNetworkInterface:
+        derived_from: tosca.nodes.Root
+        description: >
+            CORD: The ecord user netowrk interface
+        capabilities:
+        properties:
+            no-delete:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to delete this object
+            no-create:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to create this object
+            no-update:
+                type: boolean
+                default: false
+                description: Do not allow Tosca to update this object
+            replaces:
+                type: string
+                required: false
+                descrption: Replaces/renames this object
+            enabled:
+                type: boolean
+                required: false
+            capacity:
+                type: integer
+                required: false
+            bw_used:
+                type: integer
+                required: false
+            vlanIds:
+                type: string
+                required: false
+            name:
+                type: string
+                required: true
+            location:
+                type: string
+                required: false
+            latlng:
+                type: string
+                required: false
+
+   tosca.relationships.UsesBandwidthProfile:
+        derived_from: tosca.relationships.Root
+        valid_target_types: [ tosca.capabilities.xos.EcordBandwidthProfile ]
\ No newline at end of file
diff --git a/xos/metronet_old.xproto_old b/xos/metronet_old.xproto_old
new file mode 100644
index 0000000..4094bf4
--- /dev/null
+++ b/xos/metronet_old.xproto_old
@@ -0,0 +1,136 @@
+option name = "metronetwork";
+
+message MetroNetworkSystem (PlCoreBase){
+     option verbose_name = "Metro Network System";
+
+     required string name = 1 [db_index = False, max_length = 256, null = False, blank = False];
+     required string description = 2 [db_index = False, max_length = 1024, null = False, blank = False];
+     required string restUrl = 3 [db_index = False, max_length = 256, null = False, blank = False];
+     required string administrativeState = 4 [default = "disabled", choices = "(('enabled', 'Enabled'), ('disabled', 'Disabled'))", max_length = 16, blank = False, null = False, db_index = False];
+     required string operationalState = 5 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('active', 'Active'), ('inactive', 'Inactive'))"];
+}
+
+message NetworkDevice (PlCoreBase){
+     option verbose_name = "Network Device";
+
+     optional string name = 1 [help_text = "Device friendly name", max_length = 20, null = True, db_index = False, blank = True];
+     required string restCtrlUrl = 2 [db_index = False, max_length = 256, null = False, blank = False];
+     required string authType = 3 [blank = False, max_length = 16, null = False, db_index = False, choices = "(('basic', 'Basic'), ('key', 'Key'), ('oauth', 'OAuth'))"];
+     required string username = 4 [db_index = False, max_length = 32, null = False, blank = True];
+     required string password = 5 [db_index = False, max_length = 32, null = False, blank = True];
+     required string administrativeState = 6 [default = "disabled", choices = "(('enabled', 'Enabled'), ('disabled', 'Disabled'), ('syncrequested', 'SyncRequested'), ('syncinprogress', 'SyncInProgress'))", max_length = 16, blank = False, null = False, db_index = False];
+}
+
+message NetworkEdgePort (PlCoreBase){
+     option verbose_name = "Network Edge Port";
+
+     required manytoone element->NetworkDevice:networkedgeport = 1 [db_index = True, null = False, blank = False];
+     required string pid = 2 [db_index = False, max_length = 256, null = False, blank = False];
+     required int32 bwpCfgCbs = 3 [db_index = False, null = False, blank = True];
+     required int32 bwpCfgEbs = 4 [db_index = False, null = False, blank = True];
+     required int32 bwpCfgCir = 5 [db_index = False, null = False, blank = True];
+     required int32 bwpCfgEir = 6 [db_index = False, null = False, blank = True];
+     required string name = 7 [db_index = False, max_length = 256, null = False, blank = True];
+     required string location = 8 [db_index = False, max_length = 256, null = False, blank = True];
+     required string latlng = 9 [db_index = False, max_length = 50, null = False, blank = True];
+}
+
+
+message NetworkEdgeToEdgePointConnection (Service){
+     option verbose_name = "E-Line Service";
+
+     required string sid = 1 [db_index = False, max_length = 256, null = False, blank = True];
+     required string type = 2 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('direct', 'Direct'), ('tunnel', 'Tunnel'), ('optical', 'Optical'), ('virtual', 'Virtual'), ('Point_To_Point', 'Point To Point'))"];
+     required string vlanid = 3 [db_index = False, max_length = 64, null = False, blank = False];
+     required manytoone uni1->NetworkEdgePort:EdgePointToEdgePointSrc = 4 [db_index = True, null = False, blank = False];
+     required manytoone uni2->NetworkEdgePort:EdgePointToEdgePointDst = 5 [db_index = True, null = False, blank = False];
+     required string operstate = 6 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('active', 'Active'), ('inactive', 'Inactive'))"];
+     required string adminstate = 7 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('disabled', 'Disabled'), ('activationrequested', 'ActivationRequested'), ('enabled', 'Enabled'), ('invalid', 'Invalid'), ('deactivationrequested', 'DeactivationRequested'))"];
+}
+
+
+message NetworkEdgeToMultipointConnection (Service){
+     option verbose_name = "E-Line Service";
+
+     required string sid = 1 [db_index = False, max_length = 256, null = False, blank = True];
+     required string type = 2 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('vlan', 'VLAN'), ('ip', 'IP'), ('ethernet', 'Ethernet'), ('Root_Multipoint', 'Root Multipoint'))"];
+     required string vlanid = 3 [db_index = False, max_length = 64, null = False, blank = False];
+     required manytoone root->NetworkEdgePort:EdgeToMultipointRoot = 4 [db_index = True, null = False, blank = False];
+     required string operstate = 5 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('active', 'Active'), ('inactive', 'Inactive'))"];
+     required string adminstate = 6 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('disabled', 'Disabled'), ('activationrequested', 'ActivationRequested'), ('enabled', 'Enabled'), ('invalid', 'Invalid'), ('deactivationrequested', 'DeactivationRequested'))"];
+     required manytomany eps->NetworkEdgePort/NetworkMultipointToMultipointConnection_eps:networkedgetomultipointconnection_eps = 7 [db_index = False, null = False, blank = False];
+}
+
+
+message NetworkMultipointToMultipointConnection (Service){
+     option verbose_name = "E-LAN Service";
+
+     required string sid = 1 [db_index = False, max_length = 256, null = False, blank = True];
+     required string type = 2 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('vlan', 'VLAN'), ('ip', 'IP'), ('ethernet', 'Ethernet'), ('Multipoint_To_Multipoint', 'Multipoint To Multipoint'))"];
+     required string vlanid = 3 [db_index = False, max_length = 64, null = False, blank = False];
+     required string operstate = 4 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('active', 'Active'), ('inactive', 'Inactive'))"];
+     required string adminstate = 5 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('disabled', 'Disabled'), ('activationrequested', 'ActivationRequested'), ('enabled', 'Enabled'), ('invalid', 'Invalid'), ('deactivationrequested', 'DeactivationRequested'))"];
+     required manytomany eps->NetworkEdgePort/NetworkMultipointToMultipointConnection_eps:networkmultipointtomultipointconnection_eps = 6 [db_index = False, null = False, blank = False];
+}
+
+message BandwidthProfile (PlCoreBase){
+     option verbose_name = "Bandwidth Profile";
+
+     required int32 bwpcfgcbs = 1 [db_index = False, null = False, blank = False];
+     required int32 bwpcfgebs = 2 [db_index = False, null = False, blank = False];
+     required int32 bwpcfgcir = 3 [db_index = False, null = False, blank = False];
+     required int32 bwpcfgeir = 4 [db_index = False, null = False, blank = False];
+     required string name = 5 [db_index = False, max_length = 256, null = False, blank = False];
+}
+
+message RemotePort (PlCoreBase){
+     option verbose_name = "Remote Port";
+
+     required manytoone remoteportsite->Site:RemotePortSite = 1 [db_index = True, null = False, blank = False];
+     required manytoone edgeport->NetworkEdgePort:RemotePortEdgePort = 2 [db_index = True, null = False, blank = False];
+     required string name = 3 [db_index = False, max_length = 256, null = False, blank = False];
+}
+
+
+message ServiceSpoke (PlCoreBase){
+     option verbose_name = "Service Spoke";
+
+     required manytoone vnodlocalsite->Site:VnodLocalSite = 1 [db_index = True, null = False, blank = False];
+     required manytoone vnodlocalport->RemotePort:VnodLocalPort = 2 [db_index = True, null = False, blank = False];
+     required string name = 3 [db_index = False, max_length = 256, null = False, blank = False];
+     required string remotesubscriber = 4 [db_index = False, max_length = 256, null = False, blank = True];
+     required string remotevnodid = 5 [db_index = False, max_length = 256, null = False, blank = True];
+     required bool autoattached = 6 [default = False, null = False, db_index = False, blank = True];
+     required string operstate = 7 [default = "inactive", choices = "(('active', 'Active'), ('inactive', 'Inactive'))", max_length = 256, blank = False, null = False, db_index = False];
+     required string adminstate = 8 [default = "disabled", choices = "(('disabled', 'Disabled'), ('configured', 'Configured'), ('impaired', 'Impaired'), ('enabled', 'Enabled'))", max_length = 64, blank = False, null = False, db_index = False];
+}
+
+message VnodGlobalService (Service){
+     option verbose_name = "Virtual Network On Demand Global Service"; 
+
+     required string servicehandle = 1 [db_index = False, max_length = 64, null = False, blank = False];
+     required string vlanid = 2 [db_index = False, max_length = 64, null = False, blank = False];
+     required string type = 3 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('eline', 'E-Line Service'), ('elan', 'E-LAN Service'), ('etree', 'E-Tree Service'))"];
+     optional manytoone metronetworkroottomultipoint->NetworkEdgeToMultipointConnection:EtreeService = 4 [db_index = True, null = True, blank = False];
+     optional manytoone metronetworkmultipoint->NetworkMultipointToMultipointConnection:ElanService = 5 [db_index = True, null = True, blank = False];
+     optional manytoone metronetworkpointtopoint->NetworkEdgeToEdgePointConnection:ElineService = 6 [db_index = True, null = True, blank = False];
+     required string operstate = 7 [blank = False, max_length = 256, null = False, db_index = False, choices = "(('active', 'Active'), ('inactive', 'Inactive'))"];
+     required string adminstate = 8 [default = "enabled", choices = "(('disabled', 'Disabled'), ('activationrequested', 'ActivationRequested'), ('enabled', 'Enabled'), ('invalid', 'Invalid'), ('deactivationrequested', 'DeactivationRequested'))", max_length = 256, blank = False, null = False, db_index = False];
+     required manytoone bandwidthProfile->BandwidthProfile:BandwidthProfile = 9 [db_index = True, null = False, blank = False];
+     required manytomany spokes->ServiceSpoke/VnodGlobalService_spokes:ServiceSpokes = 10 [db_index = False, null = False, blank = False];
+}
+
+message UserNetworkInterface (PlCoreBase){
+     option verbose_name = "User Network Interface"; 
+
+     required int32 enabled = 1 [db_index = False, null = False, blank = False];
+     required int32 capacity = 2 [db_index = False, null = False, blank = False];
+     required int32 bw_used = 3 [db_index = False, null = False, blank = False];
+     required string vlanIds = 4 [db_index = False, max_length = 256, null = False, blank = False];
+     required string location = 5 [db_index = False, max_length = 256, null = False, blank = True];
+     required string latlng = 6 [db_index = False, max_length = 50, null = False, blank = True];
+     required string name = 7 [db_index = False, max_length = 256, null = False, blank = False];
+}
+
+
+
diff --git a/xos/models.py b/xos/models.py
new file mode 100644
index 0000000..3c179f0
--- /dev/null
+++ b/xos/models.py
@@ -0,0 +1,177 @@
+from header import *
+
+
+
+#from core.models.tenant import Tenant
+from core.models import Tenant
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+class EnterpriseLocation(Tenant):
+
+  KIND = "metronetwork"
+
+  class Meta:
+      app_label = "metronet"
+      name = "metronet"
+      verbose_name = "Enterprise Localation"
+
+  # Primitive Fields (Not Relations)
+  name = CharField( blank = False, max_length = 256, null = False, db_index = False )
+  cord_site_ip = CharField( help_text = "ip of the local site", max_length = 64, null = False, db_index = False, blank = False )
+  cord_site_ip = CharField( help_text = "ip of the local site", max_length = 64, null = False, db_index = False, blank = False )
+  cord_site_port = IntegerField( help_text = "port of the local site", max_length = 256, null = False, db_index = False, blank = False )
+  cord_site_username = CharField( help_text = "username of the local site", max_length = 64, null = False, db_index = False, blank = False )
+  cord_site_password = CharField( help_text = "password of the local site", max_length = 64, null = False, db_index = False, blank = False )
+  cord_site_type = CharField( default = "xos", choices = "(('onos', 'ONOS'), ('xos', 'XOS')", max_length = 64, blank = False, null = False, db_index = False )
+  
+
+  # Relations
+  
+
+  
+  pass
+
+
+
+
+class OnosModel(PlCoreBase):
+
+  KIND = "metronetwork"
+
+  class Meta:
+      app_label = "metronet"
+      name = "metronet"
+      verbose_name = "Open Netowrk Operating System"
+
+  # Primitive Fields (Not Relations)
+  name = CharField( blank = False, max_length = 256, null = False, db_index = False )
+  onos_ip = CharField( help_text = "ip of the transport manager", max_length = 64, null = False, db_index = False, blank = False )
+  onos_port = IntegerField( help_text = "port of the transport manager", max_length = 256, null = False, db_index = False, blank = False )
+  onos_username = CharField( help_text = "username of the transport manager", max_length = 64, null = False, db_index = False, blank = False )
+  onos_password = CharField( help_text = "password of the transport manager", max_length = 64, null = False, db_index = False, blank = False )
+  onos_type = CharField( default = "local", choices = "(('local', 'Local'), ('global', 'Global')", max_length = 64, blank = False, null = False, db_index = False )
+  
+
+  # Relations
+  
+
+  
+  pass
+
+
+
+
+class UserNetworkInterface(PlCoreBase):
+
+  KIND = "metronetwork"
+
+  class Meta:
+      app_label = "metronet"
+      name = "metronet"
+      verbose_name = "User Network Interface"
+
+  # Primitive Fields (Not Relations)
+  tenant = CharField( help_text = "tenat name", max_length = 256, null = False, db_index = False, blank = False )
+  cpe_id = CharField( blank = False, max_length = 1024, null = False, db_index = False )
+  latlng = CharField( help_text = "location, i.e. [37.773972, -122.431297]", max_length = 256, null = False, db_index = False, blank = False )
+  name = CharField( blank = False, max_length = 256, null = False, db_index = False )
+  
+
+  # Relations
+  
+
+  def __unicode__(self):  return u'%s' % (self.name)
+  
+  def save(self, *args, **kwargs):
+  
+      if self.latlng:
+          try:
+              latlng_value = getattr(self, 'latlng').strip()
+              if (latlng_value.startswith('[') and latlng_value.endswith(']') and latlng_value.index(',') > 0):
+                  lat = latlng_value[1: latlng_value.index(',')].strip()
+                  lng = latlng_value[latlng_value.index(',') + 1: len(latlng_value) - 1].strip()
+  
+                  # If lat and lng are not floats, the code below should result in an error.
+                  lat_validation = float(lat)
+                  lng_validation = float(lng)
+              else:
+                  raise ValueError("The lat/lng value is not formatted correctly.")
+          except:
+              raise ValueError("The lat/lng value is not formatted correctly.")
+  
+      super(UserNetworkInterface, self).save(*args, **kwargs)
+  pass
+
+
+
+
+class BandwidthProfile(PlCoreBase):
+
+  KIND = "metronetwork"
+
+  class Meta:
+      app_label = "metronet"
+      name = "metronet"
+      verbose_name = "Bandwidth Profile"
+
+  # Primitive Fields (Not Relations)
+  name = CharField( blank = False, max_length = 256, null = False, db_index = False )
+  cbs = IntegerField( help_text = "committed burst size", null = False, blank = False, db_index = False )
+  ebs = IntegerField( help_text = "expected burst size", null = False, blank = False, db_index = False )
+  cir = IntegerField( help_text = "committed information rate", null = False, blank = False, db_index = False )
+  eir = IntegerField( help_text = "expected information rate", null = False, blank = False, db_index = False )
+  
+
+  # Relations
+  
+
+  def __unicode__(self):  return u'%s' % (self.name)
+  pass
+
+
+
+
+class ELine(PlCoreBase):
+
+  KIND = "metronetwork"
+
+  class Meta:
+      app_label = "metronet"
+      name = "metronet"
+      verbose_name = "Ethernet Virtual Private Line"
+
+  # Primitive Fields (Not Relations)
+  name = CharField( blank = False, max_length = 256, null = False, db_index = False )
+  connect_point_1_id = CharField( blank = False, max_length = 256, null = False, db_index = False )
+  connect_point_2_id = CharField( blank = False, max_length = 64, null = False, db_index = False )
+  vlanids = TextField( help_text = "comma separated list of vlanIds", null = False, blank = False, db_index = False )
+  cord_site_username = CharField( blank = False, max_length = 64, null = False, db_index = False )
+  bwp = CharField( help_text = "bandwidth profile name", max_length = 256, null = False, db_index = False, blank = False )
+  
+
+  # Relations
+  
+
+  def __unicode__(self):  return u'%s' % (self.name)
+  pass
+
+
diff --git a/xos/synchronizer/Dockerfile.synchronizer b/xos/synchronizer/Dockerfile.synchronizer
index 9440751..3ff2ebc 100644
--- a/xos/synchronizer/Dockerfile.synchronizer
+++ b/xos/synchronizer/Dockerfile.synchronizer
@@ -6,4 +6,4 @@
 
 WORKDIR "/opt/xos/synchronizers/metro-net"
 
-CMD bash -c "cd /opt/xos/synchronizers/metro-net; ./run-from-api.sh
\ No newline at end of file
+CMD bash -c "cd /opt/xos/synchronizers/metro-net; ./run-from-api.sh"
\ No newline at end of file
diff --git a/xos/synchronizer/invokers/invoker.py b/xos/synchronizer/invokers/invoker.py
deleted file mode 100644
index e645285..0000000
--- a/xos/synchronizer/invokers/invoker.py
+++ /dev/null
@@ -1,25 +0,0 @@
-class Invoker(object):
-
-    def __init__(self, **args):
-        pass
-
-    # Method for handline pre save semantics
-    #      content here would be model specific but could include handling Many-to-Many relationship
-    #      creation - which must occur post save
-    #
-    # obj     - Whatever obj was just saved
-    # returns - None - this is a pure invoke() call, return type is None
-    #
-    def presave(self, obj):
-        return None
-
-
-    # Method for handline post save semantics
-    #      content here would be model specific but could include handling Many-to-Many relationship
-    #      creation - which must occur post save
-    #
-    # obj     - Whatever obj was just saved
-    # returns - None - this is a pure invoke() call, return type is None
-    #
-    def postsave(self, obj):
-        return None
\ No newline at end of file
diff --git a/xos/synchronizer/invokers/invokerfactory.py b/xos/synchronizer/invokers/invokerfactory.py
deleted file mode 100644
index b3628fe..0000000
--- a/xos/synchronizer/invokers/invokerfactory.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from services.metronetwork.models import *
-from synchronizers.metronetwork.invokers.networkmultipointtomultipointinvoker import NetworkMultipointToMultipointInvoker
-from synchronizers.metronetwork.invokers.networkedgetoedgepointinvoker import NetworkEdgeToEdgePointInvoker
-from synchronizers.metronetwork.invokers.networkedgetomultipointinvoker import NetworkEdgeToMultipointInvoker
-from synchronizers.metronetwork.invokers.servicespokeinvoker import ServiceSpokeInvoker
-from synchronizers.metronetwork.invokers.vnodglobalserviceinvoker import VnodGlobalServiceInvoker
-from synchronizers.metronetwork.invokers.remoteportinvoker import RemotePortInvoker
-
-
-class InvokerFactory(object):
-    @staticmethod
-    def getinvoker(obj):
-        #
-        # Here is where we build various invokers
-        #
-        if isinstance(obj, NetworkMultipointToMultipointConnection):
-            return NetworkMultipointToMultipointInvoker()
-        elif isinstance(obj, NetworkEdgeToEdgePointConnection):
-            return NetworkEdgeToEdgePointInvoker()
-        elif isinstance(obj, NetworkEdgeToMultipointConnection):
-            return NetworkEdgeToMultipointInvoker()
-        elif isinstance(obj, ServiceSpoke):
-            return ServiceSpokeInvoker()
-        elif isinstance(obj, VnodGlobalService):
-            return VnodGlobalServiceInvoker()
-        elif isinstance(obj, RemotePort):
-            return RemotePortInvoker()
-        else:
-            return None
diff --git a/xos/synchronizer/invokers/networkedgetoedgepointinvoker.py b/xos/synchronizer/invokers/networkedgetoedgepointinvoker.py
deleted file mode 100644
index 2c30d79..0000000
--- a/xos/synchronizer/invokers/networkedgetoedgepointinvoker.py
+++ /dev/null
@@ -1,34 +0,0 @@
-import json
-from synchronizers.metronetwork.invokers.invoker import Invoker
-from services.metronetwork.models import NetworkEdgePort
-
-
-class NetworkEdgeToEdgePointInvoker(Invoker):
-    def __init__(self, **args):
-        pass
-
-    # Method for handline pre save semantics
-    #      content here would be model specific but could include handling Many-to-Many relationship
-    #      creation - which must occur post save
-    #
-    # obj     - Whatever obj was just saved
-    # returns - None - this is a pure invoke() call, return type is None
-    #
-    def presave(self, obj):
-        # Now that the Ports are created - get a proper reference to them and update the
-        # src and dst fields
-        if hasattr(obj, 'uni1_createbuffer'):
-            uni1port = NetworkEdgePort.objects.get(pid=obj.uni1_createbuffer)
-            uni2port = NetworkEdgePort.objects.get(pid=obj.uni2_createbuffer)
-            obj.uni1 = uni1port
-            obj.uni2 = uni2port
-
-    # Method for handline post save semantics
-    #      content here would be model specific but could include handling Many-to-Many relationship
-    #      creation - which must occur post save
-    #
-    # obj     - Whatever obj was just saved
-    # returns - N/A - this is a pure invoke() call
-    #
-    def postsave(self, obj):
-        pass
diff --git a/xos/synchronizer/invokers/networkedgetomultipointinvoker.py b/xos/synchronizer/invokers/networkedgetomultipointinvoker.py
deleted file mode 100644
index 9b8e88b..0000000
--- a/xos/synchronizer/invokers/networkedgetomultipointinvoker.py
+++ /dev/null
@@ -1,47 +0,0 @@
-import json
-from synchronizers.metronetwork.invokers.invoker import Invoker
-from services.metronetwork.models import NetworkEdgeToMultipointConnection, NetworkEdgePort
-
-class NetworkEdgeToMultipointInvoker(Invoker):
-
-    def __init__(self, **args):
-        pass
-
-    # Method for handline pre save semantics
-    #      content here would be model specific but could include handling Many-to-Many relationship
-    #      creation - which must occur post save
-    #
-    # obj     - Whatever obj was just saved
-    # returns - None - this is a pure invoke() call, return type is None
-    #
-    def presave(self, obj):
-        # Now that the Ports are created - get a proper reference to them and update the
-        # root field
-        if hasattr(obj, 'root_createbuffer'):
-            rootEdgePort = NetworkEdgePort.objects.get(pid=obj.root_createbuffer)
-            obj.root = rootEdgePort
-
-
-    # Method for handline post save semantics
-    #      content here would be model specific but could include handling Many-to-Many relationship
-    #      creation - which must occur post save
-    #
-    # obj     - Whatever obj was just saved
-    # returns - N/A - this is a pure invoke() call
-    #
-    def postsave(self, obj):
-        #
-        # Ok - we need to handle the multipoint many-to-many relationships in here
-        #
-        # By design convnetion we will look for them in the 'backend_register' object field
-        # this is a json field that is general purpose - we will expect to find a JSON array
-        # called 'eps' that just containts a reference to a bunch of NetworkEdgePorts
-        #
-        #
-        if hasattr(obj, 'eps_createbuffer'):
-            scratchpad = json.loads(obj.eps_createbuffer)
-            eps = scratchpad['eps']
-
-            for ep in eps:
-                port = NetworkEdgePort.objects.get(pid=ep)
-                obj.eps.add(port)
diff --git a/xos/synchronizer/invokers/networkmultipointtomultipointinvoker.py b/xos/synchronizer/invokers/networkmultipointtomultipointinvoker.py
deleted file mode 100644
index 6b2ab42..0000000
--- a/xos/synchronizer/invokers/networkmultipointtomultipointinvoker.py
+++ /dev/null
@@ -1,43 +0,0 @@
-import json
-from synchronizers.metronetwork.invokers.invoker import Invoker
-from services.metronetwork.models import NetworkMultipointToMultipointConnection, NetworkEdgePort
-
-class NetworkMultipointToMultipointInvoker(Invoker):
-
-    def __init__(self, **args):
-        pass
-
-    # Method for handline pre save semantics
-    #      content here would be model specific but could include handling Many-to-Many relationship
-    #      creation - which must occur post save
-    #
-    # obj     - Whatever obj was just saved
-    # returns - None - this is a pure invoke() call, return type is None
-    #
-    def presave(self, obj):
-        pass
-
-
-    # Method for handline post save semantics
-    #      content here would be model specific but could include handling Many-to-Many relationship
-    #      creation - which must occur post save
-    #
-    # obj     - Whatever obj was just saved
-    # returns - N/A - this is a pure invoke() call
-    #
-    def postsave(self, obj):
-        #
-        # Ok - we need to handle the multipoint many-to-many relationships in here
-        #
-        # By design convnetion we will look for them in the 'backend_register' object field
-        # this is a json field that is general purpose - we will expect to find a JSON array
-        # called 'eps' that just containts a reference to a bunch of NetworkEdgePorts
-        #
-        #
-        if hasattr(obj, 'eps_createbuffer'):
-            scratchpad = json.loads(obj.eps_createbuffer)
-            eps = scratchpad['eps']
-
-            for ep in eps:
-                port = NetworkEdgePort.objects.get(pid=ep)
-                obj.eps.add(port)
diff --git a/xos/synchronizer/invokers/remoteportinvoker.py b/xos/synchronizer/invokers/remoteportinvoker.py
deleted file mode 100644
index 1061dc4..0000000
--- a/xos/synchronizer/invokers/remoteportinvoker.py
+++ /dev/null
@@ -1,35 +0,0 @@
-import json
-from synchronizers.metronetwork.invokers.invoker import Invoker
-from core.models import Site
-from services.metronetwork.models import NetworkEdgePort
-
-class RemotePortInvoker(Invoker):
-    def __init__(self, **args):
-        pass
-
-    # Method for handline pre save semantics
-    #      content here would be model specific but could include handling Many-to-Many relationship
-    #      creation - which must occur post save
-    #
-    # obj     - Whatever obj was just saved
-    # returns - None - this is a pure invoke() call, return type is None
-    #
-    def presave(self, obj):
-        # Now that the Site and EdgePorts are created set the foreign keys
-        if hasattr(obj, 'sitename'):
-            site = Site.objects.get(login_base=obj.sitename)
-            obj.remoteportsite = site
-
-        if hasattr(obj, 'edgeportname'):
-            edgeport = NetworkEdgePort.objects.get(pid=obj.edgeportname)
-            obj.edgeport = edgeport
-
-    # Method for handline post save semantics
-    #      content here would be model specific but could include handling Many-to-Many relationship
-    #      creation - which must occur post save
-    #
-    # obj     - Whatever obj was just saved
-    # returns - N/A - this is a pure invoke() call
-    #
-    def postsave(self, obj):
-        pass
\ No newline at end of file
diff --git a/xos/synchronizer/invokers/servicespokeinvoker.py b/xos/synchronizer/invokers/servicespokeinvoker.py
deleted file mode 100644
index 8470cf5..0000000
--- a/xos/synchronizer/invokers/servicespokeinvoker.py
+++ /dev/null
@@ -1,37 +0,0 @@
-import json
-from synchronizers.metronetwork.invokers.invoker import Invoker
-from core.models import Site
-from services.metronetwork.models import RemotePort
-
-
-class ServiceSpokeInvoker(Invoker):
-    def __init__(self, **args):
-        pass
-
-    # Method for handline pre save semantics
-    #      content here would be model specific but could include handling Many-to-Many relationship
-    #      creation - which must occur post save
-    #
-    # obj     - Whatever obj was just saved
-    # returns - None - this is a pure invoke() call, return type is None
-    #
-    def presave(self, obj):
-        # Now that the Ports are created - get a proper reference to them and update the
-        # src and dst fields
-        if hasattr(obj, 'sitename'):
-            site = Site.objects.get(login_base=obj.sitename)
-            obj.vnodlocalsite = site
-
-        if hasattr(obj, 'remoteportname'):
-            remoteport = RemotePort.objects.get(name=obj.remoteportname)
-            obj.vnodlocalport = remoteport
-
-    # Method for handline post save semantics
-    #      content here would be model specific but could include handling Many-to-Many relationship
-    #      creation - which must occur post save
-    #
-    # obj     - Whatever obj was just saved
-    # returns - N/A - this is a pure invoke() call
-    #
-    def postsave(self, obj):
-        pass
\ No newline at end of file
diff --git a/xos/synchronizer/invokers/vnodglobalserviceinvoker.py b/xos/synchronizer/invokers/vnodglobalserviceinvoker.py
deleted file mode 100644
index a313171..0000000
--- a/xos/synchronizer/invokers/vnodglobalserviceinvoker.py
+++ /dev/null
@@ -1,50 +0,0 @@
-import json
-from synchronizers.metronetwork.invokers.invoker import Invoker
-from services.metronetwork.models import ServiceSpoke
-from services.metronetwork.models import BandwidthProfile
-from services.metronetwork.models import NetworkEdgeToEdgePointConnection
-
-class VnodGlobalServiceInvoker(Invoker):
-
-    def __init__(self, **args):
-        pass
-
-    # Method for handline pre save semantics
-    #      content here would be model specific but could include handling Many-to-Many relationship
-    #      creation - which must occur post save
-    #
-    # obj     - Whatever obj was just saved
-    # returns - None - this is a pure invoke() call, return type is None
-    #
-    def presave(self, obj):
-
-        if hasattr(obj, 'bwpname'):
-            bwprofile = BandwidthProfile.objects.get(name=obj.bwpname)
-            obj.bandwidthProfile = bwprofile
-
-        if hasattr(obj, 'pointtopointsid'):
-            connection = NetworkEdgeToEdgePointConnection.objects.get(sid=obj.pointtopointsid)
-            obj.metronetworkpointtopoint = connection
-
-    # Method for handline post save semantics
-    #      content here would be model specific but could include handling Many-to-Many relationship
-    #      creation - which must occur post save
-    #
-    # obj     - Whatever obj was just saved
-    # returns - N/A - this is a pure invoke() call
-    #
-    def postsave(self, obj):
-        #
-        # Ok - we need to handle the multipoint many-to-many relationships in here
-        #
-        # By design convnetion we will look for them in the 'backend_register' object field
-        # this is a json field that is general purpose - we will expect to find a JSON array
-        # called 'eps' that just containts a reference to a bunch of NetworkEdgePorts
-        #
-        if hasattr(obj, 'spokes_createbuffer'):
-            scratchpad = json.loads(obj.spokes_createbuffer)
-            spokes = scratchpad['spokes']
-
-            for spokeid in spokes:
-                spoke = ServiceSpoke.objects.get(name=spokeid)
-                obj.spokes.add(spoke)
diff --git a/xos/synchronizer/manifest b/xos/synchronizer/manifest
index 03f1088..4a4ccfe 100644
--- a/xos/synchronizer/manifest
+++ b/xos/synchronizer/manifest
@@ -1,23 +1,7 @@
 metronetwork-synchronizer.py
 __init__.py
 model-deps
-providers/metronetworktestprovider.py
-providers/metronetworkrestprovider.py
-providers/providerfactory.py
-providers/__init__.py
-providers/metronetworkprovider.py
-run_devel.sh
-metronetwork-synchronizer-devel.py
 manifest
-steps/sync_metronetworkservice.py
-invokers/servicespokeinvoker.py
-invokers/networkedgetoedgepointinvoker.py
-invokers/vnodglobalserviceinvoker.py
-invokers/networkmultipointtomultipointinvoker.py
-invokers/__init__.py
-invokers/invoker.py
-invokers/networkedgetomultipointinvoker.py
-invokers/invokerfactory.py
-invokers/remoteportinvoker.py
-run.sh
+steps/sync_metroneteline.py
+run-from-api.sh
 metronetwork_synchronizer_config
diff --git a/xos/synchronizer/metronetwork-synchronizer-devel.py b/xos/synchronizer/metronetwork-synchronizer-devel.py
deleted file mode 100755
index df697ec..0000000
--- a/xos/synchronizer/metronetwork-synchronizer-devel.py
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/env python
-
-# This imports and runs ../../xos-observer.py
-
-import importlib
-import os
-import sys
-
-#observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "../../synchronizers/base")
-sys.path.append("/opt/xos/synchronizers/base")
-print sys.path
-mod = importlib.import_module("xos-synchronizer")
-mod.main()
diff --git a/xos/synchronizer/providers/__init__.py b/xos/synchronizer/providers/__init__.py
deleted file mode 100644
index 8b13789..0000000
--- a/xos/synchronizer/providers/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/xos/synchronizer/providers/metronetworkprovider.py b/xos/synchronizer/providers/metronetworkprovider.py
deleted file mode 100644
index c316815..0000000
--- a/xos/synchronizer/providers/metronetworkprovider.py
+++ /dev/null
@@ -1,90 +0,0 @@
-from xos.logger import Logger, logging
-from services.metronetwork.models import *
-
-logger = Logger(level=logging.INFO)
-
-
-class MetroNetworkProvider(object):
-    networkdevice = None
-
-    def __init__(self, networkdevice, **args):
-        self.networkdevice = networkdevice
-        pass
-
-    # Methods to support for Synchronization - effectively list all interfaces
-    #
-    # Method for retrieving all network ports from the backend system
-    # Intended for use when doing a re-sync
-    def get_network_ports(self):
-        # Default method needs to be overriden
-        logger.debug("get_network_ports default called - should be overriden")
-
-    # Method for getting a list of network ports to delete
-    # The default imnplementation just gets a list from the local DB
-    # Intended for use when doing a re-sync
-    def get_network_ports_for_deletion(self):
-        # Default method needs to be overriden
-        logger.debug("get_network_ports for deletion called - default is all ports in the db related to this id")
-        objs = []
-        return objs
-
-    # Method for retrieving all network links from the backend system
-    # Includes Connectivity Objects
-    # Intended for use when doing a re-sync
-    def get_network_links(self):
-        # Default method needs to be overriden
-        logger.debug("get_network_links default called - should be overriden")
-        objs = []
-        return objs
-
-    # Method for getting a list of network links to delete
-    # Includes Connectivity Objects
-    # Intended for use when doing a re-sync
-    def get_network_links_for_deletion(self):
-        # Default method needs to be overriden
-        logger.debug("get_network_links for deletion called - should be overidden")
-        objs = []
-        return objs
-
-    # Methods to support Event Management - movement of changes from the Domain to XOS
-    #
-    # Method for Create and Update - Create and Update are together given the base design
-    def get_updated_or_created_objects(self):
-        # Default method needs to be overriden
-        logger.debug("get_updated_or_created_objects default called - should be overriden")
-        objs = []
-        return objs
-
-    # Method for Delete - Create and Update are together given the base design
-    def get_deleted_objects(self):
-        # Default method needs to be overriden
-        logger.debug("get_deleted_objects default called - should be overriden")
-        objs = []
-        return objs
-
-    # Methods to support Movement of changes from XOS into the Domain
-    #
-    # Method for creating point to point connectivity object
-    #
-    # obj     - Connection object - with all configuration variables set
-    # returns - Boolean - indicating whether or not the request succeeded - in either case the Admin/Oper
-    #                     states are assigned - if False the backend_status field
-    #                     should be assigned with the appropriate error code - in the case of True the
-    #                     backend_status will be assigned by the system and should be unassigned
-
-    def create_point_to_point_connectivity(self, obj):
-        # Default method needs to be overriden
-        logger.debug("create_point_to_point_connectivity called - should be overriden")
-        return False
-
-    # Method for deleting point to point connectivity object
-    #
-    # obj     - Connection object
-    # returns - Boolean - indicating whether or not the request succeeded - in either case the Admin/Oper
-    #                     states are assigned - if False the backend_status field
-    #                     should be assigned with the appropriate error code - in the case of True the
-    #                     backend_status will be assigned by the system and should be unassigned
-    def delete_point_to_point_connectivity(self, obj):
-        # Default method needs to be overriden
-        logger.debug("delete_point_to_point_connectivity called - should be overriden")
-        return False
diff --git a/xos/synchronizer/providers/metronetworkrestprovider.py b/xos/synchronizer/providers/metronetworkrestprovider.py
deleted file mode 100644
index 2cb03ab..0000000
--- a/xos/synchronizer/providers/metronetworkrestprovider.py
+++ /dev/null
@@ -1,472 +0,0 @@
-from xos.logger import Logger, logging
-from services.metronetwork.models import *
-from synchronizers.metronetwork.providers.metronetworkprovider import MetroNetworkProvider
-
-import requests, json
-from requests.auth import HTTPBasicAuth
-
-logger = Logger(level=logging.INFO)
-
-
-class MetroNetworkRestProvider(MetroNetworkProvider):
-    def __init__(self, networkdevice, **args):
-        MetroNetworkProvider.__init__(self, networkdevice, **args)
-
-    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_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
-
-        resp = requests.get("{}/mef-sca-api/SCA_ETH_FDFr_EC/findByState?state=Active".format(restCtrlUrl),
-                            auth=HTTPBasicAuth(username, password))
-
-        if resp.status_code == 200:
-            for evc in resp.json():
-                evcServiceType = evc['evcServiceType']
-                if (evcServiceType == "Point_To_Point"):
-                    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()")
-
-        return objs
-
-    def create_point_to_point_connectivity_json_data(self, obj):
-
-        p2p_json_data = {}
-        p2p_json_data["evcServiceType"] = "Point_To_Point"
-
-        uni1 = obj.uni1
-        uni1Id = uni1.pid
-        uni1IdToken = (uni1Id.split('.', 1))[1].split('/', 1)
-        uni1Hostname = uni1IdToken[0]
-        uni1Port = uni1IdToken[1]
-        uni1BwpCfgCbs = uni1.bwpCfgCbs
-        uni1BwpCfgEbs = uni1.bwpCfgEbs
-        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)
-        uni2Hostname = uni2IdToken[0]
-        uni2Port = uni2IdToken[1]
-        uni2BwpCfgCbs = uni2.bwpCfgCbs
-        uni2BwpCfgEbs = uni2.bwpCfgEbs
-        uni2BwpCfgCir = uni2.bwpCfgCir
-        uni2BwpCfgEir = uni2.bwpCfgEir
-
-        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(network_connectivity_json_data), headers=headers, auth=HTTPBasicAuth(username, password))
-
-        if resp.status_code == 201:
-            result = resp.json()
-            message = result['message']
-
-            msg_token = message.split()
-            for i, token in enumerate(msg_token):
-                if token == 'id':
-                    service_id = msg_token[i + 1]
-                    obj.sid = service_id
-                    obj.adminstate = "enabled"
-                    obj.operstate = "active"
-
-                    return True
-
-        elif resp.status_code == 204:
-            obj.adminstate = "invalid"  # what's the meaning?
-            obj.operstate = "inactive"
-            obj.backend_status = '204 - No network resource'
-
-            return False
-
-        elif resp.status_code == 500:
-            obj.adminstate = "enabled"
-            obj.operstate = "inactive"
-            obj.backend_status = '500 - Internal Server Error'
-            return False
-
-        else:
-            raise Exception("OnosApiError: create_network_connectivity()")
-
-    def delete_network_connectivity(self, obj):
-
-        restCtrlUrl = self.networkdevice.restCtrlUrl
-        username = self.networkdevice.username
-        password = self.networkdevice.password
-        evcId = obj.sid
-
-        resp = requests.delete("{}/mef-sca-api/SCA_ETH_FDFr_EC/{}".format(restCtrlUrl, evcId),
-                               auth=HTTPBasicAuth(username, password))
-
-        if resp.status_code == 200:
-            obj.adminstate = 'disabled'
-            obj.operstate = 'inactive'
-            return True
-
-        elif resp.status_code == 204:
-            obj.adminstate = "invalid"  # what's the meaning?
-            obj.backend_status = '204 - No such network resource: {}'.format(evcId)
-            return False
-
-        elif resp.status_code == 500:
-            obj.adminstate = "disabled"
-            obj.backend_status = '500 - Internal Server Error'
-            return False
-
-        else:
-            raise Exception("OnosApiError: delete_network_connectivity()")
diff --git a/xos/synchronizer/providers/metronetworktestprovider.py b/xos/synchronizer/providers/metronetworktestprovider.py
deleted file mode 100644
index 3bcbb92..0000000
--- a/xos/synchronizer/providers/metronetworktestprovider.py
+++ /dev/null
@@ -1,339 +0,0 @@
-import random
-import json
-
-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)
-
-
-class MetroNetworkTestProvider(MetroNetworkProvider):
-    def __init__(self, networkdevice, **args):
-        MetroNetworkProvider.__init__(self, networkdevice, **args)
-
-    # Method for retrieving all network ports from the backend system
-    def get_network_ports(self):
-        #
-        # Our Test Network Consists of one NetworkDevice (which correspond to ONOS instance):
-        #
-        #  8 Ports
-        #  1 Eline (2 ports)
-        #  1 Etree (3 ports)
-        #  1 Elan (3 ports)
-        #
-        #  2 Sites - Representing Two R-CORD Pods
-        #  2 Ports, One-per-site
-        #  1 Bandwidth Profile
-        #  2 Service Spokes
-        #  1 VnodGlobalService
-
-        objs = []
-
-        # For The Test Provider we don't handle re-sync for anything but the Metro Test Network
-        if self.networkdevice.id != 'TestMetroNet':
-            return objs
-
-        # Set the parent device id to just be the Test NetworkDevice
-        device1 = NetworkDevice()
-        device1.id = self.networkdevice.id
-
-        port1 = NetworkEdgePort()
-        port1.element = device1
-        port1.pid = device1.id + "." + "of:000000001/1"
-        port1.bwpCfgCbs = 1000000
-        port1.bwpCfgEbs = 1000000
-        port1.bwpCfgEir = 1000000
-        port1.bwpCfgCir = 1000000
-        port1.location = "San Francisco"
-        port1.name = "Central Office 1"
-        port1.latlng = "[-122.419416, 37.774929]"
-        objs.append(port1)
-
-        port2 = NetworkEdgePort()
-        port2.element = device1
-        port2.pid = device1.id + "." + "of:000000001/2"
-        port2.bwpCfgCbs = 1000000
-        port2.bwpCfgEbs = 1000000
-        port2.bwpCfgEir = 1000000
-        port2.bwpCfgCir = 1000000
-        port2.location = "San Jose"
-        port2.name = "Central Office 2"
-        port2.latlng = "[-121.886329, 37.338208]"
-        objs.append(port2)
-
-        port3 = NetworkEdgePort()
-        port3.element = device1
-        port3.pid = device1.id + "." + "of:000000001/3"
-        port3.bwpCfgCbs = 1000000
-        port3.bwpCfgEbs = 1000000
-        port3.bwpCfgEir = 1000000
-        port3.bwpCfgCir = 1000000
-        port3.location = "Palo Alto"
-        port3.name = "Central Office 3"
-        port3.latlng = "[-122.143019, 37.441883]"
-        objs.append(port3)
-
-        port4 = NetworkEdgePort()
-        port4.element = device1
-        port4.pid = device1.id + "." + "of:000000001/4"
-        port4.bwpCfgCbs = 1000000
-        port4.bwpCfgEbs = 1000000
-        port4.bwpCfgEir = 1000000
-        port4.bwpCfgCir = 1000000
-        port4.location = "Oakland"
-        port4.name = "Central Office 4"
-        port4.latlng = "[-122.271114, 37.804364]"
-        objs.append(port4)
-
-        port5 = NetworkEdgePort()
-        port5.element = device1
-        port5.pid = device1.id + "." + "of:000000001/5"
-        port5.bwpCfgCbs = 1000000
-        port5.bwpCfgEbs = 1000000
-        port5.bwpCfgEir = 1000000
-        port5.bwpCfgCir = 1000000
-        port5.location = "San Rafael"
-        port5.name = "Central Office 5"
-        port5.latlng = "[-122.531087, 37.973535]"
-        objs.append(port5)
-
-        port6 = NetworkEdgePort()
-        port6.element = device1
-        port6.pid = device1.id + "." + "of:000000001/6"
-        port6.bwpCfgCbs = 1000000
-        port6.bwpCfgEbs = 1000000
-        port6.bwpCfgEir = 1000000
-        port6.bwpCfgCir = 1000000
-        port6.location = "San Mateo"
-        port6.name = "Central Office 6"
-        port6.latlng = "[-122.325525, 37.562992]"
-        objs.append(port6)
-
-        port7 = NetworkEdgePort()
-        port7.element = device1
-        port7.pid = device1.id + "." + "of:000000001/7"
-        port7.bwpCfgCbs = 1000000
-        port7.bwpCfgEbs = 1000000
-        port7.bwpCfgEir = 1000000
-        port7.bwpCfgCir = 1000000
-        port7.location = "Hayward"
-        port7.name = "Central Office 7"
-        port7.latlng = "[-122.080796, 37.668821]"
-        objs.append(port7)
-
-        port8 = NetworkEdgePort()
-        port8.element = device1
-        port8.pid = device1.id + "." + "of:000000001/8"
-        port8.bwpCfgCbs = 1000000
-        port8.bwpCfgEbs = 1000000
-        port8.bwpCfgEir = 1000000
-        port8.bwpCfgCir = 1000000
-        port8.location = "Fremont"
-        port8.name = "Central Office 8"
-        port8.latlng = "[-121.988572, 37.548270]"
-        objs.append(port8)
-
-        return objs
-
-    def get_network_ports_for_deletion(self):
-
-        objs = []
-
-        # For The Test Provider we don't handle re-sync for anything but the Metro Test Network
-        if self.networkdevice.id != 'TestMetroNet':
-            return objs
-
-        allports = MetroNetworkProvider.get_network_ports_for_deletion(self)
-
-        for port in allports:
-            objs.append(port)
-
-        return objs
-
-    def get_network_links(self):
-
-        objs = []
-
-        # Connectivity object - Point to Point
-        cordpod1device = NetworkDevice()
-        cordpod1device.id = self.networkdevice.id
-
-        # Edge to Edge Point Connectivity Objects
-        edgetoedgeconnectivity = NetworkEdgeToEdgePointConnection()
-        edgetoedgeconnectivity.uni1_createbuffer = cordpod1device.id + "." + "of:000000001/1"
-        edgetoedgeconnectivity.uni2_createbuffer = cordpod1device.id + "." + "of:000000001/2"
-        edgetoedgeconnectivity.type = 'direct'
-        edgetoedgeconnectivity.operstate = 'active'
-        edgetoedgeconnectivity.adminstate = 'enabled'
-        edgetoedgeconnectivity.sid = 'EdgeToEdgePointConnectivity_1'
-        objs.append(edgetoedgeconnectivity)
-
-
-        # Multipoint to Multipoint Connectivity Objects
-        multipoint2multipointconnectivity=NetworkMultipointToMultipointConnection()
-        multipoint2multipointconnectivity.operstate = 'active'
-        multipoint2multipointconnectivity.adminstate = 'enabled'
-        multipoint2multipointconnectivity.type = 'ethernet'
-        multipoint2multipointconnectivity.sid = 'MultipointToMultipointConnectivity_1'
-
-        #
-        # Create JSON array for post-save behaviour
-        #
-        eps = []
-        eps.append(cordpod1device.id + "." + "of:000000001/3")
-        eps.append(cordpod1device.id + "." + "of:000000001/4")
-        eps.append(cordpod1device.id + "." + "of:000000001/5")
-
-        myjsonstr = {'eps': eps, 'foo':0, 'bar':0}
-        multipoint2multipointconnectivity.eps_createbuffer = json.dumps(myjsonstr)
-        objs.append(multipoint2multipointconnectivity)
-
-        # Edge to Multipoint Connectivity Objects
-        edge2multipointconnectivity = NetworkEdgeToMultipointConnection()
-        edge2multipointconnectivity.operstate = 'active'
-        edge2multipointconnectivity.adminstate = 'enabled'
-        edge2multipointconnectivity.type = 'ethernet'
-        edge2multipointconnectivity.sid = 'EdgeToMultipointConnectivity_1'
-        edge2multipointconnectivity.root_createbuffer = cordpod1device.id + "." + "of:000000001/7"
-        #
-        # Create JSON array for post-save behaviour
-        #
-        eps = []
-        eps.append(cordpod1device.id + "." + "of:000000001/6")
-        eps.append(cordpod1device.id + "." + "of:000000001/8")
-
-        myjsonstr = {'eps': eps, 'foo': 0, 'bar': 0}
-        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
-
-    def get_network_links_for_deletion(self):
-
-        # For now we'll rely on cascade deletes in the port area - so from the test provider nothing to do
-        objs = []
-        return objs
-
-    def create_point_to_point_connectivity(self, obj):
-
-        # Ok - here is what we'll do to simulate the 'real world' - get a random number between 1 and 10
-        # 1-7 is considered 'successful' 8 is considered a transient error - 9 is a configuration problem
-        # 10 is a - resource exhausted problem - there you go!!
-        scenario = random.randint(1, 10)
-
-        if (scenario >= 1 and scenario <= 7):
-            obj.adminstate = 'enabled'
-            obj.operstate = 'active'
-            return True
-        elif (scenario == 8):
-            obj.adminstate = 'enabled'
-            obj.operstate = 'inactive'
-            obj.backend_status = '8 - Transient Server Error'
-            return False
-        elif (scenario == 9):
-            obj.adminstate = 'invalid'
-            obj.operstate = 'inactive'
-            obj.backend_status = '9 - Configuration Error'
-            return False
-        else:
-            obj.adminstate = 'enabled'
-            obj.operstate = 'inactive'
-            obj.backend_status = '10 - Resource Exhaustion'
-            return False
-
-    def delete_point_to_point_connectivity(self, obj):
-
-        # Ok - here is what we'll do to simulate the 'real world' - get a random number between 1 and 10
-        # 1-8 is considered 'successful' 8 is considered a transient error - 9 is a configuration problem
-        scenario = random.randint(1, 10)
-
-        if (scenario >= 1 and scenario <= 8):
-            obj.adminstate = 'disabled'
-            obj.operstate = 'inactive'
-            return True
-        elif (scenario == 9):
-            obj.adminstate = 'disabled'
-            obj.backend_status = '8 - Transient Server Error'
-            return False
-        else:
-            obj.adminstate = 'invalid'
-            obj.backend_status = '9 - Configuration Error'
-            return False
diff --git a/xos/synchronizer/providers/providerfactory.py b/xos/synchronizer/providers/providerfactory.py
deleted file mode 100644
index 9ef6cb8..0000000
--- a/xos/synchronizer/providers/providerfactory.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import sys
-
-from synchronizers.metronetwork.providers.metronetworktestprovider import MetroNetworkTestProvider
-from synchronizers.metronetwork.providers.metronetworkrestprovider import MetroNetworkRestProvider
-
-
-class ProviderFactory(object):
-    @staticmethod
-    def getprovider(networkdevice):
-
-        undertest = False
-
-        # We either return Test or Rest
-        # By convention a NetworkDevice with name TestDomain will use test objects
-        if networkdevice.id == 'TestMetroNet' or networkdevice.id == 'TestCORD1Net' or networkdevice.id == 'TestCORD2Net':
-            undertest = True
-
-        if undertest:
-            return MetroNetworkTestProvider(networkdevice)
-        else:
-            return MetroNetworkRestProvider(networkdevice)
diff --git a/xos/synchronizer/run-from-api.sh b/xos/synchronizer/run-from-api.sh
old mode 100644
new mode 100755
index 95ba5dd..73f5eec
--- a/xos/synchronizer/run-from-api.sh
+++ b/xos/synchronizer/run-from-api.sh
@@ -1,2 +1,3 @@
+#!/usr/bin/env bash
 export XOS_DIR=/opt/xos
 python metronetwork-synchronizer.py  -C $XOS_DIR/synchronizers/metro-net/metronetwork_from_api_config
\ No newline at end of file
diff --git a/xos/synchronizer/invokers/__init__.py b/xos/synchronizer/steps/__init__.py
similarity index 100%
rename from xos/synchronizer/invokers/__init__.py
rename to xos/synchronizer/steps/__init__.py
diff --git a/xos/synchronizer/steps/sync_metroneteline.py b/xos/synchronizer/steps/sync_metroneteline.py
new file mode 100644
index 0000000..bd0bfef
--- /dev/null
+++ b/xos/synchronizer/steps/sync_metroneteline.py
@@ -0,0 +1,89 @@
+import os
+import sys
+import requests
+import json
+from synchronizers.new_base.syncstep import SyncStep
+from synchronizers.new_base.modelaccessor import *
+#from xos.logger import Logger, logging
+
+from requests.auth import HTTPBasicAuth
+#logger = Logger(level=logging.INFO)
+
+parentdir = os.path.join(os.path.dirname(__file__), "..")
+sys.path.insert(0, parentdir)
+
+
+class SyncMetroNetEline(SyncStep):
+    provides = [ELine]
+
+    observes = ELine
+
+    requested_interval = 0
+
+    def __init__(self, *args, **kwargs):
+        super(SyncMetroNetEline, self).__init__(*args, **kwargs)
+
+    def get_onos_global_addr(self, onos):
+        #Fetching ip and port from the Global ONOS, append the CE specif API
+
+        onos_url = "http://%s:%s/onos/" % (onos.onos_ip, onos.onos_port)
+        evc_endpoint = "carrierethernet/evc"
+        return onos_url + evc_endpoint
+
+    def get_onos_global_auth(self, onos):
+        #Fetching username and password from the Global ONOS
+
+        return HTTPBasicAuth(onos.onos_username, onos.onos_password)
+
+    def sync_record(self, evc):
+        print "POST %s " % (evc)
+        #logger.info("Syncing Edited EVC: %s" % evc.name)
+        # Fetch the bwp from the DB
+        bwp = BandwidthProfile.objects.get(name=evc.bwp)
+
+        # json to configure ONOS to start the EVC.
+        # {
+        #     "evcId": "evc1",
+        #     "evcCfgId": "evpl1",
+        #     "uniList": [
+        #         "netconf:192.168.56.10:830/0",
+        #         "netconf:192.168.56.20:830/0"
+        #     ],
+        #     "evcType": "POINT_TO_POINT",
+        #     "vlanId": 100,
+        #     "cir": "400",
+        #     "eir": "200",
+        #     "cbs": "3000",
+        #     "ebs": "2000"
+        # }
+
+        data = {}
+        data["evcId"] = evc.name
+        data["evcCfgId"] = evc.name
+        data["uniList"] = [evc.connect_point_1_id, evc.connect_point_2_id]
+        data["evcType"] = "POINT_TO_POINT"
+        data["vlanId"] = evc.vlanids.split(",")
+        data["cbs"] = bwp.cbs
+        data["ebs"] = bwp.ebs
+        data["cir"] = bwp.cir
+        data["eir"] = bwp.eir
+        print "data %s" % data
+        # assuming that the CPEs are controller by the fabric ONOS
+        onos = OnosModel.objects.get(onos_type="global")
+        onos_addr = self.get_onos_global_addr(onos)
+
+        # FIXME - hardcoded auth
+        auth = self.get_onos_global_auth(onos)
+
+        print "POST %s for app %s, data = %s" % (onos_addr, evc.name, data)
+
+        r = requests.post(onos_addr, data=json.dumps(data), auth=auth)
+        #TODO XOS might fail to connect to ONOS.
+        if (r.status_code != 200):
+            print r
+            raise Exception("Received error from EVC Installation update (%d)" % r.status_code)
+
+    def delete_record(self, evc):
+        # TODO evaluate what to in this case.
+        print "Syncing delete EVC: %s" % evc.name
+        #logger.info("Syncing delete EVC: %s" % evc.name)
diff --git a/xos/synchronizer/steps/sync_metronetworkservice.py b/xos/synchronizer/steps/sync_metronetworkservice.py
deleted file mode 100644
index 3468d2b..0000000
--- a/xos/synchronizer/steps/sync_metronetworkservice.py
+++ /dev/null
@@ -1,254 +0,0 @@
-import os, sys
-from itertools import chain
-
-from synchronizers.new_base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible #if needed
-from synchronizers.new_base.ansible_helper import run_template_ssh #if needed
-from synchronizers.new_base.modelaccessor import *
-from xos.logger import Logger, logging
-from synchronizers.metronetwork.providers.providerfactory import ProviderFactory
-from synchronizers.metronetwork.invokers.invokerfactory import InvokerFactory
-
-# metronetwork will be in steps/..
-parentdir = os.path.join(os.path.dirname(__file__), "..")
-sys.path.insert(0, parentdir)
-
-logger = Logger(level=logging.INFO)
-
-
-class SyncMetroNetworkSystem(SyncStep):
-    provides = [MetroNetworkSystem]
-    observes = MetroNetworkSystem
-    requested_interval = 0
-    initialized = False
-
-    def __init__(self, **args):
-        SyncStep.__init__(self, **args)
-
-    def fetch_pending(self, deletion=False):
-
-        # The general idea:
-        # We do one of two things in here:
-        #    1. Full Synchronization of the DBS (XOS <-> MetroONOS)
-        #    2. Look for updates between the two stores
-        # The first thing is potentially a much bigger
-        # operation and should not happen as often
-        #
-        # The Sync operation must take into account the 'deletion' flag
-
-        objs = []
-
-        # Get the NetworkSystem object - if it exists it will test us
-        # whether we should do a full sync or not - it all has our config
-        # information about the REST interface
-
-        metronetworksystem = self.get_metronetwork_system()
-        if not metronetworksystem:
-            logger.debug("No Service configured")
-            return objs
-
-        # Check to make sure the Metro Network System is enabled
-        metronetworksystem = self.get_metronetwork_system()
-        if metronetworksystem.administrativeState == 'disabled':
-            # Nothing to do
-            logger.debug("MetroService configured - state is Disabled")
-            return objs
-
-        # The Main Loop - retrieve all the NetworkDevice objects - for each of these
-        # Apply synchronization aspects
-        networkdevices = NetworkDevice.objects.all()
-
-        for dev in networkdevices:
-
-            # Set up the provider
-            provider = ProviderFactory.getprovider(dev)
-
-            # First check is for the AdminState of Disabled - do nothing
-            if dev.administrativeState == 'disabled':
-                # Nothing to do with this device
-                logger.debug("NetworkDevice %s: administrativeState set to Disabled - continuing" % dev.id)
-
-            # Now to the main options - are we syncing - deletion portion
-            elif dev.administrativeState == 'syncrequested' and deletion is True:
-
-                logger.info("NetworkDevice %s: administrativeState set to SyncRequested" % dev.id)
-
-                # Kill Links
-                networklinks = provider.get_network_links_for_deletion()
-                for link in networklinks:
-                    objs.append(link)
-
-                # Kill Ports
-                allports = provider.get_network_ports_for_deletion()
-                for port in allports:
-                    objs.append(port)
-
-                logger.info("NetworkDevice %s: Deletion part of Sync completed" % dev.id)
-                dev.administrativeState = 'syncinprogress'
-                dev.save(update_fields=['administrativeState'])
-
-            # Now to the main options - are we syncing - creation portion
-            elif dev.administrativeState == 'syncinprogress' and deletion is False:
-
-                logger.info("NetworkDevice %s: administrativeState set to SyncRequested" % dev.id)
-                # Reload objects in the reverse order of deletion
-
-                # Add Ports
-                networkports = provider.get_network_ports()
-                for port in networkports:
-                    objs.append(port)
-
-                # Add Links
-                networklinks = provider.get_network_links()
-                for link in networklinks:
-                    objs.append(link)
-
-                logger.info("NetworkDevice %s: Creation part of Sync completed" % dev.id)
-                dev.administrativeState = 'enabled'
-                dev.save(update_fields=['administrativeState'])
-
-            # If we are enabled - then check for events - in either direction and sync
-            elif dev.administrativeState == 'enabled' and deletion is False:
-                logger.debug("NetworkDevice: administrativeState set to Enabled - non deletion phase")
-
-                # This should be the 'normal running state' when we are not deleting - a few things to do in here
-
-                # Get the changed objects from the provider - deletions are handled separately
-                eventobjs = provider.get_updated_or_created_objects()
-                for eventobj in eventobjs:
-                    # Simply put in the queue for update - this will handle both new and changed objects
-                    objs.append(eventobj)
-
-                # Handle changes XOS -> ONOS
-                # Check for ConnectivityObjects that are in acticationequested state - creates to the backend
-                p2pactivatereqs = NetworkEdgeToEdgePointConnection.objects.filter(adminstate='activationrequested')
-                mp2mpactivatereqs = NetworkMultipointToMultipointConnection.objects.filter(adminstate='activationrequested')
-                r2mpactivatereqs = NetworkEdgeToMultipointConnection.objects.filter(adminstate='activationrequested')
-                activatereqs = list(chain(p2pactivatereqs, mp2mpactivatereqs, r2mpactivatereqs))
-                for activatereq in activatereqs:
-
-                    # Call the XOS Interface to create the service
-                    logger.debug("Attempting to create EdgePointToEdgePointConnectivity: %s" % activatereq.id)
-                    if (provider.create_network_connectivity(activatereq)):
-                        # Everyting is OK, lets let the system handle the persist
-                        objs.append(activatereq)
-                    else:
-                        # In the case of an error we persist the state of the object directly to preserve
-                        # the error code - and because that is how the base synchronizer is designed
-                        activatereq.save()
-
-                # Check for ConnectivityObjects that are in deacticationequested state - deletes to the backend
-                p2pdeactivatereqs = NetworkEdgeToEdgePointConnection.objects.filter(adminstate='deactivationrequested')
-                mp2mpdeactivatereqs = NetworkMultipointToMultipointConnection.objects.filter(adminstate='deactivationrequested')
-                r2mpdeactivatereqs = NetworkEdgeToMultipointConnection.objects.filter(adminstate='deactivationrequested')
-                deactivatereqs = list(chain(p2pdeactivatereqs, mp2mpdeactivatereqs, r2mpdeactivatereqs))
-                for deactivatereq in deactivatereqs:
-
-                    # Call the XOS Interface to delete the service
-                    logger.debug("Attempting to delete EdgePointToEdgePointConnectivity: %s" % deactivatereq.id)
-                    if provider.delete_network_connectivity(deactivatereq):
-                        # Everyting is OK, lets let the system handle the persist
-                        objs.append(deactivatereq)
-                    else:
-                        # In the case of an error we persist the state of the object directly to preserve
-                        # the error code - and because that is how the base synchronizer is designed
-                        deactivatereq.save()
-
-            # If we are enabled - and in our deletion pass then look for objects waiting for deletion
-            elif dev.administrativeState == 'enabled' and deletion is True:
-                logger.debug("NetworkDevice: administrativeState set to Enabled - deletion phase")
-
-                # Any object that is simply deleted in the model gets removed automatically - the synchronizer
-                # doesn't get involved - we just need to check for deleted objects in the domain and reflect that
-                # in the model
-                #
-                # Get the deleted objects from the provider
-                eventobjs = provider.get_deleted_objects()
-                for eventobj in eventobjs:
-                    # Simply put in the queue for update - this will handle both new and changed objects
-                    objs.append(eventobj)
-
-                # Handle the case where we have deleted Eline Services from our side - if the Service is in
-                # enabled state then we call the provider, otherwise just queue it for deletion
-                elinedeletedobjs = NetworkEdgeToEdgePointConnection.deleted_objects.all()
-                for elinedeletedobj in elinedeletedobjs:
-                    if elinedeletedobj.adminstate == 'enabled':
-                        provider.delete_network_connectivity(elinedeletedobj)
-                    # Either way queue it for deletion
-                    objs.append(elinedeletedobj)
-
-                # Handle the case where we have deleted Etree Services from our side - if the Service is in
-                # enabled state then we call the provider, otherwise just queue it for deletion
-                etreedeletedobjs = NetworkEdgeToMultipointConnection.deleted_objects.all()
-                for etreedeletedobj in etreedeletedobjs:
-                    # TODO: Handle the case where its connected, we need to disconnect first
-                    if etreedeletedobj.adminstate == 'enabled':
-                        provider.delete_network_connectivity(etreedeletedobj)
-                    # Either way queue it for deletion
-                    objs.append(etreedeletedobj)
-
-                # Handle the case where we have deleted Elan Services from our side - if the Service is in
-                # enabled state then we call the provider, otherwise just queue it for deletion
-                elandeletedobjs = NetworkMultipointToMultipointConnection.deleted_objects.all()
-                for elandeletedobj in elandeletedobjs:
-                    # TODO: Handle the case where its connected, we need to disconnect first
-                    if elandeletedobj.adminstate == 'enabled':
-                        provider.delete_network_connectivity(elandeletedobj)
-                    # Either way queue it for deletion
-                    objs.append(elandeletedobj)
-
-                # Handle the case where we have deleted VnodGlobal Services from our side - if there is
-                # an attached Eline/Etree/Elan we set that to deleted
-                vnodbloaldeletedobjs = VnodGlobalService.deleted_objects.all()
-                for vnodbloaldeletedobj in vnodbloaldeletedobjs:
-                    # Check for dependent eline service
-                    if vnodbloaldeletedobj.metronetworkpointtopoint is not None:
-                        elineobj = vnodbloaldeletedobj.metronetworkpointtopoint
-                        elineobj.deleted = True
-                        objs.append(elineobj)
-                    # Check for dependent elan service
-                    if vnodbloaldeletedobj.metronetworkmultipoint is not None:
-                        elanobj = vnodbloaldeletedobj.metronetworkmultipoint
-                        elanobj.deleted = True
-                        objs.append(elanobj)
-                    # Check for dependent etree service
-                    if vnodbloaldeletedobj.metronetworkroottomultipoint is not None:
-                        etreeobj = vnodbloaldeletedobj.metronetworkroottomultipoint
-                        etreeobj.deleted = True
-                        objs.append(etreeobj)
-
-                    objs.append(vnodbloaldeletedobj)
-
-        # In add cases return the objects we are interested in
-        return objs
-
-    def sync_record(self, o):
-
-        # First we call and see if there is an invoker for this object - the idea of the invoker
-        # is to wrap the save with a pre/post paradigm to handle special cases
-        # It will only exist for a subset of ojbects
-        invoker = InvokerFactory.getinvoker(o)
-
-        # Call Pre-save on the inovker (if it exists)
-        if invoker is not None:
-            invoker.presave(o)
-
-        # Simply save the record to the DB - both updates and adds are handled the same way
-        o.save()
-
-        # Call Post-save on the inovker (if it exists)
-        if invoker is not None:
-            invoker.postsave(o)
-
-    def delete_record(self, o):
-        # Overriden to customize our behaviour - the core sync step for will remove the record directly
-        # We just log and return
-        logger.debug("deleting Object %s" % str(o), extra=o.tologdict())
-
-    def get_metronetwork_system(self):
-        # We only expect to have one of these objects in the system in the curent design
-        # So get the first element from the query
-        metronetworksystem = MetroNetworkSystem.objects.all()
-        if not metronetworksystem:
-            return None
-
-        return metronetworksystem[0]
diff --git a/xos/tosca/resources/metronetservice.py b/xos/tosca/resources/metronetservice.py
index 372337f..37d1d7d 100644
--- a/xos/tosca/resources/metronetservice.py
+++ b/xos/tosca/resources/metronetservice.py
@@ -1,37 +1,28 @@
 from xosresource import XOSResource
 from service import XOSService
-from services.metronetwork.models import *
-
-class XOSMetroNetworkSystem(XOSResource):
-    provides = "tosca.nodes.MetroNetworkSystem"
-    xos_model = MetroNetworkSystem
-    copyin_props = ["name", "administrativeState", "restUrl"]
-
-class MetroNetworkDevice(XOSResource):
-    provides = "tosca.nodes.MetroNetworkDevice"
-    xos_model = NetworkDevice
-    copyin_props = ["id", "name", "administrativeState", "username", "password", "authType", "restCtrlUrl"]
-
-class VnodGlobalService(XOSService):
-    provides = "tosca.nodes.VNodGlobalService"
-    xos_model = VnodGlobalService
-    copyin_props = ["view_url", "icon_url", "enabled", "published", "public_key", "versionNumber"]
-
-    def get_xos_args(self):
-        args = super(VnodGlobalService, self).get_xos_args()
-
-        profile = self.get_requirement("tosca.relationships.UsesBandwidthProfile", throw_exception=False)
-        if profile:
-            profile = self.get_xos_object(BandwidthProfile, name=profile)
-            args["bandwidthProfile"] = profile
-        return args
-
-class XOSMetronetBandwithProficle(XOSResource):
-    provides = "tosca.nodes.EcordBandwidthProfile"
-    xos_model = BandwidthProfile
-    copyin_props = ['bwpcfgcbs','bwpcfgebs','bwpcfgcir','bwpcfgeir','name']
+from services.metronet.models import *
 
 class XOSMetronetUNI(XOSResource):
-    provides = "tosca.nodes.EcordUserNetworkInterface"
+    provides = "tosca.nodes.UserNetworkInterface"
     xos_model = UserNetworkInterface
-    copyin_props = ['enabled','capacity','bw_used','vlanIds', 'location', 'latlng', 'name']
\ No newline at end of file
+    copyin_props = ['tenant','vlanIds', 'cpe_id', 'latlng', 'name']
+
+class XOSMetronetEnterpriseLocation(XOSResource):
+    provides = "tosca.nodes.EnterpriseLocation"
+    xos_model = EnterpriseLocation
+    copyin_props = ['name', 'cord_site_ip', 'cord_site_port', 'cord_site_username', 'cord_site_password', 'cord_site_type']
+
+class XOSMetronetOnosModel(XOSResource):
+    provides = "tosca.nodes.OnosModel"
+    xos_model = OnosModel
+    copyin_props = ['name', 'onos_ip', 'onos_port', 'onos_username', 'onos_password', 'onos_type']
+
+class XOSMetronetBandwithProfile(XOSResource):
+    provides = "tosca.nodes.BandwidthProfile"
+    xos_model = BandwidthProfile
+    copyin_props = ['cbs', 'ebs', 'cir', 'eir', 'name']
+
+class XOSMetronetELine(XOSResource):
+    provides = "tosca.nodes.ELine"
+    xos_model = ELine
+    copyin_props = ['name', 'connect_point_1_id', 'connect_point_2_id', 'vlanids', 'cord_site_name', 'bwp']
\ No newline at end of file
diff --git a/xos/tosca/resources/metronetservice.py.old b/xos/tosca/resources/metronetservice.py.old
new file mode 100644
index 0000000..372337f
--- /dev/null
+++ b/xos/tosca/resources/metronetservice.py.old
@@ -0,0 +1,37 @@
+from xosresource import XOSResource
+from service import XOSService
+from services.metronetwork.models import *
+
+class XOSMetroNetworkSystem(XOSResource):
+    provides = "tosca.nodes.MetroNetworkSystem"
+    xos_model = MetroNetworkSystem
+    copyin_props = ["name", "administrativeState", "restUrl"]
+
+class MetroNetworkDevice(XOSResource):
+    provides = "tosca.nodes.MetroNetworkDevice"
+    xos_model = NetworkDevice
+    copyin_props = ["id", "name", "administrativeState", "username", "password", "authType", "restCtrlUrl"]
+
+class VnodGlobalService(XOSService):
+    provides = "tosca.nodes.VNodGlobalService"
+    xos_model = VnodGlobalService
+    copyin_props = ["view_url", "icon_url", "enabled", "published", "public_key", "versionNumber"]
+
+    def get_xos_args(self):
+        args = super(VnodGlobalService, self).get_xos_args()
+
+        profile = self.get_requirement("tosca.relationships.UsesBandwidthProfile", throw_exception=False)
+        if profile:
+            profile = self.get_xos_object(BandwidthProfile, name=profile)
+            args["bandwidthProfile"] = profile
+        return args
+
+class XOSMetronetBandwithProficle(XOSResource):
+    provides = "tosca.nodes.EcordBandwidthProfile"
+    xos_model = BandwidthProfile
+    copyin_props = ['bwpcfgcbs','bwpcfgebs','bwpcfgcir','bwpcfgeir','name']
+
+class XOSMetronetUNI(XOSResource):
+    provides = "tosca.nodes.EcordUserNetworkInterface"
+    xos_model = UserNetworkInterface
+    copyin_props = ['enabled','capacity','bw_used','vlanIds', 'location', 'latlng', 'name']
\ No newline at end of file
