diff --git a/xos/synchronizer/curl_sample.md b/xos/synchronizer/curl_sample.md
new file mode 100644
index 0000000..d5c59d2
--- /dev/null
+++ b/xos/synchronizer/curl_sample.md
@@ -0,0 +1,30 @@
+# 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
new file mode 100644
index 0000000..898c164
--- /dev/null
+++ b/xos/synchronizer/manifest
@@ -0,0 +1,7 @@
+manifest
+model_deps
+run.sh
+steps/sync_imsi.py
+steps/sync_profile.py
+progran-synchronizer.py
+progran_config
diff --git a/xos/synchronizer/model_deps b/xos/synchronizer/model_deps
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/xos/synchronizer/model_deps
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/xos/synchronizer/progran-synchronizer.py b/xos/synchronizer/progran-synchronizer.py
new file mode 100644
index 0000000..93dcb72
--- /dev/null
+++ b/xos/synchronizer/progran-synchronizer.py
@@ -0,0 +1,13 @@
+#!/usr/bin/env python
+
+# Runs the standard XOS synchronizer
+
+import importlib
+import os
+import sys
+
+synchronizer_path = os.path.join(os.path.dirname(
+    os.path.realpath(__file__)), "../../synchronizers/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
new file mode 100644
index 0000000..99d382f
--- /dev/null
+++ b/xos/synchronizer/progran_config
@@ -0,0 +1,23 @@
+# 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/run.sh b/xos/synchronizer/run.sh
new file mode 100644
index 0000000..779c511
--- /dev/null
+++ b/xos/synchronizer/run.sh
@@ -0,0 +1,2 @@
+export XOS_DIR=/opt/xos
+python progran-synchronizer.py  -C $XOS_DIR/synchronizers/progran/progran_config
diff --git a/xos/synchronizer/steps/sync_imsi.py b/xos/synchronizer/steps/sync_imsi.py
new file mode 100644
index 0000000..bf56767
--- /dev/null
+++ b/xos/synchronizer/steps/sync_imsi.py
@@ -0,0 +1,60 @@
+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
new file mode 100644
index 0000000..0570d94
--- /dev/null
+++ b/xos/synchronizer/steps/sync_profile.py
@@ -0,0 +1,61 @@
+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")
+
