diff --git a/xos/synchronizer/steps/sync_olt_device.py b/xos/synchronizer/steps/sync_olt_device.py
index 5eeeafd..056a62c 100644
--- a/xos/synchronizer/steps/sync_olt_device.py
+++ b/xos/synchronizer/steps/sync_olt_device.py
@@ -131,13 +131,6 @@
         onos_voltha = Helpers.get_onos_voltha_info(model.volt_service)
         onos_voltha_basic_auth = HTTPBasicAuth(onos_voltha['user'], onos_voltha['pass'])
 
-        try:
-            # NOTE For now, we assume that each OLT has only one pon port
-            vlan = model.pon_ports.all()[0].s_tag
-        except Exception as e:
-            raise DeferredException("Waiting for pon_ports to come up")
-
-
         # Add device info to onos-voltha
         data = {
           "devices": {
@@ -147,7 +140,7 @@
               },
               "accessDevice": {
                 "uplink": model.uplink,
-                "vlan": vlan
+                "vlan": 1
               }
             }
           }
diff --git a/xos/synchronizer/steps/sync_volt_service_instance.py b/xos/synchronizer/steps/sync_volt_service_instance.py
index 9f005bd..10091cf 100644
--- a/xos/synchronizer/steps/sync_volt_service_instance.py
+++ b/xos/synchronizer/steps/sync_volt_service_instance.py
@@ -33,6 +33,10 @@
 
     def sync_record(self, o):
 
+        if o.policy_code != 1:
+            raise DeferredException("Waiting for ModelPolicy to complete")
+
+
         volt_service = VOLTService.objects.get(id=o.owner_id)
 
         si = ServiceInstance.objects.get(id=o.id)
@@ -40,17 +44,23 @@
         log.info("Synching OLTServiceInstance", object=str(o), **o.tologdict())
 
         c_tag = si.get_westbound_service_instance_properties("c_tag")
+        s_tag = si.get_westbound_service_instance_properties("s_tag")
 
         olt_device = o.onu_device.pon_port.olt_device
 
-        # NOTE each ONU has only one UNI port!
-        uni_port_id = o.onu_device.uni_ports.first().port_no
+        try:
+            # NOTE each ONU has only one UNI port!
+            uni_port_id = o.onu_device.uni_ports.first().port_no
+        except AttributeError:
+            # This is because the ONUDevice is set by model_policy
+            raise DeferredException("Waiting for ONUDevice %s " % olt_device.name)
 
         if not olt_device.dp_id:
             raise DeferredException("Waiting for OLTDevice %s to be synchronized" % olt_device.name)
 
         log.debug("Adding subscriber with info",
                  c_tag = c_tag,
+                 s_tag = s_tag,
                  uni_port_id = uni_port_id,
                  dp_id = olt_device.dp_id)
 
@@ -58,11 +68,18 @@
         onos_voltha = Helpers.get_onos_voltha_info(volt_service)
         onos_voltha_basic_auth = HTTPBasicAuth(onos_voltha['user'], onos_voltha['pass'])
 
-        full_url = "%s:%d/onos/olt/oltapp/%s/%s/%s" % (onos_voltha['url'], onos_voltha['port'], olt_device.dp_id, uni_port_id, c_tag)
+        full_url = "%s:%d/onos/olt/oltapp/subscribers" % (onos_voltha['url'], onos_voltha['port'])
 
-        log.info("Sending request to onos-voltha", url=full_url)
+        data = {
+            "deviceId" : olt_device.dp_id,
+            "port" : uni_port_id,
+            "sVlan" : s_tag,
+            "cVlan" : c_tag
+        }
 
-        request = requests.post(full_url, auth=onos_voltha_basic_auth)
+        log.info("Sending request to onos-voltha", url=full_url, data=data)
+
+        request = requests.post(full_url, auth=onos_voltha_basic_auth, json=data)
 
         if request.status_code != 200:
             raise Exception("Failed to add subscriber in onos-voltha: %s" % request.text)
diff --git a/xos/synchronizer/steps/test_sync_olt_device.py b/xos/synchronizer/steps/test_sync_olt_device.py
index a1ff08c..04cdd0b 100644
--- a/xos/synchronizer/steps/test_sync_olt_device.py
+++ b/xos/synchronizer/steps/test_sync_olt_device.py
@@ -48,7 +48,7 @@
     else:
         if not request['of:0000000ce2314000']['basic']['driver'] == 'voltha':
             return False
-        if not request['of:0000000ce2314000']['accessDevice']['vlan'] == "s_tag" or not request['of:0000000ce2314000']['accessDevice']['uplink'] == "129":
+        if not request['of:0000000ce2314000']['accessDevice']['vlan'] == 1 or not request['of:0000000ce2314000']['accessDevice']['uplink'] == "129":
             return False
     return True
 
@@ -87,7 +87,6 @@
 
         pon_port = Mock()
         pon_port.port_id = "00ff00"
-        pon_port.s_tag = "s_tag"
 
         # Create a mock OLTDevice
         o = Mock()
@@ -310,16 +309,5 @@
 
         # We don't need to assert here if there are no exceptions happening
 
-    def test_deferred_for_port(self):
-        self.o.pon_ports.all.side_effect = Exception
-        with self.assertRaises(DeferredException) as e:
-            self.sync_step().configure_onos(self.o)
-        self.assertEqual(e.exception.message, "Waiting for pon_ports to come up")
-
-        self.o.pon_ports.all.return_value = []
-        with self.assertRaises(DeferredException) as e:
-            self.sync_step().configure_onos(self.o)
-        self.assertEqual(e.exception.message, "Waiting for pon_ports to come up")
-
 if __name__ == "__main__":
     unittest.main()
diff --git a/xos/synchronizer/steps/test_sync_volt_service_instance.py b/xos/synchronizer/steps/test_sync_volt_service_instance.py
index 2df696e..d7877f6 100644
--- a/xos/synchronizer/steps/test_sync_volt_service_instance.py
+++ b/xos/synchronizer/steps/test_sync_volt_service_instance.py
@@ -13,6 +13,7 @@
 # limitations under the License.
 
 import unittest
+import functools
 from mock import patch, call, Mock, PropertyMock
 import requests_mock
 
@@ -43,6 +44,12 @@
 def mock_get_westbound_service_instance_properties(prop):
     return prop
 
+def match_json(desired, req):
+    if desired!=req.json():
+        raise Exception("Got request %s, but body is not matching" % req.url)
+        return False
+    return True
+
 class TestSyncVOLTServiceInstance(unittest.TestCase):
     def setUp(self):
         global DeferredException
@@ -96,6 +103,7 @@
 
         # create a mock service instance
         o = Mock()
+        o.policy_code = 1
         o.id = 1
         o.owner_id = "volt_service"
         o.onu_device = onu_device
@@ -127,9 +135,17 @@
 
     @requests_mock.Mocker()
     def test_do_sync(self, m):
-        m.post("http://onos_voltha_url:4321/onos/olt/oltapp/of:dp_id/uni_port_id/c_tag", status_code=200, json={})
 
         self.onu_device.pon_port.olt_device.dp_id = "of:dp_id"
+        
+        expected_conf = {
+            "deviceId" : "of:dp_id",
+            "port" : "uni_port_id",
+            "sVlan" : "s_tag",
+            "cVlan" : "c_tag"
+        }
+
+        m.post("http://onos_voltha_url:4321/onos/olt/oltapp/subscribers", status_code=200, json={}, additional_matcher=functools.partial(match_json, expected_conf))
 
         with patch.object(ServiceInstance.objects, "get") as service_instance_mock, \
                 patch.object(VOLTService.objects, "get") as olt_service_mock:
@@ -141,7 +157,15 @@
 
     @requests_mock.Mocker()
     def test_do_sync_fail(self, m):
-        m.post("http://onos_voltha_url:4321/onos/olt/oltapp/of:dp_id/uni_port_id/c_tag", status_code=500, text="Mock Error")
+
+        expected_conf = {
+            "deviceId" : "of:dp_id",
+            "port" : "uni_port_id",
+            "sVlan" : "s_tag",
+            "cVlan" : "c_tag"
+        }
+
+        m.post("http://onos_voltha_url:4321/onos/olt/oltapp/subscribers", status_code=500, text="Mock Error", additional_matcher=functools.partial(match_json, expected_conf))
 
         self.onu_device.pon_port.olt_device.dp_id = "of:dp_id"
 
