diff --git a/src/entity_manager/entity_manager.cpp b/src/entity_manager/entity_manager.cpp
index ff9a5d5..d55105c 100644
--- a/src/entity_manager/entity_manager.cpp
+++ b/src/entity_manager/entity_manager.cpp
@@ -385,7 +385,7 @@
         return;
     }
 
-    if (!em_utils::isPowerOn() && scannedPowerOff)
+    if (!powerStatus.isPowerOn() && scannedPowerOff)
     {
         return;
     }
@@ -398,7 +398,7 @@
                 return;
             }
 
-            bool powerOff = !em_utils::isPowerOn();
+            bool powerOff = !powerStatus.isPowerOn();
             for (const auto& [name, device] : lastJson.items())
             {
                 pruneDevice(systemConfiguration, powerOff, scannedPowerOff,
@@ -505,7 +505,7 @@
                 [this, count, oldConfiguration, missingConfigurations]() {
                     // this is something that since ac has been applied to the
                     // bmc we saw, and we no longer see it
-                    bool powerOff = !em_utils::isPowerOn();
+                    bool powerOff = !powerStatus.isPowerOn();
                     for (const auto& [name, device] :
                          missingConfigurations->items())
                     {
@@ -693,7 +693,7 @@
 
     // some boards only show up after power is on, we want to not say they are
     // removed until the same state happens
-    em_utils::setupPowerMatch(em.systemBus);
+    em.powerStatus.setupPowerMatch(em.systemBus);
 
     io.run();
 
diff --git a/src/entity_manager/entity_manager.hpp b/src/entity_manager/entity_manager.hpp
index c244ad3..8aa8935 100644
--- a/src/entity_manager/entity_manager.hpp
+++ b/src/entity_manager/entity_manager.hpp
@@ -20,6 +20,7 @@
 #include "../utils.hpp"
 #include "configuration.hpp"
 #include "dbus_interface.hpp"
+#include "power_status_monitor.hpp"
 #include "topology.hpp"
 
 #include <systemd/sd-journal.h>
@@ -59,6 +60,8 @@
 
     dbus_interface::EMDBusInterface dbus_interface;
 
+    power::PowerStatusMonitor powerStatus;
+
     void propertiesChangedCallback();
     void registerCallback(const std::string& path);
     void publishNewConfiguration(const size_t& instance, size_t count,
diff --git a/src/entity_manager/power_status_monitor.hpp b/src/entity_manager/power_status_monitor.hpp
new file mode 100644
index 0000000..29840e2
--- /dev/null
+++ b/src/entity_manager/power_status_monitor.hpp
@@ -0,0 +1,26 @@
+#pragma once
+
+#include <sdbusplus/asio/connection.hpp>
+#include <sdbusplus/bus/match.hpp>
+
+namespace power
+{
+
+const static constexpr char* busname = "xyz.openbmc_project.State.Host";
+const static constexpr char* interface = "xyz.openbmc_project.State.Host";
+const static constexpr char* path = "/xyz/openbmc_project/state/host0";
+const static constexpr char* property = "CurrentHostState";
+
+class PowerStatusMonitor
+{
+  public:
+    bool isPowerOn();
+    void setupPowerMatch(
+        const std::shared_ptr<sdbusplus::asio::connection>& conn);
+
+  private:
+    bool powerStatusOn = false;
+    std::unique_ptr<sdbusplus::bus::match_t> powerMatch = nullptr;
+};
+
+} // namespace power
diff --git a/src/entity_manager/utils.cpp b/src/entity_manager/utils.cpp
index b169bce..92dba87 100644
--- a/src/entity_manager/utils.cpp
+++ b/src/entity_manager/utils.cpp
@@ -2,6 +2,7 @@
 
 #include "../variant_visitors.hpp"
 #include "expression.hpp"
+#include "power_status_monitor.hpp"
 
 #include <boost/algorithm/string/classification.hpp>
 #include <boost/algorithm/string/find.hpp>
@@ -13,17 +14,7 @@
 #include <fstream>
 #include <iostream>
 
-namespace em_utils
-{
-
-// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
-static bool powerStatusOn = false;
-// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
-static std::unique_ptr<sdbusplus::bus::match_t> powerMatch = nullptr;
-
-constexpr const char* templateChar = "$";
-
-bool isPowerOn()
+bool power::PowerStatusMonitor::isPowerOn()
 {
     if (!powerMatch)
     {
@@ -32,14 +23,16 @@
     return powerStatusOn;
 }
 
-void setupPowerMatch(const std::shared_ptr<sdbusplus::asio::connection>& conn)
+void power::PowerStatusMonitor::setupPowerMatch(
+    const std::shared_ptr<sdbusplus::asio::connection>& conn)
 {
     powerMatch = std::make_unique<sdbusplus::bus::match_t>(
         static_cast<sdbusplus::bus_t&>(*conn),
-        "type='signal',interface='" + std::string(properties::interface) +
-            "',path='" + std::string(power::path) + "',arg0='" +
+        "type='signal',interface='" +
+            std::string(em_utils::properties::interface) + "',path='" +
+            std::string(power::path) + "',arg0='" +
             std::string(power::interface) + "'",
-        [](sdbusplus::message_t& message) {
+        [this](sdbusplus::message_t& message) {
             std::string objectName;
             boost::container::flat_map<std::string, std::variant<std::string>>
                 values;
@@ -53,8 +46,8 @@
         });
 
     conn->async_method_call(
-        [](boost::system::error_code ec,
-           const std::variant<std::string>& state) {
+        [this](boost::system::error_code ec,
+               const std::variant<std::string>& state) {
             if (ec)
             {
                 return;
@@ -62,10 +55,15 @@
             powerStatusOn =
                 boost::ends_with(std::get<std::string>(state), "Running");
         },
-        power::busname, power::path, properties::interface, properties::get,
-        power::interface, power::property);
+        power::busname, power::path, em_utils::properties::interface,
+        em_utils::properties::get, power::interface, power::property);
 }
 
+namespace em_utils
+{
+
+constexpr const char* templateChar = "$";
+
 bool fwVersionIsSame()
 {
     std::ifstream version(versionFile);
diff --git a/src/entity_manager/utils.hpp b/src/entity_manager/utils.hpp
index fb25b24..3bf20f2 100644
--- a/src/entity_manager/utils.hpp
+++ b/src/entity_manager/utils.hpp
@@ -24,16 +24,6 @@
 constexpr const char* get = "Get";
 } // namespace properties
 
-namespace power
-{
-const static constexpr char* busname = "xyz.openbmc_project.State.Host";
-const static constexpr char* interface = "xyz.openbmc_project.State.Host";
-const static constexpr char* path = "/xyz/openbmc_project/state/host0";
-const static constexpr char* property = "CurrentHostState";
-} // namespace power
-
-bool isPowerOn();
-void setupPowerMatch(const std::shared_ptr<sdbusplus::asio::connection>& conn);
 bool fwVersionIsSame();
 
 std::optional<std::string> templateCharReplace(
