diff --git a/phosphor-regulators/src/actions/pmbus_read_sensor_action.cpp b/phosphor-regulators/src/actions/pmbus_read_sensor_action.cpp
index fd58ae2..7ad0cad 100644
--- a/phosphor-regulators/src/actions/pmbus_read_sensor_action.cpp
+++ b/phosphor-regulators/src/actions/pmbus_read_sensor_action.cpp
@@ -74,7 +74,7 @@
 {
     std::ostringstream ss;
     ss << "pmbus_read_sensor: { ";
-    ss << "type: " << pmbus_utils::toString(type) << ", " << std::hex
+    ss << "type: " << sensors::toString(type) << ", " << std::hex
        << std::uppercase;
     ss << "command: 0x" << static_cast<uint16_t>(command) << ", " << std::dec
        << std::nouppercase;
diff --git a/phosphor-regulators/src/actions/pmbus_read_sensor_action.hpp b/phosphor-regulators/src/actions/pmbus_read_sensor_action.hpp
index 620a814..36df590 100644
--- a/phosphor-regulators/src/actions/pmbus_read_sensor_action.hpp
+++ b/phosphor-regulators/src/actions/pmbus_read_sensor_action.hpp
@@ -19,6 +19,7 @@
 #include "i2c_action.hpp"
 #include "i2c_interface.hpp"
 #include "pmbus_utils.hpp"
+#include "sensors.hpp"
 
 #include <cstdint>
 #include <optional>
@@ -57,7 +58,7 @@
     /**
      * Constructor.
      *
-     * @param type Sensor value type.
+     * @param type Sensor type.
      * @param command PMBus command code.
      * @param format Data format of the sensor value returned by the device.
      * @param exponent Exponent value for linear_16 data format.
@@ -65,8 +66,7 @@
      *                 exponent value will be read from VOUT_MODE.
      *                 Should not be specified if the data format is linear_11.
      */
-    explicit PMBusReadSensorAction(pmbus_utils::SensorValueType type,
-                                   uint8_t command,
+    explicit PMBusReadSensorAction(SensorType type, uint8_t command,
                                    pmbus_utils::SensorDataFormat format,
                                    std::optional<int8_t> exponent) :
         type{type},
@@ -79,7 +79,7 @@
      *
      * Reads one sensor using the I2C interface.
      *
-     * The sensor value type is specified in the constructor.
+     * The sensor type is specified in the constructor.
      *
      * The PMBus command code is specified in the constructor.
      * It is the register to read on the device.
@@ -132,11 +132,11 @@
     }
 
     /**
-     * Returns the sensor value type.
+     * Returns the sensor type.
      *
-     * @return sensor value type.
+     * @return sensor type.
      */
-    pmbus_utils::SensorValueType getType() const
+    SensorType getType() const
     {
         return type;
     }
@@ -167,9 +167,9 @@
                             i2c::I2CInterface& interface);
 
     /**
-     * Sensor value type.
+     * Sensor type.
      */
-    const pmbus_utils::SensorValueType type{};
+    const SensorType type{};
 
     /**
      * PMBus command code.
diff --git a/phosphor-regulators/src/config_file_parser.cpp b/phosphor-regulators/src/config_file_parser.cpp
index 123cb4d..99abd6c 100644
--- a/phosphor-regulators/src/config_file_parser.cpp
+++ b/phosphor-regulators/src/config_file_parser.cpp
@@ -690,7 +690,7 @@
 
     // Required type property
     const json& typeElement = getRequiredProperty(element, "type");
-    pmbus_utils::SensorValueType type = parseSensorValueType(typeElement);
+    SensorType type = parseSensorType(typeElement);
     ++propertyCount;
 
     // Required command property
@@ -997,54 +997,54 @@
     return std::make_unique<SensorMonitoring>(std::move(actions));
 }
 
-pmbus_utils::SensorValueType parseSensorValueType(const json& element)
+SensorType parseSensorType(const json& element)
 {
     if (!element.is_string())
     {
         throw std::invalid_argument{"Element is not a string"};
     }
     std::string value = element.get<std::string>();
-    pmbus_utils::SensorValueType type{};
+    SensorType type{};
 
     if (value == "iout")
     {
-        type = pmbus_utils::SensorValueType::iout;
+        type = SensorType::iout;
     }
     else if (value == "iout_peak")
     {
-        type = pmbus_utils::SensorValueType::iout_peak;
+        type = SensorType::iout_peak;
     }
     else if (value == "iout_valley")
     {
-        type = pmbus_utils::SensorValueType::iout_valley;
+        type = SensorType::iout_valley;
     }
     else if (value == "pout")
     {
-        type = pmbus_utils::SensorValueType::pout;
+        type = SensorType::pout;
     }
     else if (value == "temperature")
     {
-        type = pmbus_utils::SensorValueType::temperature;
+        type = SensorType::temperature;
     }
     else if (value == "temperature_peak")
     {
-        type = pmbus_utils::SensorValueType::temperature_peak;
+        type = SensorType::temperature_peak;
     }
     else if (value == "vout")
     {
-        type = pmbus_utils::SensorValueType::vout;
+        type = SensorType::vout;
     }
     else if (value == "vout_peak")
     {
-        type = pmbus_utils::SensorValueType::vout_peak;
+        type = SensorType::vout_peak;
     }
     else if (value == "vout_valley")
     {
-        type = pmbus_utils::SensorValueType::vout_valley;
+        type = SensorType::vout_valley;
     }
     else
     {
-        throw std::invalid_argument{"Element is not a sensor value type"};
+        throw std::invalid_argument{"Element is not a sensor type"};
     }
 
     return type;
diff --git a/phosphor-regulators/src/config_file_parser.hpp b/phosphor-regulators/src/config_file_parser.hpp
index 4b39b7e..63dcfd6 100644
--- a/phosphor-regulators/src/config_file_parser.hpp
+++ b/phosphor-regulators/src/config_file_parser.hpp
@@ -39,6 +39,7 @@
 #include "rule.hpp"
 #include "run_rule_action.hpp"
 #include "sensor_monitoring.hpp"
+#include "sensors.hpp"
 #include "set_device_action.hpp"
 
 #include <nlohmann/json.hpp>
@@ -684,17 +685,16 @@
     parseSensorMonitoring(const nlohmann::json& element);
 
 /**
- * Parses a JSON element containing a SensorValueType expressed as a string.
+ * Parses a JSON element containing a SensorType expressed as a string.
  *
- * Returns the corresponding SensorValueType enum value.
+ * Returns the corresponding SensorType enum value.
  *
  * Throws an exception if parsing fails.
  *
  * @param element JSON element
- * @return SensorValueType enum value
+ * @return SensorType enum value
  */
-pmbus_utils::SensorValueType
-    parseSensorValueType(const nlohmann::json& element);
+SensorType parseSensorType(const nlohmann::json& element);
 
 /**
  * Parses a JSON element containing a set_device action.
diff --git a/phosphor-regulators/src/pmbus_utils.cpp b/phosphor-regulators/src/pmbus_utils.cpp
index eb9e117..ed62515 100644
--- a/phosphor-regulators/src/pmbus_utils.cpp
+++ b/phosphor-regulators/src/pmbus_utils.cpp
@@ -73,42 +73,6 @@
     return returnValue;
 }
 
-std::string toString(SensorValueType type)
-{
-    std::string returnValue{};
-    switch (type)
-    {
-        case SensorValueType::iout:
-            returnValue = "iout";
-            break;
-        case SensorValueType::iout_peak:
-            returnValue = "iout_peak";
-            break;
-        case SensorValueType::iout_valley:
-            returnValue = "iout_valley";
-            break;
-        case SensorValueType::pout:
-            returnValue = "pout";
-            break;
-        case SensorValueType::temperature:
-            returnValue = "temperature";
-            break;
-        case SensorValueType::temperature_peak:
-            returnValue = "temperature_peak";
-            break;
-        case SensorValueType::vout:
-            returnValue = "vout";
-            break;
-        case SensorValueType::vout_peak:
-            returnValue = "vout_peak";
-            break;
-        case SensorValueType::vout_valley:
-            returnValue = "vout_valley";
-            break;
-    }
-    return returnValue;
-}
-
 std::string toString(VoutDataFormat format)
 {
     std::string returnValue{};
diff --git a/phosphor-regulators/src/pmbus_utils.hpp b/phosphor-regulators/src/pmbus_utils.hpp
index 438ee46..94e4ef1 100644
--- a/phosphor-regulators/src/pmbus_utils.hpp
+++ b/phosphor-regulators/src/pmbus_utils.hpp
@@ -60,57 +60,6 @@
 };
 
 /**
- * Sensor Value Type.
- */
-enum class SensorValueType
-{
-    /**
-     * Output current.
-     */
-    iout,
-
-    /**
-     * Highest output current.
-     */
-    iout_peak,
-
-    /**
-     * Lowest output current.
-     */
-    iout_valley,
-
-    /**
-     * Output power.
-     */
-    pout,
-
-    /**
-     * Temperature.
-     */
-    temperature,
-
-    /**
-     * Highest temperature.
-     */
-    temperature_peak,
-
-    /**
-     * Output voltage.
-     */
-    vout,
-
-    /**
-     * Highest output voltage.
-     */
-    vout_peak,
-
-    /**
-     * Lowest output voltage.
-     */
-    vout_valley
-};
-
-/**
  * Data formats for output voltage.
  *
  * These formats are used for commanding and reading output voltage and related
@@ -169,14 +118,6 @@
 std::string toString(SensorDataFormat format);
 
 /**
- * Converts the specified SensorValueType value to string.
- *
- * @param type SensorValueType type
- * @return string corresponding to the enum value
- */
-std::string toString(SensorValueType type);
-
-/**
  * Converts the specified VoutDataFormat value to string.
  *
  * @param format VoutDataFormat format
diff --git a/phosphor-regulators/test/actions/pmbus_read_sensor_action_tests.cpp b/phosphor-regulators/test/actions/pmbus_read_sensor_action_tests.cpp
index 09edfe7..f0ad7c2 100644
--- a/phosphor-regulators/test/actions/pmbus_read_sensor_action_tests.cpp
+++ b/phosphor-regulators/test/actions/pmbus_read_sensor_action_tests.cpp
@@ -24,6 +24,7 @@
 #include "pmbus_error.hpp"
 #include "pmbus_read_sensor_action.hpp"
 #include "pmbus_utils.hpp"
+#include "sensors.hpp"
 
 #include <cstdint>
 #include <memory>
@@ -48,13 +49,13 @@
     // Test where works: exponent value is specified
     try
     {
-        pmbus_utils::SensorValueType type{pmbus_utils::SensorValueType::iout};
+        SensorType type{SensorType::iout};
         uint8_t command = 0x8C;
         pmbus_utils::SensorDataFormat format{
             pmbus_utils::SensorDataFormat::linear_16};
         std::optional<int8_t> exponent{-8};
         PMBusReadSensorAction action{type, command, format, exponent};
-        EXPECT_EQ(action.getType(), pmbus_utils::SensorValueType::iout);
+        EXPECT_EQ(action.getType(), SensorType::iout);
         EXPECT_EQ(action.getCommand(), 0x8C);
         EXPECT_EQ(action.getFormat(), pmbus_utils::SensorDataFormat::linear_16);
         EXPECT_EQ(action.getExponent().has_value(), true);
@@ -68,13 +69,13 @@
     // Test where works: exponent value is not specified
     try
     {
-        pmbus_utils::SensorValueType type{pmbus_utils::SensorValueType::iout};
+        SensorType type{SensorType::iout};
         uint8_t command = 0x8C;
         pmbus_utils::SensorDataFormat format{
             pmbus_utils::SensorDataFormat::linear_11};
         std::optional<int8_t> exponent{};
         PMBusReadSensorAction action{type, command, format, exponent};
-        EXPECT_EQ(action.getType(), pmbus_utils::SensorValueType::iout);
+        EXPECT_EQ(action.getType(), SensorType::iout);
         EXPECT_EQ(action.getCommand(), 0x8C);
         EXPECT_EQ(action.getFormat(), pmbus_utils::SensorDataFormat::linear_11);
         EXPECT_EQ(action.getExponent().has_value(), false);
@@ -115,7 +116,7 @@
         ActionEnvironment env{idMap, "reg1", services};
 
         // Create and execute action
-        pmbus_utils::SensorValueType type{pmbus_utils::SensorValueType::iout};
+        SensorType type{SensorType::iout};
         uint8_t command = 0x8C;
         pmbus_utils::SensorDataFormat format{
             pmbus_utils::SensorDataFormat::linear_11};
@@ -127,7 +128,7 @@
          *
          *  EXPECT_EQ(env.getSensorReadings().size(), 1);
          *  EXPECT_EQ(env.getSensorReadings()[0].type,
-         *            pmbus_utils::SensorValueType::iout);
+         *            SensorType::iout);
          *  EXPECT_DOUBLE_EQ(env.getSensorReadings()[0].value, 11.5);
          */
     }
@@ -164,7 +165,7 @@
         ActionEnvironment env{idMap, "reg1", services};
 
         // Create and execute action
-        pmbus_utils::SensorValueType type{pmbus_utils::SensorValueType::vout};
+        SensorType type{SensorType::vout};
         uint8_t command = 0x8B;
         pmbus_utils::SensorDataFormat format{
             pmbus_utils::SensorDataFormat::linear_16};
@@ -176,7 +177,7 @@
          *
          * EXPECT_EQ(env.getSensorReadings().size(), 1);
          * EXPECT_EQ(env.getSensorReadings()[0].type,
-         *           pmbus_utils::SensorValueType::vout);
+         *           SensorType::vout);
          * EXPECT_DOUBLE_EQ(env.getSensorReadings()[0].value, 16);
          */
     }
@@ -213,8 +214,7 @@
         ActionEnvironment env{idMap, "reg1", services};
 
         // Create and execute action
-        pmbus_utils::SensorValueType type{
-            pmbus_utils::SensorValueType::vout_peak};
+        SensorType type{SensorType::vout_peak};
         uint8_t command = 0xC6;
         pmbus_utils::SensorDataFormat format{
             pmbus_utils::SensorDataFormat::linear_16};
@@ -226,7 +226,7 @@
          *
          * EXPECT_EQ(env.getSensorReadings().size(), 1);
          * EXPECT_EQ(env.getSensorReadings()[0].type,
-         *           pmbus_utils::SensorValueType::vout_peak);
+         *           SensorType::vout_peak);
          * EXPECT_DOUBLE_EQ(env.getSensorReadings()[0].value, 0.232421875);
          */
     }
@@ -244,7 +244,7 @@
         ActionEnvironment env{idMap, "reg1", services};
 
         // Create and execute action
-        pmbus_utils::SensorValueType type{pmbus_utils::SensorValueType::pout};
+        SensorType type{SensorType::pout};
         uint8_t command = 0x96;
         pmbus_utils::SensorDataFormat format{
             pmbus_utils::SensorDataFormat::linear_11};
@@ -287,7 +287,7 @@
         ActionEnvironment env{idMap, "reg1", services};
 
         // Create and execute action
-        pmbus_utils::SensorValueType type{pmbus_utils::SensorValueType::vout};
+        SensorType type{SensorType::vout};
         uint8_t command = 0x8B;
         pmbus_utils::SensorDataFormat format{
             pmbus_utils::SensorDataFormat::linear_16};
@@ -351,8 +351,7 @@
         ActionEnvironment env{idMap, "reg1", services};
 
         // Create and execute action
-        pmbus_utils::SensorValueType type{
-            pmbus_utils::SensorValueType::vout_peak};
+        SensorType type{SensorType::vout_peak};
         uint8_t command = 0xC6;
         pmbus_utils::SensorDataFormat format{
             pmbus_utils::SensorDataFormat::linear_16};
@@ -412,7 +411,7 @@
         ActionEnvironment env{idMap, "reg1", services};
 
         // Create and execute action
-        pmbus_utils::SensorValueType type{pmbus_utils::SensorValueType::pout};
+        SensorType type{SensorType::pout};
         uint8_t command = 0x96;
         pmbus_utils::SensorDataFormat format{
             pmbus_utils::SensorDataFormat::linear_11};
@@ -450,7 +449,7 @@
 
 TEST(PMBusReadSensorActionTests, GetCommand)
 {
-    pmbus_utils::SensorValueType type{pmbus_utils::SensorValueType::iout};
+    SensorType type{SensorType::iout};
     uint8_t command = 0x8C;
     pmbus_utils::SensorDataFormat format{
         pmbus_utils::SensorDataFormat::linear_16};
@@ -461,7 +460,7 @@
 
 TEST(PMBusReadSensorActionTests, GetExponent)
 {
-    pmbus_utils::SensorValueType type{pmbus_utils::SensorValueType::iout};
+    SensorType type{SensorType::iout};
     uint8_t command = 0x8C;
     pmbus_utils::SensorDataFormat format{
         pmbus_utils::SensorDataFormat::linear_16};
@@ -484,7 +483,7 @@
 
 TEST(PMBusReadSensorActionTests, GetFormat)
 {
-    pmbus_utils::SensorValueType type{pmbus_utils::SensorValueType::iout};
+    SensorType type{SensorType::iout};
     uint8_t command = 0x8C;
     pmbus_utils::SensorDataFormat format{
         pmbus_utils::SensorDataFormat::linear_16};
@@ -495,20 +494,20 @@
 
 TEST(PMBusReadSensorActionTests, GetType)
 {
-    pmbus_utils::SensorValueType type{pmbus_utils::SensorValueType::pout};
+    SensorType type{SensorType::pout};
     uint8_t command = 0x8C;
     pmbus_utils::SensorDataFormat format{
         pmbus_utils::SensorDataFormat::linear_16};
     std::optional<int8_t> exponent{-8};
     PMBusReadSensorAction action{type, command, format, exponent};
-    EXPECT_EQ(action.getType(), pmbus_utils::SensorValueType::pout);
+    EXPECT_EQ(action.getType(), SensorType::pout);
 }
 
 TEST(PMBusReadSensorActionTests, ToString)
 {
     // Test where exponent value is specified
     {
-        pmbus_utils::SensorValueType type{pmbus_utils::SensorValueType::vout};
+        SensorType type{SensorType::vout};
         uint8_t command = 0x8B;
         pmbus_utils::SensorDataFormat format{
             pmbus_utils::SensorDataFormat::linear_16};
@@ -521,7 +520,7 @@
 
     // Test where exponent value is not specified
     {
-        pmbus_utils::SensorValueType type{pmbus_utils::SensorValueType::iout};
+        SensorType type{SensorType::iout};
         uint8_t command = 0x8C;
         pmbus_utils::SensorDataFormat format{
             pmbus_utils::SensorDataFormat::linear_11};
diff --git a/phosphor-regulators/test/chassis_tests.cpp b/phosphor-regulators/test/chassis_tests.cpp
index 601bf3f..36042d4 100644
--- a/phosphor-regulators/test/chassis_tests.cpp
+++ b/phosphor-regulators/test/chassis_tests.cpp
@@ -26,6 +26,7 @@
 #include "presence_detection.hpp"
 #include "rail.hpp"
 #include "rule.hpp"
+#include "sensors.hpp"
 #include "system.hpp"
 #include "test_utils.hpp"
 
@@ -380,7 +381,7 @@
         std::vector<std::unique_ptr<Device>> devices{};
 
         // Create PMBusReadSensorAction
-        pmbus_utils::SensorValueType type{pmbus_utils::SensorValueType::iout};
+        SensorType type{SensorType::iout};
         uint8_t command = 0x8C;
         pmbus_utils::SensorDataFormat format{
             pmbus_utils::SensorDataFormat::linear_11};
diff --git a/phosphor-regulators/test/config_file_parser_tests.cpp b/phosphor-regulators/test/config_file_parser_tests.cpp
index d14787e..19bf73b 100644
--- a/phosphor-regulators/test/config_file_parser_tests.cpp
+++ b/phosphor-regulators/test/config_file_parser_tests.cpp
@@ -39,6 +39,7 @@
 #include "rule.hpp"
 #include "run_rule_action.hpp"
 #include "sensor_monitoring.hpp"
+#include "sensors.hpp"
 #include "set_device_action.hpp"
 #include "temporary_file.hpp"
 
@@ -3187,7 +3188,7 @@
         )"_json;
         std::unique_ptr<PMBusReadSensorAction> action =
             parsePMBusReadSensor(element);
-        EXPECT_EQ(action->getType(), pmbus_utils::SensorValueType::iout);
+        EXPECT_EQ(action->getType(), SensorType::iout);
         EXPECT_EQ(action->getCommand(), 0x8C);
         EXPECT_EQ(action->getFormat(),
                   pmbus_utils::SensorDataFormat::linear_11);
@@ -3206,7 +3207,7 @@
         )"_json;
         std::unique_ptr<PMBusReadSensorAction> action =
             parsePMBusReadSensor(element);
-        EXPECT_EQ(action->getType(), pmbus_utils::SensorValueType::temperature);
+        EXPECT_EQ(action->getType(), SensorType::temperature);
         EXPECT_EQ(action->getCommand(), 0x7A);
         EXPECT_EQ(action->getFormat(),
                   pmbus_utils::SensorDataFormat::linear_16);
@@ -4456,103 +4457,88 @@
     }
 }
 
-TEST(ConfigFileParserTests, ParseSensorValueType)
+TEST(ConfigFileParserTests, ParseSensorType)
 {
     // Test where works: iout
     {
         const json element = "iout";
-        pmbus_utils::SensorValueType value = parseSensorValueType(element);
-        pmbus_utils::SensorValueType type = pmbus_utils::SensorValueType::iout;
-        EXPECT_EQ(value, type);
+        SensorType type = parseSensorType(element);
+        EXPECT_EQ(type, SensorType::iout);
     }
 
     // Test where works: iout_peak
     {
         const json element = "iout_peak";
-        pmbus_utils::SensorValueType value = parseSensorValueType(element);
-        pmbus_utils::SensorValueType type =
-            pmbus_utils::SensorValueType::iout_peak;
-        EXPECT_EQ(value, type);
+        SensorType type = parseSensorType(element);
+        EXPECT_EQ(type, SensorType::iout_peak);
     }
 
     // Test where works: iout_valley
     {
         const json element = "iout_valley";
-        pmbus_utils::SensorValueType value = parseSensorValueType(element);
-        pmbus_utils::SensorValueType type =
-            pmbus_utils::SensorValueType::iout_valley;
-        EXPECT_EQ(value, type);
+        SensorType type = parseSensorType(element);
+        EXPECT_EQ(type, SensorType::iout_valley);
     }
 
     // Test where works: pout
     {
         const json element = "pout";
-        pmbus_utils::SensorValueType value = parseSensorValueType(element);
-        pmbus_utils::SensorValueType type = pmbus_utils::SensorValueType::pout;
-        EXPECT_EQ(value, type);
+        SensorType type = parseSensorType(element);
+        EXPECT_EQ(type, SensorType::pout);
     }
 
     // Test where works: temperature
     {
         const json element = "temperature";
-        pmbus_utils::SensorValueType value = parseSensorValueType(element);
-        pmbus_utils::SensorValueType type =
-            pmbus_utils::SensorValueType::temperature;
-        EXPECT_EQ(value, type);
+        SensorType type = parseSensorType(element);
+        EXPECT_EQ(type, SensorType::temperature);
     }
 
     // Test where works: temperature_peak
     {
         const json element = "temperature_peak";
-        pmbus_utils::SensorValueType value = parseSensorValueType(element);
-        pmbus_utils::SensorValueType type =
-            pmbus_utils::SensorValueType::temperature_peak;
-        EXPECT_EQ(value, type);
+        SensorType type = parseSensorType(element);
+        EXPECT_EQ(type, SensorType::temperature_peak);
     }
 
     // Test where works: vout
     {
         const json element = "vout";
-        pmbus_utils::SensorValueType value = parseSensorValueType(element);
-        pmbus_utils::SensorValueType type = pmbus_utils::SensorValueType::vout;
-        EXPECT_EQ(value, type);
+        SensorType type = parseSensorType(element);
+        EXPECT_EQ(type, SensorType::vout);
     }
 
     // Test where works: vout_peak
     {
         const json element = "vout_peak";
-        pmbus_utils::SensorValueType value = parseSensorValueType(element);
-        pmbus_utils::SensorValueType type =
-            pmbus_utils::SensorValueType::vout_peak;
-        EXPECT_EQ(value, type);
+        SensorType type = parseSensorType(element);
+        EXPECT_EQ(type, SensorType::vout_peak);
     }
 
     // Test where works: vout_valley
     {
         const json element = "vout_valley";
-        pmbus_utils::SensorValueType value = parseSensorValueType(element);
-        pmbus_utils::SensorValueType type =
-            pmbus_utils::SensorValueType::vout_valley;
-        EXPECT_EQ(value, type);
+        SensorType type = parseSensorType(element);
+        EXPECT_EQ(type, SensorType::vout_valley);
     }
 
-    // Test where fails: Element is not a sensor value type
+    // Test where fails: Element is not a sensor type
     try
     {
         const json element = "foo";
-        parseSensorValueType(element);
+        parseSensorType(element);
         ADD_FAILURE() << "Should not have reached this line.";
     }
     catch (const std::invalid_argument& e)
     {
-        EXPECT_STREQ(e.what(), "Element is not a sensor value type");
+        EXPECT_STREQ(e.what(), "Element is not a sensor type");
     }
 
     // Test where fails: Element is not a string
     try
     {
         const json element = R"( { "foo": "bar" } )"_json;
-        parseSensorValueType(element);
+        parseSensorType(element);
         ADD_FAILURE() << "Should not have reached this line.";
     }
     catch (const std::invalid_argument& e)
diff --git a/phosphor-regulators/test/device_tests.cpp b/phosphor-regulators/test/device_tests.cpp
index 33bdab3..c3ed166 100644
--- a/phosphor-regulators/test/device_tests.cpp
+++ b/phosphor-regulators/test/device_tests.cpp
@@ -28,6 +28,7 @@
 #include "presence_detection.hpp"
 #include "rail.hpp"
 #include "rule.hpp"
+#include "sensors.hpp"
 #include "system.hpp"
 #include "test_utils.hpp"
 
@@ -778,7 +779,7 @@
         std::vector<std::unique_ptr<Rail>> rails{};
 
         // Create PMBusReadSensorAction
-        pmbus_utils::SensorValueType type{pmbus_utils::SensorValueType::iout};
+        SensorType type{SensorType::iout};
         uint8_t command = 0x8C;
         pmbus_utils::SensorDataFormat format{
             pmbus_utils::SensorDataFormat::linear_11};
diff --git a/phosphor-regulators/test/pmbus_utils_tests.cpp b/phosphor-regulators/test/pmbus_utils_tests.cpp
index 8e92151..608b96a 100644
--- a/phosphor-regulators/test/pmbus_utils_tests.cpp
+++ b/phosphor-regulators/test/pmbus_utils_tests.cpp
@@ -116,66 +116,6 @@
         EXPECT_EQ(pmbus_utils::toString(format), "linear_16");
     }
 
-    // Sensor value type: SensorValueType::iout
-    {
-        pmbus_utils::SensorValueType type = pmbus_utils::SensorValueType::iout;
-        EXPECT_EQ(pmbus_utils::toString(type), "iout");
-    }
-
-    // Sensor value type: SensorValueType::iout_peak
-    {
-        pmbus_utils::SensorValueType type =
-            pmbus_utils::SensorValueType::iout_peak;
-        EXPECT_EQ(pmbus_utils::toString(type), "iout_peak");
-    }
-
-    // Sensor value type: SensorValueType::iout_valley
-    {
-        pmbus_utils::SensorValueType type =
-            pmbus_utils::SensorValueType::iout_valley;
-        EXPECT_EQ(pmbus_utils::toString(type), "iout_valley");
-    }
-
-    // Sensor value type: SensorValueType::pout
-    {
-        pmbus_utils::SensorValueType type = pmbus_utils::SensorValueType::pout;
-        EXPECT_EQ(pmbus_utils::toString(type), "pout");
-    }
-
-    // Sensor value type: SensorValueType::temperature
-    {
-        pmbus_utils::SensorValueType type =
-            pmbus_utils::SensorValueType::temperature;
-        EXPECT_EQ(pmbus_utils::toString(type), "temperature");
-    }
-
-    // Sensor value type: SensorValueType::temperature_peak
-    {
-        pmbus_utils::SensorValueType type =
-            pmbus_utils::SensorValueType::temperature_peak;
-        EXPECT_EQ(pmbus_utils::toString(type), "temperature_peak");
-    }
-
-    // Sensor value type: SensorValueType::vout
-    {
-        pmbus_utils::SensorValueType type = pmbus_utils::SensorValueType::vout;
-        EXPECT_EQ(pmbus_utils::toString(type), "vout");
-    }
-
-    // Sensor value type: SensorValueType::vout_peak
-    {
-        pmbus_utils::SensorValueType type =
-            pmbus_utils::SensorValueType::vout_peak;
-        EXPECT_EQ(pmbus_utils::toString(type), "vout_peak");
-    }
-
-    // Sensor value type: SensorValueType::vout_valley
-    {
-        pmbus_utils::SensorValueType type =
-            pmbus_utils::SensorValueType::vout_valley;
-        EXPECT_EQ(pmbus_utils::toString(type), "vout_valley");
-    }
-
     // Vout data format: VoutDataFormat::linear
     {
         pmbus_utils::VoutDataFormat format =
diff --git a/phosphor-regulators/test/rail_tests.cpp b/phosphor-regulators/test/rail_tests.cpp
index 089e6ee..f0d9529 100644
--- a/phosphor-regulators/test/rail_tests.cpp
+++ b/phosphor-regulators/test/rail_tests.cpp
@@ -27,6 +27,7 @@
 #include "rail.hpp"
 #include "rule.hpp"
 #include "sensor_monitoring.hpp"
+#include "sensors.hpp"
 #include "system.hpp"
 
 #include <memory>
@@ -271,7 +272,7 @@
         EXPECT_CALL(journal, logError(A<const std::string&>())).Times(0);
 
         // Create PMBusReadSensorAction
-        pmbus_utils::SensorValueType type{pmbus_utils::SensorValueType::iout};
+        SensorType type{SensorType::iout};
         uint8_t command = 0x8C;
         pmbus_utils::SensorDataFormat format{
             pmbus_utils::SensorDataFormat::linear_11};
diff --git a/phosphor-regulators/test/sensor_monitoring_tests.cpp b/phosphor-regulators/test/sensor_monitoring_tests.cpp
index ebb8998..f2f4359 100644
--- a/phosphor-regulators/test/sensor_monitoring_tests.cpp
+++ b/phosphor-regulators/test/sensor_monitoring_tests.cpp
@@ -29,6 +29,7 @@
 #include "rail.hpp"
 #include "rule.hpp"
 #include "sensor_monitoring.hpp"
+#include "sensors.hpp"
 #include "system.hpp"
 
 #include <cstdint>
@@ -69,7 +70,7 @@
         EXPECT_CALL(journal, logError(A<const std::string&>())).Times(0);
 
         // Create PMBusReadSensorAction
-        pmbus_utils::SensorValueType type{pmbus_utils::SensorValueType::iout};
+        SensorType type{SensorType::iout};
         uint8_t command = 0x8C;
         pmbus_utils::SensorDataFormat format{
             pmbus_utils::SensorDataFormat::linear_11};
@@ -150,7 +151,7 @@
             .Times(1);
 
         // Create PMBusReadSensorAction
-        pmbus_utils::SensorValueType type{pmbus_utils::SensorValueType::iout};
+        SensorType type{SensorType::iout};
         uint8_t command = 0x8C;
         pmbus_utils::SensorDataFormat format{
             pmbus_utils::SensorDataFormat::linear_11};
diff --git a/phosphor-regulators/test/system_tests.cpp b/phosphor-regulators/test/system_tests.cpp
index b71155c..5ce76ed 100644
--- a/phosphor-regulators/test/system_tests.cpp
+++ b/phosphor-regulators/test/system_tests.cpp
@@ -22,6 +22,7 @@
 #include "pmbus_read_sensor_action.hpp"
 #include "rail.hpp"
 #include "rule.hpp"
+#include "sensors.hpp"
 #include "services.hpp"
 #include "system.hpp"
 #include "test_utils.hpp"
@@ -250,7 +251,7 @@
     EXPECT_CALL(journal, logError(A<const std::string&>())).Times(0);
 
     // Create PMBusReadSensorAction
-    pmbus_utils::SensorValueType type{pmbus_utils::SensorValueType::iout};
+    SensorType type{SensorType::iout};
     uint8_t command = 0x8C;
     pmbus_utils::SensorDataFormat format{
         pmbus_utils::SensorDataFormat::linear_11};
