diff --git a/functor.hpp b/functor.hpp
index d00ec48..0c328d9 100644
--- a/functor.hpp
+++ b/functor.hpp
@@ -227,8 +227,7 @@
             return false;
         }
 
-        return _condition(std::forward<T>(
-            sdbusplus::message::variant_ns::get<T>(it->second)));
+        return _condition(std::forward<T>(std::get<T>(it->second)));
     }
 
   private:
@@ -354,8 +353,7 @@
     {
         sdbusplus::message::variant<T> value;
         msg.read(value);
-        return _condition(
-            std::forward<T>(sdbusplus::message::variant_ns::get<T>(value)));
+        return _condition(std::forward<T>(std::get<T>(value)));
     }
 
     /** @brief Retrieve a property value from inventory and test it.
@@ -369,7 +367,7 @@
         if (_getProperty)
         {
             auto variant = _getProperty(mgr);
-            auto value = sdbusplus::message::variant_ns::get<T>(variant);
+            auto value = std::get<T>(variant);
             return _condition(std::forward<T>(value));
         }
         return false;
diff --git a/test/test.cpp b/test/test.cpp
index cf61b84..2222580 100644
--- a/test/test.cpp
+++ b/test/test.cpp
@@ -425,8 +425,8 @@
             sig.read(sigInterface);
             assert(sigInterface == "xyz.openbmc_project.Example.Iface1");
             sig.read(sigProperties);
-            assert(sdbusplus::message::variant_ns::get<std::string>(
-                       sigProperties["ExampleProperty1"]) == "changed");
+            assert(std::get<std::string>(sigProperties["ExampleProperty1"]) ==
+                   "changed");
         }
     }
 }
diff --git a/test/utils_test.cpp b/test/utils_test.cpp
index c1f15f7..55e2363 100644
--- a/test/utils_test.cpp
+++ b/test/utils_test.cpp
@@ -2,18 +2,18 @@
 
 #include <gtest/gtest.h>
 
-using namespace sdbusplus::message::variant_ns;
 using namespace phosphor::inventory::manager;
 using namespace std::string_literals;
 
 TEST(UtilsTest, TestVariantVisitor)
 {
-    variant<int, std::string> ib1(100);
-    auto converted1 = convertVariant<variant<int>>(ib1);
-    EXPECT_TRUE(get<int>(converted1) == 100);
+    std::variant<int, std::string> ib1(100);
+    auto converted1 = convertVariant<std::variant<int>>(ib1);
+    EXPECT_TRUE(std::get<int>(converted1) == 100);
 
-    variant<int, std::string> ib2(100);
-    EXPECT_THROW(convertVariant<variant<std::string>>(ib2), std::runtime_error);
+    std::variant<int, std::string> ib2(100);
+    EXPECT_THROW(convertVariant<std::variant<std::string>>(ib2),
+                 std::runtime_error);
 }
 
 TEST(UtilsTest, TestCompareFirst)
diff --git a/types.hpp b/types.hpp
index bd43bdf..7cb2e9d 100644
--- a/types.hpp
+++ b/types.hpp
@@ -29,8 +29,7 @@
 
 /** @brief Inventory manager supported property types. */
 using InterfaceVariantType =
-    sdbusplus::message::variant_ns::variant<bool, int64_t, std::string,
-                                            std::vector<uint8_t>>;
+    std::variant<bool, int64_t, std::string, std::vector<uint8_t>>;
 
 template <typename T>
 using InterfaceType = std::map<std::string, T>;
diff --git a/utils.hpp b/utils.hpp
index a22237a..5be8bf5 100644
--- a/utils.hpp
+++ b/utils.hpp
@@ -74,7 +74,7 @@
 template <typename V, typename Arg>
 auto convertVariant(Arg&& v)
 {
-    return sdbusplus::message::variant_ns::visit(MakeVariantVisitor<V>(), v);
+    return std::visit(MakeVariantVisitor<V>(), v);
 }
 
 /** @struct CompareFirst
