diff --git a/src/appcommands.cpp b/src/appcommands.cpp
index 1d61889..722c471 100644
--- a/src/appcommands.cpp
+++ b/src/appcommands.cpp
@@ -20,6 +20,7 @@
 #include <ipmid/utils.hpp>
 #include <nlohmann/json.hpp>
 #include <phosphor-logging/log.hpp>
+#include <types.hpp>
 
 #include <fstream>
 #include <regex>
@@ -83,7 +84,7 @@
         sdbusplus::bus::match::rules::propertiesChanged(objInfo.first,
                                                         bmcStateIntf),
         [](sdbusplus::message_t& msg) {
-            std::map<std::string, std::variant<std::string>> props;
+            std::map<std::string, ipmi::DbusVariant> props;
             std::vector<std::string> inVal;
             std::string iface;
             try
diff --git a/src/biosconfigcommands.cpp b/src/biosconfigcommands.cpp
index 83b8959..c444112 100644
--- a/src/biosconfigcommands.cpp
+++ b/src/biosconfigcommands.cpp
@@ -121,8 +121,7 @@
 };
 
 using PendingAttributesType =
-    std::map<std::string,
-             std::tuple<std::string, std::variant<int64_t, std::string>>>;
+    std::map<std::string, std::tuple<std::string, ipmi::DbusVariant>>;
 
 AttributesType getAttrType(const std::string_view typeDbus)
 {
@@ -146,7 +145,7 @@
 }
 
 bool fillPayloadData(std::string& payloadData,
-                     const std::variant<int64_t, std::string>& attributes,
+                     const ipmi::DbusVariant& attributes,
                      const std::string_view key, AttributesType& attrType)
 {
     payloadData += key;
diff --git a/src/bmccontrolservices.cpp b/src/bmccontrolservices.cpp
index e30c4a9..484c426 100644
--- a/src/bmccontrolservices.cpp
+++ b/src/bmccontrolservices.cpp
@@ -20,6 +20,7 @@
 #include <ipmid/api.hpp>
 #include <ipmid/utils.hpp>
 #include <phosphor-logging/log.hpp>
+#include <types.hpp>
 
 #include <variant>
 
@@ -148,7 +149,7 @@
                             yield, ec, getServiceConfigMgrName().c_str(),
                             obj.first.str, dBusPropIntf, "Set",
                             serviceConfigAttrIntf, propMasked,
-                            std::variant<bool>(!state));
+                            ipmi::DbusVariant(!state));
                         checkAndThrowError(ec, "Set Masked property failed");
                         // Multiple instances may be present, so continue
                     }
diff --git a/src/firmware-update.cpp b/src/firmware-update.cpp
index b622d31..05b6576 100644
--- a/src/firmware-update.cpp
+++ b/src/firmware-update.cpp
@@ -476,8 +476,8 @@
             "xyz.openbmc_project.Software.BMC.Updater", objPath,
             "org.freedesktop.DBus.Properties", "Set",
             "xyz.openbmc_project.Software.Activation", "RequestedActivation",
-            std::variant<std::string>("xyz.openbmc_project.Software.Activation."
-                                      "RequestedActivations.Active"));
+            ipmi::DbusVariant("xyz.openbmc_project.Software.Activation."
+                              "RequestedActivations.Active"));
     }
     else
     {
@@ -582,9 +582,9 @@
     auto callback = [&](sdbusplus::message_t& m) {
         bool flag = false;
 
-        std::vector<std::pair<
-            std::string,
-            std::vector<std::pair<std::string, std::variant<std::string>>>>>
+        std::vector<
+            std::pair<std::string,
+                      std::vector<std::pair<std::string, ipmi::DbusVariant>>>>
             intfPropsPair;
         sdbusplus::message::object_path objPath;
 
diff --git a/src/manufacturingcommands.cpp b/src/manufacturingcommands.cpp
index 42185a7..df47887 100644
--- a/src/manufacturingcommands.cpp
+++ b/src/manufacturingcommands.cpp
@@ -21,6 +21,7 @@
 #include <ipmid/api.hpp>
 #include <manufacturingcommands.hpp>
 #include <oemcommands.hpp>
+#include <types.hpp>
 
 #include <filesystem>
 #include <fstream>
diff --git a/src/oemcommands.cpp b/src/oemcommands.cpp
index 910330d..1f8b99b 100644
--- a/src/oemcommands.cpp
+++ b/src/oemcommands.cpp
@@ -1658,8 +1658,7 @@
 
 bool getFanProfileInterface(
     sdbusplus::bus_t& bus,
-    boost::container::flat_map<
-        std::string, std::variant<std::vector<std::string>, std::string>>& resp)
+    boost::container::flat_map<std::string, ipmi::DbusVariant>& resp)
 {
     auto call = bus.new_method_call(settingsBusName, thermalModePath, PROP_INTF,
                                     "GetAll");
@@ -1715,9 +1714,7 @@
     }
 
     // todo: tell bios to only send first 2 bytes
-    boost::container::flat_map<
-        std::string, std::variant<std::vector<std::string>, std::string>>
-        profileData;
+    boost::container::flat_map<std::string, ipmi::DbusVariant> profileData;
     std::shared_ptr<sdbusplus::asio::connection> dbus = getSdBus();
     if (!getFanProfileInterface(*dbus, profileData))
     {
@@ -1791,9 +1788,7 @@
         return ipmi::responseInvalidFieldRequest();
     }
 
-    boost::container::flat_map<
-        std::string, std::variant<std::vector<std::string>, std::string>>
-        profileData;
+    boost::container::flat_map<std::string, ipmi::DbusVariant> profileData;
 
     std::shared_ptr<sdbusplus::asio::connection> dbus = getSdBus();
     if (!getFanProfileInterface(*dbus, profileData))
@@ -2277,8 +2272,7 @@
     }
 }
 
-using crConfigVariant =
-    std::variant<bool, uint8_t, uint32_t, std::vector<uint8_t>, std::string>;
+using crConfigVariant = ipmi::DbusVariant;
 
 int setCRConfig(ipmi::Context::ptr ctx, const std::string& property,
                 const crConfigVariant& value,
@@ -2941,7 +2935,7 @@
     uint8_t specialModeValue = 0;
 
     boost::system::error_code ec;
-    auto varRestrMode = ctx->bus->yield_method_call<std::variant<std::string>>(
+    auto varRestrMode = ctx->bus->yield_method_call<ipmi::DbusVariant>(
         ctx->yield, ec, restricionModeService, restricionModeBasePath,
         dBusPropertyIntf, dBusPropertyGetMethod, restricionModeIntf,
         restricionModeProperty);
@@ -2955,11 +2949,10 @@
     restrictionModeValue = static_cast<uint8_t>(
         securityNameSpace::RestrictionMode::convertModesFromString(
             std::get<std::string>(varRestrMode)));
-    auto varSpecialMode =
-        ctx->bus->yield_method_call<std::variant<std::string>>(
-            ctx->yield, ec, specialModeService, specialModeBasePath,
-            dBusPropertyIntf, dBusPropertyGetMethod, specialModeIntf,
-            specialModeProperty);
+    auto varSpecialMode = ctx->bus->yield_method_call<ipmi::DbusVariant>(
+        ctx->yield, ec, specialModeService, specialModeBasePath,
+        dBusPropertyIntf, dBusPropertyGetMethod, specialModeIntf,
+        specialModeProperty);
     if (ec)
     {
         phosphor::logging::log<phosphor::logging::level::ERR>(
@@ -3017,7 +3010,7 @@
     }
 
     boost::system::error_code ec;
-    auto varRestrMode = ctx->bus->yield_method_call<std::variant<std::string>>(
+    auto varRestrMode = ctx->bus->yield_method_call<ipmi::DbusVariant>(
         ctx->yield, ec, restricionModeService, restricionModeBasePath,
         dBusPropertyIntf, dBusPropertyGetMethod, restricionModeIntf,
         restricionModeProperty);
@@ -3050,7 +3043,7 @@
         ctx->yield, ec, restricionModeService, restricionModeBasePath,
         dBusPropertyIntf, dBusPropertySetMethod, restricionModeIntf,
         restricionModeProperty,
-        static_cast<std::variant<std::string>>(
+        static_cast<ipmi::DbusVariant>(
             securityNameSpace::convertForMessage(reqMode)));
 
     if (ec)
@@ -3078,10 +3071,9 @@
             ctx->yield, ec, specialModeService, specialModeBasePath,
             dBusPropertyIntf, dBusPropertySetMethod, specialModeIntf,
             specialModeProperty,
-            static_cast<std::variant<std::string>>(
-                securityNameSpace::convertForMessage(
-                    static_cast<securityNameSpace::SpecialMode::Modes>(
-                        specialMode.value()))));
+            static_cast<ipmi::DbusVariant>(securityNameSpace::convertForMessage(
+                static_cast<securityNameSpace::SpecialMode::Modes>(
+                    specialMode.value()))));
 
         if (ec)
         {
@@ -3349,8 +3341,7 @@
     {
         std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
 
-        std::variant<std::vector<uint8_t>> offsets =
-            field.get<std::vector<uint8_t>>();
+        ipmi::DbusVariant offsets = field.get<std::vector<uint8_t>>();
         auto call = bus->new_method_call(
             settingsBusName, dimmOffset::offsetPath, PROP_INTF, "Set");
         call.append(dimmOffset::offsetInterface, dimmOffset::property, offsets);
@@ -3656,10 +3647,7 @@
     return ipmi::responseSuccess();
 }
 
-using BasicVariantType =
-    std::variant<std::vector<std::string>, std::vector<uint64_t>, std::string,
-                 int64_t, uint64_t, double, int32_t, uint32_t, int16_t,
-                 uint16_t, uint8_t, bool>;
+using BasicVariantType = ipmi::DbusVariant;
 using PropertyMapType =
     boost::container::flat_map<std::string, BasicVariantType>;
 static constexpr const std::array<const char*, 1> psuPresenceTypes = {
diff --git a/src/sensorcommands.cpp b/src/sensorcommands.cpp
index b8b40e0..0fb04f7 100644
--- a/src/sensorcommands.cpp
+++ b/src/sensorcommands.cpp
@@ -128,8 +128,7 @@
     "type='signal',member='PropertiesChanged',interface='org.freedesktop.DBus."
     "Properties',arg0namespace='xyz.openbmc_project.Sensor.Threshold'",
     [](sdbusplus::message_t& m) {
-        boost::container::flat_map<std::string, std::variant<bool, double>>
-            values;
+        boost::container::flat_map<std::string, ipmi::DbusVariant> values;
         m.read(std::string(), values);
 
         auto findAssert =
diff --git a/src/smbioshandler.cpp b/src/smbioshandler.cpp
index e330e5a..cc882be 100644
--- a/src/smbioshandler.cpp
+++ b/src/smbioshandler.cpp
@@ -20,6 +20,7 @@
 #include <phosphor-logging/elog-errors.hpp>
 #include <phosphor-logging/log.hpp>
 #include <smbioshandler.hpp>
+#include <types.hpp>
 #include <xyz/openbmc_project/Common/error.hpp>
 
 #include <cstdint>
@@ -90,8 +91,7 @@
     return IPMI_CC_OK;
 }
 
-int sdplus_mdrv1_get_property(const std::string& name,
-                              std::variant<uint8_t, uint16_t>& value,
+int sdplus_mdrv1_get_property(const std::string& name, ipmi::DbusVariant& value,
                               std::string& service)
 {
     std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
@@ -115,7 +115,7 @@
     std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
     auto method = bus->new_method_call(service.c_str(), MDRV1_PATH,
                                        DBUS_PROPERTIES, "Set");
-    std::variant<uint8_t> value{regionId};
+    ipmi::DbusVariant value{regionId};
     method.append(MDRV1_INTERFACE, "RegionId", value);
     auto region = bus->call(method);
     if (region.is_method_error())
@@ -134,7 +134,7 @@
     auto requestData = reinterpret_cast<const RegionCompleteRequest*>(request);
     uint8_t status;
 
-    std::variant<uint8_t, uint16_t> value;
+    ipmi::DbusVariant value;
 
     if (*data_len != sizeof(RegionCompleteRequest))
     {
@@ -210,8 +210,8 @@
 {
     auto requestData = reinterpret_cast<const RegionReadRequest*>(request);
     auto responseData = reinterpret_cast<RegionReadResponse*>(response);
-    std::variant<uint8_t, uint16_t> regUsedVal;
-    std::variant<uint8_t, uint16_t> lockPolicyVal;
+    ipmi::DbusVariant regUsedVal;
+    ipmi::DbusVariant lockPolicyVal;
     std::vector<uint8_t> res;
 
     if (*data_len < sizeof(RegionReadRequest))
@@ -317,7 +317,7 @@
         return IPMI_CC_REQ_DATA_LEN_INVALID;
     }
 
-    std::variant<uint8_t, uint16_t> value;
+    ipmi::DbusVariant value;
 
     *data_len = 0;
 
@@ -400,7 +400,7 @@
 {
     auto requestData = reinterpret_cast<const RegionLockRequest*>(request);
     uint8_t regionId = requestData->regionId - 1;
-    std::variant<uint8_t, uint16_t> value;
+    ipmi::DbusVariant value;
     auto res = reinterpret_cast<uint8_t*>(response);
     uint8_t lockResponse;
 
diff --git a/src/smbiosmdrv2handler.cpp b/src/smbiosmdrv2handler.cpp
index 59f38fa..c5d00a1 100644
--- a/src/smbiosmdrv2handler.cpp
+++ b/src/smbiosmdrv2handler.cpp
@@ -60,7 +60,7 @@
 }
 
 int MDRV2::sdplusMdrv2GetProperty(const std::string& name,
-                                  std::variant<uint8_t>& value,
+                                  ipmi::DbusVariant& value,
                                   const std::string& service)
 {
     std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
@@ -297,7 +297,7 @@
         return ipmi::responseParmOutOfRange();
     }
 
-    std::variant<uint8_t> value = static_cast<uint8_t>(0);
+    ipmi::DbusVariant value = static_cast<uint8_t>(0);
     if (0 != mdrv2->sdplusMdrv2GetProperty("DirectoryEntries", value, service))
     {
         phosphor::logging::log<phosphor::logging::level::ERR>(
