diff --git a/phosphor-power-supply/main.cpp b/phosphor-power-supply/main.cpp
index bbbd459..d19a254 100644
--- a/phosphor-power-supply/main.cpp
+++ b/phosphor-power-supply/main.cpp
@@ -13,8 +13,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#include "psu_manager.hpp"
+
 #include <CLI/CLI.hpp>
 #include <phosphor-logging/log.hpp>
+#include <sdbusplus/bus.hpp>
+#include <sdeventplus/event.hpp>
 
 #include <filesystem>
 
@@ -42,5 +46,15 @@
         return -1;
     }
 
-    return 0;
+    auto bus = sdbusplus::bus::new_default();
+    auto event = sdeventplus::Event::get_default();
+
+    // Attach the event object to the bus object so we can
+    // handle both sd_events (for the timers) and dbus signals.
+    bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
+
+    // TODO: Should get polling interval from JSON file.
+    auto pollInterval = std::chrono::milliseconds(1000);
+
+    return phosphor::power::manager::PSUManager(bus, event, pollInterval).run();
 }
diff --git a/phosphor-power-supply/meson.build b/phosphor-power-supply/meson.build
index 1bb79de..c1fcb1f 100644
--- a/phosphor-power-supply/meson.build
+++ b/phosphor-power-supply/meson.build
@@ -4,5 +4,6 @@
     'main.cpp',
     dependencies: [
         sdbusplus,
+        sdeventplus,
     ],
     install: true)
diff --git a/phosphor-power-supply/psu_manager.hpp b/phosphor-power-supply/psu_manager.hpp
new file mode 100644
index 0000000..7e9daf6
--- /dev/null
+++ b/phosphor-power-supply/psu_manager.hpp
@@ -0,0 +1,126 @@
+#pragma once
+
+#include <sdbusplus/bus/match.hpp>
+#include <sdeventplus/event.hpp>
+#include <sdeventplus/utility/timer.hpp>
+
+namespace phosphor
+{
+namespace power
+{
+namespace manager
+{
+
+/**
+ * @class PSUManager
+ *
+ * This class will create an object used to manage and monitor a list of power
+ * supply devices.
+ */
+class PSUManager
+{
+  public:
+    PSUManager() = delete;
+    ~PSUManager() = default;
+    PSUManager(const PSUManager&) = delete;
+    PSUManager& operator=(const PSUManager&) = delete;
+    PSUManager(PSUManager&&) = delete;
+    PSUManager& operator=(PSUManager&&) = delete;
+
+    /**
+     * Constructor
+     *
+     * @param[in] bus - D-Bus bus object
+     * @param[in] e - event object
+     * @param[in] i - polling interval in milliseconds
+     */
+    PSUManager(sdbusplus::bus::bus& bus, const sdeventplus::Event& e,
+               std::chrono::milliseconds i) :
+        bus(bus),
+        timer(e, std::bind(&PSUManager::analyze, this), i)
+    {
+    }
+
+    /**
+     * Initializes the manager.
+     *
+     * Get current BMC state, ...
+     */
+    void initialize()
+    {
+    }
+
+    /**
+     * Starts the timer to start monitoring the list of devices.
+     */
+    int run()
+    {
+        return timer.get_event().loop();
+    }
+
+    /**
+     * This function will be called in various situations in order to clear
+     * any fault status bits that may have been set, in order to start over
+     * with a clean state. Presence changes and power state changes will want
+     * to clear any faults logged.
+     */
+    void clearFaults()
+    {
+    }
+
+  private:
+    /**
+     * The D-Bus object
+     */
+    sdbusplus::bus::bus& bus;
+
+    /**
+     * The timer that runs to periodically check the power supplies.
+     */
+    sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic> timer;
+
+    /**
+     * Analyze the status of each of the power supplies.
+     */
+    void analyze()
+    {
+    }
+
+    /** @brief True if the power is on. */
+    bool powerOn = false;
+
+    /** @brief Used to subscribe to D-Bus power on state changes */
+    std::unique_ptr<sdbusplus::bus::match_t> powerOnMatch;
+
+    /**
+     * @brief Updates the poweredOn status by querying D-Bus
+     *
+     * The D-Bus property for the system 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 state property for the system.
+     *
+     * @param[in] msg - Data associated with the power state signal
+     */
+    void powerStateChanged(sdbusplus::message::message& msg);
+
+    /**
+     * @brief Adds properties to the inventory.
+     *
+     * Reads the values from the devices and writes them to the associated
+     * power supply D-Bus inventory objects.
+     *
+     * This needs to be done on startup, and each time the presence state
+     * changes.
+     */
+    void updateInventory();
+};
+
+} // namespace manager
+} // namespace power
+} // namespace phosphor
