diff --git a/xos/api/service/progran.py b/xos/api/service/progran.py
deleted file mode 100644
index f8619e0..0000000
--- a/xos/api/service/progran.py
+++ /dev/null
@@ -1,99 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-from rest_framework.decorators import api_view
-from rest_framework.response import Response
-from rest_framework.reverse import reverse
-from rest_framework import serializers
-from rest_framework import generics
-from rest_framework import status
-from core.models import *
-from django.forms import widgets
-from services.progran.models import *
-from xos.apibase import XOSListCreateAPIView, XOSRetrieveUpdateDestroyAPIView, XOSPermissionDenied
-from api.xosapi_helpers import PlusModelSerializer, XOSViewSet, ReadOnlyField
-import json
-
-BASE_NAME = 'progran'
-
-
-class VProgranProfileSerializer(PlusModelSerializer):
-    id = ReadOnlyField()
-    uiid = serializers.CharField(required=False)
-    profile = serializers.CharField(required=False)
-    dlrate = serializers.CharField(required=False)
-    ulrate = serializers.CharField(required=False)
-
-
-    class Meta:
-        model = VProgranProfile
-        fields = ('uiid','id', 'profile', 'dlrate' , 'ulrate')
-
-
-
-
-class VProgranImsiSerializer(PlusModelSerializer):
-    id = ReadOnlyField()
-    uiid = serializers.CharField(required=False)
-    imsi = serializers.CharField(required=False)
-    profile  = serializers.CharField(required=False)
-
-
-    class Meta:
-        model = VProgranImsi
-        fields = ('uiid','id', 'imsi', "profile")
-
-
-class ProgranProfileViewSet(XOSViewSet):
-    base_name = "progran"
-    method_name = "profile"
-    method_kind = "viewset"
-    queryset = VProgranProfile.objects.all()
-    serializer_class = VProgranProfileSerializer
-
-    @classmethod
-    def get_urlpatterns(self, api_path="^"):
-        patterns = super(ProgranProfileViewSet, 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 ProgranImsiViewSet(XOSViewSet):
-    base_name = "progran"
-    method_name = "imsi"
-    method_kind = "viewset"
-    queryset = VProgranImsi.objects.all()
-    serializer_class = VProgranImsiSerializer
-
-    @classmethod
-    def get_urlpatterns(self, api_path="^"):
-        patterns = super(ProgranImsiViewSet, 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)
\ No newline at end of file
diff --git a/xos/models.py b/xos/models.py
deleted file mode 100644
index c85cded..0000000
--- a/xos/models.py
+++ /dev/null
@@ -1,107 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-from django.db import models
-from core.models import Service, XOSBase, Slice, Instance, Tenant, TenantWithContainer, Node, Image, User, Flavor, Subscriber, NetworkParameter, NetworkParameterType, Port, AddressPool
-from core.models.xosbase import StrippedCharField
-import os
-from django.db import models, transaction
-from django.forms.models import model_to_dict
-from django.db.models import Q
-from operator import itemgetter, attrgetter, methodcaller
-from core.models import Tag
-from core.models.service import LeastLoadedNodeScheduler
-import traceback
-from xos.exceptions import *
-from xos.config import Config
-
-
-class ConfigurationError(Exception):
-    pass
-
-
-PROGRAN_KIND = "Progran"
-APP_LABEL = "progran"
-
-
-
-class VProgranService(Service):
-    KIND = PROGRAN_KIND
-
-    class Meta:
-        app_label = APP_LABEL
-        verbose_name = "Progran Service"
-        proxy = True
-
-    default_attributes = {
-        "rest_hostname": "10.6.0.1",
-        "rest_port": "8183",
-        "rest_user": "onos",
-        "rest_pass": "rocks"
-    }
-
-    @property
-    def rest_hostname(self):
-        return self.get_attribute("rest_hostname", self.default_attributes["rest_hostname"])
-
-    @rest_hostname.setter
-    def rest_hostname(self, value):
-        self.set_attribute("rest_hostname", value)
-
-    @property
-    def rest_port(self):
-        return self.get_attribute("rest_port", self.default_attributes["rest_port"])
-
-    @rest_port.setter
-    def rest_port(self, value):
-        self.set_attribute("rest_port", value)
-
-    @property
-    def rest_user(self):
-        return self.get_attribute("rest_user", self.default_attributes["rest_user"])
-
-    @rest_user.setter
-    def rest_user(self, value):
-        self.set_attribute("rest_user", value)
-
-    @property
-    def rest_pass(self):
-        return self.get_attribute("rest_pass", self.default_attributes["rest_pass"])
-
-
-
-
-class VProgranImsi(XOSBase):
-    class Meta:
-        app_label = APP_LABEL
-        verbose_name = "vProgran Imsi"
-
-    uiid = models.IntegerField( help_text="uiid ", null=False, blank=False)
-    imsi = models.CharField(max_length=20, help_text="imsi ", null=False, blank=False)
-    profile = models.CharField(max_length=20, help_text="profile name", null=True, blank=True)
-
-
-class VProgranProfile(XOSBase):
-
-    class Meta:
-        app_label = APP_LABEL
-        verbose_name = "vProgran Profile"
-
-    uiid = models.IntegerField( help_text="uiid ", null=False, blank=False)
-    profile = models.CharField(max_length=20, help_text="profile name", null=False, blank=False)
-    dlrate = models.IntegerField( help_text="device download rate", null=False, blank=False)
-    ulrate = models.IntegerField( help_text="device upload rate", null=False, blank=False )
-
diff --git a/xos/models/models.py b/xos/models/models.py
new file mode 100644
index 0000000..2e7df7b
--- /dev/null
+++ b/xos/models/models.py
@@ -0,0 +1,60 @@
+from core.models import Service
+from xos.exceptions import XOSValidationError
+
+from models_decl import ProgranService_decl
+from models_decl import ENodeB_decl
+from models_decl import Handover_decl
+from models_decl import ProgranServiceInstance_decl
+
+
+
+
+
+
+
+class ProgranService(ProgranService_decl):
+    class Meta:
+        proxy = True
+
+
+class ENodeB(ENodeB_decl):
+    class Meta:
+        proxy = True
+
+
+class Handover(Handover_decl):
+    class Meta:
+        proxy = True
+
+
+class ProgranServiceInstance(ProgranServiceInstance_decl):
+    class Meta:
+        proxy = True
+
+    def save(self, *args, **kwargs):
+        # NOTE someone is setting owner_id, so just override it for now
+        # if not self.owner_id:
+        services = Service.objects.all()
+        services = [s for s in services if s.name.lower() == 'progran']
+
+        # NOTE select the correct owner
+        try:
+            progran_service = services[0]
+            self.owner_id = progran_service.id
+        except IndexError:
+            raise XOSValidationError("Service Progran cannot be found, please make sure that the model exists.")
+
+        # NOTE if the instance is new, check that the name is not duplicated
+        instances_with_same_name = None
+        if self.pk is None:
+            try:
+                instances_with_same_name = ProgranServiceInstance.objects.get(name=self.name)
+            except self.DoesNotExist:
+                # it's ok not to find anything here
+                pass
+
+        if instances_with_same_name:
+            raise XOSValidationError("A ProgranServiceInstance with name '%s' already exists" % self.name)
+        super(ProgranServiceInstance, self).save(*args, **kwargs)
+
+
diff --git a/xos/models/progran.xproto b/xos/models/progran.xproto
new file mode 100644
index 0000000..14206ac
--- /dev/null
+++ b/xos/models/progran.xproto
@@ -0,0 +1,50 @@
+option app_label = "progran";
+option name = "progran";
+option legacy = "True";
+
+message ProgranService (Service){
+    option verbose_name = "Progran Service";
+    required string onos_address = 1 [help_text = "Address of the progran ONOS", default = "onos-progran",  max_length = 254, null = False, db_index = False, blank = False];
+    required string onos_port = 2 [help_text = "Port of the progran ONOS", default = "8183", max_length = 254, null = False, db_index = False, blank = False];
+    required string onos_username = 3 [help_text = "Username of the progran ONOS", default = "karaf", max_length = 254, null = False, db_index = False, blank = False];
+    required string onos_password = 4 [help_text = "Password of the progran ONOS", default = "karaf", max_length = 254, null = False, db_index = False, blank = False];
+}
+
+message ENodeB (XOSBase){
+    option verbose_name = "eNodeB";
+    required string description = 1 [db_index = False, max_length = 256, null = False, blank = False];
+    required string enbId = 2 [help_text = "ID of this enodeb", db_index = False, max_length = 256, null = False, blank = False];
+    required string ipAddr = 3 [help_text = "IP address of this enodeb", db_index = False, max_length = 256, null = False, blank = False];
+}
+
+message Handover (XOSBase){
+    option verbose_name = "Handover";
+    required int32 A3offset = 1 [default = 2, db_index = False, null = False, blank = False];
+    required int32 HysteresisA3 = 2 [default = 1, db_index = False, null = False, blank = False];
+    required int32 A3TriggerQuantity = 3 [default = 0, db_index = False, null = False, blank = False];
+    required int32 A5TriggerType = 4 [default = 0, db_index = False, null = False, blank = False];
+    required int32 A5Thresh1Rsrp = 5 [default = -97, db_index = False, null = False, blank = False];
+    required int32 A5Thresh1Rsrq = 6 [default = -10, db_index = False, null = False, blank = False];
+    required int32 A5Thresh2Rsrp = 7 [default = -95, db_index = False, null = False, blank = False];
+    required int32 A5Thresh2Rsrq = 8 [default = -8, db_index = False, null = False, blank = False];
+    required int32 HysteresisA5 = 9 [default = 1, db_index = False, null = False, blank = False];
+    required int32 A5TriggerQuantity = 10 [default = 0, db_index = False, null = False, blank = False];
+}
+
+message ProgranServiceInstance (ServiceInstance){
+    option verbose_name = "Progran Service Instance";
+    option description = "Represent a Profile in the Progran ONOS Application";
+
+    required string DlSchedType = 1 [default = "vm", choices = "(('RR', 'Round Robin'),)", max_length = 30, blank = False, null = False, db_index = False];
+    required int32 DlAllocRBRate = 2 [db_index = False, null = False, blank = False];
+    required string UlSchedType = 3 [default = "vm", choices = "(('RR', 'Round Robin'),)", max_length = 30, blank = False, null = False, db_index = False];
+    required int32 UlAllocRBRate = 4 [db_index = False, null = False, blank = False];
+    required string start = 5 [content_type = "date", null = False, blank = True];
+    required string end = 6 [content_type = "date", null = False, blank = True];
+    required string AdmControl = 7 [default = "0", choices = "(('0', 'ALL'), ('1', 'Voice Only'), ('2', 'Data Only'))", max_length = 1, blank = False, null = False, db_index = False];
+    required int32 CellIndividualOffset = 8 [db_index = False, null = False, blank = False];
+    required manytoone enodeb->ENodeB:profiles = 9 [db_index = True, null = False, blank = False];
+    required manytoone handover->Handover:profiles = 10 [db_index = True, null = True, blank = False];
+}
+
+
diff --git a/xos/progran-onboard.yaml b/xos/progran-onboard.yaml
index 1135380..87424a3 100644
--- a/xos/progran-onboard.yaml
+++ b/xos/progran-onboard.yaml
@@ -29,10 +29,4 @@
           base_url: file:///opt/xos_services/progran/xos/
           # The following will concatenate with base_url automatically, if
           # base_url is non-null.
-          models: models.py
-          #admin: admin.py
-          #tosca_custom_types: progran.yaml
-          #tosca_resource: tosca/resources/progranservice.py
-          rest_service: api/service/progran.py
-          synchronizer: synchronizer/manifest
-          synchronizer_run: progran-synchronizer.py
+          xproto: models/
diff --git a/xos/progran.yaml b/xos/progran.yaml
deleted file mode 100644
index bd2f066..0000000
--- a/xos/progran.yaml
+++ /dev/null
@@ -1,289 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-tosca_definitions_version: tosca_simple_yaml_1_0
-
-# compile this with "m4 vrouter.m4 > vrouter.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.ProgranService:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The Progran 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.
-            rest_hostname:
-                type: string
-                required: false
-            rest_port:
-                type: string
-                required: false
-            rest_user:
-                type: string
-                required: false
-            rest_pass:
-                type: string
-                required: false
-
-    tosca.nodes.ProgranDevice:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The Progran Device.
-        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
-            openflow_id:
-                type: string
-                required: true
-            config_key:
-                type: string
-                required: false
-            driver:
-                type: string
-                required: true
-
-    tosca.nodes.VRouterPort:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The vRouter Port.
-        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
-            openflow_id:
-                type: string
-                required: true
-
-    tosca.nodes.VRouterInterface:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The vRouter Interface.
-        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
-            name:
-                type: string
-                required: true
-            mac:
-                type: string
-                required: true
-            vlan:
-                type: string
-                required: false
-
-    tosca.nodes.VRouterIp:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The vRouter Ip.
-        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
-            ip:
-                type: string
-                required: true
-
-    tosca.nodes.VRouterApp:
-        derived_from: tosca.nodes.Root
-        description: >
-            CORD: The vRouter ONOS App Config.
-        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
-            name:
-                type: string
-                required: true
-            control_plane_connect_point:
-                type: string
-                required: true
-            ospf_enabled:
-                type: boolean
-                required: true
-
-    tosca.relationships.PortOfDevice:
-            derived_from: tosca.relationships.Root
-            valid_target_types: [ tosca.capabilities.xos.VRouterPort ]
-
-    tosca.relationships.InterfaceOfPort:
-            derived_from: tosca.relationships.Root
-            valid_target_types: [ tosca.capabilities.xos.VRouterInterface ]
-
-    tosca.relationships.IpOfInterface:
-            derived_from: tosca.relationships.Root
-            valid_target_types: [ tosca.capabilities.xos.VRouterIp ]
diff --git a/xos/synchronizer/Dockerfile.synchronizer b/xos/synchronizer/Dockerfile.synchronizer
new file mode 100644
index 0000000..b0c967c
--- /dev/null
+++ b/xos/synchronizer/Dockerfile.synchronizer
@@ -0,0 +1,59 @@
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# docker build -t xosproject/progran-synchronizer:candidate -f Dockerfile.synchronizer .
+
+# xosproject/progran-synchronizer
+
+FROM xosproject/xos-synchronizer-base:candidate
+
+COPY . /opt/xos/synchronizers/progran
+
+ENTRYPOINT []
+
+WORKDIR "/opt/xos/synchronizers/progran"
+
+# Label image
+ARG org_label_schema_schema_version=1.0
+ARG org_label_schema_name=progran-synchronizer
+ARG org_label_schema_version=unknown
+ARG org_label_schema_vcs_url=unknown
+ARG org_label_schema_vcs_ref=unknown
+ARG org_label_schema_build_date=unknown
+ARG org_opencord_vcs_commit_date=unknown
+ARG org_opencord_component_chameleon_version=unknown
+ARG org_opencord_component_chameleon_vcs_url=unknown
+ARG org_opencord_component_chameleon_vcs_ref=unknown
+ARG org_opencord_component_xos_version=unknown
+ARG org_opencord_component_xos_vcs_url=unknown
+ARG org_opencord_component_xos_vcs_ref=unknown
+
+LABEL org.label-schema.schema-version=$org_label_schema_schema_version \
+      org.label-schema.name=$org_label_schema_name \
+      org.label-schema.version=$org_label_schema_version \
+      org.label-schema.vcs-url=$org_label_schema_vcs_url \
+      org.label-schema.vcs-ref=$org_label_schema_vcs_ref \
+      org.label-schema.build-date=$org_label_schema_build_date \
+      org.opencord.vcs-commit-date=$org_opencord_vcs_commit_date \
+      org.opencord.component.chameleon.version=$org_opencord_component_chameleon_version \
+      org.opencord.component.chameleon.vcs-url=$org_opencord_component_chameleon_vcs_url \
+      org.opencord.component.chameleon.vcs-ref=$org_opencord_component_chameleon_vcs_ref \
+      org.opencord.component.xos.version=$org_opencord_component_xos_version \
+      org.opencord.component.xos.vcs-url=$org_opencord_component_xos_vcs_url \
+      org.opencord.component.xos.vcs-ref=$org_opencord_component_xos_vcs_ref
+
+CMD bash -c "service filebeat start; cd /opt/xos/synchronizers/progran; ./run.sh"
+
diff --git a/xos/synchronizer/curl_sample.md b/xos/synchronizer/curl_sample.md
deleted file mode 100644
index d5c59d2..0000000
--- a/xos/synchronizer/curl_sample.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# Progran App
-
-
-## Add Profile
-`curl --user onos:rocks -v -H "Accept: application/json" -H "Content-Type: application/json" -X POST --data '{"Name":"mme2","DlSchedType":"RR","UlSchedType":"RR","DlAllocRBRate":0,"UlAllocRBRate":0,"CellIndividualOffset":1,"AdmControl":0,"MMECfg":{"IPAddr":"10.10.2.7","Port":36412},"DlWifiRate":0,"Handover":{"A3Hysteresis":1,"A3TriggerQuantity":0,"A3offset":0,"A5Hysteresis":1,"A5Thresh1Rsrp":80,"A5Thresh1Rsrq":20,"A5Thresh2Rsrp":90,"A5Thresh2Rsrq":20,"A5TriggerQuantity":0},"Start":"","End":"","Status":1}' http://onos-fabric:8183/onos/progran/profile`
-
-
-## Add imsi to profile
-`curl --user onos:rocks -H "Content-Type: application/json" -X POST -d '{"profile":"slice1", "imsi": "1111111"}'  http://onos-fabric:8183/onos/progran/mwc/connect`
-
-## Update profile
-`curl --user onos:rocks -H "Content-Type: application/json" -X POST -d '{"profile":"slice2", "ul": "20","dl":"20"}'  http://onos-fabric:8183/onos/progran/mwc/profile`
-
-## Update Profile
-`curl --user onos:rocks -v -H "Accept: application/json" -H "Content-Type: application/json" -X GET --data ' http://onos-fabric:8183/onos/progran/mwc/list`
-
-
-
-post
-/mwc/profile
-/mwc/connect
-
-get
-/mwc/list
-
-
-curl --user onos:rocks -H "Content-Type: application/json" -X POST -d '{"profile":"slice1", "imsi": "12345678"}'  http://10.1.8.65:8181/onos/progran/mwc/connect
-
-
-curl  -sSL --user onos:rocks  -H "Accept: application/json" -H "Content-Type: application/json" -X POST --data '{"IMSI":"001010000000343"}' http://10.1.8.65:8181/onos/progran/imsi
diff --git a/xos/synchronizer/manifest b/xos/synchronizer/manifest
deleted file mode 100644
index 898c164..0000000
--- a/xos/synchronizer/manifest
+++ /dev/null
@@ -1,7 +0,0 @@
-manifest
-model_deps
-run.sh
-steps/sync_imsi.py
-steps/sync_profile.py
-progran-synchronizer.py
-progran_config
diff --git a/xos/synchronizer/progran-synchronizer.py b/xos/synchronizer/progran-synchronizer.py
index 9219702..9632c8e 100644
--- a/xos/synchronizer/progran-synchronizer.py
+++ b/xos/synchronizer/progran-synchronizer.py
@@ -21,9 +21,13 @@
 import importlib
 import os
 import sys
+from xosconfig import Config
+
+config_file = os.path.abspath(os.path.dirname(os.path.realpath(__file__)) + '/progran_config.yml')
+Config.init(config_file, 'synchronizer-config-schema.yaml')
 
 synchronizer_path = os.path.join(os.path.dirname(
-    os.path.realpath(__file__)), "../../synchronizers/base")
+    os.path.realpath(__file__)), "../../synchronizers/new_base")
 sys.path.append(synchronizer_path)
 mod = importlib.import_module("xos-synchronizer")
 mod.main()
diff --git a/xos/synchronizer/progran_config b/xos/synchronizer/progran_config
deleted file mode 100644
index 99d382f..0000000
--- a/xos/synchronizer/progran_config
+++ /dev/null
@@ -1,23 +0,0 @@
-# Required by XOS
-[db]
-name=xos
-user=postgres
-password=password
-host=xos_db
-port=5432
-
-# Required by XOS
-[api]
-nova_enabled=True
-
-# Sets options for the synchronizer
-[observer]
-name=progran
-dependency_graph=/opt/xos/synchronizers/progran/model_deps
-steps_dir=/opt/xos/synchronizers/progran/steps
-sys_dir=/opt/xos/synchronizers/progran/sys
-logfile=/var/log/xos_backend.log
-pretend=False
-backoff_disabled=True
-save_ansible_output=True
-proxy_ssh=False
diff --git a/xos/synchronizer/progran_config.yml b/xos/synchronizer/progran_config.yml
new file mode 100644
index 0000000..a624152
--- /dev/null
+++ b/xos/synchronizer/progran_config.yml
@@ -0,0 +1,50 @@
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+name: progran
+accessor:
+  username: xosadmin@opencord.org
+  password: "@/opt/xos/services/progran/credentials/xosadmin@opencord.org"
+required_models:
+  - ProgranService
+  - ProgranServiceInstance
+  - MCordSubscriberInstance
+  - ENodeB
+  - Handover
+dependency_graph: "/opt/xos/synchronizers/progran/model_deps"
+steps_dir: "/opt/xos/synchronizers/progran/steps"
+sys_dir: "/opt/xos/synchronizers/progran/sys"
+# model_policies_dir: "/opt/xos/synchronizers/progran/model_policies"
+
+
+keep_temp_files: True
+
+logging:
+  version: 1
+  handlers:
+    console:
+      class: logging.StreamHandler
+    file:
+      class: logging.handlers.RotatingFileHandler
+      filename: /var/log/xos.log
+      maxBytes: 10485760
+      backupCount: 5
+  loggers:
+    '':
+      handlers:
+          - console
+          - file
+      level: DEBUG
\ No newline at end of file
diff --git a/xos/synchronizer/run.sh b/xos/synchronizer/run.sh
old mode 100644
new mode 100755
index a59b98d..63c8460
--- a/xos/synchronizer/run.sh
+++ b/xos/synchronizer/run.sh
@@ -14,5 +14,4 @@
 # limitations under the License.
 
 
-export XOS_DIR=/opt/xos
-python progran-synchronizer.py  -C $XOS_DIR/synchronizers/progran/progran_config
+python progran-synchronizer.py
diff --git a/xos/synchronizer/steps/progran_curl.yaml b/xos/synchronizer/steps/progran_curl.yaml
new file mode 100644
index 0000000..f567a3b
--- /dev/null
+++ b/xos/synchronizer/steps/progran_curl.yaml
@@ -0,0 +1,37 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+- hosts: 127.0.0.1
+  connection: local
+  vars:
+    - profile: '{{ profile }}'
+    - endpoint: '{{ endpoint }}'
+
+  tasks:
+    - debug:
+        msg: "{{ '{{' }} profile {{ '}}' }}"
+    # NOTE that the task has a generic name as it's planned to be used for all the requests
+    - name: Call onos Progran
+      uri:
+        url: "http://{{ onos_url }}:{{ onos_port }}/onos/progran/{{ '{{' }} endpoint {{ '}}' }}"
+        method: "{{ method }}"
+        user: "{{ onos_username }}"
+        password: "{{ onos_password }}"
+        force_basic_auth: yes
+        status_code: 200
+        {% if method == "POST" or method == "PUT" -%}
+        body: "{{ '{{' }} profile {{ '}}' }}"
+        body_format: json
+        {%- endif -%}
diff --git a/xos/synchronizer/steps/sync_imsi.py b/xos/synchronizer/steps/sync_imsi.py
deleted file mode 100644
index 0149702..0000000
--- a/xos/synchronizer/steps/sync_imsi.py
+++ /dev/null
@@ -1,76 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-import os
-import sys
-import requests
-import json
-from django.db.models import Q, F
-from services.progran.models import *
-from synchronizers.base.syncstep import SyncStep
-from xos.logger import Logger, logging
-
-# from core.models import Service
-from requests.auth import HTTPBasicAuth
-
-parentdir = os.path.join(os.path.dirname(__file__), "..")
-sys.path.insert(0, parentdir)
-
-logger = Logger(level=logging.INFO)
-
-
-class SyncVImsiApp(SyncStep):
-    provides = [VProgranImsi]
-
-    observes = VProgranImsi
-
-    requested_interval = 0
-
-    def __init__(self, *args, **kwargs):
-        super(SyncVImsiApp, self).__init__(*args, **kwargs)
-
-    def get_onos_progran_addr(self):
-
-        return "http://%s:%s/onos/" % ("10.6.0.1", "8183")
-
-    def get_onos_progran_auth(self):
-
-        return HTTPBasicAuth("onos", "rocks")
-
-    def sync_record(self, app):
-
-        logger.info("Sync'ing Edited vProgran Imsi")
-
-        onos_addr = self.get_onos_progran_addr()
-
-        data = {}
-        data["imsi"] = app.imsi
-        data["profile"] = app.profile
-
-
-        url = onos_addr + "progran/mwc/connect"
-
-        print "POST %s for app %s" % (url, "Progran Imsi")
-
-        auth = self.get_onos_progran_auth()
-        r = requests.post(url, data=json.dumps(data), auth=auth)
-        if (r.status_code != 200):
-            print r
-            raise Exception("Received error from progran app update (%d)" % r.status_code)
-
-    def delete_record(self, app):
-        logger.info("Deletion is not supported yet")
-
diff --git a/xos/synchronizer/steps/sync_profile.py b/xos/synchronizer/steps/sync_profile.py
deleted file mode 100644
index 68c144d..0000000
--- a/xos/synchronizer/steps/sync_profile.py
+++ /dev/null
@@ -1,77 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-import os
-import sys
-import requests
-import json
-from django.db.models import Q, F
-from services.progran.models import *
-from synchronizers.base.syncstep import SyncStep
-from xos.logger import Logger, logging
-
-# from core.models import Service
-from requests.auth import HTTPBasicAuth
-
-parentdir = os.path.join(os.path.dirname(__file__), "..")
-sys.path.insert(0, parentdir)
-
-logger = Logger(level=logging.INFO)
-
-
-class SyncVProfileApp(SyncStep):
-    provides = [VProgranProfile]
-
-    observes = VProgranProfile
-
-    requested_interval = 0
-
-    def __init__(self, *args, **kwargs):
-        super(SyncVProfileApp, self).__init__(*args, **kwargs)
-
-    def get_onos_progran_addr(self):
-
-        return "http://%s:%s/onos/" % ("10.6.0.1", "8183")
-
-    def get_onos_progran_auth(self):
-
-        return HTTPBasicAuth("onos", "rocks")
-
-    def sync_record(self, app):
-
-        logger.info("Sync'ing Edited vProgran Profile ")
-
-        onos_addr = self.get_onos_progran_addr()
-
-        data = {}
-        data["profile"] = app.profile
-        data["dlrate"] = app.dlrate
-        data["ulrate"] = app.ulrate
-
-
-        url = onos_addr + "progran/mwc/profile"
-
-        print "POST %s for app %s" % (url, "Progran Imsi")
-
-        auth = self.get_onos_progran_auth()
-        r = requests.post(url, data=json.dumps(data), auth=auth)
-        if (r.status_code != 200):
-            print r
-            raise Exception("Received error from progran app update (%d)" % r.status_code)
-
-    def delete_record(self, app):
-        logger.info("Deletion is not supported yet")
-
diff --git a/xos/synchronizer/steps/sync_progranserviceinstance.py b/xos/synchronizer/steps/sync_progranserviceinstance.py
new file mode 100644
index 0000000..6a0d84c
--- /dev/null
+++ b/xos/synchronizer/steps/sync_progranserviceinstance.py
@@ -0,0 +1,114 @@
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import os
+import sys
+from synchronizers.new_base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
+from synchronizers.new_base.ansible_helper import run_template
+from synchronizers.new_base.modelaccessor import ProgranService, ProgranServiceInstance
+
+from xosconfig import Config
+from multistructlog import create_logger
+import json
+
+log = create_logger(Config().get('logging'))
+
+parentdir = os.path.join(os.path.dirname(__file__), "..")
+sys.path.insert(0, parentdir)
+
+class SyncProgranServiceInstance(SyncInstanceUsingAnsible):
+    provides = [ProgranServiceInstance]
+
+    observes = ProgranServiceInstance
+
+    def get_onos_info(self, si):
+
+        progran_service = si.owner.leaf_model
+
+        return {
+            'url': progran_service.onos_address,
+            'port': progran_service.onos_port,
+            'username': progran_service.onos_username,
+            'password': progran_service.onos_password,
+        }
+
+    def skip_ansible_fields(self, o):
+        # FIXME This model does not have an instance, this is a workaroung to make it work,
+        # but it need to be cleaned up creating a general SyncUsingAnsible base class
+        return True
+
+    def get_handover_for_profile(self, o):
+        return {
+            "A3Hysteresis": o.handover.HysteresisA3,
+            "A3TriggerQuantity": o.handover.A3TriggerQuantity,
+            "A3offset": o.handover.A3offset,
+            "A5Hysteresis": o.handover.HysteresisA5,
+            "A5Thresh1Rsrp": o.handover.A5Thresh1Rsrp,
+            "A5Thresh1Rsrq": o.handover.A5Thresh1Rsrq,
+            "A5Thresh2Rsrp": o.handover.A5Thresh2Rsrp,
+            "A5Thresh2Rsrq": o.handover.A5Thresh2Rsrq,
+            "A5TriggerQuantity": o.handover.A5TriggerQuantity,
+        }
+
+    def get_progran_profile_field(self, o):
+
+        # basic information that we have in the service instance itself
+        profile = {
+            'AdmControl': o.AdmControl,
+            "DlSchedType": o.DlSchedType,
+            "Start": o.start,
+            "UlSchedType": o.UlSchedType,
+            "End": o.end,
+            "CellIndividualOffset": o.CellIndividualOffset,
+            "DlAllocRBRate": o.DlAllocRBRate,
+            "Name": o.name,
+            "UlAllocRBRate": o.UlAllocRBRate,
+            "Handover": self.get_handover_for_profile(o),
+        }
+        profile = json.dumps(profile)
+        return profile
+
+    def get_extra_attributes(self, o):
+        onos = self.get_onos_info(o)
+        fields = {
+            'onos_url': onos['url'],
+            'onos_username': onos['username'],
+            'onos_password': onos['password'],
+            'onos_port': onos['port'],
+            'endpoint': 'profile',
+            'profile': self.get_progran_profile_field(o),
+            'method': 'POST'
+        }
+
+        return fields
+
+    # FIXME we need to override this as the default expect to ssh into a VM
+    def run_playbook(self, o, fields):
+        run_template("progran_curl.yaml", fields, object=o)
+
+    def delete_record(self, o):
+        log.info("deleting object", object=str(o), **o.tologdict())
+        onos = self.get_onos_info(o)
+        fields = {
+            'onos_url': onos['url'],
+            'onos_username': onos['username'],
+            'onos_password': onos['password'],
+            'onos_port': onos['port'],
+            'endpoint': 'profile/%s' % o.name,
+            'profile': '',
+            'method': 'DELETE'
+        }
+        res = self.run_playbook(o, fields)
\ No newline at end of file
diff --git a/xos/synchronizer/xos-synchronizer b/xos/synchronizer/xos-synchronizer
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/xos/synchronizer/xos-synchronizer
diff --git a/xos/tosca/resources/progranservice.py b/xos/tosca/resources/progranservice.py
deleted file mode 100644
index d4e8062..0000000
--- a/xos/tosca/resources/progranservice.py
+++ /dev/null
@@ -1,16 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
