diff --git a/model/fw/nacks.cc b/model/fw/nacks.cc
index 6ad5066..4a4245c 100644
--- a/model/fw/nacks.cc
+++ b/model/fw/nacks.cc
@@ -88,8 +88,6 @@
                Ptr<const InterestHeader> header,
                Ptr<const Packet> origPacket)
 {
-  NS_ASSERT (m_nacksEnabled);
-
   // NS_LOG_FUNCTION (inFace << header << origPacket);
   m_inNacks (header, inFace);
 
@@ -106,29 +104,29 @@
   //
   // inFace->LeakBucketByOnePacket ();
 
-  pitEntry->SetWaitingInVain (inFace);
+  // pitEntry->SetWaitingInVain (inFace);
 
   DidReceiveValidNack (inFace, header->GetNack (), pitEntry);
   
-  if (!pitEntry->AreAllOutgoingInVain ()) // not all ougtoing are in vain
-    {
-      NS_LOG_DEBUG ("Not all outgoing are in vain");
-      // suppress
-      // Don't do anything, we are still expecting data from some other face
-      m_dropNacks (header, inFace);
-      return;
-    }
+  // if (!pitEntry->AreAllOutgoingInVain ()) // not all ougtoing are in vain
+  //   {
+  //     NS_LOG_DEBUG ("Not all outgoing are in vain");
+  //     // suppress
+  //     // Don't do anything, we are still expecting data from some other face
+  //     m_dropNacks (header, inFace);
+  //     return;
+  //   }
   
-  Ptr<Packet> nonNackInterest = Create<Packet> ();
-  Ptr<InterestHeader> nonNackHeader = Create<InterestHeader> (*header);
-  nonNackHeader->SetNack (InterestHeader::NORMAL_INTEREST);
-  nonNackInterest->AddHeader (*nonNackHeader);
+  // Ptr<Packet> nonNackInterest = Create<Packet> ();
+  // Ptr<InterestHeader> nonNackHeader = Create<InterestHeader> (*header);
+  // nonNackHeader->SetNack (InterestHeader::NORMAL_INTEREST);
+  // nonNackInterest->AddHeader (*nonNackHeader);
   
-  bool propagated = DoPropagateInterest (inFace, nonNackHeader, nonNackInterest, pitEntry);
-  if (!propagated)
-    {
-      DidExhaustForwardingOptions (inFace, nonNackHeader, nonNackInterest, pitEntry);
-    }  
+  // bool propagated = DoPropagateInterest (inFace, nonNackHeader, nonNackInterest, pitEntry);
+  // if (!propagated)
+  //   {
+  //     DidExhaustForwardingOptions (inFace, nonNackHeader, nonNackInterest, pitEntry);
+  //   }  
 }
 
 void
diff --git a/model/fw/per-fib-limits.cc b/model/fw/per-fib-limits.cc
index d56d48c..9703bd7 100644
--- a/model/fw/per-fib-limits.cc
+++ b/model/fw/per-fib-limits.cc
@@ -68,8 +68,6 @@
 void
 PerFibLimits::RemoveFace (Ptr<Face> face)
 {  
-  super::RemoveFace (face);
-
   for (PitQueueMap::iterator item = m_pitQueues.begin ();
        item != m_pitQueues.end ();
        item ++)
@@ -77,6 +75,8 @@
       item->second.Remove (face);
     }
   m_pitQueues.erase (face);
+
+  super::RemoveFace (face);
 }
 
 
@@ -117,6 +117,10 @@
       NS_LOG_DEBUG ("Face limit for " << header->GetName ());
     }
 
+  // hack
+  // offset lifetime, so we don't keep entries in queue for too long
+  pitEntry->OffsetLifetime (Seconds (- 0.9 * pitEntry->GetInterest ()->GetInterestLifetime ().ToDouble (Time::S)));
+  
   bool enqueued = m_pitQueues[outFace].Enqueue (inFace, pitEntry);
   if (enqueued)
     {
@@ -133,6 +137,18 @@
   NS_LOG_FUNCTION (this << pitEntry->GetPrefix ());
   super::WillEraseTimedOutPendingInterest (pitEntry);
 
+  Ptr<Packet> pkt = Create<Packet> ();
+  Ptr<InterestHeader> nackHeader = Create<InterestHeader> (*pitEntry->GetInterest ());
+  nackHeader->SetNack (99);
+  pkt->AddHeader (*nackHeader);
+
+  for (pit::Entry::in_container::iterator face = pitEntry->GetIncoming ().begin ();
+       face != pitEntry->GetIncoming ().end ();
+       face ++)
+    {
+      face->m_face->Send (pkt->Copy ());
+    }
+  
   PitQueue::Remove (pitEntry);
   
   for (pit::Entry::out_container::iterator face = pitEntry->GetOutgoing ().begin ();
@@ -184,8 +200,9 @@
           // now we have enqueued packet and have slot available. Send out delayed packet
           Ptr<pit::Entry> pitEntry = queue->second.Pop ();
 
-          // wrong, but for experimental purposes
-          // pitEntry->UpdateLifetime (pitEntry->GetInterest ()->GetInterestLifetime ());
+          // hack
+          // offset lifetime back, so PIT entry wouldn't prematurely expire
+          pitEntry->OffsetLifetime (Seconds (0.7 * pitEntry->GetInterest ()->GetInterestLifetime ().ToDouble (Time::S)));
           
           NS_ASSERT_MSG (pitEntry != 0, "There *have to* be an entry in queue");
           
@@ -201,15 +218,39 @@
     }
 }
 
-// void
-// PerFibLimits::DidReceiveValidNack (Ptr<Face> inFace,
-//                                    uint32_t nackCode,
-//                                    Ptr<pit::Entry> pitEntry)
-// {
-//   // super::DidReceiveValidNack (inFace, nackCode, pitEntry);
+void
+PerFibLimits::DidReceiveValidNack (Ptr<Face> inFace,
+                                   uint32_t nackCode,
+                                   Ptr<pit::Entry> pitEntry)
+{
+  // super::DidReceiveValidNack (inFace, nackCode, pitEntry);
+  // NS_LOG_FUNCTION (this << pitEntry->GetPrefix ());
 
-//   // ??
-// }
+  Ptr<Packet> pkt = Create<Packet> ();
+  Ptr<InterestHeader> nackHeader = Create<InterestHeader> (*pitEntry->GetInterest ());
+  nackHeader->SetNack (99);
+  pkt->AddHeader (*nackHeader);
+
+  for (pit::Entry::in_container::iterator face = pitEntry->GetIncoming ().begin ();
+       face != pitEntry->GetIncoming ().end ();
+       face ++)
+    {
+      face->m_face->Send (pkt->Copy ());
+    }
+  
+  PitQueue::Remove (pitEntry);
+
+  for (pit::Entry::out_container::iterator face = pitEntry->GetOutgoing ().begin ();
+       face != pitEntry->GetOutgoing ().end ();
+       face ++)
+    {
+      face->m_face->GetLimits ().RemoveOutstanding ();
+    }
+
+  m_pit->MarkErased (pitEntry);
+  
+  ProcessFromQueue ();
+}
 
 
 } // namespace fw
diff --git a/model/fw/per-fib-limits.h b/model/fw/per-fib-limits.h
index 3f23992..298c9ee 100644
--- a/model/fw/per-fib-limits.h
+++ b/model/fw/per-fib-limits.h
@@ -68,6 +68,11 @@
   WillSatisfyPendingInterest (Ptr<Face> inFace,
                               Ptr<pit::Entry> pitEntry);
 
+  virtual void
+  DidReceiveValidNack (Ptr<Face> inFace,
+                       uint32_t nackCode,
+                       Ptr<pit::Entry> pitEntry);
+  
 private:
   void
   ProcessFromQueue ();
diff --git a/model/ndn-interest-header.cc b/model/ndn-interest-header.cc
index 46cbf25..39c87e9 100644
--- a/model/ndn-interest-header.cc
+++ b/model/ndn-interest-header.cc
@@ -67,7 +67,7 @@
   : m_name                (Create<NameComponents> (interest.GetName ()))
   , m_minSuffixComponents (interest.m_minSuffixComponents)
   , m_maxSuffixComponents (interest.m_maxSuffixComponents)
-  , m_exclude             (Create<NameComponents> (interest.GetExclude ()))
+  , m_exclude             (interest.IsEnabledExclude () ? Create<NameComponents> (interest.GetExclude ()) : 0)
   , m_childSelector       (interest.m_childSelector)
   , m_answerOriginKind    (interest.m_answerOriginKind)
   , m_scope               (interest.m_scope)
diff --git a/model/pit/ndn-pit-entry-impl.h b/model/pit/ndn-pit-entry-impl.h
index 85c94f1..6af9cc5 100644
--- a/model/pit/ndn-pit-entry-impl.h
+++ b/model/pit/ndn-pit-entry-impl.h
@@ -62,6 +62,15 @@
     CONTAINER.RescheduleCleaning ();
   }
 
+  virtual void
+  OffsetLifetime (const Time &offsetTime)
+  {
+    CONTAINER.i_time.erase (Pit::time_index::s_iterator_to (*this));
+    super::OffsetLifetime (offsetTime);
+    CONTAINER.i_time.insert (*this);
+
+    CONTAINER.RescheduleCleaning ();
+  }
   
   // to make sure policies work
   void
diff --git a/model/pit/ndn-pit-entry.cc b/model/pit/ndn-pit-entry.cc
index 4dcf6d0..af66570 100644
--- a/model/pit/ndn-pit-entry.cc
+++ b/model/pit/ndn-pit-entry.cc
@@ -70,6 +70,18 @@
   NS_LOG_INFO ("Updated lifetime to " << m_expireTime.ToDouble (Time::S));
 }
 
+void
+Entry::OffsetLifetime (const Time &offsetTime)
+{
+  m_expireTime += offsetTime;
+  if (m_expireTime < Simulator::Now ())
+    {
+      m_expireTime = Simulator::Now ();
+    }
+  NS_LOG_INFO ("Offsetting lifetime to " << m_expireTime.ToDouble (Time::S));
+}
+
+
 const NameComponents &
 Entry::GetPrefix () const
 {
diff --git a/model/pit/ndn-pit-entry.h b/model/pit/ndn-pit-entry.h
index ecec2a6..7f4ef0e 100644
--- a/model/pit/ndn-pit-entry.h
+++ b/model/pit/ndn-pit-entry.h
@@ -119,12 +119,21 @@
    * This function will update PIT entry lifetime to the maximum of the current lifetime and
    * the lifetime Simulator::Now () + offsetTime
    *
-   * @param offsetTime Relative time to the current moment, representing PIT entry lifetime
+   * @param lifetime Relative time to the current moment, representing PIT entry lifetime
    */
   virtual void
-  UpdateLifetime (const Time &offsetTime);
+  UpdateLifetime (const Time &lifetime);
 
   /**
+   * @brief Offset the currently set PIT lifetime (allowed both negative and positive offsets)
+   * @param offsetTime positive or negative offset for the PIT lifetime.
+   *
+   * If PIT expire time becomes less than Simulator::Now, then it is adjusted to Simulator::Now.
+   */
+  virtual void
+  OffsetLifetime (const Time &offsetTime);
+  
+  /**
    * @brief Get prefix of the PIT entry
    */
   const NameComponents &
