diff --git a/test/message/append.cpp b/test/message/append.cpp
index 12c0bf3..edae342 100644
--- a/test/message/append.cpp
+++ b/test/message/append.cpp
@@ -8,6 +8,7 @@
 #include <string>
 #include <tuple>
 #include <unordered_map>
+#include <variant>
 #include <vector>
 
 #include <gmock/gmock.h>
@@ -16,7 +17,6 @@
 namespace
 {
 
-namespace variant_ns = sdbusplus::message::variant_ns;
 using testing::Eq;
 using testing::MatcherCast;
 using testing::Pointee;
@@ -323,7 +323,7 @@
 {
     const bool b1 = false;
     const std::string s2{"asdf"};
-    const sdbusplus::message::variant<int, std::string, bool> v1{b1}, v2{s2};
+    const std::variant<int, std::string, bool> v1{b1}, v2{s2};
 
     {
         testing::InSequence seq;
@@ -341,7 +341,7 @@
 {
     std::vector<std::array<std::string, 3>> vas{{"a", "b", "c"},
                                                 {"d", "", "e"}};
-    std::map<std::string, sdbusplus::message::variant<int, double>> msv = {
+    std::map<std::string, std::variant<int, double>> msv = {
         {"a", 3.3}, {"b", 1}, {"c", 4.4}};
 
     {
@@ -364,18 +364,17 @@
         {
             expect_open_container(SD_BUS_TYPE_DICT_ENTRY, "sv");
             expect_basic_string(SD_BUS_TYPE_STRING, sv.first.c_str());
-            if (variant_ns::holds_alternative<int>(sv.second))
+            if (std::holds_alternative<int>(sv.second))
             {
                 expect_open_container(SD_BUS_TYPE_VARIANT, "i");
-                expect_basic<int>(SD_BUS_TYPE_INT32,
-                                  variant_ns::get<int>(sv.second));
+                expect_basic<int>(SD_BUS_TYPE_INT32, std::get<int>(sv.second));
                 expect_close_container();
             }
             else
             {
                 expect_open_container(SD_BUS_TYPE_VARIANT, "d");
                 expect_basic<double>(SD_BUS_TYPE_DOUBLE,
-                                     variant_ns::get<double>(sv.second));
+                                     std::get<double>(sv.second));
                 expect_close_container();
             }
             expect_close_container();
diff --git a/test/message/read.cpp b/test/message/read.cpp
index 55808d8..b973ba4 100644
--- a/test/message/read.cpp
+++ b/test/message/read.cpp
@@ -9,6 +9,7 @@
 #include <string>
 #include <tuple>
 #include <unordered_map>
+#include <variant>
 #include <vector>
 
 #include <gmock/gmock.h>
@@ -17,7 +18,6 @@
 namespace
 {
 
-namespace variant_ns = sdbusplus::message::variant_ns;
 using testing::DoAll;
 using testing::Return;
 using testing::StrEq;
@@ -477,7 +477,7 @@
 {
     const bool b1 = false;
     const std::string s2{"asdf"};
-    const sdbusplus::message::variant<int, std::string, bool> v1{b1}, v2{s2};
+    const std::variant<int, std::string, bool> v1{b1}, v2{s2};
 
     {
         testing::InSequence seq;
@@ -494,7 +494,7 @@
         expect_exit_container();
     }
 
-    sdbusplus::message::variant<int, std::string, bool> ret_v1, ret_v2;
+    std::variant<int, std::string, bool> ret_v1, ret_v2;
     new_message().read(ret_v1, ret_v2);
     EXPECT_EQ(v1, ret_v1);
     EXPECT_EQ(v2, ret_v2);
@@ -507,7 +507,7 @@
         expect_verify_type(SD_BUS_TYPE_VARIANT, "i", -EINVAL);
     }
 
-    sdbusplus::message::variant<int, bool> ret;
+    std::variant<int, bool> ret;
     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
 }
 
@@ -520,7 +520,7 @@
         expect_skip("v");
     }
 
-    sdbusplus::message::variant<int, bool> ret;
+    std::variant<int, bool> ret;
     new_message().read(ret);
 }
 
@@ -533,7 +533,7 @@
         expect_skip("v", -EINVAL);
     }
 
-    sdbusplus::message::variant<int, bool> ret;
+    std::variant<int, bool> ret;
     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
 }
 
@@ -545,7 +545,7 @@
         expect_enter_container(SD_BUS_TYPE_VARIANT, "i", -EINVAL);
     }
 
-    sdbusplus::message::variant<int, bool> ret;
+    std::variant<int, bool> ret;
     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
 }
 
@@ -559,7 +559,7 @@
         expect_exit_container(-EINVAL);
     }
 
-    sdbusplus::message::variant<int, bool> ret;
+    std::variant<int, bool> ret;
     EXPECT_THROW(new_message().read(ret), sdbusplus::exception::SdBusError);
 }
 
@@ -569,8 +569,8 @@
         {"a", "b", "c"},
         {"d", "", "e"},
     };
-    const std::map<std::string, sdbusplus::message::variant<int, double>> msv =
-        {{"a", 3.3}, {"b", 1}, {"c", 4.4}};
+    const std::map<std::string, std::variant<int, double>> msv = {
+        {"a", 3.3}, {"b", 1}, {"c", 4.4}};
 
     {
         testing::InSequence seq;
@@ -597,12 +597,11 @@
             expect_at_end(false, 0);
             expect_enter_container(SD_BUS_TYPE_DICT_ENTRY, "sv");
             expect_basic<const char*>(SD_BUS_TYPE_STRING, sv.first.c_str());
-            if (variant_ns::holds_alternative<int>(sv.second))
+            if (std::holds_alternative<int>(sv.second))
             {
                 expect_verify_type(SD_BUS_TYPE_VARIANT, "i", true);
                 expect_enter_container(SD_BUS_TYPE_VARIANT, "i");
-                expect_basic<int>(SD_BUS_TYPE_INT32,
-                                  variant_ns::get<int>(sv.second));
+                expect_basic<int>(SD_BUS_TYPE_INT32, std::get<int>(sv.second));
                 expect_exit_container();
             }
             else
@@ -611,7 +610,7 @@
                 expect_verify_type(SD_BUS_TYPE_VARIANT, "d", true);
                 expect_enter_container(SD_BUS_TYPE_VARIANT, "d");
                 expect_basic<double>(SD_BUS_TYPE_DOUBLE,
-                                     variant_ns::get<double>(sv.second));
+                                     std::get<double>(sv.second));
                 expect_exit_container();
             }
             expect_exit_container();
@@ -621,7 +620,7 @@
     }
 
     std::vector<std::set<std::string>> ret_vas;
-    std::map<std::string, sdbusplus::message::variant<int, double>> ret_msv;
+    std::map<std::string, std::variant<int, double>> ret_msv;
     new_message().read(ret_vas, ret_msv);
     EXPECT_EQ(vas, ret_vas);
     EXPECT_EQ(msv, ret_msv);
