diff --git a/phosphor-regulators/src/meson.build b/phosphor-regulators/src/meson.build
index ef4bec8..7415050 100644
--- a/phosphor-regulators/src/meson.build
+++ b/phosphor-regulators/src/meson.build
@@ -12,6 +12,7 @@
     'exception_utils.cpp',
     'id_map.cpp',
     'pmbus_utils.cpp',
+    'rail.cpp',
     'system.cpp',
 
     'actions/if_action.cpp',
diff --git a/phosphor-regulators/src/rail.cpp b/phosphor-regulators/src/rail.cpp
new file mode 100644
index 0000000..e95b396
--- /dev/null
+++ b/phosphor-regulators/src/rail.cpp
@@ -0,0 +1,35 @@
+/**
+ * Copyright © 2020 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "rail.hpp"
+
+#include "chassis.hpp"
+#include "device.hpp"
+#include "system.hpp"
+
+namespace phosphor::power::regulators
+{
+
+void Rail::configure(System& system, Chassis& chassis, Device& device)
+{
+    // If configuration changes are defined for this rail, apply them
+    if (configuration)
+    {
+        configuration->execute(system, chassis, device, *this);
+    }
+}
+
+} // namespace phosphor::power::regulators
diff --git a/phosphor-regulators/src/rail.hpp b/phosphor-regulators/src/rail.hpp
index 19e8a58..9e0ce3d 100644
--- a/phosphor-regulators/src/rail.hpp
+++ b/phosphor-regulators/src/rail.hpp
@@ -25,6 +25,11 @@
 namespace phosphor::power::regulators
 {
 
+// Forward declarations to avoid circular dependencies
+class Chassis;
+class Device;
+class System;
+
 /**
  * @class Rail
  *
@@ -62,6 +67,20 @@
     }
 
     /**
+     * Configure this rail.
+     *
+     * Applies the configuration changes that are defined for this rail, if any.
+     *
+     * This method should be called during the boot before regulators are
+     * enabled.
+     *
+     * @param system system that contains the chassis
+     * @param chassis chassis that contains the device
+     * @param device device that contains this rail
+     */
+    void configure(System& system, Chassis& chassis, Device& device);
+
+    /**
      * Returns the configuration changes to apply to this rail, if any.
      *
      * @return Pointer to Configuration object.  Will equal nullptr if no
diff --git a/phosphor-regulators/test/configuration_tests.cpp b/phosphor-regulators/test/configuration_tests.cpp
index 0865be7..a7ba37f 100644
--- a/phosphor-regulators/test/configuration_tests.cpp
+++ b/phosphor-regulators/test/configuration_tests.cpp
@@ -25,9 +25,12 @@
 #include "mocked_i2c_interface.hpp"
 #include "pmbus_utils.hpp"
 #include "pmbus_write_vout_command_action.hpp"
+#include "presence_detection.hpp"
 #include "rail.hpp"
+#include "rule.hpp"
 #include "system.hpp"
 
+#include <cstdint>
 #include <memory>
 #include <optional>
 #include <utility>
diff --git a/phosphor-regulators/test/rail_tests.cpp b/phosphor-regulators/test/rail_tests.cpp
index a12211d..5781973 100644
--- a/phosphor-regulators/test/rail_tests.cpp
+++ b/phosphor-regulators/test/rail_tests.cpp
@@ -14,10 +14,19 @@
  * limitations under the License.
  */
 #include "action.hpp"
+#include "chassis.hpp"
 #include "configuration.hpp"
+#include "device.hpp"
+#include "i2c_interface.hpp"
+#include "journal.hpp"
 #include "mock_action.hpp"
+#include "mock_journal.hpp"
+#include "mocked_i2c_interface.hpp"
+#include "presence_detection.hpp"
 #include "rail.hpp"
+#include "rule.hpp"
 #include "sensor_monitoring.hpp"
+#include "system.hpp"
 
 #include <memory>
 #include <optional>
@@ -28,6 +37,8 @@
 
 using namespace phosphor::power::regulators;
 
+using ::testing::Return;
+
 TEST(RailTests, Constructor)
 {
     // Test where only required parameters are specified
@@ -67,6 +78,100 @@
     }
 }
 
+TEST(RailTests, Configure)
+{
+    // Test where Configuration was not specified in constructor
+    {
+        // Create Rail
+        std::unique_ptr<Rail> rail = std::make_unique<Rail>("vdd0");
+        Rail* railPtr = rail.get();
+
+        // Create Device that contains Rail
+        std::unique_ptr<i2c::MockedI2CInterface> i2cInterface =
+            std::make_unique<i2c::MockedI2CInterface>();
+        std::unique_ptr<PresenceDetection> presenceDetection{};
+        std::unique_ptr<Configuration> deviceConfiguration{};
+        std::vector<std::unique_ptr<Rail>> rails{};
+        rails.emplace_back(std::move(rail));
+        std::unique_ptr<Device> device = std::make_unique<Device>(
+            "reg1", true, "/system/chassis/motherboard/reg1",
+            std::move(i2cInterface), std::move(presenceDetection),
+            std::move(deviceConfiguration), std::move(rails));
+        Device* devicePtr = device.get();
+
+        // Create Chassis that contains Device
+        std::vector<std::unique_ptr<Device>> devices{};
+        devices.emplace_back(std::move(device));
+        std::unique_ptr<Chassis> chassis =
+            std::make_unique<Chassis>(1, std::move(devices));
+        Chassis* chassisPtr = chassis.get();
+
+        // Create System that contains Chassis
+        std::vector<std::unique_ptr<Rule>> rules{};
+        std::vector<std::unique_ptr<Chassis>> chassisVec{};
+        chassisVec.emplace_back(std::move(chassis));
+        System system{std::move(rules), std::move(chassisVec)};
+
+        // Call configure().  Should do nothing.
+        journal::clear();
+        railPtr->configure(system, *chassisPtr, *devicePtr);
+        EXPECT_EQ(journal::getDebugMessages().size(), 0);
+        EXPECT_EQ(journal::getErrMessages().size(), 0);
+    }
+
+    // Test where Configuration was specified in constructor
+    {
+        // Create Configuration
+        std::optional<double> volts{1.3};
+        std::unique_ptr<MockAction> action = std::make_unique<MockAction>();
+        EXPECT_CALL(*action, execute).Times(1).WillOnce(Return(true));
+        std::vector<std::unique_ptr<Action>> actions{};
+        actions.emplace_back(std::move(action));
+        std::unique_ptr<Configuration> configuration =
+            std::make_unique<Configuration>(volts, std::move(actions));
+
+        // Create Rail
+        std::unique_ptr<Rail> rail =
+            std::make_unique<Rail>("vddr1", std::move(configuration));
+        Rail* railPtr = rail.get();
+
+        // Create Device that contains Rail
+        std::unique_ptr<i2c::MockedI2CInterface> i2cInterface =
+            std::make_unique<i2c::MockedI2CInterface>();
+        std::unique_ptr<PresenceDetection> presenceDetection{};
+        std::unique_ptr<Configuration> deviceConfiguration{};
+        std::vector<std::unique_ptr<Rail>> rails{};
+        rails.emplace_back(std::move(rail));
+        std::unique_ptr<Device> device = std::make_unique<Device>(
+            "reg1", true, "/system/chassis/motherboard/reg1",
+            std::move(i2cInterface), std::move(presenceDetection),
+            std::move(deviceConfiguration), std::move(rails));
+        Device* devicePtr = device.get();
+
+        // Create Chassis that contains Device
+        std::vector<std::unique_ptr<Device>> devices{};
+        devices.emplace_back(std::move(device));
+        std::unique_ptr<Chassis> chassis =
+            std::make_unique<Chassis>(1, std::move(devices));
+        Chassis* chassisPtr = chassis.get();
+
+        // Create System that contains Chassis
+        std::vector<std::unique_ptr<Rule>> rules{};
+        std::vector<std::unique_ptr<Chassis>> chassisVec{};
+        chassisVec.emplace_back(std::move(chassis));
+        System system{std::move(rules), std::move(chassisVec)};
+
+        // Call configure().  Should execute Configuration and log debug message
+        // to journal.
+        journal::clear();
+        railPtr->configure(system, *chassisPtr, *devicePtr);
+        std::vector<std::string> expectedDebugMessages{
+            "Configuring vddr1: volts=1.300000"};
+        EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
+        EXPECT_EQ(journal::getErrMessages().size(), 0);
+    }
+}
+
 TEST(RailTests, GetConfiguration)
 {
     // Test where Configuration was not specified in constructor
