diff --git a/VERSION b/VERSION
index 5859406..bdbe651 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.2.3
+2.2.4-dev
diff --git a/xos/synchronizer/event_steps/kubernetes_event.py b/xos/synchronizer/event_steps/kubernetes_event.py
index 8eed0c4..35d3ac1 100644
--- a/xos/synchronizer/event_steps/kubernetes_event.py
+++ b/xos/synchronizer/event_steps/kubernetes_event.py
@@ -17,10 +17,12 @@
 import json
 import os
 import sys
+sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 from xossynchronizer.event_steps.eventstep import EventStep
 from xossynchronizer.modelaccessor import VOLTService, VOLTServiceInstance, Service
 from xosconfig import Config
 from multistructlog import create_logger
+from helpers import Helpers
 
 log = create_logger(Config().get('logging'))
 
@@ -31,18 +33,6 @@
     def __init__(self, *args, **kwargs):
         super(KubernetesPodDetailsEventStep, self).__init__(*args, **kwargs)
 
-    @staticmethod
-    def get_onos(service):
-        service = Service.objects.get(id=service.id)
-
-        # get the onos_fabric service
-        onos = [s.leaf_model for s in service.subscriber_services if "onos" in s.name.lower()]
-
-        if len(onos) == 0:
-            raise Exception('Cannot find ONOS service in provider_services of Fabric-Crossconnect')
-
-        return onos[0]
-
     def process_event(self, event):
         value = json.loads(event.value)
 
@@ -57,8 +47,9 @@
             return
 
         for service in VOLTService.objects.all():
-            onos = KubernetesPodDetailsEventStep.get_onos(service)
-            if (onos.name.lower() != xos_service.lower()):
+            onos = Helpers.get_onos_service_name(service)
+            # NOTE do we really need to dynamically fetch the ONOS name?
+            if (onos.lower() != xos_service.lower()):
                 continue
 
             for service_instance in service.service_instances.all():
diff --git a/xos/synchronizer/event_steps/test_kubernetes_event.py b/xos/synchronizer/event_steps/test_kubernetes_event.py
index 3bbc4ec..b30c6d5 100644
--- a/xos/synchronizer/event_steps/test_kubernetes_event.py
+++ b/xos/synchronizer/event_steps/test_kubernetes_event.py
@@ -69,7 +69,7 @@
                                                    id=1112,
                                                    backend_code=1,
                                                    backend_status="succeeded",
-                                                   subscriber_services=[self.onos])
+                                                    provider_services=[self.onos])
 
         self.fcsi1 = VOLTServiceInstance(name="myfcsi1",
                                                        owner=self.fcservice,
diff --git a/xos/synchronizer/helpers.py b/xos/synchronizer/helpers.py
index ade07e0..1c52a1a 100644
--- a/xos/synchronizer/helpers.py
+++ b/xos/synchronizer/helpers.py
@@ -30,15 +30,25 @@
         }
 
     @staticmethod
-    def get_onos_voltha_info(olt_service):
-
-        # get the onos_fabric service
+    def get_onos(olt_service):
+        # get the onos service
         onos = [s.leaf_model for s in olt_service.provider_services if "onos" in s.name.lower()]
 
         if len(onos) == 0:
             raise Exception('Cannot find ONOS service in provider_services of vOLTService')
 
-        onos = onos[0]
+        return onos[0]
+
+    @staticmethod
+    def get_onos_service_name(olt_service):
+        onos = Helpers.get_onos(olt_service)
+
+        return onos.name
+
+    @staticmethod
+    def get_onos_voltha_info(olt_service):
+
+        onos = Helpers.get_onos(olt_service)
 
         return {
             'url': Helpers.format_url(onos.rest_hostname),
diff --git a/xos/synchronizer/models/volt.xproto b/xos/synchronizer/models/volt.xproto
index e7fef4b..5abdf6f 100644
--- a/xos/synchronizer/models/volt.xproto
+++ b/xos/synchronizer/models/volt.xproto
@@ -212,6 +212,7 @@
     option verbose_name = "vOLT Service Instance";
     option description = "Represents subscriber tenancy in the VOLT Service";
     option policy_implemented = "True";
+    option sync_implemented = "True";
 
     optional string description = 1 [
         help_text = "Human-readable description",
diff --git a/xos/synchronizer/steps/sync_tech_profile.py b/xos/synchronizer/steps/sync_tech_profile.py
index 01e7da3..3c36f36 100644
--- a/xos/synchronizer/steps/sync_tech_profile.py
+++ b/xos/synchronizer/steps/sync_tech_profile.py
@@ -26,8 +26,10 @@
 
 import etcd3
 
+# TODO store ETCD_HOST_URL and ETCD_PORT in the vOLT Service model
 ETCD_HOST_URL = 'etcd-cluster.default.svc.cluster.local'
 ETCD_PORT = 2379
+PREFIX = "service/voltha/technology_profiles"
 
 log = create_logger(Config().get("logging"))
 
@@ -41,10 +43,10 @@
 
         etcd = etcd3.client(host=ETCD_HOST_URL, port=ETCD_PORT)
         if operation == 'PUT':
-           etcd.put(key, value)
-           log.info('Technology Profile [%s] saved successfully to Etcd store' % key)
+           etcd.put(PREFIX + key, value)
+           log.info('Technology Profile [%s] saved successfully to Etcd store' % (PREFIX + key))
         elif operation == 'DELETE':
-           if False == etcd.delete(key):
+           if False == etcd.delete(PREFIX + key):
                log.error('Error while deleting Technology Profile [%s] from Etcd store' % key)
                raise Exception('Failed to delete Technology Profile')
            else:
diff --git a/xos/synchronizer/test_helpers.py b/xos/synchronizer/test_helpers.py
index a2b392d..89da55b 100644
--- a/xos/synchronizer/test_helpers.py
+++ b/xos/synchronizer/test_helpers.py
@@ -26,6 +26,7 @@
         # create a mock ONOS Service
         onos = Mock()
         onos.name = "ONOS"
+        onos.leaf_model.name = "ONOS"
         onos.leaf_model.rest_hostname = "onos_voltha_url"
         onos.leaf_model.rest_port = 4321
         onos.leaf_model.rest_username = "onos_voltha_user"
@@ -48,6 +49,10 @@
         url = Helpers.format_url("http://onf.com")
         self.assertEqual(url, "http://onf.com")
 
+    def test_get_onos_service_name(self):
+        name = Helpers.get_onos_service_name(self.o)
+        self.assertEqual(name, "ONOS")
+
     def test_get_voltha_info(self):
         voltha_dict = Helpers.get_voltha_info(self.o)
 
