diff --git a/bin/sensor_manager.py b/bin/sensor_manager.py
new file mode 100644
index 0000000..33feebf
--- /dev/null
+++ b/bin/sensor_manager.py
@@ -0,0 +1,85 @@
+#!/usr/bin/env python
+
+import sys
+import gobject
+import dbus
+import dbus.service
+import dbus.mainloop.glib
+
+if (len(sys.argv) < 2):
+	print "Usage:  sensor_manager.py [system name]"
+	exit(1)
+
+import Openbmc
+
+DBUS_NAME = 'org.openbmc.managers.Sensors'
+OBJ_NAME = '/org/openbmc/managers/Sensors/'+sys.argv[1]
+
+class SensorManager(dbus.service.Object):
+	def __init__(self,bus,name):
+		dbus.service.Object.__init__(self,bus,name)
+		bus.add_signal_receiver(self.UpdateSensor,
+					dbus_interface = 'org.openbmc.SensorInteger', 
+					signal_name = 'Changed', path_keyword='path')
+		bus.add_signal_receiver(self.NormalThreshold,
+					dbus_interface = 'org.openbmc.SensorIntegerThreshold', 
+					signal_name = 'Normal', path_keyword='path')
+		bus.add_signal_receiver(self.WarningThreshold,
+					dbus_interface = 'org.openbmc.SensorIntegerThreshold', 
+					signal_name = 'Warning', path_keyword='path')
+		bus.add_signal_receiver(self.CriticalThreshold,
+					dbus_interface = 'org.openbmc.SensorIntegerThreshold', 
+					signal_name = 'Critical', path_keyword='path')
+
+		self.sensor_cache = {}
+		
+	@dbus.service.method(DBUS_NAME,
+		in_signature='s', out_signature='i')
+	def getSensor(self,path):
+		val = None
+		if (self.sensor_cache.has_key(path) == True):
+			val = self.sensor_cache[path]['value']
+		return val
+		
+	def UpdateSensor(self,value, units, path = None):
+		if (self.sensor_cache.has_key(path) == False):
+			self.sensor_cache[path] = {}
+		self.sensor_cache[path]['value'] = value
+		self.sensor_cache[path]['units'] = units
+
+	@dbus.service.signal(DBUS_NAME)
+	def CriticalThreshold(self, path = None):
+		print "Critical: "+path
+		if (self.sensor_cache.has_key(path) == False):
+			self.sensor_cache[path] = {}
+		self.sensor_cache[path]['threshold'] = "CRITICAL"
+
+
+	@dbus.service.signal(DBUS_NAME)
+	def WarningThreshold(self, path = None):
+		print "Warning: "+path
+		if (self.sensor_cache.has_key(path) == False):
+			self.sensor_cache[path] = {}
+		self.sensor_cache[path]['threshold'] = "WARNING"
+
+
+	@dbus.service.signal(DBUS_NAME)
+	def NormalThreshold(self, path = None):
+		print "Normal: "+path
+		if (self.sensor_cache.has_key(path) == False):
+			self.sensor_cache[path] = {}
+		self.sensor_cache[path]['threshold'] = "NORMAL"
+
+
+
+
+if __name__ == '__main__':
+    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+    bus = dbus.SessionBus()
+    name = dbus.service.BusName(DBUS_NAME,bus)
+    obj = SensorManager(bus,OBJ_NAME)
+    mainloop = gobject.MainLoop()
+
+    print "Running Sensor Manager"
+    mainloop.run()
+
