diff --git a/bin/Barreleye.py b/bin/Barreleye.py
index 6fb8fb3..3c18cc5 100644
--- a/bin/Barreleye.py
+++ b/bin/Barreleye.py
@@ -158,7 +158,7 @@
 		'heartbeat' : 'no',
 		'instances' : [	{ 'name' : 'ChassisIdentify_0' } ]
 	}
-SYSTEM_CONFIG['org.openbmc.flash.BIOS'] = {
+SYSTEM_CONFIG['org.openbmc.flash.Bios'] = {
 		'system_state' : 'STANDBY',
 		'start_process' : False,
 		'monitor_process' : True,
@@ -166,6 +166,16 @@
 		'heartbeat' : 'no',
 		'instances' : [	{ 'name' : 'BIOS_0' } ]
 	}
+
+SYSTEM_CONFIG['org.openbmc.manager.Flash'] = {
+		'system_state' : 'STANDBY',
+		'start_process' : True,
+		'monitor_process' : True,
+		'process_name' : 'flash_manager.py',
+		'heartbeat' : 'no',
+		'instances' : [	{ 'name' : 'FlashManager_0' } ]
+	}
+
 SYSTEM_CONFIG['org.openbmc.control.Host'] = {
 		'system_state' : 'STANDBY',
 		'start_process' : True,
diff --git a/bin/Openbmc.py b/bin/Openbmc.py
index af7e79b..bb3a879 100644
--- a/bin/Openbmc.py
+++ b/bin/Openbmc.py
@@ -57,20 +57,17 @@
 
 
 def get_objs(bus,bus_name,path,objects):
-	#print ">>>>>>>>>>>>>>>>>>>>>>>>>>>> "+bus_name+"; "+path
 	tmp_path = path
 	if (path == ""):
 		tmp_path="/"
 	obj = bus.get_object(bus_name,tmp_path)
 	introspect_iface = dbus.Interface(obj,"org.freedesktop.DBus.Introspectable")
-	#print introspect_iface.Introspect()
  	tree = ET.ElementTree(ET.fromstring(introspect_iface.Introspect()))
  	root = tree.getroot()
 	parent = True
 	for node in root.iter('node'):
 		for intf in node.iter('interface'):
 			intf_name = intf.attrib['name']
-			#if (intf_name.find(BUS_PREFIX)==0):
 			parts=path.split('/')
 			instance = parts[len(parts)-1]
 			if (objects.has_key(instance) == False):
diff --git a/bin/eventlogger.py b/bin/eventlogger.py
deleted file mode 100644
index e36f928..0000000
--- a/bin/eventlogger.py
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/env python
-
-import sys
-import datetime
-import time
-import syslog
-import json
-import gobject
-import dbus
-import dbus.service
-import dbus.mainloop.glib
-import Openbmc
-
-DBUS_NAME = 'org.openbmc.loggers.EventLogger'
-OBJ_NAME = '/org/openbmc/loggers/EventLogger/'+sys.argv[1]
-
-
-class EventLogger(dbus.service.Object):
-	def __init__(self,bus,name):
-		dbus.service.Object.__init__(self,bus,name)
-		bus = dbus.SessionBus()
-		bus.add_signal_receiver(self.event_log_signal_handler, 
-					dbus_interface = "org.openbmc.EventLog", 
-					signal_name = "EventLog",
-					path_keyword='path')
-
-	## Signal handler
-	def event_log_signal_handler(self,priority,msg,rc,path = None):
-		message = {}
-		ts = time.time()
-
-		message['priority'] = priority
-		message['object_path'] = path
-		message['message'] = msg
-		message['rc'] = rc
-
-		json_dump = json.dumps(message)
-		print "EVENT_LOG: "+json_dump
-		syslog.openlog('OpenBmc',logoption=syslog.LOG_PID)
-		syslog.syslog(priority,json_dump)
-		syslog.closelog()
-		
-
-
-
-if __name__ == '__main__':
-    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
-
-    bus = dbus.SessionBus()
-    name = dbus.service.BusName(DBUS_NAME, bus)
-    obj = EventLogger(bus, OBJ_NAME)
-    mainloop = gobject.MainLoop()
-    
-    print "Running EventLogger"
-    mainloop.run()
-
diff --git a/bin/inventory_items.py b/bin/inventory_items.py
index f679fee..999b28b 100644
--- a/bin/inventory_items.py
+++ b/bin/inventory_items.py
@@ -52,19 +52,11 @@
 			'state'  : 0,
 			'data' : { 'manufacturer' : "" }
 		}
-		#self.name = name
-		#self.is_fru = False
-		#self.fru_type = 0
 		self.cache = True
-		#self.state = 0
 
 	def getItemDict(self):
 		return self.item
 
-	@dbus.service.signal('org.openbmc.EventLog')
-	def EventLog(self, priority, message, rc):
-        	pass
-		
 	@dbus.service.method('org.openbmc.InventoryItem',
 		in_signature='a{sv}', out_signature='')
 	def update(self,data):
@@ -78,9 +70,11 @@
 		in_signature='y', out_signature='')
 	def setValue(self,data):
 		self.item['state'] = data
-		#self.saveToCache()
 		print "Update Fru State: "+str(self.item['state'])
 
+	def setField(self,field,value):
+		self.item['data'][field] = value
+
 	def isCached(self):
 		return self.cache
 
@@ -94,11 +88,14 @@
 		if (self.isCached() == False):
 			return
 		print "Caching: "+self.item['name']
-		# TODO: error handling
-		output = open(self.getCacheFilename(), 'wb')
-		## just pickle dict not whole object
-		cPickle.dump(self.item['data'],output)
-		output.close()
+		try: 
+			output = open(self.getCacheFilename(), 'wb')
+			## just pickle dict not whole object
+			cPickle.dump(self.item['data'],output)
+		except Exception as e:
+			print "ERROR: "+str(e)
+		finally:
+			output.close()
 
 	def loadFromCache(self):
 		if (self.isCached() == False):
@@ -107,12 +104,15 @@
 		filename=self.getCacheFilename()
 		if (os.path.isfile(filename)):
 			print "Loading from cache: "+filename
-			# TODO: error handling
-			p = open(filename, 'rb')
-			data2 = cPickle.load(p)
-			for k in data2.keys():
-				self.item['data'][k] = data2[k]
-
+			try:	
+				p = open(filename, 'rb')
+				data2 = cPickle.load(p)
+				for k in data2.keys():
+					self.item['data'][k] = data2[k]
+			except Exception as e:
+				print "ERROR: " +str(e)
+			finally:
+				p.close()
 
 
 if __name__ == '__main__':
@@ -125,8 +125,8 @@
     for f in FRUS.keys():
 	obj_path=f.replace("<inventory_root>",System.INVENTORY_ROOT)
     	obj = InventoryItem(bus,obj_path)
-	obj.is_fru = FRUS[f]['is_fru']
-	obj.fru_type = FRUS[f]['fru_type']
+	obj.setField('is_fru',FRUS[f]['is_fru'])
+	obj.setField('fru_type',FRUS[f]['fru_type'])
 	obj.loadFromCache();
 	obj_parent.addItem(obj)
 	
diff --git a/bin/sensor_manager.py b/bin/sensor_manager.py
index 886438a..5b48437 100644
--- a/bin/sensor_manager.py
+++ b/bin/sensor_manager.py
@@ -36,9 +36,6 @@
 					signal_name = 'Critical', path_keyword='path')
 
 		self.sensor_cache = {}
-	@dbus.service.signal('org.openbmc.EventLog')
-	def EventLog(self, priority, message, rc):
-        	pass
 
 	@dbus.service.method(DBUS_NAME,
 		in_signature='', out_signature='a{sa{sv}}')
@@ -53,7 +50,7 @@
 		if (self.sensor_cache.has_key(path) == True):
 			val = self.sensor_cache[path]['value']
 		else:
-			self.EventLog(1,"Unknown sensor: "+path,1)
+			print "ERROR: Unknown sensor: "+path
 		return val
 	
 	## Signal handlers
diff --git a/bin/system_manager.py b/bin/system_manager.py
index a5b8023..88fec9f 100644
--- a/bin/system_manager.py
+++ b/bin/system_manager.py
@@ -35,10 +35,6 @@
 					signal_name = "NameOwnerChanged")
 		bus.add_signal_receiver(self.HeartbeatHandler, signal_name = "Heartbeat")
 		bus.add_signal_receiver(self.SystemStateHandler,signal_name = "GotoSystemState")
-		bus.add_signal_receiver(self.event_log_signal_handler, 
-					dbus_interface = "org.openbmc.EventLog", 
-					signal_name = "EventLog",
-					path_keyword='path')
 
 		self.current_state = ""
 		self.system_states = {}
@@ -60,10 +56,6 @@
 		self.SystemStateHandler("INIT")
 		print "SystemManager Init Done"
 
-	@dbus.service.signal('org.openbmc.EventLog')
-	def EventLog(self, priority, message, rc):
-        	pass
-
 	def SystemStateHandler(self,state_name):
 		print "Checking previous state started..."
 		i = 0
@@ -74,7 +66,7 @@
 			time.sleep(1)	
 
 		if (i == 10):
-			self.EventLog(1,"Timeout waiting for state to finish: "+self.current_state,1)	
+			print "ERROR: Timeout waiting for state to finish: "+self.current_state
 			return					
 
 		print "Running System State: "+state_name
@@ -88,7 +80,7 @@
 		
 		if (System.ENTER_STATE_CALLBACK.has_key(state_name)):
 			cb = System.ENTER_STATE_CALLBACK[state_name]
-			obj = bus.get_<F11>object(cb['bus_name'],cb['obj_name'])
+			obj = bus.get_object(cb['bus_name'],cb['obj_name'])
 			method = obj.get_dbus_method(cb['method_name'],cb['interface_name'])
 			method()
 
@@ -127,10 +119,9 @@
 				System.SYSTEM_CONFIG[bus_name]['popen'] = subprocess.Popen(cmdline)
 			except Exception as e:
 				## TODO: error
-				print "Error starting process: "+" ".join(cmdline)
+				print "ERROR: starting process: "+" ".join(cmdline)
 
 	def heartbeat_check(self):
-		#print "heartbeat check"
 		for bus_name in System.SYSTEM_CONFIG.keys():
 			if (System.SYSTEM_CONFIG[bus_name]['start_process'] == True and
 				System.SYSTEM_CONFIG[bus_name].has_key('popen') and
@@ -158,12 +149,10 @@
 						self.start_process(bus_name)			
 					else:
 						System.SYSTEM_CONFIG[bus_name]['heartbeat_count'] = 0
-						#print "Heartbeat ok: "+bus_name
 					
 		return True
 
 	def HeartbeatHandler(self,bus_name):
-		#print "Heartbeat seen: "+bus_name
 		System.SYSTEM_CONFIG[bus_name]['heartbeat_count']=1	
 
 	def check_state_started(self):
@@ -173,7 +162,6 @@
 		for bus_name in self.system_states[self.current_state]:
 			if (System.SYSTEM_CONFIG[bus_name].has_key('popen') == False and
 				System.SYSTEM_CONFIG[bus_name]['start_process'] == True):
-				print "Not found: "+bus_name
 				r = False
 				break;	
 		return r
@@ -217,21 +205,6 @@
 
 		return [Openbmc.GPIO_DEV, gpio_num, System.GPIO_CONFIG[name]['direction']]
 
-	## Signal handler
-	def event_log_signal_handler(self,priority,msg,rc,path = None):
-		message = {}
-		ts = time.time()
-
-		message['priority'] = priority
-		message['object_path'] = path
-		message['message'] = msg
-		message['rc'] = rc
-
-		json_dump = json.dumps(message)
-		print "EVENT_LOG: "+json_dump
-		#syslog.openlog('OpenBmc',logoption=syslog.LOG_PID)
-		#syslog.syslog(priority,json_dump)
-		#syslog.closelog()
 		
 
 if __name__ == '__main__':
