diff --git a/xos/synchronizers/vtn/steps/sync_tenant.py b/xos/synchronizers/vtn/steps/sync_tenant.py
index cc374be..bbf863e 100644
--- a/xos/synchronizers/vtn/steps/sync_tenant.py
+++ b/xos/synchronizers/vtn/steps/sync_tenant.py
@@ -11,6 +11,7 @@
 from services.cord.models import Tenant
 from xos.logger import Logger, logging
 from requests.auth import HTTPBasicAuth
+from services.onos.models import ONOSService
 
 # hpclibrary will be in steps/..
 parentdir = os.path.join(os.path.dirname(__file__),"..")
@@ -36,7 +37,7 @@
 #        vtn_tenant = vtn_tenant[0]
 #
 #        vtn_service = vtn_tenant.provider_service
-        vtn_service = Service.objects.filter(name="service_ONOS_VTN")  # XXX fixme - harcoded
+        vtn_service = ONOSService.get_service_objects().filter(name="ONOS_CORD")  # XXX fixme - harcoded
         if not vtn_service:
             raise "No VTN Onos Service"
 
@@ -45,6 +46,9 @@
     def get_vtn_addr(self):
         vtn_service = self.get_vtn_onos_service()
 
+        if vtn_service.rest_hostname:
+            return vtn_service.rest_hostname+":"+str(vtn_service.rest_port)
+
         if not vtn_service.slices.exists():
             raise "VTN Service has no slices"
 
@@ -55,7 +59,7 @@
 
         vtn_instance = vtn_slice.instances.all()[0]
 
-        return vtn_instance.node.name
+        return vtn_instance.node.name + ":8181"
 
     def call(self, **args):
         global glo_saved_vtn_maps
@@ -68,28 +72,32 @@
                dependencies = service.get_vtn_dependencies_ids()
                if dependencies:
                    for dependency in dependencies:
-                       vtn_maps.append( (id, dependency) )
-
-        for vtn_map in vtn_maps:
-            if not (vtn_map in glo_saved_vtn_maps):
-                # call vtn rest api to add map
-                url = "http://" + self.get_vtn_addr() + ":8181/onos/cordvtn/service-dependency/%s/%s" % (vtn_map[0], vtn_map[1])
-
-                print "POST %s" % url
-                r = requests.post(url, auth=HTTPBasicAuth('karaf', 'karaf') )    # XXX fixme - hardcoded auth
-                if (r.status_code != 200):
-                    raise Exception("Received error from vtn service (%d)" % r.status_code)
+                       if dependency["bidirectional"]:
+                           directionality="b"
+                       else:
+                           directionality="u"
+                       vtn_maps.append( (id, dependency["serviceId"], directionality) )
 
         for vtn_map in glo_saved_vtn_maps:
             if not vtn_map in vtn_maps:
                 # call vtn rest api to delete map
-                url = "http://" + self.get_vtn_addr() + ":8181/onos/cordvtn/service-dependency/%s/%s" % (vtn_map[0],vtn_map[1])
+                url = "http://" + self.get_vtn_addr() + "/onos/cordvtn/service-dependency/%s/%s/%s" % (vtn_map[0],vtn_map[1], vtn_map[2])
 
-                print "DELETE %s" % url
+                logger.info( "DELETE %s" % url )
                 r = requests.delete(url, auth=HTTPBasicAuth('karaf', 'karaf') )    # XXX fixme - hardcoded auth
                 if (r.status_code != 200):
                     raise Exception("Received error from vtn service (%d)" % r.status_code)
 
+        for vtn_map in vtn_maps:
+            if not (vtn_map in glo_saved_vtn_maps):
+                # call vtn rest api to add map
+                url = "http://" + self.get_vtn_addr() + "/onos/cordvtn/service-dependency/%s/%s/%s" % (vtn_map[0], vtn_map[1], vtn_map[2])
+
+                logger.info( "POST %s" % url )
+                r = requests.post(url, auth=HTTPBasicAuth('karaf', 'karaf') )    # XXX fixme - hardcoded auth
+                if (r.status_code != 200):
+                    raise Exception("Received error from vtn service (%d)" % r.status_code)
+
         glo_saved_vtn_maps = vtn_maps
         # TODO: save this
 
