diff --git a/.clang-tidy b/.clang-tidy
index 3b34c55..0122e24 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -36,7 +36,7 @@
 bugprone-string-integer-assignment,
 bugprone-string-literal-with-embedded-nul,
 bugprone-suspicious-enum-usage,
-bugprone-suspicious-include,
+#bugprone-suspicious-include,
 bugprone-suspicious-memset-usage,
 bugprone-suspicious-missing-comma,
 bugprone-suspicious-semicolon,
@@ -190,7 +190,7 @@
 clang-analyzer-webkit.NoUncountedMemberChecker,
 clang-analyzer-webkit.RefCntblBaseVirtualDtor,
 misc-misplaced-const,
-misc-no-recursion,
+#misc-no-recursion,
 misc-redundant-expression,
 misc-static-assert,
 misc-throw-by-value-catch-by-reference,
diff --git a/http/http_client.hpp b/http/http_client.hpp
index 5c7b13f..1ac890c 100644
--- a/http/http_client.hpp
+++ b/http/http_client.hpp
@@ -80,6 +80,7 @@
         BMCWEB_LOG_DEBUG << "Trying to connect to: " << host << ":" << port;
         // Set a timeout on the operation
         conn.expires_after(std::chrono::seconds(30));
+
         conn.async_connect(endpoint, [self(shared_from_this())](
                                          const boost::beast::error_code& ec,
                                          const boost::asio::ip::tcp::resolver::
diff --git a/http/utility.hpp b/http/utility.hpp
index be50636..19ffe9f 100644
--- a/http/utility.hpp
+++ b/http/utility.hpp
@@ -124,6 +124,7 @@
 
 inline bool isParameterTagCompatible(uint64_t a, uint64_t b)
 {
+
     if (a == 0)
     {
         return b == 0;
@@ -151,6 +152,7 @@
 
 constexpr uint64_t getParameterTag(std::string_view s, unsigned p = 0)
 {
+
     if (p == s.size())
     {
         return 0;
diff --git a/include/cors_preflight.hpp b/include/cors_preflight.hpp
index 844fd38..4bac265 100644
--- a/include/cors_preflight.hpp
+++ b/include/cors_preflight.hpp
@@ -6,7 +6,7 @@
 
 namespace cors_preflight
 {
-void requestRoutes(App& app)
+inline void requestRoutes(App& app)
 {
     BMCWEB_ROUTE(app, "<str>")
         .methods(boost::beast::http::verb::options)(
diff --git a/include/ssl_key_handler.hpp b/include/ssl_key_handler.hpp
index 39e83d7..24e40a4 100644
--- a/include/ssl_key_handler.hpp
+++ b/include/ssl_key_handler.hpp
@@ -205,8 +205,7 @@
 inline int addExt(X509* cert, int nid, const char* value)
 {
     X509_EXTENSION* ex = nullptr;
-    X509V3_CTX ctx;
-    X509V3_set_ctx_nodb(&ctx);
+    X509V3_CTX ctx{};
     X509V3_set_ctx(&ctx, cert, cert, nullptr, nullptr, 0);
     ex = X509V3_EXT_conf_nid(nullptr, &ctx, nid, const_cast<char*>(value));
     if (!ex)
diff --git a/meson.build b/meson.build
index 48f7691..27f25ec 100644
--- a/meson.build
+++ b/meson.build
@@ -291,6 +291,7 @@
             'subprojects/nlohmann/single_include/nlohmann',
         ]
     )
+    nlohmann_json = nlohmann_json.as_system('system')
 endif
 bmcweb_dependencies += nlohmann_json
 
@@ -299,6 +300,7 @@
   subproject('boost', required: false)
   boost_inc = include_directories('subprojects/boost_1_75_0/', is_system:true)
   boost  = declare_dependency(include_directories : boost_inc)
+  boost = boost.as_system('system')
 endif
 bmcweb_dependencies += boost
 
@@ -308,6 +310,7 @@
   subproject('boost-url', required: false)
   boost_url_inc = include_directories('subprojects/boost-url/include', is_system:true)
   boost_url= declare_dependency(include_directories : boost_url_inc)
+  boost_url = boost_url.as_system('system')
 endif
 bmcweb_dependencies += boost_url
 
@@ -319,6 +322,8 @@
     gtest = gtest_proj.get_variable('gtest_main_dep')
     gmock = gtest_proj.get_variable('gmock_dep')
   endif
+  gtest = gtest.as_system('system')
+  gmock = gmock.as_system('system')
 endif
 
 # Source files
diff --git a/redfish-core/include/utils/time_utils.hpp b/redfish-core/include/utils/time_utils.hpp
index dd4ea75..4a87ba0 100644
--- a/redfish-core/include/utils/time_utils.hpp
+++ b/redfish-core/include/utils/time_utils.hpp
@@ -26,7 +26,7 @@
  *        Example output: "P12DT1M5.5S"
  *        Ref: Redfish Specification, Section 9.4.4. Duration values
  */
-std::string toDurationString(std::chrono::milliseconds ms)
+inline std::string toDurationString(std::chrono::milliseconds ms)
 {
     if (ms < std::chrono::milliseconds::zero())
     {
diff --git a/redfish-core/lib/sensors.hpp b/redfish-core/lib/sensors.hpp
index 5cef3b1..35114bf 100644
--- a/redfish-core/lib/sensors.hpp
+++ b/redfish-core/lib/sensors.hpp
@@ -2691,7 +2691,7 @@
     for (auto& chassisSensor : sensorsList)
     {
         sdbusplus::message::object_path path(chassisSensor);
-        std::string_view thisSensorName = path.filename();
+        std::string thisSensorName = path.filename();
         if (thisSensorName.empty())
         {
             continue;
