diff --git a/.clang-tidy b/.clang-tidy
new file mode 100644
index 0000000..f90f316
--- /dev/null
+++ b/.clang-tidy
@@ -0,0 +1,262 @@
+Checks: '
+-*,
+readability-identifier-naming,
+clang-analyzer-apiModeling.StdCLibraryFunctions,
+clang-analyzer-apiModeling.TrustNonnull,
+clang-analyzer-apiModeling.google.GTest,
+clang-analyzer-apiModeling.llvm.CastValue,
+clang-analyzer-apiModeling.llvm.ReturnValue,
+clang-analyzer-core.CallAndMessageModeling,
+clang-analyzer-core.DivideZero,
+clang-analyzer-core.DynamicTypePropagation,
+clang-analyzer-core.NonNullParamChecker,
+clang-analyzer-core.NonnilStringConstants,
+clang-analyzer-core.NullDereference,
+clang-analyzer-core.StackAddrEscapeBase,
+clang-analyzer-core.StackAddressEscape,
+clang-analyzer-core.UndefinedBinaryOperatorResult,
+clang-analyzer-core.VLASize,
+clang-analyzer-core.builtin.BuiltinFunctions,
+clang-analyzer-core.builtin.NoReturnFunctions,
+clang-analyzer-core.uninitialized.ArraySubscript,
+clang-analyzer-core.uninitialized.Assign,
+clang-analyzer-core.uninitialized.Branch,
+clang-analyzer-core.uninitialized.CapturedBlockVariable,
+clang-analyzer-core.uninitialized.UndefReturn,
+clang-analyzer-cplusplus.InnerPointer,
+clang-analyzer-cplusplus.Move,
+clang-analyzer-cplusplus.NewDelete,
+clang-analyzer-cplusplus.NewDeleteLeaks,
+clang-analyzer-cplusplus.PlacementNew,
+clang-analyzer-cplusplus.PureVirtualCall,
+clang-analyzer-cplusplus.SelfAssignment,
+clang-analyzer-cplusplus.SmartPtrModeling,
+clang-analyzer-cplusplus.VirtualCallModeling,
+clang-analyzer-deadcode.DeadStores,
+clang-analyzer-fuchsia.HandleChecker,
+clang-analyzer-nullability.NullPassedToNonnull,
+clang-analyzer-nullability.NullReturnedFromNonnull,
+clang-analyzer-nullability.NullabilityBase,
+clang-analyzer-nullability.NullableDereferenced,
+clang-analyzer-nullability.NullablePassedToNonnull,
+clang-analyzer-nullability.NullableReturnedFromNonnull,
+clang-analyzer-optin.cplusplus.UninitializedObject,
+clang-analyzer-optin.cplusplus.VirtualCall,
+clang-analyzer-optin.mpi.MPI-Checker,
+clang-analyzer-optin.osx.OSObjectCStyleCast,
+clang-analyzer-optin.osx.cocoa.localizability.EmptyLocalizationContextChecker,
+clang-analyzer-optin.osx.cocoa.localizability.NonLocalizedStringChecker,
+clang-analyzer-optin.performance.GCDAntipattern,
+clang-analyzer-optin.performance.Padding,
+clang-analyzer-optin.portability.UnixAPI,
+clang-analyzer-osx.API,
+clang-analyzer-osx.MIG,
+clang-analyzer-osx.NSOrCFErrorDerefChecker,
+clang-analyzer-osx.NumberObjectConversion,
+clang-analyzer-osx.OSObjectRetainCount,
+clang-analyzer-osx.ObjCProperty,
+clang-analyzer-osx.SecKeychainAPI,
+clang-analyzer-osx.cocoa.AtSync,
+clang-analyzer-osx.cocoa.AutoreleaseWrite,
+clang-analyzer-osx.cocoa.ClassRelease,
+clang-analyzer-osx.cocoa.Dealloc,
+clang-analyzer-osx.cocoa.IncompatibleMethodTypes,
+clang-analyzer-osx.cocoa.Loops,
+clang-analyzer-osx.cocoa.MissingSuperCall,
+clang-analyzer-osx.cocoa.NSAutoreleasePool,
+clang-analyzer-osx.cocoa.NSError,
+clang-analyzer-osx.cocoa.NilArg,
+clang-analyzer-osx.cocoa.NonNilReturnValue,
+clang-analyzer-osx.cocoa.ObjCGenerics,
+clang-analyzer-osx.cocoa.RetainCount,
+clang-analyzer-osx.cocoa.RetainCountBase,
+clang-analyzer-osx.cocoa.RunLoopAutoreleaseLeak,
+clang-analyzer-osx.cocoa.SelfInit,
+clang-analyzer-osx.cocoa.SuperDealloc,
+clang-analyzer-osx.cocoa.UnusedIvars,
+clang-analyzer-osx.cocoa.VariadicMethodTypes,
+clang-analyzer-osx.coreFoundation.CFError,
+clang-analyzer-osx.coreFoundation.CFNumber,
+clang-analyzer-osx.coreFoundation.CFRetainRelease,
+clang-analyzer-osx.coreFoundation.containers.OutOfBounds,
+clang-analyzer-osx.coreFoundation.containers.PointerSizedValues,
+clang-analyzer-security.FloatLoopCounter,
+clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling,
+clang-analyzer-security.insecureAPI.SecuritySyntaxChecker,
+clang-analyzer-security.insecureAPI.UncheckedReturn,
+clang-analyzer-security.insecureAPI.bcmp,
+clang-analyzer-security.insecureAPI.bcopy,
+clang-analyzer-security.insecureAPI.bzero,
+clang-analyzer-security.insecureAPI.decodeValueOfObjCType,
+clang-analyzer-security.insecureAPI.getpw,
+clang-analyzer-security.insecureAPI.gets,
+clang-analyzer-security.insecureAPI.mkstemp,
+clang-analyzer-security.insecureAPI.mktemp,
+clang-analyzer-security.insecureAPI.rand,
+clang-analyzer-security.insecureAPI.strcpy,
+clang-analyzer-security.insecureAPI.vfork,
+clang-analyzer-unix.API,
+clang-analyzer-unix.DynamicMemoryModeling,
+clang-analyzer-unix.Malloc,
+clang-analyzer-unix.MallocSizeof,
+clang-analyzer-unix.MismatchedDeallocator,
+clang-analyzer-unix.Vfork,
+clang-analyzer-unix.cstring.BadSizeArg,
+clang-analyzer-unix.cstring.CStringModeling,
+clang-analyzer-unix.cstring.NullArg,
+clang-analyzer-valist.CopyToSelf,
+clang-analyzer-valist.Uninitialized,
+clang-analyzer-valist.Unterminated,
+clang-analyzer-valist.ValistBase,
+clang-analyzer-webkit.NoUncountedMemberChecker,
+clang-analyzer-webkit.RefCntblBaseVirtualDtor,
+cert-con36-c,
+cert-con54-cpp,
+cert-dcl03-c,
+cert-dcl16-c,
+cert-dcl21-cpp,
+cert-dcl37-c,
+cert-dcl50-cpp,
+cert-dcl51-cpp,
+cert-dcl54-cpp,
+cert-dcl58-cpp,
+cert-dcl59-cpp,
+cert-env33-c,
+cert-err09-cpp,
+cert-err34-c,
+cert-err52-cpp,
+cert-err60-cpp,
+cert-err61-cpp,
+cert-fio38-c,
+cert-flp30-c,
+cert-mem57-cpp,
+cert-msc30-c,
+cert-msc32-c,
+cert-msc50-cpp,
+cert-msc51-cpp,
+cert-oop11-cpp,
+cert-oop54-cpp,
+cert-oop57-cpp,
+modernize-avoid-bind,
+modernize-deprecated-headers,
+modernize-deprecated-ios-base-aliases,
+modernize-loop-convert,
+modernize-make-shared,
+modernize-make-unique,
+modernize-raw-string-literal,
+modernize-replace-auto-ptr,
+modernize-replace-random-shuffle,
+modernize-return-braced-init-list,
+modernize-shrink-to-fit,
+modernize-unary-static-assert,
+modernize-use-bool-literals,
+modernize-use-default-member-init,
+modernize-use-emplace,
+modernize-use-equals-default,
+modernize-use-equals-delete,
+modernize-use-noexcept,
+modernize-use-nullptr,
+modernize-use-override,
+modernize-use-transparent-functors,
+modernize-use-uncaught-exceptions,
+modernize-use-using,
+bugprone-argument-comment,
+bugprone-assert-side-effect,
+bugprone-bad-signal-to-kill-thread,
+bugprone-bool-pointer-implicit-conversion,
+bugprone-branch-clone,
+bugprone-copy-constructor-init,
+bugprone-dangling-handle,
+bugprone-dynamic-static-initializers,
+bugprone-fold-init-type,
+bugprone-forward-declaration-namespace,
+bugprone-forwarding-reference-overload,
+bugprone-inaccurate-erase,
+bugprone-incorrect-roundings,
+bugprone-infinite-loop,
+bugprone-integer-division,
+bugprone-lambda-function-name,
+bugprone-macro-parentheses,
+bugprone-macro-repeated-side-effects,
+bugprone-misplaced-operator-in-strlen-in-alloc,
+bugprone-misplaced-pointer-arithmetic-in-alloc,
+bugprone-misplaced-widening-cast,
+bugprone-multiple-statement-macro,
+bugprone-narrowing-conversions,
+bugprone-no-escape,
+bugprone-not-null-terminated-result,
+bugprone-parent-virtual-call,
+bugprone-posix-return,
+bugprone-reserved-identifier,
+bugprone-signed-char-misuse,
+bugprone-sizeof-container,
+bugprone-sizeof-expression,
+bugprone-spuriously-wake-up-functions,
+bugprone-string-constructor,
+bugprone-string-integer-assignment,
+bugprone-string-literal-with-embedded-nul,
+bugprone-suspicious-enum-usage,
+bugprone-suspicious-include,
+bugprone-suspicious-memset-usage,
+bugprone-suspicious-missing-comma,
+bugprone-suspicious-semicolon,
+bugprone-suspicious-string-compare,
+bugprone-swapped-arguments,
+bugprone-terminating-continue,
+bugprone-throw-keyword-missing,
+bugprone-too-small-loop-variable,
+bugprone-undefined-memory-manipulation,
+bugprone-undelegated-constructor,
+bugprone-unhandled-self-assignment,
+bugprone-unused-raii,
+bugprone-unused-return-value,
+bugprone-use-after-move,
+bugprone-virtual-near-miss,
+misc-misplaced-const,
+misc-no-recursion,
+misc-redundant-expression,
+misc-static-assert,
+misc-throw-by-value-catch-by-reference,
+misc-unconventional-assign-operator,
+misc-uniqueptr-reset-release,
+misc-unused-using-decls,
+performance-for-range-copy,
+performance-implicit-conversion-in-loop,
+performance-inefficient-algorithm,
+performance-inefficient-vector-operation,
+performance-move-constructor-init,
+performance-no-automatic-move,
+performance-trivially-destructible,
+performance-type-promotion-in-math-fn,
+performance-unnecessary-copy-initialization,
+performance-faster-string-find,
+performance-for-range-copy,
+performance-implicit-conversion-in-loop,
+performance-inefficient-algorithm,
+performance-inefficient-string-concatenation,
+performance-inefficient-vector-operation,
+performance-move-const-arg,
+performance-move-constructor-init,
+performance-no-automatic-move,
+performance-noexcept-move-constructor,
+performance-trivially-destructible,
+performance-type-promotion-in-math-fn,
+performance-unnecessary-copy-initialization,
+performance-unnecessary-value-param,
+readability-identifier-naming,
+readability-braces-around-statements,
+readability-const-return-type,
+readability-delete-null-pointer,
+readability-deleted-default,
+readability-else-after-return'
+
+WarningsAsErrors: '*'
+HeaderFilterRegex: '^((?!linux).)*$'
+CheckOptions:
+  - { key: readability-identifier-naming.ClassCase,     value: CamelCase  }
+  - { key: readability-identifier-naming.VariableCase,  value: camelBack }
+  - { key: readability-identifier-naming.FunctionCase,  value: camelBack }
+  - { key: readability-identifier-naming.ParameterCase, value: camelBack }
+  - { key: readability-identifier-naming.NamespaceCase, value: lower_case }
+  - { key: readability-identifier-naming.StructCase,    value: CamelCase  }
+
diff --git a/include/ADCSensor.hpp b/include/ADCSensor.hpp
index 800e1fc..d1edf6d 100644
--- a/include/ADCSensor.hpp
+++ b/include/ADCSensor.hpp
@@ -1,11 +1,10 @@
 #pragma once
 
-#include "Thresholds.hpp"
-#include "sensor.hpp"
-
+#include <Thresholds.hpp>
 #include <boost/asio/streambuf.hpp>
 #include <gpiod.hpp>
 #include <sdbusplus/asio/object_server.hpp>
+#include <sensor.hpp>
 
 #include <memory>
 #include <optional>
@@ -70,7 +69,7 @@
               const double scaleFactor, PowerState readState,
               const std::string& sensorConfiguration,
               std::optional<BridgeGpio>&& bridgeGpio);
-    ~ADCSensor();
+    ~ADCSensor() override;
     void setupRead(void);
 
   private:
diff --git a/include/CPUSensor.hpp b/include/CPUSensor.hpp
index 9dd8b23..29b8209 100644
--- a/include/CPUSensor.hpp
+++ b/include/CPUSensor.hpp
@@ -1,13 +1,12 @@
 #pragma once
 
-#include "Thresholds.hpp"
-#include "Utils.hpp"
-#include "sensor.hpp"
-
+#include <Thresholds.hpp>
+#include <Utils.hpp>
 #include <boost/asio/streambuf.hpp>
 #include <boost/container/flat_map.hpp>
 #include <gpiod.hpp>
 #include <sdbusplus/asio/object_server.hpp>
+#include <sensor.hpp>
 
 #include <filesystem>
 #include <fstream>
@@ -27,7 +26,7 @@
               std::vector<thresholds::Threshold>&& thresholds,
               const std::string& configuration, int cpuId, bool show,
               double dtsOffset);
-    ~CPUSensor();
+    ~CPUSensor() override;
     static constexpr unsigned int sensorScaleFactor = 1000;
     static constexpr unsigned int sensorPollMs = 1000;
     static constexpr size_t warnAfterErrorCount = 10;
diff --git a/include/ChassisIntrusionSensor.hpp b/include/ChassisIntrusionSensor.hpp
index a86dabc..142ced3 100644
--- a/include/ChassisIntrusionSensor.hpp
+++ b/include/ChassisIntrusionSensor.hpp
@@ -53,7 +53,7 @@
 
     bool mInitialized = false;
 
-    void updateValue(const std::string newValue);
+    void updateValue(const std::string& newValue);
     int i2cReadFromPch(int busId, int slaveAddr);
     void pollSensorStatusByPch();
     void readGpio();
diff --git a/include/ExitAirTempSensor.hpp b/include/ExitAirTempSensor.hpp
index 2d69cec..191f95f 100644
--- a/include/ExitAirTempSensor.hpp
+++ b/include/ExitAirTempSensor.hpp
@@ -1,8 +1,7 @@
 #pragma once
-#include "sensor.hpp"
-
 #include <boost/container/flat_map.hpp>
 #include <sdbusplus/bus/match.hpp>
+#include <sensor.hpp>
 
 #include <chrono>
 #include <limits>
@@ -27,7 +26,7 @@
               sdbusplus::asio::object_server& objectServer,
               std::vector<thresholds::Threshold>&& thresholds,
               std::shared_ptr<ExitAirTempSensor>& parent);
-    ~CFMSensor();
+    ~CFMSensor() override;
 
     bool calculate(double&);
     void updateReading(void);
@@ -68,7 +67,7 @@
                       const std::string& sensorConfiguration,
                       sdbusplus::asio::object_server& objectServer,
                       std::vector<thresholds::Threshold>&& thresholds);
-    ~ExitAirTempSensor();
+    ~ExitAirTempSensor() override;
 
     void checkThresholds(void) override;
     void updateReading(void);
diff --git a/include/ExternalSensor.hpp b/include/ExternalSensor.hpp
index bf3e885..fd36bb0 100644
--- a/include/ExternalSensor.hpp
+++ b/include/ExternalSensor.hpp
@@ -18,7 +18,7 @@
                    std::shared_ptr<sdbusplus::asio::connection>& conn,
                    const std::string& sensorName,
                    const std::string& sensorMeasure,
-                   std::vector<thresholds::Threshold>&& _thresholds,
+                   std::vector<thresholds::Threshold>&& thresholds,
                    const std::string& sensorConfiguration,
                    const double& maxReading, const double& minReading,
                    const PowerState& powerState);
diff --git a/include/HwmonTempSensor.hpp b/include/HwmonTempSensor.hpp
index 5cf0da5..11e46f3 100644
--- a/include/HwmonTempSensor.hpp
+++ b/include/HwmonTempSensor.hpp
@@ -1,10 +1,9 @@
 #pragma once
 
-#include "Thresholds.hpp"
-#include "sensor.hpp"
-
+#include <Thresholds.hpp>
 #include <boost/asio/streambuf.hpp>
 #include <sdbusplus/asio/object_server.hpp>
+#include <sensor.hpp>
 
 #include <string>
 #include <vector>
@@ -22,7 +21,7 @@
                     const float pollRate,
                     const std::string& sensorConfiguration,
                     const PowerState powerState);
-    ~HwmonTempSensor();
+    ~HwmonTempSensor() override;
     void setupRead(void);
 
   private:
diff --git a/include/IpmbSensor.hpp b/include/IpmbSensor.hpp
index 4207d1c..1d124b1 100644
--- a/include/IpmbSensor.hpp
+++ b/include/IpmbSensor.hpp
@@ -1,8 +1,7 @@
 #pragma once
-#include "sensor.hpp"
-
 #include <boost/asio/deadline_timer.hpp>
 #include <boost/container/flat_map.hpp>
+#include <sensor.hpp>
 
 #include <chrono>
 #include <limits>
@@ -46,7 +45,7 @@
 
 static bool isValid(const std::vector<uint8_t>& data)
 {
-    constexpr auto ReadingUnavailableBit = 5;
+    constexpr auto readingUnavailableBit = 5;
 
     // Proper 'Get Sensor Reading' response has at least 4 bytes, including
     // Completion Code. Our IPMB stack strips Completion Code from payload so we
@@ -57,7 +56,7 @@
     }
 
     // Per IPMI 'Get Sensor Reading' specification
-    if (data[1] & (1 << ReadingUnavailableBit))
+    if (data[1] & (1 << readingUnavailableBit))
     {
         return false;
     }
@@ -82,7 +81,7 @@
                std::vector<thresholds::Threshold>&& thresholds,
                uint8_t deviceAddress, uint8_t hostSMbusIndex,
                std::string& sensorTypeName);
-    ~IpmbSensor();
+    ~IpmbSensor() override;
 
     void checkThresholds(void) override;
     void read(void);
diff --git a/include/MCUTempSensor.hpp b/include/MCUTempSensor.hpp
index 2f3aef4..deb7102 100644
--- a/include/MCUTempSensor.hpp
+++ b/include/MCUTempSensor.hpp
@@ -1,8 +1,7 @@
 #pragma once
-#include "sensor.hpp"
-
 #include <boost/asio/deadline_timer.hpp>
 #include <boost/container/flat_map.hpp>
+#include <sensor.hpp>
 
 #include <chrono>
 #include <limits>
@@ -18,7 +17,7 @@
                   sdbusplus::asio::object_server& objectServer,
                   std::vector<thresholds::Threshold>&& thresholds,
                   uint8_t busId, uint8_t mcuAddress, uint8_t tempReg);
-    ~MCUTempSensor();
+    ~MCUTempSensor() override;
 
     void checkThresholds(void) override;
     void read(void);
diff --git a/include/NVMeSensor.hpp b/include/NVMeSensor.hpp
index d6d9b13..02510d4 100644
--- a/include/NVMeSensor.hpp
+++ b/include/NVMeSensor.hpp
@@ -15,7 +15,7 @@
                boost::asio::io_service& io,
                std::shared_ptr<sdbusplus::asio::connection>& conn,
                const std::string& sensorName,
-               std::vector<thresholds::Threshold>&& _thresholds,
+               std::vector<thresholds::Threshold>&& thresholds,
                const std::string& sensorConfiguration, const int busNumber);
     virtual ~NVMeSensor();
 
diff --git a/include/PSUSensor.hpp b/include/PSUSensor.hpp
index 7b4bfdb..0559073 100644
--- a/include/PSUSensor.hpp
+++ b/include/PSUSensor.hpp
@@ -1,14 +1,14 @@
 #pragma once
 
-#include "PwmSensor.hpp"
-#include "Thresholds.hpp"
-#include "sensor.hpp"
-
+#include <PwmSensor.hpp>
+#include <Thresholds.hpp>
 #include <boost/asio/streambuf.hpp>
 #include <sdbusplus/asio/object_server.hpp>
+#include <sensor.hpp>
 
 #include <memory>
 #include <string>
+#include <utility>
 
 class PSUSensor : public Sensor, public std::enable_shared_from_this<PSUSensor>
 {
@@ -21,7 +21,7 @@
               const std::string& sensorConfiguration,
               std::string& sensorTypeName, unsigned int factor, double max,
               double min, const std::string& label, size_t tSize);
-    ~PSUSensor();
+    ~PSUSensor() override;
     void setupRead(void);
 
   private:
@@ -48,7 +48,7 @@
 {
   public:
     PSUProperty(std::string name, double max, double min, unsigned int factor) :
-        labelTypeName(name), maxReading(max), minReading(min),
+        labelTypeName(std::move(name)), maxReading(max), minReading(min),
         sensorScaleFactor(factor)
     {}
     ~PSUProperty() = default;
diff --git a/include/TachSensor.hpp b/include/TachSensor.hpp
index 1e5347f..1b80404 100644
--- a/include/TachSensor.hpp
+++ b/include/TachSensor.hpp
@@ -1,14 +1,13 @@
 #pragma once
-#include "Thresholds.hpp"
-#include "sensor.hpp"
-
 #include <systemd/sd-journal.h>
 
+#include <Thresholds.hpp>
 #include <boost/asio/streambuf.hpp>
 #include <boost/container/flat_map.hpp>
 #include <boost/container/flat_set.hpp>
 #include <gpiod.hpp>
 #include <sdbusplus/asio/object_server.hpp>
+#include <sensor.hpp>
 
 #include <memory>
 #include <optional>
@@ -75,7 +74,7 @@
                const std::pair<size_t, size_t>& limits,
                const PowerState& powerState,
                const std::optional<std::string>& led);
-    ~TachSensor();
+    ~TachSensor() override;
 
   private:
     sdbusplus::asio::object_server& objServer;
diff --git a/include/Thresholds.hpp b/include/Thresholds.hpp
index ca2b0a0..559f4df 100644
--- a/include/Thresholds.hpp
+++ b/include/Thresholds.hpp
@@ -1,6 +1,5 @@
 #pragma once
-#include "Utils.hpp"
-
+#include <Utils.hpp>
 #include <boost/asio/deadline_timer.hpp>
 #include <boost/asio/io_service.hpp>
 #include <nlohmann/json.hpp>
@@ -132,9 +131,11 @@
             {
                 return; // we're being canceled
             }
-            else if (ec)
+            if (ec)
             {
+
                 std::cerr << "timer error: " << ec.message() << "\n";
+
                 return;
             }
             if (isPowerOn())
diff --git a/include/Utils.hpp b/include/Utils.hpp
index c164187..d2ab5ca 100644
--- a/include/Utils.hpp
+++ b/include/Utils.hpp
@@ -1,6 +1,5 @@
 #pragma once
-#include "VariantVisitors.hpp"
-
+#include <VariantVisitors.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/asio/steady_timer.hpp>
 #include <boost/container/flat_map.hpp>
@@ -48,17 +47,22 @@
                          const std::string& hwmonBaseName,
                          const std::set<std::string>& permitSet);
 std::set<std::string> getPermitSet(const SensorBaseConfigMap& config);
-bool findFiles(const std::filesystem::path dirPath,
+bool findFiles(const std::filesystem::path& dirPath,
                const std::string& matchString,
                std::vector<std::filesystem::path>& foundPaths,
-               unsigned int symlinkDepth = 1);
+               int symlinkDepth = 1);
 bool isPowerOn(void);
 bool hasBiosPost(void);
 void setupPowerMatch(const std::shared_ptr<sdbusplus::asio::connection>& conn);
 bool getSensorConfiguration(
     const std::string& type,
     const std::shared_ptr<sdbusplus::asio::connection>& dbusConnection,
-    ManagedObjectType& resp, bool useCache = false);
+    ManagedObjectType& resp, bool useCache);
+
+bool getSensorConfiguration(
+    const std::string& type,
+    const std::shared_ptr<sdbusplus::asio::connection>& dbusConnection,
+    ManagedObjectType& resp);
 
 void createAssociation(
     std::shared_ptr<sdbusplus::asio::dbus_interface>& association,
@@ -159,7 +163,7 @@
     }
 }
 
-inline void setLed(std::shared_ptr<sdbusplus::asio::connection> conn,
+inline void setLed(const std::shared_ptr<sdbusplus::asio::connection>& conn,
                    const std::string& name, bool on)
 {
     conn->async_method_call(
@@ -176,8 +180,8 @@
 }
 
 void createInventoryAssoc(
-    std::shared_ptr<sdbusplus::asio::connection> conn,
-    std::shared_ptr<sdbusplus::asio::dbus_interface> association,
+    const std::shared_ptr<sdbusplus::asio::connection>& conn,
+    const std::shared_ptr<sdbusplus::asio::dbus_interface>& association,
     const std::string& path);
 
 struct GetSensorConfiguration :
@@ -186,7 +190,7 @@
     GetSensorConfiguration(
         std::shared_ptr<sdbusplus::asio::connection> connection,
         std::function<void(ManagedObjectType& resp)>&& callbackFunc) :
-        dbusConnection(connection),
+        dbusConnection(std::move(connection)),
         callback(std::move(callbackFunc))
     {}
 
diff --git a/include/sensor.hpp b/include/sensor.hpp
index 0ef87d5..115b8fa 100644
--- a/include/sensor.hpp
+++ b/include/sensor.hpp
@@ -1,8 +1,7 @@
 #pragma once
 
-#include "Thresholds.hpp"
-#include "Utils.hpp"
-
+#include <Thresholds.hpp>
+#include <Utils.hpp>
 #include <sdbusplus/asio/object_server.hpp>
 
 #include <limits>
@@ -182,7 +181,7 @@
 
     void
         setInitialProperties(std::shared_ptr<sdbusplus::asio::connection>& conn,
-                             const std::string label = std::string(),
+                             const std::string& label = std::string(),
                              size_t thresholdSize = 0)
     {
         if (readState == PowerState::on || readState == PowerState::biosPost)
diff --git a/meson.build b/meson.build
index a1b79be..3932a14 100644
--- a/meson.build
+++ b/meson.build
@@ -22,7 +22,6 @@
 )
 
 build_tests = get_option('tests')
-cppfs = meson.get_compiler('cpp').find_library('stdc++fs')
 gpiodcxx = dependency('libgpiodcxx')
 i2c = meson.get_compiler('cpp').find_library('i2c')
 sdbusplus = dependency('sdbusplus')
@@ -43,9 +42,6 @@
 utils_a = static_library(
     'utils_a',
     'src/Utils.cpp',
-    dependencies: [
-        cppfs,
-    ],
     implicit_include_directories: false,
     include_directories: 'include',
 )
diff --git a/src/ADCSensor.cpp b/src/ADCSensor.cpp
index fe600d7..646c269 100644
--- a/src/ADCSensor.cpp
+++ b/src/ADCSensor.cpp
@@ -14,10 +14,9 @@
 // limitations under the License.
 */
 
-#include "ADCSensor.hpp"
-
 #include <unistd.h>
 
+#include <ADCSensor.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/asio/read_until.hpp>
@@ -49,13 +48,12 @@
                      sdbusplus::asio::object_server& objectServer,
                      std::shared_ptr<sdbusplus::asio::connection>& conn,
                      boost::asio::io_service& io, const std::string& sensorName,
-                     std::vector<thresholds::Threshold>&& _thresholds,
+                     std::vector<thresholds::Threshold>&& thresholds,
                      const double scaleFactor, PowerState readState,
                      const std::string& sensorConfiguration,
                      std::optional<BridgeGpio>&& bridgeGpio) :
-    Sensor(boost::replace_all_copy(sensorName, " ", "_"),
-           std::move(_thresholds), sensorConfiguration,
-           "xyz.openbmc_project.Configuration.ADC",
+    Sensor(boost::replace_all_copy(sensorName, " ", "_"), std::move(thresholds),
+           sensorConfiguration, "xyz.openbmc_project.Configuration.ADC",
            maxVoltageReading / scaleFactor, minVoltageReading / scaleFactor,
            conn, readState),
     std::enable_shared_from_this<ADCSensor>(), objServer(objectServer),
diff --git a/src/ADCSensorMain.cpp b/src/ADCSensorMain.cpp
index 473d8a1..5265321 100644
--- a/src/ADCSensorMain.cpp
+++ b/src/ADCSensorMain.cpp
@@ -14,10 +14,9 @@
 // limitations under the License.
 */
 
-#include "ADCSensor.hpp"
-#include "Utils.hpp"
-#include "VariantVisitors.hpp"
-
+#include <ADCSensor.hpp>
+#include <Utils.hpp>
+#include <VariantVisitors.hpp>
 #include <boost/algorithm/string/case_conv.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/replace.hpp>
@@ -36,7 +35,7 @@
 #include <variant>
 #include <vector>
 
-static constexpr bool DEBUG = false;
+static constexpr bool debug = false;
 
 namespace fs = std::filesystem;
 
@@ -321,7 +320,7 @@
                     /* we were canceled*/
                     return;
                 }
-                else if (ec)
+                if (ec)
                 {
                     std::cerr << "timer error\n";
                     return;
@@ -369,7 +368,7 @@
                     /* we were canceled*/
                     return;
                 }
-                else if (ec)
+                if (ec)
                 {
                     std::cerr << "timer error\n";
                     return;
diff --git a/src/CPUSensor.cpp b/src/CPUSensor.cpp
index ea56d03..c28b230 100644
--- a/src/CPUSensor.cpp
+++ b/src/CPUSensor.cpp
@@ -14,12 +14,10 @@
 // limitations under the License.
 */
 
-#include "CPUSensor.hpp"
-
-#include "Utils.hpp"
-
 #include <unistd.h>
 
+#include <CPUSensor.hpp>
+#include <Utils.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/asio/read_until.hpp>
@@ -39,12 +37,11 @@
                      sdbusplus::asio::object_server& objectServer,
                      std::shared_ptr<sdbusplus::asio::connection>& conn,
                      boost::asio::io_service& io, const std::string& sensorName,
-                     std::vector<thresholds::Threshold>&& _thresholds,
+                     std::vector<thresholds::Threshold>&& thresholds,
                      const std::string& sensorConfiguration, int cpuId,
                      bool show, double dtsOffset) :
-    Sensor(boost::replace_all_copy(sensorName, " ", "_"),
-           std::move(_thresholds), sensorConfiguration, objectType, 0, 0, conn,
-           PowerState::on),
+    Sensor(boost::replace_all_copy(sensorName, " ", "_"), std::move(thresholds),
+           sensorConfiguration, objectType, 0, 0, conn, PowerState::on),
     objServer(objectServer), inputDev(io), waitTimer(io), path(path),
     privTcontrol(std::numeric_limits<double>::quiet_NaN()),
     dtsOffset(dtsOffset), show(show), pollTime(CPUSensor::sensorPollMs),
@@ -205,7 +202,7 @@
     {
         return; // we're being destroyed
     }
-    else if (err == boost::system::errc::operation_canceled)
+    if (err == boost::system::errc::operation_canceled)
     {
         if (readingStateGood())
         {
@@ -214,7 +211,7 @@
                 std::cerr << name << " interface down!\n";
                 loggedInterfaceDown = true;
             }
-            pollTime = 10000 + rand() % 10000;
+            pollTime = CPUSensor::sensorPollMs * 10u;
             markFunctional(false);
         }
         return;
diff --git a/src/CPUSensorMain.cpp b/src/CPUSensorMain.cpp
index dfc942f..07be8f6 100644
--- a/src/CPUSensorMain.cpp
+++ b/src/CPUSensorMain.cpp
@@ -14,18 +14,16 @@
 // limitations under the License.
 */
 
-#include "CPUSensor.hpp"
-#include "Utils.hpp"
-#include "VariantVisitors.hpp"
-
 #include <fcntl.h>
 
+#include <CPUSensor.hpp>
+#include <Utils.hpp>
+#include <VariantVisitors.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/container/flat_map.hpp>
 #include <boost/container/flat_set.hpp>
 #include <boost/date_time/posix_time/posix_time.hpp>
-#include <boost/process/child.hpp>
 #include <sdbusplus/asio/connection.hpp>
 #include <sdbusplus/asio/object_server.hpp>
 #include <sdbusplus/bus/match.hpp>
@@ -51,7 +49,7 @@
 #endif
 // clang-format on
 
-static constexpr bool DEBUG = false;
+static constexpr bool debug = false;
 
 boost::container::flat_map<std::string, std::unique_ptr<CPUSensor>> gCpuSensors;
 boost::container::flat_map<std::string,
@@ -194,7 +192,7 @@
         fs::path::iterator it = hwmonNamePath.begin();
         std::advance(it, 6); // pick the 6th part for a PECI client device name
         std::string deviceName = *it;
-        auto findHyphen = deviceName.find("-");
+        auto findHyphen = deviceName.find('-');
         if (findHyphen == std::string::npos)
         {
             std::cerr << "found bad device " << deviceName << "\n";
@@ -208,7 +206,7 @@
         try
         {
             bus = std::stoi(busStr);
-            addr = std::stoi(addrStr, 0, 16);
+            addr = std::stoi(addrStr, nullptr, 16);
         }
         catch (std::invalid_argument&)
         {
@@ -229,7 +227,7 @@
             // shouldn't have an empty name file
             continue;
         }
-        if (DEBUG)
+        if (debug)
         {
             std::cout << "Checking: " << hwmonNamePath << ": " << hwmonName
                       << "\n";
@@ -331,7 +329,7 @@
             auto findSensor = gCpuSensors.find(sensorName);
             if (findSensor != gCpuSensors.end())
             {
-                if (DEBUG)
+                if (debug)
                 {
                     std::cout << "Skipped: " << inputPath << ": " << sensorName
                               << " is already created\n";
@@ -367,7 +365,7 @@
             }
 
             std::vector<thresholds::Threshold> sensorThresholds;
-            std::string labelHead = label.substr(0, label.find(" "));
+            std::string labelHead = label.substr(0, label.find(' '));
             parseThresholdsFromConfig(*sensorData, sensorThresholds,
                                       &labelHead);
             if (sensorThresholds.empty())
@@ -388,7 +386,7 @@
                 sensorName, std::move(sensorThresholds), *interfacePath, cpuId,
                 show, dtsOffset);
             createdSensors.insert(sensorName);
-            if (DEBUG)
+            if (debug)
             {
                 std::cout << "Mapped: " << inputPath << " to " << sensorName
                           << "\n";
@@ -428,7 +426,7 @@
         if (boost::starts_with(directoryName, busStr) &&
             boost::ends_with(directoryName, addrHexStr))
         {
-            if (DEBUG)
+            if (debug)
             {
                 std::cout << parameters << " on bus " << busStr
                           << " is already exported\n";
@@ -544,7 +542,7 @@
             keepPinging = true;
         }
 
-        if (DEBUG)
+        if (debug)
         {
             std::cout << config.name << ", state: " << config.state << "\n";
         }
@@ -681,7 +679,7 @@
                 uint64_t addr = std::visit(VariantToUnsignedIntVisitor(),
                                            findAddress->second);
 
-                if (DEBUG)
+                if (debug)
                 {
                     std::cout << "bus: " << bus << "\n";
                     std::cout << "addr: " << addr << "\n";
@@ -739,7 +737,7 @@
                 return;
             }
 
-            if (DEBUG)
+            if (debug)
             {
                 std::cout << message.get_path() << " is changed\n";
             }
diff --git a/src/ChassisIntrusionSensor.cpp b/src/ChassisIntrusionSensor.cpp
index 8293bab..af5ced3 100644
--- a/src/ChassisIntrusionSensor.cpp
+++ b/src/ChassisIntrusionSensor.cpp
@@ -14,22 +14,21 @@
 // limitations under the License.
 */
 
-#include "ChassisIntrusionSensor.hpp"
-
-#include <errno.h>
 #include <fcntl.h>
 #include <sys/ioctl.h>
 #include <unistd.h>
 
-#include <boost/asio.hpp>
-#include <boost/bind.hpp>
+#include <ChassisIntrusionSensor.hpp>
+#include <boost/asio/io_service.hpp>
 #include <sdbusplus/asio/object_server.hpp>
 
+#include <cerrno>
 #include <chrono>
 #include <iostream>
 #include <memory>
 #include <string>
 #include <thread>
+#include <utility>
 
 extern "C"
 {
@@ -37,7 +36,7 @@
 #include <linux/i2c-dev.h>
 }
 
-static constexpr bool DEBUG = false;
+static constexpr bool debug = false;
 
 static constexpr unsigned int intrusionSensorPollSec = 1;
 
@@ -47,7 +46,7 @@
 // Status bit field masks
 const static constexpr size_t pchRegMaskIntrusion = 0x01;
 
-void ChassisIntrusionSensor::updateValue(const std::string newValue)
+void ChassisIntrusionSensor::updateValue(const std::string& newValue)
 {
     // Take no action if value already equal
     // Same semantics as Sensor::updateValue(const double&)
@@ -109,12 +108,11 @@
         return -1;
     }
 
-    int statusValue;
-    unsigned int statusMask = pchRegMaskIntrusion;
-    unsigned int statusReg = pchStatusRegIntrusion;
+    int32_t statusMask = pchRegMaskIntrusion;
+    int32_t statusReg = pchStatusRegIntrusion;
 
-    statusValue = i2c_smbus_read_byte_data(fd, statusReg);
-    if (DEBUG)
+    int32_t statusValue = i2c_smbus_read_byte_data(fd, statusReg);
+    if (debug)
     {
         std::cout << "\nRead bus " << busId << " addr " << slaveAddr
                   << ", value = " << statusValue << "\n";
@@ -131,7 +129,7 @@
     // Get status value with mask
     int newValue = statusValue & statusMask;
 
-    if (DEBUG)
+    if (debug)
     {
         std::cout << "statusValue is " << statusValue << "\n";
         std::cout << "Intrusion sensor value is " << newValue << "\n";
@@ -180,7 +178,7 @@
     // set string defined in chassis redfish schema
     std::string newValue = value ? "HardwareIntrusion" : "Normal";
 
-    if (DEBUG)
+    if (debug)
     {
         std::cout << "\nGPIO value is " << value << "\n";
         std::cout << "Intrusion sensor value is " << newValue << "\n";
@@ -203,7 +201,7 @@
             {
                 return; // we're being destroyed
             }
-            else if (ec)
+            if (ec)
             {
                 std::cerr
                     << "Error on GPIO based intrusion sensor wait event\n";
@@ -274,7 +272,7 @@
 void ChassisIntrusionSensor::start(IntrusionSensorType type, int busId,
                                    int slaveAddr, bool gpioInverted)
 {
-    if (DEBUG)
+    if (debug)
     {
         std::cerr << "enter ChassisIntrusionSensor::start, type = " << type
                   << "\n";
@@ -361,7 +359,7 @@
 ChassisIntrusionSensor::ChassisIntrusionSensor(
     boost::asio::io_service& io,
     std::shared_ptr<sdbusplus::asio::dbus_interface> iface) :
-    mIface(iface),
+    mIface(std::move(iface)),
     mType(IntrusionSensorType::gpio), mValue("unknown"), mOldValue("unknown"),
     mBusId(-1), mSlaveAddr(-1), mPollTimer(io), mGpioInverted(false),
     mGpioFd(io)
diff --git a/src/ExitAirTempSensor.cpp b/src/ExitAirTempSensor.cpp
index c667457..725cb12 100644
--- a/src/ExitAirTempSensor.cpp
+++ b/src/ExitAirTempSensor.cpp
@@ -14,13 +14,9 @@
 // limitations under the License.
 */
 
-#include "ExitAirTempSensor.hpp"
-
-#include "Utils.hpp"
-#include "VariantVisitors.hpp"
-
-#include <math.h>
-
+#include <ExitAirTempSensor.hpp>
+#include <Utils.hpp>
+#include <VariantVisitors.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/container/flat_map.hpp>
@@ -41,7 +37,7 @@
 #include <variant>
 #include <vector>
 
-constexpr const float altitudeFactor = 1.14;
+constexpr const double altitudeFactor = 1.14;
 constexpr const char* exitAirIface =
     "xyz.openbmc_project.Configuration.ExitAirTempSensor";
 constexpr const char* cfmIface = "xyz.openbmc_project.Configuration.CFMSensor";
@@ -54,7 +50,7 @@
 constexpr const char* cfmSettingPath = "/xyz/openbmc_project/control/cfm_limit";
 constexpr const char* cfmSettingIface = "xyz.openbmc_project.Control.CFMLimit";
 
-static constexpr bool DEBUG = false;
+static constexpr bool debug = false;
 
 static constexpr double cfmMaxReading = 255;
 static constexpr double cfmMinReading = 0;
@@ -128,8 +124,8 @@
 
                 conn->async_method_call(
                     [conn, value, owner,
-                     path](const boost::system::error_code ec,
-                           const std::variant<std::string>& classType) {
+                     path{path}](const boost::system::error_code ec,
+                                 const std::variant<std::string>& classType) {
                         if (ec)
                         {
                             std::cerr << "Error getting pid class\n";
@@ -411,7 +407,7 @@
             });
         if (findReading == tachReadings.end())
         {
-            if constexpr (DEBUG)
+            if constexpr (debug)
             {
                 std::cerr << "Can't find " << tachName << "in readings\n";
             }
@@ -438,7 +434,7 @@
         rpm /= findRange->second.second;
         rpm *= 100;
 
-        if constexpr (DEBUG)
+        if constexpr (debug)
         {
             std::cout << "Tach " << tachName << "at " << rpm << "\n";
         }
@@ -468,7 +464,7 @@
         // Now calculate the CFM for this tach
         // CFMi = Ci * Qmaxi * TACHi
         totalCFM += ci * maxCFM * rpm;
-        if constexpr (DEBUG)
+        if constexpr (debug)
         {
             std::cerr << "totalCFM = " << totalCFM << "\n";
             std::cerr << "Ci " << ci << " MaxCFM " << maxCFM << " rpm " << rpm
@@ -480,7 +476,7 @@
 
     // divide by 100 since rpm is in percent
     value = totalCFM / 100;
-    if constexpr (DEBUG)
+    if constexpr (debug)
     {
         std::cerr << "cfm value = " << value << "\n";
     }
@@ -603,7 +599,7 @@
 
                             double reading =
                                 std::visit(VariantToDoubleVisitor(), value);
-                            if constexpr (DEBUG)
+                            if constexpr (debug)
                             {
                                 std::cerr << path << "Reading " << reading
                                           << "\n";
@@ -695,7 +691,7 @@
 
     // Calculate power correction factor
     // Ci = CL + (CH - CL)/(QMax - QMin) * (CFM - QMin)
-    float powerFactor = 0.0;
+    double powerFactor = 0.0;
     if (cfm <= qMin)
     {
         powerFactor = powerFactorMin;
@@ -710,7 +706,7 @@
                                         (qMax - qMin) * (cfm - qMin));
     }
 
-    totalPower *= static_cast<double>(powerFactor);
+    totalPower *= powerFactor;
     totalPower += pOffset;
 
     if (totalPower == 0)
@@ -724,7 +720,7 @@
         return false;
     }
 
-    if constexpr (DEBUG)
+    if constexpr (debug)
     {
         std::cout << "Power Factor " << powerFactor << "\n";
         std::cout << "Inlet Temp " << inletTemp << "\n";
@@ -733,11 +729,11 @@
 
     // Calculate the exit air temp
     // Texit = Tfp + (1.76 * TotalPower / CFM * Faltitude)
-    double reading = 1.76 * totalPower * static_cast<double>(altitudeFactor);
+    double reading = 1.76 * totalPower * altitudeFactor;
     reading /= cfm;
     reading += inletTemp;
 
-    if constexpr (DEBUG)
+    if constexpr (debug)
     {
         std::cout << "Reading 1: " << reading << "\n";
     }
@@ -778,14 +774,14 @@
         alphaDT = 1.0;
     }
 
-    if constexpr (DEBUG)
+    if constexpr (debug)
     {
         std::cout << "AlphaDT: " << alphaDT << "\n";
     }
 
     reading = ((reading * alphaDT) + (lastReading * (1.0 - alphaDT)));
 
-    if constexpr (DEBUG)
+    if constexpr (debug)
     {
         std::cout << "Reading 2: " << reading << "\n";
     }
diff --git a/src/ExternalSensor.cpp b/src/ExternalSensor.cpp
index 13e9415..f867151 100644
--- a/src/ExternalSensor.cpp
+++ b/src/ExternalSensor.cpp
@@ -21,16 +21,16 @@
     const std::string& objectType, sdbusplus::asio::object_server& objectServer,
     std::shared_ptr<sdbusplus::asio::connection>& conn,
     const std::string& sensorName, const std::string& sensorUnits,
-    std::vector<thresholds::Threshold>&& _thresholds,
+    std::vector<thresholds::Threshold>&& thresholds,
     const std::string& sensorConfiguration, const double& maxReading,
     const double& minReading, const PowerState& powerState) :
     // TODO(): When the Mutable feature is integrated,
     // make sure all ExternalSensor instances are mutable,
     // because that is the entire point of ExternalSensor,
     // to accept sensor values written by an external source.
-    Sensor(boost::replace_all_copy(sensorName, " ", "_"),
-           std::move(_thresholds), sensorConfiguration, objectType, maxReading,
-           minReading, conn, powerState),
+    Sensor(boost::replace_all_copy(sensorName, " ", "_"), std::move(thresholds),
+           sensorConfiguration, objectType, maxReading, minReading, conn,
+           powerState),
     std::enable_shared_from_this<ExternalSensor>(), objServer(objectServer)
 {
     // The caller must specify what physical characteristic
diff --git a/src/ExternalSensorMain.cpp b/src/ExternalSensorMain.cpp
index 9067d7e..19b8f60 100644
--- a/src/ExternalSensorMain.cpp
+++ b/src/ExternalSensorMain.cpp
@@ -43,7 +43,7 @@
 // there is no other way to tell, and it will be used for the object path
 // here: /xyz/openbmc_project/sensors/<Measure>/<Name>
 
-static constexpr bool DEBUG = false;
+static constexpr bool debug = false;
 
 static const char* sensorType =
     "xyz.openbmc_project.Configuration.ExternalSensor";
diff --git a/src/FanMain.cpp b/src/FanMain.cpp
index 2e7442d..25e5739 100644
--- a/src/FanMain.cpp
+++ b/src/FanMain.cpp
@@ -14,11 +14,10 @@
 // limitations under the License.
 */
 
-#include "PwmSensor.hpp"
-#include "TachSensor.hpp"
-#include "Utils.hpp"
-#include "VariantVisitors.hpp"
-
+#include <PwmSensor.hpp>
+#include <TachSensor.hpp>
+#include <Utils.hpp>
+#include <VariantVisitors.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/container/flat_map.hpp>
@@ -40,7 +39,7 @@
 #include <variant>
 #include <vector>
 
-static constexpr bool DEBUG = false;
+static constexpr bool debug = false;
 
 namespace fs = std::filesystem;
 
@@ -77,7 +76,7 @@
     {
         return FanTypes::aspeed;
     }
-    else if (boost::ends_with(canonical, "f0103000.pwm-fan-controller"))
+    if (boost::ends_with(canonical, "f0103000.pwm-fan-controller"))
     {
         return FanTypes::nuvoton;
     }
@@ -88,13 +87,13 @@
 void createRedundancySensor(
     const boost::container::flat_map<std::string, std::unique_ptr<TachSensor>>&
         sensors,
-    std::shared_ptr<sdbusplus::asio::connection> conn,
+    const std::shared_ptr<sdbusplus::asio::connection>& conn,
     sdbusplus::asio::object_server& objectServer)
 {
 
     conn->async_method_call(
         [&objectServer, &sensors](boost::system::error_code& ec,
-                                  const ManagedObjectType managedObj) {
+                                  const ManagedObjectType& managedObj) {
             if (ec)
             {
                 std::cerr << "Error calling entity manager \n";
@@ -182,7 +181,7 @@
                     std::string link =
                         fs::read_symlink(directory / "device").filename();
 
-                    size_t findDash = link.find("-");
+                    size_t findDash = link.find('-');
                     if (findDash == std::string::npos ||
                         link.size() <= findDash + 1)
                     {
@@ -235,7 +234,7 @@
                         sensorData = &(sensor.second);
                         break;
                     }
-                    else if (fanType == FanTypes::i2c)
+                    if (fanType == FanTypes::i2c)
                     {
                         auto findBus = baseConfiguration->second.find("Bus");
                         auto findAddress =
@@ -471,7 +470,7 @@
                     /* we were canceled*/
                     return;
                 }
-                else if (ec)
+                if (ec)
                 {
                     std::cerr << "timer error\n";
                     return;
diff --git a/src/HwmonTempMain.cpp b/src/HwmonTempMain.cpp
index 8a583b9..79eab20 100644
--- a/src/HwmonTempMain.cpp
+++ b/src/HwmonTempMain.cpp
@@ -14,9 +14,8 @@
 // limitations under the License.
 */
 
-#include "HwmonTempSensor.hpp"
-#include "Utils.hpp"
-
+#include <HwmonTempSensor.hpp>
+#include <Utils.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/container/flat_map.hpp>
@@ -37,7 +36,7 @@
 #include <variant>
 #include <vector>
 
-static constexpr bool DEBUG = false;
+static constexpr bool debug = false;
 static constexpr float pollRateDefault = 0.5;
 
 namespace fs = std::filesystem;
@@ -97,7 +96,7 @@
 
                 fs::path device = directory / "device";
                 std::string deviceName = fs::canonical(device).stem();
-                auto findHyphen = deviceName.find("-");
+                auto findHyphen = deviceName.find('-');
                 if (findHyphen == std::string::npos)
                 {
                     std::cerr << "found bad device " << deviceName << "\n";
@@ -111,7 +110,7 @@
                 try
                 {
                     bus = std::stoi(busStr);
-                    addr = std::stoi(addrStr, 0, 16);
+                    addr = std::stoi(addrStr, nullptr, 16);
                 }
                 catch (std::invalid_argument&)
                 {
@@ -312,7 +311,7 @@
                     /* we were canceled*/
                     return;
                 }
-                else if (ec)
+                if (ec)
                 {
                     std::cerr << "timer error\n";
                     return;
diff --git a/src/HwmonTempSensor.cpp b/src/HwmonTempSensor.cpp
index e1e8f6c..b804b25 100644
--- a/src/HwmonTempSensor.cpp
+++ b/src/HwmonTempSensor.cpp
@@ -14,10 +14,9 @@
 // limitations under the License.
 */
 
-#include "HwmonTempSensor.hpp"
-
 #include <unistd.h>
 
+#include <HwmonTempSensor.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/asio/read_until.hpp>
@@ -43,14 +42,14 @@
     sdbusplus::asio::object_server& objectServer,
     std::shared_ptr<sdbusplus::asio::connection>& conn,
     boost::asio::io_service& io, const std::string& sensorName,
-    std::vector<thresholds::Threshold>&& _thresholds, const float pollRate,
+    std::vector<thresholds::Threshold>&& thresholds, const float pollRate,
     const std::string& sensorConfiguration, const PowerState powerState) :
-    Sensor(boost::replace_all_copy(sensorName, " ", "_"),
-           std::move(_thresholds), sensorConfiguration, objectType, maxReading,
-           minReading, conn, powerState),
+    Sensor(boost::replace_all_copy(sensorName, " ", "_"), std::move(thresholds),
+           sensorConfiguration, objectType, maxReading, minReading, conn,
+           powerState),
     std::enable_shared_from_this<HwmonTempSensor>(), objServer(objectServer),
     inputDev(io, open(path.c_str(), O_RDONLY)), waitTimer(io), path(path),
-    sensorPollMs(pollRate * 1000)
+    sensorPollMs(static_cast<unsigned int>(pollRate * 1000))
 {
     sensorInterface = objectServer.add_interface(
         "/xyz/openbmc_project/sensors/temperature/" + name,
diff --git a/src/IntrusionSensorMain.cpp b/src/IntrusionSensorMain.cpp
index f3d95fb..e40c240 100644
--- a/src/IntrusionSensorMain.cpp
+++ b/src/IntrusionSensorMain.cpp
@@ -14,13 +14,12 @@
 // limitations under the License.
 */
 
-#include "ChassisIntrusionSensor.hpp"
-#include "Utils.hpp"
-
 #include <systemd/sd-journal.h>
 
+#include <ChassisIntrusionSensor.hpp>
+#include <Utils.hpp>
 #include <boost/algorithm/string/predicate.hpp>
-#include <boost/asio.hpp>
+#include <boost/asio/io_service.hpp>
 #include <boost/container/flat_map.hpp>
 #include <sdbusplus/asio/connection.hpp>
 #include <sdbusplus/asio/object_server.hpp>
@@ -32,6 +31,7 @@
 #include <sdbusplus/timer.hpp>
 
 #include <array>
+#include <charconv>
 #include <chrono>
 #include <ctime>
 #include <fstream>
@@ -43,7 +43,7 @@
 #include <utility>
 #include <vector>
 
-static constexpr bool DEBUG = false;
+static constexpr bool debug = false;
 
 static constexpr const char* sensorType =
     "xyz.openbmc_project.Configuration.ChassisIntrusionSensor";
@@ -125,7 +125,7 @@
                 continue;
             }
 
-            if (DEBUG)
+            if (debug)
             {
                 std::cout << "find chassis intrusion sensor polarity inverted "
                              "flag is "
@@ -136,7 +136,7 @@
         }
 
         // case to find I2C info
-        else if (*pType == IntrusionSensorType::pch)
+        if (*pType == IntrusionSensorType::pch)
         {
             auto findBus = baseConfiguration->second.find("Bus");
             auto findAddress = baseConfiguration->second.find("Address");
@@ -158,7 +158,7 @@
                 continue;
             }
 
-            if (DEBUG)
+            if (debug)
             {
                 std::cout << "find matched bus " << *pBusId
                           << ", matched slave addr " << *pSlaveAddr << "\n";
@@ -340,7 +340,7 @@
     }
 
     // iterate through all found eth files, and save ifindex
-    for (auto& fileName : files)
+    for (const fs::path& fileName : files)
     {
         if (debugLanLeash)
         {
@@ -363,11 +363,9 @@
         const int pos = fileStr.find("eth");
         const std::string& ethNumStr = fileStr.substr(pos + 3);
         int ethNum = 0;
-        try
-        {
-            ethNum = std::stoul(ethNumStr);
-        }
-        catch (const std::invalid_argument& err)
+        std::from_chars_result r = std::from_chars(
+            ethNumStr.data(), ethNumStr.data() + ethNumStr.size(), ethNum);
+        if (r.ec != std::errc())
         {
             std::cerr << "invalid ethNum string: " << ethNumStr << "\n";
             continue;
diff --git a/src/IpmbSensor.cpp b/src/IpmbSensor.cpp
index 29fd7f4..0f35353 100644
--- a/src/IpmbSensor.cpp
+++ b/src/IpmbSensor.cpp
@@ -14,14 +14,9 @@
 // limitations under the License.
 */
 
-#include "IpmbSensor.hpp"
-
-#include "Utils.hpp"
-#include "VariantVisitors.hpp"
-
-#include <math.h>
-
-#include <boost/algorithm/string.hpp>
+#include <IpmbSensor.hpp>
+#include <Utils.hpp>
+#include <VariantVisitors.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/container/flat_map.hpp>
@@ -30,6 +25,7 @@
 #include <sdbusplus/bus/match.hpp>
 
 #include <chrono>
+#include <cmath>
 #include <functional>
 #include <iostream>
 #include <limits>
@@ -181,9 +177,13 @@
             case IpmbSubType::curr:
                 uint8_t snsNum;
                 if (subType == IpmbSubType::temp)
+                {
                     snsNum = 0x8d;
+                }
                 else
+                {
                     snsNum = 0x8c;
+                }
                 netfn = ipmi::me_bridge::netFn;
                 command = ipmi::me_bridge::sendRawPmbus;
                 commandData = {0x57, 0x01, 0x00, 0x86, deviceAddress,
@@ -354,18 +354,16 @@
                     read();
                     return;
                 }
-                else
+
+                // rawValue only used in debug logging
+                // up to 5th byte in data are used to derive value
+                size_t end = std::min(sizeof(uint64_t), data.size());
+                uint64_t rawData = 0;
+                for (size_t i = 0; i < end; i++)
                 {
-                    // rawValue only used in debug logging
-                    // up to 5th byte in data are used to derive value
-                    size_t end = std::min(sizeof(uint64_t), data.size());
-                    uint64_t rawData = 0;
-                    for (size_t i = 0; i < end; i++)
-                    {
-                        reinterpret_cast<uint8_t*>(&rawData)[i] = data[i];
-                    }
-                    rawValue = static_cast<double>(rawData);
+                    reinterpret_cast<uint8_t*>(&rawData)[i] = data[i];
                 }
+                rawValue = static_cast<double>(rawData);
 
                 /* Adjust value as per scale and offset */
                 value = (value * scaleVal) + offsetVal;
diff --git a/src/MCUTempSensor.cpp b/src/MCUTempSensor.cpp
index 6d94bd2..f637932 100644
--- a/src/MCUTempSensor.cpp
+++ b/src/MCUTempSensor.cpp
@@ -13,14 +13,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 */
-#include "MCUTempSensor.hpp"
-
-#include "Utils.hpp"
-#include "VariantVisitors.hpp"
-
-#include <math.h>
-
-#include <boost/algorithm/string.hpp>
+#include <MCUTempSensor.hpp>
+#include <Utils.hpp>
+#include <VariantVisitors.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/container/flat_map.hpp>
@@ -29,6 +24,7 @@
 #include <sdbusplus/bus/match.hpp>
 
 #include <chrono>
+#include <cmath>
 #include <functional>
 #include <iostream>
 #include <limits>
@@ -166,7 +162,7 @@
             return; // we're being cancelled
         }
         // read timer error
-        else if (ec)
+        if (ec)
         {
             std::cerr << "timer error\n";
             return;
@@ -291,7 +287,7 @@
                     return; // we're being canceled
                 }
                 // config timer error
-                else if (ec)
+                if (ec)
                 {
                     std::cerr << "timer error\n";
                     return;
diff --git a/src/NVMeSensor.cpp b/src/NVMeSensor.cpp
index cfa7d20..db6a05b 100644
--- a/src/NVMeSensor.cpp
+++ b/src/NVMeSensor.cpp
@@ -14,13 +14,11 @@
 // limitations under the License.
 */
 
-#include "NVMeSensor.hpp"
-
-#include "NVMeDevice.hpp"
-
 #include <crc32c.h>
 #include <libmctp-smbus.h>
 
+#include <NVMeDevice.hpp>
+#include <NVMeSensor.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/asio/ip/tcp.hpp>
 
@@ -29,7 +27,7 @@
 static constexpr double maxReading = 127;
 static constexpr double minReading = 0;
 
-static constexpr bool DEBUG = false;
+static constexpr bool debug = false;
 
 void rxMessage(uint8_t eid, void* data, void* msg, size_t len);
 
@@ -241,7 +239,7 @@
 
     readResponse(nvmeDevice);
 
-    if (DEBUG)
+    if (debug)
     {
         std::cout << "Sending message to read data from Drive on bus: "
                   << sensor->bus << " , rootBus: " << nvmeDevice->rootBus
@@ -300,7 +298,7 @@
         return;
     }
 
-    if (DEBUG)
+    if (debug)
     {
         std::cout << "Eid from the received messaged: " << eid << "\n";
     }
@@ -358,7 +356,7 @@
     }
 
     std::shared_ptr<NVMeSensor> sensorInfo = self->sensors.front();
-    if (DEBUG)
+    if (debug)
     {
         std::cout << "Temperature Reading: "
                   << getTemperatureReading(messageData[5])
@@ -376,7 +374,7 @@
         sensorInfo->updateValue(value);
     }
 
-    if (DEBUG)
+    if (debug)
     {
         std::cout << "Cancelling the timer now\n";
     }
@@ -435,13 +433,12 @@
                        boost::asio::io_service&,
                        std::shared_ptr<sdbusplus::asio::connection>& conn,
                        const std::string& sensorName,
-                       std::vector<thresholds::Threshold>&& _thresholds,
+                       std::vector<thresholds::Threshold>&& thresholds,
                        const std::string& sensorConfiguration,
                        const int busNumber) :
-    Sensor(boost::replace_all_copy(sensorName, " ", "_"),
-           std::move(_thresholds), sensorConfiguration,
-           "xyz.openbmc_project.Configuration.NVMe", maxReading, minReading,
-           conn, PowerState::on),
+    Sensor(boost::replace_all_copy(sensorName, " ", "_"), std::move(thresholds),
+           sensorConfiguration, "xyz.openbmc_project.Configuration.NVMe",
+           maxReading, minReading, conn, PowerState::on),
     objServer(objectServer), bus(busNumber)
 {
     sensorInterface = objectServer.add_interface(
diff --git a/src/NVMeSensorMain.cpp b/src/NVMeSensorMain.cpp
index 0552fad..21e722f 100644
--- a/src/NVMeSensorMain.cpp
+++ b/src/NVMeSensorMain.cpp
@@ -14,8 +14,7 @@
 // limitations under the License.
 */
 
-#include "NVMeSensor.hpp"
-
+#include <NVMeSensor.hpp>
 #include <boost/asio/deadline_timer.hpp>
 
 #include <regex>
@@ -25,7 +24,7 @@
 
 static NVMEMap nvmeDeviceMap;
 
-static constexpr bool DEBUG = false;
+static constexpr bool debug = false;
 
 NVMEMap& getNVMEMap()
 {
diff --git a/src/PSUEvent.cpp b/src/PSUEvent.cpp
index 4266918..375c24d 100644
--- a/src/PSUEvent.cpp
+++ b/src/PSUEvent.cpp
@@ -14,10 +14,9 @@
 // limitations under the License.
 */
 
-#include "PSUEvent.hpp"
-
 #include <systemd/sd-journal.h>
 
+#include <PSUEvent.hpp>
 #include <boost/asio/io_service.hpp>
 #include <boost/asio/read_until.hpp>
 #include <boost/container/flat_map.hpp>
@@ -145,10 +144,10 @@
     std::shared_ptr<std::set<std::string>> combineEvent,
     std::shared_ptr<bool> state, const std::string& psuName) :
     std::enable_shared_from_this<PSUSubEvent>(),
-    eventInterface(eventInterface), asserts(asserts),
-    combineEvent(combineEvent), assertState(state), errCount(0), path(path),
-    eventName(eventName), waitTimer(io), inputDev(io), psuName(psuName),
-    groupEventName(groupEventName), systemBus(conn)
+    eventInterface(std::move(eventInterface)), asserts(std::move(asserts)),
+    combineEvent(std::move(combineEvent)), assertState(std::move(state)),
+    errCount(0), path(path), eventName(eventName), waitTimer(io), inputDev(io),
+    psuName(psuName), groupEventName(groupEventName), systemBus(conn)
 {
     fd = open(path.c_str(), O_RDONLY);
     if (fd < 0)
@@ -174,7 +173,7 @@
     if (fanPos != std::string::npos)
     {
         fanName = path.substr(fanPos);
-        auto fanNamePos = fanName.find("_");
+        auto fanNamePos = fanName.find('_');
         if (fanNamePos != std::string::npos)
         {
             fanName = fanName.substr(0, fanNamePos);
diff --git a/src/PSUSensor.cpp b/src/PSUSensor.cpp
index 25cc5ad..e292863 100644
--- a/src/PSUSensor.cpp
+++ b/src/PSUSensor.cpp
@@ -14,10 +14,9 @@
 // limitations under the License.
 */
 
-#include "PSUSensor.hpp"
-
 #include <unistd.h>
 
+#include <PSUSensor.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/asio/read_until.hpp>
@@ -34,25 +33,25 @@
 
 static constexpr const char* sensorPathPrefix = "/xyz/openbmc_project/sensors/";
 
-static constexpr bool DEBUG = false;
+static constexpr bool debug = false;
 
 PSUSensor::PSUSensor(const std::string& path, const std::string& objectType,
                      sdbusplus::asio::object_server& objectServer,
                      std::shared_ptr<sdbusplus::asio::connection>& conn,
                      boost::asio::io_service& io, const std::string& sensorName,
-                     std::vector<thresholds::Threshold>&& _thresholds,
+                     std::vector<thresholds::Threshold>&& thresholdsIn,
                      const std::string& sensorConfiguration,
                      std::string& sensorTypeName, unsigned int factor,
                      double max, double min, const std::string& label,
                      size_t tSize) :
     Sensor(boost::replace_all_copy(sensorName, " ", "_"),
-           std::move(_thresholds), sensorConfiguration, objectType, max, min,
+           std::move(thresholdsIn), sensorConfiguration, objectType, max, min,
            conn),
     std::enable_shared_from_this<PSUSensor>(), objServer(objectServer),
     inputDev(io), waitTimer(io), path(path), pathRatedMax(""), pathRatedMin(""),
     sensorFactor(factor), minMaxReadCounter(0)
 {
-    if constexpr (DEBUG)
+    if constexpr (debug)
     {
         std::cerr << "Constructed sensor: path " << path << " type "
                   << objectType << " config " << sensorConfiguration
@@ -88,7 +87,7 @@
     // This should be called before initializing association.
     // createInventoryAssoc() does add more associations before doing
     // register and initialize "Associations" property.
-    if (label.empty() || tSize == _thresholds.size())
+    if (label.empty() || tSize == thresholds.size())
     {
         setInitialProperties(conn);
     }
@@ -110,7 +109,7 @@
             pathRatedMin = boost::replace_all_copy(path, item, "rated_min");
         }
     }
-    if constexpr (DEBUG)
+    if constexpr (debug)
     {
         std::cerr << "File: " << pathRatedMax
                   << " will be used to update MaxValue\n";
diff --git a/src/PSUSensorMain.cpp b/src/PSUSensorMain.cpp
index b8966a6..3397ea8 100644
--- a/src/PSUSensorMain.cpp
+++ b/src/PSUSensorMain.cpp
@@ -14,10 +14,9 @@
 // limitations under the License.
 */
 
-#include "PSUEvent.hpp"
-#include "PSUSensor.hpp"
-#include "Utils.hpp"
-
+#include <PSUEvent.hpp>
+#include <PSUSensor.hpp>
+#include <Utils.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/container/flat_map.hpp>
@@ -38,7 +37,7 @@
 #include <variant>
 #include <vector>
 
-static constexpr bool DEBUG = false;
+static constexpr bool debug = false;
 
 static constexpr std::array<const char*, 17> sensorTypes = {
     "xyz.openbmc_project.Configuration.ADM1272",
@@ -102,7 +101,9 @@
         const std::string& eventName = match.first;
         for (const auto& eventAttr : eventAttrs)
         {
-            auto eventPath = directory + "/" + eventAttr;
+            std::string eventPath = directory;
+            eventPath += "/";
+            eventPath += eventAttr;
 
             std::ifstream eventFile(eventPath);
             if (!eventFile.good())
@@ -141,7 +142,9 @@
             const std::vector<std::string>& eventAttrs = match.second;
             for (const auto& eventAttr : eventAttrs)
             {
-                auto eventPath = directory + "/" + eventAttr;
+                std::string eventPath = directory;
+                eventPath += "/";
+                eventPath += eventAttr;
                 std::ifstream eventFile(eventPath);
                 if (!eventFile.good())
                 {
@@ -279,7 +282,7 @@
 
         fs::path device = directory / "device";
         std::string deviceName = fs::canonical(device).stem();
-        auto findHyphen = deviceName.find("-");
+        auto findHyphen = deviceName.find('-');
         if (findHyphen == std::string::npos)
         {
             std::cerr << "found bad device" << deviceName << "\n";
@@ -294,7 +297,7 @@
         try
         {
             bus = std::stoi(busStr);
-            addr = std::stoi(addrStr, 0, 16);
+            addr = std::stoi(addrStr, nullptr, 16);
         }
         catch (std::invalid_argument&)
         {
@@ -432,7 +435,7 @@
         /* read max value in sysfs for in, curr, power, temp, ... */
         if (!findFiles(directory, R"(\w\d+_max$)", sensorPaths, 0))
         {
-            if constexpr (DEBUG)
+            if constexpr (debug)
             {
                 std::cerr << "No max name in PSU \n";
             }
@@ -473,7 +476,7 @@
             std::string labelPath;
 
             /* find and differentiate _max and _input to replace "label" */
-            size_t pos = sensorPathStr.find("_");
+            size_t pos = sensorPathStr.find('_');
             if (pos != std::string::npos)
             {
 
@@ -499,14 +502,14 @@
             std::ifstream labelFile(labelPath);
             if (!labelFile.good())
             {
-                if constexpr (DEBUG)
+                if constexpr (debug)
                 {
                     std::cerr << "Input file " << sensorPath
                               << " has no corresponding label file\n";
                 }
                 // hwmon *_input filename with number:
                 // temp1, temp2, temp3, ...
-                labelHead = sensorNameStr.substr(0, sensorNameStr.find("_"));
+                labelHead = sensorNameStr.substr(0, sensorNameStr.find('_'));
             }
             else
             {
@@ -521,16 +524,16 @@
 
                 // hwmon corresponding *_label file contents:
                 // vin1, vout1, ...
-                labelHead = label.substr(0, label.find(" "));
+                labelHead = label.substr(0, label.find(' '));
             }
 
             /* append "max" for labelMatch */
             if (maxLabel)
             {
-                labelHead = "max" + labelHead;
+                labelHead.insert(0, "max");
             }
 
-            if constexpr (DEBUG)
+            if constexpr (debug)
             {
                 std::cerr << "Sensor type=\"" << sensorNameSubStr
                           << "\" label=\"" << labelHead << "\"\n";
@@ -545,7 +548,7 @@
                 if (std::find(findLabels.begin(), findLabels.end(),
                               labelHead) == findLabels.end())
                 {
-                    if constexpr (DEBUG)
+                    if constexpr (debug)
                     {
                         std::cerr << "could not find " << labelHead
                                   << " in the Labels list\n";
@@ -557,7 +560,7 @@
             auto findProperty = labelMatch.find(labelHead);
             if (findProperty == labelMatch.end())
             {
-                if constexpr (DEBUG)
+                if constexpr (debug)
                 {
                     std::cerr << "Could not find matching default property for "
                               << labelHead << "\n";
@@ -697,7 +700,7 @@
 
                 psuNameFromIndex = psuNames[nameIndex];
 
-                if constexpr (DEBUG)
+                if constexpr (debug)
                 {
                     std::cerr << "Sensor label head " << labelHead
                               << " paired with " << psuNameFromIndex
@@ -717,7 +720,8 @@
                 factor = std::pow(10.0, factor);
 
                 /* Change first char of substring to uppercase */
-                char firstChar = sensorNameSubStr[0] - 0x20;
+                char firstChar =
+                    static_cast<char>(std::toupper(sensorNameSubStr[0]));
                 std::string strScaleFactor =
                     firstChar + sensorNameSubStr.substr(1) + "ScaleFactor";
 
@@ -730,7 +734,7 @@
                                         findScaleFactor->second);
                 }
 
-                if constexpr (DEBUG)
+                if constexpr (debug)
                 {
                     std::cerr << "Sensor scaling factor " << factor
                               << " string " << strScaleFactor << "\n";
@@ -753,7 +757,7 @@
                 continue;
             }
 
-            if constexpr (DEBUG)
+            if constexpr (debug)
             {
                 std::cerr << "Sensor properties: Name \""
                           << psuProperty->labelTypeName << "\" Scale "
@@ -781,7 +785,7 @@
                     psuNameFromIndex + " " + psuProperty->labelTypeName;
             }
 
-            if constexpr (DEBUG)
+            if constexpr (debug)
             {
                 std::cerr << "Sensor name \"" << sensorName << "\" path \""
                           << sensorPathStr << "\" type \"" << sensorType
@@ -796,7 +800,7 @@
                 psuProperty->minReading, labelHead, thresholdConfSize);
             sensors[sensorName]->setupRead();
             ++numCreated;
-            if constexpr (DEBUG)
+            if constexpr (debug)
             {
                 std::cerr << "Created " << numCreated << " sensors so far\n";
             }
@@ -810,7 +814,7 @@
                 groupEventPathList, "OperationalStatus");
     }
 
-    if constexpr (DEBUG)
+    if constexpr (debug)
     {
         std::cerr << "Created total of " << numCreated << " sensors\n";
     }
@@ -953,7 +957,7 @@
                 {
                     return;
                 }
-                else if (ec)
+                if (ec)
                 {
                     std::cerr << "timer error\n";
                 }
diff --git a/src/PwmSensor.cpp b/src/PwmSensor.cpp
index 8993f2b..bd9c9d6 100644
--- a/src/PwmSensor.cpp
+++ b/src/PwmSensor.cpp
@@ -13,10 +13,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 */
-#include "PwmSensor.hpp"
-
-#include "Utils.hpp"
-
+#include <PwmSensor.hpp>
+#include <Utils.hpp>
 #include <sdbusplus/asio/object_server.hpp>
 
 #include <fstream>
diff --git a/src/TachSensor.cpp b/src/TachSensor.cpp
index 0490135..bffc30e 100644
--- a/src/TachSensor.cpp
+++ b/src/TachSensor.cpp
@@ -14,12 +14,10 @@
 // limitations under the License.
 */
 
-#include "TachSensor.hpp"
-
-#include "Utils.hpp"
-
 #include <unistd.h>
 
+#include <TachSensor.hpp>
+#include <Utils.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/asio/read_until.hpp>
@@ -48,12 +46,12 @@
                        std::unique_ptr<PresenceSensor>&& presenceSensor,
                        std::optional<RedundancySensor>* redundancy,
                        boost::asio::io_service& io, const std::string& fanName,
-                       std::vector<thresholds::Threshold>&& _thresholds,
+                       std::vector<thresholds::Threshold>&& thresholds,
                        const std::string& sensorConfiguration,
                        const std::pair<size_t, size_t>& limits,
                        const PowerState& powerState,
                        const std::optional<std::string>& ledIn) :
-    Sensor(boost::replace_all_copy(fanName, " ", "_"), std::move(_thresholds),
+    Sensor(boost::replace_all_copy(fanName, " ", "_"), std::move(thresholds),
            sensorConfiguration, objectType, limits.second, limits.first, conn,
            powerState),
     objServer(objectServer), redundancy(redundancy),
@@ -255,7 +253,7 @@
                           {
                               return; // we're being destroyed
                           }
-                          else if (ec)
+                          if (ec)
                           {
                               std::cerr << "Error on presence sensor " << name
                                         << " \n";
@@ -330,7 +328,7 @@
             newState = redundancy::failed;
             break;
         }
-        else if (failedCount)
+        if (failedCount)
         {
             newState = redundancy::degraded;
         }
diff --git a/src/Thresholds.cpp b/src/Thresholds.cpp
index f4d4ed0..df56b21 100644
--- a/src/Thresholds.cpp
+++ b/src/Thresholds.cpp
@@ -1,11 +1,8 @@
-#include "Thresholds.hpp"
-
-#include "VariantVisitors.hpp"
-#include "sensor.hpp"
-
+#include <Thresholds.hpp>
+#include <VariantVisitors.hpp>
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/container/flat_map.hpp>
-#include <boost/lexical_cast.hpp>
+#include <sensor.hpp>
 
 #include <array>
 #include <cmath>
@@ -19,7 +16,7 @@
 #include <variant>
 #include <vector>
 
-static constexpr bool DEBUG = false;
+static constexpr bool debug = false;
 namespace thresholds
 {
 unsigned int toBusValue(const Level& level)
@@ -75,10 +72,14 @@
         {
             auto labelFind = item.second.find("Label");
             if (labelFind == item.second.end())
+            {
                 continue;
+            }
             if (std::visit(VariantToStringVisitor(), labelFind->second) !=
                 *matchLabel)
+            {
                 continue;
+            }
         }
         auto directionFind = item.second.find("Direction");
         auto severityFind = item.second.find("Severity");
@@ -323,7 +324,7 @@
         }
     }
 
-    if constexpr (DEBUG)
+    if constexpr (debug)
     {
         // Throttle debug output, so that it does not continuously spam
         ++cDebugThrottle;
@@ -491,7 +492,7 @@
                 if (auto val = readFile(attrPath, scaleFactor))
                 {
                     *val += offset;
-                    if (DEBUG)
+                    if (debug)
                     {
                         std::cout << "Threshold: " << attrPath << ": " << *val
                                   << "\n";
diff --git a/src/Utils.cpp b/src/Utils.cpp
index 899ec98..5217129 100644
--- a/src/Utils.cpp
+++ b/src/Utils.cpp
@@ -14,8 +14,7 @@
 // limitations under the License.
 */
 
-#include "Utils.hpp"
-
+#include <Utils.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/container/flat_map.hpp>
 #include <sdbusplus/asio/connection.hpp>
@@ -130,6 +129,14 @@
 bool getSensorConfiguration(
     const std::string& type,
     const std::shared_ptr<sdbusplus::asio::connection>& dbusConnection,
+    ManagedObjectType& resp)
+{
+    return getSensorConfiguration(type, dbusConnection, resp, false);
+}
+
+bool getSensorConfiguration(
+    const std::string& type,
+    const std::shared_ptr<sdbusplus::asio::connection>& dbusConnection,
     ManagedObjectType& resp, bool useCache)
 {
     static ManagedObjectType managedObj;
@@ -182,25 +189,31 @@
     return true;
 }
 
-bool findFiles(const fs::path dirPath, const std::string& matchString,
-               std::vector<fs::path>& foundPaths, unsigned int symlinkDepth)
+bool findFiles(const fs::path& dirPath, const std::string& matchString,
+               std::vector<fs::path>& foundPaths, int symlinkDepth)
 {
     if (!fs::exists(dirPath))
+    {
         return false;
+    }
 
     std::regex search(matchString);
     std::smatch match;
-    for (auto& p : fs::recursive_directory_iterator(dirPath))
+    for (auto p = fs::recursive_directory_iterator(
+             dirPath, fs::directory_options::follow_directory_symlink);
+         p != fs::recursive_directory_iterator(); ++p)
     {
-        std::string path = p.path().string();
-        if (!is_directory(p))
+        std::string path = p->path().string();
+        if (!is_directory(*p))
         {
             if (std::regex_search(path, match, search))
-                foundPaths.emplace_back(p.path());
+            {
+                foundPaths.emplace_back(p->path());
+            }
         }
-        else if (is_symlink(p) && symlinkDepth)
+        if (p.depth() >= symlinkDepth)
         {
-            findFiles(p.path(), matchString, foundPaths, symlinkDepth - 1);
+            p.disable_recursion_pending();
         }
     }
     return true;
@@ -328,7 +341,7 @@
                     {
                         return;
                     }
-                    else if (ec)
+                    if (ec)
                     {
                         std::cerr << "Timer error " << ec.message() << "\n";
                         return;
@@ -390,15 +403,15 @@
         std::filesystem::path p(path);
 
         std::vector<Association> associations;
-        associations.push_back(
-            Association("chassis", "all_sensors", p.parent_path().string()));
+        associations.emplace_back("chassis", "all_sensors",
+                                  p.parent_path().string());
         association->register_property("Associations", associations);
         association->initialize();
     }
 }
 
 void setInventoryAssociation(
-    std::shared_ptr<sdbusplus::asio::dbus_interface> association,
+    const std::shared_ptr<sdbusplus::asio::dbus_interface>& association,
     const std::string& path,
     const std::vector<std::string>& chassisPaths = std::vector<std::string>())
 {
@@ -408,13 +421,12 @@
         std::vector<Association> associations;
         std::string objPath(p.parent_path().string());
 
-        associations.push_back(Association("inventory", "sensors", objPath));
-        associations.push_back(Association("chassis", "all_sensors", objPath));
+        associations.emplace_back("inventory", "sensors", objPath);
+        associations.emplace_back("chassis", "all_sensors", objPath);
 
         for (const std::string& chassisPath : chassisPaths)
         {
-            associations.push_back(
-                Association("chassis", "all_sensors", chassisPath));
+            associations.emplace_back("chassis", "all_sensors", chassisPath);
         }
 
         association->register_property("Associations", associations);
@@ -423,8 +435,8 @@
 }
 
 void createInventoryAssoc(
-    std::shared_ptr<sdbusplus::asio::connection> conn,
-    std::shared_ptr<sdbusplus::asio::dbus_interface> association,
+    const std::shared_ptr<sdbusplus::asio::connection>& conn,
+    const std::shared_ptr<sdbusplus::asio::dbus_interface>& association,
     const std::string& path)
 {
     if (!association)
diff --git a/tests/test_HwmonTempSensor.cpp b/tests/test_HwmonTempSensor.cpp
index 0368064..2be603a 100644
--- a/tests/test_HwmonTempSensor.cpp
+++ b/tests/test_HwmonTempSensor.cpp
@@ -4,7 +4,7 @@
 
 #include <fstream>
 
-#include "gtest/gtest.h"
+#include <gtest/gtest.h>
 
 TEST(HwmonTempSensor, TestTMP75)
 {
diff --git a/tests/test_TachSensor.cpp b/tests/test_TachSensor.cpp
index b28de93..c1326e3 100644
--- a/tests/test_TachSensor.cpp
+++ b/tests/test_TachSensor.cpp
@@ -5,7 +5,7 @@
 
 #include <fstream>
 
-#include "gtest/gtest.h"
+#include <gtest/gtest.h>
 
 TEST(TachSensor, TestTachSensor)
 {
