diff --git a/bin/Openbmc.py b/bin/Openbmc.py
index 485525c..f086898 100755
--- a/bin/Openbmc.py
+++ b/bin/Openbmc.py
@@ -74,10 +74,12 @@
 	tmp_path = path
 	if (path == ""):
 		tmp_path="/"
+
 	obj = bus.get_object(bus_name,tmp_path)
 	introspect_iface = dbus.Interface(obj,"org.freedesktop.DBus.Introspectable")
  	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'):
diff --git a/bin/sensors_virtual_p8.py b/bin/sensors_virtual_p8.py
new file mode 100755
index 0000000..d8bf1ef
--- /dev/null
+++ b/bin/sensors_virtual_p8.py
@@ -0,0 +1,170 @@
+#!/usr/bin/env python
+
+import sys
+#from gi.repository import GObject
+import gobject
+import dbus
+import dbus.service
+import dbus.mainloop.glib
+import Openbmc
+
+SENSOR_INTERFACE = 'org.openbmc.SensorValue'
+DBUS_NAME = 'org.openbmc.sensor.Power8Virtual'
+OBJ_NAME = '/org/openbmc/sensor/virtual/'
+
+class BootProgress(dbus.service.Object):
+	def __init__(self,bus,name):
+		self.object_name = "BootProgress"
+		self.value = 0
+		self.units = ""
+		dbus.service.Object.__init__(self,bus,name+self.object_name)
+
+	@dbus.service.method(SENSOR_INTERFACE,
+		in_signature='v', out_signature='')
+	def setValue(self,value):
+		if (value != self.value):
+			self.value=value
+			self.Changed()
+
+	@dbus.service.method(SENSOR_INTERFACE,
+		in_signature='', out_signature='v')
+	def getValue(self):
+		return self.value;
+
+	@dbus.service.method(SENSOR_INTERFACE,
+		in_signature='', out_signature='s')
+	def getUnits(self):
+		return self.units;
+
+	@dbus.service.signal(SENSOR_INTERFACE,signature='vs')
+	def Changed(self,value,units):
+		pass
+		
+class HostStatus(dbus.service.Object):
+	def __init__(self,bus,name):
+		self.object_name = "HostStatus"
+		self.value = 0
+		self.units = ""
+		dbus.service.Object.__init__(self,bus,name+self.object_name)
+
+	@dbus.service.method(SENSOR_INTERFACE,
+		in_signature='v', out_signature='')
+	def setValue(self,value):
+		if (value != self.value):
+			self.value=value
+			self.Changed(self.value,self.units)
+
+	@dbus.service.method(SENSOR_INTERFACE,
+		in_signature='', out_signature='v')
+	def getValue(self):
+		return self.value;
+
+	@dbus.service.method(SENSOR_INTERFACE,
+		in_signature='', out_signature='s')
+	def getUnits(self):
+		return self.units;
+		
+	@dbus.service.signal(SENSOR_INTERFACE,signature='vs')
+	def Changed(self,value,units):
+		pass
+
+class OsStatus(dbus.service.Object):
+	def __init__(self,bus,name):
+		self.object_name = "OperatingSystemStatus"
+		self.value = 0
+		self.units = ""
+		dbus.service.Object.__init__(self,bus,name+self.object_name)
+
+	@dbus.service.method(SENSOR_INTERFACE,
+		in_signature='v', out_signature='')
+	def setValue(self,value):
+		if (value != self.value):
+			self.value=value
+			self.Changed(self.value,self.units)
+
+	@dbus.service.method(SENSOR_INTERFACE,
+		in_signature='', out_signature='v')
+	def getValue(self):
+		return self.value;
+
+	@dbus.service.method(SENSOR_INTERFACE,
+		in_signature='', out_signature='s')
+	def getUnits(self):
+		return self.units;
+		
+	@dbus.service.signal(SENSOR_INTERFACE,signature='vs')
+	def Changed(self,value,units):
+		pass
+		
+class BootCount(dbus.service.Object):
+	def __init__(self,bus,name):
+		self.object_name = "BootCount"
+		self.value = 0
+		self.units = ""
+		dbus.service.Object.__init__(self,bus,name+self.object_name)
+
+	@dbus.service.method(SENSOR_INTERFACE,
+		in_signature='v', out_signature='')
+	def setValue(self,value):
+		if (value != self.value):
+			self.value=value
+			self.Changed(self.value,self.units)
+
+	@dbus.service.method(SENSOR_INTERFACE,
+		in_signature='', out_signature='v')
+	def getValue(self):
+		return self.value;
+
+	@dbus.service.method(SENSOR_INTERFACE,
+		in_signature='', out_signature='s')
+	def getUnits(self):
+		return self.units;
+		
+	@dbus.service.signal(SENSOR_INTERFACE,signature='vs')
+	def Changed(self,value,units):
+		pass
+
+
+class OccStatus(dbus.service.Object):
+	def __init__(self,bus,name):
+		self.object_name = "OccStatus"
+		self.value = 0
+		self.units = ""
+		dbus.service.Object.__init__(self,bus,name+self.object_name)
+
+	@dbus.service.method(SENSOR_INTERFACE,
+		in_signature='v', out_signature='')
+	def setValue(self,value):
+		if (value != self.value):
+			self.value=value
+			self.Changed(self.value,self.units)
+
+	@dbus.service.method(SENSOR_INTERFACE,
+		in_signature='', out_signature='v')
+	def getValue(self):
+		return self.value;
+
+	@dbus.service.method(SENSOR_INTERFACE,
+		in_signature='', out_signature='s')
+	def getUnits(self):
+		return self.units;
+		
+	@dbus.service.signal(SENSOR_INTERFACE,signature='vs')
+	def Changed(self,value,units):
+		pass
+
+				
+if __name__ == '__main__':
+    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+    bus = Openbmc.getDBus()
+    name = dbus.service.BusName(DBUS_NAME,bus)
+    boot_progress = BootProgress(bus,OBJ_NAME)
+    host_status = HostStatus(bus,OBJ_NAME)
+    os_status = OsStatus(bus,OBJ_NAME)
+    boot_count = BootCount(bus,OBJ_NAME)
+    occ_status = OccStatus(bus,OBJ_NAME)
+    mainloop = gobject.MainLoop()
+
+    print "Starting virtual sensors"
+    mainloop.run()
+
