diff --git a/phosphor-power-sequencer/src/power_control.cpp b/phosphor-power-sequencer/src/power_control.cpp
index d5810b1..0ce46b8 100644
--- a/phosphor-power-sequencer/src/power_control.cpp
+++ b/phosphor-power-sequencer/src/power_control.cpp
@@ -18,6 +18,8 @@
 
 #include "types.hpp"
 
+#include <fmt/format.h>
+
 #include <phosphor-logging/log.hpp>
 #include <sdbusplus/bus.hpp>
 #include <sdeventplus/event.hpp>
@@ -33,16 +35,54 @@
 
 PowerControl::PowerControl(sdbusplus::bus::bus& bus,
                            const sdeventplus::Event& event) :
-    bus{bus},
-    eventLoop{event}, timer{event, std::bind(&PowerControl::pollPgood, this),
-                            std::chrono::milliseconds(pollInterval)}
+    PowerObject{bus, POWER_OBJ_PATH, true},
+    bus{bus}, timer{event, std::bind(&PowerControl::pollPgood, this),
+                    pollInterval}
 {
     // Obtain dbus service name
     bus.request_name(POWER_IFACE);
 }
 
+int PowerControl::getPgood() const
+{
+    return pgood;
+}
+
+int PowerControl::getPgoodTimeout() const
+{
+    return timeout.count();
+}
+
+int PowerControl::getState() const
+{
+    return state;
+}
+
 void PowerControl::pollPgood()
 {
 }
 
+void PowerControl::setPgoodTimeout(int t)
+{
+    if (timeout.count() != t)
+    {
+        timeout = std::chrono::seconds(t);
+        emitPropertyChangedSignal("pgood_timeout");
+    }
+}
+
+void PowerControl::setState(int s)
+{
+    if (state == s)
+    {
+        log<level::INFO>(
+            fmt::format("Power already at requested state: {}", state).c_str());
+        return;
+    }
+
+    log<level::INFO>(fmt::format("setState: {}", s).c_str());
+    state = s;
+    emitPropertyChangedSignal("state");
+}
+
 } // namespace phosphor::power::sequencer
diff --git a/phosphor-power-sequencer/src/power_control.hpp b/phosphor-power-sequencer/src/power_control.hpp
index c7c7951..248431a 100644
--- a/phosphor-power-sequencer/src/power_control.hpp
+++ b/phosphor-power-sequencer/src/power_control.hpp
@@ -1,5 +1,7 @@
 #pragma once
 
+#include "power_interface.hpp"
+
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/message.hpp>
 #include <sdbusplus/server/object.hpp>
@@ -11,12 +13,14 @@
 namespace phosphor::power::sequencer
 {
 
+using PowerObject = sdbusplus::server::object::object<PowerInterface>;
+
 /**
  * @class PowerControl
  * This class implements GPIO control of power on / off, and monitoring of the
  * chassis power good.
  */
-class PowerControl
+class PowerControl : public PowerObject
 {
   public:
     PowerControl() = delete;
@@ -33,6 +37,21 @@
      */
     PowerControl(sdbusplus::bus::bus& bus, const sdeventplus::Event& event);
 
+    /** @copydoc PowerInterface::getPgood() */
+    int getPgood() const override;
+
+    /** @copydoc PowerInterface::getPgoodTimeout() */
+    int getPgoodTimeout() const override;
+
+    /** @copydoc PowerInterface::getState() */
+    int getState() const override;
+
+    /** @copydoc PowerInterface::setPgoodTimeout() */
+    void setPgoodTimeout(int timeout) override;
+
+    /** @copydoc PowerInterface::setState() */
+    void setState(int state) override;
+
   private:
     /**
      * The D-Bus bus object
@@ -40,9 +59,31 @@
     sdbusplus::bus::bus& bus;
 
     /**
-     * Event to loop on
+     * Power good
      */
-    sdeventplus::Event eventLoop;
+    int pgood{0};
+
+    /**
+     * Power good timeout constant
+     */
+    static constexpr std::chrono::seconds pgoodTimeout{
+        std::chrono::seconds(10)};
+
+    /**
+     * Poll interval constant
+     */
+    static constexpr std::chrono::milliseconds pollInterval{
+        std::chrono::milliseconds(3000)};
+
+    /**
+     * Power state
+     */
+    int state{0};
+
+    /**
+     * Power good timeout
+     */
+    std::chrono::seconds timeout{pgoodTimeout};
 
     /**
      * Timer to poll the pgood
@@ -50,11 +91,6 @@
     sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic> timer;
 
     /**
-     * Poll interval constant
-     */
-    static constexpr int pollInterval{3000}; // Milliseconds
-
-    /**
      * Polling method for monitoring the system power good
      */
     void pollPgood();
diff --git a/phosphor-power-sequencer/src/power_interface.hpp b/phosphor-power-sequencer/src/power_interface.hpp
index 76608ff..d189120 100644
--- a/phosphor-power-sequencer/src/power_interface.hpp
+++ b/phosphor-power-sequencer/src/power_interface.hpp
@@ -49,31 +49,31 @@
     void emitPropertyChangedSignal(const char* property);
 
     /**
-     * Implementation for the getPgood method
+     * Returns the power good of the chassis
      * @return power good
      */
-    virtual int getPgood() = 0;
+    virtual int getPgood() const = 0;
 
     /**
-     * Implementation for the getPgoodTimeout method
+     * Returns the power good timeout
      * @return power good timeout
      */
-    virtual int getPgoodTimeout() = 0;
+    virtual int getPgoodTimeout() const = 0;
 
     /**
-     * Implementation for the getState method
+     * Returns the value of the last requested power state
      * @return power state. A power on request is value 1. Power off is 0.
      */
-    virtual int getState() = 0;
+    virtual int getState() const = 0;
 
     /**
-     * Implementation for the setPgoodTimeout method
+     * Sets the power good timeout
      * @param[in] timeout power good timeout
      */
     virtual void setPgoodTimeout(int timeout) = 0;
 
     /**
-     * Implementation for the setState method
+     * Initiates a chassis power state change
      * @param[in] state power state. Request power on with a value of 1. Request
      * power off with a value of 0. Other values will be rejected.
      */
