diff --git a/src/ADCSensorMain.cpp b/src/ADCSensorMain.cpp
index 845b976..47edd5c 100644
--- a/src/ADCSensorMain.cpp
+++ b/src/ADCSensorMain.cpp
@@ -29,6 +29,7 @@
 static constexpr bool DEBUG = false;
 
 namespace fs = std::experimental::filesystem;
+namespace variant_ns = sdbusplus::message::variant_ns;
 static constexpr std::array<const char*, 1> SENSOR_TYPES = {
     "xyz.openbmc_project.Configuration.ADC"};
 static std::regex INPUT_REGEX(R"(in(\d+)_input)");
@@ -177,8 +178,8 @@
         float scaleFactor = 1.0;
         if (findScaleFactor != baseConfiguration->second.end())
         {
-            scaleFactor = mapbox::util::apply_visitor(VariantToFloatVisitor(),
-                                                      findScaleFactor->second);
+            scaleFactor = variant_ns::visit(VariantToFloatVisitor(),
+                                            findScaleFactor->second);
         }
         sensors[sensorName] = std::make_unique<ADCSensor>(
             path.string(), objectServer, dbusConnection, io, sensorName,
diff --git a/src/CPUSensorMain.cpp b/src/CPUSensorMain.cpp
index 6318dd8..0edbc65 100644
--- a/src/CPUSensorMain.cpp
+++ b/src/CPUSensorMain.cpp
@@ -64,6 +64,7 @@
 static constexpr const unsigned int RANK_NUM_MAX = 8;
 
 namespace fs = std::experimental::filesystem;
+namespace variant_ns = sdbusplus::message::variant_ns;
 static constexpr const char* CONFIG_PREFIX =
     "xyz.openbmc_project.Configuration.";
 static constexpr std::array<const char*, 3> SENSOR_TYPES = {
@@ -181,8 +182,7 @@
             std::cerr << "could not determine CPU ID for " << oemName << "\n";
             continue;
         }
-        int cpuId = mapbox::util::apply_visitor(VariantToIntVisitor(),
-                                                findCpuId->second);
+        int cpuId = variant_ns::visit(VariantToIntVisitor(), findCpuId->second);
 
         auto directory = oemNamePath.parent_path().parent_path();
         std::vector<fs::path> inputPaths;
@@ -420,15 +420,15 @@
                 {
                     continue;
                 }
-                int addr = mapbox::util::apply_visitor(VariantToIntVisitor(),
-                                                       findAddress->second);
+                int addr = variant_ns::visit(VariantToIntVisitor(),
+                                             findAddress->second);
 
                 auto findName = config.second.find("Name");
                 if (findName == config.second.end())
                 {
                     continue;
                 }
-                std::string nameRaw = mapbox::util::apply_visitor(
+                std::string nameRaw = variant_ns::visit(
                     VariantToStringVisitor(), findName->second);
                 std::string name =
                     std::regex_replace(nameRaw, ILLEGAL_NAME_REGEX, "_");
diff --git a/src/FanMain.cpp b/src/FanMain.cpp
index 6818692..b562e05 100644
--- a/src/FanMain.cpp
+++ b/src/FanMain.cpp
@@ -31,6 +31,7 @@
 static constexpr bool DEBUG = false;
 
 namespace fs = std::experimental::filesystem;
+namespace variant_ns = sdbusplus::message::variant_ns;
 static constexpr std::array<const char*, 1> SENSOR_TYPES = {
     "xyz.openbmc_project.Configuration.AspeedFan"};
 static std::regex INPUT_REGEX(R"(fan(\d+)_input)");
@@ -117,8 +118,8 @@
             {
                 continue;
             }
-            uint16_t pwmIndex = mapbox::util::apply_visitor(
-                VariantToUnsignedIntVisitor(), findPwmIndex->second);
+            uint16_t pwmIndex = variant_ns::visit(VariantToUnsignedIntVisitor(),
+                                                  findPwmIndex->second);
             auto oemNamePath = directory.string() + R"(/of_node/oemname)" +
                                std::to_string(pwmIndex);
 
@@ -144,7 +145,7 @@
                 std::cerr << baseConfiguration->first << " missing index\n";
                 continue;
             }
-            unsigned int configIndex = mapbox::util::apply_visitor(
+            unsigned int configIndex = variant_ns::visit(
                 VariantToUnsignedIntVisitor(), findIndex->second);
 
             if (configIndex != index)
@@ -157,7 +158,7 @@
             {
                 continue;
             }
-            std::string connectorName = mapbox::util::apply_visitor(
+            std::string connectorName = variant_ns::visit(
                 VariantToStringVisitor(), findConnectorName->second);
             boost::replace_all(connectorName, " ", "_");
             if (connectorName == oemName)
diff --git a/src/Thresholds.cpp b/src/Thresholds.cpp
index c40d35d..32244d7 100644
--- a/src/Thresholds.cpp
+++ b/src/Thresholds.cpp
@@ -9,6 +9,7 @@
 static constexpr bool DEBUG = false;
 constexpr size_t MAX_THRESHOLDS = 4;
 
+namespace variant_ns = sdbusplus::message::variant_ns;
 namespace thresholds
 {
 unsigned int toBusValue(const Level &level)
@@ -65,8 +66,8 @@
             auto labelFind = item.second.find("Label");
             if (labelFind == item.second.end())
                 continue;
-            if (mapbox::util::apply_visitor(VariantToStringVisitor(),
-                                            labelFind->second) != *matchLabel)
+            if (variant_ns::visit(VariantToStringVisitor(),
+                                  labelFind->second) != *matchLabel)
                 continue;
         }
         auto directionFind = item.second.find("Direction");
@@ -81,8 +82,8 @@
         }
         Level level;
         Direction direction;
-        if (mapbox::util::apply_visitor(VariantToUnsignedIntVisitor(),
-                                        severityFind->second) == 0)
+        if (variant_ns::visit(VariantToUnsignedIntVisitor(),
+                              severityFind->second) == 0)
         {
             level = Level::WARNING;
         }
@@ -90,8 +91,8 @@
         {
             level = Level::CRITICAL;
         }
-        if (mapbox::util::apply_visitor(VariantToStringVisitor(),
-                                        directionFind->second) == "less than")
+        if (variant_ns::visit(VariantToStringVisitor(),
+                              directionFind->second) == "less than")
         {
             direction = Direction::LOW;
         }
@@ -99,8 +100,8 @@
         {
             direction = Direction::HIGH;
         }
-        float val = mapbox::util::apply_visitor(VariantToFloatVisitor(),
-                                                valueFind->second);
+        float val =
+            variant_ns::visit(VariantToFloatVisitor(), valueFind->second);
 
         thresholdVector.emplace_back(level, direction, val);
     }
@@ -134,11 +135,11 @@
                     std::cerr << "Malformed threshold in configuration\n";
                     return;
                 }
-                unsigned int level = mapbox::util::apply_visitor(
+                unsigned int level = variant_ns::visit(
                     VariantToUnsignedIntVisitor(), severityFind->second);
 
-                std::string dir = mapbox::util::apply_visitor(
-                    VariantToStringVisitor(), directionFind->second);
+                std::string dir = variant_ns::visit(VariantToStringVisitor(),
+                                                    directionFind->second);
                 if ((toBusValue(threshold.level) != level) ||
                     (toBusValue(threshold.direction) != dir))
                 {
