diff --git a/planetstack/observer/event_loop.py b/planetstack/observer/event_loop.py
index 5ce4b54..f4f7f02 100644
--- a/planetstack/observer/event_loop.py
+++ b/planetstack/observer/event_loop.py
@@ -58,7 +58,7 @@
     return order
 
 class PlanetStackObserver:
-    sync_steps = [SyncNetworks,SyncNetworkSlivers,SyncSites,SyncSitePrivileges,SyncSlices,SyncSliceMemberships,SyncSlivers,SyncSliverIps]
+    sync_steps = [SyncNetworks,SyncNetworkSlivers,SyncSites,SyncSitePrivileges,SyncSlices,SyncSliceMemberships,SyncSlivers,SyncSliverIps,SyncExternalRoutes,SyncUsers,GarbageCollector]
 
     def __init__(self):
         # The Condition object that gets signalled by Feefie events
diff --git a/planetstack/observer/steps/__init__.py b/planetstack/observer/steps/__init__.py
index 6d7adb8..7f5dcf9 100644
--- a/planetstack/observer/steps/__init__.py
+++ b/planetstack/observer/steps/__init__.py
@@ -8,3 +8,4 @@
 from .sync_sliver_ips import SyncSliverIps
 from .sync_slivers import SyncSlivers
 from .sync_users import SyncUsers
+from .garbage_collector import GarbageCollector
diff --git a/planetstack/observer/steps/garbage_collector.py b/planetstack/observer/steps/garbage_collector.py
index 4b6dfaf..9e2a37d 100644
--- a/planetstack/observer/steps/garbage_collector.py
+++ b/planetstack/observer/steps/garbage_collector.py
@@ -1,15 +1,13 @@
 import os
 import base64
 from planetstack.config import Config
+from observer.openstacksyncstep import OpenStackSyncStep
 
-class GarbageCollector(SyncStep):
-	requested_interval = 86400
-	provides=[]
+class GarbageCollector(OpenStackSyncStep):
+    requested_interval = 86400
+    provides=[]
 
-	def call(self):
-		pass
-
-    def run(self):
+    def call(self):
         try:
             logger.info('gc start')
             #self.sync_roles()
diff --git a/planetstack/observer/steps/sync_external_routes.py b/planetstack/observer/steps/sync_external_routes.py
index cbaf490..7a67896 100644
--- a/planetstack/observer/steps/sync_external_routes.py
+++ b/planetstack/observer/steps/sync_external_routes.py
@@ -1,20 +1,21 @@
 import os
 import base64
 from planetstack.config import Config
-from observer.syncstep import SyncStep
+from observer.openstacksyncstep import OpenStackSyncStep
 
-class SyncExternalRoutes(SyncStep):
-	# XXX what does this provide?
-	requested_interval = 86400 # This step is slow like a pig. Let's run it infrequently
+class SyncExternalRoutes(OpenStackSyncStep):
+    # XXX what does this provide?
+    provides=[]
+    requested_interval = 86400 # This step is slow like a pig. Let's run it infrequently
 
-	def __init__(self):
-		pass
+    def __init__(self):
+        pass
 
-	def call(self):
-		routes = self.driver.get_external_routes()
-		subnets = self.driver.shell.quantum.list_subnets()['subnets']
-		for subnet in subnets:
-			try:
-				self.driver.add_external_route(subnet, routes)
-			except:
-				logger.log_exc("failed to add external route for subnet %s" % subnet)
+    def call(self):
+        routes = self.driver.get_external_routes()
+        subnets = self.driver.shell.quantum.list_subnets()['subnets']
+        for subnet in subnets:
+            try:
+                self.driver.add_external_route(subnet, routes)
+            except:
+                logger.log_exc("failed to add external route for subnet %s" % subnet)
diff --git a/planetstack/observer/steps/sync_networks.py b/planetstack/observer/steps/sync_networks.py
index 656ae68..02a1b23 100644
--- a/planetstack/observer/steps/sync_networks.py
+++ b/planetstack/observer/steps/sync_networks.py
@@ -8,6 +8,9 @@
     provides=[Network]
     requested_interval = 0
 
+    def fetch_pending(self):
+        return Network.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+
     def save_network(self, network):
         if not network.network_id:
             if network.template.sharedNetworkName:
@@ -45,14 +48,14 @@
 
     def sync_record(self, site):
         if network.owner and network.owner.creator:
-                try:
-                    # update manager context
-                    real_driver = self.driver
-                    self.driver = self.driver.client_driver(network.owner.creator, network.owner.name)
-                    self.save_network(network)
-                    self.driver = real_driver
-                    logger.info("saved network: %s" % (network))
-                except Exception,e:
-                    logger.log_exc("save network failed: %s" % network)    
-                    raise e
+            try:
+                # update manager context
+                real_driver = self.driver
+                self.driver = self.driver.client_driver(network.owner.creator, network.owner.name)
+                self.save_network(network)
+                self.driver = real_driver
+                logger.info("saved network: %s" % (network))
+            except Exception,e:
+                logger.log_exc("save network failed: %s" % network)    
+                raise e
 
diff --git a/planetstack/observer/steps/sync_site_privileges.py b/planetstack/observer/steps/sync_site_privileges.py
index ac0dbac..e02dde7 100644
--- a/planetstack/observer/steps/sync_site_privileges.py
+++ b/planetstack/observer/steps/sync_site_privileges.py
@@ -6,8 +6,11 @@
 
 class SyncSitePrivileges(OpenStackSyncStep):
 	requested_interval=0
-
 	provides=[SitePrivilege]
+
+    def fetch_pending(self):
+        return Network.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+
 	def sync_record(self, user):
 		if site_priv.user.kuser_id and site_priv.site.tenant_id:
 			self.driver.add_user_role(site_priv.user.kuser_id,
diff --git a/planetstack/observer/steps/sync_sites.py b/planetstack/observer/steps/sync_sites.py
index 1f7a0f8..ece34af 100644
--- a/planetstack/observer/steps/sync_sites.py
+++ b/planetstack/observer/steps/sync_sites.py
@@ -7,6 +7,10 @@
 class SyncSites(OpenStackSyncStep):
 	provides=[Site]
 	requested_interval=0
+
+    def fetch_pending(self):
+        return Site.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+
 	def sync_record(self, site):
 		save_site = False
 		if not site.tenant_id:
diff --git a/planetstack/observer/steps/sync_slice_memberships.py b/planetstack/observer/steps/sync_slice_memberships.py
index 1ec3a96..0e9d681 100644
--- a/planetstack/observer/steps/sync_slice_memberships.py
+++ b/planetstack/observer/steps/sync_slice_memberships.py
@@ -6,7 +6,11 @@
 
 class SyncSliceMemberships(OpenStackSyncStep):
     requested_interval=0
-    provides=[SliceRole]
+    provides=[SlicePrivilege]
+
+    def fetch_pending(self):
+        return SlicePrivilege.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+
     def sync_record(self, user):
         if slice_memb.user.kuser_id and slice_memb.slice.tenant_id:
                 self.driver.add_user_role(slice_memb.user.kuser_id,
diff --git a/planetstack/observer/steps/sync_slices.py b/planetstack/observer/steps/sync_slices.py
index 81ed925..4f10a14 100644
--- a/planetstack/observer/steps/sync_slices.py
+++ b/planetstack/observer/steps/sync_slices.py
@@ -7,6 +7,10 @@
 class SyncSlices(OpenStackSyncStep):
 	provides=[Slice]
 	requested_interval=0
+
+    def fetch_pending(self):
+        return Slice.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+
 	def sync_record(self, slice):
 		if not slice.tenant_id:
 			nova_fields = {'tenant_name': slice.name,
diff --git a/planetstack/observer/steps/sync_sliver_ips.py b/planetstack/observer/steps/sync_sliver_ips.py
index 50ec6ad..fb4fd5b 100644
--- a/planetstack/observer/steps/sync_sliver_ips.py
+++ b/planetstack/observer/steps/sync_sliver_ips.py
@@ -7,6 +7,7 @@
 class SyncSliverIps(OpenStackSyncStep):
     provides=[Sliver]
     requested_interval=0
+
     def fetch_pending(self):
         slivers = Sliver.objects.filter(ip=None)
         return slivers
diff --git a/planetstack/observer/steps/sync_slivers.py b/planetstack/observer/steps/sync_slivers.py
index adab39d..e119b0e 100644
--- a/planetstack/observer/steps/sync_slivers.py
+++ b/planetstack/observer/steps/sync_slivers.py
@@ -7,21 +7,25 @@
 class SyncSlivers(OpenStackSyncStep):
 	provides=[Sliver]
 	requested_interval=0
+
+    def fetch_pending(self):
+        return Sliver.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+
 	def sync_record(self, slice):
 		if not sliver.instance_id:
-				nics = self.get_requested_networks(sliver.slice)
-				file("/tmp/scott-manager","a").write("slice: %s\nreq: %s\n" % (str(sliver.slice.name), str(nics)))
-				slice_memberships = SliceMembership.objects.filter(slice=sliver.slice)
-				pubkeys = [sm.user.public_key for sm in slice_memberships if sm.user.public_key]
-				pubkeys.append(sliver.creator.public_key)
-				instance = self.driver.spawn_instance(name=sliver.name,
-									key_name = sliver.creator.keyname,
-									image_id = sliver.image.image_id,
-									hostname = sliver.node.name,
-									pubkeys = pubkeys,
-									nics = nics )
-				sliver.instance_id = instance.id
-				sliver.instance_name = getattr(instance, 'OS-EXT-SRV-ATTR:instance_name')
+            nics = self.get_requested_networks(sliver.slice)
+            file("/tmp/scott-manager","a").write("slice: %s\nreq: %s\n" % (str(sliver.slice.name), str(nics)))
+            slice_memberships = SliceMembership.objects.filter(slice=sliver.slice)
+            pubkeys = [sm.user.public_key for sm in slice_memberships if sm.user.public_key]
+            pubkeys.append(sliver.creator.public_key)
+            instance = self.driver.spawn_instance(name=sliver.name,
+                                key_name = sliver.creator.keyname,
+                                image_id = sliver.image.image_id,
+                                hostname = sliver.node.name,
+                                pubkeys = pubkeys,
+                                nics = nics )
+            sliver.instance_id = instance.id
+            sliver.instance_name = getattr(instance, 'OS-EXT-SRV-ATTR:instance_name')
 
 		if sliver.instance_id and ("numberCores" in sliver.changed_fields):
 			self.driver.update_instance_metadata(sliver.instance_id, {"cpu_cores": str(sliver.numberCores)})
diff --git a/planetstack/observer/steps/sync_users.py b/planetstack/observer/steps/sync_users.py
index dde8a24..f222b43 100644
--- a/planetstack/observer/steps/sync_users.py
+++ b/planetstack/observer/steps/sync_users.py
@@ -7,6 +7,10 @@
 class SyncUsers(OpenStackSyncStep):
     provides=[User]
     requested_interval=0
+
+    def fetch_pending(self):
+        return User.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+
     def sync_record(self, user):
         name = user.email[:user.email.find('@')]
         user_fields = {'name': name,
diff --git a/planetstack/observer/syncstep.py b/planetstack/observer/syncstep.py
index c8d3e42..8e8d4fc 100644
--- a/planetstack/observer/syncstep.py
+++ b/planetstack/observer/syncstep.py
@@ -37,7 +37,8 @@
         return
 
     def fetch_pending(self):
-        return Sliver.objects.filter(ip=None)
+        #return Sliver.objects.filter(ip=None)
+        return []
     
     def check_dependencies(self, obj):
         for dep in self.dependencies:
diff --git a/planetstack/openstack/driver.py b/planetstack/openstack/driver.py
index 234dcbf..febac32 100644
--- a/planetstack/openstack/driver.py
+++ b/planetstack/openstack/driver.py
@@ -3,7 +3,6 @@
 
 try:
     from openstack.client import OpenStackClient
-    from openstack.driver import OpenStackDriver
     has_openstack = True
 except:
     has_openstack = False
