diff --git a/model/pit/ndn-pit-entry.h b/model/pit/ndn-pit-entry.h
index d95d338..1dc4264 100644
--- a/model/pit/ndn-pit-entry.h
+++ b/model/pit/ndn-pit-entry.h
@@ -313,13 +313,13 @@
        item ++)
     {
       boost::shared_ptr< T > retPtr = boost::dynamic_pointer_cast<T> (*item);
-      if (retPtr != 0)
+      if (retPtr != boost::shared_ptr< T > ())
         {
           return retPtr;
         }
     }
 
-  return 0;
+  return boost::shared_ptr< T > ();
 }
 
 // /**
@@ -352,7 +352,7 @@
        item ++)
     {
       boost::shared_ptr< T > retPtr = boost::dynamic_pointer_cast< T > (*item);
-      if (retPtr != 0)
+      if (retPtr != boost::shared_ptr< T > ())
         {
           m_fwTags.erase (item);
           return;
diff --git a/test/generic-tests.cc b/test/generic-tests.cc
index 2e751f7..652a7f8 100644
--- a/test/generic-tests.cc
+++ b/test/generic-tests.cc
@@ -28,8 +28,11 @@
 #include "../apps/ndn-producer.h"
 
 #include <boost/lexical_cast.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/make_shared.hpp>
 
 using namespace std;
+using namespace boost;
 
 NS_LOG_COMPONENT_DEFINE ("ndn.test.Generic");
 
@@ -83,6 +86,20 @@
     {
       cout << "* " << entry->GetPrefix () << endl;
     }
+
+
+  cerr << "===========\n\n";
+
+  struct Bla {
+  };
+
+  shared_ptr<Bla> p1 = make_shared <Bla> ();
+  shared_ptr<Bla> p2 = make_shared <Bla> ();
+
+  if (p1 < p2)
+    {
+      cerr << "They are equal\n";
+    }
 }
 
 } // namespace ndn
diff --git a/utils/ndn-pit-queue.cc b/utils/ndn-pit-queue.cc
index 4d6c064..29551a8 100644
--- a/utils/ndn-pit-queue.cc
+++ b/utils/ndn-pit-queue.cc
@@ -26,6 +26,7 @@
 #include "ns3/assert.h"
 
 using namespace std;
+using namespace boost;
 
 namespace ns3 {
 namespace ndn {
@@ -65,10 +66,19 @@
   if (queue->second->size () >= m_maxQueueSize)
       return false;
 
-  queue->second->push_back (pitEntry);
+  Queue::iterator itemIterator = queue->second->insert (queue->second->end (), pitEntry);
+  
+  shared_ptr<fw::PitQueueTag> tag = pitEntry->GetFwTag<fw::PitQueueTag> ();
+  if (tag == shared_ptr<fw::PitQueueTag> ())
+    {
+      tag = make_shared<fw::PitQueueTag> ();
+      pitEntry->AddFwTag (tag);
+    }
+  tag->InsertQueue (queue->second, itemIterator);
   return true;
 }
 
+
 Ptr<pit::Entry>
 PitQueue::Pop ()
 {
@@ -93,8 +103,17 @@
   NS_ASSERT_MSG (queue->second->size () != 0, "Logic error");
 
   Ptr<pit::Entry> entry = *queue->second->begin ();
-  queue->second->pop_front ();
+  shared_ptr<fw::PitQueueTag> tag = entry->GetFwTag<fw::PitQueueTag> ();
+  NS_ASSERT (tag != shared_ptr<fw::PitQueueTag> ());
 
+#ifdef NS3_LOG_ENABLE
+  size_t queueSize = queue->second->size ();
+#endif
+  tag->RemoveFromQueue (queue->second);
+#ifdef NS3_LOG_ENABLE
+  NS_ASSERT_MSG (queue->second->size () == queueSize-1, "Queue size should be reduced by one");
+#endif
+    
   m_lastQueue = queue;
   return entry;
 }
@@ -107,14 +126,63 @@
       m_lastQueue++;
     }
 
-  m_queues.erase (face);
+  PerInFaceQueue::iterator queue = m_queues.find (face);
+  if (queue == m_queues.end ())
+    return;
+
+  for (Queue::iterator pitEntry = queue->second->begin ();
+       pitEntry != queue->second->end ();
+       pitEntry ++)
+    {
+      shared_ptr<fw::PitQueueTag> tag = (*pitEntry)->GetFwTag<fw::PitQueueTag> ();
+      NS_ASSERT (tag != shared_ptr<fw::PitQueueTag> ());
+
+      tag->RemoveFromQueue (queue->second);
+    }
+
+  NS_ASSERT_MSG (queue->second->size () == 0, "Queue size should be 0 by now");
+  m_queues.erase (queue);
 }
 
 void
 PitQueue::Remove (Ptr<pit::Entry> entry)
 {
+  shared_ptr<fw::PitQueueTag> tag = entry->GetFwTag<fw::PitQueueTag> ();
+  if (tag == shared_ptr<fw::PitQueueTag> ())
+    return;
+
+  tag->RemoveFromAllQueues ();
 }
 
+void
+fw::PitQueueTag::InsertQueue (boost::shared_ptr<PitQueue::Queue> queue, PitQueue::Queue::iterator iterator)
+{
+  pair<MapOfItems::iterator, bool> item = m_items.insert (make_pair (queue, iterator));
+  NS_ASSERT (item.second == true);
+}
+
+void
+fw::PitQueueTag::RemoveFromAllQueues ()
+{
+  for (MapOfItems::iterator item = m_items.begin ();
+       item != m_items.end ();
+       item ++)
+    {
+      item->first->erase (item->second);
+    }
+  m_items.clear ();
+}
+
+void
+fw::PitQueueTag::RemoveFromQueue (boost::shared_ptr<PitQueue::Queue> queue)
+{
+  MapOfItems::iterator item = m_items.find (queue);
+  if (item == m_items.end ())
+    return;
+
+  item->first->erase (item->second);
+  m_items.erase (item);
+}
 
 } // namespace ndn
 } // namespace ns3
diff --git a/utils/ndn-pit-queue.h b/utils/ndn-pit-queue.h
index 34987db..ff4f0de 100644
--- a/utils/ndn-pit-queue.h
+++ b/utils/ndn-pit-queue.h
@@ -67,7 +67,6 @@
   typedef std::map< Ptr<Face>, boost::shared_ptr<Queue> > PerInFaceQueue;
 
 private:
-  
   uint32_t m_maxQueueSize;
   PerInFaceQueue::iterator m_lastQueue; // last queue from which interest was taken
   PerInFaceQueue m_queues;
@@ -79,10 +78,24 @@
     public Tag
 {
 public:
-  virtual
-  ~PitQueueTag () { };
+  // map based on addresses, should be good enough
+  typedef std::map< boost::shared_ptr<PitQueue::Queue>, PitQueue::Queue::iterator > MapOfItems;
 
-  typedef boost::tuple< boost::shared_ptr<PitQueue::Queue>, PitQueue::Queue::iterator > Item;
+public:
+  virtual
+  ~PitQueueTag () { };  
+
+  void
+  InsertQueue (boost::shared_ptr<PitQueue::Queue> item, PitQueue::Queue::iterator iterator);
+  
+  void
+  RemoveFromAllQueues ();
+
+  void
+  RemoveFromQueue (boost::shared_ptr<PitQueue::Queue> queue);
+  
+private:
+  MapOfItems m_items;
 };
 
 } // namespace fw
