diff --git a/bin/download_manager.py b/bin/download_manager.py
index a079efb..06e8773 100755
--- a/bin/download_manager.py
+++ b/bin/download_manager.py
@@ -23,13 +23,13 @@
 		bus.add_signal_receiver(self.DownloadHandler, 
 			dbus_interface = "org.openbmc.Flash", signal_name = "Download")
 
-	@dbus.service.signal(DBUS_NAME,signature='s')
-	def DownloadComplete(self,outfile):
+	@dbus.service.signal(DBUS_NAME,signature='ss')
+	def DownloadComplete(self,outfile,filename):
 		print "Download Complete: "+outfile
 		return outfile
 
-	@dbus.service.signal(DBUS_NAME)
-	def DownloadError(self):
+	@dbus.service.signal(DBUS_NAME,signature='s')
+	def DownloadError(self,filename):
 		pass
 
 	def DownloadHandler(self,url,filename):
@@ -39,11 +39,11 @@
 			print "Downloading: "+filename+" from "+url
 			outfile = System.FLASH_DOWNLOAD_PATH+"/"+filename
 			client.download(filename,outfile)
-			self.DownloadComplete(outfile)
+			self.DownloadComplete(outfile,filename)
 					
 		except Exception as e:
 			print "ERROR DownloadManager: "+str(e)
-			self.DownloadError()
+			self.DownloadError(filename)
 	
 
 
diff --git a/bin/flash_manager.py b/bin/flash_manager.py
deleted file mode 100755
index 43a1899..0000000
--- a/bin/flash_manager.py
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/usr/bin/env python
-
-import sys
-import gobject
-import dbus
-import dbus.service
-import dbus.mainloop.glib
-import tftpy
-
-
-
-DBUS_NAME = 'org.openbmc.managers.Flash'
-OBJ_NAME = '/org/openbmc/managers/Flash'
-TFTP_PORT = 69
-DOWNLOAD_DIR = '/tmp'
-
-class FlashManagerObject(dbus.service.Object):
-	def __init__(self,bus,name):
-		self.dbus_objects = { }
-		self.status = { 'bios' : 'OK', 'bmc' : 'OK' }
-		dbus.service.Object.__init__(self,bus,name)
-		## load utilized objects
-		self.dbus_objects = {
-			'bios' : { 
-				'bus_name' : 'org.openbmc.flash.Bios',
-				'object_name' : '/org/openbmc/flash/Bios_0',
-				'interface_name' : 'org.openbmc.Flash'
-			},
-			'bmc' : {
-				'bus_name' : 'org.openbmc.flash.Bmc',
-				'object_name' : '/org/openbmc/flash/Bmc_0',
-				'interface_name' : 'org.openbmc.Flash'
-			}
-		}
-		bus.add_signal_receiver(self.UpdatedHandler, 
-			dbus_interface = "org.openbmc.Flash", signal_name = "Updated", path_keyword='path')
-
-
-	def UpdatedHandler(self,path = None):
-		print "Flash update finish: "+path
-		for flash in self.dbus_objects:
-			if (path == self.dbus_objects[flash]['object_name']):
-				self.status[flash] = 'OK'		
-
-	def getInterface(self,name):
-		o = self.dbus_objects[name]
-		obj = bus.get_object(o['bus_name'],o['object_name'])
-		return dbus.Interface(obj,o['interface_name'])
-
-	@dbus.service.method(DBUS_NAME,
-		in_signature='', out_signature='a{ss}')
-	def getStatus(self):
-		return self.status
-
-	@dbus.service.method(DBUS_NAME,
-		in_signature='sss', out_signature='')
-	def updateFromTftp(self,flash,url,filename):
-		if (self.dbus_objects.has_key(flash) == False):
-			print "ERROR FlashManager: Not a valid flash device: "+flash	
-			return
-		try:
-			## need to make download async
-			self.status[flash]="DOWNLOADING"
-			filename = str(filename)
-			client = tftpy.TftpClient(url, TFTP_PORT)
-			print "Downloading: "+filename+" from "+url
-			outfile = DOWNLOAD_DIR+"/"+filename
-			client.download(filename,outfile)
-			intf = self.getInterface(flash)
-			self.status[flash]="FLASHING"
-			intf.update(outfile)
-					
-		except Exception as e:
-			print "ERROR FlashManager: "+str(e)
-			self.status="ERROR"
-	
-
-
-if __name__ == '__main__':
-    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
-    bus = Openbmc.getDBus()
-    name = dbus.service.BusName(DBUS_NAME, bus)
-    obj = FlashManagerObject(bus, OBJ_NAME)
-    mainloop = gobject.MainLoop()
-    
-    print "Running Flash Manager"
-    mainloop.run()
-
diff --git a/bin/ipmi_example.py b/bin/ipmi_example.py
index 63d5df4..87b93a6 100755
--- a/bin/ipmi_example.py
+++ b/bin/ipmi_example.py
@@ -89,10 +89,14 @@
 		for i in data:
 			for k in data[i].keys():
 				print k+" = "+str(data[i][k]) 
-	elif (cmd == "updatefw"):
+	elif (cmd == "updatefwftp"):
 		obj = bus.get_object('org.openbmc.flash.Bios','/org/openbmc/flash/Bios_0')
 		intf = dbus.Interface(obj,"org.openbmc.Flash")
 		intf.updateViaTftp(sys.argv[2],sys.argv[3])
+	elif (cmd == "updatefwfile"):
+		obj = bus.get_object('org.openbmc.flash.Bios','/org/openbmc/flash/Bios_0')
+		intf = dbus.Interface(obj,"org.openbmc.Flash")
+		intf.update(sys.argv[2])
 	elif (cmd == "fwstatus"):
 		intf = Openbmc.getManagerInterface(bus,"Flash")
 		status = intf.getStatus()
diff --git a/bin/system_manager.py b/bin/system_manager.py
index 7ea3f02..000a60b 100755
--- a/bin/system_manager.py
+++ b/bin/system_manager.py
@@ -33,7 +33,6 @@
 		bus.add_signal_receiver(self.NewBusHandler,
 					dbus_interface = 'org.freedesktop.DBus', 
 					signal_name = "NameOwnerChanged")
-		bus.add_signal_receiver(self.HeartbeatHandler, signal_name = "Heartbeat")
 		bus.add_signal_receiver(self.SystemStateHandler,signal_name = "GotoSystemState")
 
 		self.current_state = ""
@@ -127,7 +126,6 @@
 			if (System.SYSTEM_CONFIG[bus_name]['start_process'] == True and
 				System.SYSTEM_CONFIG[bus_name].has_key('popen') and
 				System.SYSTEM_CONFIG[bus_name]['monitor_process'] == True):
-				## even if process doesn't request heartbeat check, 
 				##   make sure process is still alive
 				p = System.SYSTEM_CONFIG[bus_name]['popen']
 				p.poll()
@@ -135,27 +133,8 @@
 					print "Process for "+bus_name+" appears to be dead"
 					self.start_process(bus_name)
 	
-				## process is alive, now check if heartbeat received
-				## during previous interval
-				elif (System.SYSTEM_CONFIG[bus_name]['heartbeat'] == 'yes'):
-					if (System.SYSTEM_CONFIG[bus_name]['heartbeat_count'] == 0):
-						print "Heartbeat error: "+bus_name
-						p = System.SYSTEM_CONFIG[bus_name]['popen']
-						## TODO: error checking
-						p.poll()
-						if (p.returncode == None):
-							print "Process must be hung, so killing"
-							p.kill()
-						
-						self.start_process(bus_name)			
-					else:
-						System.SYSTEM_CONFIG[bus_name]['heartbeat_count'] = 0
-					
 		return True
 
-	def HeartbeatHandler(self,bus_name):
-		System.SYSTEM_CONFIG[bus_name]['heartbeat_count']=1	
-
 	def check_state_started(self):
 		r = True
 		if (self.current_state == ""):
@@ -171,10 +150,18 @@
 
 	def NewBusHandler(self, bus_name, a, b):
 		if (len(b) > 0 and bus_name.find(Openbmc.BUS_PREFIX) == 0):
+			start_time = time.time()
 			objects = {}
-			Openbmc.get_objs(bus,bus_name,"",objects)
-			for instance_name in objects.keys():
-				self.bus_name_lookup[objects[instance_name]['PATH']] = bus_name
+			try:
+				Openbmc.get_objs(bus,bus_name,"",objects)
+				for instance_name in objects.keys():
+					self.bus_name_lookup[objects[instance_name]['PATH']] = bus_name
+				end_time = time.time()
+				print "Elapsed time was %g seconds" % (end_time - start_time)
+				print bus_name
+
+			except:
+				pass
 			
 			if (System.SYSTEM_CONFIG.has_key(bus_name)):
 				System.SYSTEM_CONFIG[bus_name]['heartbeat_count'] = 0
