diff --git a/phosphor-power-supply/psu_manager.cpp b/phosphor-power-supply/psu_manager.cpp
index 73a974e..c6d5855 100644
--- a/phosphor-power-supply/psu_manager.cpp
+++ b/phosphor-power-supply/psu_manager.cpp
@@ -154,44 +154,39 @@
             return;
         }
 
-        std::vector<std::string> models;
         propIt = properties.find("SupportedModel");
         if (propIt == properties.end())
         {
             return;
         }
-        const std::vector<std::string>* modelsPtr =
-            std::get_if<std::vector<std::string>>(&(propIt->second));
-        if (modelsPtr == nullptr)
+        const std::string* model = std::get_if<std::string>(&(propIt->second));
+        if (model == nullptr)
         {
             return;
         }
-        models = *modelsPtr;
 
-        sys_properties sys{0, 0};
+        sys_properties sys;
         propIt = properties.find("RedundantCount");
         if (propIt != properties.end())
         {
             const uint64_t* count = std::get_if<uint64_t>(&(propIt->second));
             if (count != nullptr)
             {
-                sys.maxPowerSupplies = *count;
+                sys.powerSupplyCount = *count;
             }
         }
         propIt = properties.find("InputVoltage");
         if (propIt != properties.end())
         {
-            const uint64_t* voltage = std::get_if<uint64_t>(&(propIt->second));
+            const std::vector<uint64_t>* voltage =
+                std::get_if<std::vector<uint64_t>>(&(propIt->second));
             if (voltage != nullptr)
             {
                 sys.inputVoltage = *voltage;
             }
         }
 
-        for (const auto& model : models)
-        {
-            supportedConfigs.insert(std::make_pair(model, sys));
-        }
+        supportedConfigs.emplace(*model, sys);
     }
     catch (std::exception& e)
     {
diff --git a/phosphor-power-supply/psu_manager.hpp b/phosphor-power-supply/psu_manager.hpp
index 9ceeed5..a59b2fc 100644
--- a/phosphor-power-supply/psu_manager.hpp
+++ b/phosphor-power-supply/psu_manager.hpp
@@ -11,8 +11,8 @@
 
 struct sys_properties
 {
-    int maxPowerSupplies;
-    int inputVoltage;
+    int powerSupplyCount;
+    std::vector<uint64_t> inputVoltage;
 };
 
 using namespace phosphor::power::psu;
@@ -225,7 +225,7 @@
      * @brief Map of supported PSU configurations that include the model name
      * and their properties.
      */
-    std::multimap<std::string, sys_properties> supportedConfigs;
+    std::map<std::string, sys_properties> supportedConfigs;
 
     /**
      * @brief The vector for power supplies.
diff --git a/utility.hpp b/utility.hpp
index 51fe31d..941c909 100644
--- a/utility.hpp
+++ b/utility.hpp
@@ -29,8 +29,7 @@
 using DbusInterfaceList = std::vector<DbusInterface>;
 using DbusSubtree =
     std::map<DbusPath, std::map<DbusService, DbusInterfaceList>>;
-using DbusVariant =
-    std::variant<uint64_t, std::string, std::vector<std::string>>;
+using DbusVariant = std::variant<uint64_t, std::string, std::vector<uint64_t>>;
 using DbusPropertyMap = std::map<DbusProperty, DbusVariant>;
 /**
  * @brief Get the service name from the mapper for the
