diff --git a/procedures/phal/enter_mpreboot.cpp b/procedures/phal/enter_mpreboot.cpp
index 0db9889..1200399 100644
--- a/procedures/phal/enter_mpreboot.cpp
+++ b/procedures/phal/enter_mpreboot.cpp
@@ -26,7 +26,6 @@
 #include "extensions/phal/dump_utils.hpp"
 
 #include <attributes_info.H>
-#include <fmt/format.h>
 #include <libphal.H>
 #include <phal_exception.H>
 #include <sys/wait.h>
@@ -34,6 +33,7 @@
 
 #include <phosphor-logging/log.hpp>
 
+#include <format>
 #include <system_error>
 #include <vector>
 
@@ -65,13 +65,13 @@
             // SBE is not ready to accept chip-ops,
             // Skip the request, no additional error handling required.
             log<level::INFO>(
-                fmt::format("EnterMPIPL: Skipping ({}) on proc({})",
+                std::format("EnterMPIPL: Skipping ({}) on proc({})",
                             sbeError.what(), pdbg_target_index(tgt))
                     .c_str());
             return;
         }
 
-        log<level::ERR>(fmt::format("EnterMPIPL failed({}) on proc({})",
+        log<level::ERR>(std::format("EnterMPIPL failed({}) on proc({})",
                                     sbeError.what(), pdbg_target_index(tgt))
                             .c_str());
 
@@ -117,7 +117,7 @@
     catch (const phalError_t& phalError)
     {
         // Failure reported
-        log<level::ERR>(fmt::format("captureFFDC: Exception({}) on proc({})",
+        log<level::ERR>(std::format("captureFFDC: Exception({}) on proc({})",
                                     phalError.what(), pdbg_target_index(tgt))
                             .c_str());
         openpower::pel::createPEL(
@@ -126,7 +126,7 @@
     }
 
     log<level::INFO>(
-        fmt::format("Enter MPIPL completed on proc({})", pdbg_target_index(tgt))
+        std::format("Enter MPIPL completed on proc({})", pdbg_target_index(tgt))
             .c_str());
 }
 
diff --git a/procedures/phal/import_devtree.cpp b/procedures/phal/import_devtree.cpp
index d1cff3e..78d45c2 100644
--- a/procedures/phal/import_devtree.cpp
+++ b/procedures/phal/import_devtree.cpp
@@ -4,7 +4,6 @@
 #include "extensions/phal/pdbg_utils.hpp"
 #include "registration.hpp"
 
-#include <fmt/format.h>
 #include <sys/wait.h>
 #include <unistd.h>
 
@@ -14,6 +13,7 @@
 #include <xyz/openbmc_project/Common/error.hpp>
 
 #include <filesystem>
+#include <format>
 
 namespace openpower
 {
@@ -52,7 +52,7 @@
         execl("/bin/sh", "sh", "-c", cmd.c_str(), 0);
 
         auto error = errno;
-        log<level::ERR>(fmt::format("Error occurred during attributes import "
+        log<level::ERR>(std::format("Error occurred during attributes import "
                                     "execution, errno({})",
                                     error)
                             .c_str());
@@ -84,7 +84,7 @@
     }
     catch (const fs::filesystem_error& e)
     { // Log message and continue. Data already applied successfully.
-        log<level::ERR>(fmt::format("File({}) delete failed Error:({})",
+        log<level::ERR>(std::format("File({}) delete failed Error:({})",
                                     DEVTREE_EXP_FILE, e.what())
                             .c_str());
     }
diff --git a/procedures/phal/reinit_devtree.cpp b/procedures/phal/reinit_devtree.cpp
index 29b85c0..1e9918f 100644
--- a/procedures/phal/reinit_devtree.cpp
+++ b/procedures/phal/reinit_devtree.cpp
@@ -5,13 +5,13 @@
 #include "temporary_file.hpp"
 
 #include <fcntl.h>
-#include <fmt/format.h>
 
 #include <nlohmann/json.hpp>
 #include <phosphor-logging/elog-errors.hpp>
 
 #include <cstdio>
 #include <filesystem>
+#include <format>
 
 extern "C"
 {
@@ -44,7 +44,7 @@
     if (ret)
     {
         log<level::ERR>(
-            fmt::format("Failed({}) to update attribute override data", ret)
+            std::format("Failed({}) to update attribute override data", ret)
                 .c_str());
         throw std::runtime_error(
             "applyAttrOverride: dtree_cronus_import failed");
@@ -67,7 +67,7 @@
     if (rwFileName.empty())
     {
         std::string err =
-            fmt::format("Failed to read the target file "
+            std::format("Failed to read the target file "
                         "for the RW device tree symbolic link ({})",
                         CEC_DEVTREE_RW_PATH);
         log<level::ERR>(err.c_str());
@@ -76,7 +76,7 @@
     fs::path roFilePath = CEC_DEVTREE_RO_BASE_PATH / rwFileName;
     if (!fs::exists(roFilePath))
     {
-        auto err = fmt::format("RO device tree file ({}) does not "
+        auto err = std::format("RO device tree file ({}) does not "
                                "exit ",
                                roFilePath.string());
         log<level::ERR>(err.c_str());
@@ -130,7 +130,7 @@
         if (!fs::exists(attrFile))
         {
             log<level::ERR>(
-                fmt::format(
+                std::format(
                     "devtree attribute export list file is not available: ({})",
                     DEVTREE_REINIT_ATTRS_LIST)
                     .c_str());
@@ -147,7 +147,7 @@
             if (fpExport.get() == nullptr)
             {
                 log<level::ERR>(
-                    fmt::format("Temporary data file failed to open: ({})",
+                    std::format("Temporary data file failed to open: ({})",
                                 tmpFile.getPath().c_str())
                         .c_str());
                 throw std::runtime_error(
@@ -161,7 +161,7 @@
             if (ret)
             {
                 log<level::ERR>(
-                    fmt::format("Failed({}) to collect attribute export data",
+                    std::format("Failed({}) to collect attribute export data",
                                 ret)
                         .c_str());
                 throw std::runtime_error(
@@ -178,7 +178,7 @@
         if (fpImport.get() == nullptr)
         {
             log<level::ERR>(
-                fmt::format("import, temporary data file failed to open: ({})",
+                std::format("import, temporary data file failed to open: ({})",
                             tmpFile.getPath().c_str())
                     .c_str());
             throw std::runtime_error(
@@ -191,7 +191,7 @@
         if (ret)
         {
             log<level::ERR>(
-                fmt::format("Failed({}) to update attribute data", ret)
+                std::format("Failed({}) to update attribute data", ret)
                     .c_str());
             throw std::runtime_error(
                 "reinitDevtree: dtree_cronus_import function failed");
@@ -207,7 +207,7 @@
         // Any failures during temporary file re-init should create PEL
         // and continue with current version of devtree file to allow boot.
         log<level::ERR>(
-            fmt::format("reinitDevtree failed ({})", e.what()).c_str());
+            std::format("reinitDevtree failed ({})", e.what()).c_str());
         json jsonCalloutDataList;
         jsonCalloutDataList = json::array();
         json jsonCalloutData;
@@ -245,7 +245,7 @@
         // PEL, with code callout. Also failed the service.
         // and continue with current version of devtree file to allow boot.
         log<level::ERR>(
-            fmt::format("reinitDevtree r/w version update failed ({})",
+            std::format("reinitDevtree r/w version update failed ({})",
                         e.what())
                 .c_str());
         json jsonCalloutDataList;
diff --git a/procedures/phal/start_host.cpp b/procedures/phal/start_host.cpp
index c0c0fd6..e6f01ec 100644
--- a/procedures/phal/start_host.cpp
+++ b/procedures/phal/start_host.cpp
@@ -10,7 +10,6 @@
 #include "extensions/phal/phal_error.hpp"
 #include "util.hpp"
 
-#include <fmt/format.h>
 #include <libekb.H>
 
 #include <ext_interface.hpp>
@@ -18,6 +17,8 @@
 #include <phosphor-logging/log.hpp>
 #include <registration.hpp>
 
+#include <format>
+
 namespace openpower
 {
 namespace phal
@@ -131,13 +132,13 @@
     if (hwKwdSize != hwData.size())
     {
         log<level::ERR>(
-            fmt::format("Incorrect VINI records HW Keyword data size({})",
+            std::format("Incorrect VINI records HW Keyword data size({})",
                         hwData.size())
                 .c_str());
         throw std::runtime_error("Incorrect VINI records HW Keyword data size");
     }
 
-    log<level::DEBUG>(fmt::format("VINI Records HW[0]:{} HW[1]:{}",
+    log<level::DEBUG>(std::format("VINI Records HW[0]:{} HW[1]:{}",
                                   hwData.at(0), hwData.at(1))
                           .c_str());
 
@@ -206,7 +207,7 @@
         // Don't throw exception since the caller might call in the error path
         // and even we should allow the hardware isolation by default.
         log<level::ERR>(
-            fmt::format("Exception [{}], failed to create the error log "
+            std::format("Exception [{}], failed to create the error log "
                         "for the hardware isolation policy settings failures.",
                         e.what())
                 .c_str());
@@ -252,7 +253,7 @@
         }
         else
         {
-            const auto trace{fmt::format(
+            const auto trace{std::format(
                 "Failed to read the HardwareIsolation policy "
                 "from the path [{}] interface [{}]. Continuing with "
                 "default mode(allow_hw_isolation)",
@@ -265,7 +266,7 @@
     }
     catch (const sdbusplus::exception_t& e)
     {
-        const auto trace{fmt::format(
+        const auto trace{std::format(
             "Exception [{}] to get the HardwareIsolation policy "
             "from the path [{}] interface [{}]. Continuing with "
             "default mode (allow_hw_isolation)",
diff --git a/procedures/phal/thread_stopall.cpp b/procedures/phal/thread_stopall.cpp
index 0355eb2..b29bb30 100644
--- a/procedures/phal/thread_stopall.cpp
+++ b/procedures/phal/thread_stopall.cpp
@@ -3,10 +3,11 @@
 #include "registration.hpp"
 
 #include <attributes_info.H>
-#include <fmt/format.h>
 #include <libipl.H>
 #include <libphal.H>
 #include <phal_exception.H>
+
+#include <format>
 extern "C"
 {
 #include <libpdbg.h>
@@ -55,7 +56,7 @@
             if (DT_GET_PROP(ATTR_HWAS_STATE, procTarget, hwasState))
             {
                 log<level::ERR>(
-                    fmt::format("({})Could not read HWAS_STATE attribute",
+                    std::format("({})Could not read HWAS_STATE attribute",
                                 pdbg_target_path(procTarget))
                         .c_str());
                 continue;
@@ -77,7 +78,7 @@
                 if (errType == SBE_CMD_FAILED)
                 {
                     log<level::ERR>(
-                        fmt::format(
+                        std::format(
                             "threadStopAll failed({}) on proc({})",
                             static_cast<
                                 std::underlying_type<ipl_error_type>::type>(
@@ -105,7 +106,7 @@
                     // SBE is not ready to accept chip-ops,
                     // Skip the request, no additional error handling required.
                     log<level::INFO>(
-                        fmt::format("threadStopAll: Skipping ({}) on proc({})",
+                        std::format("threadStopAll: Skipping ({}) on proc({})",
                                     sbeError.what(),
                                     pdbg_target_index(procTarget))
                             .c_str());
@@ -113,7 +114,7 @@
                 continue;
             }
             log<level::INFO>(
-                fmt::format("Processor thread stopall completed on proc({})",
+                std::format("Processor thread stopall completed on proc({})",
                             pdbg_target_index(procTarget))
                     .c_str());
         }
@@ -125,7 +126,7 @@
         // Dont throw exception on failure because, need to proceed
         // further to complete power-off/reboot.
         log<level::ERR>(
-            fmt::format("threadStopAll: Exception({})", ex.what()).c_str());
+            std::format("threadStopAll: Exception({})", ex.what()).c_str());
 
         // To store additional data about ffdc.
         FFDCData pelAdditionalData;
