diff --git a/src/main.cpp b/src/main.cpp
index dfe54a7..ca0e8ec 100644
--- a/src/main.cpp
+++ b/src/main.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-2025,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -88,7 +88,6 @@
     face.processEvents();
   }
   catch (const std::exception& e) {
-    nlsr.getFib().clean();
     std::cerr << "FATAL: " << boost::diagnostic_information(e) << std::endl;
     return 1;
   }
diff --git a/src/nlsr.cpp b/src/nlsr.cpp
index 144f1d3..4d52fa0 100644
--- a/src/nlsr.cpp
+++ b/src/nlsr.cpp
@@ -78,6 +78,7 @@
       m_lsdb)
   , m_statsCollector(m_lsdb, m_helloProtocol)
   , m_faceMonitor(m_face)
+  , m_terminateSignals(face.getIoContext(), SIGINT, SIGTERM)
 {
   NLSR_LOG_DEBUG("Initializing Nlsr");
 
@@ -107,6 +108,10 @@
       neighbor.setLinkCost(0);
     }
   }
+
+  m_terminateSignals.async_wait([this] (auto&&... args) {
+    terminate(std::forward<decltype(args)>(args)...);
+  });
 }
 
 void
@@ -365,4 +370,13 @@
     });
 }
 
+void
+Nlsr::terminate(const boost::system::error_code& error, int signalNo)
+{
+  if (error)
+    return;
+  NLSR_LOG_INFO("Caught signal " << signalNo << " (" << ::strsignal(signalNo) << "), exiting...");
+  m_face.getIoContext().stop();
+}
+
 } // namespace nlsr
diff --git a/src/nlsr.hpp b/src/nlsr.hpp
index f375eca..891eda9 100644
--- a/src/nlsr.hpp
+++ b/src/nlsr.hpp
@@ -48,6 +48,7 @@
 #include <ndn-cxx/security/key-chain.hpp>
 #include <ndn-cxx/util/scheduler.hpp>
 
+#include <boost/asio/signal_set.hpp>
 namespace nlsr {
 
 class Nlsr
@@ -157,6 +158,9 @@
   void
   enableIncomingFaceIdIndication();
 
+  void
+  terminate(const boost::system::error_code& error, int signalNo);
+
 public:
   static inline const ndn::Name LOCALHOST_PREFIX{"/localhost/nlsr"};
 
@@ -196,6 +200,7 @@
 
 private:
   ndn::nfd::FaceMonitor m_faceMonitor;
+  boost::asio::signal_set m_terminateSignals;
 };
 
 } // namespace nlsr
diff --git a/src/route/fib.cpp b/src/route/fib.cpp
index 7f3f076..76affde 100644
--- a/src/route/fib.cpp
+++ b/src/route/fib.cpp
@@ -153,17 +153,6 @@
   }
 }
 
-void
-Fib::clean()
-{
-  NLSR_LOG_DEBUG("Clean called");
-  for (const auto& it : m_table) {
-    for (const auto& hop : it.second.nexthopSet) {
-      unregisterPrefix(it.second.name, hop.getConnectingFaceUri());
-    }
-  }
-}
-
 unsigned int
 Fib::getNumberOfFacesForName(const NexthopList& nextHopList)
 {
diff --git a/src/route/fib.hpp b/src/route/fib.hpp
index 8c53125..7be0001 100644
--- a/src/route/fib.hpp
+++ b/src/route/fib.hpp
@@ -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-2025,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -90,17 +90,6 @@
   void
   update(const ndn::Name& name, const NexthopList& allHops);
 
-  /*! \brief Remove all entries from the FIB.
-   *
-   * This method is called before terminating NLSR to minimize the
-   * time NFD spends routing on now-invalid information. This is not
-   * strictly necessary, because eventually those prefix registrations
-   * will expire, but cleaning up after ourselves improves
-   * performance.
-   */
-  void
-  clean();
-
   void
   setEntryRefreshTime(int32_t fert)
   {
diff --git a/src/sequencing-manager.cpp b/src/sequencing-manager.cpp
index ae0c8b5..6046b10 100644
--- a/src/sequencing-manager.cpp
+++ b/src/sequencing-manager.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2020,  The University of Memphis,
+/*
+ * Copyright (c) 2014-2025,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -17,7 +17,7 @@
  *
  * You should have received a copy of the GNU General Public License along with
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- **/
+ */
 
 #include "sequencing-manager.hpp"
 #include "logger.hpp"
@@ -43,13 +43,13 @@
 SequencingManager::writeSeqNoToFile() const
 {
   writeLog();
-  std::ofstream outputFile(m_seqFileNameWithPath.c_str());
-  std::ostringstream os;
-  os << "NameLsaSeq " << std::to_string(m_nameLsaSeq) << "\n"
-     << "AdjLsaSeq "  << std::to_string(m_adjLsaSeq)  << "\n"
-     << "CorLsaSeq "  << std::to_string(m_corLsaSeq);
-  outputFile << os.str();
+  std::string tempPath = m_seqFileNameWithPath + ".tmp";
+  std::ofstream outputFile(tempPath.c_str());
+  outputFile << "NameLsaSeq " << m_nameLsaSeq << "\n"
+             << "AdjLsaSeq "  << m_adjLsaSeq  << "\n"
+             << "CorLsaSeq "  << m_corLsaSeq;
   outputFile.close();
+  std::filesystem::rename(tempPath, m_seqFileNameWithPath);
 }
 
 void
