diff --git a/model/ccnx-pit-entry.h b/model/ccnx-pit-entry.h
index 2e38657..5d85c94 100644
--- a/model/ccnx-pit-entry.h
+++ b/model/ccnx-pit-entry.h
@@ -41,6 +41,7 @@
 
 class CcnxFace;
 class CcnxNameComponents;
+class CcnxPit;
 
 /// @cond include_hidden
 namespace __ccnx_private
@@ -80,6 +81,8 @@
 /**
  * \ingroup ccnx
  * \brief structure for PIT entry
+ *
+ * All set-methods are virtual, in case index rearrangement is necessary in the derived classes
  */
 struct CcnxPitEntry : SimpleRefCount<CcnxPitEntry>
 {
@@ -98,7 +101,12 @@
    * \param offsetTime Relative time to the current moment, representing PIT entry lifetime
    * \param fibEntry A FIB entry associated with the PIT entry
    */
-  CcnxPitEntry (Ptr<const CcnxInterestHeader> header, Ptr<CcnxFibEntry> fibEntry);
+  CcnxPitEntry (CcnxPit &container, Ptr<const CcnxInterestHeader> header, Ptr<CcnxFibEntry> fibEntry);
+
+  /**
+   * @brief Virtual destructor
+   */
+  virtual ~CcnxPitEntry () {}
   
   /**
    * @brief Update lifetime of PIT entry
@@ -108,7 +116,7 @@
    *
    * @param offsetTime Relative time to the current moment, representing PIT entry lifetime
    */
-  void
+  virtual void
   UpdateLifetime (const Time &offsetTime);
 
   /**
@@ -132,7 +140,7 @@
    *
    * @param expireTime absolute simulation time of when the record should expire
    */
-  void
+  virtual void
   SetExpireTime (const Time &expireTime);
   
   /**
@@ -151,7 +159,7 @@
    *
    * All nonces are stored for the lifetime of the PIT entry
    */
-  void
+  virtual void
   AddSeenNonce (uint32_t nonce)
   { m_seenNonces.insert (nonce); }
 
@@ -161,19 +169,19 @@
    * @param face Face to add to the list of incoming faces
    * @returns iterator to the added entry
    */
-  in_iterator
+  virtual in_iterator
   AddIncoming (Ptr<CcnxFace> face);
 
   /**
    * @brief Remove incoming entry for face `face`
    */
-  void
+  virtual void
   RemoveIncoming (Ptr<CcnxFace> face);
 
   /**
    * @brief Clear all incoming faces either after all of them were satisfied or NACKed
    */
-  void
+  virtual void
   ClearIncoming ()
   { m_incoming.clear (); }
 
@@ -183,13 +191,13 @@
    * @param face Face to add to the list of outgoing faces
    * @returns iterator to the added entry
    */
-  out_iterator
+  virtual out_iterator
   AddOutgoing (Ptr<CcnxFace> face);
 
   /**
    * @brief Clear all incoming faces either after all of them were satisfied or NACKed
    */
-  void
+  virtual void
   ClearOutgoing ()
   { m_outgoing.clear (); }  
   
@@ -199,13 +207,13 @@
    * This method should be called before face is completely removed from the stack.
    * Face is removed from the lists of incoming and outgoing faces
    */
-  void
+  virtual void
   RemoveAllReferencesToFace (Ptr<CcnxFace> face);
 
   /**
    * @brief Flag outgoing face as hopeless
    */
-  void
+  virtual void
   SetWaitingInVain (out_iterator face);
   
   /**
@@ -224,17 +232,27 @@
   /**
    * @brief Increase maximum limit of allowed retransmission per outgoing face
    */
-  void
+  virtual void
   IncreaseAllowedRetxCount ();
-  
+
+  Ptr<CcnxFibEntry>
+  GetFibEntry () { return m_fibEntry; };
+
+  const in_container &
+  GetIncoming () const { return m_incoming; }
+
+  const out_container &
+  GetOutgoing () const { return m_outgoing; }
+
+  uint32_t
+  GetMaxRetxCount () const { return m_maxRetxCount; }
+
 private:
   friend std::ostream& operator<< (std::ostream& os, const CcnxPitEntry &entry);
-  /**
-   * \brief Default constructor
-   */
-  CcnxPitEntry () {};
   
-public:
+protected:
+  CcnxPit &m_container; ///< @brief Reference to the container (to rearrange indexes, if necessary)
+  
   Ptr<const CcnxNameComponents> m_prefix; ///< \brief Prefix of the PIT entry
   Ptr<CcnxFibEntry> m_fibEntry;     ///< \brief FIB entry related to this prefix
   
