diff --git a/planetstack/ec2_observer/__init__.pyc b/planetstack/ec2_observer/__init__.pyc
index 6035459..c43a857 100644
--- a/planetstack/ec2_observer/__init__.pyc
+++ b/planetstack/ec2_observer/__init__.pyc
Binary files differ
diff --git a/planetstack/ec2_observer/event_manager.pyc b/planetstack/ec2_observer/event_manager.pyc
index 7737f37..d514197 100644
--- a/planetstack/ec2_observer/event_manager.pyc
+++ b/planetstack/ec2_observer/event_manager.pyc
Binary files differ
diff --git a/planetstack/ec2_observer/steps/sync_nodes.py b/planetstack/ec2_observer/steps/sync_nodes.py
index 9dc00f2..9f032ed 100644
--- a/planetstack/ec2_observer/steps/sync_nodes.py
+++ b/planetstack/ec2_observer/steps/sync_nodes.py
@@ -12,40 +12,40 @@
 import pdb
 
 class SyncNodes(SyncStep):
-	provides=[Node]
-	requested_interval=0
+    provides=[Node]
+    requested_interval=0
 
-	def fetch_pending(self, deletion):
+    def fetch_pending(self, deletion):
         if (deletion):
             return []
 
-		deployment = Deployment.objects.filter(Q(name="Amazon EC2"))[0]
-		current_site_deployments = SiteDeployments.objects.filter(Q(deployment=deployment))
+        deployment = Deployment.objects.filter(Q(name="Amazon EC2"))[0]
+        current_site_deployments = SiteDeployments.objects.filter(Q(deployment=deployment))
 
-		zone_ret = aws_run('ec2 describe-availability-zones')
-		zones = zone_ret['AvailabilityZones']
+        zone_ret = aws_run('ec2 describe-availability-zones')
+        zones = zone_ret['AvailabilityZones']
 
-		# collect local nodes
-		instance_types = 'm1.small | m1.medium | m1.large | m1.xlarge | m3.medium | m3.large | m3.xlarge | m3.2xlarge'.split(' | ')
+        # collect local nodes
+        instance_types = 'm1.small | m1.medium | m1.large | m1.xlarge | m3.medium | m3.large | m3.xlarge | m3.2xlarge'.split(' | ')
 
-		all_new_nodes = []
-		for sd in current_site_deployments:
-			s = sd.site
-			current_fqns = [n.name for n in s.nodes.all()]
-			all_fqns = ['.'.join([n,s.name]) for n in instance_types]
-			new_node_names = list(set(all_fqns) - set(current_fqns))
+        all_new_nodes = []
+        for sd in current_site_deployments:
+            s = sd.site
+            current_fqns = [n.name for n in s.nodes.all()]
+            all_fqns = ['.'.join([n,s.name]) for n in instance_types]
+            new_node_names = list(set(all_fqns) - set(current_fqns))
 
-			new_nodes = []
-			for node_name in new_node_names:
-				node = Node(name=node_name,
-							site=s,deployment=deployment)
-				new_nodes.append(node)
+            new_nodes = []
+            for node_name in new_node_names:
+                node = Node(name=node_name,
+                            site=s,deployment=deployment)
+                new_nodes.append(node)
 
-			all_new_nodes.extend(new_nodes)
+            all_new_nodes.extend(new_nodes)
 
-		return all_new_nodes
-				 
+        return all_new_nodes
+                 
 
-	def sync_record(self, node):
-		node.save()
-		  
+    def sync_record(self, node):
+        node.save()
+          
diff --git a/planetstack/ec2_observer/steps/sync_site_deployments.py b/planetstack/ec2_observer/steps/sync_site_deployments.py
index 54df732..7c24f68 100644
--- a/planetstack/ec2_observer/steps/sync_site_deployments.py
+++ b/planetstack/ec2_observer/steps/sync_site_deployments.py
@@ -8,43 +8,43 @@
 import pdb
 
 class SyncSiteDeployments(SyncStep):
-	requested_interval=86400
-	provides=[SiteDeployments]
+    requested_interval=86400
+    provides=[SiteDeployments]
 
-	def fetch_pending(self, deletion):
+    def fetch_pending(self, deletion):
         if (deletion):
             return []
 
-		zone_ret = aws_run('ec2 describe-availability-zones')
-		zones = zone_ret['AvailabilityZones']
-		available_sites = [zone['ZoneName'] for zone in zones]
+        zone_ret = aws_run('ec2 describe-availability-zones')
+        zones = zone_ret['AvailabilityZones']
+        available_sites = [zone['ZoneName'] for zone in zones]
 
-		current_sites = []
-		for s in available_sites:
-			site = Site.objects.filter(Q(name=s))
-			if (site):
-				current_sites.append(site[0])
+        current_sites = []
+        for s in available_sites:
+            site = Site.objects.filter(Q(name=s))
+            if (site):
+                current_sites.append(site[0])
 
-		# OK not to catch exception
-		# The syncstep should catch it
-		# At any rate, we should not run if there are no deployments
-		deployment = Deployment.objects.filter(Q(name="Amazon EC2"))[0]
-		current_site_deployments = SiteDeployments.objects.filter(Q(deployment=deployment))
-		site_dict = {}
+        # OK not to catch exception
+        # The syncstep should catch it
+        # At any rate, we should not run if there are no deployments
+        deployment = Deployment.objects.filter(Q(name="Amazon EC2"))[0]
+        current_site_deployments = SiteDeployments.objects.filter(Q(deployment=deployment))
+        site_dict = {}
 
-		for sd in current_site_deployments:
-			site_dict[sd.site]=sd
+        for sd in current_site_deployments:
+            site_dict[sd.site]=sd
 
-		updated_site_deployments = []
-		for site in current_sites:
-			try:
-				site_record = site_dict[site]
-			except KeyError:
-				sd = SiteDeployments(site=site,deployment=deployment,tenant_id=base64.urlsafe_b64encode(os.urandom(12)))
-				updated_site_deployments.append(sd)
+        updated_site_deployments = []
+        for site in current_sites:
+            try:
+                site_record = site_dict[site]
+            except KeyError:
+                sd = SiteDeployments(site=site,deployment=deployment,tenant_id=base64.urlsafe_b64encode(os.urandom(12)))
+                updated_site_deployments.append(sd)
 
-		return updated_site_deployments
+        return updated_site_deployments
 
 
-	def sync_record(self, site_deployment):
-		site_deployment.save()
+    def sync_record(self, site_deployment):
+        site_deployment.save()
diff --git a/planetstack/ec2_observer/steps/sync_sites.py b/planetstack/ec2_observer/steps/sync_sites.py
index c8d6490..0c1c7cf 100644
--- a/planetstack/ec2_observer/steps/sync_sites.py
+++ b/planetstack/ec2_observer/steps/sync_sites.py
@@ -8,36 +8,36 @@
 import pdb
 
 class SyncSites(SyncStep):
-	provides=[Site]
-	requested_interval=3600
+    provides=[Site]
+    requested_interval=3600
 
-	def fetch_pending(self, deletion):
+    def fetch_pending(self, deletion):
         if (deletion):
             return []
 
-		deployment = Deployment.objects.filter(Q(name="Amazon EC2"))[0]
-		current_site_deployments = SiteDeployments.objects.filter(Q(deployment=deployment))
+        deployment = Deployment.objects.filter(Q(name="Amazon EC2"))[0]
+        current_site_deployments = SiteDeployments.objects.filter(Q(deployment=deployment))
 
-		zone_ret = aws_run('ec2 describe-availability-zones')
-		zones = zone_ret['AvailabilityZones']
+        zone_ret = aws_run('ec2 describe-availability-zones')
+        zones = zone_ret['AvailabilityZones']
 
-		available_sites = [zone['ZoneName'] for zone in zones]
-		site_names = [sd.site.name for sd in current_site_deployments]
+        available_sites = [zone['ZoneName'] for zone in zones]
+        site_names = [sd.site.name for sd in current_site_deployments]
 
-		new_site_names = list(set(available_sites) - set(site_names))
+        new_site_names = list(set(available_sites) - set(site_names))
 
-		new_sites = []
-		for s in new_site_names:
-			site = Site(name=s,
-						login_base=s,
-						site_url="www.amazon.com",
-						enabled=True,
-						is_public=True,
-						abbreviated_name=s)
-			new_sites.append(site)
-		
-		return new_sites
+        new_sites = []
+        for s in new_site_names:
+            site = Site(name=s,
+                        login_base=s,
+                        site_url="www.amazon.com",
+                        enabled=True,
+                        is_public=True,
+                        abbreviated_name=s)
+            new_sites.append(site)
+        
+        return new_sites
 
-	def sync_record(self, site):
-		site.save()
+    def sync_record(self, site):
+        site.save()
 
diff --git a/planetstack/ec2_observer/steps/sync_users.py b/planetstack/ec2_observer/steps/sync_users.py
index 030e360..496bc79 100644
--- a/planetstack/ec2_observer/steps/sync_users.py
+++ b/planetstack/ec2_observer/steps/sync_users.py
@@ -12,35 +12,35 @@
 import pdb
 
 class SyncUsers(SyncStep):
-	provides=[User]
-	requested_interval=0
+    provides=[User]
+    requested_interval=0
 
-	def fetch_pending(self, deletion):
+    def fetch_pending(self, deletion):
         if (deletion):
             return []
 
-		users = User.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
-		if (users):
-			key_sig = aws_run('ec2 describe-key-pairs')
-			ec2_keys = key_sig['KeyPairs']
-		else:
-			ec2_keys = []
+        users = User.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+        if (users):
+            key_sig = aws_run('ec2 describe-key-pairs')
+            ec2_keys = key_sig['KeyPairs']
+        else:
+            ec2_keys = []
 
-		for user in users:
-			if (user.public_key): 
-				key_name = user.email.lower().replace('@', 'AT').replace('.', '')
-				key_found = False
+        for user in users:
+            if (user.public_key): 
+                key_name = user.email.lower().replace('@', 'AT').replace('.', '')
+                key_found = False
 
-				for key in ec2_keys:
-					if (key['KeyName']==key_name):
-						key_found = True
-						break
+                for key in ec2_keys:
+                    if (key['KeyName']==key_name):
+                        key_found = True
+                        break
 
-				if (not key_found):
-					aws_run('ec2 import-key-pair --key-name %s --public-key-material "%s"'%(key_name, user.public_key))
-					
-		return users
+                if (not key_found):
+                    aws_run('ec2 import-key-pair --key-name %s --public-key-material "%s"'%(key_name, user.public_key))
+                    
+        return users
 
-	def sync_record(self, node):
-		node.save()
-		  
+    def sync_record(self, node):
+        node.save()
+          
diff --git a/planetstack/observer b/planetstack/observer
index ae75af5..10522a2 120000
--- a/planetstack/observer
+++ b/planetstack/observer
@@ -1 +1 @@
-openstack_observer
\ No newline at end of file
+ec2_observer
\ No newline at end of file
