diff --git a/phosphor-regulators/src/chassis.cpp b/phosphor-regulators/src/chassis.cpp
index 29ebb79..ebe446c 100644
--- a/phosphor-regulators/src/chassis.cpp
+++ b/phosphor-regulators/src/chassis.cpp
@@ -43,7 +43,7 @@
     }
 }
 
-void Chassis::configure(System& system)
+void Chassis::configure(Services& services, System& system)
 {
     // Log info message in journal; important for verifying success of boot
     journal::logInfo("Configuring chassis " + std::to_string(number));
@@ -51,7 +51,7 @@
     // Configure devices
     for (std::unique_ptr<Device>& device : devices)
     {
-        device->configure(system, *this);
+        device->configure(services, system, *this);
     }
 }
 
diff --git a/phosphor-regulators/src/chassis.hpp b/phosphor-regulators/src/chassis.hpp
index 4423926..3addd5e 100644
--- a/phosphor-regulators/src/chassis.hpp
+++ b/phosphor-regulators/src/chassis.hpp
@@ -17,6 +17,7 @@
 
 #include "device.hpp"
 #include "id_map.hpp"
+#include "services.hpp"
 
 #include <memory>
 #include <stdexcept>
@@ -95,9 +96,10 @@
      * This method should be called during the boot before regulators are
      * enabled.
      *
+     * @param services system services like error logging and the journal
      * @param system system that contains this chassis
      */
-    void configure(System& system);
+    void configure(Services& services, System& system);
 
     /**
      * Returns the devices within this chassis, if any.
diff --git a/phosphor-regulators/src/configuration.cpp b/phosphor-regulators/src/configuration.cpp
index 99245ca..8edc36c 100644
--- a/phosphor-regulators/src/configuration.cpp
+++ b/phosphor-regulators/src/configuration.cpp
@@ -30,19 +30,21 @@
 namespace phosphor::power::regulators
 {
 
-void Configuration::execute(System& system, Chassis& chassis, Device& device)
+void Configuration::execute(Services& services, System& system,
+                            Chassis& chassis, Device& device)
 {
-    execute(system, chassis, device, device.getID());
+    execute(services, system, chassis, device, device.getID());
 }
 
-void Configuration::execute(System& system, Chassis& chassis, Device& device,
-                            Rail& rail)
+void Configuration::execute(Services& services, System& system,
+                            Chassis& chassis, Device& device, Rail& rail)
 {
-    execute(system, chassis, device, rail.getID());
+    execute(services, system, chassis, device, rail.getID());
 }
 
-void Configuration::execute(System& system, Chassis& /*chassis*/,
-                            Device& device, const std::string& deviceOrRailID)
+void Configuration::execute(Services& /*services*/, System& system,
+                            Chassis& /*chassis*/, Device& device,
+                            const std::string& deviceOrRailID)
 {
     try
     {
diff --git a/phosphor-regulators/src/configuration.hpp b/phosphor-regulators/src/configuration.hpp
index 3534419..f0dd766 100644
--- a/phosphor-regulators/src/configuration.hpp
+++ b/phosphor-regulators/src/configuration.hpp
@@ -16,6 +16,7 @@
 #pragma once
 
 #include "action.hpp"
+#include "services.hpp"
 
 #include <memory>
 #include <optional>
@@ -82,11 +83,13 @@
      * This method should be called during the boot before regulators are
      * enabled.
      *
+     * @param services system services like error logging and the journal
      * @param system system that contains the chassis
      * @param chassis chassis that contains the device
      * @param device device to configure
      */
-    void execute(System& system, Chassis& chassis, Device& device);
+    void execute(Services& services, System& system, Chassis& chassis,
+                 Device& device);
 
     /**
      * Executes the actions to configure the specified rail.
@@ -94,12 +97,14 @@
      * This method should be called during the boot before regulators are
      * enabled.
      *
+     * @param services system services like error logging and the journal
      * @param system system that contains the chassis
      * @param chassis chassis that contains the device
      * @param device device that contains the rail
      * @param rail rail to configure
      */
-    void execute(System& system, Chassis& chassis, Device& device, Rail& rail);
+    void execute(Services& services, System& system, Chassis& chassis,
+                 Device& device, Rail& rail);
 
     /**
      * Returns the actions that configure the device/rail.
@@ -125,13 +130,14 @@
     /**
      * Executes the actions to configure a device or rail.
      *
+     * @param services system services like error logging and the journal
      * @param system system that contains the chassis
      * @param chassis chassis that contains the device
      * @param device device to configure or that contains rail to configure
      * @param deviceOrRailID ID of the device or rail to configure
      */
-    void execute(System& system, Chassis& chassis, Device& device,
-                 const std::string& deviceOrRailID);
+    void execute(Services& services, System& system, Chassis& chassis,
+                 Device& device, const std::string& deviceOrRailID);
 
     /**
      * Optional output voltage value.
diff --git a/phosphor-regulators/src/device.cpp b/phosphor-regulators/src/device.cpp
index fd07d71..f085afe 100644
--- a/phosphor-regulators/src/device.cpp
+++ b/phosphor-regulators/src/device.cpp
@@ -58,18 +58,18 @@
     }
 }
 
-void Device::configure(System& system, Chassis& chassis)
+void Device::configure(Services& services, System& system, Chassis& chassis)
 {
     // If configuration changes are defined for this device, apply them
     if (configuration)
     {
-        configuration->execute(system, chassis, *this);
+        configuration->execute(services, system, chassis, *this);
     }
 
     // Configure rails
     for (std::unique_ptr<Rail>& rail : rails)
     {
-        rail->configure(system, chassis, *this);
+        rail->configure(services, system, chassis, *this);
     }
 }
 
diff --git a/phosphor-regulators/src/device.hpp b/phosphor-regulators/src/device.hpp
index e18f6fa..cb3a3d9 100644
--- a/phosphor-regulators/src/device.hpp
+++ b/phosphor-regulators/src/device.hpp
@@ -20,6 +20,7 @@
 #include "id_map.hpp"
 #include "presence_detection.hpp"
 #include "rail.hpp"
+#include "services.hpp"
 
 #include <memory>
 #include <string>
@@ -104,10 +105,11 @@
      * This method should be called during the boot before regulators are
      * enabled.
      *
+     * @param services system services like error logging and the journal
      * @param system system that contains the chassis
      * @param chassis chassis that contains this device
      */
-    void configure(System& system, Chassis& chassis);
+    void configure(Services& services, System& system, Chassis& chassis);
 
     /**
      * Returns the configuration changes to apply to this device, if any.
diff --git a/phosphor-regulators/src/manager.cpp b/phosphor-regulators/src/manager.cpp
index fd8dd01..bb0e3a8 100644
--- a/phosphor-regulators/src/manager.cpp
+++ b/phosphor-regulators/src/manager.cpp
@@ -84,7 +84,7 @@
     if (system)
     {
         // Configure the regulator devices in the system
-        system->configure();
+        system->configure(services);
     }
     else
     {
diff --git a/phosphor-regulators/src/rail.cpp b/phosphor-regulators/src/rail.cpp
index 7d90e77..3739ef0 100644
--- a/phosphor-regulators/src/rail.cpp
+++ b/phosphor-regulators/src/rail.cpp
@@ -23,12 +23,13 @@
 namespace phosphor::power::regulators
 {
 
-void Rail::configure(System& system, Chassis& chassis, Device& device)
+void Rail::configure(Services& services, System& system, Chassis& chassis,
+                     Device& device)
 {
     // If configuration changes are defined for this rail, apply them
     if (configuration)
     {
-        configuration->execute(system, chassis, device, *this);
+        configuration->execute(services, system, chassis, device, *this);
     }
 }
 
diff --git a/phosphor-regulators/src/rail.hpp b/phosphor-regulators/src/rail.hpp
index 8340d07..9caafbe 100644
--- a/phosphor-regulators/src/rail.hpp
+++ b/phosphor-regulators/src/rail.hpp
@@ -17,6 +17,7 @@
 
 #include "configuration.hpp"
 #include "sensor_monitoring.hpp"
+#include "services.hpp"
 
 #include <memory>
 #include <string>
@@ -74,11 +75,13 @@
      * This method should be called during the boot before regulators are
      * enabled.
      *
+     * @param services system services like error logging and the journal
      * @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);
+    void configure(Services& services, System& system, Chassis& chassis,
+                   Device& device);
 
     /**
      * Returns the configuration changes to apply to this rail, if any.
diff --git a/phosphor-regulators/src/system.cpp b/phosphor-regulators/src/system.cpp
index d3b599a..d6be768 100644
--- a/phosphor-regulators/src/system.cpp
+++ b/phosphor-regulators/src/system.cpp
@@ -43,12 +43,12 @@
     }
 }
 
-void System::configure()
+void System::configure(Services& services)
 {
     // Configure devices in each chassis
     for (std::unique_ptr<Chassis>& oneChassis : chassis)
     {
-        oneChassis->configure(*this);
+        oneChassis->configure(services, *this);
     }
 }
 
diff --git a/phosphor-regulators/src/system.hpp b/phosphor-regulators/src/system.hpp
index f678658..3ffeb5b 100644
--- a/phosphor-regulators/src/system.hpp
+++ b/phosphor-regulators/src/system.hpp
@@ -18,6 +18,7 @@
 #include "chassis.hpp"
 #include "id_map.hpp"
 #include "rule.hpp"
+#include "services.hpp"
 
 #include <memory>
 #include <utility>
@@ -69,8 +70,10 @@
      *
      * This method should be called during the boot before regulators are
      * enabled.
+     *
+     * @param services system services like error logging and the journal
      */
-    void configure();
+    void configure(Services& services);
 
     /**
      * Returns the chassis in the system.
diff --git a/phosphor-regulators/test/chassis_tests.cpp b/phosphor-regulators/test/chassis_tests.cpp
index eca6d97..481d71d 100644
--- a/phosphor-regulators/test/chassis_tests.cpp
+++ b/phosphor-regulators/test/chassis_tests.cpp
@@ -21,6 +21,7 @@
 #include "id_map.hpp"
 #include "journal.hpp"
 #include "mock_journal.hpp"
+#include "mock_services.hpp"
 #include "mocked_i2c_interface.hpp"
 #include "pmbus_read_sensor_action.hpp"
 #include "presence_detection.hpp"
@@ -180,6 +181,9 @@
 {
     // Test where no devices were specified in constructor
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create Chassis
         std::unique_ptr<Chassis> chassis = std::make_unique<Chassis>(1);
         Chassis* chassisPtr = chassis.get();
@@ -192,7 +196,7 @@
 
         // Call configure()
         journal::clear();
-        chassisPtr->configure(system);
+        chassisPtr->configure(services, system);
         EXPECT_EQ(journal::getDebugMessages().size(), 0);
         EXPECT_EQ(journal::getErrMessages().size(), 0);
         std::vector<std::string> expectedInfoMessages{"Configuring chassis 1"};
@@ -201,6 +205,9 @@
 
     // Test where devices were specified in constructor
     {
+        // Create mock services.
+        MockServices services{};
+
         std::vector<std::unique_ptr<Device>> devices{};
 
         // Create Device vdd0_reg
@@ -252,7 +259,7 @@
 
         // Call configure()
         journal::clear();
-        chassisPtr->configure(system);
+        chassisPtr->configure(services, system);
         std::vector<std::string> expectedDebugMessages{
             "Configuring vdd0_reg: volts=1.300000",
             "Configuring vdd1_reg: volts=1.200000"};
diff --git a/phosphor-regulators/test/configuration_tests.cpp b/phosphor-regulators/test/configuration_tests.cpp
index a7ba37f..93f1be8 100644
--- a/phosphor-regulators/test/configuration_tests.cpp
+++ b/phosphor-regulators/test/configuration_tests.cpp
@@ -22,6 +22,7 @@
 #include "journal.hpp"
 #include "mock_action.hpp"
 #include "mock_journal.hpp"
+#include "mock_services.hpp"
 #include "mocked_i2c_interface.hpp"
 #include "pmbus_utils.hpp"
 #include "pmbus_write_vout_command_action.hpp"
@@ -80,6 +81,9 @@
 {
     // Test where works: Volts value not specified
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create I2CWriteByteAction with register 0x7C and value 0x0A
         std::unique_ptr<I2CWriteByteAction> action =
             std::make_unique<I2CWriteByteAction>(0x7C, 0x0A);
@@ -123,7 +127,7 @@
 
         // Execute Configuration
         journal::clear();
-        configurationPtr->execute(system, *chassisPtr, *devicePtr);
+        configurationPtr->execute(services, system, *chassisPtr, *devicePtr);
         std::vector<std::string> expectedDebugMessages{"Configuring vdd_reg"};
         EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
         EXPECT_EQ(journal::getErrMessages().size(), 0);
@@ -131,6 +135,9 @@
 
     // Test where works: Volts value specified
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create PMBusWriteVoutCommandAction.  Do not specify a volts value
         // because it will get a value of 1.3V from the
         // ActionEnvironment/Configuration.  Specify a -8 exponent.
@@ -179,7 +186,7 @@
 
         // Execute Configuration
         journal::clear();
-        configurationPtr->execute(system, *chassisPtr, *devicePtr);
+        configurationPtr->execute(services, system, *chassisPtr, *devicePtr);
         std::vector<std::string> expectedDebugMessages{
             "Configuring vdd_reg: volts=1.300000"};
         EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
@@ -188,6 +195,9 @@
 
     // Test where fails
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create I2CWriteByteAction with register 0x7C and value 0x0A
         std::unique_ptr<I2CWriteByteAction> action =
             std::make_unique<I2CWriteByteAction>(0x7C, 0x0A);
@@ -233,7 +243,7 @@
 
         // Execute Configuration
         journal::clear();
-        configurationPtr->execute(system, *chassisPtr, *devicePtr);
+        configurationPtr->execute(services, system, *chassisPtr, *devicePtr);
         std::vector<std::string> expectedDebugMessages{"Configuring vdd_reg"};
         EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
         std::vector<std::string> expectedErrMessages{
@@ -250,6 +260,9 @@
 {
     // Test where works: Volts value not specified
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create I2CWriteByteAction with register 0x7C and value 0x0A
         std::unique_ptr<I2CWriteByteAction> action =
             std::make_unique<I2CWriteByteAction>(0x7C, 0x0A);
@@ -301,7 +314,8 @@
 
         // Execute Configuration
         journal::clear();
-        configurationPtr->execute(system, *chassisPtr, *devicePtr, *railPtr);
+        configurationPtr->execute(services, system, *chassisPtr, *devicePtr,
+                                  *railPtr);
         std::vector<std::string> expectedDebugMessages{"Configuring vio2"};
         EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
         EXPECT_EQ(journal::getErrMessages().size(), 0);
@@ -309,6 +323,9 @@
 
     // Test where works: Volts value specified
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create PMBusWriteVoutCommandAction.  Do not specify a volts value
         // because it will get a value of 1.3V from the
         // ActionEnvironment/Configuration.  Specify a -8 exponent.
@@ -365,7 +382,8 @@
 
         // Execute Configuration
         journal::clear();
-        configurationPtr->execute(system, *chassisPtr, *devicePtr, *railPtr);
+        configurationPtr->execute(services, system, *chassisPtr, *devicePtr,
+                                  *railPtr);
         std::vector<std::string> expectedDebugMessages{
             "Configuring vio2: volts=1.300000"};
         EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
@@ -374,6 +392,9 @@
 
     // Test where fails
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create I2CWriteByteAction with register 0x7C and value 0x0A
         std::unique_ptr<I2CWriteByteAction> action =
             std::make_unique<I2CWriteByteAction>(0x7C, 0x0A);
@@ -427,7 +448,8 @@
 
         // Execute Configuration
         journal::clear();
-        configurationPtr->execute(system, *chassisPtr, *devicePtr, *railPtr);
+        configurationPtr->execute(services, system, *chassisPtr, *devicePtr,
+                                  *railPtr);
         std::vector<std::string> expectedDebugMessages{"Configuring vio2"};
         EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
         std::vector<std::string> expectedErrMessages{
diff --git a/phosphor-regulators/test/device_tests.cpp b/phosphor-regulators/test/device_tests.cpp
index e0efb35..47768e2 100644
--- a/phosphor-regulators/test/device_tests.cpp
+++ b/phosphor-regulators/test/device_tests.cpp
@@ -22,6 +22,7 @@
 #include "journal.hpp"
 #include "mock_action.hpp"
 #include "mock_journal.hpp"
+#include "mock_services.hpp"
 #include "mocked_i2c_interface.hpp"
 #include "pmbus_read_sensor_action.hpp"
 #include "presence_detection.hpp"
@@ -210,6 +211,9 @@
 {
     // Test where Configuration and Rails were not specified in constructor
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create Device
         std::unique_ptr<i2c::I2CInterface> i2cInterface = createI2CInterface();
         std::unique_ptr<Device> device = std::make_unique<Device>(
@@ -232,13 +236,16 @@
 
         // Call configure().  Should do nothing.
         journal::clear();
-        devicePtr->configure(system, *chassisPtr);
+        devicePtr->configure(services, system, *chassisPtr);
         EXPECT_EQ(journal::getDebugMessages().size(), 0);
         EXPECT_EQ(journal::getErrMessages().size(), 0);
     }
 
     // Test where Configuration and Rails were specified in constructor
     {
+        // Create mock services.
+        MockServices services{};
+
         std::vector<std::unique_ptr<Rail>> rails{};
 
         // Create Rail vdd0
@@ -309,7 +316,7 @@
         // Call configure().  For the Device and both Rails, should execute the
         // Configuration and log a debug message.
         journal::clear();
-        devicePtr->configure(system, *chassisPtr);
+        devicePtr->configure(services, system, *chassisPtr);
         std::vector<std::string> expectedDebugMessages{
             "Configuring reg1", "Configuring vdd0: volts=1.300000",
             "Configuring vio0: volts=3.200000"};
diff --git a/phosphor-regulators/test/mock_services.hpp b/phosphor-regulators/test/mock_services.hpp
index 58c565e..075768c 100644
--- a/phosphor-regulators/test/mock_services.hpp
+++ b/phosphor-regulators/test/mock_services.hpp
@@ -19,6 +19,7 @@
 #include "journal.hpp"
 #include "mock_error_logging.hpp"
 #include "mock_journal.hpp"
+#include "services.hpp"
 
 #include <sdbusplus/bus.hpp>
 
@@ -67,7 +68,7 @@
      *
      * @return mock error logging object
      */
-    virtual MockErrorLogging& getMockErrorLogging() override
+    virtual MockErrorLogging& getMockErrorLogging()
     {
         return errorLogging;
     }
@@ -79,7 +80,7 @@
      *
      * @return mock journal object
      */
-    virtual MockJournal& getMockJournal() override
+    virtual MockJournal& getMockJournal()
     {
         return journal;
     }
diff --git a/phosphor-regulators/test/rail_tests.cpp b/phosphor-regulators/test/rail_tests.cpp
index e3c1c6a..d8524dc 100644
--- a/phosphor-regulators/test/rail_tests.cpp
+++ b/phosphor-regulators/test/rail_tests.cpp
@@ -21,6 +21,7 @@
 #include "journal.hpp"
 #include "mock_action.hpp"
 #include "mock_journal.hpp"
+#include "mock_services.hpp"
 #include "mocked_i2c_interface.hpp"
 #include "pmbus_read_sensor_action.hpp"
 #include "presence_detection.hpp"
@@ -86,6 +87,9 @@
 {
     // Test where Configuration was not specified in constructor
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create Rail
         std::unique_ptr<Rail> rail = std::make_unique<Rail>("vdd0");
         Rail* railPtr = rail.get();
@@ -118,13 +122,16 @@
 
         // Call configure().  Should do nothing.
         journal::clear();
-        railPtr->configure(system, *chassisPtr, *devicePtr);
+        railPtr->configure(services, system, *chassisPtr, *devicePtr);
         EXPECT_EQ(journal::getDebugMessages().size(), 0);
         EXPECT_EQ(journal::getErrMessages().size(), 0);
     }
 
     // Test where Configuration was specified in constructor
     {
+        // Create mock services.
+        MockServices services{};
+
         // Create Configuration
         std::optional<double> volts{1.3};
         std::unique_ptr<MockAction> action = std::make_unique<MockAction>();
@@ -168,7 +175,7 @@
         // Call configure().  Should execute Configuration and log debug message
         // to journal.
         journal::clear();
-        railPtr->configure(system, *chassisPtr, *devicePtr);
+        railPtr->configure(services, system, *chassisPtr, *devicePtr);
         std::vector<std::string> expectedDebugMessages{
             "Configuring vddr1: volts=1.300000"};
         EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
diff --git a/phosphor-regulators/test/system_tests.cpp b/phosphor-regulators/test/system_tests.cpp
index b79e1ba..daa2084 100644
--- a/phosphor-regulators/test/system_tests.cpp
+++ b/phosphor-regulators/test/system_tests.cpp
@@ -18,6 +18,7 @@
 #include "id_map.hpp"
 #include "journal.hpp"
 #include "mock_journal.hpp"
+#include "mock_services.hpp"
 #include "mocked_i2c_interface.hpp"
 #include "pmbus_read_sensor_action.hpp"
 #include "rail.hpp"
@@ -90,6 +91,9 @@
 
 TEST(SystemTests, Configure)
 {
+    // Create mock services.
+    MockServices services{};
+
     // Specify an empty rules vector
     std::vector<std::unique_ptr<Rule>> rules{};
 
@@ -103,7 +107,7 @@
 
     // Call configure()
     journal::clear();
-    system.configure();
+    system.configure(services);
     EXPECT_EQ(journal::getDebugMessages().size(), 0);
     EXPECT_EQ(journal::getErrMessages().size(), 0);
     std::vector<std::string> expectedInfoMessages{"Configuring chassis 1",
