diff --git a/daemon/fw/forwarder.cpp b/daemon/fw/forwarder.cpp
index 89ce166..4fc9c38 100644
--- a/daemon/fw/forwarder.cpp
+++ b/daemon/fw/forwarder.cpp
@@ -312,7 +312,7 @@
 
   // PIT delete
   this->cancelUnsatisfyAndStragglerTimer(*pitEntry);
-  m_pit.erase(pitEntry);
+  m_pit.erase(pitEntry.get());
 }
 
 void
diff --git a/daemon/table/name-tree-entry.cpp b/daemon/table/name-tree-entry.cpp
index 5721e22..8d33a89 100644
--- a/daemon/table/name-tree-entry.cpp
+++ b/daemon/table/name-tree-entry.cpp
@@ -95,17 +95,18 @@
 }
 
 void
-Entry::erasePitEntry(shared_ptr<pit::Entry> pitEntry)
+Entry::erasePitEntry(pit::Entry* pitEntry)
 {
   BOOST_ASSERT(pitEntry != nullptr);
   BOOST_ASSERT(pitEntry->m_nameTreeEntry == this);
 
-  auto it = std::find(m_pitEntries.begin(), m_pitEntries.end(), pitEntry);
+  auto it = std::find_if(m_pitEntries.begin(), m_pitEntries.end(),
+    [pitEntry] (const shared_ptr<pit::Entry>& pitEntry2) { return pitEntry2.get() == pitEntry; });
   BOOST_ASSERT(it != m_pitEntries.end());
 
-  *it = m_pitEntries.back();
+  pitEntry->m_nameTreeEntry = nullptr; // must be done before pitEntry is deallocated
+  *it = m_pitEntries.back(); // may deallocate pitEntry
   m_pitEntries.pop_back();
-  pitEntry->m_nameTreeEntry = nullptr;
 }
 
 void
diff --git a/daemon/table/name-tree-entry.hpp b/daemon/table/name-tree-entry.hpp
index d481a5e..b36aae9 100644
--- a/daemon/table/name-tree-entry.hpp
+++ b/daemon/table/name-tree-entry.hpp
@@ -132,7 +132,7 @@
   insertPitEntry(shared_ptr<pit::Entry> pitEntry);
 
   void
-  erasePitEntry(shared_ptr<pit::Entry> pitEntry);
+  erasePitEntry(pit::Entry* pitEntry);
 
   measurements::Entry*
   getMeasurementsEntry() const
diff --git a/daemon/table/pit.cpp b/daemon/table/pit.cpp
index bf17e96..91bc5a8 100644
--- a/daemon/table/pit.cpp
+++ b/daemon/table/pit.cpp
@@ -100,7 +100,7 @@
 }
 
 void
-Pit::erase(shared_ptr<Entry> entry, bool canDeleteNte)
+Pit::erase(Entry* entry, bool canDeleteNte)
 {
   name_tree::Entry* nte = m_nameTree.getEntry(*entry);
   BOOST_ASSERT(nte != nullptr);
diff --git a/daemon/table/pit.hpp b/daemon/table/pit.hpp
index 1df3380..8e6c9f1 100644
--- a/daemon/table/pit.hpp
+++ b/daemon/table/pit.hpp
@@ -84,10 +84,10 @@
   DataMatchResult
   findAllDataMatches(const Data& data) const;
 
-  /** \brief erases a PIT Entry
+  /** \brief deletes an entry
    */
   void
-  erase(shared_ptr<Entry> entry)
+  erase(Entry* entry)
   {
     this->erase(entry, true);
   }
@@ -118,10 +118,8 @@
   }
 
 private:
-  /** \brief erases a PIT Entry
-   */
   void
-  erase(shared_ptr<Entry> pitEntry, bool canDeleteNte);
+  erase(Entry* pitEntry, bool canDeleteNte);
 
   /** \brief finds or inserts a PIT entry for Interest
    *  \param interest the Interest; must be created with make_shared if allowInsert
diff --git a/tests/daemon/table/name-tree.t.cpp b/tests/daemon/table/name-tree.t.cpp
index a839152..127056d 100644
--- a/tests/daemon/table/name-tree.t.cpp
+++ b/tests/daemon/table/name-tree.t.cpp
@@ -249,11 +249,15 @@
   npe.insertPitEntry(pit2);
   BOOST_CHECK_EQUAL(npe.getPitEntries().size(), 2);
 
-  npe.erasePitEntry(pit1);
+  pit::Entry* pit1ptr = pit1.get();
+  weak_ptr<pit::Entry> pit1weak(pit1);
+  pit1.reset();
+  BOOST_CHECK_EQUAL(pit1weak.use_count(), 1); // npe is the sole owner of pit1
+  npe.erasePitEntry(pit1ptr);
   BOOST_REQUIRE_EQUAL(npe.getPitEntries().size(), 1);
   BOOST_CHECK_EQUAL(npe.getPitEntries().front()->getInterest(), *interest2);
 
-  npe.erasePitEntry(pit2);
+  npe.erasePitEntry(pit2.get());
   BOOST_CHECK_EQUAL(npe.hasPitEntries(), false);
   BOOST_CHECK_EQUAL(npe.getPitEntries().size(), 0);
   BOOST_CHECK_EQUAL(npe.hasTableEntries(), false);
diff --git a/tests/daemon/table/pit.t.cpp b/tests/daemon/table/pit.t.cpp
index 6135502..e761ef8 100644
--- a/tests/daemon/table/pit.t.cpp
+++ b/tests/daemon/table/pit.t.cpp
@@ -344,7 +344,7 @@
   BOOST_CHECK_EQUAL(pit.size(), 1);
   BOOST_CHECK(pit.find(*interest) != nullptr);
 
-  pit.erase(insertResult.first);
+  pit.erase(insertResult.first.get());
   BOOST_CHECK_EQUAL(pit.size(), 0);
   BOOST_CHECK(pit.find(*interest) == nullptr);
 
@@ -362,7 +362,7 @@
 
   shared_ptr<Interest> interest = makeInterest("/37xWVvQ2K");
   shared_ptr<Entry> entry = pit.insert(*interest).first;
-  pit.erase(entry);
+  pit.erase(entry.get());
   BOOST_CHECK_EQUAL(nameTree.size(), nNameTreeEntriesBefore);
 }
 
@@ -385,7 +385,7 @@
   shared_ptr<pit::Entry> pitEntry = pit.find(*interest);
   BOOST_REQUIRE(pitEntry != nullptr);
 
-  pit.erase(pitEntry);
+  pit.erase(pitEntry.get());
   BOOST_CHECK_EQUAL(pit.size(), 0);
   BOOST_CHECK(pit.find(*interest) == nullptr);
 
diff --git a/tests/other/pit-fib-benchmark.cpp b/tests/other/pit-fib-benchmark.cpp
index c10d7f5..e6c907f 100644
--- a/tests/other/pit-fib-benchmark.cpp
+++ b/tests/other/pit-fib-benchmark.cpp
@@ -128,7 +128,7 @@
     }
     if (i >= gap3 + gap4) {
       // delete PIT entry
-      m_pit.erase(pitEntries[i - gap3 - gap4]);
+      m_pit.erase(pitEntries[i - gap3 - gap4].get());
     }
   }
 
