diff --git a/model/ccnx-pit.h b/model/ccnx-pit.h
index 826f49f..be9c80f 100644
--- a/model/ccnx-pit.h
+++ b/model/ccnx-pit.h
@@ -124,32 +124,50 @@
   /**
    * \brief Find corresponding PIT entry for the given content name
    * \param prefix Prefix for which to lookup the entry
-   * \returns const reference to Pit entry. If record not found,
-   *          CcnxPitEntryNotFound exception will be thrown
+   * \returns iterator to Pit entry. If record not found,
+   *          return end() iterator
    */
-  CcnxPitEntryContainer::type::iterator
+  iterator
   Lookup (const CcnxContentObjectHeader &header) const;
 
   /**
-   * \brief Find corresponding PIT entry for the given content name
-   * \param prefix Prefix for which to lookup the entry
-   * \returns a tuple:
-   * get<0>: `const CcnxPitEntry&`: a valid PIT entry (if record does not exist, it will be created)
-   * get<1>: `bool`: true if a new entry was created
-   * get<2>: `bool`: true if a PIT entry exists and Nonce that present in header has been already seen
-   * 
+   * \brief Find a PIT entry for the given content interest
+   * \param header parsed interest header
+   * \returns iterator to Pit entry. If record not found,
+   *          return end() iterator
    */
-  boost::tuple<const CcnxPitEntry&, bool, bool>
+  iterator
   Lookup (const CcnxInterestHeader &header);
 
   /**
-   * @brief Get pruning timeout for PIT entries (configuration parameter)
+   * @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
    */
-  Time GetPitEntryPruningTimeout () const
-  {
-    return m_PitEntryPruningTimout;
-  }
+  bool
+  CheckIfDuplicate (iterator entry, const CcnxInterestHeader &header);
   
+  /**
+   * @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),
+   *          return end() iterator
+   *
+   * Note. This call assumes that the entry does not exist (i.e., there was a Lookup call before)
+   */
+  iterator
+  Create (const CcnxInterestHeader &header);
+  
+  /**
+   * @brief Mark PIT entry deleted
+   * @param entry PIT entry
+   *
+   * Effectively, this method removes all incoming/outgoing faces and set
+   * lifetime +m_PitEntryDefaultLifetime from Now ()
+   */
+  void
+  MarkErased (iterator entry);
+    
 protected:
   // inherited from Object class                                                                                                                                                        
   virtual void NotifyNewAggregate (); ///< @brief Even when object is aggregated to another Object
@@ -195,11 +213,6 @@
 
 std::ostream& operator<< (std::ostream& os, const CcnxPit &pit);
 
-/**
- * @brief Class for exception when PIT entry is not found
- */
-class CcnxPitEntryNotFound {};
-
 } // namespace ns3
 
 #endif	/* CCNX_PIT_H */
