diff --git a/examples/ccnx-grid.cc b/examples/ccnx-grid.cc
index d0c2882..9891a91 100644
--- a/examples/ccnx-grid.cc
+++ b/examples/ccnx-grid.cc
@@ -89,7 +89,7 @@
   // Install CCNx stack
   NS_LOG_INFO ("Installing CCNx stack");
   CcnxStackHelper ccnxHelper;
-  // ccnxHelper.SetForwardingStrategy ("ns3::CcnxBestRouteStrategy");
+  //ccnxHelper.SetForwardingStrategy ("ns3::CcnxBestRouteStrategy");
   ccnxHelper.SetForwardingStrategy ("ns3::CcnxFloodingStrategy");
   ccnxHelper.EnableLimits (true, Seconds(0.1));
   ccnxHelper.InstallAll ();
diff --git a/model/ccnx-face.cc b/model/ccnx-face.cc
index 3c092e9..92bdfee 100644
--- a/model/ccnx-face.cc
+++ b/model/ccnx-face.cc
@@ -82,10 +82,10 @@
   
   if (m_bucketMax > 0)
     {
-      //NS_LOG_ERROR ("Limits enabled: " << m_bucketMax << ", current: " << m_bucket);
+      //NS_LOG_DEBUG ("Limits enabled: " << m_bucketMax << ", current: " << m_bucket);
       if (m_bucket+1.0 > m_bucketMax)
         {
-          //NS_LOG_ERROR ("Returning false");
+          //NS_LOG_DEBUG ("Returning false");
           return false;
         }
       
@@ -101,7 +101,7 @@
   const double leak = m_bucketLeak * interval.ToDouble (Time::S);
   m_bucket = std::max (0.0, m_bucket - leak);
 
-  NS_LOG_ERROR ("max: " << m_bucketMax << ", Current bucket: " << m_bucket << ", leak size: " << leak << ", interval: " << interval << ", " << m_bucketLeak);
+  // NS_LOG_DEBUG ("max: " << m_bucketMax << ", Current bucket: " << m_bucket << ", leak size: " << leak << ", interval: " << interval << ", " << m_bucketLeak);
 }
 
 void
diff --git a/model/ccnx-flooding-strategy.cc b/model/ccnx-flooding-strategy.cc
index ee7df67..94c6512 100644
--- a/model/ccnx-flooding-strategy.cc
+++ b/model/ccnx-flooding-strategy.cc
@@ -21,6 +21,7 @@
 #include "ccnx-flooding-strategy.h"
 #include "ns3/assert.h"
 #include "ns3/log.h"
+#include "ns3/simulator.h"
 #include "ccnx-interest-header.h"
 
 #include <boost/ref.hpp>
@@ -75,12 +76,19 @@
 
       bool faceAvailable = metricFace.m_face->IsBelowLimit ();
       if (!faceAvailable) // huh...
-        continue;
+        {
+          // NS_LOG_ERROR (boost::cref (*metricFace.m_face) << " limit !!!");
+          continue;
+        }
 
       m_pit->modify (m_pit->iterator_to (pitEntry),
                      ll::bind(&CcnxPitEntry::AddOutgoing, ll::_1, metricFace.m_face));
 
-      // NS_LOG_DEBUG ("new outgoing entry for " << boost::cref (*metricFace.m_face));
+      // if (Simulator::GetContext ()==2)
+      //   {
+      //     NS_LOG_ERROR ("new outgoing entry for " << boost::cref (*metricFace.m_face));
+      //     NS_LOG_ERROR ("size: " << pitEntry.m_outgoing.size ());
+      //   }
 
       metricFace.m_face->Send (packet->Copy ());
       
diff --git a/model/ccnx-l3-protocol.cc b/model/ccnx-l3-protocol.cc
index 37264d5..596b36a 100644
--- a/model/ccnx-l3-protocol.cc
+++ b/model/ccnx-l3-protocol.cc
@@ -296,11 +296,11 @@
   tuple<const CcnxPitEntry&,bool,bool> ret = m_pit->Lookup (*header);
   CcnxPitEntry const& pitEntry = ret.get<0> ();
   bool isNew = ret.get<1> ();
-  //bool isDuplicated = ret.get<2> ();
+  bool isDuplicated = ret.get<2> ();
 
   // NS_ASSERT_MSG (isDuplicated,
   //                "NACK should be a duplicated interest");
-  if (isNew /*|| !isDuplicated*/) // potential flow
+  if (isNew || !isDuplicated) // potential flow
     {
       // somebody is doing something bad
       NS_ASSERT (false); // temporary assert
@@ -310,15 +310,18 @@
   // CcnxPitEntryIncomingFaceContainer::type::iterator inFace = pitEntry.m_incoming.find (incomingFace);
   CcnxPitEntryOutgoingFaceContainer::type::iterator outFace = pitEntry.m_outgoing.find (incomingFace);
 
-  if (outFace != pitEntry.m_outgoing.end ())
+  if (outFace == pitEntry.m_outgoing.end ())
     {
-      // NS_ASSERT_MSG (outFace != pitEntry.m_outgoing.end (),
-      //                "Outgoing entry should exist");
+      NS_ASSERT_MSG (false,
+                     "Node " << GetObject<Node> ()->GetId () << ", outgoing entry should exist for face " << boost::cref(*incomingFace) << "\n" <<
+                     "size: " << pitEntry.m_outgoing.size ());
       
       return;
     }
 
-  outFace->m_face->LeakBucketByOnePacket ();
+  NS_ASSERT_MSG (incomingFace == outFace->m_face, "Something is wrong");
+  incomingFace->LeakBucketByOnePacket ();
+
   m_pit->modify (m_pit->iterator_to (pitEntry),
                  ll::bind (&CcnxPitEntry::SetWaitingInVain, ll::_1, outFace));
   
@@ -337,11 +340,10 @@
                 ll::bind (&CcnxFibEntry::UpdateStatus,
                           ll::_1, incomingFace, CcnxFibFaceMetric::NDN_FIB_YELLOW));
 
-  if (!pitEntry.AreAllOutgoingInVain ())
+  if (!pitEntry.AreAllOutgoingInVain ()) // not all ougtoing are in vain
     {
       // suppress
       // Don't do anything, we are still expecting data from some other face
-
       return;
     }
   
@@ -357,7 +359,7 @@
   // ForwardingStrategy will try its best to forward packet to at least one interface.
   // If no interests was propagated, then there is not other option for forwarding or
   // ForwardingStrategy failed to find it. 
-  if (!propagated && pitEntry.AreAllOutgoingInVain ())
+  if (!propagated)
     GiveUpInterest (pitEntry, header);
 }
 
@@ -473,7 +475,7 @@
   // ForwardingStrategy will try its best to forward packet to at least one interface.
   // If no interests was propagated, then there is not other option for forwarding or
   // ForwardingStrategy failed to find it. 
-  if (!propagated && pitEntry.AreAllOutgoingInVain ())
+  if (!propagated)
     GiveUpInterest (pitEntry, header);
 }
 
