diff --git a/Dockerfile.synchronizer b/Dockerfile.synchronizer
index ee05aa6..4f64e57 100644
--- a/Dockerfile.synchronizer
+++ b/Dockerfile.synchronizer
@@ -12,9 +12,11 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+# docker build -t xosproject/volt-synchronizer:candidate -f Dockerfile.synchronizer .
+
 # xosproject/volt-synchronizer
 
-FROM xosproject/xos-synchronizer-base:2.0.0
+FROM xosproject/xos-synchronizer-base:master
 
 COPY xos/synchronizer /opt/xos/synchronizers/volt
 COPY VERSION /opt/xos/synchronizers/volt/
diff --git a/xos/synchronizer/config.yaml b/xos/synchronizer/config.yaml
index 8a1a51e..f83dfa5 100644
--- a/xos/synchronizer/config.yaml
+++ b/xos/synchronizer/config.yaml
@@ -25,7 +25,6 @@
 models_dir: "/opt/xos/synchronizers/volt/models"
 steps_dir: "/opt/xos/synchronizers/volt/steps"
 pull_steps_dir: "/opt/xos/synchronizers/volt/pull_steps"
-event_steps_dir: "/opt/xos/synchronizers/volt/event_steps"
 logging:
   version: 1
   handlers:
diff --git a/xos/synchronizer/steps/sync_volt_service_instance.py b/xos/synchronizer/steps/sync_volt_service_instance.py
index 10091cf..11675a4 100644
--- a/xos/synchronizer/steps/sync_volt_service_instance.py
+++ b/xos/synchronizer/steps/sync_volt_service_instance.py
@@ -36,16 +36,10 @@
         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)
-
         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
 
         try:
@@ -59,27 +53,19 @@
             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)
+                 dp_id = olt_device.dp_id
+        )
 
         # Send request to ONOS
         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/subscribers" % (onos_voltha['url'], onos_voltha['port'])
+        full_url = "%s:%d/onos/olt/oltapp/%s/%s" % (onos_voltha['url'], onos_voltha['port'], olt_device.dp_id, uni_port_id)
 
-        data = {
-            "deviceId" : olt_device.dp_id,
-            "port" : uni_port_id,
-            "sVlan" : s_tag,
-            "cVlan" : c_tag
-        }
+        log.info("Sending request to onos-voltha", url=full_url)
 
-        log.info("Sending request to onos-voltha", url=full_url, data=data)
-
-        request = requests.post(full_url, auth=onos_voltha_basic_auth, json=data)
+        request = requests.post(full_url, auth=onos_voltha_basic_auth)
 
         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_volt_service_instance.py b/xos/synchronizer/steps/test_sync_volt_service_instance.py
index d7877f6..1f9505d 100644
--- a/xos/synchronizer/steps/test_sync_volt_service_instance.py
+++ b/xos/synchronizer/steps/test_sync_volt_service_instance.py
@@ -41,15 +41,6 @@
     raise Exception("Unable to find service=%s xproto=%s" % (service_name, xproto_name))
 # END generate model from xproto
 
-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
@@ -89,9 +80,6 @@
         volt_service.onos_voltha_user = "onos_voltha_user"
         volt_service.onos_voltha_pass = "onos_voltha_pass"
 
-        si = Mock()
-        si.get_westbound_service_instance_properties = mock_get_westbound_service_instance_properties
-
         uni_port = Mock()
         uni_port.port_no = "uni_port_id"
 
@@ -110,7 +98,6 @@
         o.tologdict.return_value = {}
 
         self.o = o
-        self.si = si
         self.onu_device = onu_device
         self.volt_service = volt_service
 
@@ -122,9 +109,7 @@
     def test_do_not_sync(self, m):
         self.onu_device.pon_port.olt_device.dp_id = None
 
-        with patch.object(ServiceInstance.objects, "get") as service_instance_mock, \
-                patch.object(VOLTService.objects, "get") as olt_service_mock:
-            service_instance_mock.return_value = self.si
+        with patch.object(VOLTService.objects, "get") as olt_service_mock:
             olt_service_mock.return_value = self.volt_service
 
             with self.assertRaises(DeferredException) as e:
@@ -137,19 +122,10 @@
     def test_do_sync(self, m):
 
         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))
+        m.post("http://onos_voltha_url:4321/onos/olt/oltapp/of:dp_id/uni_port_id", status_code=200, json={})
 
-        with patch.object(ServiceInstance.objects, "get") as service_instance_mock, \
-                patch.object(VOLTService.objects, "get") as olt_service_mock:
-            service_instance_mock.return_value = self.si
+        with patch.object(VOLTService.objects, "get") as olt_service_mock:
             olt_service_mock.return_value = self.volt_service
 
             self.sync_step().sync_record(self.o)
@@ -158,20 +134,11 @@
     @requests_mock.Mocker()
     def test_do_sync_fail(self, m):
 
-        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))
+        m.post("http://onos_voltha_url:4321/onos/olt/oltapp/of:dp_id/uni_port_id", status_code=500, text="Mock Error")
 
         self.onu_device.pon_port.olt_device.dp_id = "of:dp_id"
 
-        with patch.object(ServiceInstance.objects, "get") as service_instance_mock, \
-                patch.object(VOLTService.objects, "get") as olt_service_mock:
-            service_instance_mock.return_value = self.si
+        with patch.object(VOLTService.objects, "get") as olt_service_mock:
             olt_service_mock.return_value = self.volt_service
 
             with self.assertRaises(Exception) as e:
