diff --git a/example/asio-example.cpp b/example/asio-example.cpp
index 61916a5..0e20f41 100644
--- a/example/asio-example.cpp
+++ b/example/asio-example.cpp
@@ -10,8 +10,9 @@
 #include <sdbusplus/exception.hpp>
 #include <sdbusplus/server.hpp>
 #include <sdbusplus/timer.hpp>
+#include <variant>
 
-using variant = sdbusplus::message::variant<int, std::string>;
+using variant = std::variant<int, std::string>;
 
 int foo(int test)
 {
@@ -65,15 +66,13 @@
         yield[ec], "xyz.openbmc_project.asio-test", "/xyz/openbmc_project/test",
         "org.freedesktop.DBus.Properties", "Get", "xyz.openbmc_project.test",
         "int");
-    if (!ec && sdbusplus::message::variant_ns::get<int>(testValue) == 24)
+    if (!ec && std::get<int>(testValue) == 24)
     {
         std::cout << "async call to Properties.Get serialized via yield OK!\n";
     }
     else
     {
-        std::cout << "ec = " << ec << ": "
-                  << sdbusplus::message::variant_ns::get<int>(testValue)
-                  << "\n";
+        std::cout << "ec = " << ec << ": " << std::get<int>(testValue) << "\n";
     }
     conn->yield_method_call<void>(
         yield[ec], "xyz.openbmc_project.asio-test", "/xyz/openbmc_project/test",
@@ -83,15 +82,13 @@
         yield[ec], "xyz.openbmc_project.asio-test", "/xyz/openbmc_project/test",
         "org.freedesktop.DBus.Properties", "Get", "xyz.openbmc_project.test",
         "int");
-    if (!ec && sdbusplus::message::variant_ns::get<int>(testValue) == 42)
+    if (!ec && std::get<int>(testValue) == 42)
     {
         std::cout << "async call to Properties.Get serialized via yield OK!\n";
     }
     else
     {
-        std::cout << "ec = " << ec << ": "
-                  << sdbusplus::message::variant_ns::get<int>(testValue)
-                  << "\n";
+        std::cout << "ec = " << ec << ": " << std::get<int>(testValue) << "\n";
     }
 }
 
diff --git a/sdbusplus/message/append.hpp b/sdbusplus/message/append.hpp
index 32d4b46..058e277 100644
--- a/sdbusplus/message/append.hpp
+++ b/sdbusplus/message/append.hpp
@@ -8,6 +8,8 @@
 #include <sdbusplus/utility/tuple_to_array.hpp>
 #include <sdbusplus/utility/type_traits.hpp>
 #include <tuple>
+#include <type_traits>
+#include <variant>
 
 namespace sdbusplus
 {
@@ -96,7 +98,7 @@
 };
 // variant needs to be broken down into components.
 template <typename... Args>
-struct can_append_multiple<variant<Args...>> : std::false_type
+struct can_append_multiple<std::variant<Args...>> : std::false_type
 {
 };
 
@@ -288,7 +290,7 @@
 
 /** @brief Specialization of append_single for std::variant. */
 template <typename... Args>
-struct append_single<variant<Args...>>
+struct append_single<std::variant<Args...>>
 {
     template <typename S, typename = std::enable_if_t<0 < sizeof...(Args)>>
     static void op(sdbusplus::SdBusInterface* intf, sd_bus_message* m, S&& s)
diff --git a/sdbusplus/message/read.hpp b/sdbusplus/message/read.hpp
index 7a99570..5e2b899 100644
--- a/sdbusplus/message/read.hpp
+++ b/sdbusplus/message/read.hpp
@@ -6,7 +6,11 @@
 #include <sdbusplus/message/types.hpp>
 #include <sdbusplus/utility/tuple_to_array.hpp>
 #include <sdbusplus/utility/type_traits.hpp>
+#include <string>
 #include <tuple>
+#include <type_traits>
+#include <utility>
+#include <variant>
 
 namespace sdbusplus
 {
@@ -100,7 +104,7 @@
 };
 // variant needs to be broken down into components.
 template <typename... Args>
-struct can_read_multiple<variant<Args...>> : std::false_type
+struct can_read_multiple<std::variant<Args...>> : std::false_type
 {
 };
 
@@ -371,7 +375,7 @@
 
 /** @brief Specialization of read_single for std::variant. */
 template <typename... Args>
-struct read_single<variant<Args...>>
+struct read_single<std::variant<Args...>>
 {
     template <typename S, typename S1, typename... Args1>
     static void read(sdbusplus::SdBusInterface* intf, sd_bus_message* m, S&& s)
diff --git a/sdbusplus/message/types.hpp b/sdbusplus/message/types.hpp
index eb7407f..bd5946b 100644
--- a/sdbusplus/message/types.hpp
+++ b/sdbusplus/message/types.hpp
@@ -264,7 +264,7 @@
 };
 
 template <typename... Args>
-struct type_id<variant<Args...>> : tuple_type_id<SD_BUS_TYPE_VARIANT>
+struct type_id<std::variant<Args...>> : tuple_type_id<SD_BUS_TYPE_VARIANT>
 {
 };
 
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);
diff --git a/tools/sdbusplus/property.py b/tools/sdbusplus/property.py
index 661bce4..e5071ff 100644
--- a/tools/sdbusplus/property.py
+++ b/tools/sdbusplus/property.py
@@ -132,8 +132,7 @@
                           'params': 0},
             'array': {'cppName': 'std::vector', 'params': 1},
             'struct': {'cppName': 'std::tuple', 'params': -1},
-            'variant': {'cppName': 'sdbusplus::message::variant',
-                        'params': -1},
+            'variant': {'cppName': 'std::variant', 'params': -1},
             'dict': {'cppName': 'std::map', 'params': 2},
             'enum': {'cppName': 'enum', 'params': 1, 'noparse': True}}
 
diff --git a/tools/sdbusplus/templates/interface.mako.server.cpp.in b/tools/sdbusplus/templates/interface.mako.server.cpp.in
index a47ff38..5af2749 100644
--- a/tools/sdbusplus/templates/interface.mako.server.cpp.in
+++ b/tools/sdbusplus/templates/interface.mako.server.cpp.in
@@ -1,7 +1,12 @@
 #include <algorithm>
+#include <map>
 #include <sdbusplus/sdbus.hpp>
 #include <sdbusplus/server.hpp>
 #include <sdbusplus/exception.hpp>
+#include <string>
+#include <tuple>
+#include <variant>
+
 #include <${"/".join(interface.name.split('.') + [ 'server.hpp' ])}>
 % for m in interface.methods + interface.properties + interface.signals:
 ${ m.cpp_prototype(loader, interface=interface, ptype='callback-cpp-includes') }
@@ -61,7 +66,7 @@
         % for p in interface.properties:
     if (_name == "${p.name}")
     {
-        auto& v = message::variant_ns::get<${p.cppTypeParam(interface.name)}>(\
+        auto& v = std::get<${p.cppTypeParam(interface.name)}>(\
 val);
         ${p.camelCase}(v, skipSignal);
         return;
diff --git a/tools/sdbusplus/templates/interface.mako.server.hpp b/tools/sdbusplus/templates/interface.mako.server.hpp
index 93cf6e7..e5b17ea 100644
--- a/tools/sdbusplus/templates/interface.mako.server.hpp
+++ b/tools/sdbusplus/templates/interface.mako.server.hpp
@@ -1,8 +1,11 @@
 #pragma once
-#include <tuple>
-#include <systemd/sd-bus.h>
+#include <map>
+#include <string>
 #include <sdbusplus/sdbus.hpp>
 #include <sdbusplus/server.hpp>
+#include <systemd/sd-bus.h>
+#include <tuple>
+#include <variant>
 % for m in interface.methods + interface.properties + interface.signals:
 ${ m.cpp_prototype(loader, interface=interface, ptype='callback-hpp-includes') }
 % endfor
@@ -58,7 +61,7 @@
     % endfor
 
     % if interface.properties:
-        using PropertiesVariant = sdbusplus::message::variant<
+        using PropertiesVariant = std::variant<
                 ${",\n                ".join(setOfPropertyTypes())}>;
 
         /** @brief Constructor to initialize the object from a map of
