diff --git a/planetstack/openstack_observer/steps/sync_controller_images.py b/planetstack/openstack_observer/steps/sync_controller_images.py
index 67cd7b5..4446d9a 100644
--- a/planetstack/openstack_observer/steps/sync_controller_images.py
+++ b/planetstack/openstack_observer/steps/sync_controller_images.py
@@ -17,61 +17,25 @@
     def fetch_pending(self, deleted):
         if (deleted):
             return []
-         # smbaker: commented out automatic creation of ControllerImages as
-         #    as they will now be configured in GUI. Not sure if this is
-         #    sufficient.
-
-#        # ensure images are available across all controllers
-#        controller_images = ControllerImages.objects.all()
-#        image_deploy_lookup = defaultdict(list)
-#        for controller_image in controller_images:
-#            image_deploy_lookup[controller_image.image].append(controller_image.controller)
-#
-#        all_controllers = Controller.objects.all()
-#        for image in Image.objects.all():
-#            expected_controllers = all_controllers
-#            for expected_controller in expected_controllers:
-#                if image not in image_deploy_lookup or \
-#                  expected_controller not in image_deploy_lookup[image]:
-#                    id = ControllerImages(image=image, controller=expected_controller)
-#                    id.save()
 
         # now we return all images that need to be enacted
         return ControllerImages.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
 
     def sync_record(self, controller_image):
         logger.info("Working on image %s on controller %s" % (controller_image.image.name, controller_image.controller))
-        driver = self.driver.admin_driver(controller=controller_image.controller.name)
-        images = driver.shell.glance.get_images()
-        glance_image = None
-        for image in images:
-            if image['name'] == controller_image.image.name:
-                glance_image = image
-                break
-        if glance_image:
-            logger.info("Found image %s on controller %s" % (controller_image.image.name, controller_image.controller.name))
-            controller_image.glance_image_id = glance_image['id']
-        elif controller_image.image.path:
-            image = {
-                'name': controller_image.image.name,
-                'is_public': True,
-                'disk_format': 'raw',
-                'container_format': 'bare',
-                'file': controller_image.image.path,
-            }
 
-            logger.info("Creating image %s on controller %s" % (controller_image.image.name, controller_image.controller.name))
+	image_fields = {'endpoint':controller_image.controller.auth_url,
+			'admin_user':controller_image.controller.admin_user,
+			'admin_password':controller_image.controller.admin_password,
+			'name':controller_image.image.name,
+			'filepath':controller_image.image.path
+			}
 
-            glance_image = driver.shell.glanceclient.images.create(name=controller_image.image.name,
-                                                                   is_public=True,
-                                                                   disk_format='raw',
-                                                                   container_format='bare')
-            glance_image.update(data=open(controller_image.image.path, 'rb'))
+	res = run_template('sync_controller_images.yaml', image_fields)
 
-            # While the images returned by driver.shell.glance.get_images()
-            #   are dicts, the images returned by driver.shell.glanceclient.images.create
-            #   are not dicts. We have to use getattr() instead of [] operator.
-            if not glance_image or not getattr(glance_image,"id",None):
-                raise Exception, "Add image failed at controller %s" % controller_image.controller.name
-            controller_image.glance_image_id = getattr(glance_image, "id")
-        controller_image.save()
+	if (len(res)!=1):
+	    raise Exception('Could not sync image %s'%controller_image.image.name)
+	else:
+	    image_id = res[0]['id'] 
+            controller_image.glance_image_id = image_id
+            controller_image.save()
