diff --git a/.jenkins.d/00-deps.sh b/.jenkins.d/00-deps.sh
index bac6927..3f3235a 100755
--- a/.jenkins.d/00-deps.sh
+++ b/.jenkins.d/00-deps.sh
@@ -7,7 +7,6 @@
     libboost-chrono-dev
     libboost-date-time-dev
     libboost-dev
-    libboost-filesystem-dev
     libboost-iostreams-dev
     libboost-log-dev
     libboost-program-options-dev
diff --git a/.waf-tools/default-compiler-flags.py b/.waf-tools/default-compiler-flags.py
index 9899d05..090e65d 100644
--- a/.waf-tools/default-compiler-flags.py
+++ b/.waf-tools/default-compiler-flags.py
@@ -136,7 +136,7 @@
         return {
             'CXXFLAGS': [],
             'LINKFLAGS': [],
-            'DEFINES': ['BOOST_ASIO_NO_DEPRECATED', 'BOOST_FILESYSTEM_NO_DEPRECATED'],
+            'DEFINES': ['BOOST_ASIO_NO_DEPRECATED'],
         }
 
     def getOptimizedFlags(self, conf):
diff --git a/src/conf-file-processor.cpp b/src/conf-file-processor.cpp
index af0ad52..29f22cf 100644
--- a/src/conf-file-processor.cpp
+++ b/src/conf-file-processor.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -29,16 +29,16 @@
 #include <ndn-cxx/util/io.hpp>
 
 #include <boost/algorithm/string.hpp>
-#include <boost/filesystem.hpp>
 #include <boost/property_tree/info_parser.hpp>
 
+#include <filesystem>
 #include <fstream>
 #include <iostream>
 
-namespace bf = boost::filesystem;
-
 namespace nlsr {
 
+namespace fs = std::filesystem;
+
 template <class T>
 class ConfigurationVariable
 {
@@ -330,14 +330,14 @@
     return false;
   }
 
+  // state-dir
   try {
-    std::string stateDir = section.get<std::string>("state-dir");
-    if (bf::exists(stateDir)) {
-      if (bf::is_directory(stateDir)) {
+    fs::path stateDir(section.get<std::string>("state-dir"));
+    if (fs::exists(stateDir)) {
+      if (fs::is_directory(stateDir)) {
         // copying nlsr.conf file to a user-defined directory for possible modification
-        std::string conFileDynamic = (bf::path(stateDir) / "nlsr.conf").string();
-
-        if (m_confFileName == conFileDynamic) {
+        auto conFileDynamic = stateDir / "nlsr.conf";
+        if (m_confFileName == conFileDynamic.string()) {
           std::cerr << "Please use nlsr.conf stored at another location "
                     << "or change the state-dir in the configuration." << std::endl;
           std::cerr << "The file at " << conFileDynamic <<
@@ -347,45 +347,39 @@
           return false;
         }
 
-        m_confParam.setConfFileNameDynamic(conFileDynamic);
+        m_confParam.setConfFileNameDynamic(conFileDynamic.string());
         try {
-          bf::copy_file(m_confFileName, conFileDynamic,
-#if BOOST_VERSION >= 107400
-                        bf::copy_options::overwrite_existing
-#else
-                        bf::copy_option::overwrite_if_exists
-#endif
-                        );
+          fs::copy_file(m_confFileName, conFileDynamic, fs::copy_options::overwrite_existing);
         }
-        catch (const bf::filesystem_error& e) {
-          std::cerr << "Error copying conf file to the state directory: " << e.what() << std::endl;
+        catch (const fs::filesystem_error& e) {
+          std::cerr << "Error copying conf file to state-dir: " << e.what() << std::endl;
           return false;
         }
 
-        std::string testFileName = (bf::path(stateDir) / "test.seq").string();
-        std::ofstream testOutFile(testFileName);
-        if (testOutFile) {
-          m_confParam.setStateFileDir(stateDir);
+        auto testFilePath = stateDir / "test.seq";
+        std::ofstream testFile(testFilePath);
+        if (testFile) {
+          m_confParam.setStateFileDir(stateDir.string());
         }
         else {
-          std::cerr << "NLSR does not have read/write permission on the state directory" << std::endl;
+          std::cerr << "NLSR does not have read/write permission on state-dir" << std::endl;
           return false;
         }
-        testOutFile.close();
-        remove(testFileName.c_str());
+        testFile.close();
+        fs::remove(testFilePath);
       }
       else {
-        std::cerr << "Provided path '" << stateDir << "' is not a directory" << std::endl;
+        std::cerr << "Provided state-dir " << stateDir << " is not a directory" << std::endl;
         return false;
       }
     }
     else {
-      std::cerr << "Provided state directory '" << stateDir << "' does not exist" << std::endl;
+      std::cerr << "Provided state-dir " << stateDir << " does not exist" << std::endl;
       return false;
     }
   }
   catch (const std::exception& ex) {
-    std::cerr << "You must configure state directory" << std::endl;
+    std::cerr << "You must configure state-dir" << std::endl;
     std::cerr << ex.what() << std::endl;
     return false;
   }
@@ -654,20 +648,19 @@
         return false;
       }
 
-      std::string file = it->second.data();
-      bf::path certfilePath = absolute(file, bf::path(m_confFileName).parent_path());
-      std::ifstream ifs(certfilePath.string());
+      fs::path certPath = fs::canonical(fs::path(m_confFileName).parent_path() / it->second.data());
+      std::ifstream ifs(certPath);
 
       ndn::security::Certificate idCert;
       try {
         idCert = ndn::io::loadTlv<ndn::security::Certificate>(ifs);
       }
       catch (const std::exception& e) {
-        std::cerr << "Error: Cannot load cert-to-publish '" << file << "': " << e.what() << std::endl;
+        std::cerr << "Error: Cannot load cert-to-publish " << certPath << ": " << e.what() << std::endl;
         return false;
       }
 
-      m_confParam.addCertPath(certfilePath.string());
+      m_confParam.addCertPath(certPath.string());
       m_confParam.loadCertToValidator(idCert);
     }
   }
diff --git a/tests/key-chain-fixture.cpp b/tests/key-chain-fixture.cpp
index f29153f..bae6ca7 100644
--- a/tests/key-chain-fixture.cpp
+++ b/tests/key-chain-fixture.cpp
@@ -27,7 +27,8 @@
 
 #include <ndn-cxx/util/io.hpp>
 
-#include <boost/filesystem/operations.hpp>
+#include <filesystem>
+#include <system_error>
 
 namespace nlsr::tests {
 
@@ -40,9 +41,9 @@
 
 KeyChainFixture::~KeyChainFixture()
 {
-  boost::system::error_code ec;
+  std::error_code ec;
   for (const auto& certFile : m_certFiles) {
-    boost::filesystem::remove(certFile, ec); // ignore error
+    std::filesystem::remove(certFile, ec); // ignore error
   }
 }
 
diff --git a/tests/security/test-certificate-store.cpp b/tests/security/test-certificate-store.cpp
index 484959e..b00744f 100644
--- a/tests/security/test-certificate-store.cpp
+++ b/tests/security/test-certificate-store.cpp
@@ -26,11 +26,11 @@
 #include "tests/io-key-chain-fixture.hpp"
 #include "tests/test-common.hpp"
 
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/path.hpp>
 #include <boost/lexical_cast.hpp>
 #include <boost/property_tree/info_parser.hpp>
 
+#include <filesystem>
+
 namespace nlsr::tests {
 
 class CertificateStoreFixture : public IoKeyChainFixture
@@ -50,7 +50,7 @@
     , nlsr(face, m_keyChain, conf)
     , lsdb(nlsr.getLsdb())
     , certStore(face, conf, lsdb)
-    , ROOT_CERT_PATH(boost::filesystem::current_path() / "root.cert")
+    , ROOT_CERT_PATH(std::filesystem::current_path() / "root.cert")
   {
     rootId = m_keyChain.createIdentity(rootIdName);
     siteIdentity = addSubCertificate(siteIdentityName, rootId);
@@ -112,7 +112,7 @@
   ndn::security::Certificate certificate;
   ndn::Name certificateKey;
   security::CertificateStore certStore;
-  const boost::filesystem::path ROOT_CERT_PATH;
+  const std::filesystem::path ROOT_CERT_PATH;
 };
 
 BOOST_FIXTURE_TEST_SUITE(TestCertificateStore, CertificateStoreFixture)
diff --git a/tests/test-lsa-rule.cpp b/tests/test-lsa-rule.cpp
index 87f915d..ddd5969 100644
--- a/tests/test-lsa-rule.cpp
+++ b/tests/test-lsa-rule.cpp
@@ -25,12 +25,12 @@
 #include "tests/io-key-chain-fixture.hpp"
 #include "tests/test-common.hpp"
 
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/path.hpp>
 #include <boost/lexical_cast.hpp>
 #include <boost/property_tree/info_parser.hpp>
 #include <boost/property_tree/ptree.hpp>
 
+#include <filesystem>
+
 namespace nlsr::tests {
 
 using namespace ndn;
@@ -48,7 +48,7 @@
     , confProcessor(confParam, SyncProtocol::PSYNC, HYPERBOLIC_STATE_OFF,
                     "/ndn/", "/edu/test-site", "/%C1.Router/router1")
     , lsdb(face, m_keyChain, confParam)
-    , ROOT_CERT_PATH(boost::filesystem::current_path() / std::string("root.cert"))
+    , ROOT_CERT_PATH(std::filesystem::current_path() / "root.cert")
   {
     rootId = m_keyChain.createIdentity(rootIdName);
     siteIdentity = addSubCertificate(siteIdentityName, rootId);
@@ -92,7 +92,7 @@
   DummyConfFileProcessor confProcessor;
   Lsdb lsdb;
 
-  const boost::filesystem::path ROOT_CERT_PATH;
+  const std::filesystem::path ROOT_CERT_PATH;
 };
 
 BOOST_FIXTURE_TEST_SUITE(TestLsaDataValidation, LsaRuleFixture)
diff --git a/tests/test-sequencing-manager.cpp b/tests/test-sequencing-manager.cpp
index dd098c0..9941d1d 100644
--- a/tests/test-sequencing-manager.cpp
+++ b/tests/test-sequencing-manager.cpp
@@ -23,8 +23,9 @@
 
 #include "tests/boost-test.hpp"
 
-#include <boost/filesystem/operations.hpp>
+#include <filesystem>
 #include <fstream>
+#include <system_error>
 
 namespace nlsr::tests {
 
@@ -33,22 +34,17 @@
 class SequencingManagerFixture
 {
 public:
-  SequencingManagerFixture()
-    : m_seqManager("/tmp", HYPERBOLIC_STATE_OFF)
-  {
-  }
-
   ~SequencingManagerFixture()
   {
-    boost::filesystem::remove(seqFile);
+    std::error_code ec;
+    std::filesystem::remove(m_seqFile, ec); // ignore error
   }
 
   void
   writeToFile(const std::string& testSeq)
   {
-    std::ofstream outputFile(seqFile, std::ofstream::trunc);
+    std::ofstream outputFile(m_seqFile, std::ofstream::trunc);
     outputFile << testSeq;
-    outputFile.close();
   }
 
   void
@@ -66,8 +62,10 @@
   }
 
 public:
-  std::string seqFile = "/tmp/nlsrSeqNo.txt";
-  SequencingManager m_seqManager;
+  SequencingManager m_seqManager{"/tmp", HYPERBOLIC_STATE_OFF};
+
+private:
+  std::filesystem::path m_seqFile{"/tmp/nlsrSeqNo.txt"};
 };
 
 BOOST_FIXTURE_TEST_SUITE(TestSequencingManager, SequencingManagerFixture)
diff --git a/tests/update/test-prefix-update-processor.cpp b/tests/update/test-prefix-update-processor.cpp
index 493d73d..229e2d3 100644
--- a/tests/update/test-prefix-update-processor.cpp
+++ b/tests/update/test-prefix-update-processor.cpp
@@ -29,12 +29,12 @@
 #include <ndn-cxx/security/interest-signer.hpp>
 #include <ndn-cxx/security/signing-helpers.hpp>
 
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/path.hpp>
 #include <boost/lexical_cast.hpp>
 #include <boost/property_tree/info_parser.hpp>
 #include <boost/property_tree/ptree.hpp>
 
+#include <filesystem>
+
 namespace nlsr::tests {
 
 using namespace ndn;
@@ -50,7 +50,7 @@
     , confProcessor(conf)
     , nlsr(face, m_keyChain, conf)
     , namePrefixList(conf.getNamePrefixList())
-    , SITE_CERT_PATH(boost::filesystem::current_path() / std::string("site.cert"))
+    , SITE_CERT_PATH(std::filesystem::current_path() / "site.cert")
   {
     // Site cert
     siteIdentity = m_keyChain.createIdentity(siteIdentityName);
@@ -139,7 +139,7 @@
   Nlsr nlsr;
   NamePrefixList& namePrefixList;
 
-  const boost::filesystem::path SITE_CERT_PATH;
+  const std::filesystem::path SITE_CERT_PATH;
 };
 
 BOOST_FIXTURE_TEST_SUITE(TestPrefixUpdateProcessor, PrefixUpdateFixture)
diff --git a/tests/update/test-save-delete-prefix.cpp b/tests/update/test-save-delete-prefix.cpp
index ef38cef..5c582cd 100644
--- a/tests/update/test-save-delete-prefix.cpp
+++ b/tests/update/test-save-delete-prefix.cpp
@@ -30,10 +30,10 @@
 #include <ndn-cxx/security/interest-signer.hpp>
 #include <ndn-cxx/security/signing-helpers.hpp>
 
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/path.hpp>
 #include <boost/property_tree/info_parser.hpp>
 
+#include <filesystem>
+
 namespace nlsr::tests {
 
 namespace bpt = boost::property_tree;
@@ -49,7 +49,7 @@
     , conf(face, m_keyChain, testConfFile)
     , confProcessor(conf)
     , nlsr(face, m_keyChain, conf)
-    , SITE_CERT_PATH(boost::filesystem::current_path() / std::string("site.cert"))
+    , SITE_CERT_PATH(std::filesystem::current_path() / "site.cert")
     , counter(0)
   {
     std::ifstream source("nlsr.conf", std::ios::binary);
@@ -69,6 +69,7 @@
     std::ifstream inputFile;
     inputFile.open(testConfFile);
     BOOST_REQUIRE(inputFile.is_open());
+
     bpt::ptree pt;
     bpt::read_info(inputFile, pt);
     // Loads section and file name
@@ -164,7 +165,7 @@
   ConfParameter conf;
   DummyConfFileProcessor confProcessor;
   Nlsr nlsr;
-  const boost::filesystem::path SITE_CERT_PATH;
+  const std::filesystem::path SITE_CERT_PATH;
   ndn::Name sessionTime;
   int counter;
 };
diff --git a/wscript b/wscript
index fbadf9f..be9030c 100644
--- a/wscript
+++ b/wscript
@@ -72,7 +72,7 @@
     conf.check_cfg(package='libndn-cxx', args=['libndn-cxx >= 0.9.0', '--cflags', '--libs'],
                    uselib_store='NDN_CXX', pkg_config_path=pkg_config_path)
 
-    conf.check_boost(lib='filesystem', mt=True)
+    conf.check_boost()
     if conf.env.BOOST_VERSION_NUMBER < 107100:
         conf.fatal('The minimum supported version of Boost is 1.71.0.\n'
                    'Please upgrade your distribution or manually install a newer version of Boost.\n'
