diff --git a/src/ADCSensor.cpp b/src/ADCSensor.cpp
index 57a6434..c858df7 100644
--- a/src/ADCSensor.cpp
+++ b/src/ADCSensor.cpp
@@ -80,7 +80,7 @@
     }
     association = objectServer.add_interface(
         "/xyz/openbmc_project/sensors/voltage/" + name, association::interface);
-    setInitialProperties(conn);
+    setInitialProperties(conn, sensor_paths::unitVolts);
 }
 
 ADCSensor::~ADCSensor()
diff --git a/src/CPUSensor.cpp b/src/CPUSensor.cpp
index 939bbc2..40b86d1 100644
--- a/src/CPUSensor.cpp
+++ b/src/CPUSensor.cpp
@@ -56,9 +56,11 @@
         {
             auto& [type, nr, item] = *fileParts;
             std::string interfacePath;
+            const char* units;
             if (type.compare("power") == 0)
             {
                 interfacePath = "/xyz/openbmc_project/sensors/power/" + name;
+                units = sensor_paths::unitWatts;
                 minValue = 0;
                 maxValue = 511;
             }
@@ -66,6 +68,7 @@
             {
                 interfacePath =
                     "/xyz/openbmc_project/sensors/temperature/" + name;
+                units = sensor_paths::unitDegreesC;
                 minValue = -128;
                 maxValue = 127;
             }
@@ -87,7 +90,7 @@
             association = objectServer.add_interface(interfacePath,
                                                      association::interface);
 
-            setInitialProperties(conn);
+            setInitialProperties(conn, units);
         }
     }
 
diff --git a/src/ExitAirTempSensor.cpp b/src/ExitAirTempSensor.cpp
index 82b75eb..feb37ee 100644
--- a/src/ExitAirTempSensor.cpp
+++ b/src/ExitAirTempSensor.cpp
@@ -189,7 +189,7 @@
     association = objectServer.add_interface(
         "/xyz/openbmc_project/sensors/cfm/" + name, association::interface);
 
-    setInitialProperties(conn);
+    setInitialProperties(conn, sensor_paths::unitCFM);
 
     pwmLimitIface =
         objectServer.add_interface("/xyz/openbmc_project/control/pwm_limit",
@@ -536,7 +536,7 @@
     association = objectServer.add_interface(
         "/xyz/openbmc_project/sensors/temperature/" + name,
         association::interface);
-    setInitialProperties(conn);
+    setInitialProperties(conn, sensor_paths::unitDegreesC);
 }
 
 ExitAirTempSensor::~ExitAirTempSensor()
diff --git a/src/ExternalSensor.cpp b/src/ExternalSensor.cpp
index 3aba626..91f488b 100644
--- a/src/ExternalSensor.cpp
+++ b/src/ExternalSensor.cpp
@@ -70,7 +70,7 @@
 
     association =
         objectServer.add_interface(objectPath, association::interface);
-    setInitialProperties(conn);
+    setInitialProperties(conn, sensorUnits);
 
     if constexpr (debug)
     {
diff --git a/src/HwmonTempSensor.cpp b/src/HwmonTempSensor.cpp
index 41fc357..72b20d0 100644
--- a/src/HwmonTempSensor.cpp
+++ b/src/HwmonTempSensor.cpp
@@ -70,7 +70,7 @@
     association = objectServer.add_interface(
         "/xyz/openbmc_project/sensors/temperature/" + name,
         association::interface);
-    setInitialProperties(conn);
+    setInitialProperties(conn, sensor_paths::unitDegreesC);
 }
 
 HwmonTempSensor::~HwmonTempSensor()
diff --git a/src/IpmbSensor.cpp b/src/IpmbSensor.cpp
index 2d40dc3..503a256 100644
--- a/src/IpmbSensor.cpp
+++ b/src/IpmbSensor.cpp
@@ -98,10 +98,29 @@
     objectServer.remove_interface(association);
 }
 
+std::string IpmbSensor::getSubTypeUnits(void)
+{
+    switch (subType)
+    {
+        case IpmbSubType::temp:
+            return sensor_paths::unitDegreesC;
+        case IpmbSubType::curr:
+            return sensor_paths::unitAmperes;
+        case IpmbSubType::power:
+            return sensor_paths::unitWatts;
+        case IpmbSubType::volt:
+            return sensor_paths::unitVolts;
+        case IpmbSubType::util:
+            return sensor_paths::unitPercent;
+        default:
+            throw std::runtime_error("Invalid sensor type");
+    }
+}
+
 void IpmbSensor::init(void)
 {
     loadDefaults();
-    setInitialProperties(dbusConnection);
+    setInitialProperties(dbusConnection, getSubTypeUnits());
     if (initCommand)
     {
         runInitCmd();
diff --git a/src/MCUTempSensor.cpp b/src/MCUTempSensor.cpp
index f637932..6a64c16 100644
--- a/src/MCUTempSensor.cpp
+++ b/src/MCUTempSensor.cpp
@@ -95,7 +95,7 @@
 
 void MCUTempSensor::init(void)
 {
-    setInitialProperties(dbusConnection);
+    setInitialProperties(dbusConnection, sensor_paths::unitDegreesC);
     read();
 }
 
diff --git a/src/NVMeSensor.cpp b/src/NVMeSensor.cpp
index 1c78354..24f3fd4 100644
--- a/src/NVMeSensor.cpp
+++ b/src/NVMeSensor.cpp
@@ -462,7 +462,7 @@
         "/xyz/openbmc_project/sensors/temperature/" + name,
         association::interface);
 
-    setInitialProperties(conn);
+    setInitialProperties(conn, sensor_paths::unitDegreesC);
 }
 
 NVMeSensor::~NVMeSensor()
diff --git a/src/PSUSensor.cpp b/src/PSUSensor.cpp
index e292863..a528819 100644
--- a/src/PSUSensor.cpp
+++ b/src/PSUSensor.cpp
@@ -41,7 +41,7 @@
                      boost::asio::io_service& io, const std::string& sensorName,
                      std::vector<thresholds::Threshold>&& thresholdsIn,
                      const std::string& sensorConfiguration,
-                     std::string& sensorTypeName, unsigned int factor,
+                     const std::string& sensorUnits, unsigned int factor,
                      double max, double min, const std::string& label,
                      size_t tSize) :
     Sensor(boost::replace_all_copy(sensorName, " ", "_"),
@@ -51,13 +51,14 @@
     inputDev(io), waitTimer(io), path(path), pathRatedMax(""), pathRatedMin(""),
     sensorFactor(factor), minMaxReadCounter(0)
 {
+    std::string unitPath = sensor_paths::getPathForUnits(sensorUnits);
     if constexpr (debug)
     {
         std::cerr << "Constructed sensor: path " << path << " type "
                   << objectType << " config " << sensorConfiguration
-                  << " typename " << sensorTypeName << " factor " << factor
-                  << " min " << min << " max " << max << " name \""
-                  << sensorName << "\"\n";
+                  << " typename " << unitPath << " factor " << factor << " min "
+                  << min << " max " << max << " name \"" << sensorName
+                  << "\"\n";
     }
 
     fd = open(path.c_str(), O_RDONLY);
@@ -68,7 +69,7 @@
     }
     inputDev.assign(fd);
 
-    std::string dbusPath = sensorPathPrefix + sensorTypeName + name;
+    std::string dbusPath = sensorPathPrefix + unitPath + "/" + name;
 
     sensorInterface = objectServer.add_interface(
         dbusPath, "xyz.openbmc_project.Sensor.Value");
@@ -89,11 +90,11 @@
     // register and initialize "Associations" property.
     if (label.empty() || tSize == thresholds.size())
     {
-        setInitialProperties(conn);
+        setInitialProperties(conn, sensorUnits);
     }
     else
     {
-        setInitialProperties(conn, label, tSize);
+        setInitialProperties(conn, sensorUnits, label, tSize);
     }
 
     association = objectServer.add_interface(dbusPath, association::interface);
diff --git a/src/PSUSensorMain.cpp b/src/PSUSensorMain.cpp
index baf2bd1..6595db9 100644
--- a/src/PSUSensorMain.cpp
+++ b/src/PSUSensorMain.cpp
@@ -774,8 +774,8 @@
                           << sensorNameSubStr << "\n";
             }
 
-            auto findSensorType = sensorTable.find(sensorNameSubStr);
-            if (findSensorType == sensorTable.end())
+            auto findSensorUnit = sensorTable.find(sensorNameSubStr);
+            if (findSensorUnit == sensorTable.end())
             {
                 std::cerr << sensorNameSubStr
                           << " is not a recognized sensor type\n";
@@ -821,7 +821,7 @@
             sensors[sensorName] = std::make_shared<PSUSensor>(
                 sensorPathStr, sensorType, objectServer, dbusConnection, io,
                 sensorName, std::move(sensorThresholds), *interfacePath,
-                findSensorType->second, factor, psuProperty->maxReading,
+                findSensorUnit->second, factor, psuProperty->maxReading,
                 psuProperty->minReading, labelHead, thresholdConfSize);
             sensors[sensorName]->setupRead();
             ++numCreated;
@@ -864,11 +864,11 @@
 
 void propertyInitialize(void)
 {
-    sensorTable = {{"power", "power/"},
-                   {"curr", "current/"},
-                   {"temp", "temperature/"},
-                   {"in", "voltage/"},
-                   {"fan", "fan_tach/"}};
+    sensorTable = {{"power", sensor_paths::unitWatts},
+                   {"curr", sensor_paths::unitAmperes},
+                   {"temp", sensor_paths::unitDegreesC},
+                   {"in", sensor_paths::unitVolts},
+                   {"fan", sensor_paths::unitRPMs}};
 
     labelMatch = {{"pin", PSUProperty("Input Power", 3000, 0, 6)},
                   {"pout1", PSUProperty("Output Power", 3000, 0, 6)},
diff --git a/src/PwmSensor.cpp b/src/PwmSensor.cpp
index bd9c9d6..f76ea50 100644
--- a/src/PwmSensor.cpp
+++ b/src/PwmSensor.cpp
@@ -107,6 +107,7 @@
     // pwm sensor interface is in percent
     sensorInterface->register_property("MaxValue", static_cast<int64_t>(100));
     sensorInterface->register_property("MinValue", static_cast<int64_t>(0));
+    sensorInterface->register_property("Unit", sensor_paths::unitPercent);
 
     controlInterface = objectServer.add_interface(
         "/xyz/openbmc_project/control/fanpwm/" + name,
diff --git a/src/SensorPaths.cpp b/src/SensorPaths.cpp
index f10e60b..b0cea9c 100644
--- a/src/SensorPaths.cpp
+++ b/src/SensorPaths.cpp
@@ -1,3 +1,5 @@
+#include <SensorPaths.hpp>
+
 #include <cstring>
 #include <regex>
 #include <string>
@@ -11,35 +13,35 @@
 
 std::string getPathForUnits(const std::string& units)
 {
-    if (units == "DegreesC")
+    if (units == "DegreesC" || units == unitDegreesC)
     {
         return "temperature";
     }
-    if (units == "RPMS")
+    if (units == "RPMS" || units == unitRPMs)
     {
         return "fan_tach";
     }
-    if (units == "Volts")
+    if (units == "Volts" || units == unitVolts)
     {
         return "voltage";
     }
-    if (units == "Meters")
+    if (units == "Meters" || units == unitMeters)
     {
         return "altitude";
     }
-    if (units == "Amperes")
+    if (units == "Amperes" || units == unitAmperes)
     {
         return "current";
     }
-    if (units == "Watts")
+    if (units == "Watts" || units == unitWatts)
     {
         return "power";
     }
-    if (units == "Joules")
+    if (units == "Joules" || units == unitJoules)
     {
         return "energy";
     }
-    if (units == "Percent")
+    if (units == "Percent" || units == unitPercent)
     {
         return "Utilization";
     }
diff --git a/src/TachSensor.cpp b/src/TachSensor.cpp
index 1ec979f..b3c955c 100644
--- a/src/TachSensor.cpp
+++ b/src/TachSensor.cpp
@@ -97,7 +97,7 @@
                  "/xyz/openbmc_project/sensors/fan_tach/" + name}});
         itemAssoc->initialize();
     }
-    setInitialProperties(conn);
+    setInitialProperties(conn, sensor_paths::unitRPMs);
     setupRead();
 }
 
