diff --git a/daemon/table/measurements.cpp b/daemon/table/measurements.cpp
index 3830c10..2ed0f65 100644
--- a/daemon/table/measurements.cpp
+++ b/daemon/table/measurements.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2016,  Regents of the University of California,
+/*
+ * Copyright (c) 2014-2017,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -40,6 +40,8 @@
 Entry&
 Measurements::get(name_tree::Entry& nte)
 {
+  BOOST_ASSERT(nte.getName().size() <= NameTree::getMaxDepth());
+
   Entry* entry = nte.getMeasurementsEntry();
   if (entry != nullptr) {
     return *entry;
@@ -59,21 +61,21 @@
 Entry&
 Measurements::get(const Name& name)
 {
-  name_tree::Entry& nte = m_nameTree.lookup(name);
+  name_tree::Entry& nte = m_nameTree.lookup(name, true);
   return this->get(nte);
 }
 
 Entry&
 Measurements::get(const fib::Entry& fibEntry)
 {
-  name_tree::Entry& nte = m_nameTree.lookup(fibEntry);
+  name_tree::Entry& nte = m_nameTree.lookup(fibEntry.getPrefix(), true);
   return this->get(nte);
 }
 
 Entry&
 Measurements::get(const pit::Entry& pitEntry)
 {
-  name_tree::Entry& nte = m_nameTree.lookup(pitEntry);
+  name_tree::Entry& nte = m_nameTree.lookup(pitEntry.getName(), true);
   return this->get(nte);
 }
 
@@ -108,13 +110,13 @@
 Entry*
 Measurements::findLongestPrefixMatch(const Name& name, const EntryPredicate& pred) const
 {
-  return this->findLongestPrefixMatchImpl(name, pred);
+  return this->findLongestPrefixMatchImpl(name.getPrefix(NameTree::getMaxDepth()), pred);
 }
 
 Entry*
 Measurements::findLongestPrefixMatch(const pit::Entry& pitEntry, const EntryPredicate& pred) const
 {
-  return this->findLongestPrefixMatchImpl(pitEntry, pred);
+  return this->findLongestPrefixMatch(pitEntry.getName(), pred);
 }
 
 Entry*
diff --git a/tests/daemon/table/measurements.t.cpp b/tests/daemon/table/measurements.t.cpp
index 539c409..a7e315d 100644
--- a/tests/daemon/table/measurements.t.cpp
+++ b/tests/daemon/table/measurements.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2016,  Regents of the University of California,
+/*
+ * Copyright (c) 2014-2017,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -69,6 +69,24 @@
   BOOST_CHECK_EQUAL(&entry0, entry0c);
 }
 
+BOOST_AUTO_TEST_CASE(GetLongName)
+{
+  Name n;
+  while (n.size() < NameTree::getMaxDepth() - 1) {
+    n.append("A");
+  }
+  Entry& entry1 = measurements.get(n);
+  BOOST_CHECK_EQUAL(entry1.getName().size(), NameTree::getMaxDepth() - 1);
+
+  n.append("B");
+  Entry& entry2 = measurements.get(n);
+  BOOST_CHECK_EQUAL(entry2.getName().size(), NameTree::getMaxDepth());
+
+  n.append("C");
+  Entry& entry3 = measurements.get(n);
+  BOOST_CHECK_EQUAL(entry3.getName().size(), NameTree::getMaxDepth());
+}
+
 BOOST_AUTO_TEST_CASE(GetWithFibEntry)
 {
   Fib fib(nameTree);
