diff --git a/planetstack/hpc_observer/steps/sync_cdnprefix.py b/planetstack/hpc_observer/steps/sync_cdnprefix.py
index 55b2326..dfa6ef8 100644
--- a/planetstack/hpc_observer/steps/sync_cdnprefix.py
+++ b/planetstack/hpc_observer/steps/sync_cdnprefix.py
@@ -25,11 +25,14 @@
         HpcLibrary.__init__(self)
 
     def fetch_pending(self, deleted):
-        self.sanity_check()
+        #self.consistency_check()
 
         return SyncStep.fetch_pending(self, deleted)
 
-    def sanity_check(self):
+    def consistency_check(self):
+        # set to true if something changed
+        result=False
+
         # sanity check to make sure our PS objects have CMI objects behind them
         all_p_ids = [x["cdn_prefix_id"] for x in self.client.onev.ListAll("CDNPrefix")]
 
@@ -48,10 +51,14 @@
                 logger.info("CDN Prefix %s was not found on CMI" % p.cdn_prefix_id)
                 p.cdn_prefix_id=None
                 p.save()
+                result = True
 
             if (p.defaultOriginServer!=None) and (all_origins.get(p.cdn_prefix_id,None) != p.defaultOriginServer.url):
                 logger.info("CDN Prefix %s does not have default origin server on CMI" % str(p))
-                p.save() # this will set updated>enacted and force run
+                p.save() # this will set updated>enacted and force observer to re-sync
+                result = True
+
+        return result
 
     def sync_record(self, cp):
         logger.info("sync'ing cdn prefix %s" % str(cp))
diff --git a/planetstack/hpc_observer/steps/sync_contentprovider.py b/planetstack/hpc_observer/steps/sync_contentprovider.py
index cebe186..b3c2f66 100644
--- a/planetstack/hpc_observer/steps/sync_contentprovider.py
+++ b/planetstack/hpc_observer/steps/sync_contentprovider.py
@@ -25,11 +25,14 @@
         HpcLibrary.__init__(self)
 
     def fetch_pending(self, deleted):
-        self.sanity_check()
+        #self.consistency_check()
 
         return SyncStep.fetch_pending(self, deleted)
 
-    def sanity_check(self):
+    def consistency_check(self):
+        # set to true if something changed
+        result=False
+
         # sanity check to make sure our PS objects have CMI objects behind them
         all_cp_ids = [x["content_provider_id"] for x in self.client.onev.ListAll("ContentProvider")]
         for cp in ContentProvider.objects.all():
@@ -37,11 +40,13 @@
                 logger.info("Content provider %s was not found on CMI" % cp.content_provider_id)
                 cp.content_provider_id=None
                 cp.save()
+                result = True
+
+        return result
 
     def sync_record(self, cp):
         logger.info("sync'ing content provider %s" % str(cp))
         account_name = self.make_account_name(cp.name)
-        print "XXX", cp.name, account_name
 
         if (not cp.serviceProvider) or (not cp.serviceProvider.service_provider_id):
             return
diff --git a/planetstack/hpc_observer/steps/sync_originserver.py b/planetstack/hpc_observer/steps/sync_originserver.py
index 92ac0f4..d18c672 100644
--- a/planetstack/hpc_observer/steps/sync_originserver.py
+++ b/planetstack/hpc_observer/steps/sync_originserver.py
@@ -1,6 +1,7 @@
 import os
 import sys
 import base64
+
 from django.db.models import F, Q
 from planetstack.config import Config
 from observer.syncstep import SyncStep
@@ -25,11 +26,14 @@
         HpcLibrary.__init__(self)
 
     def fetch_pending(self, deleted):
-        self.sanity_check()
+        #self.consistency_check()
 
         return SyncStep.fetch_pending(self, deleted)
 
-    def sanity_check(self):
+    def consistency_check(self):
+        # set to true if something changed
+        result=False
+
         # sanity check to make sure our PS objects have CMI objects behind them
         all_ors_ids = [x["origin_server_id"] for x in self.client.onev.ListAll("OriginServer")]
         for ors in OriginServer.objects.all():
@@ -40,6 +44,9 @@
                 logger.info("origin server %s was not found on CMI" % ors.origin_server_id)
                 ors.origin_server_id=None
                 ors.save()
+                result = True
+
+        return result
 
     def sync_record(self, ors):
         logger.info("sync'ing origin server %s" % str(ors))
diff --git a/planetstack/hpc_observer/steps/sync_serviceprovider.py b/planetstack/hpc_observer/steps/sync_serviceprovider.py
index 78fd196..ca0ba6a 100644
--- a/planetstack/hpc_observer/steps/sync_serviceprovider.py
+++ b/planetstack/hpc_observer/steps/sync_serviceprovider.py
@@ -25,11 +25,14 @@
         HpcLibrary.__init__(self)
 
     def fetch_pending(self, deleted):
-        self.sanity_check()
+        #self.consistency_check()
 
         return SyncStep.fetch_pending(self, deleted)
 
-    def sanity_check(self):
+    def consistency_check(self):
+        # set to true if something changed
+        result=False
+
         # sanity check to make sure our PS objects have CMI objects behind them
         all_sp_ids = [x["service_provider_id"] for x in self.client.onev.ListAll("ServiceProvider")]
         for sp in ServiceProvider.objects.all():
@@ -37,11 +40,13 @@
                 logger.info("Service provider %s was not found on CMI" % sp.service_provider_id)
                 sp.service_provider_id=None
                 sp.save()
+                result = True
+
+        return result
 
     def sync_record(self, sp):
         logger.info("sync'ing service provider %s" % str(sp))
         account_name = self.make_account_name(sp.name)
-        print "XXX", sp.name, account_name
         sp_dict = {"account": account_name, "name": sp.name, "enabled": sp.enabled}
         if not sp.service_provider_id:
             id = self.client.onev.Create("ServiceProvider", sp_dict)
