diff --git a/pydownloadmgr/download_manager.py b/pydownloadmgr/download_manager.py
index 5b2b92d..4e574ef 100644
--- a/pydownloadmgr/download_manager.py
+++ b/pydownloadmgr/download_manager.py
@@ -1,6 +1,5 @@
-#!/usr/bin/python -u
+#!/usr/bin/env python
 
-import sys
 import gobject
 import dbus
 import dbus.service
@@ -14,58 +13,63 @@
 OBJ_NAME = '/org/openbmc/managers/Download'
 TFTP_PORT = 69
 
+
 class DownloadManagerObject(dbus.service.Object):
-	def __init__(self,bus,name):
-		dbus.service.Object.__init__(self,bus,name)
-		bus.add_signal_receiver(self.DownloadHandler, 
-			dbus_interface = "org.openbmc.Flash",
-			signal_name = "Download", path_keyword = "path")
-		bus.add_signal_receiver(self.TftpDownloadHandler,
-			signal_name = "TftpDownload", path_keyword = "path")
+    def __init__(self, bus, name):
+        dbus.service.Object.__init__(self, bus, name)
+        bus.add_signal_receiver(
+            self.DownloadHandler,
+            dbus_interface="org.openbmc.Flash",
+            signal_name="Download",
+            path_keyword="path")
+        bus.add_signal_receiver(
+            self.TftpDownloadHandler,
+            signal_name="TftpDownload",
+            path_keyword="path")
 
+    @dbus.service.signal(DBUS_NAME, signature='ss')
+    def DownloadComplete(self, outfile, filename):
+        print "Download Complete: "+outfile
+        return outfile
 
-	@dbus.service.signal(DBUS_NAME,signature='ss')
-	def DownloadComplete(self,outfile,filename):
-		print "Download Complete: "+outfile
-		return outfile
+    @dbus.service.signal(DBUS_NAME, signature='s')
+    def DownloadError(self, filename):
+        pass
 
-	@dbus.service.signal(DBUS_NAME,signature='s')
-	def DownloadError(self,filename):
-		pass
+    def TftpDownloadHandler(self, ip, filename, path=None):
+        try:
+            filename = str(filename)
+            print "Downloading: "+filename+" from "+ip
+            outfile = FLASH_DOWNLOAD_PATH+"/"+filename
+            rc = subprocess.call(
+                ["tftp", "-l", outfile, "-r", filename, "-g", ip])
+            if (rc == 0):
+                self.DownloadComplete(outfile, filename)
+            else:
+                self.DownloadError(filename)
 
-	def TftpDownloadHandler(self,ip,filename,path = None):
-		try:
-			filename = str(filename)
-			print "Downloading: "+filename+" from "+ip
-			outfile = FLASH_DOWNLOAD_PATH+"/"+filename
-			rc = subprocess.call(["tftp", "-l",outfile,"-r",filename,"-g",ip])
-			if (rc == 0):
-				self.DownloadComplete(outfile,filename)
-			else:
-				self.DownloadError(filename)
+        except Exception as e:
+            print "ERROR DownloadManager: "+str(e)
+            self.DownloadError(filename)
 
+    # TODO: this needs to be deprecated.
+    # Shouldn't call flash interface from here
+    def DownloadHandler(self, url, filename, path=None):
+        try:
+            filename = str(filename)
+            print "Downloading: "+filename+" from "+url
+            outfile = FLASH_DOWNLOAD_PATH+"/"+filename
+            subprocess.call(
+                ["tftp", "-l", outfile, "-r", filename, "-g", url])
+            obj = bus.get_object("org.openbmc.control.Flash", path)
+            intf = dbus.Interface(obj, "org.openbmc.Flash")
+            intf.update(outfile)
 
-		except Exception as e:
-			print "ERROR DownloadManager: "+str(e)
-			self.DownloadError(filename)
-
-
-	## TODO: this needs to be deprecated.  Shouldn't call flash interface from here
-	def DownloadHandler(self,url,filename,path = None):
-		try:
-			filename = str(filename)
-			print "Downloading: "+filename+" from "+url
-			outfile = FLASH_DOWNLOAD_PATH+"/"+filename
-			subprocess.call(["tftp", "-l",outfile,"-r",filename,"-g",url])
-			obj = bus.get_object("org.openbmc.control.Flash",path)
-			intf = dbus.Interface(obj,"org.openbmc.Flash")
-			intf.update(outfile)
-
-		except Exception as e:
-			print "ERROR DownloadManager: "+str(e)
-			obj = bus.get_object("org.openbmc.control.Flash",path)
-			intf = dbus.Interface(obj,"org.openbmc.Flash")
-			intf.error("Download Error: "+filename)
+        except Exception as e:
+            print "ERROR DownloadManager: "+str(e)
+            obj = bus.get_object("org.openbmc.control.Flash", path)
+            intf = dbus.Interface(obj, "org.openbmc.Flash")
+            intf.error("Download Error: "+filename)
 
 
 if __name__ == '__main__':
@@ -74,7 +78,6 @@
     obj = DownloadManagerObject(bus, OBJ_NAME)
     mainloop = gobject.MainLoop()
     name = dbus.service.BusName(DBUS_NAME, bus)
-    
+
     print "Running Download Manager"
     mainloop.run()
-
