diff --git a/phosphor-power-sequencer/src/config_file_parser.cpp b/phosphor-power-sequencer/src/config_file_parser.cpp
index 3163aff..0812744 100644
--- a/phosphor-power-sequencer/src/config_file_parser.cpp
+++ b/phosphor-power-sequencer/src/config_file_parser.cpp
@@ -93,14 +93,15 @@
 namespace internal
 {
 
-GPIO parseGPIO(const json& element)
+GPIO parseGPIO(const json& element,
+               const std::map<std::string, std::string>& variables)
 {
     verifyIsObject(element);
     unsigned int propertyCount{0};
 
     // Required line property
     const json& lineElement = getRequiredProperty(element, "line");
-    unsigned int line = parseUnsignedInteger(lineElement);
+    unsigned int line = parseUnsignedInteger(lineElement, variables);
     ++propertyCount;
 
     // Optional active_low property
@@ -108,7 +109,7 @@
     auto activeLowIt = element.find("active_low");
     if (activeLowIt != element.end())
     {
-        activeLow = parseBoolean(*activeLowIt);
+        activeLow = parseBoolean(*activeLowIt, variables);
         ++propertyCount;
     }
 
@@ -141,14 +142,15 @@
     return {bus, address};
 }
 
-std::unique_ptr<Rail> parseRail(const json& element)
+std::unique_ptr<Rail> parseRail(
+    const json& element, const std::map<std::string, std::string>& variables)
 {
     verifyIsObject(element);
     unsigned int propertyCount{0};
 
     // Required name property
     const json& nameElement = getRequiredProperty(element, "name");
-    std::string name = parseString(nameElement);
+    std::string name = parseString(nameElement, false, variables);
     ++propertyCount;
 
     // Optional presence property
@@ -156,7 +158,7 @@
     auto presenceIt = element.find("presence");
     if (presenceIt != element.end())
     {
-        presence = parseString(*presenceIt);
+        presence = parseString(*presenceIt, false, variables);
         ++propertyCount;
     }
 
@@ -165,7 +167,7 @@
     auto pageIt = element.find("page");
     if (pageIt != element.end())
     {
-        page = parseUint8(*pageIt);
+        page = parseUint8(*pageIt, variables);
         ++propertyCount;
     }
 
@@ -174,7 +176,7 @@
     auto isPowerSupplyRailIt = element.find("is_power_supply_rail");
     if (isPowerSupplyRailIt != element.end())
     {
-        isPowerSupplyRail = parseBoolean(*isPowerSupplyRailIt);
+        isPowerSupplyRail = parseBoolean(*isPowerSupplyRailIt, variables);
         ++propertyCount;
     }
 
@@ -183,7 +185,7 @@
     auto checkStatusVoutIt = element.find("check_status_vout");
     if (checkStatusVoutIt != element.end())
     {
-        checkStatusVout = parseBoolean(*checkStatusVoutIt);
+        checkStatusVout = parseBoolean(*checkStatusVoutIt, variables);
         ++propertyCount;
     }
 
@@ -192,7 +194,8 @@
     auto compareVoltageToLimitIt = element.find("compare_voltage_to_limit");
     if (compareVoltageToLimitIt != element.end())
     {
-        compareVoltageToLimit = parseBoolean(*compareVoltageToLimitIt);
+        compareVoltageToLimit =
+            parseBoolean(*compareVoltageToLimitIt, variables);
         ++propertyCount;
     }
 
@@ -201,7 +204,7 @@
     auto gpioIt = element.find("gpio");
     if (gpioIt != element.end())
     {
-        gpio = parseGPIO(*gpioIt);
+        gpio = parseGPIO(*gpioIt, variables);
         ++propertyCount;
     }
 
@@ -219,25 +222,29 @@
                                   checkStatusVout, compareVoltageToLimit, gpio);
 }
 
-std::vector<std::unique_ptr<Rail>> parseRailArray(const json& element)
+std::vector<std::unique_ptr<Rail>> parseRailArray(
+    const json& element, const std::map<std::string, std::string>& variables)
 {
     verifyIsArray(element);
     std::vector<std::unique_ptr<Rail>> rails;
     for (auto& railElement : element)
     {
-        rails.emplace_back(parseRail(railElement));
+        rails.emplace_back(parseRail(railElement, variables));
     }
     return rails;
 }
 
 std::vector<std::unique_ptr<Rail>> parseRoot(const json& element)
 {
+    std::map<std::string, std::string> variables{};
+
     verifyIsObject(element);
     unsigned int propertyCount{0};
 
     // Required rails property
     const json& railsElement = getRequiredProperty(element, "rails");
-    std::vector<std::unique_ptr<Rail>> rails = parseRailArray(railsElement);
+    std::vector<std::unique_ptr<Rail>> rails =
+        parseRailArray(railsElement, variables);
     ++propertyCount;
 
     // Verify no invalid properties exist
diff --git a/phosphor-power-sequencer/src/config_file_parser.hpp b/phosphor-power-sequencer/src/config_file_parser.hpp
index a57083e..0f5fe3c 100644
--- a/phosphor-power-sequencer/src/config_file_parser.hpp
+++ b/phosphor-power-sequencer/src/config_file_parser.hpp
@@ -86,9 +86,11 @@
  * Throws an exception if parsing fails.
  *
  * @param element JSON element
+ * @param variables variables map used to expand variables in element value
  * @return GPIO object
  */
-GPIO parseGPIO(const nlohmann::json& element);
+GPIO parseGPIO(const nlohmann::json& element,
+               const std::map<std::string, std::string>& variables);
 
 /**
  * Parses a JSON element containing an i2c_interface object.
@@ -113,9 +115,12 @@
  * Throws an exception if parsing fails.
  *
  * @param element JSON element
+ * @param variables variables map used to expand variables in element value
  * @return Rail object
  */
-std::unique_ptr<Rail> parseRail(const nlohmann::json& element);
+std::unique_ptr<Rail> parseRail(
+    const nlohmann::json& element,
+    const std::map<std::string, std::string>& variables);
 
 /**
  * Parses a JSON element containing an array of rails.
@@ -125,10 +130,12 @@
  * Throws an exception if parsing fails.
  *
  * @param element JSON element
+ * @param variables variables map used to expand variables in element value
  * @return vector of Rail objects
  */
 std::vector<std::unique_ptr<Rail>> parseRailArray(
-    const nlohmann::json& element);
+    const nlohmann::json& element,
+    const std::map<std::string, std::string>& variables);
 
 /**
  * Parses the JSON root element of the entire configuration file.
