diff --git a/include/Utils.hpp b/include/Utils.hpp
index d2ab5ca..01d941f 100644
--- a/include/Utils.hpp
+++ b/include/Utils.hpp
@@ -316,3 +316,5 @@
     splitFileName(const std::filesystem::path& filePath);
 std::optional<double> readFile(const std::string& thresholdFile,
                                const double& scaleFactor);
+void setupManufacturingModeMatch(sdbusplus::asio::connection& conn);
+bool getManufacturingMode();
diff --git a/include/dbus-sensor_config.h.in b/include/dbus-sensor_config.h.in
new file mode 100644
index 0000000..0e07685
--- /dev/null
+++ b/include/dbus-sensor_config.h.in
@@ -0,0 +1,9 @@
+#pragma once
+
+#include <cstdint>
+
+// clang-format off
+constexpr const bool validateUnsecureFeature = @VALIDATION_UNSECURE_FEATURE@;
+
+constexpr const bool insecureSensorOverride = @INSECURE_UNRESTRICTED_SENSOR_OVERRIDE@;
+// clang-format on
\ No newline at end of file
diff --git a/include/meson.build b/include/meson.build
new file mode 100644
index 0000000..4810de7
--- /dev/null
+++ b/include/meson.build
@@ -0,0 +1,6 @@
+conf_data = configuration_data()
+conf_data.set10('VALIDATION_UNSECURE_FEATURE', get_option('validate-unsecure-feature').enabled())
+conf_data.set10('INSECURE_UNRESTRICTED_SENSOR_OVERRIDE', get_option('insecure-sensor-override').enabled())
+configure_file(input: 'dbus-sensor_config.h.in',
+               output: 'dbus-sensor_config.h',
+               configuration: conf_data)
\ No newline at end of file
diff --git a/include/sensor.hpp b/include/sensor.hpp
index d1fb22e..b98241b 100644
--- a/include/sensor.hpp
+++ b/include/sensor.hpp
@@ -1,4 +1,5 @@
 #pragma once
+#include "dbus-sensor_config.h"
 
 #include <SensorPaths.hpp>
 #include <Thresholds.hpp>
@@ -39,12 +40,13 @@
     Sensor(const std::string& name,
            std::vector<thresholds::Threshold>&& thresholdData,
            const std::string& configurationPath, const std::string& objectType,
-           const double max, const double min,
+           bool isSettable, const double max, const double min,
            std::shared_ptr<sdbusplus::asio::connection>& conn,
            PowerState readState = PowerState::always) :
         name(sensor_paths::escapePathForDbus(name)),
         configurationPath(configurationPath), objectType(objectType),
-        maxValue(max), minValue(min), thresholds(std::move(thresholdData)),
+        isSensorSettable(isSettable), maxValue(max), minValue(min),
+        thresholds(std::move(thresholdData)),
         hysteresisTrigger((max - min) * 0.01),
         hysteresisPublish((max - min) * 0.0001), dbusConnection(conn),
         readState(readState), errCount(0),
@@ -57,6 +59,7 @@
     std::string name;
     std::string configurationPath;
     std::string objectType;
+    bool isSensorSettable;
     double maxValue;
     double minValue;
     std::vector<thresholds::Threshold> thresholds;
@@ -173,6 +176,18 @@
     {
         if (!internalSet)
         {
+            if (insecureSensorOverride == false)
+            { // insecure sesnor override.
+                if (isSensorSettable == false)
+                { // sensor is not settable.
+                    if (getManufacturingMode() == false)
+                    { // manufacture mode is not enable.
+                        throw sdbusplus::exception::SdBusError(
+                            -EACCES, "Not allow set porperty value.");
+                    }
+                }
+            }
+
             oldValue = newValue;
             overriddenState = true;
             // check thresholds for external set
