diff --git a/xos/synchronizer/steps/sync_vpgwctenant.py b/xos/synchronizer/steps/sync_vpgwctenant.py
index a8b9e22..fde029d 100644
--- a/xos/synchronizer/steps/sync_vpgwctenant.py
+++ b/xos/synchronizer/steps/sync_vpgwctenant.py
@@ -1,8 +1,6 @@
 import os
 import sys
-#from django.db.models import Q, F
-#from services.vpgwc.models import VPGWCService, VPGWCTenant
-#from synchronizers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
+from django.db.models import Q, F
 from synchronizers.new_base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
 from synchronizers.new_base.modelaccessor import *
 
@@ -24,38 +22,37 @@
     def __init__(self, *args, **kwargs):
         super(SyncVPGWCTenant, self).__init__(*args, **kwargs)
 
-#    def fetch_pending(self, deleted):
-#
-#        if (not deleted):
-#            objs = VPGWCTenant.get_tenant_objects().filter(
-#                Q(enacted__lt=F('updated')) | Q(enacted=None), Q(lazy_blocked=False))
-#        else:
-#
-#            objs = VPGWCTenant.get_deleted_tenant_objects()
-#
-#        return objs
+    def fetch_pending(self, deleted):
 
-    def get_vpgwc(self, o):
-        if not o.provider_service:
-            return None
+        if (not deleted):
+            objs = VPGWCTenant.get_tenant_objects().filter(
+                Q(enacted__lt=F('updated')) | Q(enacted=None), Q(lazy_blocked=False))
+        else:
 
-        vpgwc = VPGWCService.objects.filter(id=o.provider_service.id)
+            objs = VPGWCTenant.get_deleted_tenant_objects()
 
-        if not vpgwc:
-            return None
+        return objs
 
-        return vpgwc[0]
+    #def get_vpgwc(self, o):
+    #    if not o.provider_service:
+    #        return None
 
+    #    vpgwc = VPGWCService.objects.filter(id=o.provider_service.id)
+
+    #    if not vpgwc:
+    #        return None
+
+    #    return vpgwc[0]
 
     # Gets the attributes that are used by the Ansible template but are not
     # part of the set of default attributes.
+
     def get_extra_attributes(self, o):
         fields = {}
-        fields['tenant_message'] = o.tenant_message
-        vpgwc = self.get_vpgwc(o)
-        fields['service_message'] = vpgwc.service_message
+        fields['display_message'] = o.display_message
+        fields['s5s8_pgw_tag'] = o.s5s8_pgw_tag
+        fields['image_name'] = o.image_name
         return fields
-        # return {"display_message": o.display_message,
-        #        "s5s8_pgw_tag": o.s5s8_pgw_tag,
-        #        "image_name": o.image_name,
-        #       }
\ No newline at end of file
+
+    def delete_record(self, port):
+        pass
