diff --git a/power-supply/power_supply.hpp b/power-supply/power_supply.hpp
index 496218f..317c20b 100644
--- a/power-supply/power_supply.hpp
+++ b/power-supply/power_supply.hpp
@@ -2,6 +2,7 @@
 #include <sdbusplus/bus/match.hpp>
 #include "device.hpp"
 #include "pmbus.hpp"
+#include "timer.hpp"
 
 namespace witherspoon
 {
@@ -34,11 +35,15 @@
          * @param[in] objpath - the path to monitor
          * @param[in] invpath - the inventory path to use
          * @param[in] bus - D-Bus bus object
+         * @param[in] e - event object
+         * @param[in] t - time to allow power supply to assert PG#
          */
         PowerSupply(const std::string& name, size_t inst,
                     const std::string& objpath,
                     const std::string& invpath,
-                    sdbusplus::bus::bus& bus);
+                    sdbusplus::bus::bus& bus,
+                    event::Event& e,
+                    std::chrono::seconds& t);
 
         /**
          * Power supply specific function to analyze for faults/errors.
@@ -66,14 +71,6 @@
         std::string monitorPath;
 
         /**
-         * The D-Bus path to use for this power supply's inventory status.
-         */
-        std::string inventoryPath;
-
-        /** @brief Connection for sdbusplus bus */
-        sdbusplus::bus::bus& bus;
-
-        /**
          * @brief Pointer to the PMBus interface
          *
          * Used to read out of or write to the /sysfs tree(s) containing files
@@ -83,13 +80,45 @@
         witherspoon::pmbus::PMBus pmbusIntf;
 
         /**
-         * @brief True if the power supply is present.
+         * @brief D-Bus path to use for this power supply's inventory status.
          */
+        std::string inventoryPath;
+
+        /** @brief Connection for sdbusplus bus */
+        sdbusplus::bus::bus& bus;
+
+        /** @brief True if the power supply is present. */
         bool present = false;
 
-        /** @brief Used to subscribe to dbus pcap propety changes **/
+        /** @brief Used to subscribe to D-Bus property changes to Present **/
         std::unique_ptr<sdbusplus::bus::match_t> presentMatch;
 
+        /** @brief True if the power is on. */
+        bool powerOn = false;
+
+        /** @brief The sd_event structure used by the power on timer. */
+        event::Event& event;
+
+        /**
+         * @brief Interval to setting powerOn to true.
+         *
+         * The amount of time to wait from power state on to setting the
+         * internal powerOn state to true. The amount of time the power supply
+         * is allowed to delay setting DGood/PG#.
+         */
+        std::chrono::seconds powerOnInterval;
+
+        /**
+         * @brief Timer used to delay setting the internal powerOn state.
+         *
+         * The timer used to do the callback after the power state has been on
+         * long enough.
+         */
+        Timer powerOnTimer;
+
+        /** @brief Used to subscribe to D-Bus power on state changes **/
+        std::unique_ptr<sdbusplus::bus::match_t> powerOnMatch;
+
         /**
          * @brief Has a PMBus read failure already been logged?
          */
@@ -128,6 +157,22 @@
          * objects present member variable to reflect current status.
          */
         void updatePresence();
+
+        /**
+         * @brief Updates the poweredOn status by querying D-Bus
+         *
+         * The D-Bus property for the sytem power state will be read to
+         * determine if the system is powered on or not.
+         */
+        void updatePowerState();
+
+        /** @brief Callback for power state property changes
+         * Process changes to the powered on stat property for the system.
+         *
+         * @param[in] msg - Data associated with the power state signal
+         */
+        void powerStateChanged(sdbusplus::message::message& msg);
+
 };
 
 }
