diff --git a/dbus/dbusconfiguration.cpp b/dbus/dbusconfiguration.cpp
index 7d01650..4cdeb44 100644
--- a/dbus/dbusconfiguration.cpp
+++ b/dbus/dbusconfiguration.cpp
@@ -28,6 +28,7 @@
 #include <set>
 #include <thread>
 #include <unordered_map>
+#include <variant>
 
 static constexpr bool DEBUG = false; // enable to print found configuration
 
@@ -49,8 +50,6 @@
 namespace dbus_configuration
 {
 
-namespace variant_ns = sdbusplus::message::variant_ns;
-
 bool findSensors(const std::unordered_map<std::string, std::string>& sensors,
                  const std::string& search,
                  std::vector<std::pair<std::string, std::string>>& matches)
@@ -156,9 +155,8 @@
 void init(sdbusplus::bus::bus& bus)
 {
     using DbusVariantType =
-        sdbusplus::message::variant<uint64_t, int64_t, double, std::string,
-                                    std::vector<std::string>,
-                                    std::vector<double>>;
+        std::variant<uint64_t, int64_t, double, std::string,
+                     std::vector<std::string>, std::vector<double>>;
 
     using ManagedObjectType = std::unordered_map<
         sdbusplus::message::object_path,
@@ -292,15 +290,14 @@
         {
             const auto& zone = findZone->second;
 
-            const std::string& name =
-                variant_ns::get<std::string>(zone.at("Name"));
+            const std::string& name = std::get<std::string>(zone.at("Name"));
             size_t index = getZoneIndex(name, foundZones);
 
             auto& details = zoneDetailsConfig[index];
-            details.minthermalrpm = variant_ns::visit(VariantToDoubleVisitor(),
-                                                      zone.at("MinThermalRpm"));
-            details.failsafepercent = variant_ns::visit(
-                VariantToDoubleVisitor(), zone.at("FailSafePercent"));
+            details.minthermalrpm =
+                std::visit(VariantToDoubleVisitor(), zone.at("MinThermalRpm"));
+            details.failsafepercent = std::visit(VariantToDoubleVisitor(),
+                                                 zone.at("FailSafePercent"));
         }
         auto findBase = configuration.second.find(pidConfigurationInterface);
         if (findBase != configuration.second.end())
@@ -309,22 +306,20 @@
             const auto& base =
                 configuration.second.at(pidConfigurationInterface);
             const std::vector<std::string>& zones =
-                variant_ns::get<std::vector<std::string>>(base.at("Zones"));
+                std::get<std::vector<std::string>>(base.at("Zones"));
             for (const std::string& zone : zones)
             {
                 size_t index = getZoneIndex(zone, foundZones);
                 PIDConf& conf = zoneConfig[index];
 
                 std::vector<std::string> sensorNames =
-                    variant_ns::get<std::vector<std::string>>(
-                        base.at("Inputs"));
+                    std::get<std::vector<std::string>>(base.at("Inputs"));
                 auto findOutputs =
                     base.find("Outputs"); // currently only fans have outputs
                 if (findOutputs != base.end())
                 {
                     std::vector<std::string> outputs =
-                        variant_ns::get<std::vector<std::string>>(
-                            findOutputs->second);
+                        std::get<std::vector<std::string>>(findOutputs->second);
                     sensorNames.insert(sensorNames.end(), outputs.begin(),
                                        outputs.end());
                 }
@@ -358,8 +353,7 @@
 
                         inputs.push_back(shortName);
                         auto& config = sensorConfig[shortName];
-                        config.type =
-                            variant_ns::get<std::string>(base.at("Class"));
+                        config.type = std::get<std::string>(base.at("Class"));
                         config.readpath = sensorPathIfacePair.first;
                         // todo: maybe un-hardcode this if we run into slower
                         // timeouts with sensors
@@ -392,10 +386,10 @@
                 }
 
                 struct ControllerInfo& info =
-                    conf[variant_ns::get<std::string>(base.at("Name"))];
+                    conf[std::get<std::string>(base.at("Name"))];
                 info.inputs = std::move(inputs);
 
-                info.type = variant_ns::get<std::string>(base.at("Class"));
+                info.type = std::get<std::string>(base.at("Class"));
                 // todo: auto generation yaml -> c script seems to discard this
                 // value for fans, verify this is okay
                 if (info.type == "fan")
@@ -404,30 +398,30 @@
                 }
                 else
                 {
-                    info.setpoint = variant_ns::visit(VariantToDoubleVisitor(),
-                                                      base.at("SetPoint"));
+                    info.setpoint = std::visit(VariantToDoubleVisitor(),
+                                               base.at("SetPoint"));
                 }
                 info.pidInfo.ts = 1.0; // currently unused
-                info.pidInfo.p_c = variant_ns::visit(VariantToDoubleVisitor(),
-                                                     base.at("PCoefficient"));
-                info.pidInfo.i_c = variant_ns::visit(VariantToDoubleVisitor(),
-                                                     base.at("ICoefficient"));
-                info.pidInfo.ff_off = variant_ns::visit(
-                    VariantToDoubleVisitor(), base.at("FFOffCoefficient"));
-                info.pidInfo.ff_gain = variant_ns::visit(
-                    VariantToDoubleVisitor(), base.at("FFGainCoefficient"));
-                info.pidInfo.i_lim.max = variant_ns::visit(
-                    VariantToDoubleVisitor(), base.at("ILimitMax"));
-                info.pidInfo.i_lim.min = variant_ns::visit(
-                    VariantToDoubleVisitor(), base.at("ILimitMin"));
-                info.pidInfo.out_lim.max = variant_ns::visit(
-                    VariantToDoubleVisitor(), base.at("OutLimitMax"));
-                info.pidInfo.out_lim.min = variant_ns::visit(
-                    VariantToDoubleVisitor(), base.at("OutLimitMin"));
-                info.pidInfo.slew_neg = variant_ns::visit(
-                    VariantToDoubleVisitor(), base.at("SlewNeg"));
-                info.pidInfo.slew_pos = variant_ns::visit(
-                    VariantToDoubleVisitor(), base.at("SlewPos"));
+                info.pidInfo.p_c = std::visit(VariantToDoubleVisitor(),
+                                              base.at("PCoefficient"));
+                info.pidInfo.i_c = std::visit(VariantToDoubleVisitor(),
+                                              base.at("ICoefficient"));
+                info.pidInfo.ff_off = std::visit(VariantToDoubleVisitor(),
+                                                 base.at("FFOffCoefficient"));
+                info.pidInfo.ff_gain = std::visit(VariantToDoubleVisitor(),
+                                                  base.at("FFGainCoefficient"));
+                info.pidInfo.i_lim.max =
+                    std::visit(VariantToDoubleVisitor(), base.at("ILimitMax"));
+                info.pidInfo.i_lim.min =
+                    std::visit(VariantToDoubleVisitor(), base.at("ILimitMin"));
+                info.pidInfo.out_lim.max = std::visit(VariantToDoubleVisitor(),
+                                                      base.at("OutLimitMax"));
+                info.pidInfo.out_lim.min = std::visit(VariantToDoubleVisitor(),
+                                                      base.at("OutLimitMin"));
+                info.pidInfo.slew_neg =
+                    std::visit(VariantToDoubleVisitor(), base.at("SlewNeg"));
+                info.pidInfo.slew_pos =
+                    std::visit(VariantToDoubleVisitor(), base.at("SlewPos"));
                 double negativeHysteresis = 0;
                 double positiveHysteresis = 0;
 
@@ -435,14 +429,14 @@
                 auto findPos = base.find("PositiveHysteresis");
                 if (findNeg != base.end())
                 {
-                    negativeHysteresis = variant_ns::visit(
-                        VariantToDoubleVisitor(), findNeg->second);
+                    negativeHysteresis =
+                        std::visit(VariantToDoubleVisitor(), findNeg->second);
                 }
 
                 if (findPos != base.end())
                 {
-                    positiveHysteresis = variant_ns::visit(
-                        VariantToDoubleVisitor(), findPos->second);
+                    positiveHysteresis =
+                        std::visit(VariantToDoubleVisitor(), findPos->second);
                 }
                 info.pidInfo.negativeHysteresis = negativeHysteresis;
                 info.pidInfo.positiveHysteresis = positiveHysteresis;
@@ -454,7 +448,7 @@
         {
             const auto& base = findStepwise->second;
             const std::vector<std::string>& zones =
-                variant_ns::get<std::vector<std::string>>(base.at("Zones"));
+                std::get<std::vector<std::string>>(base.at("Zones"));
             for (const std::string& zone : zones)
             {
                 size_t index = getZoneIndex(zone, foundZones);
@@ -462,8 +456,7 @@
 
                 std::vector<std::string> inputs;
                 std::vector<std::string> sensorNames =
-                    variant_ns::get<std::vector<std::string>>(
-                        base.at("Inputs"));
+                    std::get<std::vector<std::string>>(base.at("Inputs"));
 
                 bool sensorFound = false;
                 for (const std::string& sensorName : sensorNames)
@@ -502,7 +495,7 @@
                     continue;
                 }
                 struct ControllerInfo& info =
-                    conf[variant_ns::get<std::string>(base.at("Name"))];
+                    conf[std::get<std::string>(base.at("Name"))];
                 info.inputs = std::move(inputs);
 
                 info.type = "stepwise";
@@ -513,16 +506,16 @@
                 auto findNegHyst = base.find("NegativeHysteresis");
                 if (findPosHyst != base.end())
                 {
-                    info.stepwiseInfo.positiveHysteresis = variant_ns::visit(
+                    info.stepwiseInfo.positiveHysteresis = std::visit(
                         VariantToDoubleVisitor(), findPosHyst->second);
                 }
                 if (findNegHyst != base.end())
                 {
-                    info.stepwiseInfo.positiveHysteresis = variant_ns::visit(
+                    info.stepwiseInfo.positiveHysteresis = std::visit(
                         VariantToDoubleVisitor(), findNegHyst->second);
                 }
                 std::vector<double> readings =
-                    variant_ns::get<std::vector<double>>(base.at("Reading"));
+                    std::get<std::vector<double>>(base.at("Reading"));
                 if (readings.size() > ec::maxStepwisePoints)
                 {
                     throw std::invalid_argument("Too many stepwise points.");
@@ -540,7 +533,7 @@
                         std::numeric_limits<double>::quiet_NaN();
                 }
                 std::vector<double> outputs =
-                    variant_ns::get<std::vector<double>>(base.at("Output"));
+                    std::get<std::vector<double>>(base.at("Output"));
                 if (readings.size() != outputs.size())
                 {
                     throw std::invalid_argument(
diff --git a/dbus/dbuspassive.cpp b/dbus/dbuspassive.cpp
index 32c31af..6d8aa03 100644
--- a/dbus/dbuspassive.cpp
+++ b/dbus/dbuspassive.cpp
@@ -23,6 +23,7 @@
 #include <mutex>
 #include <sdbusplus/bus.hpp>
 #include <string>
+#include <variant>
 
 std::unique_ptr<ReadInterface> DbusPassive::createDbusPassive(
     sdbusplus::bus::bus& bus, const std::string& type, const std::string& id,
@@ -114,8 +115,7 @@
 int handleSensorValue(sdbusplus::message::message& msg, DbusPassive* owner)
 {
     std::string msgSensor;
-    std::map<std::string, sdbusplus::message::variant<int64_t, double, bool>>
-        msgData;
+    std::map<std::string, std::variant<int64_t, double, bool>> msgData;
 
     msg.read(msgSensor, msgData);
 
@@ -124,8 +124,8 @@
         auto valPropMap = msgData.find("Value");
         if (valPropMap != msgData.end())
         {
-            double value = sdbusplus::message::variant_ns::visit(
-                VariantToDoubleVisitor(), valPropMap->second);
+            double value =
+                std::visit(VariantToDoubleVisitor(), valPropMap->second);
 
             value *= std::pow(10, owner->getScale());
 
@@ -145,16 +145,14 @@
         bool asserted = false;
         if (criticalAlarmLow != msgData.end())
         {
-            asserted = sdbusplus::message::variant_ns::get<bool>(
-                criticalAlarmLow->second);
+            asserted = std::get<bool>(criticalAlarmLow->second);
         }
 
         // checking both as in theory you could de-assert one threshold and
         // assert the other at the same moment
         if (!asserted && criticalAlarmHigh != msgData.end())
         {
-            asserted = sdbusplus::message::variant_ns::get<bool>(
-                criticalAlarmHigh->second);
+            asserted = std::get<bool>(criticalAlarmHigh->second);
         }
         owner->setFailed(asserted);
     }
diff --git a/dbus/dbuswrite.cpp b/dbus/dbuswrite.cpp
index bac2187..502b988 100644
--- a/dbus/dbuswrite.cpp
+++ b/dbus/dbuswrite.cpp
@@ -21,6 +21,7 @@
 #include <phosphor-logging/log.hpp>
 #include <sdbusplus/bus.hpp>
 #include <string>
+#include <variant>
 
 constexpr const char* pwmInterface = "xyz.openbmc_project.Control.FanPwm";
 
@@ -62,8 +63,7 @@
     auto mesg =
         writeBus.new_method_call(connectionName.c_str(), path.c_str(),
                                  "org.freedesktop.DBus.Properties", "Set");
-    mesg.append(pwmInterface, "Target",
-                sdbusplus::message::variant<uint64_t>(ovalue));
+    mesg.append(pwmInterface, "Target", std::variant<uint64_t>(ovalue));
 
     try
     {
@@ -109,8 +109,7 @@
     auto mesg =
         writeBus.new_method_call(connectionName.c_str(), path.c_str(),
                                  "org.freedesktop.DBus.Properties", "Set");
-    mesg.append(pwmInterface, "Target",
-                sdbusplus::message::variant<uint64_t>(value));
+    mesg.append(pwmInterface, "Target", std::variant<uint64_t>(value));
 
     try
     {
diff --git a/dbus/util.cpp b/dbus/util.cpp
index 10a052b..5a572d0 100644
--- a/dbus/util.cpp
+++ b/dbus/util.cpp
@@ -4,9 +4,10 @@
 #include <iostream>
 #include <phosphor-logging/log.hpp>
 #include <set>
+#include <variant>
 
 using Property = std::string;
-using Value = sdbusplus::message::variant<int64_t, double, std::string, bool>;
+using Value = std::variant<int64_t, double, std::string, bool>;
 using PropertyMap = std::map<Property, Value>;
 
 using namespace phosphor::logging;
@@ -84,22 +85,19 @@
     auto findUnit = propMap.find("Unit");
     if (findUnit != propMap.end())
     {
-        prop->unit =
-            sdbusplus::message::variant_ns::get<std::string>(findUnit->second);
+        prop->unit = std::get<std::string>(findUnit->second);
     }
     auto findScale = propMap.find("Scale");
     if (findScale != propMap.end())
     {
-        prop->scale =
-            sdbusplus::message::variant_ns::get<int64_t>(findScale->second);
+        prop->scale = std::get<int64_t>(findScale->second);
     }
     else
     {
         prop->scale = 0;
     }
 
-    prop->value = sdbusplus::message::variant_ns::visit(
-        VariantToDoubleVisitor(), propMap["Value"]);
+    prop->value = std::visit(VariantToDoubleVisitor(), propMap["Value"]);
 
     return;
 }
@@ -131,16 +129,14 @@
     bool asserted = false;
     if (findCriticalLow != criticalMap.end())
     {
-        asserted =
-            sdbusplus::message::variant_ns::get<bool>(findCriticalLow->second);
+        asserted = std::get<bool>(findCriticalLow->second);
     }
 
     // as we are catching properties changed, a sensor could theoretically jump
     // from one threshold to the other in one event, so check both thresholds
     if (!asserted && findCriticalHigh != criticalMap.end())
     {
-        asserted =
-            sdbusplus::message::variant_ns::get<bool>(findCriticalHigh->second);
+        asserted = std::get<bool>(findCriticalHigh->second);
     }
     return asserted;
 }
diff --git a/ipmi/manualcmds.cpp b/ipmi/manualcmds.cpp
index 73eec20..652f947 100644
--- a/ipmi/manualcmds.cpp
+++ b/ipmi/manualcmds.cpp
@@ -24,6 +24,7 @@
 #include <sdbusplus/message.hpp>
 #include <string>
 #include <tuple>
+#include <variant>
 
 enum ManualSubCmd
 {
@@ -91,7 +92,7 @@
 
         valueResponseMsg.read(propMap);
 
-        *value = sdbusplus::message::variant_ns::get<bool>(propMap[property]);
+        *value = std::get<bool>(propMap[property]);
     }
     catch (const sdbusplus::exception::SdBusError& ex)
     {
diff --git a/setsensor.cpp b/setsensor.cpp
index fb6d297..d1c9e53 100644
--- a/setsensor.cpp
+++ b/setsensor.cpp
@@ -2,13 +2,14 @@
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/message.hpp>
 #include <string>
+#include <variant>
 
 /* Fan Control */
 static constexpr auto objectPath = "/xyz/openbmc_project/settings/fanctrl/zone";
 static constexpr auto busName = "xyz.openbmc_project.State.FanCtrl";
 static constexpr auto intf = "xyz.openbmc_project.Control.Mode";
 static constexpr auto property = "Manual";
-using Value = sdbusplus::message::variant<bool>;
+using Value = std::variant<bool>;
 
 /* Host Sensor. */
 static constexpr auto sobjectPath =
@@ -16,7 +17,7 @@
 static constexpr auto sbusName = "xyz.openbmc_project.Hwmon.external";
 static constexpr auto sintf = "xyz.openbmc_project.Sensor.Value";
 static constexpr auto sproperty = "Value";
-using sValue = sdbusplus::message::variant<int64_t>;
+using sValue = std::variant<int64_t>;
 
 static constexpr auto propertiesintf = "org.freedesktop.DBus.Properties";
 
diff --git a/test/dbus_passive_unittest.cpp b/test/dbus_passive_unittest.cpp
index 52126cf..81238a5 100644
--- a/test/dbus_passive_unittest.cpp
+++ b/test/dbus_passive_unittest.cpp
@@ -3,6 +3,7 @@
 
 #include <sdbusplus/test/sdbus_mock.hpp>
 #include <string>
+#include <variant>
 
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
@@ -138,7 +139,7 @@
     const char* Value = "Value";
     int64_t xValue = 10000;
     const char* intf = "xyz.openbmc_project.Sensor.Value";
-    // string, std::map<std::string, sdbusplus::message::variant<int64_t>>
+    // string, std::map<std::string, std::variant<int64_t>>
     // msg.read(msgSensor, msgData);
 
     EXPECT_CALL(sdbus_mock, sd_bus_message_read_basic(IsNull(), 's', NotNull()))
@@ -208,7 +209,7 @@
     const char* Scale = "Scale";
     int64_t xScale = -6;
     const char* intf = "xyz.openbmc_project.Sensor.Value";
-    // string, std::map<std::string, sdbusplus::message::variant<int64_t>>
+    // string, std::map<std::string, std::variant<int64_t>>
     // msg.read(msgSensor, msgData);
 
     EXPECT_CALL(sdbus_mock, sd_bus_message_read_basic(IsNull(), 's', NotNull()))
