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__':
diff --git a/objects/control_bmc_obj.c b/objects/control_bmc_obj.c
index 9ceaf9b..617e4a7 100644
--- a/objects/control_bmc_obj.c
+++ b/objects/control_bmc_obj.c
@@ -36,7 +36,7 @@
 			PROT_READ | PROT_WRITE, MAP_SHARED, mem_fd, base);
 
 	if (bmcreg == MAP_FAILED) {
-		perror("Unable to map LPC register memory");
+		printf("ERROR: Unable to map LPC register memory");
 		exit(1);
 	}
 	return bmcreg;
@@ -50,7 +50,7 @@
 	void *bmcreg;
 	int mem_fd = open("/dev/mem", O_RDWR | O_SYNC);
 	if (mem_fd < 0) {
-		perror("Unable to open /dev/mem");
+		printf("ERROR: Unable to open /dev/mem");
 		exit(1);
 	}
 
@@ -114,7 +114,6 @@
                  gpointer         user_data)
 {
 	ObjectSkeleton *object;
-	//g_print ("Acquired a message bus connection: %s\n",name);
  	cmdline *cmd = user_data;
 	if (cmd->argc < 2)
 	{
@@ -138,10 +137,6 @@
 		object_skeleton_set_control (object, control);
 		g_object_unref (control);
 
-		EventLog* event_log = event_log_skeleton_new ();
-		object_skeleton_set_event_log (object, event_log);
-		g_object_unref (event_log);
-
 		//define method callbacks here
 		g_signal_connect (control,
         	            "handle-init",
@@ -161,7 +156,6 @@
                   const gchar     *name,
                   gpointer         user_data)
 {
-//  g_print ("Acquired the name %s\n", name);
 }
 
 static void
@@ -169,7 +163,6 @@
               const gchar     *name,
               gpointer         user_data)
 {
-//  g_print ("Lost the name %s\n", name);
 }
 
 
diff --git a/objects/flash_bios_obj.c b/objects/flash_bios_obj.c
index 4c40708..a4c51bd 100644
--- a/objects/flash_bios_obj.c
+++ b/objects/flash_bios_obj.c
@@ -4,7 +4,7 @@
 
 /* ---------------------------------------------------------------------------------------------------- */
 static const gchar* dbus_object_path = "/org/openbmc/flash";
-static const gchar* dbus_name        = "org.openbmc.flash.BIOS";
+static const gchar* dbus_name        = "org.openbmc.flash.Bios";
 
 static GDBusObjectManagerServer *manager = NULL;
 
@@ -21,7 +21,7 @@
 }
 
 static gboolean
-on_update_via_file (Flash          *f,
+on_update (Flash          *f,
                 GDBusMethodInvocation  *invocation,
                 gchar*                  write_file,
                 gpointer                user_data)
@@ -39,7 +39,7 @@
   write_size = stbuf.st_size;
   erase_chip();
   program_file(write_file, address, write_size);
-  flash_complete_update_via_file(f,invocation);
+  flash_complete_update(f,invocation);
   return TRUE;
 }
 
@@ -71,8 +71,8 @@
 
 		//define method callbacks here
 		g_signal_connect (flash,
-                    "handle-update-via-file",
-                    G_CALLBACK (on_update_via_file),
+                    "handle-update",
+                    G_CALLBACK (on_update),
                     NULL); /* user_data */
  
 		g_signal_connect (flash,
diff --git a/objects/power_control_obj.c b/objects/power_control_obj.c
index 481c0d7..7abff35 100644
--- a/objects/power_control_obj.c
+++ b/objects/power_control_obj.c
@@ -29,7 +29,6 @@
 {
 	ControlPower *control_power = object_get_control_power((Object*)user_data);
 	Control* control = object_get_control((Object*)user_data);
-	EventLog* event_log = object_get_event_log((Object*)user_data);
 
 	//send the heartbeat
 	control_emit_heartbeat(control,dbus_name);
@@ -38,7 +37,7 @@
 	guint poll_int = control_get_poll_interval(control);
 	if (poll_int == 0)
 	{
-		event_log_emit_event_log(event_log, LOG_ALERT, "Poll interval cannot be 0",0);
+		printf("ERROR:  Poll interval cannot be 0\n");
 		return FALSE;
 	}
 	//handle timeout
@@ -46,7 +45,7 @@
 	if (difftime(current_time,pgood_timeout_start) > control_power_get_pgood_timeout(control_power)
 		&& pgood_timeout_start != 0)
 	{
-		event_log_emit_event_log(event_log, LOG_ALERT, "Pgood poll timeout",0);
+		printf("ERROR: Pgood poll timeout\n");
 		// set timeout to 0 so timeout doesn't happen again
 		control_power_set_pgood_timeout(control_power,0);
 		pgood_timeout_start = 0;
@@ -75,7 +74,7 @@
  			}
 		}
 	} else {
-		event_log_emit_event_log(event_log, LOG_ALERT, "GPIO read error",rc);
+		printf("ERROR: GPIO read error (rc=%d)\n",rc);
 	}
 	//pgood is not at desired state yet
 	if (gpio != control_power_get_state(control_power) &&
@@ -101,7 +100,6 @@
                 gpointer                user_data)
 {
 	Control* control = object_get_control((Object*)user_data);
-	EventLog* event_log = object_get_event_log((Object*)user_data);
 	const gchar* obj_path = g_dbus_object_get_object_path((GDBusObject*)user_data);
 	if (state > 1)
 	{
@@ -134,7 +132,7 @@
 		} while(0);
 		if (error != GPIO_OK)
 		{
-			event_log_emit_event_log(event_log, LOG_ALERT, "GPIO set power state error",error);
+			printf("ERROR: GPIO set power state (rc=%d)\n",error);
 		}
 	}
 	return TRUE;
@@ -190,10 +188,6 @@
 	object_skeleton_set_control (object, control);
 	g_object_unref (control);
 
-	EventLog* event_log = event_log_skeleton_new ();
-	object_skeleton_set_event_log (object, event_log);
-	g_object_unref (event_log);
-
 	//define method callbacks here
 	g_signal_connect (control_power,
        	            "handle-set-power-state",
@@ -235,7 +229,7 @@
 	} while(0);
 	if (rc != GPIO_OK)
 	{
-		event_log_emit_event_log(event_log, LOG_ALERT, "GPIO setup error",rc);
+		printf("ERROR: GPIO setup (rc=%d)\n",rc);
 	} 
 }
 
@@ -244,7 +238,6 @@
                   const gchar     *name,
                   gpointer         user_data)
 {
-  //g_print ("Acquired the name %s\n", name);
 }
 
 static void
@@ -252,7 +245,6 @@
               const gchar     *name,
               gpointer         user_data)
 {
-  //g_print ("Lost the name %s\n", name);
 }
 
 
diff --git a/xml/openbmc_intf.xml b/xml/openbmc_intf.xml
index 92e8006..d4c72d0 100644
--- a/xml/openbmc_intf.xml
+++ b/xml/openbmc_intf.xml
@@ -132,13 +132,9 @@
 		</signal>
 	</interface>	
 	<interface name="org.openbmc.Flash">
-		<method name="updateViaFile">
-			<arg name="file" type="s" direction="in"/>
+		<method name="update">
+			<arg name="filename" type="s" direction="in"/>
 		</method>
-		<method name="updateViaHttp">
-			<arg name="url" type="s" direction="in"/>
-		</method>
-		<method name="erase"/>
 		<method name="init"/>
 		<signal name="Updated"/>
 	</interface>
