diff --git a/include/CPUSensor.hpp b/include/CPUSensor.hpp
index 84a1e32..3f16069 100644
--- a/include/CPUSensor.hpp
+++ b/include/CPUSensor.hpp
@@ -93,7 +93,7 @@
         return false;
     }
 
-    bool resp;
+    bool resp = false;
     try
     {
         line.request({"cpusensor", gpiod::line_request::DIRECTION_INPUT,
diff --git a/include/ExternalSensor.hpp b/include/ExternalSensor.hpp
index a8b48e5..3ca3c8a 100644
--- a/include/ExternalSensor.hpp
+++ b/include/ExternalSensor.hpp
@@ -23,7 +23,7 @@
                    const std::string& sensorConfiguration, double maxReading,
                    double minReading, double timeoutSecs,
                    const PowerState& powerState);
-    virtual ~ExternalSensor();
+    ~ExternalSensor() override;
 
     // Call this immediately after calling the constructor
     void initWriteHook(
diff --git a/include/NVMeBasicContext.hpp b/include/NVMeBasicContext.hpp
index 579030e..29b55d9 100644
--- a/include/NVMeBasicContext.hpp
+++ b/include/NVMeBasicContext.hpp
@@ -9,10 +9,10 @@
 {
   public:
     NVMeBasicContext(boost::asio::io_service& io, int rootBus);
-    virtual ~NVMeBasicContext() = default;
-    virtual void pollNVMeDevices() override;
-    virtual void readAndProcessNVMeSensor() override;
-    virtual void processResponse(void* msg, size_t len) override;
+    ~NVMeBasicContext() override = default;
+    void pollNVMeDevices() override;
+    void readAndProcessNVMeSensor() override;
+    void processResponse(void* msg, size_t len) override;
 
   private:
     NVMeBasicContext(boost::asio::io_service& io, int rootBus, int cmdOut,
diff --git a/include/NVMeContext.hpp b/include/NVMeContext.hpp
index 96157e3..27c1720 100644
--- a/include/NVMeContext.hpp
+++ b/include/NVMeContext.hpp
@@ -19,7 +19,7 @@
         close();
     }
 
-    void addSensor(std::shared_ptr<NVMeSensor> sensor)
+    void addSensor(const std::shared_ptr<NVMeSensor>& sensor)
     {
         sensors.emplace_back(sensor);
     }
@@ -38,7 +38,7 @@
         return std::nullopt;
     }
 
-    void removeSensor(std::shared_ptr<NVMeSensor> sensor)
+    void removeSensor(const std::shared_ptr<NVMeSensor>& sensor)
     {
         sensors.remove(sensor);
     }
diff --git a/include/NVMeMCTPContext.hpp b/include/NVMeMCTPContext.hpp
index 656e1fd..8af3e8d 100644
--- a/include/NVMeMCTPContext.hpp
+++ b/include/NVMeMCTPContext.hpp
@@ -9,12 +9,12 @@
   public:
     NVMeMCTPContext(boost::asio::io_service& io, int rootBus);
 
-    virtual ~NVMeMCTPContext();
+    ~NVMeMCTPContext() override;
 
-    virtual void pollNVMeDevices() override;
-    virtual void close() override;
-    virtual void readAndProcessNVMeSensor() override;
-    virtual void processResponse(void* msg, size_t len) override;
+    void pollNVMeDevices() override;
+    void close() override;
+    void readAndProcessNVMeSensor() override;
+    void processResponse(void* msg, size_t len) override;
 
   private:
     boost::asio::ip::tcp::socket nvmeSlaveSocket;
@@ -23,7 +23,7 @@
     void readResponse();
 };
 
-namespace nvmeMCTP
+namespace nvme_mctp
 {
 void init(void);
 }
diff --git a/include/NVMeSensor.hpp b/include/NVMeSensor.hpp
index 48ffc25..d713211 100644
--- a/include/NVMeSensor.hpp
+++ b/include/NVMeSensor.hpp
@@ -6,7 +6,7 @@
 class NVMeSensor : public Sensor
 {
   public:
-    static constexpr const char* CONFIG_TYPE =
+    static constexpr const char* configType =
         "xyz.openbmc_project.Configuration.NVME1000";
 
     NVMeSensor(sdbusplus::asio::object_server& objectServer,
@@ -15,7 +15,7 @@
                const std::string& sensorName,
                std::vector<thresholds::Threshold>&& thresholds,
                const std::string& sensorConfiguration, const int busNumber);
-    virtual ~NVMeSensor();
+    ~NVMeSensor() override;
 
     NVMeSensor& operator=(const NVMeSensor& other) = delete;
 
diff --git a/include/dbus-sensor_config.h.in b/include/dbus-sensor_config.h.in
index 0e07685..6dc9931 100644
--- a/include/dbus-sensor_config.h.in
+++ b/include/dbus-sensor_config.h.in
@@ -3,7 +3,7 @@
 #include <cstdint>
 
 // clang-format off
-constexpr const bool validateUnsecureFeature = @VALIDATION_UNSECURE_FEATURE@;
+constexpr const int validateUnsecureFeature = @VALIDATION_UNSECURE_FEATURE@;
 
-constexpr const bool insecureSensorOverride = @INSECURE_UNRESTRICTED_SENSOR_OVERRIDE@;
+constexpr const int insecureSensorOverride = @INSECURE_UNRESTRICTED_SENSOR_OVERRIDE@;
 // clang-format on
\ No newline at end of file
diff --git a/include/meson.build b/include/meson.build
index 4810de7..c5b83c3 100644
--- a/include/meson.build
+++ b/include/meson.build
@@ -3,4 +3,5 @@
 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
+               configuration: conf_data)
+
diff --git a/include/sensor.hpp b/include/sensor.hpp
index 7021430..25e28fd 100644
--- a/include/sensor.hpp
+++ b/include/sensor.hpp
@@ -229,7 +229,7 @@
     {
         if (!internalSet)
         {
-            if (insecureSensorOverride == false)
+            if (insecureSensorOverride == 0)
             { // insecure sesnor override.
                 if (isSensorSettable == false)
                 { // sensor is not settable.
