diff --git a/src/lsdb.cpp b/src/lsdb.cpp
index eae4a43..b8cda8e 100644
--- a/src/lsdb.cpp
+++ b/src/lsdb.cpp
@@ -28,7 +28,6 @@
 #include "utility/name-helper.hpp"
 
 #include <ndn-cxx/security/signing-helpers.hpp>
-#include <ndn-cxx/util/segment-fetcher.hpp>
 
 namespace nlsr {
 
@@ -85,10 +84,17 @@
 {
 }
 
+Lsdb::~Lsdb()
+{
+  for (const auto& sp : m_fetchers) {
+    sp->stop();
+  }
+}
+
 void
 Lsdb::onFetchLsaError(uint32_t errorCode,
                       const std::string& msg,
-                      ndn::Name& interestName,
+                      const ndn::Name& interestName,
                       uint32_t retransmitNo,
                       const ndn::time::steady_clock::TimePoint& deadline,
                       ndn::Name lsaName,
@@ -118,7 +124,7 @@
 }
 
 void
-Lsdb::afterFetchLsa(const ndn::ConstBufferPtr& bufferPtr, ndn::Name& interestName)
+Lsdb::afterFetchLsa(const ndn::ConstBufferPtr& bufferPtr, const ndn::Name& interestName)
 {
   std::shared_ptr<ndn::Data> data = std::make_shared<ndn::Data>(ndn::Name(interestName));
   data->setContent(bufferPtr);
@@ -999,15 +1005,26 @@
   }
 
   ndn::Interest interest(interestName);
-  interest.setInterestLifetime(m_nlsr.getConfParameter().getLsaInterestLifetime());
+  ndn::util::SegmentFetcher::Options options;
+  options.interestLifetime = m_nlsr.getConfParameter().getLsaInterestLifetime();
 
   NLSR_LOG_DEBUG("Fetching Data for LSA: " << interestName << " Seq number: " << seqNo);
   auto fetcher = ndn::util::SegmentFetcher::start(m_nlsr.getNlsrFace(),
-                                                  interest, m_nlsr.getValidator());
+                                                  interest, m_nlsr.getValidator(), options);
 
-  fetcher->onComplete.connect(std::bind(&Lsdb::afterFetchLsa, this, _1, interestName));
-  fetcher->onError.connect(std::bind(&Lsdb::onFetchLsaError, this, _1, _2, interestName,
-                                     timeoutCount, deadline, lsaName, seqNo));
+  auto it = m_fetchers.insert(fetcher).first;
+
+  fetcher->onComplete.connect([this, interestName, it] (ndn::ConstBufferPtr bufferPtr) {
+                                afterFetchLsa(bufferPtr, interestName);
+                                m_fetchers.erase(it);
+                              });
+
+  fetcher->onError.connect([this, interestName, timeoutCount, deadline, lsaName, seqNo, &fetcher, it]
+                           (uint32_t errorCode, const std::string& msg) {
+                             onFetchLsaError(errorCode, msg, interestName,
+                                             timeoutCount, deadline, lsaName, seqNo);
+                             m_fetchers.erase(it);
+                           });
 
   m_lsaStorage.connectToFetcher(*fetcher);
   m_nlsr.connectToFetcher(*fetcher);
diff --git a/src/lsdb.hpp b/src/lsdb.hpp
index f3eb899..2ebb952 100644
--- a/src/lsdb.hpp
+++ b/src/lsdb.hpp
@@ -33,6 +33,8 @@
 #include <ndn-cxx/security/key-chain.hpp>
 #include <ndn-cxx/util/signal.hpp>
 #include <ndn-cxx/util/time.hpp>
+#include <ndn-cxx/util/segment-fetcher.hpp>
+
 #include <utility>
 #include <boost/cstdint.hpp>
 
@@ -45,6 +47,8 @@
 public:
   Lsdb(Nlsr& nlsr, ndn::Scheduler& scheduler);
 
+  ~Lsdb();
+
   SyncLogicHandler&
   getSyncLogicHandler()
   {
@@ -356,7 +360,7 @@
   void
   onFetchLsaError(uint32_t errorCode,
                   const std::string& msg,
-                  ndn::Name& interestName,
+                  const ndn::Name& interestName,
                   uint32_t retransmitNo,
                   const ndn::time::steady_clock::TimePoint& deadline,
                   ndn::Name lsaName,
@@ -369,7 +373,7 @@
             /<network>/NLSR/LSA/<site>/%C1.Router/<router>/<lsa-type>/<seqNo>
    */
   void
-  afterFetchLsa(const ndn::ConstBufferPtr& data, ndn::Name& interestName);
+  afterFetchLsa(const ndn::ConstBufferPtr& data, const ndn::Name& interestName);
 
 private:
   ndn::time::system_clock::TimePoint
@@ -411,6 +415,8 @@
   SequencingManager m_sequencingManager;
 
   ndn::util::signal::ScopedConnection m_onNewLsaConnection;
+
+  std::set<std::shared_ptr<ndn::util::SegmentFetcher>> m_fetchers;
 };
 
 } // namespace nlsr
diff --git a/src/route/fib.hpp b/src/route/fib.hpp
index 27e5967..32c656d 100644
--- a/src/route/fib.hpp
+++ b/src/route/fib.hpp
@@ -63,9 +63,6 @@
   {
   }
 
-  VIRTUAL_WITH_TESTS
-  ~Fib() = default;
-
   /*! \brief Completely remove a name prefix from the FIB.
    *
    * If a name prefix is found to no longer be reachable from this
@@ -74,7 +71,7 @@
    *
    * \sa nlsr::NamePrefixTable::removeEntry
    */
-  VIRTUAL_WITH_TESTS void
+  void
   remove(const ndn::Name& name);
 
   /*! \brief Set the nexthop list of a name.
@@ -88,7 +85,7 @@
    * \param name The name prefix that the next-hops apply to
    * \param allHops A complete list of next-hops to associate with name.
    */
-  VIRTUAL_WITH_TESTS void
+  void
   update(const ndn::Name& name, const NexthopList& allHops);
 
   /*! \brief Remove all entries from the FIB.
