diff --git a/sensors/src/Thresholds.cpp b/sensors/src/Thresholds.cpp
index c40d35d..32244d7 100644
--- a/sensors/src/Thresholds.cpp
+++ b/sensors/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))
                 {
