diff --git a/activation.cpp b/activation.cpp
index 48baf6d..53e29f7 100644
--- a/activation.cpp
+++ b/activation.cpp
@@ -187,8 +187,7 @@
 
             sdbusplus::message::variant<std::string> result;
             reply.read(result);
-            auto applyTime =
-                sdbusplus::message::variant_ns::get<std::string>(result);
+            auto applyTime = std::get<std::string>(result);
             if (applyTime == applyTimeImmediate)
             {
                 return true;
@@ -286,7 +285,7 @@
     {
         auto reply = bus.call(method);
         reply.read(fieldMode);
-        return sdbusplus::message::variant_ns::get<bool>(fieldMode);
+        return std::get<bool>(fieldMode);
     }
     catch (const SdBusError& e)
     {
diff --git a/item_updater.cpp b/item_updater.cpp
index 882acbb..32e046c 100644
--- a/item_updater.cpp
+++ b/item_updater.cpp
@@ -25,7 +25,6 @@
     using SVersion = server::Version;
     using VersionPurpose = SVersion::VersionPurpose;
     namespace msg = sdbusplus::message;
-    namespace variant_ns = msg::variant_ns;
 
     sdbusplus::message::object_path objPath;
     std::map<std::string, std::map<std::string, msg::variant<std::string>>>
@@ -47,7 +46,7 @@
                 {
                     // Only process the Host and System images
                     auto value = SVersion::convertVersionPurposeFromString(
-                        variant_ns::get<std::string>(property.second));
+                        std::get<std::string>(property.second));
 
                     if (value == VersionPurpose::Host ||
                         value == VersionPurpose::System)
@@ -57,7 +56,7 @@
                 }
                 else if (property.first == "Version")
                 {
-                    version = variant_ns::get<std::string>(property.second);
+                    version = std::get<std::string>(property.second);
                 }
             }
         }
@@ -67,7 +66,7 @@
             {
                 if (property.first == "Path")
                 {
-                    filePath = variant_ns::get<std::string>(property.second);
+                    filePath = std::get<std::string>(property.second);
                 }
             }
         }
@@ -244,8 +243,7 @@
     {
         auto response = bus.call(method);
         response.read(currentChassisState);
-        auto strParam = sdbusplus::message::variant_ns::get<std::string>(
-            currentChassisState);
+        auto strParam = std::get<std::string>(currentChassisState);
         return (strParam != CHASSIS_STATE_OFF);
     }
     catch (const sdbusplus::exception::SdBusError& e)
diff --git a/msl_verify.cpp b/msl_verify.cpp
index b49b079..0de9da3 100644
--- a/msl_verify.cpp
+++ b/msl_verify.cpp
@@ -15,7 +15,6 @@
 {
 
 namespace fs = std::experimental::filesystem;
-namespace variant_ns = sdbusplus::message::variant_ns;
 using namespace phosphor::logging;
 using AssociationList =
     std::vector<std::tuple<std::string, std::string, std::string>>;
@@ -101,7 +100,7 @@
         return {};
     }
 
-    auto& assocs = variant_ns::get<AssociationList>(associations);
+    auto& assocs = std::get<AssociationList>(associations);
     if (assocs.empty())
     {
         return {};
@@ -121,7 +120,7 @@
             try
             {
                 response.read(functionalVersion);
-                return variant_ns::get<std::string>(functionalVersion);
+                return std::get<std::string>(functionalVersion);
             }
             catch (const sdbusplus::exception::SdBusError& e)
             {
diff --git a/version.cpp b/version.cpp
index c6e43fc..59d40da 100644
--- a/version.cpp
+++ b/version.cpp
@@ -153,8 +153,7 @@
     {
         if (p.first == "CurrentPowerState")
         {
-            chassisState =
-                sdbusplus::message::variant_ns::get<std::string>(p.second);
+            chassisState = std::get<std::string>(p.second);
         }
     }
     if (chassisState.empty())
