diff --git a/model/ccnx-pit.h b/model/ccnx-pit.h
index b6e4388..0597863 100644
--- a/model/ccnx-pit.h
+++ b/model/ccnx-pit.h
@@ -63,12 +63,17 @@
 
   /**
    * \brief Find corresponding PIT entry for the given content name
+   *
+   * Not that this call should be repeated enough times until it return 0.
+   * This way all records with shorter or equal prefix as in content object will be found
+   * and satisfied.
+   *
    * \param prefix Prefix for which to lookup the entry
-   * \returns iterator to Pit entry. If record not found,
-   *          return end() iterator
+   * \returns smart pointer to PIT entry. If record not found,
+   *          returns 0
    */
   virtual Ptr<CcnxPitEntry>
-  Lookup (const CcnxContentObjectHeader &header) const = 0;
+  Lookup (const CcnxContentObjectHeader &header) = 0;
 
   /**
    * \brief Find a PIT entry for the given content interest
@@ -80,14 +85,6 @@
   Lookup (const CcnxInterestHeader &header) = 0;
 
   /**
-   * @brief Check if the Interest carries an existent nonce.
-   * If not, nonce will be added to the list of known nonces
-   * @returns true if interest is duplicate (carries an existent nonce), false otherwise
-   */
-  virtual bool
-  CheckIfDuplicate (Ptr<CcnxPitEntry> entry, const CcnxInterestHeader &header) = 0;
-  
-  /**
    * @brief Creates a PIT entry for the given interest
    * @param header parsed interest header
    * @returns iterator to Pit entry. If record could not be created (e.g., limit reached),
@@ -96,7 +93,7 @@
    * Note. This call assumes that the entry does not exist (i.e., there was a Lookup call before)
    */
   virtual Ptr<CcnxPitEntry>
-  Create (const CcnxInterestHeader &header) = 0;
+  Create (Ptr<const CcnxInterestHeader> header) = 0;
   
   /**
    * @brief Mark PIT entry deleted
@@ -116,19 +113,37 @@
   virtual void
   Print (std::ostream &os) const = 0;
 
-  template<class A,class M>
-  void
-  modify (A, M)
-  {
-    ;
-  }
+  // template<class A,class M>
+  // void
+  // modify (A, M)
+  // {
+  //   ;
+  // }
 
-  template<class A>
-  void
-  erase (A)
-  {
-    ;
-  }
+  // template<class A>
+  // void
+  // erase (A)
+  // {
+  //   ;
+  // }
+
+  /**
+   * @brief Return first element of FIB (no order guaranteed)
+   */
+  virtual Ptr<CcnxPitEntry>
+  Begin () = 0;
+
+  /**
+   * @brief Return item next after last (no order guaranteed)
+   */
+  virtual Ptr<CcnxPitEntry>
+  End () = 0;
+
+  /**
+   * @brief Advance the iterator
+   */
+  virtual Ptr<CcnxPitEntry>
+  Next (Ptr<CcnxPitEntry>) = 0;
 
   ////////////////////////////////////////////////////////////////////////////
   ////////////////////////////////////////////////////////////////////////////
@@ -137,7 +152,7 @@
   /**
    * @brief Static call to cheat python bindings
    */
-  static inline Ptr<CcnxFib>
+  static inline Ptr<CcnxPit>
   GetCcnxPit (Ptr<Object> node);
 
   ////////////////////////////////////////////////////////////////////////////
@@ -179,7 +194,6 @@
 
   // configuration variables. Check implementation of GetTypeId for more details
   Time    m_PitEntryPruningTimout;
-  Time    m_PitEntryDefaultLifetime;
 };
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -192,6 +206,13 @@
   return os;
 }
 
+inline Ptr<CcnxPit>
+CcnxPit::GetCcnxPit (Ptr<Object> node)
+{
+  return node->GetObject<CcnxPit> ();
+}
+
+
 } // namespace ns3
 
 #endif	/* CCNX_PIT_H */
