diff --git a/CMakeLists.txt b/CMakeLists.txt
index af1a41c..564fce2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3,7 +3,33 @@
 include (ExternalProject)
 set (CMAKE_CXX_STANDARD 17)
 set (CMAKE_CXX_STANDARD_REQUIRED ON)
-set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lstdc++fs -Werror")
+set (
+    CMAKE_CXX_FLAGS
+    "${CMAKE_CXX_FLAGS} -lstdc++fs \
+    -Werror \
+    -Wall \
+    -Wextra \
+    -Wnon-virtual-dtor \
+    -Wold-style-cast \
+    -Wcast-align \
+    -Wunused \
+    -Woverloaded-virtual \
+    -Wpedantic \
+    -Wmisleading-indentation \
+    -Wduplicated-cond \
+    -Wduplicated-branches \
+    -Wlogical-op \
+    -Wnull-dereference \
+    -Wuseless-cast \
+    -Wdouble-promotion \
+    -Wformat=2 \
+    -Wno-sign-compare \
+    -Wno-reorder \
+"
+)
+# todo: get rid of nos, add the below:
+#  -Wshadow \
+#  -Wconversion \
 
 set (CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
 
@@ -53,7 +79,7 @@
 
 if (NOT YOCTO)
     option (ENABLE_TEST "Enable Google Test" OFF)
-    include_directories (${CMAKE_CURRENT_SOURCE_DIR}/include/non-yocto)
+    include_directories (SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/include/non-yocto)
 
     externalproject_add (
         Boost URL
@@ -63,7 +89,7 @@
         "${CMAKE_BINARY_DIR}/boost-build" CONFIGURE_COMMAND "" BUILD_COMMAND ""
         INSTALL_COMMAND ""
     )
-    include_directories (${CMAKE_BINARY_DIR}/boost-src)
+    include_directories (SYSTEM ${CMAKE_BINARY_DIR}/boost-src)
     set (CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/boost-src ${CMAKE_PREFIX_PATH})
 
     # requires apt install autoconf-archive and autoconf
@@ -76,7 +102,7 @@
                          && ./bootstrap.sh && ./configure --enable-transaction
                          && make -j libsdbusplus.la INSTALL_COMMAND ""
                          LOG_DOWNLOAD ON)
-    include_directories (${CMAKE_BINARY_DIR}/sdbusplus-src)
+    include_directories (SYSTEM ${CMAKE_BINARY_DIR}/sdbusplus-src)
     link_directories (${CMAKE_BINARY_DIR}/sdbusplus-src/.libs)
 
     externalproject_add (nlohmann-json PREFIX
@@ -86,7 +112,7 @@
                          BINARY_DIR ${CMAKE_BINARY_DIR}/nlohmann-json-build
                          CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND
                          "" LOG_DOWNLOAD ON)
-    include_directories (${CMAKE_BINARY_DIR}/nlohmann-json-src/include)
+    include_directories (SYSTEM ${CMAKE_BINARY_DIR}/nlohmann-json-src/include)
     if (ENABLE_TEST)
         option (HUNTER_ENABLED "Enable hunter package pulling" ON)
         hunter_add_package (GTest)
@@ -234,9 +260,10 @@
 
 if (NOT DISABLE_MCUTEMP)
     install (TARGETS mcutempsensor DESTINATION bin)
-    install (FILES
-                 ${SERVICE_FILE_SRC_DIR}/xyz.openbmc_project.mcutempsensor.service
-                 DESTINATION ${SERVICE_FILE_INSTALL_DIR})
+    install (
+        FILES ${SERVICE_FILE_SRC_DIR}/xyz.openbmc_project.mcutempsensor.service
+              DESTINATION ${SERVICE_FILE_INSTALL_DIR}
+    )
 endif ()
 
 if (NOT DISABLE_PSU)
diff --git a/include/CPUSensor.hpp b/include/CPUSensor.hpp
index 1c25655..5f48674 100644
--- a/include/CPUSensor.hpp
+++ b/include/CPUSensor.hpp
@@ -94,7 +94,7 @@
     bool resp = true;
     try
     {
-        line.request({"adcsensor", gpiod::line_request::DIRECTION_INPUT});
+        line.request({"adcsensor", gpiod::line_request::DIRECTION_INPUT, 0});
         resp = !line.get_value();
     }
     catch (std::system_error&)
diff --git a/src/ADCSensor.cpp b/src/ADCSensor.cpp
index c94f251..2141ac4 100644
--- a/src/ADCSensor.cpp
+++ b/src/ADCSensor.cpp
@@ -165,7 +165,7 @@
             }
             errCount = 0;
         }
-        catch (std::invalid_argument)
+        catch (std::invalid_argument&)
         {
             errCount++;
         }
diff --git a/src/ADCSensorMain.cpp b/src/ADCSensorMain.cpp
index 7cb31d0..188aad9 100644
--- a/src/ADCSensorMain.cpp
+++ b/src/ADCSensorMain.cpp
@@ -248,7 +248,7 @@
     }
 }
 
-int main(int argc, char** argv)
+int main()
 {
     boost::asio::io_service io;
     auto systemBus = std::make_shared<sdbusplus::asio::connection>(io);
diff --git a/src/CPUSensorMain.cpp b/src/CPUSensorMain.cpp
index 2f2319d..2588221 100644
--- a/src/CPUSensorMain.cpp
+++ b/src/CPUSensorMain.cpp
@@ -154,7 +154,7 @@
             bus = std::stoi(busStr);
             addr = std::stoi(addrStr, 0, 16);
         }
-        catch (std::invalid_argument)
+        catch (std::invalid_argument&)
         {
             continue;
         }
@@ -243,7 +243,7 @@
 
         auto directory = hwmonNamePath.parent_path();
         std::vector<fs::path> inputPaths;
-        if (!findFiles(fs::path(directory), R"(temp\d+_input$)", inputPaths, 0))
+        if (!findFiles(directory, R"(temp\d+_input$)", inputPaths, 0))
         {
             std::cerr << "No temperature sensors in system\n";
             continue;
@@ -645,7 +645,7 @@
     return false;
 }
 
-int main(int argc, char** argv)
+int main()
 {
     boost::asio::io_service io;
     auto systemBus = std::make_shared<sdbusplus::asio::connection>(io);
diff --git a/src/ChassisIntrusionSensor.cpp b/src/ChassisIntrusionSensor.cpp
index 4bf7fdc..f10e9b9 100644
--- a/src/ChassisIntrusionSensor.cpp
+++ b/src/ChassisIntrusionSensor.cpp
@@ -43,9 +43,6 @@
 // Status bit field masks
 const static constexpr size_t pchRegMaskIntrusion = 0x01;
 
-// Hold current PCH register values
-static unsigned int intrudeValue;
-
 // gpio sysfs path
 constexpr const char* gpioPath = "/sys/class/gpio/";
 
@@ -104,7 +101,7 @@
         return -1;
     }
 
-    unsigned int statusValue;
+    int statusValue;
     unsigned int statusMask = pchRegMaskIntrusion;
     unsigned int statusReg = pchStatusRegIntrusion;
 
diff --git a/src/ExitAirTempSensor.cpp b/src/ExitAirTempSensor.cpp
index a4aba4b..972b42b 100644
--- a/src/ExitAirTempSensor.cpp
+++ b/src/ExitAirTempSensor.cpp
@@ -266,8 +266,7 @@
 
 void CFMSensor::createMaxCFMIface(void)
 {
-    cfmLimitIface->register_property("Limit", static_cast<double>(c2) * maxCFM *
-                                                  tachs.size());
+    cfmLimitIface->register_property("Limit", c2 * maxCFM * tachs.size());
     cfmLimitIface->initialize();
 }
 
@@ -686,7 +685,7 @@
                                         (qMax - qMin) * (cfm - qMin));
     }
 
-    totalPower *= powerFactor;
+    totalPower *= static_cast<double>(powerFactor);
     totalPower += pOffset;
 
     if (totalPower == 0)
@@ -709,7 +708,7 @@
 
     // Calculate the exit air temp
     // Texit = Tfp + (1.76 * TotalPower / CFM * Faltitude)
-    double reading = 1.76 * totalPower * altitudeFactor;
+    double reading = 1.76 * totalPower * static_cast<double>(altitudeFactor);
     reading /= cfm;
     reading += inletTemp;
 
@@ -890,7 +889,7 @@
         "GetManagedObjects");
 }
 
-int main(int argc, char** argv)
+int main()
 {
 
     boost::asio::io_service io;
@@ -906,7 +905,7 @@
     boost::asio::deadline_timer configTimer(io);
 
     std::function<void(sdbusplus::message::message&)> eventHandler =
-        [&](sdbusplus::message::message& message) {
+        [&](sdbusplus::message::message&) {
             configTimer.expires_from_now(boost::posix_time::seconds(1));
             // create a timer because normally multiple properties change
             configTimer.async_wait([&](const boost::system::error_code& ec) {
diff --git a/src/FanMain.cpp b/src/FanMain.cpp
index eeface8..b0237c2 100644
--- a/src/FanMain.cpp
+++ b/src/FanMain.cpp
@@ -165,7 +165,8 @@
                 sensorData = &(sensor.second);
                 break;
             }
-            else if (baseType == "xyz.openbmc_project.Configuration.I2CFan")
+            else if (baseType ==
+                     std::string("xyz.openbmc_project.Configuration.I2CFan"))
             {
                 auto findBus = baseConfiguration->second.find("Bus");
                 auto findAddress = baseConfiguration->second.find("Address");
@@ -374,7 +375,7 @@
         "org.freedesktop.DBus.ObjectManager", "GetManagedObjects");
 }
 
-int main(int argc, char** argv)
+int main()
 {
     boost::asio::io_service io;
     auto systemBus = std::make_shared<sdbusplus::asio::connection>(io);
@@ -435,7 +436,7 @@
     // redundancy sensor
     std::function<void(sdbusplus::message::message&)> redundancyHandler =
         [&tachSensors, &systemBus,
-         &objectServer](sdbusplus::message::message& message) {
+         &objectServer](sdbusplus::message::message&) {
             createRedundancySensor(tachSensors, systemBus, objectServer);
         };
     auto match = std::make_unique<sdbusplus::bus::match::match>(
@@ -443,7 +444,7 @@
         "type='signal',member='PropertiesChanged',path_namespace='" +
             std::string(inventoryPath) + "',arg0namespace='" +
             redundancyConfiguration + "'",
-        redundancyHandler);
+        std::move(redundancyHandler));
     matches.emplace_back(std::move(match));
 
     io.run();
diff --git a/src/HwmonTempMain.cpp b/src/HwmonTempMain.cpp
index 2b1d7c1..7eaea30 100644
--- a/src/HwmonTempMain.cpp
+++ b/src/HwmonTempMain.cpp
@@ -79,7 +79,7 @@
             continue; // already searched this path
         }
 
-        auto device = fs::path(directory / "device");
+        fs::path device = directory / "device";
         std::string deviceName = fs::canonical(device).stem();
         auto findHyphen = deviceName.find("-");
         if (findHyphen == std::string::npos)
@@ -97,7 +97,7 @@
             bus = std::stoi(busStr);
             addr = std::stoi(addrStr, 0, 16);
         }
-        catch (std::invalid_argument)
+        catch (std::invalid_argument&)
         {
             continue;
         }
@@ -208,7 +208,7 @@
     }
 }
 
-int main(int argc, char** argv)
+int main()
 {
     boost::asio::io_service io;
     auto systemBus = std::make_shared<sdbusplus::asio::connection>(io);
diff --git a/src/HwmonTempSensor.cpp b/src/HwmonTempSensor.cpp
index 09161e4..16742ce 100644
--- a/src/HwmonTempSensor.cpp
+++ b/src/HwmonTempSensor.cpp
@@ -103,7 +103,7 @@
         {
             float nvalue = std::stof(response);
             nvalue /= sensorScaleFactor;
-            if (nvalue != value)
+            if (static_cast<double>(nvalue) != value)
             {
                 updateValue(nvalue);
             }
diff --git a/src/IpmbSensor.cpp b/src/IpmbSensor.cpp
index 738ef57..b3cc104 100644
--- a/src/IpmbSensor.cpp
+++ b/src/IpmbSensor.cpp
@@ -422,7 +422,7 @@
     }
 }
 
-int main(int argc, char** argv)
+int main()
 {
 
     boost::asio::io_service io;
@@ -437,7 +437,7 @@
     boost::asio::deadline_timer configTimer(io);
 
     std::function<void(sdbusplus::message::message&)> eventHandler =
-        [&](sdbusplus::message::message& message) {
+        [&](sdbusplus::message::message&) {
             configTimer.expires_from_now(boost::posix_time::seconds(1));
             // create a timer because normally multiple properties change
             configTimer.async_wait([&](const boost::system::error_code& ec) {
diff --git a/src/MCUTempSensor.cpp b/src/MCUTempSensor.cpp
index fd45327..0b621d0 100644
--- a/src/MCUTempSensor.cpp
+++ b/src/MCUTempSensor.cpp
@@ -105,7 +105,6 @@
 {
     std::string i2cBus = "/dev/i2c-" + std::to_string(busId);
     int fd = open(i2cBus.c_str(), O_RDWR);
-    size_t i = 0;
 
     if (fd < 0)
     {
@@ -172,7 +171,7 @@
             double v = static_cast<double>(temp) / 1000;
             if constexpr (debug)
             {
-                std::cerr << "Value update to " << (double)v << "raw reading "
+                std::cerr << "Value update to " << v << "raw reading "
                           << static_cast<int>(temp) << "\n";
             }
             updateValue(v);
@@ -264,7 +263,7 @@
         "GetManagedObjects");
 }
 
-int main(int argc, char** argv)
+int main()
 {
     boost::asio::io_service io;
     auto systemBus = std::make_shared<sdbusplus::asio::connection>(io);
@@ -276,7 +275,7 @@
     boost::asio::deadline_timer configTimer(io);
 
     std::function<void(sdbusplus::message::message&)> eventHandler =
-        [&](sdbusplus::message::message& message) {
+        [&](sdbusplus::message::message&) {
             configTimer.expires_from_now(boost::posix_time::seconds(1));
             // create a timer because normally multiple properties change
             configTimer.async_wait([&](const boost::system::error_code& ec) {
diff --git a/src/PSUEvent.cpp b/src/PSUEvent.cpp
index 5bfa1e4..84b7097 100644
--- a/src/PSUEvent.cpp
+++ b/src/PSUEvent.cpp
@@ -31,7 +31,7 @@
         "/xyz/openbmc_project/State/Decorator/" + psuName + "_" +
             combineEventName,
         "xyz.openbmc_project.State.Decorator.OperationalStatus");
-    eventInterface->register_property("functional", bool(true));
+    eventInterface->register_property("functional", true);
 
     if (!eventInterface->initialize())
     {
diff --git a/src/PSUSensor.cpp b/src/PSUSensor.cpp
index fdd453a..58dee54 100644
--- a/src/PSUSensor.cpp
+++ b/src/PSUSensor.cpp
@@ -97,7 +97,7 @@
             float nvalue = std::stof(response);
             responseStream.clear();
             nvalue /= sensorFactor;
-            if (nvalue != value)
+            if (static_cast<double>(nvalue) != value)
             {
                 updateValue(nvalue);
             }
diff --git a/src/PSUSensorMain.cpp b/src/PSUSensorMain.cpp
index 99f6701..49c3a08 100644
--- a/src/PSUSensorMain.cpp
+++ b/src/PSUSensorMain.cpp
@@ -198,7 +198,7 @@
             continue; // check if path has already been searched
         }
 
-        auto device = fs::path(directory / "device");
+        fs::path device = directory / "device";
         std::string deviceName = fs::canonical(device).stem();
         auto findHyphen = deviceName.find("-");
         if (findHyphen == std::string::npos)
@@ -217,7 +217,7 @@
             bus = std::stoi(busStr);
             addr = std::stoi(addrStr, 0, 16);
         }
-        catch (std::invalid_argument)
+        catch (std::invalid_argument&)
         {
             continue;
         }
@@ -309,7 +309,7 @@
         } while (findPSUName != baseConfig->second.end());
 
         std::vector<fs::path> sensorPaths;
-        if (!findFiles(fs::path(directory), R"(\w\d+_input$)", sensorPaths, 0))
+        if (!findFiles(directory, R"(\w\d+_input$)", sensorPaths, 0))
         {
             std::cerr << "No PSU non-label sensor in PSU\n";
             continue;
@@ -336,7 +336,7 @@
             std::string labelPathStr =
                 boost::replace_all_copy(sensorNameStr, "input", "label");
             std::vector<fs::path> labelPaths;
-            if (!findFiles(fs::path(directory), labelPathStr, labelPaths, 0))
+            if (!findFiles(directory, labelPathStr, labelPaths, 0))
             {
                 std::cerr << "No PSU non-label sensor in PSU\n";
                 continue;
@@ -482,7 +482,7 @@
         {"FanFault", {"fan1_alarm", "fan2_alarm", "fan1_fault", "fan2_fault"}}};
 }
 
-int main(int argc, char** argv)
+int main()
 {
     boost::asio::io_service io;
     auto systemBus = std::make_shared<sdbusplus::asio::connection>(io);
diff --git a/src/PwmSensor.cpp b/src/PwmSensor.cpp
index 6402ad0..d8a7a17 100644
--- a/src/PwmSensor.cpp
+++ b/src/PwmSensor.cpp
@@ -22,7 +22,6 @@
 #include <sdbusplus/asio/object_server.hpp>
 
 static constexpr size_t pwmMax = 255;
-static constexpr size_t pwmMin = 0;
 
 PwmSensor::PwmSensor(const std::string& name, const std::string& sysPath,
                      sdbusplus::asio::object_server& objectServer,
@@ -36,7 +35,7 @@
         "/xyz/openbmc_project/sensors/fan_pwm/" + name,
         "xyz.openbmc_project.Sensor.Value");
     uint32_t pwmValue = getValue(false);
-    double fValue = 100.0 * (static_cast<float>(pwmValue) / pwmMax);
+    double fValue = 100.0 * (static_cast<double>(pwmValue) / pwmMax);
     sensorInterface->register_property(
         "Value", fValue,
         [this](const double& req, double& resp) {
@@ -58,7 +57,7 @@
             return 1;
         },
         [this](double& curVal) {
-            float value = 100.0 * (static_cast<float>(getValue()) / pwmMax);
+            double value = 100.0 * (static_cast<double>(getValue()) / pwmMax);
             if (curVal != value)
             {
                 curVal = value;
@@ -78,7 +77,7 @@
     controlInterface->register_property(
         "Target", static_cast<uint64_t>(pwmValue),
         [this](const uint64_t& req, uint64_t& resp) {
-            if (req > pwmMax || req < pwmMin)
+            if (req > pwmMax)
             {
                 throw std::runtime_error("Value out of range");
                 return -1;
@@ -149,7 +148,7 @@
         uint32_t value = std::stoi(line);
         return value;
     }
-    catch (std::invalid_argument)
+    catch (std::invalid_argument&)
     {
         std::cerr << "Error reading pwm at " << sysPath << "\n";
         // throw if not initial read to be caught by dbus bindings
diff --git a/src/TachSensor.cpp b/src/TachSensor.cpp
index 45ac7ac..46f5389 100644
--- a/src/TachSensor.cpp
+++ b/src/TachSensor.cpp
@@ -142,7 +142,7 @@
                 std::getline(responseStream, response);
                 float nvalue = std::stof(response);
                 responseStream.clear();
-                if (nvalue != value)
+                if (static_cast<double>(nvalue) != value)
                 {
                     updateValue(nvalue);
                 }
diff --git a/src/Thresholds.cpp b/src/Thresholds.cpp
index 3dd444d..f07f086 100644
--- a/src/Thresholds.cpp
+++ b/src/Thresholds.cpp
@@ -333,7 +333,7 @@
     const std::string& inputPath, const double& scaleFactor,
     const double& offset)
 {
-    for (auto& type : attrTypes)
+    for (const std::string& type : attrTypes)
     {
         auto attrPath = boost::replace_all_copy(inputPath, "input", type);
         std::ifstream attrFile(attrPath);
