diff --git a/CMakeLists.txt.in b/CMakeLists.txt.in
index 0aed5d5..a964e2d 100644
--- a/CMakeLists.txt.in
+++ b/CMakeLists.txt.in
@@ -9,7 +9,7 @@
 externalproject_add (
     sdbusplus-project PREFIX ${CMAKE_BINARY_DIR}/sdbusplus-project
     GIT_REPOSITORY https://github.com/openbmc/sdbusplus.git GIT_TAG
-    1a3b2c68ac0f409f501d4dedde7a0fc90e9baa90 SOURCE_DIR
+    bed15f0cee4784acdf151cca14efdfb98cb9d397 SOURCE_DIR
     ${CMAKE_BINARY_DIR}/sdbusplus-src BINARY_DIR
     ${CMAKE_BINARY_DIR}/sdbusplus-build CONFIGURE_COMMAND "" BUILD_COMMAND cd
     ${CMAKE_BINARY_DIR}/sdbusplus-src && ./bootstrap.sh && ./configure
diff --git a/include/dbus_monitor.hpp b/include/dbus_monitor.hpp
index d4f2647..1b82697 100644
--- a/include/dbus_monitor.hpp
+++ b/include/dbus_monitor.hpp
@@ -8,15 +8,15 @@
 #include <openbmc_dbus_rest.hpp>
 #include <sdbusplus/bus/match.hpp>
 #include <sdbusplus/message/types.hpp>
+#include <variant>
 
 namespace nlohmann
 {
-template <typename... Args>
-struct adl_serializer<sdbusplus::message::variant<Args...>>
+template <typename... Args> struct adl_serializer<std::variant<Args...>>
 {
-    static void to_json(json& j, const sdbusplus::message::variant<Args...>& v)
+    static void to_json(json& j, const std::variant<Args...>& v)
     {
-        sdbusplus::message::variant_ns::visit([&](auto&& val) { j = val; }, v);
+        std::visit([&](auto&& val) { j = val; }, v);
     }
 };
 } // namespace nlohmann
diff --git a/include/dbus_utility.hpp b/include/dbus_utility.hpp
index 8677cc8..e45bb9a 100644
--- a/include/dbus_utility.hpp
+++ b/include/dbus_utility.hpp
@@ -24,10 +24,11 @@
 namespace utility
 {
 
-using DbusVariantType = sdbusplus::message::variant<
-    std::vector<std::tuple<std::string, std::string, std::string>>,
-    std::vector<std::string>, std::vector<double>, std::string, int64_t,
-    uint64_t, double, int32_t, uint32_t, int16_t, uint16_t, uint8_t, bool>;
+using DbusVariantType =
+    std::variant<std::vector<std::tuple<std::string, std::string, std::string>>,
+                 std::vector<std::string>, std::vector<double>, std::string,
+                 int64_t, uint64_t, double, int32_t, uint32_t, int16_t,
+                 uint16_t, uint8_t, bool>;
 
 using ManagedObjectType = std::vector<
     std::pair<sdbusplus::message::object_path,
diff --git a/include/image_upload.hpp b/include/image_upload.hpp
index 6b87530..6bf5661 100644
--- a/include/image_upload.hpp
+++ b/include/image_upload.hpp
@@ -66,8 +66,7 @@
             sdbusplus::message::object_path path;
             std::vector<std::pair<
                 std::string,
-                std::vector<std::pair<
-                    std::string, sdbusplus::message::variant<std::string>>>>>
+                std::vector<std::pair<std::string, std::variant<std::string>>>>>
                 interfaces;
             m.read(path, interfaces);
 
diff --git a/include/openbmc_dbus_rest.hpp b/include/openbmc_dbus_rest.hpp
index 9503191..27a9e3d 100644
--- a/include/openbmc_dbus_rest.hpp
+++ b/include/openbmc_dbus_rest.hpp
@@ -155,8 +155,8 @@
             for (const auto &[name, value] : propertiesList)
             {
                 nlohmann::json &propertyJson = objectJson[name];
-                sdbusplus::message::variant_ns::visit(
-                    [&propertyJson](auto &&val) { propertyJson = val; }, value);
+                std::visit([&propertyJson](auto &&val) { propertyJson = val; },
+                           value);
             }
         },
         service, objectPath, "org.freedesktop.DBus.Properties", "GetAll",
@@ -255,11 +255,9 @@
                         {
                             nlohmann::json &propertyJson =
                                 objectJson[property.first];
-                            sdbusplus::message::variant_ns::visit(
-                                [&propertyJson](auto &&val) {
-                                    propertyJson = val;
-                                },
-                                property.second);
+                            std::visit([&propertyJson](
+                                           auto &&val) { propertyJson = val; },
+                                       property.second);
                         }
                     }
                 }
diff --git a/redfish-core/lib/account_service.hpp b/redfish-core/lib/account_service.hpp
index 8958290..d9388cf 100644
--- a/redfish-core/lib/account_service.hpp
+++ b/redfish-core/lib/account_service.hpp
@@ -19,6 +19,7 @@
 #include <error_messages.hpp>
 #include <openbmc_dbus_rest.hpp>
 #include <utils/json_utils.hpp>
+#include <variant>
 
 namespace redfish
 {
@@ -26,9 +27,8 @@
 using ManagedObjectType = std::vector<std::pair<
     sdbusplus::message::object_path,
     boost::container::flat_map<
-        std::string,
-        boost::container::flat_map<
-            std::string, sdbusplus::message::variant<bool, std::string>>>>>;
+        std::string, boost::container::flat_map<
+                         std::string, std::variant<bool, std::string>>>>>;
 
 inline std::string getPrivilegeFromRoleId(boost::beast::string_view role)
 {
@@ -110,8 +110,7 @@
             [asyncResp](
                 const boost::system::error_code ec,
                 const std::vector<std::pair<
-                    std::string,
-                    sdbusplus::message::variant<uint32_t, uint16_t, uint8_t>>>&
+                    std::string, std::variant<uint32_t, uint16_t, uint8_t>>>&
                     propertiesList) {
                 if (ec)
                 {
@@ -121,15 +120,13 @@
                 BMCWEB_LOG_DEBUG << "Got " << propertiesList.size()
                                  << "properties for AccountService";
                 for (const std::pair<std::string,
-                                     sdbusplus::message::variant<
-                                         uint32_t, uint16_t, uint8_t>>&
+                                     std::variant<uint32_t, uint16_t, uint8_t>>&
                          property : propertiesList)
                 {
                     if (property.first == "MinPasswordLength")
                     {
                         const uint8_t* value =
-                            sdbusplus::message::variant_ns::get_if<uint8_t>(
-                                &property.second);
+                            std::get_if<uint8_t>(&property.second);
                         if (value != nullptr)
                         {
                             asyncResp->res.jsonValue["MinPasswordLength"] =
@@ -139,8 +136,7 @@
                     if (property.first == "AccountUnlockTimeout")
                     {
                         const uint32_t* value =
-                            sdbusplus::message::variant_ns::get_if<uint32_t>(
-                                &property.second);
+                            std::get_if<uint32_t>(&property.second);
                         if (value != nullptr)
                         {
                             asyncResp->res.jsonValue["AccountLockoutDuration"] =
@@ -150,8 +146,7 @@
                     if (property.first == "MaxLoginAttemptBeforeLockout")
                     {
                         const uint16_t* value =
-                            sdbusplus::message::variant_ns::get_if<uint16_t>(
-                                &property.second);
+                            std::get_if<uint16_t>(&property.second);
                         if (value != nullptr)
                         {
                             asyncResp->res
@@ -190,8 +185,7 @@
                 "xyz.openbmc_project.User.Manager", "/xyz/openbmc_project/user",
                 "org.freedesktop.DBus.Properties", "Set",
                 "xyz.openbmc_project.User.AccountPolicy",
-                "AccountUnlockTimeout",
-                sdbusplus::message::variant<uint32_t>(*unlockTimeout));
+                "AccountUnlockTimeout", std::variant<uint32_t>(*unlockTimeout));
         }
         if (lockoutThreshold)
         {
@@ -207,7 +201,7 @@
                 "org.freedesktop.DBus.Properties", "Set",
                 "xyz.openbmc_project.User.AccountPolicy",
                 "MaxLoginAttemptBeforeLockout",
-                sdbusplus::message::variant<uint16_t>(*lockoutThreshold));
+                std::variant<uint16_t>(*lockoutThreshold));
         }
     }
 };
@@ -435,8 +429,7 @@
                             if (property.first == "UserEnabled")
                             {
                                 const bool* userEnabled =
-                                    sdbusplus::message::variant_ns::get_if<
-                                        bool>(&property.second);
+                                    std::get_if<bool>(&property.second);
                                 if (userEnabled == nullptr)
                                 {
                                     BMCWEB_LOG_ERROR
@@ -451,8 +444,7 @@
                                      "UserLockedForFailedAttempt")
                             {
                                 const bool* userLocked =
-                                    sdbusplus::message::variant_ns::get_if<
-                                        bool>(&property.second);
+                                    std::get_if<bool>(&property.second);
                                 if (userLocked == nullptr)
                                 {
                                     BMCWEB_LOG_ERROR << "UserLockedForF"
@@ -467,8 +459,7 @@
                             else if (property.first == "UserPrivilege")
                             {
                                 const std::string* userRolePtr =
-                                    sdbusplus::message::variant_ns::get_if<
-                                        std::string>(&property.second);
+                                    std::get_if<std::string>(&property.second);
                                 if (userRolePtr == nullptr)
                                 {
                                     BMCWEB_LOG_ERROR
@@ -594,7 +585,7 @@
                 "/xyz/openbmc_project/user/" + username,
                 "org.freedesktop.DBus.Properties", "Set",
                 "xyz.openbmc_project.User.Attributes", "UserEnabled",
-                sdbusplus::message::variant<bool>{*enabled});
+                std::variant<bool>{*enabled});
         }
 
         if (roleId)
@@ -621,7 +612,7 @@
                 "/xyz/openbmc_project/user/" + username,
                 "org.freedesktop.DBus.Properties", "Set",
                 "xyz.openbmc_project.User.Attributes", "UserPrivilege",
-                sdbusplus::message::variant<std::string>{priv});
+                std::variant<std::string>{priv});
         }
     }
 
diff --git a/redfish-core/lib/chassis.hpp b/redfish-core/lib/chassis.hpp
index fe6cdef..fd03c8f 100644
--- a/redfish-core/lib/chassis.hpp
+++ b/redfish-core/lib/chassis.hpp
@@ -18,6 +18,7 @@
 #include "node.hpp"
 
 #include <boost/container/flat_map.hpp>
+#include <variant>
 
 namespace redfish
 {
@@ -29,7 +30,7 @@
 // Note, this is not a very useful Variant, but because it isn't used to get
 // values, it should be as simple as possible
 // TODO(ed) invent a nullvariant type
-using VariantType = sdbusplus::message::variant<bool, std::string, uint64_t>;
+using VariantType = std::variant<bool, std::string, uint64_t>;
 using ManagedObjectsType = std::vector<std::pair<
     sdbusplus::message::object_path,
     std::vector<std::pair<std::string,
@@ -201,8 +202,7 @@
                                      &property : propertiesList)
                             {
                                 const std::string *value =
-                                    sdbusplus::message::variant_ns::get_if<
-                                        std::string>(&property.second);
+                                    std::get_if<std::string>(&property.second);
                                 if (value != nullptr)
                                 {
                                     asyncResp->res.jsonValue[property.first] =
diff --git a/redfish-core/lib/cpudimm.hpp b/redfish-core/lib/cpudimm.hpp
index c57394a..1719fc8 100644
--- a/redfish-core/lib/cpudimm.hpp
+++ b/redfish-core/lib/cpudimm.hpp
@@ -18,6 +18,7 @@
 #include <boost/container/flat_map.hpp>
 #include <node.hpp>
 #include <utils/json_utils.hpp>
+#include <variant>
 
 namespace redfish
 {
@@ -72,8 +73,7 @@
         [name, cpuId, aResp{std::move(aResp)}](
             const boost::system::error_code ec,
             const boost::container::flat_map<
-                std::string,
-                sdbusplus::message::variant<std::string, uint32_t, uint16_t>>
+                std::string, std::variant<std::string, uint32_t, uint16_t>>
                 &properties) {
             if (ec)
             {
@@ -89,8 +89,7 @@
             if (coresCountProperty != properties.end())
             {
                 const uint16_t *coresCount =
-                    sdbusplus::message::variant_ns::get_if<uint16_t>(
-                        &coresCountProperty->second);
+                    std::get_if<uint16_t>(&coresCountProperty->second);
                 if (coresCount == nullptr)
                 {
                     // Important property not in desired type
@@ -122,8 +121,7 @@
                 {
                     aResp->res.jsonValue["Manufacturer"] = property.second;
                     const std::string *value =
-                        sdbusplus::message::variant_ns::get_if<std::string>(
-                            &property.second);
+                        std::get_if<std::string>(&property.second);
                     if (value != nullptr)
                     {
                         // Otherwise would be unexpected.
@@ -208,8 +206,7 @@
         [name, dimmId, aResp{std::move(aResp)}](
             const boost::system::error_code ec,
             const boost::container::flat_map<
-                std::string,
-                sdbusplus::message::variant<std::string, uint32_t, uint16_t>>
+                std::string, std::variant<std::string, uint32_t, uint16_t>>
                 &properties) {
             if (ec)
             {
@@ -225,8 +222,7 @@
             if (memorySizeProperty != properties.end())
             {
                 const uint32_t *memorySize =
-                    sdbusplus::message::variant_ns::get_if<uint32_t>(
-                        &memorySizeProperty->second);
+                    std::get_if<uint32_t>(&memorySizeProperty->second);
                 if (memorySize == nullptr)
                 {
                     // Important property not in desired type
@@ -256,8 +252,7 @@
                 else if (property.first == "MemoryType")
                 {
                     const auto *value =
-                        sdbusplus::message::variant_ns::get_if<std::string>(
-                            &property.second);
+                        std::get_if<std::string>(&property.second);
                     if (value != nullptr)
                     {
                         aResp->res.jsonValue["MemoryDeviceType"] = *value;
diff --git a/redfish-core/lib/ethernet.hpp b/redfish-core/lib/ethernet.hpp
index e861fb8..9147585 100644
--- a/redfish-core/lib/ethernet.hpp
+++ b/redfish-core/lib/ethernet.hpp
@@ -22,6 +22,7 @@
 #include <node.hpp>
 #include <optional>
 #include <utils/json_utils.hpp>
+#include <variant>
 
 namespace redfish
 {
@@ -31,18 +32,17 @@
  * TODO(Pawel) consider move this to separate file into boost::dbus
  */
 using PropertiesMapType = boost::container::flat_map<
-    std::string,
-    sdbusplus::message::variant<std::string, bool, uint8_t, int16_t, uint16_t,
-                                int32_t, uint32_t, int64_t, uint64_t, double>>;
+    std::string, std::variant<std::string, bool, uint8_t, int16_t, uint16_t,
+                              int32_t, uint32_t, int64_t, uint64_t, double>>;
 
 using GetManagedObjects = std::vector<std::pair<
     sdbusplus::message::object_path,
     std::vector<std::pair<
         std::string,
         boost::container::flat_map<
-            std::string, sdbusplus::message::variant<
-                             std::string, bool, uint8_t, int16_t, uint16_t,
-                             int32_t, uint32_t, int64_t, uint64_t, double>>>>>>;
+            std::string,
+            std::variant<std::string, bool, uint8_t, int16_t, uint16_t, int32_t,
+                         uint32_t, int64_t, uint64_t, double>>>>>>;
 
 enum class LinkType
 {
@@ -171,8 +171,7 @@
                         if (propertyPair.first == "MACAddress")
                         {
                             const std::string *mac =
-                                sdbusplus::message::variant_ns::get_if<
-                                    std::string>(&propertyPair.second);
+                                std::get_if<std::string>(&propertyPair.second);
                             if (mac != nullptr)
                             {
                                 ethData.mac_address = *mac;
@@ -187,8 +186,7 @@
                         if (propertyPair.first == "Id")
                         {
                             const uint32_t *id =
-                                sdbusplus::message::variant_ns::get_if<
-                                    uint32_t>(&propertyPair.second);
+                                std::get_if<uint32_t>(&propertyPair.second);
                             if (id != nullptr)
                             {
                                 ethData.vlan_id = *id;
@@ -204,8 +202,7 @@
                         if (propertyPair.first == "AutoNeg")
                         {
                             const bool *auto_neg =
-                                sdbusplus::message::variant_ns::get_if<bool>(
-                                    &propertyPair.second);
+                                std::get_if<bool>(&propertyPair.second);
                             if (auto_neg != nullptr)
                             {
                                 ethData.auto_neg = *auto_neg;
@@ -214,8 +211,7 @@
                         else if (propertyPair.first == "Speed")
                         {
                             const uint32_t *speed =
-                                sdbusplus::message::variant_ns::get_if<
-                                    uint32_t>(&propertyPair.second);
+                                std::get_if<uint32_t>(&propertyPair.second);
                             if (speed != nullptr)
                             {
                                 ethData.speed = *speed;
@@ -231,8 +227,7 @@
                         if (propertyPair.first == "HostName")
                         {
                             const std::string *hostname =
-                                sdbusplus::message::variant_ns::get_if<
-                                    std::string>(&propertyPair.second);
+                                std::get_if<std::string>(&propertyPair.second);
                             if (hostname != nullptr)
                             {
                                 ethData.hostname = *hostname;
@@ -241,8 +236,7 @@
                         else if (propertyPair.first == "DefaultGateway")
                         {
                             const std::string *defaultGateway =
-                                sdbusplus::message::variant_ns::get_if<
-                                    std::string>(&propertyPair.second);
+                                std::get_if<std::string>(&propertyPair.second);
                             if (defaultGateway != nullptr)
                             {
                                 ethData.default_gateway = *defaultGateway;
@@ -288,8 +282,7 @@
                         if (property.first == "Address")
                         {
                             const std::string *address =
-                                sdbusplus::message::variant_ns::get_if<
-                                    std::string>(&property.second);
+                                std::get_if<std::string>(&property.second);
                             if (address != nullptr)
                             {
                                 ipv4_address.address = *address;
@@ -298,8 +291,7 @@
                         else if (property.first == "Gateway")
                         {
                             const std::string *gateway =
-                                sdbusplus::message::variant_ns::get_if<
-                                    std::string>(&property.second);
+                                std::get_if<std::string>(&property.second);
                             if (gateway != nullptr)
                             {
                                 ipv4_address.gateway = *gateway;
@@ -308,8 +300,7 @@
                         else if (property.first == "Origin")
                         {
                             const std::string *origin =
-                                sdbusplus::message::variant_ns::get_if<
-                                    std::string>(&property.second);
+                                std::get_if<std::string>(&property.second);
                             if (origin != nullptr)
                             {
                                 ipv4_address.origin =
@@ -320,8 +311,7 @@
                         else if (property.first == "PrefixLength")
                         {
                             const uint8_t *mask =
-                                sdbusplus::message::variant_ns::get_if<uint8_t>(
-                                    &property.second);
+                                std::get_if<uint8_t>(&property.second);
                             if (mask != nullptr)
                             {
                                 // convert it to the string
@@ -364,7 +354,7 @@
         std::string("/xyz/openbmc_project/network/") + ifaceId,
         "org.freedesktop.DBus.Properties", "Set",
         "xyz.openbmc_project.Network.VLAN", "Id",
-        sdbusplus::message::variant<uint32_t>(inputVlanId));
+        std::variant<uint32_t>(inputVlanId));
 }
 
 /**
@@ -496,7 +486,7 @@
         "/xyz/openbmc_project/network/" + ifaceId + "/ipv4/" + ipHash,
         "org.freedesktop.DBus.Properties", "Set",
         "xyz.openbmc_project.Network.IP", name,
-        sdbusplus::message::variant<std::string>(newValue));
+        std::variant<std::string>(newValue));
 }
 
 /**
@@ -537,7 +527,7 @@
         "/xyz/openbmc_project/network/" + ifaceId + "/ipv4/" + ipHash,
         "org.freedesktop.DBus.Properties", "Set",
         "xyz.openbmc_project.Network.IP", "Origin",
-        sdbusplus::message::variant<std::string>(newValueDbus));
+        std::variant<std::string>(newValueDbus));
 }
 
 /**
@@ -577,7 +567,7 @@
         "/xyz/openbmc_project/network/" + ifaceId + "/ipv4/" + ipHash,
         "org.freedesktop.DBus.Properties", "Set",
         "xyz.openbmc_project.Network.IP", "PrefixLength",
-        sdbusplus::message::variant<uint8_t>(newValue));
+        std::variant<uint8_t>(newValue));
 }
 
 /**
@@ -865,7 +855,7 @@
                 "/xyz/openbmc_project/network/" + ifaceId,
                 "org.freedesktop.DBus.Properties", "Set",
                 "xyz.openbmc_project.Network.VLAN", "Id",
-                sdbusplus::message::variant<uint32_t>(vlanId));
+                std::variant<uint32_t>(vlanId));
         }
         else
         {
@@ -901,7 +891,7 @@
             "/xyz/openbmc_project/network/config",
             "org.freedesktop.DBus.Properties", "Set",
             "xyz.openbmc_project.Network.SystemConfiguration", "HostName",
-            sdbusplus::message::variant<std::string>(hostname));
+            std::variant<std::string>(hostname));
     }
 
     void handleIPv4Patch(
@@ -1090,8 +1080,7 @@
                                 "/ipv4/" + thisData->id,
                             "org.freedesktop.DBus.Properties", "Set",
                             "xyz.openbmc_project.Network.IP", "Address",
-                            sdbusplus::message::variant<std::string>(
-                                *addressField));
+                            std::variant<std::string>(*addressField));
                     }
 
                     if (prefixLength && subnetField != nullptr)
@@ -1132,8 +1121,7 @@
                                 "/ipv4/" + thisData->id,
                             "org.freedesktop.DBus.Properties", "Set",
                             "xyz.openbmc_project.Network.IP", "Gateway",
-                            sdbusplus::message::variant<std::string>(
-                                *gatewayField));
+                            std::variant<std::string>(*gatewayField));
                     }
                 }
                 thisData++;
diff --git a/redfish-core/lib/log_services.hpp b/redfish-core/lib/log_services.hpp
index 5e64ec0..ce5b97f 100644
--- a/redfish-core/lib/log_services.hpp
+++ b/redfish-core/lib/log_services.hpp
@@ -22,6 +22,7 @@
 
 #include <boost/container/flat_map.hpp>
 #include <boost/utility/string_view.hpp>
+#include <variant>
 
 namespace redfish
 {
@@ -1090,45 +1091,41 @@
             return;
         }
         const uint8_t logId = std::atoi(params[0].c_str());
-        auto getStoredLogCallback =
-            [asyncResp,
-             logId](const boost::system::error_code ec,
-                    const sdbusplus::message::variant<std::string> &resp) {
-                if (ec)
-                {
-                    BMCWEB_LOG_DEBUG << "failed to get log ec: "
-                                     << ec.message();
-                    messages::internalError(asyncResp->res);
-                    return;
-                }
-                const std::string *log =
-                    sdbusplus::message::variant_ns::get_if<std::string>(&resp);
-                if (log == nullptr)
-                {
-                    messages::internalError(asyncResp->res);
-                    return;
-                }
-                nlohmann::json j = nlohmann::json::parse(*log, nullptr, false);
-                if (j.is_discarded())
-                {
-                    messages::internalError(asyncResp->res);
-                    return;
-                }
-                std::string t = getLogCreatedTime(j);
-                asyncResp->res.jsonValue = {
-                    {"@odata.type", "#LogEntry.v1_3_0.LogEntry"},
-                    {"@odata.context",
-                     "/redfish/v1/$metadata#LogEntry.LogEntry"},
-                    {"@odata.id",
-                     "/redfish/v1/Managers/bmc/LogServices/CpuLog/Entries/" +
-                         std::to_string(logId)},
-                    {"Name", "CPU Debug Log"},
-                    {"Id", logId},
-                    {"EntryType", "Oem"},
-                    {"OemRecordFormat", "Intel CPU Log"},
-                    {"Oem", {{"Intel", std::move(j)}}},
-                    {"Created", std::move(t)}};
-            };
+        auto getStoredLogCallback = [asyncResp, logId](
+                                        const boost::system::error_code ec,
+                                        const std::variant<std::string> &resp) {
+            if (ec)
+            {
+                BMCWEB_LOG_DEBUG << "failed to get log ec: " << ec.message();
+                messages::internalError(asyncResp->res);
+                return;
+            }
+            const std::string *log = std::get_if<std::string>(&resp);
+            if (log == nullptr)
+            {
+                messages::internalError(asyncResp->res);
+                return;
+            }
+            nlohmann::json j = nlohmann::json::parse(*log, nullptr, false);
+            if (j.is_discarded())
+            {
+                messages::internalError(asyncResp->res);
+                return;
+            }
+            std::string t = getLogCreatedTime(j);
+            asyncResp->res.jsonValue = {
+                {"@odata.type", "#LogEntry.v1_3_0.LogEntry"},
+                {"@odata.context", "/redfish/v1/$metadata#LogEntry.LogEntry"},
+                {"@odata.id",
+                 "/redfish/v1/Managers/bmc/LogServices/CpuLog/Entries/" +
+                     std::to_string(logId)},
+                {"Name", "CPU Debug Log"},
+                {"Id", logId},
+                {"EntryType", "Oem"},
+                {"OemRecordFormat", "Intel CPU Log"},
+                {"Oem", {{"Intel", std::move(j)}}},
+                {"Created", std::move(t)}};
+        };
         crow::connections::systemBus->async_method_call(
             std::move(getStoredLogCallback), cpuLogObject,
             cpuLogPath + std::string("/") + std::to_string(logId),
@@ -1199,14 +1196,12 @@
             }
             sdbusplus::message::object_path objPath;
             boost::container::flat_map<
-                std::string,
-                boost::container::flat_map<
-                    std::string, sdbusplus::message::variant<std::string>>>
+                std::string, boost::container::flat_map<
+                                 std::string, std::variant<std::string>>>
                 interfacesAdded;
             m.read(objPath, interfacesAdded);
-            const std::string *log =
-                sdbusplus::message::variant_ns::get_if<std::string>(
-                    &interfacesAdded[cpuLogInterface]["Log"]);
+            const std::string *log = std::get_if<std::string>(
+                &interfacesAdded[cpuLogInterface]["Log"]);
             if (log == nullptr)
             {
                 messages::internalError(asyncResp->res);
diff --git a/redfish-core/lib/managers.hpp b/redfish-core/lib/managers.hpp
index d0b2cc8..33ac72c 100644
--- a/redfish-core/lib/managers.hpp
+++ b/redfish-core/lib/managers.hpp
@@ -19,6 +19,7 @@
 
 #include <boost/algorithm/string/replace.hpp>
 #include <dbus_utility.hpp>
+#include <variant>
 
 namespace redfish
 {
@@ -184,8 +185,7 @@
                         return;
                     }
                     const std::string* namePtr =
-                        sdbusplus::message::variant_ns::get_if<std::string>(
-                            &findName->second);
+                        std::get_if<std::string>(&findName->second);
                     if (namePtr == nullptr)
                     {
                         BMCWEB_LOG_ERROR << "Pid Name Field illegal";
@@ -240,8 +240,8 @@
                         auto findClass = intfPair.second.find("Class");
                         if (findClass != intfPair.second.end())
                         {
-                            classPtr = sdbusplus::message::variant_ns::get_if<
-                                std::string>(&findClass->second);
+                            classPtr =
+                                std::get_if<std::string>(&findClass->second);
                         }
                         if (classPtr == nullptr)
                         {
@@ -303,8 +303,7 @@
                         if (intfPair.first == pidZoneConfigurationIface)
                         {
                             const double* ptr =
-                                sdbusplus::message::variant_ns::get_if<double>(
-                                    &propertyPair.second);
+                                std::get_if<double>(&propertyPair.second);
                             if (ptr == nullptr)
                             {
                                 BMCWEB_LOG_ERROR << "Field Illegal "
@@ -321,8 +320,7 @@
                                 propertyPair.first == "Output")
                             {
                                 const std::vector<double>* ptr =
-                                    sdbusplus::message::variant_ns::get_if<
-                                        std::vector<double>>(
+                                    std::get_if<std::vector<double>>(
                                         &propertyPair.second);
 
                                 if (ptr == nullptr)
@@ -365,8 +363,7 @@
                                 propertyPair.first == "PositiveHysteresis")
                             {
                                 const double* ptr =
-                                    sdbusplus::message::variant_ns::get_if<
-                                        double>(&propertyPair.second);
+                                    std::get_if<double>(&propertyPair.second);
                                 if (ptr == nullptr)
                                 {
                                     BMCWEB_LOG_ERROR << "Field Illegal "
@@ -386,8 +383,7 @@
                             if (propertyPair.first == "Zones")
                             {
                                 const std::vector<std::string>* inputs =
-                                    sdbusplus::message::variant_ns::get_if<
-                                        std::vector<std::string>>(
+                                    std::get_if<std::vector<std::string>>(
                                         &propertyPair.second);
 
                                 if (inputs == nullptr)
@@ -421,8 +417,7 @@
                             {
                                 auto& data = (*config)[propertyPair.first];
                                 const std::vector<std::string>* inputs =
-                                    sdbusplus::message::variant_ns::get_if<
-                                        std::vector<std::string>>(
+                                    std::get_if<std::vector<std::string>>(
                                         &propertyPair.second);
 
                                 if (inputs == nullptr)
@@ -448,8 +443,7 @@
                                      propertyPair.first == "SlewPos")
                             {
                                 const double* ptr =
-                                    sdbusplus::message::variant_ns::get_if<
-                                        double>(&propertyPair.second);
+                                    std::get_if<double>(&propertyPair.second);
                                 if (ptr == nullptr)
                                 {
                                     BMCWEB_LOG_ERROR << "Field Illegal "
@@ -945,8 +939,8 @@
                                 if (property.first == "Version")
                                 {
                                     const std::string* value =
-                                        sdbusplus::message::variant_ns::get_if<
-                                            std::string>(&property.second);
+                                        std::get_if<std::string>(
+                                            &property.second);
                                     if (value == nullptr)
                                     {
                                         continue;
diff --git a/redfish-core/lib/network_protocol.hpp b/redfish-core/lib/network_protocol.hpp
index 90f12dd..044d8d0 100644
--- a/redfish-core/lib/network_protocol.hpp
+++ b/redfish-core/lib/network_protocol.hpp
@@ -18,6 +18,8 @@
 #include "error_messages.hpp"
 #include "node.hpp"
 
+#include <variant>
+
 namespace redfish
 {
 
@@ -156,19 +158,17 @@
                             [asyncResp, service{std::string(service)},
                              socketPath](
                                 const boost::system::error_code ec,
-                                const sdbusplus::message::variant<std::vector<
-                                    std::tuple<std::string, std::string>>>&
-                                    resp) {
+                                const std::variant<std::vector<std::tuple<
+                                    std::string, std::string>>>& resp) {
                                 if (ec)
                                 {
                                     messages::internalError(asyncResp->res);
                                     return;
                                 }
-                                const std::vector<std::tuple<
-                                    std::string, std::string>>* responsePtr =
-                                    sdbusplus::message::variant_ns::get_if<
-                                        std::vector<std::tuple<std::string,
-                                                               std::string>>>(
+                                const std::vector<
+                                    std::tuple<std::string, std::string>>*
+                                    responsePtr = std::get_if<std::vector<
+                                        std::tuple<std::string, std::string>>>(
                                         &resp);
                                 if (responsePtr == nullptr ||
                                     responsePtr->size() < 1)
diff --git a/redfish-core/lib/roles.hpp b/redfish-core/lib/roles.hpp
index 0f33b04..d07208e 100644
--- a/redfish-core/lib/roles.hpp
+++ b/redfish-core/lib/roles.hpp
@@ -17,6 +17,8 @@
 
 #include "node.hpp"
 
+#include <variant>
+
 namespace redfish
 {
 
@@ -145,10 +147,8 @@
                          {"Description", "BMC User Roles"}};
 
         crow::connections::systemBus->async_method_call(
-            [asyncResp](
-                const boost::system::error_code ec,
-                const sdbusplus::message::variant<std::vector<std::string>>&
-                    resp) {
+            [asyncResp](const boost::system::error_code ec,
+                        const std::variant<std::vector<std::string>>& resp) {
                 if (ec)
                 {
                     messages::internalError(asyncResp->res);
@@ -158,8 +158,7 @@
                     asyncResp->res.jsonValue["Members"];
                 memberArray = nlohmann::json::array();
                 const std::vector<std::string>* privList =
-                    sdbusplus::message::variant_ns::get_if<
-                        std::vector<std::string>>(&resp);
+                    std::get_if<std::vector<std::string>>(&resp);
                 for (const std::string& priv : *privList)
                 {
                     std::string role = getRoleFromPrivileges(priv);
diff --git a/redfish-core/lib/sensors.hpp b/redfish-core/lib/sensors.hpp
index f866e5d..28dc358 100644
--- a/redfish-core/lib/sensors.hpp
+++ b/redfish-core/lib/sensors.hpp
@@ -22,6 +22,7 @@
 #include <boost/container/flat_map.hpp>
 #include <boost/range/algorithm/replace_copy_if.hpp>
 #include <dbus_singleton.hpp>
+#include <variant>
 
 namespace redfish
 {
@@ -32,7 +33,7 @@
     std::pair<std::string,
               std::vector<std::pair<std::string, std::vector<std::string>>>>>;
 
-using SensorVariant = sdbusplus::message::variant<int64_t, double>;
+using SensorVariant = std::variant<int64_t, double>;
 
 using ManagedObjectsVectorType = std::vector<std::pair<
     sdbusplus::message::object_path,
@@ -272,8 +273,7 @@
     // If a scale exists, pull value as int64, and use the scaling.
     if (scaleIt != valueIt->second.end())
     {
-        const int64_t* int64Value =
-            sdbusplus::message::variant_ns::get_if<int64_t>(&scaleIt->second);
+        const int64_t* int64Value = std::get_if<int64_t>(&scaleIt->second);
         if (int64Value != nullptr)
         {
             scaleMultiplier = *int64Value;
@@ -369,13 +369,9 @@
                 const SensorVariant& valueVariant = valueIt->second;
                 nlohmann::json& valueIt = sensor_json[std::get<2>(p)];
                 // Attempt to pull the int64 directly
-                const int64_t* int64Value =
-                    sdbusplus::message::variant_ns::get_if<int64_t>(
-                        &valueVariant);
+                const int64_t* int64Value = std::get_if<int64_t>(&valueVariant);
 
-                const double* doubleValue =
-                    sdbusplus::message::variant_ns::get_if<double>(
-                        &valueVariant);
+                const double* doubleValue = std::get_if<double>(&valueVariant);
                 double temp = 0.0;
                 if (int64Value != nullptr)
                 {
diff --git a/redfish-core/lib/systems.hpp b/redfish-core/lib/systems.hpp
index 3d7c931..e24a077 100644
--- a/redfish-core/lib/systems.hpp
+++ b/redfish-core/lib/systems.hpp
@@ -18,6 +18,7 @@
 #include <boost/container/flat_map.hpp>
 #include <node.hpp>
 #include <utils/json_utils.hpp>
+#include <variant>
 
 namespace redfish
 {
@@ -87,8 +88,7 @@
                                      &property : propertiesList)
                             {
                                 const std::string *value =
-                                    sdbusplus::message::variant_ns::get_if<
-                                        std::string>(&property.second);
+                                    std::get_if<std::string>(&property.second);
                                 if (value != nullptr)
                                 {
                                     aResp->res.jsonValue[property.first] =
@@ -355,8 +355,7 @@
                                 if (property.first == "Asserted")
                                 {
                                     const bool *asserted =
-                                        sdbusplus::message::variant_ns::get_if<
-                                            bool>(&property.second);
+                                        std::get_if<bool>(&property.second);
                                     if (nullptr != asserted)
                                     {
                                         callback(*asserted, aResp);
@@ -399,8 +398,7 @@
                 if (property.first == "State")
                 {
                     const std::string *s =
-                        sdbusplus::message::variant_ns::get_if<std::string>(
-                            &property.second);
+                        std::get_if<std::string>(&property.second);
                     if (nullptr != s)
                     {
                         BMCWEB_LOG_DEBUG << "Identify Led State: " << *s;
@@ -444,9 +442,8 @@
 {
     BMCWEB_LOG_DEBUG << "Get host information.";
     crow::connections::systemBus->async_method_call(
-        [aResp{std::move(aResp)}](
-            const boost::system::error_code ec,
-            const sdbusplus::message::variant<std::string> &hostState) {
+        [aResp{std::move(aResp)}](const boost::system::error_code ec,
+                                  const std::variant<std::string> &hostState) {
             if (ec)
             {
                 BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
@@ -454,8 +451,7 @@
                 return;
             }
 
-            const std::string *s =
-                sdbusplus::message::variant_ns::get_if<std::string>(&hostState);
+            const std::string *s = std::get_if<std::string>(&hostState);
             BMCWEB_LOG_DEBUG << "Host state: " << *s;
             if (s != nullptr)
             {
@@ -598,7 +594,7 @@
                 "/xyz/openbmc_project/state/chassis0",
                 "org.freedesktop.DBus.Properties", "Set",
                 "xyz.openbmc_project.State.Chassis", "RequestedPowerTransition",
-                sdbusplus::message::variant<std::string>{
+                std::variant<std::string>{
                     "xyz.openbmc_project.State.Chassis.Transition.Off"});
             return;
         }
@@ -640,7 +636,7 @@
             "/xyz/openbmc_project/state/host0",
             "org.freedesktop.DBus.Properties", "Set",
             "xyz.openbmc_project.State.Host", "RequestedHostTransition",
-            sdbusplus::message::variant<std::string>{command});
+            std::variant<std::string>{command});
     }
 };
 
@@ -813,7 +809,7 @@
                 "/xyz/openbmc_project/led/groups/enclosure_identify",
                 "org.freedesktop.DBus.Properties", "Set",
                 "xyz.openbmc_project.Led.Group", "Asserted",
-                sdbusplus::message::variant<bool>(
+                std::variant<bool>(
                     (dbusLedState ==
                              "xyz.openbmc_project.Led.Physical.Action.Off"
                          ? false
@@ -836,7 +832,7 @@
                 "/xyz/openbmc_project/led/physical/identify",
                 "org.freedesktop.DBus.Properties", "Set",
                 "xyz.openbmc_project.Led.Physical", "State",
-                sdbusplus::message::variant<std::string>(dbusLedState));
+                std::variant<std::string>(dbusLedState));
         }
     }
 };
diff --git a/redfish-core/lib/update_service.hpp b/redfish-core/lib/update_service.hpp
index d5ecf24..5d5b3ea 100644
--- a/redfish-core/lib/update_service.hpp
+++ b/redfish-core/lib/update_service.hpp
@@ -18,6 +18,7 @@
 #include "node.hpp"
 
 #include <boost/container/flat_map.hpp>
+#include <variant>
 
 namespace redfish
 {
@@ -69,7 +70,7 @@
             "xyz.openbmc_project.Software.BMC.Updater", objPath,
             "org.freedesktop.DBus.Properties", "Set",
             "xyz.openbmc_project.Software.Activation", "RequestedActivation",
-            sdbusplus::message::variant<std::string>(
+            std::variant<std::string>(
                 "xyz.openbmc_project.Software.Activation.RequestedActivations."
                 "Active"));
     }
@@ -125,8 +126,7 @@
             }
             std::vector<std::pair<
                 std::string,
-                std::vector<std::pair<
-                    std::string, sdbusplus::message::variant<std::string>>>>>
+                std::vector<std::pair<std::string, std::variant<std::string>>>>>
                 interfacesProperties;
 
             sdbusplus::message::object_path objPath;
@@ -260,8 +260,7 @@
                                 }
 
                                 const std::string *swActivationStatus =
-                                    sdbusplus::message::variant_ns::get_if<
-                                        std::string>(&activation);
+                                    std::get_if<std::string>(&activation);
                                 if (swActivationStatus == nullptr)
                                 {
                                     messages::internalError(asyncResp->res);
@@ -401,8 +400,7 @@
                                 return;
                             }
                             const std::string *swInvPurpose =
-                                sdbusplus::message::variant_ns::get_if<
-                                    std::string>(&it->second);
+                                std::get_if<std::string>(&it->second);
                             if (swInvPurpose == nullptr)
                             {
                                 BMCWEB_LOG_DEBUG
@@ -427,8 +425,7 @@
                             BMCWEB_LOG_DEBUG << "Version found!";
 
                             const std::string *version =
-                                sdbusplus::message::variant_ns::get_if<
-                                    std::string>(&it->second);
+                                std::get_if<std::string>(&it->second);
 
                             if (version == nullptr)
                             {
