diff --git a/configure.ac b/configure.ac
index 32a6ecc..96b23f0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -140,12 +140,12 @@
 AC_DEFINE_UNQUOTED([OCC_MASTER_NAME], ["$OCC_MASTER_NAME"], [The OCC master object name])
 
 AC_ARG_VAR(OCC_CPU_TEMP_SENSOR_TYPE, [The CPU temp sensor type])
-AS_IF([test "x$OCC_CPU_TEMP_SENSOR_TYPE" == "x"], [OCC_CPU_TEMP_SENSOR_TYPE="C0"])
-AC_DEFINE_UNQUOTED([OCC_CPU_TEMP_SENSOR_TYPE], ["$OCC_CPU_TEMP_SENSOR_TYPE"], [The CPU temp sensor type])
+AS_IF([test "x$OCC_CPU_TEMP_SENSOR_TYPE" == "x"], [OCC_CPU_TEMP_SENSOR_TYPE=0xC0])
+AC_DEFINE_UNQUOTED([OCC_CPU_TEMP_SENSOR_TYPE], [$OCC_CPU_TEMP_SENSOR_TYPE], [The CPU temp sensor type])
 
 AC_ARG_VAR(OCC_DIMM_TEMP_SENSOR_TYPE, [The dimm temp sensor type])
-AS_IF([test "x$OCC_DIMM_TEMP_SENSOR_TYPE" == "x"], [OCC_DIMM_TEMP_SENSOR_TYPE="D0"])
-AC_DEFINE_UNQUOTED([OCC_DIMM_TEMP_SENSOR_TYPE], ["$OCC_DIMM_TEMP_SENSOR_TYPE"], [The dimm temp sensor type])
+AS_IF([test "x$OCC_DIMM_TEMP_SENSOR_TYPE" == "x"], [OCC_DIMM_TEMP_SENSOR_TYPE=0xD0])
+AC_DEFINE_UNQUOTED([OCC_DIMM_TEMP_SENSOR_TYPE], [$OCC_DIMM_TEMP_SENSOR_TYPE], [The dimm temp sensor type])
 
 AC_ARG_VAR(OCC_HWMON_PATH, [The OCC hwmon path])
 AC_ARG_VAR(DEV_PATH, [The device path])
diff --git a/occ_manager.cpp b/occ_manager.cpp
index 4b5df04..a6d18ac 100644
--- a/occ_manager.cpp
+++ b/occ_manager.cpp
@@ -220,7 +220,7 @@
 
             continue;
         }
-        std::string labelValue;
+        uint32_t labelValue{0};
         fileOpen >> labelValue;
         fileOpen.close();
 
@@ -250,13 +250,8 @@
         }
         else
         {
-            auto sensorTypeID =
-                open_power::occ::utils::checkLabelValue(labelValue);
-            if (sensorTypeID == std::nullopt)
-            {
-                continue;
-            }
-            auto& [type, instanceID] = *sensorTypeID;
+            uint16_t type = (labelValue & 0xFF000000) >> 24;
+            uint16_t instanceID = labelValue & 0x0000FFFF;
 
             if (type == OCC_DIMM_TEMP_SENSOR_TYPE)
             {
diff --git a/test/utest.cpp b/test/utest.cpp
index ff75a60..704c5c6 100644
--- a/test/utest.cpp
+++ b/test/utest.cpp
@@ -68,17 +68,3 @@
 
     EXPECT_STREQ(parsed.c_str(), "bar");
 }
-
-TEST(VerifyLabelValue, checkLabelValue)
-{
-    const std::string value = "D0000002";
-
-    auto labelValue = checkLabelValue(value);
-    EXPECT_NE(labelValue, std::nullopt);
-
-    std::string reType = "D0";
-    uint16_t reID = 2;
-    auto& [type, instanceID] = *labelValue;
-    EXPECT_EQ(type, reType);
-    EXPECT_EQ(instanceID, reID);
-}
diff --git a/utils.cpp b/utils.cpp
index b1fd8b6..9a412a3 100644
--- a/utils.cpp
+++ b/utils.cpp
@@ -75,40 +75,6 @@
     return value;
 }
 
-std::optional<LABELVALUE> checkLabelValue(const std::string& value)
-{
-    // The ID 0xD0000002 is only 4 bytes long, but when converted to a string it
-    // is 8 characters long
-    // eg: Dimm2, the lable file is `D0000002` so value
-    // length = 2 byte(type) + 2 byte(reserve) + 4 byte(instace ID)
-    size_t valueLen = value.length();
-    size_t typeLen = 2;
-    size_t reserveLen = 2;
-    size_t instanceIDLen = 4;
-    if (valueLen != typeLen + reserveLen + instanceIDLen)
-    {
-        return std::nullopt;
-    }
-
-    size_t offset = 0;
-    std::string type = value.substr(offset, typeLen);
-    offset += typeLen;
-    std::string reserve = value.substr(offset, reserveLen);
-    offset += reserveLen;
-
-    if ("00" != reserve)
-    {
-        return std::nullopt;
-    }
-
-    const char* start = value.data() + offset;
-    uint16_t instanceID = static_cast<uint16_t>(std::strtol(start, NULL, 16));
-
-    LABELVALUE labelValue{type, instanceID};
-
-    return std::make_optional(std::move(labelValue));
-}
-
 } // namespace utils
 } // namespace occ
 } // namespace open_power
diff --git a/utils.hpp b/utils.hpp
index 6254ed7..b1da8c0 100644
--- a/utils.hpp
+++ b/utils.hpp
@@ -12,8 +12,6 @@
 namespace utils
 {
 
-using LABELVALUE = std::tuple<std::string, uint16_t>;
-
 constexpr auto MAPPER_BUSNAME = "xyz.openbmc_project.ObjectMapper";
 constexpr auto MAPPER_OBJ_PATH = "/xyz/openbmc_project/object_mapper";
 constexpr auto MAPPER_IFACE = "xyz.openbmc_project.ObjectMapper";
@@ -55,15 +53,6 @@
                                 const std::string& interface,
                                 const std::string& propertyName);
 
-/**
- * @brief Check the value of the `tempX_label` file
- *
- * @param[in] value  -  the value of the `tempX_label` file
- *
- * @return              Sensors type and Sensors ID
- */
-std::optional<LABELVALUE> checkLabelValue(const std::string& value);
-
 } // namespace utils
 } // namespace occ
 } // namespace open_power
