diff --git a/utils/ndn-pit-queue.cc b/utils/ndn-pit-queue.cc
index 29551a8..b287308 100644
--- a/utils/ndn-pit-queue.cc
+++ b/utils/ndn-pit-queue.cc
@@ -154,6 +154,21 @@
   tag->RemoveFromAllQueues ();
 }
 
+bool
+PitQueue::IsEmpty () const
+{
+  bool isEmpty = (m_queues.size () == 0);
+
+  for (PerInFaceQueue::const_iterator queue = m_queues.begin ();
+       queue != m_queues.end ();
+       queue ++)
+    {
+      isEmpty &= (queue->second->size () == 0);
+    }
+
+  return isEmpty;
+}
+
 void
 fw::PitQueueTag::InsertQueue (boost::shared_ptr<PitQueue::Queue> queue, PitQueue::Queue::iterator iterator)
 {
diff --git a/utils/ndn-pit-queue.h b/utils/ndn-pit-queue.h
index ff4f0de..aad6820 100644
--- a/utils/ndn-pit-queue.h
+++ b/utils/ndn-pit-queue.h
@@ -37,31 +37,73 @@
 class Face;
 namespace pit { class Entry; }
 
+/**
+ * @ingroup ndn
+ * @brief Queue for PIT entries, interests for which cannot be immediately forwarded
+ */
 class PitQueue
 {
 public:
+  /**
+   * @brief Default constructor
+   */
   PitQueue ();
-  
+
+  /**
+   * @brief Set maximum queue size
+   * @param size per-incoming face maximum queue size
+   *
+   * Each per-incoming-face queue will have this maximum size
+   */
   void
   SetMaxQueueSize (uint32_t size);
 
+  /**
+   * @brief Get current maximum queue size
+   * @returns per-incoming face maximum queue size
+   */
   uint32_t
   GetMaxQueueSize () const;
 
+  /**
+   * @brief Enqueue PIT entry for delayed processing
+   * @param inFace incoming face to which queue PIT entry should enqueued
+   * @param pitEntry smart pointer to PIT entry
+   * return true if successfully enqueued, false if limit is reached or some other reason
+   */
   bool
   Enqueue (Ptr<Face> inFace,
            Ptr<pit::Entry> pitEntry);
 
+  /**
+   * @brief Get next PIT entry
+   * @returns next PIT entry or 0 if no entries available
+   *
+   * This method implement round-robin (in future weighted round-robin) to pick elements from different per-in-face queues
+   */
   Ptr<pit::Entry>
   Pop ();
 
-  // cleanup procedures
+  /**
+   * @brief Remove all references to face from all queues and enqueued PIT entries
+   * @param face smart pointer to face
+   */
   void
   Remove (Ptr<Face> face);
 
-  void
+  /**
+   * @brief Remove all references to PIT entry from queues
+   * @param entry smart pointer to PIT entry
+   */
+  static void
   Remove (Ptr<pit::Entry> entry);
 
+  /**
+   * @brief Check if queue is empty
+   */
+  bool
+  IsEmpty () const;
+  
 public:  
   typedef std::list< Ptr<pit::Entry> > Queue;
   typedef std::map< Ptr<Face>, boost::shared_ptr<Queue> > PerInFaceQueue;
@@ -74,6 +116,10 @@
 
 namespace fw {
 
+/**
+ * @ingroup ndn
+ * @brief Forwarding strategy tag that stores queue-related information in PIT entries
+ */
 class PitQueueTag :
     public Tag
 {
@@ -82,15 +128,30 @@
   typedef std::map< boost::shared_ptr<PitQueue::Queue>, PitQueue::Queue::iterator > MapOfItems;
 
 public:
+  /**
+   * @brief Virtual destructor
+   */
   virtual
   ~PitQueueTag () { };  
 
+  /**
+   * @brief Remember in which queue at which position PIT entry is enqueued
+   * @brief item     smart pointer to Queue
+   * @brief iterator queue's iterator
+   */
   void
   InsertQueue (boost::shared_ptr<PitQueue::Queue> item, PitQueue::Queue::iterator iterator);
-  
+
+  /**
+   * @brief Remove PIT entry from all queues
+   */
   void
   RemoveFromAllQueues ();
 
+  /**
+   * @brief Remove PIT entry from the specified queue
+   * @param queue Queue from which PIT entry should be removed
+   */
   void
   RemoveFromQueue (boost::shared_ptr<PitQueue::Queue> queue);
   
