diff --git a/tests/publisher/publisher-fixture.hpp b/tests/publisher/publisher-fixture.hpp
index c52f378..9156c7b 100644
--- a/tests/publisher/publisher-fixture.hpp
+++ b/tests/publisher/publisher-fixture.hpp
@@ -140,7 +140,7 @@
 
     std::list<ndn::Name>::const_iterator it = tlvLsa.getNames().begin();
 
-    for (const ndn::Name& name : lsa.getNpl().getNameList()) {
+    for (const ndn::Name& name : lsa.getNpl().getNames()) {
       BOOST_CHECK_EQUAL(*it, name);
       ++it;
     }
diff --git a/tests/test-lsdb.cpp b/tests/test-lsdb.cpp
index abd58d4..2dd6f3e 100644
--- a/tests/test-lsdb.cpp
+++ b/tests/test-lsdb.cpp
@@ -74,10 +74,11 @@
   void
   areNamePrefixListsEqual(NamePrefixList& lhs, NamePrefixList& rhs)
   {
+
     typedef std::list<ndn::Name> NameList;
 
-    NameList& lhsList = lhs.getNameList();
-    NameList& rhsList = rhs.getNameList();
+    NameList lhsList = lhs.getNames();
+    NameList rhsList = rhs.getNames();
 
     BOOST_REQUIRE_EQUAL(lhsList.size(), rhsList.size());
 
@@ -274,7 +275,8 @@
   BOOST_REQUIRE_EQUAL(lsdb.doesLsaExist(otherRouter + "/name", NameLsa::TYPE_STRING), true);
   NamePrefixList& nameList = lsdb.findNameLsa(otherRouter + "/name")->getNpl();
 
-  areNamePrefixListsEqual(nameList, prefixes);
+  BOOST_CHECK_EQUAL(nameList, prefixes);
+  //areNamePrefixListsEqual(nameList, prefixes);
 
   // Add a prefix: name3
   ndn::Name name3("/ndn/name3");
@@ -284,7 +286,7 @@
   lsdb.installNameLsa(addLsa);
 
   // Lsa should include name1, name2, and name3
-  areNamePrefixListsEqual(nameList, prefixes);
+  BOOST_CHECK_EQUAL(nameList, prefixes);
 
   // Remove a prefix: name2
   prefixes.remove(name2);
@@ -293,7 +295,7 @@
   lsdb.installNameLsa(removeLsa);
 
   // Lsa should include name1 and name3
-  areNamePrefixListsEqual(nameList, prefixes);
+  BOOST_CHECK_EQUAL(nameList, prefixes);
 
   // Add and remove a prefix: add name2, remove name3
   prefixes.insert(name2);
@@ -303,7 +305,7 @@
   lsdb.installNameLsa(addAndRemoveLsa);
 
   // Lsa should include name1 and name2
-  areNamePrefixListsEqual(nameList, prefixes);
+  BOOST_CHECK_EQUAL(nameList, prefixes);
 
   // Install a completely new list of prefixes
   ndn::Name name4("/ndn/name4");
@@ -317,7 +319,7 @@
   lsdb.installNameLsa(newLsa);
 
   // Lsa should include name4 and name5
-  areNamePrefixListsEqual(nameList, newPrefixes);
+  BOOST_CHECK_EQUAL(nameList, newPrefixes);
 }
 
 BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/test-name-prefix-list.cpp b/tests/test-name-prefix-list.cpp
index b07517f..eef0c18 100644
--- a/tests/test-name-prefix-list.cpp
+++ b/tests/test-name-prefix-list.cpp
@@ -16,19 +16,19 @@
  *
  * 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/>.
- *
- * \author Ashlesh Gawande <agawande@memphis.edu>
- *
  **/
+
 #include "name-prefix-list.hpp"
 #include <boost/test/unit_test.hpp>
 
 namespace nlsr {
-
 namespace test {
 
 BOOST_AUTO_TEST_SUITE(TestNpl)
 
+/*
+  The NamePrefixList can have names inserted and removed from it.
+ */
 BOOST_AUTO_TEST_CASE(NplSizeAndRemove)
 {
   NamePrefixList npl1;
@@ -46,6 +46,10 @@
   BOOST_CHECK_EQUAL(npl1.getSize(), 1);
 }
 
+/*
+  Two NamePrefixLists will be considered equal if they contain the
+  same names. Sources for names are ignored.
+ */
 BOOST_AUTO_TEST_CASE(OperatorEquals)
 {
   NamePrefixList list1;
@@ -65,6 +69,106 @@
   BOOST_CHECK_EQUAL(list1, list2);
 }
 
+/*
+  The NamePrefixList will provide a container of all the names it has,
+  without the sources for those names.
+ */
+BOOST_AUTO_TEST_CASE(GetNames)
+{
+  NamePrefixList list;
+  const ndn::Name name1{"/ndn/test/prefix1"};
+  const ndn::Name name2{"/ndn/test/prefix2"};
+  const ndn::Name name3{"/ndn/test/prefix3"};
+  list.insert(name1);
+  list.insert(name2);
+  list.insert(name3);
+
+  std::vector<ndn::Name> referenceNames{name1, name2, name3};
+
+  auto names = list.getNames();
+  BOOST_REQUIRE_EQUAL(names.size(), 3);
+  // Verify that all of the names are in the list.
+  for (const auto& name : names) {
+    bool didMatch = false;
+    for (const auto& referenceName : referenceNames) {
+      didMatch = didMatch || (name == referenceName);
+    }
+    BOOST_CHECK(didMatch);
+  }
+}
+
+/*
+  The NamePrefixList will count the number of sources for a given
+  name, with zero for a non-existent name.
+ */
+BOOST_AUTO_TEST_CASE(countSources)
+{
+  NamePrefixList list;
+  const ndn::Name name1{"/ndn/test/prefix1"};
+  const ndn::Name invalidName{"/not/a/prefix"};
+  list.insert(name1, "nlsr.conf");
+  list.insert(name1, "readvertise");
+  list.insert(name1, "prefix-update");
+
+  BOOST_CHECK_EQUAL(list.countSources(name1), 3);
+  BOOST_CHECK_EQUAL(list.countSources(invalidName), 0);
+}
+
+/*
+  The NamePrefixList will return a container with all the sources for
+  a given name, with an empty container for a non-existent name.
+ */
+BOOST_AUTO_TEST_CASE(getSources)
+{
+  NamePrefixList list;
+  const ndn::Name name1{"/ndn/test/prefix1"};
+  const ndn::Name invalidName{"/not/a/prefix"};
+
+  list.insert(name1, "nlsr.conf");
+  list.insert(name1, "readvertise");
+  list.insert(name1, "prefix-update");
+  std::vector<std::string> referenceSources{"nlsr.conf", "readvertise", "prefix-update"};
+
+  const std::vector<std::string> sources = list.getSources(name1);
+  BOOST_REQUIRE_EQUAL(list.countSources(name1), 3);
+  for (const auto& source : sources) {
+    bool didMatch = false;
+    for (const auto& referenceSource : referenceSources) {
+      didMatch = didMatch || (source == referenceSource);
+    }
+    BOOST_CHECK(didMatch);
+  }
+
+  std::vector<std::string> noSources = list.getSources(invalidName);
+  BOOST_REQUIRE_EQUAL(noSources.size(), 0);
+}
+
+/*
+  The NamePrefixList will not delete a name as long as it at least one
+  source.
+ */
+BOOST_AUTO_TEST_CASE(RemainingSourcesAfterRemoval)
+{
+  NamePrefixList list;
+  const ndn::Name name1{"/ndn/test/prefix1"};
+  list.insert(name1, "nlsr.conf");
+  list.insert(name1, "readvertise");
+  list.insert(name1, "prefix-update");
+
+  list.remove(name1, "prefix-update");
+
+  std::vector<std::string> referenceSources{"nlsr.conf", "readvertise", "prefix-update"};
+  const std::vector<std::string> sources = list.getSources(name1);
+  BOOST_REQUIRE_EQUAL(list.countSources(name1), 2);
+  for (const auto& source : sources) {
+    bool didMatch = false;
+    for (const auto& referenceSource : referenceSources) {
+      didMatch = didMatch || (source == referenceSource);
+    }
+    BOOST_CHECK(didMatch);
+  }
+}
+
 BOOST_AUTO_TEST_SUITE_END()
 
 } // namespace test
diff --git a/tests/update/test-nfd-rib-command-processor.cpp b/tests/update/test-nfd-rib-command-processor.cpp
index bb4db42..20856fe 100644
--- a/tests/update/test-nfd-rib-command-processor.cpp
+++ b/tests/update/test-nfd-rib-command-processor.cpp
@@ -150,10 +150,10 @@
   face.receive(*command);
   this->advanceClocks(ndn::time::milliseconds(10));
 
-  BOOST_CHECK_EQUAL(namePrefixes.getNameList().size(), 1);
-  auto itr = std::find(namePrefixes.getNameList().begin(), namePrefixes.getNameList().end(),
-                       prefixName);
-  if (itr == namePrefixes.getNameList().end()) {
+  BOOST_CHECK_EQUAL(namePrefixes.getNames().size(), 1);
+  std::list<ndn::Name> names = namePrefixes.getNames();
+  auto itr = std::find(names.begin(), names.end(), prefixName);
+  if (itr == namePrefixes.getNames().end()) {
     BOOST_FAIL("Prefix was not inserted!");
   }
   BOOST_CHECK_EQUAL((*itr), prefixName);
@@ -167,7 +167,7 @@
   ndn::Name prefixName("/test/prefixA");
   ndn::nfd::ControlParameters parameters;
 
-  namePrefixes.getNameList().push_back(prefixName);
+  namePrefixes.insert(prefixName);
 
   shared_ptr<ndn::Interest> command = makeInterest(name.append(parameters.setName(prefixName)
     .wireEncode()), 0);
@@ -175,7 +175,7 @@
   face.receive(ndn::Interest(name));
   this->advanceClocks(ndn::time::milliseconds(10));
 
-  BOOST_CHECK_EQUAL(namePrefixes.getNameList().size(), 0);
+  BOOST_CHECK_EQUAL(namePrefixes.getNames().size(), 0);
   BOOST_CHECK(wasRoutingUpdatePublished());
   BOOST_CHECK(nameLsaSeqNoBeforeInterest < nlsr.getLsdb().getSequencingManager().getNameLsaSeq());
 }
@@ -192,7 +192,7 @@
   face.receive(ndn::Interest(name));
   this->advanceClocks(ndn::time::milliseconds(10));
 
-  BOOST_CHECK_EQUAL(namePrefixes.getNameList().size(), 0);
+  BOOST_CHECK_EQUAL(namePrefixes.getNames().size(), 0);
 
   // Cannot use routingUpdatePublish test now since in
   // initialize nlsr calls buildOwnNameLsa which publishes the routing update
diff --git a/tests/update/test-prefix-update-processor.cpp b/tests/update/test-prefix-update-processor.cpp
index 19deaf6..32cacb5 100644
--- a/tests/update/test-prefix-update-processor.cpp
+++ b/tests/update/test-prefix-update-processor.cpp
@@ -253,7 +253,7 @@
   NamePrefixList& namePrefixList = nlsr.getNamePrefixList();
 
   BOOST_REQUIRE_EQUAL(namePrefixList.getSize(), 1);
-  BOOST_CHECK_EQUAL(namePrefixList.getNameList().front(), parameters.getName());
+  BOOST_CHECK_EQUAL(namePrefixList.getNames().front(), parameters.getName());
 
   BOOST_CHECK(wasRoutingUpdatePublished());
   BOOST_CHECK(nameLsaSeqNoBeforeInterest < nlsr.getLsdb().getSequencingManager().getNameLsaSeq());
