diff --git a/README.md b/README.md
index d7e8965..36434ee 100644
--- a/README.md
+++ b/README.md
@@ -5,3 +5,4 @@
 Sub-directories
 
 * xos: A service definition for the VNOD Local. This follows the XOS component design for onboarding.
+
diff --git a/xos/attic/header.py b/xos/attic/header.py
new file mode 100644
index 0000000..2e7d94d
--- /dev/null
+++ b/xos/attic/header.py
@@ -0,0 +1,10 @@
+# models.py -  VNOD Local Service
+
+from django.db import models
+from django.db.models import *
+from core.models import Service
+from core.models import PlCoreBase
+
+VNODLOCAL_KIND = "vnodlocal"
+SERVICE_NAME = 'vnodlocal'
+
diff --git a/xos/attic/vnodelocalservice_model.py b/xos/attic/vnodelocalservice_model.py
new file mode 100644
index 0000000..3c7c3d5
--- /dev/null
+++ b/xos/attic/vnodelocalservice_model.py
@@ -0,0 +1 @@
+def __unicode__(self):  return u'%s:%s' % (self.servicehandle, self.portid)
diff --git a/xos/attic/vnodlocalsystem_model.py b/xos/attic/vnodlocalsystem_model.py
new file mode 100644
index 0000000..6077b48
--- /dev/null
+++ b/xos/attic/vnodlocalsystem_model.py
@@ -0,0 +1,15 @@
+def __init__(self, *args, **kwargs):
+    super(VnodLocalSystem, self).__init__(*args, **kwargs)
+
+
+def getAdminstrativeState(self):
+    return self.administrativeState
+
+
+def setAdminstrativeState(self, value):
+    self.administrativeState = value
+
+
+def getRestUrl(self):
+    return self.restUrl
+
diff --git a/xos/header.py b/xos/header.py
new file mode 120000
index 0000000..721b5c0
--- /dev/null
+++ b/xos/header.py
@@ -0,0 +1 @@
+attic/header.py
\ No newline at end of file
diff --git a/xos/metronet-local.xproto b/xos/metronet-local.xproto
new file mode 100644
index 0000000..bcb90a8
--- /dev/null
+++ b/xos/metronet-local.xproto
@@ -0,0 +1,41 @@
+option name = "vnodlocal";
+
+message VnodLocalSystem (PlCoreBase){
+     option verbose_name = "VNOD Local 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 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 = "enabled", choices = "(('enabled', 'Enabled'), ('disabled', 'Disabled'))", max_length = 16, blank = False, null = False, db_index = False];
+     required string pseudowireprovider = 7 [default = "none", max_length = 256, null = False, db_index = False, blank = False];
+     required string networkControllerUrl = 8 [db_index = False, max_length = 256, null = False, blank = True];
+}
+
+message VnodLocalService (Service){
+     option verbose_name = "Virtual Network On Demand Local Service";
+
+     required string portid = 1 [db_index = False, max_length = 256, null = False, blank = True];
+     required string vlanid = 2 [db_index = False, max_length = 256, null = False, blank = True];
+     required string servicehandle = 3 [db_index = False, max_length = 256, null = False, blank = False];
+     required bool autoattached = 4 [default = False, null = False, db_index = False, blank = True];
+     required string administrativeState = 5 [default = "disabled", choices = "(('disabled', 'Disabled'), ('configurationrequested', 'ConfigurationRequested'), ('configurationfailed', 'ConfigurationFailed'), ('configured', 'Configured'), ('activationrequested', 'ActivationRequested'), ('activationfailed', 'ActivationFailed'), ('enabled', 'Enabled'), ('deactivationrequested', 'DeactivationRequested'))", max_length = 64, blank = False, null = False, db_index = False];
+     required string operstate = 6 [default = "inactive", choices = "(('active', 'Active'), ('inactivereported', 'InactiveReported'), ('inactive', 'Inactive'), ('activereported', 'ActiveReported'))", max_length = 64, blank = False, null = False, db_index = False];
+}
+
+message VnodLocalPseudowireConnectorService (Service){
+     option verbose_name = "Virtual Network On Demand Local Pseudo-wire Connector Service";
+
+     required string servicehandle = 1 [db_index = False, max_length = 256, null = False, blank = False];
+     required string pseudowirehandle = 2 [db_index = False, max_length = 256, null = False, blank = True];
+     required string internalport = 3 [db_index = False, max_length = 256, null = False, blank = False];
+     optional manytoone vnodlocal->VnodLocalService:VnodLocalService = 4 [db_index = True, null = True, blank = False];
+     required string administrativeState = 5 [default = "disabled", choices = "(('disabled', 'Disabled'), ('activationrequested', 'ActivationRequested'), ('enabled', 'Enabled'), ('deactivationrequested', 'DeactivationRequested'))", max_length = 64, blank = False, null = False, db_index = False];
+     required string operstate = 6 [default = "inactive", choices = "(('active', 'Active'), ('inactive', 'Inactive'))", max_length = 64, blank = False, null = False, db_index = False];
+}
+
+
+
+
+
diff --git a/xos/models.py b/xos/models.py
deleted file mode 100644
index 1484129..0000000
--- a/xos/models.py
+++ /dev/null
@@ -1,167 +0,0 @@
-# models.py -  VNOD Local Service
-
-from django.db import models
-from core.models import Service
-from core.models import PlCoreBase
-
-VNODLOCAL_KIND = "vnodlocal"
-SERVICE_NAME = 'vnodlocal'
-
-class VnodLocalSystem(PlCoreBase):
-    class Meta:
-        app_label = VNODLOCAL_KIND
-        verbose_name = "VNOD Local System"
-
-    ADMINISTRATIVE_STATE = (
-        ('enabled', 'Enabled'),
-        ('disabled', 'Disabled')
-    )
-
-    name = models.CharField(unique=True,
-                        verbose_name="Name",
-                        max_length=256,
-                        editable=True)
-
-    description = models.CharField(verbose_name="Description",
-                               max_length=1024,
-                               editable=True)
-
-    restUrl = models.CharField(verbose_name="MetroNetwork Rest URL",
-                           max_length=256,
-                           editable=True)
-
-    username = models.CharField(verbose_name='Username',
-                                max_length=32,
-                                editable=True,
-                                blank=True)
-
-    password = models.CharField(max_length=32,
-                                verbose_name='Password',
-                                editable=True,
-                                blank=True)
-
-    administrativeState = models.CharField(choices=ADMINISTRATIVE_STATE,
-                                       default='enabled',
-                                       verbose_name="AdministrativeState",
-                                       max_length=16,
-                                       editable=True)
-
-    pseudowireprovider = models.CharField(unique=False,
-                            verbose_name="Pseudowire Provider",
-                            default='none',
-                            max_length=256,
-                            editable=True)
-
-    networkControllerUrl = models.CharField(verbose_name="Network Controller URL",
-                                          blank=True,
-                                          max_length=256,
-                                          editable=True)
-
-    def __init__(self, *args, **kwargs):
-        super(VnodLocalSystem, self).__init__(*args, **kwargs)
-
-
-    def getAdminstrativeState(self):
-        return self.administrativeState
-
-
-    def setAdminstrativeState(self, value):
-        self.administrativeState = value
-
-
-    def getRestUrl(self):
-        return self.restUrl
-
-
-class VnodLocalService(Service):
-
-    class Meta:
-        app_label = VNODLOCAL_KIND
-        verbose_name = "Virtual Network On Demand Local Service"
-
-    ADMINISTRATIVE_STATE = (
-        ('disabled', 'Disabled'),
-        ('configurationrequested', 'ConfigurationRequested'),
-        ('configurationfailed', 'ConfigurationFailed'),
-        ('configured', 'Configured'),
-        ('activationrequested', 'ActivationRequested'),
-        ('activationfailed', 'ActivationFailed'),
-        ('enabled', 'Enabled'),
-        ('deactivationrequested', 'DeactivationRequested')
-    )
-
-    OPERATIONALSTATE = (
-        ('active', 'Active'),
-        ('inactivereported', 'InactiveReported'),
-        ('inactive', 'Inactive'),
-        ('activereported', 'ActiveReported')
-    )
-
-    portid = models.CharField(verbose_name="PortId", blank=True, max_length=256, editable=True)
-    vlanid = models.CharField(verbose_name="VlanId", blank=True, max_length=256, editable=True)
-    servicehandle = models.CharField(verbose_name="Service Handle", max_length=256, editable=True)
-    autoattached = models.BooleanField(verbose_name="Auto-Attached", default=False, editable=True)
-
-    administrativeState = models.CharField(choices=ADMINISTRATIVE_STATE,
-                                           default='disabled',
-                                           verbose_name="AdministrativeState",
-                                           max_length=64,
-                                           editable=True)
-
-    operstate = models.CharField(choices=OPERATIONALSTATE,
-                                 default='inactive',
-                                 verbose_name="OperationalState",
-                                 max_length=64,
-                                 editable=True)
-
-
-    def __init__(self, *args, **kwargs):
-        super(VnodLocalService, self).__init__(*args, **kwargs)
-
-    def __unicode__(self):  return u'%s:%s' % (self.servicehandle, self.portid)
-
-
-class VnodLocalPseudowireConnectorService(Service):
-
-    class Meta:
-        app_label = VNODLOCAL_KIND
-        verbose_name = "Virtual Network On Demand Local Pseudo-wire Connector Service"
-
-    ADMINISTRATIVE_STATE = (
-        ('disabled', 'Disabled'),
-        ('activationrequested', 'ActivationRequested'),
-        ('enabled', 'Enabled'),
-        ('deactivationrequested', 'DeactivationRequested')
-    )
-
-    OPERATIONALSTATE = (
-        ('active', 'Active'),
-        ('inactive', 'Inactive')
-    )
-
-    servicehandle = models.CharField(verbose_name="Service Handle", max_length=256, editable=True)
-    pseudowirehandle = models.CharField(verbose_name="Pseudowirehandle", blank=True, max_length=256, editable=True)
-    internalport = models.CharField(verbose_name="Internal Port", max_length=256, editable=True)
-
-    vnodlocal = models.ForeignKey(VnodLocalService,
-                                  related_name='VnodLocalService',
-                                  verbose_name="VnodLocalService",
-                                  null=True,
-                                  editable=True,
-                                  on_delete=models.CASCADE)
-
-    administrativeState = models.CharField(choices=ADMINISTRATIVE_STATE,
-                                           default='disabled',
-                                           verbose_name="AdministrativeState",
-                                           max_length=64,
-                                           editable=True)
-
-    operstate = models.CharField(choices=OPERATIONALSTATE,
-                                 default='inactive',
-                                 verbose_name="OperationalState",
-                                 max_length=64,
-                                 editable=True)
-
-
-    def __init__(self, *args, **kwargs):
-        super(VnodLocalPseudowireConnectorService, self).__init__(*args, **kwargs)
diff --git a/xos/vnodlocal-onboard.yaml b/xos/vnodlocal-onboard.yaml
index c1a7387..6628d7e 100644
--- a/xos/vnodlocal-onboard.yaml
+++ b/xos/vnodlocal-onboard.yaml
@@ -13,7 +13,7 @@
           base_url: file:///opt/xos_services/metronet-local/xos/
           # The following will concatenate with base_url automatically, if
           # base_url is non-null.
-          models: models.py
+          xproto: ./
           admin: admin.py
           rest_service: subdirectory:vnodlocalservice api/service/vnodlocalservice/vnodlocalservice.py
           synchronizer: synchronizer/manifest
