diff --git a/xos/synchronizer/steps/sync_vsg_hw_service_instance.py b/xos/synchronizer/steps/sync_vsg_hw_service_instance.py
index 871d68b..b30987f 100644
--- a/xos/synchronizer/steps/sync_vsg_hw_service_instance.py
+++ b/xos/synchronizer/steps/sync_vsg_hw_service_instance.py
@@ -21,6 +21,7 @@
 import requests
 from requests.auth import HTTPBasicAuth
 
+log = create_logger(Config().get('logging'))
 
 class SyncVSGHWServiceInstance(SyncStep):
     provides = [VSGHWServiceInstance]
@@ -56,15 +57,14 @@
         }
 
     def sync_record(self, o):
-        self.log.info("Sync'ing VSG-HW Service Instance", service_instance=o)
-
+        log.info("Sync'ing VSG-HW Service Instance", service_instance=o)
 
         onos = SyncVSGHWServiceInstance.get_fabric_onos_info(o)
 
         si = ServiceInstance.objects.get(id=o.id)
 
         mac_address = si.get_westbound_service_instance_properties("mac_address")
-        ip = si.get_westbound_service_instance_properties("ip_address")
+        ips = si.get_westbound_service_instance_properties("ips")
         s_tag = si.get_westbound_service_instance_properties("s_tag")
         c_tag = si.get_westbound_service_instance_properties("c_tag")
         dpid = si.get_westbound_service_instance_properties("switch_datapath_id")
@@ -81,8 +81,8 @@
         try:
             if not mac_address:
                 raise ValueError("mac_address")
-            if not ip:
-                raise ValueError("ip_address")
+            if len(ips.all()) == 0:
+                raise ValueError("ips")
             if not s_tag:
                 raise ValueError("s_tag")
             if not c_tag:
@@ -92,13 +92,14 @@
             if not port:
                 raise ValueError("switch_port")
         except ValueError as e:
+            log.info("Skipping synchronization for VSG-HW Service Instance with id %s as westbound value %s is not available" % (o.id, e.message))
             raise Exception("Skipping synchronization for VSG-HW Service Instance with id %s as westbound value %s is not available" % (o.id, e.message))
 
         data = {
             'hosts': {
                 mac_address + "/" + str(s_tag): {
                     "basic": {
-                        "ips": [ip],
+                        "ips": [ i.ip for i in ips.all() ],
                         "locations": ["%s/%s" % (dpid, port)],
                         "innerVlan": str(c_tag),
                     }
@@ -113,17 +114,17 @@
 
         url = onos['url'] + '/onos/v1/network/configuration'
 
-        self.log.info("Sending requests to ONOS", url=url, body=data)
+        log.info("Sending requests to ONOS", url=url, body=data)
 
         r = requests.post(url, json=data, auth=HTTPBasicAuth(onos['user'], onos['pass']))
 
         if r.status_code != 200:
             raise Exception("Failed to terminate subscriber in ONOS: %s" % r.text)
 
-        self.log.info("ONOS response", res=r.text)
+        log.info("ONOS response", res=r.text)
 
     def delete_record(self, o):
-        self.log.info("Deleting VSG-HW Service Instance", service_instance=o)
+        log.info("Deleting VSG-HW Service Instance", service_instance=o)
         if o.enacted:
             onos = SyncVSGHWServiceInstance.get_fabric_onos_info(o)
 
@@ -142,5 +143,5 @@
             if r.status_code != 204:
                 raise Exception("Failed to remove subscriber termination in ONOS: %s" % r.text)
 
-            self.log.info("ONOS response", res=r.text)
+            log.info("ONOS response", res=r.text)
         pass
\ No newline at end of file
diff --git a/xos/synchronizer/steps/test_sync_vsg_hw_service_instance.py b/xos/synchronizer/steps/test_sync_vsg_hw_service_instance.py
index e05f597..7cea075 100644
--- a/xos/synchronizer/steps/test_sync_vsg_hw_service_instance.py
+++ b/xos/synchronizer/steps/test_sync_vsg_hw_service_instance.py
@@ -47,6 +47,17 @@
 def mock_get_westbound_service_instance_properties(prop):
     if prop == "status":
         return "enabled"
+    if prop == "ips":
+
+        ip1 = Mock()
+        ip1.ip = "ip_address1"
+
+        ip2 = Mock()
+        ip2.ip = "ip_address2"
+
+        ips = Mock()
+        ips.all.return_value = [ip1, ip2]
+        return ips
     return prop
 
 def match_json(desired, req):
@@ -126,13 +137,19 @@
         """
         If we don't have all the data we need, do not synchronize
         """
-
-        for i in ["mac_address", "ip_address", "s_tag", "c_tag", "switch_datapath_id", "switch_port"]:
+        for i in ["mac_address", "ips", "s_tag", "c_tag", "switch_datapath_id", "switch_port"]:
 
             def wb_si_prop(prop):
                 # fake prop not present
                 if prop == "status":
                     return "enabled"
+                if prop == "ips":
+                    ips = Mock()
+                    if i == "ips":
+                        ips.all.return_value = []
+                    else:
+                        ips.all.return_value = ["foo"]
+                    return ips
                 if prop != i:
                     return prop
                 return ""
@@ -157,6 +174,10 @@
                 # fake prop not present
                 if prop == "status":
                     return "suspended"
+                if prop == "ips":
+                    ips = Mock()
+                    ips.all.return_value = []
+                    return ips
                 return prop
 
             self.si.get_westbound_service_instance_properties = wb_si_prop
@@ -175,7 +196,7 @@
             'hosts': {
                 "mac_address/s_tag": {
                     "basic": {
-                        "ips": ["ip_address"],
+                        "ips": ["ip_address1", "ip_address2"],
                         "locations": ["switch_datapath_id/switch_port"],
                         "innerVlan": "c_tag",
                     }
@@ -193,6 +214,16 @@
                 return None
             if prop == "status":
                 return "enabled"
+            if prop == "ips":
+                ip1 = Mock()
+                ip1.ip = "ip_address1"
+
+                ip2 = Mock()
+                ip2.ip = "ip_address2"
+
+                ips = Mock()
+                ips.all.return_value = [ip1, ip2]
+                return ips
             return prop
 
         self.si.get_westbound_service_instance_properties = wb_si_prop
@@ -210,7 +241,7 @@
             'hosts': {
                 "mac_address/s_tag": {
                     "basic": {
-                        "ips": ["ip_address"],
+                        "ips": ["ip_address1", "ip_address2"],
                         "locations": ["switch_datapath_id/switch_port"],
                         "innerVlan": "c_tag",
                         "outerTpid": "outer_tpid"
@@ -258,6 +289,16 @@
                 # fake prop not present
                 if prop == "status":
                     return "suspended"
+                if prop == "ips":
+                    ip1 = Mock()
+                    ip1.ip = "ip_address1"
+
+                    ip2 = Mock()
+                    ip2.ip = "ip_address2"
+
+                    ips = Mock()
+                    ips.all.return_value = [ip1, ip2]
+                    return ips
                 return prop
 
             self.si.get_westbound_service_instance_properties = wb_si_prop
