diff --git a/bin/rest_server.py b/bin/rest_server.py
deleted file mode 100644
index 5a36e9e..0000000
--- a/bin/rest_server.py
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/usr/bin/env python 
-
-from BaseHTTPServer import BaseHTTPRequestHandler
-import urlparse
-import dbus
-import json
-import re
-import xml.etree.ElementTree as ET
-
-def parseIntrospection(obj,interface,method=None):
-	introspect_iface = dbus.Interface(obj,"org.freedesktop.DBus.Introspectable")
-	tree = ET.ElementTree(ET.fromstring(introspect_iface.Introspect()))
-	root = tree.getroot()
-	r = []
-	for intf in root.iter('interface'):
-		if (intf.attrib['name'] == interface):
-			for methd in intf.iter('method'):
-				if (method == None):
-					r.append(methd.attrib['name'])
-				elif (method == methd.attrib['name']):
-					for arg in methd.iter('arg'):
-						a = [arg.attrib['name'],arg.attrib['type'],arg.attrib['direction']]
-						r.append(a)
-	return r
-
-def getArgFromSignature(args,signature):
-	if (signature == 'i'):
-		return int(args[0])
-	elif (signature == 's'):
-		return args[0];
-
-	raise Exception("Inavlid signature: "+signature)	
-		
-
-class GetHandler(BaseHTTPRequestHandler):
-	def do_GET(self):
-		url_data = urlparse.urlparse(self.path)
-		parms = urlparse.parse_qs(url_data.query)
-		self.objmap = {
-			'chassis' : ['org.openbmc.ChassisControl','/org/openbmc/ChassisControl','org.openbmc.ChassisControl'],
-			'flash' : ['org.openbmc.Flash.BIOS','/org/openbmc/Flash/BIOS/0','org.openbmc.Flash'],
-			'power' : ['org.openbmc.PowerControl','/org/openbmc/PowerControl/0','org.openbmc.PowerControl']
-		}
-		self.sensors = {
-			'/org/openbmc/Sensors/HostStatus/0' : ['org.openbmc.Sensors.HostStatus','org.openbmc.SensorIntegerSettable',0,""], 
-			'/org/openbmc/Sensors/Temperature/Ambient/0': ['org.openbmc.Sensors.Temperature.Ambient','org.openbmc.SensorInteger',0,""]
-		}
-
-
-		parts = url_data.path.split('/');
-		item = parts[1]
-		
-		method = ''
-		if (len(parts) > 2):
-			method = parts[2]
-
-		code = 403
-		payload = {'status': 'error'}
-		bus = dbus.SessionBus()
-
-		if (item == 'sensors'):
-			try:
-				for s in self.sensors.keys():
-					obj = bus.get_object(self.sensors[s][0],s)
-					iface = dbus.Interface(obj,self.sensors[s][1])
-					self.sensors[s][2] = iface.getValue()
-					self.sensors[s][3] = iface.getUnits()
-				
-				payload['status'] = 'ok'	
-				payload['sensors'] = self.sensors
-				code = 200
-			except dbus.exceptions.DBusException as e:
-				payload['error-message'] = e.get_dbus_name()
-
-		elif (self.objmap.has_key(item)):
-			bus_name = self.objmap[item][0]
-			obj_name = self.objmap[item][1] 
-			interface = self.objmap[item][2]
-			try:
-				obj = bus.get_object(bus_name,obj_name)
-					
-				if (method == ''):
-					payload['available-methods'] = parseIntrospection(obj,interface)
-				else:
-					args = parseIntrospection(obj,interface,method)
-					arg_array = []
-					signature_in = ''
-					signature_out = ''
-					for a in args:
-						if (a[2] == 'in'):
-							if (parms.has_key(a[0]) == False):
-								raise Exception("Method '"+method+"' requires argument '"+a[0]+"'")
-							arg_array.append(getArgFromSignature(parms[a[0]],a[1]))
-							signature_in = signature_in + a[1]
-						else:
-							signature_out = a[1]
-
-					rtn = bus.call_blocking(bus_name,obj_name,interface,method,signature_in,arg_array)
-
-				code = 200
-				payload['status'] = 'ok'
-
-			except dbus.exceptions.DBusException as e:
-				payload['error-message'] = str(e)
-			except Exception as ex:
-				payload['error-message'] = str(ex)
-				
-		else:
-			payload['status'] = 'ok'
-			payload['available-commands'] = self.objmap.keys()
-				
-		self.send_response(code)
-		self.send_header('Content-Type', 'application/json')
-		self.end_headers()
-		self.wfile.write(json.dumps(payload))
-		return
-
-if __name__ == '__main__':
-	from BaseHTTPServer import HTTPServer
-	server = HTTPServer(('', 3000), GetHandler)
-	print 'Starting server, use <Ctrl-C> to stop'
-	server.serve_forever()
-
diff --git a/objects/power_control_obj.c b/objects/power_control_obj.c
index e2560c4..03eab40 100644
--- a/objects/power_control_obj.c
+++ b/objects/power_control_obj.c
@@ -5,11 +5,6 @@
 static GDBusObjectManagerServer *manager = NULL;
 static PowerControl *power_control = NULL;
 
-static guint gpio_power = 26;
-static guint gpio_fsiclk = 27;
-static guint gpio_fsidat = 28;
-static guint gpio_pgood = 21;
-
 static guint tmp_pgood = 0;
 
 static gboolean
diff --git a/xml/fan.xml b/xml/fan.xml
index f4aeeb2..17ac117 100644
--- a/xml/fan.xml
+++ b/xml/fan.xml
@@ -16,6 +16,8 @@
 		<method name="setPwmConfig">
 			<arg name="pwm_num" type="i" direction="in"/>
 		</method>
+		<property name="speed" type="i" access="read"/>
+		<property name="cooling_zone" type="i" access="read"/>
 		<signal name="SpeedChanged">
 			<arg name="speed" type="i"/>
 		</signal>
diff --git a/xml/fru.xml b/xml/fru.xml
index 17b59a1..13f34f2 100644
--- a/xml/fru.xml
+++ b/xml/fru.xml
@@ -13,7 +13,16 @@
 		<method name="addEventLog">
 			<arg name="entry" type="s" direction="in"/>
 		</method>
-		<signal name="Changed"/>
+		<method name="getType">
+			<arg name="type" type="s" direction="out"/>
+		</method>
+		<method name="getLocation">
+			<arg name="location" type="s" direction="out"/>
+		</method>
+		<signal name="StateChanged"/>
+		<signal name="UnrecoverableError"/>
+		<signal name="RecoverableError"/>
+		
 	</interface>
 </node>
 
diff --git a/xml/host_control.xml b/xml/host_control.xml
index 30fa990..d9d5b23 100644
--- a/xml/host_control.xml
+++ b/xml/host_control.xml
@@ -2,6 +2,7 @@
 	<interface name="org.openbmc.HostControl">
 		<method name="boot"/>
 		<method name="shutdown"/>
-		<signal name="booted"/>
+		<method name="reboot"/>
+		<signal name="Booted"/>
 	</interface>	
 </node>
diff --git a/xml/power_control.xml b/xml/power_control.xml
index 480d83b..a382f11 100644
--- a/xml/power_control.xml
+++ b/xml/power_control.xml
@@ -1,18 +1,14 @@
 <node>
 	<interface name="org.openbmc.PowerControl">
 		<method name="setPowerState">
-			<arg name="trans_id" type="i" direction="in"/>
 			<arg name="state" type="i" direction="in"/>
 		</method>
 		<method name="getPowerState">
-			<arg name="trans_id" type="i" direction="in"/>
 			<arg name="state" type="i" direction="out"/>
 		</method>
 		<signal name="PowerGood">
-			<arg name="trans_id" type="i"/>
 		</signal>
 		<signal name="PowerLost"/>
-			<arg name="trans_id" type="i"/>
 		</signal>
 		<property name="pgood" type="i" access="read"/>
 		<property name="state" type="i" access="read"/>
diff --git a/xml/sensor.xml b/xml/sensor.xml
index 38ea7cc..c4b8c00 100644
--- a/xml/sensor.xml
+++ b/xml/sensor.xml
@@ -1,4 +1,5 @@
 <node>
+	<!--  Can I do have interfaces as children of other interfaces? -->
 	<interface name="org.openbmc.SensorInteger">
 		<method name="getValue">
 			<arg name="value" type="i" direction="out"/>
diff --git a/xml/tmp b/xml/tmp
deleted file mode 100644
index e69de29..0000000
--- a/xml/tmp
+++ /dev/null
