diff --git a/include/commandutils.hpp b/include/commandutils.hpp
index e2f6523..3bd23f8 100644
--- a/include/commandutils.hpp
+++ b/include/commandutils.hpp
@@ -59,9 +59,8 @@
 using Association = std::tuple<std::string, std::string, std::string>;
 
 using DbusVariant =
-    sdbusplus::message::variant<std::string, bool, uint8_t, uint16_t, int16_t,
-                                uint32_t, int32_t, uint64_t, int64_t, double,
-                                std::vector<Association>>;
+    std::variant<std::string, bool, uint8_t, uint16_t, int16_t, uint32_t,
+                 int32_t, uint64_t, int64_t, double, std::vector<Association>>;
 using GetSubTreeType = std::vector<
     std::pair<std::string,
               std::vector<std::pair<std::string, std::vector<std::string>>>>>;
diff --git a/include/smbiosmdrv2handler.hpp b/include/smbiosmdrv2handler.hpp
index d677376..3d9b627 100644
--- a/include/smbiosmdrv2handler.hpp
+++ b/include/smbiosmdrv2handler.hpp
@@ -273,7 +273,7 @@
     bool smbiosTryLock(uint8_t flag, uint8_t index, uint16_t *session,
                        uint16_t timeout);
     int sdplusMdrv2GetProperty(const std::string &name,
-                               sdbusplus::message::variant<uint8_t> &value,
+                               std::variant<uint8_t> &value,
                                const std::string &service);
 
     Mdr2DirStruct smbiosDir{smbiosAgentVersion,
diff --git a/include/variantvisitors.hpp b/include/variantvisitors.hpp
index f8dbb0c..a440bfc 100644
--- a/include/variantvisitors.hpp
+++ b/include/variantvisitors.hpp
@@ -21,7 +21,6 @@
 namespace ipmi
 {
 
-using DbusVariant =
-    sdbusplus::message::variant<std::string, bool, uint8_t, uint16_t, int16_t,
-                                uint32_t, int32_t, uint64_t, int64_t, double>;
+using DbusVariant = std::variant<std::string, bool, uint8_t, uint16_t, int16_t,
+                                 uint32_t, int32_t, uint64_t, int64_t, double>;
 } // namespace ipmi
diff --git a/src/appcommands.cpp b/src/appcommands.cpp
index 870886e..8b37a1f 100644
--- a/src/appcommands.cpp
+++ b/src/appcommands.cpp
@@ -82,8 +82,7 @@
         sdbusplus::bus::match::rules::propertiesChanged(objInfo.first,
                                                         bmcStateIntf),
         [](sdbusplus::message::message& msg) {
-            std::map<std::string, sdbusplus::message::variant<std::string>>
-                props;
+            std::map<std::string, std::variant<std::string>> props;
             std::vector<std::string> inVal;
             std::string iface;
             try
diff --git a/src/smbioshandler.cpp b/src/smbioshandler.cpp
index 9ed05c2..aeaba5c 100644
--- a/src/smbioshandler.cpp
+++ b/src/smbioshandler.cpp
@@ -89,9 +89,9 @@
     return IPMI_CC_OK;
 }
 
-int sdplus_mdrv1_get_property(
-    const std::string& name,
-    sdbusplus::message::variant<uint8_t, uint16_t>& value, std::string& service)
+int sdplus_mdrv1_get_property(const std::string& name,
+                              std::variant<uint8_t, uint16_t>& value,
+                              std::string& service)
 {
     std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
     auto method = bus->new_method_call(service.c_str(), MDRV1_PATH,
@@ -114,7 +114,7 @@
     std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
     auto method = bus->new_method_call(service.c_str(), MDRV1_PATH,
                                        DBUS_PROPERTIES, "Set");
-    sdbusplus::message::variant<uint8_t> value{regionId};
+    std::variant<uint8_t> value{regionId};
     method.append(MDRV1_INTERFACE, "RegionId", value);
     auto region = bus->call(method);
     if (region.is_method_error())
@@ -133,7 +133,7 @@
     auto requestData = reinterpret_cast<const RegionCompleteRequest*>(request);
     uint8_t status;
 
-    sdbusplus::message::variant<uint8_t, uint16_t> value;
+    std::variant<uint8_t, uint16_t> value;
 
     if (*data_len != sizeof(RegionCompleteRequest))
     {
@@ -209,8 +209,8 @@
 {
     auto requestData = reinterpret_cast<const RegionReadRequest*>(request);
     auto responseData = reinterpret_cast<RegionReadResponse*>(response);
-    sdbusplus::message::variant<uint8_t, uint16_t> regUsedVal;
-    sdbusplus::message::variant<uint8_t, uint16_t> lockPolicyVal;
+    std::variant<uint8_t, uint16_t> regUsedVal;
+    std::variant<uint8_t, uint16_t> lockPolicyVal;
     std::vector<uint8_t> res;
 
     if (*data_len < sizeof(RegionReadRequest))
@@ -316,7 +316,7 @@
         return IPMI_CC_REQ_DATA_LEN_INVALID;
     }
 
-    sdbusplus::message::variant<uint8_t, uint16_t> value;
+    std::variant<uint8_t, uint16_t> value;
 
     *data_len = 0;
 
@@ -399,7 +399,7 @@
 {
     auto requestData = reinterpret_cast<const RegionLockRequest*>(request);
     uint8_t regionId = requestData->regionId - 1;
-    sdbusplus::message::variant<uint8_t, uint16_t> value;
+    std::variant<uint8_t, uint16_t> value;
     auto res = reinterpret_cast<uint8_t*>(response);
     uint8_t lockResponse;
 
diff --git a/src/smbiosmdrv2handler.cpp b/src/smbiosmdrv2handler.cpp
index 59390d1..425a890 100644
--- a/src/smbiosmdrv2handler.cpp
+++ b/src/smbiosmdrv2handler.cpp
@@ -59,7 +59,7 @@
 }
 
 int MDRV2::sdplusMdrv2GetProperty(const std::string &name,
-                                  sdbusplus::message::variant<uint8_t> &value,
+                                  std::variant<uint8_t> &value,
                                   const std::string &service)
 {
     std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
