diff --git a/model/ccnx-l3-protocol.cc b/model/ccnx-l3-protocol.cc
index 72273d5..d5f4438 100644
--- a/model/ccnx-l3-protocol.cc
+++ b/model/ccnx-l3-protocol.cc
@@ -176,22 +176,23 @@
 
   // just to be on a safe side. Do the process in two steps
   std::list<boost::reference_wrapper<const CcnxPitEntry> > entriesToRemoves;
-  BOOST_FOREACH (const CcnxPitEntry &pitEntry, *m_pit)
-    {
-      m_pit->modify (m_pit->iterator_to (pitEntry),
-                     ll::bind (&CcnxPitEntry::RemoveAllReferencesToFace, ll::_1, face));
+  NS_ASSERT_MSG (false, "Need to be repaired");
+  // BOOST_FOREACH (const CcnxPitEntry &pitEntry, *m_pit)
+  //   {
+  //     m_pit->modify (pitEntry,
+  //                    ll::bind (&CcnxPitEntry::RemoveAllReferencesToFace, ll::_1, face));
 
-      // If this face is the only for the associated FIB entry, then FIB entry will be removed soon.
-      // Thus, we have to remove the whole PIT entry
-      if (pitEntry.m_fibEntry->m_faces.size () == 1 &&
-          pitEntry.m_fibEntry->m_faces.begin ()->m_face == face)
-        {
-          entriesToRemoves.push_back (boost::cref (pitEntry));
-        }
-    }
+  //     // If this face is the only for the associated FIB entry, then FIB entry will be removed soon.
+  //     // Thus, we have to remove the whole PIT entry
+  //     if (pitEntry.m_fibEntry->m_faces.size () == 1 &&
+  //         pitEntry.m_fibEntry->m_faces.begin ()->m_face == face)
+  //       {
+  //         entriesToRemoves.push_back (boost::cref (pitEntry));
+  //       }
+  //   }
   BOOST_FOREACH (const CcnxPitEntry &removedEntry, entriesToRemoves)
     {
-      m_pit->erase (m_pit->iterator_to (removedEntry));
+      m_pit->erase (removedEntry);
     }
 
   CcnxFaceList::iterator face_it = find (m_faces.begin(), m_faces.end(), face);
@@ -294,8 +295,8 @@
   NS_LOG_FUNCTION (incomingFace << header << packet);
   m_inNacks (header, incomingFace);
 
-  CcnxPit::iterator pitEntry = m_pit->Lookup (*header);
-  if (pitEntry == m_pit->end ())
+  Ptr<CcnxPitEntry> pitEntry = m_pit->Lookup (*header);
+  if (pitEntry == 0)
     {
       // somebody is doing something bad
       m_dropNacks (header, NON_DUPLICATED, incomingFace);
@@ -381,13 +382,13 @@
 {
   m_inInterests (header, incomingFace);
 
-  CcnxPit::iterator pitEntry = m_pit->Lookup (*header);
-  if (pitEntry == m_pit->end ())
+  Ptr<CcnxPitEntry> pitEntry = m_pit->Lookup (*header);
+  if (pitEntry == 0)
     {
       pitEntry = m_pit->Create (*header);
     }
 
-  if (pitEntry == m_pit->end ())
+  if (pitEntry == 0)
     {
       // if it is still not created, then give up processing
       m_dropInterests (header, PIT_LIMIT, incomingFace);
@@ -533,8 +534,8 @@
                                const Ptr<const Packet> &packet)
 {
   // 1. Lookup PIT entry
-  CcnxPit::iterator pitEntry = m_pit->Lookup (*header);
-  if (pitEntry != m_pit->end ())
+  Ptr<CcnxPitEntry> pitEntry = m_pit->Lookup (*header);
+  if (pitEntry != 0)
     {
       //satisfy all pending incoming Interests
       BOOST_FOREACH (const CcnxPitEntryIncomingFace &incoming, pitEntry->m_incoming)
@@ -579,8 +580,8 @@
   m_inData (header, payload, incomingFace);
   
   // 1. Lookup PIT entry
-  CcnxPit::iterator pitEntry = m_pit->Lookup (*header);
-  if (pitEntry != m_pit->end ())
+  Ptr<CcnxPitEntry> pitEntry = m_pit->Lookup (*header);
+  if (pitEntry != 0)
     {
       // Note that with MultiIndex we need to modify entries indirectly
 
@@ -657,7 +658,7 @@
 }
 
 void
-CcnxL3Protocol::GiveUpInterest (CcnxPit::iterator pitEntry,
+CcnxL3Protocol::GiveUpInterest (Ptr<CcnxPitEntry> pitEntry,
                                 Ptr<CcnxInterestHeader> header)
 {
   NS_LOG_FUNCTION (this);
