diff --git a/model/fw/green-yellow-red.cc b/model/fw/green-yellow-red.cc
index 6611c13..3351cda 100644
--- a/model/fw/green-yellow-red.cc
+++ b/model/fw/green-yellow-red.cc
@@ -107,12 +107,15 @@
 void
 GreenYellowRed::DidReceiveValidNack (Ptr<Face> inFace,
                                      uint32_t nackCode,
+                                     Ptr<const InterestHeader> header,
+                                     Ptr<const Packet> origPacket,
                                      Ptr<pit::Entry> pitEntry)
 {
-  super::DidReceiveValidNack (inFace, nackCode, pitEntry);
+  super::DidReceiveValidNack (inFace, nackCode, header, origPacket, pitEntry);
 
   if (inFace != 0 &&
-      nackCode != InterestHeader::NACK_LOOP)
+      (nackCode == InterestHeader::NACK_CONGESTION ||
+       nackCode == InterestHeader::NACK_GIVEUP_PIT))
     {
       pitEntry->GetFibEntry ()->UpdateStatus (inFace, fib::FaceMetric::NDN_FIB_YELLOW);
     }
diff --git a/model/fw/green-yellow-red.h b/model/fw/green-yellow-red.h
index 4099a12..363d0cb 100644
--- a/model/fw/green-yellow-red.h
+++ b/model/fw/green-yellow-red.h
@@ -49,6 +49,8 @@
   virtual void
   DidReceiveValidNack (Ptr<Face> incomingFace,
                        uint32_t nackCode,
+                       Ptr<const InterestHeader> header,
+                       Ptr<const Packet> origPacket,
                        Ptr<pit::Entry> pitEntry);
 
 private:
diff --git a/model/fw/nacks.cc b/model/fw/nacks.cc
index 4a4245c..511b022 100644
--- a/model/fw/nacks.cc
+++ b/model/fw/nacks.cc
@@ -104,29 +104,7 @@
   //
   // inFace->LeakBucketByOnePacket ();
 
-  // 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;
-  //   }
-  
-  // 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);
-  //   }  
+  DidReceiveValidNack (inFace, header->GetNack (), header, origPacket, pitEntry);
 }
 
 void
@@ -178,6 +156,8 @@
 void
 Nacks::DidReceiveValidNack (Ptr<Face> inFace,
                             uint32_t nackCode,
+                            Ptr<const InterestHeader> header,
+                            Ptr<const Packet> origPacket,
                             Ptr<pit::Entry> pitEntry)
 {
   // If NACK is NACK_GIVEUP_PIT, then neighbor gave up trying to and removed it's PIT entry.
@@ -187,7 +167,32 @@
       pitEntry->RemoveIncoming (inFace);
     }
 
-  pitEntry->GetFibEntry ()->UpdateStatus (inFace, fib::FaceMetric::NDN_FIB_YELLOW);
+  if (nackCode == InterestHeader::NACK_LOOP ||
+      nackCode == InterestHeader::NACK_CONGESTION ||
+      nackCode == InterestHeader::NACK_GIVEUP_PIT)
+    {
+      pitEntry->SetWaitingInVain (inFace);
+
+      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);
+  
+      bool propagated = DoPropagateInterest (inFace, nonNackHeader, nonNackInterest, pitEntry);
+      if (!propagated)
+        {
+          DidExhaustForwardingOptions (inFace, nonNackHeader, nonNackInterest, pitEntry);
+        }
+    }
 }
 
 } // namespace fw
diff --git a/model/fw/nacks.h b/model/fw/nacks.h
index f247f25..ef14f19 100644
--- a/model/fw/nacks.h
+++ b/model/fw/nacks.h
@@ -69,6 +69,8 @@
   virtual void
   DidReceiveValidNack (Ptr<Face> inFace,
                        uint32_t nackCode,
+                       Ptr<const InterestHeader> header,
+                       Ptr<const Packet> origPacket,
                        Ptr<pit::Entry> pitEntry);
   
 protected:  
diff --git a/model/fw/simple-limits.h b/model/fw/simple-limits.h
index ee88c21..22a94ed 100644
--- a/model/fw/simple-limits.h
+++ b/model/fw/simple-limits.h
@@ -25,6 +25,7 @@
 #include "ns3/event-id.h"
 #include "ns3/ndn-pit.h"
 #include "ns3/ndn-pit-entry.h"
+#include "ns3/simulator.h"
 
 #include "ns3/ndn-forwarding-strategy.h"
 
@@ -103,8 +104,6 @@
       return false;
     }
 
-  // NS_LOG_DEBUG ("Limit: " << outFace->GetLimits ().m_curMaxLimit << ", outstanding: " << outFace->GetLimits ().m_outstanding);
-  
   if (outFace->GetLimits ().IsBelowLimit ())
     {
       pitEntry->AddOutgoing (outFace);
