diff --git a/const.hpp b/const.hpp
index 5cab687..ef0793e 100644
--- a/const.hpp
+++ b/const.hpp
@@ -49,12 +49,12 @@
 constexpr uint8_t EXP_LOCATIN_CODE_MIN_LENGTH = 17;
 static constexpr auto SE_KWD_LENGTH = 7;
 static constexpr auto INVALID_NODE_NUMBER = -1;
-static constexpr auto RAINIER_2U = "50001001_0001";
-static constexpr auto RAINIER_2U_V2 = "50001001_0002";
-static constexpr auto RAINIER_4U = "50001000_0001";
-static constexpr auto RAINIER_4U_V2 = "50001000_0002";
-static constexpr auto RAINIER_1S4U = "50001002";
-static constexpr auto EVEREST = "50003000";
+static constexpr auto RAINIER_2U = "50001001.json";
+static constexpr auto RAINIER_2U_V2 = "50001001_v2.json";
+static constexpr auto RAINIER_4U = "50001000.json";
+static constexpr auto RAINIER_4U_V2 = "50001000_v2.json";
+static constexpr auto RAINIER_1S4U = "50001002.json";
+static constexpr auto EVEREST = "50003000.json";
 
 constexpr uint8_t KW_VPD_START_TAG = 0x82;
 constexpr uint8_t KW_VPD_END_TAG = 0x78;
diff --git a/ibm_vpd_app.cpp b/ibm_vpd_app.cpp
index c5c1452..7f9e383 100644
--- a/ibm_vpd_app.cpp
+++ b/ibm_vpd_app.cpp
@@ -40,14 +40,6 @@
 using namespace openpower::vpd::exceptions;
 using namespace phosphor::logging;
 
-static const deviceTreeMap deviceTreeSystemTypeMap = {
-    {RAINIER_2U, "conf-aspeed-bmc-ibm-rainier-p1.dtb"},
-    {RAINIER_2U_V2, "conf-aspeed-bmc-ibm-rainier.dtb"},
-    {RAINIER_4U, "conf-aspeed-bmc-ibm-rainier-4u-p1.dtb"},
-    {RAINIER_4U_V2, "conf-aspeed-bmc-ibm-rainier-4u.dtb"},
-    {RAINIER_1S4U, "conf-aspeed-bmc-ibm-rainier-1s4u.dtb"},
-    {EVEREST, "conf-aspeed-bmc-ibm-everest.dtb"}};
-
 /**
  * @brief Returns the power state for chassis0
  */
@@ -674,6 +666,13 @@
 {
     // Init with default dtb
     string newDeviceTree = "conf-aspeed-bmc-ibm-rainier-p1.dtb";
+    static const deviceTreeMap deviceTreeSystemTypeMap = {
+        {RAINIER_2U, "conf-aspeed-bmc-ibm-rainier-p1.dtb"},
+        {RAINIER_2U_V2, "conf-aspeed-bmc-ibm-rainier.dtb"},
+        {RAINIER_4U, "conf-aspeed-bmc-ibm-rainier-4u-p1.dtb"},
+        {RAINIER_4U_V2, "conf-aspeed-bmc-ibm-rainier-4u.dtb"},
+        {RAINIER_1S4U, "conf-aspeed-bmc-ibm-rainier-1s4u.dtb"},
+        {EVEREST, "conf-aspeed-bmc-ibm-everest.dtb"}};
 
     if (deviceTreeSystemTypeMap.find(systemType) !=
         deviceTreeSystemTypeMap.end())
@@ -1171,38 +1170,7 @@
         // set the U-boot environment variable for device-tree
         if constexpr (is_same<T, Parsed>::value)
         {
-            const string imKeyword = getIM(vpdMap);
-            const string hwKeyword = getHW(vpdMap);
-            string systemType = imKeyword;
-
-            // check If system has constraint then append HW version to it.
-            ifstream sysJson(SYSTEM_JSON);
-            if (!sysJson)
-            {
-                throw((VpdJsonException("Failed to access Json path",
-                                        SYSTEM_JSON)));
-            }
-
-            try
-            {
-                auto systemJson = json::parse(sysJson);
-                if (systemJson["system"].find(imKeyword) !=
-                    systemJson["system"].end())
-                {
-                    if (systemJson["system"][imKeyword].find("constraint") !=
-                        systemJson["system"][imKeyword].end())
-                    {
-                        systemType += "_" + hwKeyword;
-                    }
-                }
-            }
-            catch (const json::parse_error& ex)
-            {
-                throw((VpdJsonException("System Json parsing failed",
-                                        SYSTEM_JSON)));
-            }
-
-            setDevTreeEnv(systemType);
+            setDevTreeEnv(fs::path(getSystemsJson(vpdMap)).filename());
         }
     }
 
