diff --git a/chassis_state_manager.cpp b/chassis_state_manager.cpp
index 3989bca..743727f 100644
--- a/chassis_state_manager.cpp
+++ b/chassis_state_manager.cpp
@@ -45,6 +45,8 @@
 constexpr auto CHASSIS_STATE_POWERON_TGT_FMT = "obmc-chassis-poweron@{}.target";
 constexpr auto RESET_HOST_SENSORS_SVC_FMT =
     "phosphor-reset-sensor-states@{}.service";
+constexpr auto AUTO_POWER_RESTORE_SVC_FMT =
+    "phosphor-discover-system-state@{}.service";
 constexpr auto ACTIVE_STATE = "active";
 constexpr auto ACTIVATING_STATE = "activating";
 
@@ -203,6 +205,8 @@
 
 void Chassis::determineStatusOfPower()
 {
+    auto initialPowerStatus = server::Chassis::currentPowerStatus();
+
     bool powerGood = determineStatusOfUPSPower();
     if (!powerGood)
     {
@@ -214,6 +218,18 @@
     {
         // All checks passed, set power status to good
         server::Chassis::currentPowerStatus(PowerStatus::Good);
+
+        // If power status transitioned from bad to good and chassis power is
+        // off then call Auto Power Restart to see if the system should auto
+        // power on now that power status is good
+        if ((initialPowerStatus != PowerStatus::Good) &&
+            (server::Chassis::currentPowerState() == PowerState::Off))
+        {
+            info("power status transitioned from {START_PWR_STATE} to Good and "
+                 "chassis power is off, calling APR",
+                 "START_PWR_STATE", initialPowerStatus);
+            restartUnit(fmt::format(AUTO_POWER_RESTORE_SVC_FMT, this->id));
+        }
     }
 }
 
@@ -464,6 +480,19 @@
     return;
 }
 
+void Chassis::restartUnit(const std::string& sysdUnit)
+{
+    auto method = this->bus.new_method_call(SYSTEMD_SERVICE, SYSTEMD_OBJ_PATH,
+                                            SYSTEMD_INTERFACE, "RestartUnit");
+
+    method.append(sysdUnit);
+    method.append("replace");
+
+    this->bus.call_noreply(method);
+
+    return;
+}
+
 bool Chassis::stateActive(const std::string& target)
 {
     std::variant<std::string> currentState;
diff --git a/chassis_state_manager.hpp b/chassis_state_manager.hpp
index 82ad2d1..e282463 100644
--- a/chassis_state_manager.hpp
+++ b/chassis_state_manager.hpp
@@ -60,12 +60,15 @@
                          std::bind(&Chassis::pohCallback, this),
                          std::chrono::hours{1}, std::chrono::minutes{1})
     {
+
         subscribeToSystemdSignals();
 
         createSystemdTargetTable();
 
         restoreChassisStateChangeTime();
 
+        // No default in PDI so start at Good, skip D-Bus signal for now
+        currentPowerStatus(PowerStatus::Good, true);
         determineInitialState();
 
         restorePOHCounter(); // restore POHCounter from persisted file
@@ -129,6 +132,15 @@
      */
     void startUnit(const std::string& sysdUnit);
 
+    /** @brief Restart the systemd unit requested
+     *
+     * This function calls `RestartUnit` on the systemd unit given.
+     * This is useful when needing to restart a service that is already running
+     *
+     * @param[in] sysdUnit    - Systemd unit to restart
+     */
+    void restartUnit(const std::string& sysdUnit);
+
     /**
      * @brief Determine if target is active
      *
