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()
+          
