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",
