diff --git a/daemon/fw/algorithm.cpp b/daemon/fw/algorithm.cpp
index cdc432b..d82f607 100644
--- a/daemon/fw/algorithm.cpp
+++ b/daemon/fw/algorithm.cpp
@@ -25,6 +25,7 @@
 
 #include "algorithm.hpp"
 #include "scope-prefix.hpp"
+#include "face/face.hpp"
 
 namespace nfd::fw {
 
diff --git a/daemon/fw/asf-measurements.hpp b/daemon/fw/asf-measurements.hpp
index 10c081c..75a3c2b 100644
--- a/daemon/fw/asf-measurements.hpp
+++ b/daemon/fw/asf-measurements.hpp
@@ -26,6 +26,7 @@
 #ifndef NFD_DAEMON_FW_ASF_MEASUREMENTS_HPP
 #define NFD_DAEMON_FW_ASF_MEASUREMENTS_HPP
 
+#include "face/face-common.hpp"
 #include "fw/strategy-info.hpp"
 #include "table/measurements-accessor.hpp"
 
diff --git a/daemon/fw/asf-probing-module.cpp b/daemon/fw/asf-probing-module.cpp
index d186d22..a465a5b 100644
--- a/daemon/fw/asf-probing-module.cpp
+++ b/daemon/fw/asf-probing-module.cpp
@@ -26,6 +26,7 @@
 #include "asf-probing-module.hpp"
 #include "algorithm.hpp"
 #include "common/global.hpp"
+#include "face/face.hpp"
 
 #include <ndn-cxx/util/random.hpp>
 
diff --git a/daemon/table/fib-entry.cpp b/daemon/table/fib-entry.cpp
index cb97ea2..3ca8def 100644
--- a/daemon/table/fib-entry.cpp
+++ b/daemon/table/fib-entry.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  Regents of the University of California,
+ * Copyright (c) 2014-2024,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -33,16 +33,14 @@
 }
 
 NextHopList::iterator
-Entry::findNextHop(const Face& face)
+Entry::findNextHop(const Face& face) noexcept
 {
   return std::find_if(m_nextHops.begin(), m_nextHops.end(),
-                      [&face] (const NextHop& nexthop) {
-                        return &nexthop.getFace() == &face;
-                      });
+                      [&face] (const NextHop& nexthop) { return &nexthop.getFace() == &face; });
 }
 
 bool
-Entry::hasNextHop(const Face& face) const
+Entry::hasNextHop(const Face& face) const noexcept
 {
   return const_cast<Entry*>(this)->findNextHop(face) != m_nextHops.end();
 }
@@ -50,7 +48,7 @@
 std::pair<NextHopList::iterator, bool>
 Entry::addOrUpdateNextHop(Face& face, uint64_t cost)
 {
-  auto it = this->findNextHop(face);
+  auto it = findNextHop(face);
   bool isNew = false;
   if (it == m_nextHops.end()) {
     m_nextHops.emplace_back(face);
@@ -67,7 +65,7 @@
 bool
 Entry::removeNextHop(const Face& face)
 {
-  auto it = this->findNextHop(face);
+  auto it = findNextHop(face);
   if (it != m_nextHops.end()) {
     m_nextHops.erase(it);
     return true;
diff --git a/daemon/table/fib-entry.hpp b/daemon/table/fib-entry.hpp
index 03a2c2e..fe49ecc 100644
--- a/daemon/table/fib-entry.hpp
+++ b/daemon/table/fib-entry.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  Regents of the University of California,
+ * Copyright (c) 2014-2024,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -26,23 +26,60 @@
 #ifndef NFD_DAEMON_TABLE_FIB_ENTRY_HPP
 #define NFD_DAEMON_TABLE_FIB_ENTRY_HPP
 
-#include "fib-nexthop.hpp"
+#include "core/common.hpp"
 
-namespace nfd::name_tree {
+namespace nfd {
+
+namespace face {
+class Face;
+} // namespace face
+using face::Face;
+
+namespace name_tree {
 class Entry;
-} // namespace nfd::name_tree
+} // namespace name_tree
 
-namespace nfd::fib {
+namespace fib {
 
 class Fib;
 
-/** \class nfd::fib::NextHopList
- *  \brief Represents a collection of nexthops.
- *
- *  This type has the following member functions:
- *  - `iterator<NextHop> begin()`
- *  - `iterator<NextHop> end()`
- *  - `size_t size()`
+/**
+ * \brief Represents a nexthop record in a FIB entry.
+ */
+class NextHop
+{
+public:
+  explicit
+  NextHop(Face& face) noexcept
+    : m_face(&face)
+  {
+  }
+
+  Face&
+  getFace() const noexcept
+  {
+    return *m_face;
+  }
+
+  uint64_t
+  getCost() const noexcept
+  {
+    return m_cost;
+  }
+
+  void
+  setCost(uint64_t cost) noexcept
+  {
+    m_cost = cost;
+  }
+
+private:
+  Face* m_face; // pointer instead of reference so that NextHop is movable
+  uint64_t m_cost = 0;
+};
+
+/**
+ * \brief A collection of nexthops in a FIB entry.
  */
 using NextHopList = std::vector<NextHop>;
 
@@ -57,29 +94,31 @@
   Entry(const Name& prefix);
 
   const Name&
-  getPrefix() const
+  getPrefix() const noexcept
   {
     return m_prefix;
   }
 
   const NextHopList&
-  getNextHops() const
+  getNextHops() const noexcept
   {
     return m_nextHops;
   }
 
-  /** \return whether this Entry has any NextHop record
+  /**
+   * \brief Returns whether this Entry has any NextHop records.
    */
   bool
-  hasNextHops() const
+  hasNextHops() const noexcept
   {
     return !m_nextHops.empty();
   }
 
-  /** \return whether there is a NextHop record for \p face
+  /**
+   * \brief Returns whether there is a NextHop record for \p face.
    */
   bool
-  hasNextHop(const Face& face) const;
+  hasNextHop(const Face& face) const noexcept;
 
 private:
   /** \brief Adds a NextHop record to the entry.
@@ -102,7 +141,7 @@
   /** \note This method is non-const because mutable iterators are needed by callers.
    */
   NextHopList::iterator
-  findNextHop(const Face& face);
+  findNextHop(const Face& face) noexcept;
 
   /** \brief Sorts the nexthop list.
    */
@@ -119,6 +158,7 @@
   friend Fib;
 };
 
-} // namespace nfd::fib
+} // namespace fib
+} // namespace nfd
 
 #endif // NFD_DAEMON_TABLE_FIB_ENTRY_HPP
diff --git a/daemon/table/fib-nexthop.hpp b/daemon/table/fib-nexthop.hpp
deleted file mode 100644
index b696cea..0000000
--- a/daemon/table/fib-nexthop.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2014-2022,  Regents of the University of California,
- *                           Arizona Board of Regents,
- *                           Colorado State University,
- *                           University Pierre & Marie Curie, Sorbonne University,
- *                           Washington University in St. Louis,
- *                           Beijing Institute of Technology,
- *                           The University of Memphis.
- *
- * This file is part of NFD (Named Data Networking Forwarding Daemon).
- * See AUTHORS.md for complete list of NFD authors and contributors.
- *
- * NFD is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE.  See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NFD_DAEMON_TABLE_FIB_NEXTHOP_HPP
-#define NFD_DAEMON_TABLE_FIB_NEXTHOP_HPP
-
-#include "core/common.hpp"
-#include "face/face.hpp"
-
-namespace nfd::fib {
-
-/** \brief Represents a nexthop record in a FIB entry
- */
-class NextHop
-{
-public:
-  explicit
-  NextHop(Face& face)
-    : m_face(&face)
-  {
-  }
-
-  Face&
-  getFace() const
-  {
-    return *m_face;
-  }
-
-  uint64_t
-  getCost() const
-  {
-    return m_cost;
-  }
-
-  void
-  setCost(uint64_t cost)
-  {
-    m_cost = cost;
-  }
-
-private:
-  Face* m_face; // pointer instead of reference so that NextHop is movable
-  uint64_t m_cost = 0;
-};
-
-} // namespace nfd::fib
-
-#endif // NFD_DAEMON_TABLE_FIB_NEXTHOP_HPP
diff --git a/daemon/table/pit-entry.cpp b/daemon/table/pit-entry.cpp
index cfbbc82..53d71bd 100644
--- a/daemon/table/pit-entry.cpp
+++ b/daemon/table/pit-entry.cpp
@@ -78,7 +78,7 @@
 }
 
 InRecordCollection::iterator
-Entry::findInRecord(const Face& face)
+Entry::findInRecord(const Face& face) noexcept
 {
   return std::find_if(m_inRecords.begin(), m_inRecords.end(),
                       [&face] (const InRecord& inRecord) { return &inRecord.getFace() == &face; });
@@ -89,8 +89,7 @@
 {
   BOOST_ASSERT(this->canMatch(interest));
 
-  auto it = std::find_if(m_inRecords.begin(), m_inRecords.end(),
-                         [&face] (const InRecord& inRecord) { return &inRecord.getFace() == &face; });
+  auto it = findInRecord(face);
   if (it == m_inRecords.end()) {
     m_inRecords.emplace_front(face);
     it = m_inRecords.begin();
@@ -101,7 +100,7 @@
 }
 
 OutRecordCollection::iterator
-Entry::findOutRecord(const Face& face)
+Entry::findOutRecord(const Face& face) noexcept
 {
   return std::find_if(m_outRecords.begin(), m_outRecords.end(),
                       [&face] (const OutRecord& outRecord) { return &outRecord.getFace() == &face; });
@@ -112,8 +111,7 @@
 {
   BOOST_ASSERT(this->canMatch(interest));
 
-  auto it = std::find_if(m_outRecords.begin(), m_outRecords.end(),
-                         [&face] (const OutRecord& outRecord) { return &outRecord.getFace() == &face; });
+  auto it = findOutRecord(face);
   if (it == m_outRecords.end()) {
     m_outRecords.emplace_front(face);
     it = m_outRecords.begin();
diff --git a/daemon/table/pit-entry.hpp b/daemon/table/pit-entry.hpp
index a314ae6..321f5ea 100644
--- a/daemon/table/pit-entry.hpp
+++ b/daemon/table/pit-entry.hpp
@@ -275,7 +275,7 @@
    * \return an iterator to the in-record, or in_end() if it does not exist
    */
   InRecordCollection::iterator
-  findInRecord(const Face& face);
+  findInRecord(const Face& face) noexcept;
 
   /**
    * \brief Insert or update an in-record.
@@ -354,7 +354,7 @@
    * \return an iterator to the out-record, or out_end() if it does not exist
    */
   OutRecordCollection::iterator
-  findOutRecord(const Face& face);
+  findOutRecord(const Face& face) noexcept;
 
   /**
    * \brief Insert or update an out-record.
diff --git a/tests/daemon/mgmt/fib-manager.t.cpp b/tests/daemon/mgmt/fib-manager.t.cpp
index 5da697b..3ba725d 100644
--- a/tests/daemon/mgmt/fib-manager.t.cpp
+++ b/tests/daemon/mgmt/fib-manager.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  Regents of the University of California,
+ * Copyright (c) 2014-2024,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -24,7 +24,7 @@
  */
 
 #include "mgmt/fib-manager.hpp"
-#include "table/fib-nexthop.hpp"
+#include "table/fib-entry.hpp"
 
 #include "manager-common-fixture.hpp"
 #include "tests/daemon/face/dummy-face.hpp"
