diff --git a/redfish-core/lib/power.hpp b/redfish-core/lib/power.hpp
index 5e6ba8a..67e40b2 100644
--- a/redfish-core/lib/power.hpp
+++ b/redfish-core/lib/power.hpp
@@ -360,8 +360,7 @@
             std::unordered_map<std::string, std::vector<nlohmann::json>>
                 allCollections;
             allCollections.emplace("Voltages", *std::move(voltageCollections));
-            checkAndDoSensorsOverride(asyncResp, allCollections, chassisName,
-                                      typeList);
+            checkAndDoSensorsOverride(asyncResp, allCollections);
         }
     }
 };
diff --git a/redfish-core/lib/sensors.hpp b/redfish-core/lib/sensors.hpp
index 6c1f830..3caaeed 100644
--- a/redfish-core/lib/sensors.hpp
+++ b/redfish-core/lib/sensors.hpp
@@ -2597,14 +2597,12 @@
  *
  * @param res   response object
  * @param allCollections   Collections extract from sensors' request patch info
- * @param typeList   TypeList of sensors for the resource queried
  * @param chassisSubNode  Chassis Node for which the query has to happen
  */
 void setSensorsOverride(
     std::shared_ptr<SensorsAsyncResp> sensorAsyncResp,
     std::unordered_map<std::string, std::vector<nlohmann::json>>&
-        allCollections,
-    const std::string& chassisName, const std::vector<const char*> typeList)
+        allCollections)
 {
     BMCWEB_LOG_INFO << "setSensorsOverride for subNode"
                     << sensorAsyncResp->chassisSubNode << "\n";
@@ -2752,13 +2750,12 @@
  *
  * @param res   response object
  * @param allCollections   Collections extract from sensors' request patch info
- * @param typeList   TypeList of sensors for the resource queried
- * @param chassisSubNode  Chassis Node for which the query has to happen
+ * @param chassisSubNode   Chassis Node for which the query has to happen
  */
 void checkAndDoSensorsOverride(
     std::shared_ptr<SensorsAsyncResp> sensorAsyncResp,
-    std::unordered_map<std::string, std::vector<nlohmann::json>>& allCollect,
-    const std::string& chassisName, const std::vector<const char*> typeList)
+    std::unordered_map<std::string, std::vector<nlohmann::json>>&
+        allCollections)
 {
     BMCWEB_LOG_INFO << "checkAndDoSensorsOverride for subnode"
                     << sensorAsyncResp->chassisSubNode << "\n";
@@ -2767,9 +2764,8 @@
         "xyz.openbmc_project.Security.SpecialMode"};
 
     crow::connections::systemBus->async_method_call(
-        [sensorAsyncResp, allCollect, chassisName,
-         typeList](const boost::system::error_code ec,
-                   const GetSubTreeType& resp) mutable {
+        [sensorAsyncResp, allCollections](const boost::system::error_code ec,
+                                          const GetSubTreeType& resp) mutable {
             if (ec)
             {
                 BMCWEB_LOG_DEBUG
@@ -2782,8 +2778,7 @@
             {
                 // Special mode manager doesn't exist, proceed with sensor
                 // override
-                setSensorsOverride(sensorAsyncResp, allCollect, chassisName,
-                                   typeList);
+                setSensorsOverride(sensorAsyncResp, allCollections);
                 return;
             }
 
@@ -2807,7 +2802,7 @@
             // Sensor override is allowed only in manufacturing mode or
             // validation unsecure mode .
             crow::connections::systemBus->async_method_call(
-                [sensorAsyncResp, allCollect, chassisName, typeList,
+                [sensorAsyncResp, allCollections,
                  path](const boost::system::error_code ec,
                        std::variant<std::string>& getManufactMode) mutable {
                     if (ec)
@@ -2833,8 +2828,7 @@
                     {
                         BMCWEB_LOG_INFO << "Manufacturing mode is Enabled. "
                                            "Proceeding further... ";
-                        setSensorsOverride(sensorAsyncResp, allCollect,
-                                           chassisName, typeList);
+                        setSensorsOverride(sensorAsyncResp, allCollections);
                     }
                     else
                     {
diff --git a/redfish-core/lib/thermal.hpp b/redfish-core/lib/thermal.hpp
index ac74657..28b11a5 100644
--- a/redfish-core/lib/thermal.hpp
+++ b/redfish-core/lib/thermal.hpp
@@ -98,8 +98,7 @@
             allCollections.emplace("Fans", *std::move(fanCollections));
         }
 
-        checkAndDoSensorsOverride(asyncResp, allCollections, chassisName,
-                                  typeList);
+        checkAndDoSensorsOverride(asyncResp, allCollections);
     }
 };
 
