diff --git a/planetstack/openstack/client.py b/planetstack/openstack/client.py
index df340f6..72c5cb4 100644
--- a/planetstack/openstack/client.py
+++ b/planetstack/openstack/client.py
@@ -176,7 +176,7 @@
         token = self.keystone.client.tokens.authenticate(username=self.keystone.username, password=self.keystone.password, tenant_name=self.keystone.tenant)
         #self.glance = GlanceClient(*args, **kwds)
         
-        self.glanceclient = GlanceClientNew('1', endpoint='http://%s:9292' % hostname, token=token.id, **kwds)
+        self.glanceclient = GlanceClientNew('1', endpoint='https://%s:9292' % hostname, token=token.id, **kwds)
         self.nova = NovaClient(*args, **kwds)
         # self.nova_db = NovaDB(*args, **kwds)
         self.quantum = QuantumClient(*args, **kwds)
diff --git a/planetstack/openstack_observer/ceilometer.py b/planetstack/openstack_observer/ceilometer.py
index f93dc1a..7383524 100644
--- a/planetstack/openstack_observer/ceilometer.py
+++ b/planetstack/openstack_observer/ceilometer.py
@@ -11,16 +11,16 @@
 from core.models import *
 
 def object_to_filter(model_name, pk):
-	filter_dict = {
-		'Slice':[Slice, 'tenant_id', 'project_id'],
-		'Sliver':[Sliver, 'instance_id', 'resource_id'],
-		'Site':[Site, 'tenant_id', 'project_id']
-	}
-	
-	mod,field,tag = filter_dict[model_name]
-	obj = mod.objects.get(pk=pk)
-	return '%s=%s'%(tag,mod[field])
-	
+    filter_dict = {
+            'Slice':[Slice, 'tenant_id', 'project_id'],
+            'Sliver':[Sliver, 'instance_id', 'resource_id'],
+            'Site':[Site, 'tenant_id', 'project_id']
+    }
+
+    mod,field,tag = filter_dict[model_name]
+    obj = mod.objects.get(pk=pk)
+    return '%s=%s'%(tag,mod[field])
+
 
 def cli_to_array(cli_query):
     '''This converts from the cli list of queries to what is required
@@ -78,8 +78,8 @@
 
     stats.average/=len(meters)
     return stats
-        
-                
+
+
 
 class CeilometerDriver(MonitorDriver):
     def get_meter(self, meter, obj, pk, keystone=None):
@@ -95,14 +95,14 @@
         token = ceilometer_client.auth_token
 
         ceilo_endpoint = client._get_endpoint(ceilometer_client, **keystone)
-	#ceilometer = client.get_client(2, username=keystone['username'], password=keystone['password'], tenant_name=keystone['tenant_name'], auth_url=keystone['auth_url'])
+        #ceilometer = client.get_client(2, username=keystone['username'], password=keystone['password'], tenant_name=keystone['tenant_name'], auth_url=keystone['auth_url'])
 
         ceilometer = client.Client('2',endpoint = ceilo_endpoint, token = lambda: token)
 
         cur_ts = datetime.datetime.fromtimestamp(time.time()-86400)
         str_ts = cur_ts.strftime('%Y-%m-%dT%H:%M:%S')
-        
-		object_filter = object_to_filter(obj, pk)
+
+        object_filter = object_to_filter(obj, pk)
         filter=';'.join([object_filter,'timestamp>%s'%str_ts])
         #query = cli_to_array("project_id=124de34266b24f57957345cdb43cc9ff;timestamp>2014-12-11T00:00:00")
         query = cli_to_array(filter)
@@ -111,4 +111,3 @@
 
         stats = meters_to_stats(meters)
         return stats
-
diff --git a/planetstack/openstack_observer/steps/__init__.py b/planetstack/openstack_observer/steps/__init__.py
index 72b0b12..6eec315 100644
--- a/planetstack/openstack_observer/steps/__init__.py
+++ b/planetstack/openstack_observer/steps/__init__.py
@@ -3,3 +3,4 @@
 from .sync_controller_users import SyncControllerUsers
 from .sync_controller_site_privileges import SyncControllerSitePrivileges
 from .sync_controller_slice_privileges import SyncControllerSlicePrivileges
+from .sync_controller_networks import SyncControllerNetworks
diff --git a/planetstack/openstack_observer/steps/sync_controller_networks.py b/planetstack/openstack_observer/steps/sync_controller_networks.py
index fa1f439..c90e4df 100644
--- a/planetstack/openstack_observer/steps/sync_controller_networks.py
+++ b/planetstack/openstack_observer/steps/sync_controller_networks.py
@@ -13,7 +13,7 @@
 
 logger = Logger(level=logging.INFO)
 
-class SyncControllerNetwork(OpenStackSyncStep):
+class SyncControllerNetworks(OpenStackSyncStep):
     requested_interval = 0
     provides=[Network, ControllerNetwork, Sliver]
 
@@ -42,8 +42,8 @@
 
 	    network_fields = {'endpoint':controller_network.controller.auth_url,
 			'admin_user':slice.creator.email, # XXX: FIXME
-			'tenant_name':slice.slicename, # XXX: FIXME
-			'admin_password':controller_network.controller.admin_password,
+			'tenant_name':slice.name, # XXX: FIXME
+			'admin_password':slice.creator.remote_password,
 			'name':network_name,
 			'subnet_name':subnet_name,
 			'ansible_tag':'%s-%s@%s'%(network_name,slice.slicename,controller_network.controller.name),
diff --git a/planetstack/openstack_observer/steps/sync_controller_networks.yaml b/planetstack/openstack_observer/steps/sync_controller_networks.yaml
index c85ec55..9b42ea6 100644
--- a/planetstack/openstack_observer/steps/sync_controller_networks.yaml
+++ b/planetstack/openstack_observer/steps/sync_controller_networks.yaml
@@ -6,6 +6,7 @@
         auth_url={{ endpoint }} 
         login_username={{ admin_user }}
         tenant_name={{ tenant_name }}
+        login_tenant_name={{ tenant_name }}
         login_password={{ admin_password }}
         name={{ name }}
         {% if delete %}
@@ -13,11 +14,12 @@
         {% else %}
         state=present
         {% endif %}
-        shared: true
+        shared=true
   - quantum_subnet:
         auth_url={{ endpoint }} 
         login_username={{ admin_user }}
         tenant_name={{ tenant_name }}
+        login_tenant_name={{ tenant_name }}
         login_password={{ admin_password }}
         name={{ subnet_name }} 
         network_name={{ name }} 
@@ -25,5 +27,5 @@
         state=absent
         {% else %}
         state=present 
-        cidr = {{ cidr }}
+        cidr={{ cidr }}
         {% endif %}
diff --git a/planetstack/openstack_observer/steps/sync_images.py b/planetstack/openstack_observer/steps/sync_images.py
deleted file mode 100644
index 9b915fb..0000000
--- a/planetstack/openstack_observer/steps/sync_images.py
+++ /dev/null
@@ -1,42 +0,0 @@
-import os
-import base64
-from django.db.models import F, Q
-from planetstack.config import Config
-from observer.openstacksyncstep import OpenStackSyncStep
-from core.models.image import Image
-
-class SyncImages(OpenStackSyncStep):
-    provides=[Image]
-    requested_interval=0
-
-    def fetch_pending(self, deleted):
-        # Images come from the back end
-        # You can't delete them
-        if (deleted):
-            return []
-
-        # get list of images on disk
-        images_path = Config().observer_images_directory 
-        available_images = {}
-        for f in os.listdir(images_path):
-            if os.path.isfile(os.path.join(images_path ,f)):
-                available_images[f] = os.path.join(images_path ,f)
-
-        images = Image.objects.all()
-        image_names = [image.name for image in images]
-
-        for image_name in available_images:
-            #remove file extension
-            clean_name = ".".join(image_name.split('.')[:-1])
-            if clean_name not in image_names:
-                image = Image(name=clean_name,
-                              disk_format='raw',
-                              container_format='bare', 
-                              path = available_images[image_name])
-                image.save()
-       
-        
-        return Image.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) 
-
-    def sync_record(self, image):
-        image.save()
diff --git a/planetstack/openstack_observer/steps/sync_networks.py b/planetstack/openstack_observer/steps/sync_networks.py
deleted file mode 100644
index 9f36ed5..0000000
--- a/planetstack/openstack_observer/steps/sync_networks.py
+++ /dev/null
@@ -1,26 +0,0 @@
-import os
-import base64
-from django.db.models import F, Q
-from planetstack.config import Config
-from observer.openstacksyncstep import OpenStackSyncStep
-from core.models.network import *
-from util.logger import Logger, logging
-from observer.steps.sync_controller_networks import *
-
-logger = Logger(level=logging.INFO)
-
-class SyncNetworks(OpenStackSyncStep):
-    provides=[Network]
-    requested_interval = 0
-
-    def sync_record(self, network):
-        network.save()
-
-    def delete_record(self, network):
-        controller_networks_deleter = SyncControllerNetwork().delete_record
-        for controller_network in ControllerNetwork.objects.filter(network=network):
-            try:
-                controller_network_deleter(controller_network)    
-            except Exception,e:
-                logger.log_exc("Failed to delete controller network %s" % controller_network)
-                raise e
diff --git a/planetstack/openstack_observer/steps/sync_roles.py b/planetstack/openstack_observer/steps/sync_roles.py
deleted file mode 100644
index f08a693..0000000
--- a/planetstack/openstack_observer/steps/sync_roles.py
+++ /dev/null
@@ -1,41 +0,0 @@
-import os
-import base64
-from django.db.models import F, Q
-from planetstack.config import Config
-from observer.openstacksyncstep import OpenStackSyncStep
-from core.models.role import Role
-from core.models.site import SiteRole, Controller, ControllerRole
-from core.models.slice import SliceRole
-
-class SyncRoles(OpenStackSyncStep):
-    provides=[Role]
-    requested_interval=0
-
-    def fetch_pending(self, deleted):
-        # Deleting roles is not supported yet
-        if (deleted):
-            return []
-
-        site_roles = SiteRole.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
-        slice_roles = SliceRole.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
-        controller_roles = ControllerRole.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
-
-        roles = []
-        for site_role in site_roles:
-            roles.append(site_role)
-        for slice_role in slice_roles:
-            roles.append(slice_role)
-        for controller_role in controller_roles:
-            roles.append(controller_role)
-
-        return roles
-
-
-    def sync_record(self, role):
-        if not role.enacted:
-            controllers = Controller.objects.all()
-       	    for controller in controllers:
-                driver = self.driver.admin_driver(controller=controller)
-                driver.create_role(role.role)
-            role.save()
-    
diff --git a/planetstack/openstack_observer/steps/sync_site_privileges.py b/planetstack/openstack_observer/steps/sync_site_privileges.py
deleted file mode 100644
index bfc04b3..0000000
--- a/planetstack/openstack_observer/steps/sync_site_privileges.py
+++ /dev/null
@@ -1,30 +0,0 @@
-import os
-import base64
-from django.db.models import F, Q
-from planetstack.config import Config
-from observer.openstacksyncstep import OpenStackSyncStep
-from core.models import User, ControllerUser, SitePrivilege, SiteDeployment   
-
-class SyncSitePrivilege(OpenStackSyncStep):
-    requested_interval=0
-    provides=[SitePrivilege]
-
-    def fetch_pending(self, deleted):
-        # Deleting site privileges is not supported yet
-        if (deleted):
-            return []
-
-        return SitePrivilege.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
-
-    def sync_record(self, site_priv):
-        # sync site privileges at all site controllers
-        ctrl_site_deployments = SiteDeployment.objects.filter(site_deployment__site=site_priv.site)
-        for ctrl_site_deployment in ctrl_site_deployments:
-            controller_users = ControllerUser.objects.filter(controller=ctrl_site_deployment.controller,
-                                                              user=site_priv.user)
-            if controller_users:
-                kuser_id  = controller_users[0].kuser_id
-                driver = self.driver.admin_driver(controller=ctrl_site_deployment.controller)
-                driver.add_user_role(kuser_id,
-                                     ctrl_site_deployment.controller.tenant_id,
-                                     site_priv.role.role)
diff --git a/planetstack/openstack_observer/steps/sync_slice_memberships.py b/planetstack/openstack_observer/steps/sync_slice_memberships.py
deleted file mode 100644
index e95c533..0000000
--- a/planetstack/openstack_observer/steps/sync_slice_memberships.py
+++ /dev/null
@@ -1,36 +0,0 @@
-import os
-import base64
-from django.db.models import F, Q
-from planetstack.config import Config
-from observer.openstacksyncstep import OpenStackSyncStep
-from core.models.slice import *
-from core.models.controllerusers import ControllerUser
-from util.logger import Logger, logging
-
-logger = Logger(level=logging.INFO)
-
-class SyncSliceMemberships(OpenStackSyncStep):
-    requested_interval=0
-    provides=[SlicePrivilege]
-
-    def fetch_pending(self, deleted):
-        # Deleting site memberships is not supported yet
-        if (deleted):
-            return []
-        return SlicePrivilege.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
-
-    def sync_record(self, slice_memb):
-        # sync slice memberships at all slice controllers 
-        logger.info("syncing slice privilege: %s %s" % (slice_memb.slice.name, slice_memb.user.email))
-        slice_controllers = ControllerSlice.objects.filter(slice=slice_memb.slice)
-        for slice_controller in slice_controllers:
-            if not slice_controller.tenant_id:
-                continue
-            controller_users = ControllerUser.objects.filter(controller=slice_controller.controller,
-                                                              user=slice_memb.user)
-            if controller_users:
-                kuser_id  = controller_users[0].kuser_id
-                driver = self.driver.admin_driver(controller=slice_controller.controller.name)
-                driver.add_user_role(kuser_id,
-                                     slice_controller.tenant_id,
-                                     slice_memb.role.role)
diff --git a/planetstack/openstack_observer/steps/sync_slices.py b/planetstack/openstack_observer/steps/sync_slices.py
deleted file mode 100644
index 99ed44c..0000000
--- a/planetstack/openstack_observer/steps/sync_slices.py
+++ /dev/null
@@ -1,30 +0,0 @@
-import os
-import base64
-from netaddr import IPAddress, IPNetwork
-from django.db.models import F, Q
-from planetstack.config import Config
-from observer.openstacksyncstep import OpenStackSyncStep
-from core.models.slice import Slice, ControllerSlice
-from util.logger import Logger, logging
-from observer.steps.sync_controller_slices import *
-
-logger = Logger(level=logging.INFO)
-
-class SyncSlices(OpenStackSyncStep):
-    provides=[Slice]
-    requested_interval=0
-
-    def sync_record(self, slice):
-        for controller_slice in ControllerSlice.objects.filter(slice=slice):
-            # bump the 'updated' timestamp and trigger observer to update
-            # slice across all controllers 
-            controller_slice.save()    
-
-    def delete_record(self, slice):
-        controller_slice_deleter = SyncControllerSlice().delete_record
-        for controller_slice in ControllerSlice.objects.filter(slice=slice):
-            try:
-                controller_slice_deleter(controller_slice)
-            except Exception,e:
-                logger.log_exc("Failed to delete controller_slice %s" % controller_slice) 
-                raise e
diff --git a/planetstack/openstack_observer/steps/sync_slivers.py b/planetstack/openstack_observer/steps/sync_slivers.py
index 8adb50c..8488b66 100644
--- a/planetstack/openstack_observer/steps/sync_slivers.py
+++ b/planetstack/openstack_observer/steps/sync_slivers.py
@@ -58,7 +58,7 @@
                              if network.template.shared_network_name]
 
         #driver = self.driver.client_driver(caller=sliver.creator, tenant=sliver.slice.name, controller=sliver.controllerNetwork)
-        driver = self.driver.admin_driver(tenant='admin', controller=sliver.controllerNetwork)
+        driver = self.driver.admin_driver(tenant='admin', controller=sliver.node.site_deployment.controller)
         nets = driver.shell.quantum.list_networks()['networks']
         for net in nets:
             if net['name'] in network_templates:
@@ -70,7 +70,7 @@
                     nics.append(net['id'])
 
         # look up image id
-        controller_driver = self.driver.admin_driver(controller=sliver.controllerNetwork)
+        controller_driver = self.driver.admin_driver(controller=sliver.node.site_deployment.controller)
         image_id = None
         images = controller_driver.shell.glanceclient.images.list()
         for image in images:
@@ -102,7 +102,7 @@
         if sliver.userData:
             userData = sliver.userData
 
-        controller = sliver.controllerNetwork
+        controller = sliver.node.site_deployment.controller
         tenant_fields = {'endpoint':controller.auth_url,
                      'admin_user': sliver.creator.username,
                      'admin_password': sliver.creator.password,
diff --git a/planetstack/openstack_observer/steps/sync_users.py b/planetstack/openstack_observer/steps/sync_users.py
deleted file mode 100644
index 4cb1a26..0000000
--- a/planetstack/openstack_observer/steps/sync_users.py
+++ /dev/null
@@ -1,24 +0,0 @@
-import os
-import base64
-import hashlib
-from django.db.models import F, Q
-from planetstack.config import Config
-from observer.openstacksyncstep import OpenStackSyncStep
-from core.models.user import User
-from core.models.controllerusers import  ControllerUser
-from observer.steps.sync_controller_users import SyncControllerUser
-
-class SyncUsers(OpenStackSyncStep):
-    provides=[User]
-    requested_interval=0
-
-    def sync_record(self, user):
-        for controller_user in ControllerUser.objects.filter(user=user):
-            # bump the 'updated' field so user account are updated across 
-            # controllers.
-            controller_user.save()
-
-    def delete_record(self, user):
-        controller_user_deleter = SyncControllerUser().delete_record
-        for controller_user in ControllerUser.objects.filter(user=user):
-            controller_user_deleter(controller_user)
