diff --git a/model/fw/per-fib-limits.cc b/model/fw/per-fib-limits.cc
index 8190329..43355e3 100644
--- a/model/fw/per-fib-limits.cc
+++ b/model/fw/per-fib-limits.cc
@@ -151,17 +151,20 @@
   NS_LOG_FUNCTION (this << pitEntry->GetPrefix ());
   super::WillEraseTimedOutPendingInterest (pitEntry);
 
-  // Ptr<Packet> pkt = Create<Packet> ();
-  // Ptr<InterestHeader> nackHeader = Create<InterestHeader> (*pitEntry->GetInterest ());
-  // nackHeader->SetNack (99);
-  // pkt->AddHeader (*nackHeader);
+  if (pitEntry->GetOutgoing ().size () == 0)
+    {
+      Ptr<Packet> pkt = Create<Packet> ();
+      Ptr<InterestHeader> nackHeader = Create<InterestHeader> (*pitEntry->GetInterest ());
+      nackHeader->SetNack (99);
+      pkt->AddHeader (*nackHeader);
 
-  // for (pit::Entry::in_container::iterator face = pitEntry->GetIncoming ().begin ();
-  //      face != pitEntry->GetIncoming ().end ();
-  //      face ++)
-  //   {
-  //     face->m_face->Send (pkt->Copy ());
-  //   }
+      for (pit::Entry::in_container::iterator face = pitEntry->GetIncoming ().begin ();
+           face != pitEntry->GetIncoming ().end ();
+           face ++)
+        {
+          face->m_face->Send (pkt->Copy ());
+        }
+    }
   
   PitQueue::Remove (pitEntry);
   
@@ -246,33 +249,32 @@
                                    uint32_t nackCode,
                                    Ptr<pit::Entry> pitEntry)
 {
-  // super::DidReceiveValidNack (inFace, nackCode, pitEntry);
   // NS_LOG_FUNCTION (this << pitEntry->GetPrefix ());
 
-  // Ptr<Packet> pkt = Create<Packet> ();
-  // Ptr<InterestHeader> nackHeader = Create<InterestHeader> (*pitEntry->GetInterest ());
-  // nackHeader->SetNack (99);
-  // pkt->AddHeader (*nackHeader);
+  Ptr<Packet> pkt = Create<Packet> ();
+  Ptr<InterestHeader> nackHeader = Create<InterestHeader> (*pitEntry->GetInterest ());
+  nackHeader->SetNack (99);
+  pkt->AddHeader (*nackHeader);
 
-  // for (pit::Entry::in_container::iterator face = pitEntry->GetIncoming ().begin ();
-  //      face != pitEntry->GetIncoming ().end ();
-  //      face ++)
-  //   {
-  //     face->m_face->Send (pkt->Copy ());
-  //   }
+  for (pit::Entry::in_container::iterator face = pitEntry->GetIncoming ().begin ();
+       face != pitEntry->GetIncoming ().end ();
+       face ++)
+    {
+      face->m_face->Send (pkt->Copy ());
+    }
   
-  // PitQueue::Remove (pitEntry);
+  PitQueue::Remove (pitEntry);
 
-  // for (pit::Entry::out_container::iterator face = pitEntry->GetOutgoing ().begin ();
-  //      face != pitEntry->GetOutgoing ().end ();
-  //      face ++)
-  //   {
-  //     face->m_face->GetLimits ().RemoveOutstanding ();
-  //   }
+  for (pit::Entry::out_container::iterator face = pitEntry->GetOutgoing ().begin ();
+       face != pitEntry->GetOutgoing ().end ();
+       face ++)
+    {
+      face->m_face->GetLimits ().RemoveOutstanding ();
+    }
 
-  // m_pit->MarkErased (pitEntry);
+  m_pit->MarkErased (pitEntry);
   
-  // ProcessFromQueue ();
+  ProcessFromQueue ();
 }
 
 
diff --git a/utils/ndn-pit-queue.cc b/utils/ndn-pit-queue.cc
index d8e810d..34410ba 100644
--- a/utils/ndn-pit-queue.cc
+++ b/utils/ndn-pit-queue.cc
@@ -146,7 +146,7 @@
       shared_ptr<fw::PitQueueTag> tag = (*pitEntry)->GetFwTag<fw::PitQueueTag> ();
       NS_ASSERT (tag != shared_ptr<fw::PitQueueTag> ());
 
-      tag->RemoveFromQueue (queue->second);
+      tag->RemoveFromQueuesExcept (queue->second);
     }
 
   NS_ASSERT_MSG (queue->second->size () == 0, "Queue size should be 0 by now");
@@ -208,5 +208,26 @@
   m_items.erase (item);
 }
 
+void
+fw::PitQueueTag::RemoveFromQueuesExcept (boost::shared_ptr<PitQueue::Queue> queue)
+{
+  for (MapOfItems::iterator item = m_items.begin ();
+       item != m_items.end (); )
+    {
+      if (item->first == queue)
+        {
+          item ++;
+          continue;
+        }
+
+      item->first->erase (item->second);
+
+      MapOfItems::iterator itemToDelete = item;
+      item ++;
+      m_items.erase (itemToDelete);
+    }
+}
+
+
 } // namespace ndn
 } // namespace ns3
diff --git a/utils/ndn-pit-queue.h b/utils/ndn-pit-queue.h
index 993cb83..ebac04a 100644
--- a/utils/ndn-pit-queue.h
+++ b/utils/ndn-pit-queue.h
@@ -154,6 +154,13 @@
    */
   void
   RemoveFromQueue (boost::shared_ptr<PitQueue::Queue> queue);
+
+  /**
+   * @brief Remove reference to PIT from queues except the queue in parameter
+   * @param queue Queue from which PIT entry should not be removed (to preserve iterator)
+   */
+  void
+  RemoveFromQueuesExcept (boost::shared_ptr<PitQueue::Queue> queue);
   
 private:
   MapOfItems m_items;
