diff --git a/snmp_client.cpp b/snmp_client.cpp
index 3f6a405..a636971 100644
--- a/snmp_client.cpp
+++ b/snmp_client.cpp
@@ -13,8 +13,7 @@
 Client::Client(sdbusplus::bus::bus& bus, const char* objPath,
                ConfManager& parent, const std::string& address, uint16_t port) :
     Ifaces(bus, objPath, true),
-    id(std::stol(std::experimental::filesystem::path(objPath).filename())),
-    parent(parent)
+    id(std::stol(std::filesystem::path(objPath).filename())), parent(parent)
 {
     this->address(address);
     this->port(port);
diff --git a/snmp_client.hpp b/snmp_client.hpp
index b5b0eb2..bd3ab8e 100644
--- a/snmp_client.hpp
+++ b/snmp_client.hpp
@@ -5,7 +5,7 @@
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/server/object.hpp>
 
-#include <experimental/filesystem>
+#include <filesystem>
 #include <string>
 
 namespace phosphor
@@ -55,8 +55,7 @@
      */
     Client(sdbusplus::bus::bus& bus, const char* objPath, ConfManager& parent) :
         Ifaces(bus, objPath, true),
-        id(std::stol(std::experimental::filesystem::path(objPath).filename())),
-        parent(parent)
+        id(std::stol(std::filesystem::path(objPath).filename())), parent(parent)
     {}
 
     /** @brief Update the address of the object.
diff --git a/snmp_conf_manager.cpp b/snmp_conf_manager.cpp
index cefce85..ed73daf 100644
--- a/snmp_conf_manager.cpp
+++ b/snmp_conf_manager.cpp
@@ -11,7 +11,7 @@
 #include <phosphor-logging/elog-errors.hpp>
 #include <phosphor-logging/log.hpp>
 
-#include <experimental/filesystem>
+#include <filesystem>
 
 namespace phosphor
 {
@@ -50,7 +50,7 @@
     }
 
     // create the D-Bus object
-    std::experimental::filesystem::path objPath;
+    std::filesystem::path objPath;
     objPath /= objectPath;
     objPath /= std::to_string(lastClientId);
 
diff --git a/snmp_conf_manager.hpp b/snmp_conf_manager.hpp
index faa9954..afbfad8 100644
--- a/snmp_conf_manager.hpp
+++ b/snmp_conf_manager.hpp
@@ -5,7 +5,6 @@
 #include <sdbusplus/bus.hpp>
 #include <xyz/openbmc_project/Network/Client/Create/server.hpp>
 
-#include <experimental/filesystem>
 #include <string>
 
 namespace phosphor
@@ -16,7 +15,7 @@
 {
 
 using ClientList = std::map<Id, std::unique_ptr<Client>>;
-namespace fs = std::experimental::filesystem;
+namespace fs = std::filesystem;
 
 namespace details
 {
diff --git a/snmp_main.cpp b/snmp_main.cpp
index 4522a2a..0ae1eef 100644
--- a/snmp_main.cpp
+++ b/snmp_main.cpp
@@ -13,13 +13,13 @@
 {
     void operator()(sd_event* event) const
     {
-        event = sd_event_unref(event);
+        sd_event_unref(event);
     }
 };
 
 using EventPtr = std::unique_ptr<sd_event, EventDeleter>;
 
-int main(int argc, char* argv[])
+int main(int /*argc*/, char** /*argv[]*/)
 {
     using namespace phosphor::logging;
 
diff --git a/snmp_notification.cpp b/snmp_notification.cpp
index db19ecc..2037765 100644
--- a/snmp_notification.cpp
+++ b/snmp_notification.cpp
@@ -60,8 +60,7 @@
 void Notification::sendTrap()
 {
     constexpr auto comm = "public";
-    netsnmp_session session{0};
-
+    netsnmp_session session{};
     snmp_sess_init(&session);
 
     init_snmp("snmpapp");
diff --git a/snmp_serialize.cpp b/snmp_serialize.cpp
index 1b47d4e..6f4e4bf 100644
--- a/snmp_serialize.cpp
+++ b/snmp_serialize.cpp
@@ -33,7 +33,8 @@
  *                       a serialized data across code levels
  */
 template <class Archive>
-void save(Archive& archive, const Client& manager, const std::uint32_t version)
+void save(Archive& archive, const Client& manager,
+          const std::uint32_t /*version*/)
 {
     archive(manager.address(), manager.port());
 }
@@ -46,7 +47,7 @@
  *                       a serialized data across code levels
  */
 template <class Archive>
-void load(Archive& archive, Client& manager, const std::uint32_t version)
+void load(Archive& archive, Client& manager, const std::uint32_t /*version*/)
 {
     std::string ipaddress{};
     uint16_t port{};
diff --git a/snmp_serialize.hpp b/snmp_serialize.hpp
index 8f1400e..d5189a9 100644
--- a/snmp_serialize.hpp
+++ b/snmp_serialize.hpp
@@ -2,7 +2,7 @@
 
 #include "snmp_client.hpp"
 
-#include <experimental/filesystem>
+#include <filesystem>
 
 namespace phosphor
 {
@@ -13,7 +13,7 @@
 
 constexpr auto SEPARATOR = "_";
 
-namespace fs = std::experimental::filesystem;
+namespace fs = std::filesystem;
 
 /** @brief Serialize and persist SNMP manager/client D-Bus object.
  *  @param[in] id - filename of the persisted SNMP manager object.
diff --git a/snmp_util.cpp b/snmp_util.cpp
index 3d5dad9..d0c8133 100644
--- a/snmp_util.cpp
+++ b/snmp_util.cpp
@@ -44,7 +44,7 @@
 
 std::string resolveAddress(const std::string& address)
 {
-    addrinfo hints{0};
+    addrinfo hints{};
     addrinfo* addr = nullptr;
 
     hints.ai_family = AF_UNSPEC;
diff --git a/test/test_snmp_client.cpp b/test/test_snmp_client.cpp
index 1dd9eb4..698c491 100644
--- a/test/test_snmp_client.cpp
+++ b/test/test_snmp_client.cpp
@@ -22,12 +22,11 @@
   public:
     sdbusplus::bus::bus bus;
     ConfManager manager;
-    std::string confDir;
     TestSNMPClient() :
         bus(sdbusplus::bus::new_default()), manager(bus, mgrObjPath)
     {
         char tmp[] = "/tmp/snmpClient.XXXXXX";
-        std::string confDir = mkdtemp(tmp);
+        auto confDir = mkdtemp(tmp);
         manager.dbusPersistentLocation = confDir;
     }
 
diff --git a/test/test_snmp_conf_manager.cpp b/test/test_snmp_conf_manager.cpp
index bcf89e7..de89272 100644
--- a/test/test_snmp_conf_manager.cpp
+++ b/test/test_snmp_conf_manager.cpp
@@ -21,12 +21,16 @@
   public:
     sdbusplus::bus::bus bus;
     ConfManager manager;
+    // confDir could have been created locally in the
+    // TestSNMPConfManager but somehow that is leading
+    // to segmentation fault while running the unit test.
+    // TODO: https://github.com/openbmc/phosphor-snmp/issues/5
     std::string confDir;
     TestSNMPConfManager() :
         bus(sdbusplus::bus::new_default()), manager(bus, managerObjPath)
     {
         char tmp[] = "/tmp/snmpManager.XXXXXX";
-        std::string confDir = mkdtemp(tmp);
+        confDir = mkdtemp(tmp);
         manager.dbusPersistentLocation = confDir;
     }
 
diff --git a/test/test_snmp_serialize.cpp b/test/test_snmp_serialize.cpp
index 1b0928e..627045b 100644
--- a/test/test_snmp_serialize.cpp
+++ b/test/test_snmp_serialize.cpp
@@ -4,7 +4,7 @@
 
 #include <netinet/in.h>
 
-#include <experimental/filesystem>
+#include <filesystem>
 #include <fstream>
 
 #include <gtest/gtest.h>
@@ -17,7 +17,7 @@
 {
 
 constexpr auto clientObjPath = "/xyz/openbmc_test/snmp/client";
-namespace fs = std::experimental::filesystem;
+namespace fs = std::filesystem;
 
 class TestSerialize : public testing::Test
 {
