diff --git a/model/ccnx-pit.cc b/model/ccnx-pit.cc
index 51c09b4..8fd21e0 100644
--- a/model/ccnx-pit.cc
+++ b/model/ccnx-pit.cc
@@ -115,6 +115,43 @@
   m_fib = fib;
 }
 
+/*CcnxPitEntryContainer::type::iterator
+CcnxPit::Add (const CcnxInterestHeader &header, CcnxFibEntryContainer::type::iterator fibEntry, Ptr<CcnxFace> face)
+{
+    if( m_bucketsPerFace[face->GetId()]+1.0 >= maxBucketsPerFace[face->GetId()] )
+	{
+        //		printf( "DEBUG: bucket overflow. Should not forward anything to interface %d\n", interest.interfaceIndex );
+		return end();
+	}
+    
+    CcnxPitEntryContainer::type::iterator entry = insert (end (),
+                    CcnxPitEntry (Create<CcnxNameComponents> (header.GetName ()),
+                                *fibEntry));
+    return entry;
+}*/
+
+    
+    
+bool
+CcnxPit::TryAddOutgoing(CcnxPitEntryContainer::type::iterator pitEntry, Ptr<CcnxFace> face)
+{
+    NS_LOG_INFO ("Face has " << m_bucketsPerFace[face->GetId()] << " packets with max allowance " << maxBucketsPerFace[face->GetId()]); 
+    
+    if((face->IsLocal() == false) 
+       && (m_bucketsPerFace[face->GetId()]+1.0 >= maxBucketsPerFace[face->GetId()] ))
+	{
+		return false;
+	}
+    
+    m_bucketsPerFace[face->GetId()] = m_bucketsPerFace[face->GetId()] + 1.0;
+	
+    NS_LOG_INFO(this->size());
+    NS_LOG_INFO("before modify");
+    NS_LOG_INFO(pitEntry->GetPrefix());
+    modify (pitEntry, CcnxPitEntry::AddOutgoing(face));
+    NS_LOG_INFO("after modify");
+    return true;
+}
 
 const CcnxPitEntry&
 CcnxPit::Lookup (const CcnxContentObjectHeader &header) const
@@ -130,8 +167,8 @@
   return *entry;
 }
 
-const CcnxPitEntry&
-CcnxPit::Lookup (const CcnxInterestHeader &header)
+CcnxPitEntryContainer::type::iterator
+CcnxPit::Lookup (const CcnxInterestHeader &header, CcnxFibEntryContainer::type::iterator &outFibEntry)
 {
   NS_LOG_FUNCTION_NOARGS ();
   NS_ASSERT_MSG (m_fib != 0, "FIB should be set");
@@ -147,10 +184,33 @@
     }
   
   if (entry == end ())
-    entry = insert (end (),
+  {
+      NS_LOG_INFO("entry == end");
+      NS_LOG_INFO(this->size());
+        entry = insert (end (),
                     CcnxPitEntry (Create<CcnxNameComponents> (header.GetName ()),
                                   *fibEntry));
-  return *entry;
+      NS_LOG_INFO(this->size());
+  }
+  outFibEntry = fibEntry;
+  return entry;
+}
+
+void 
+CcnxPit::LeakBuckets( )
+{
+    for( PitBucketIterator it=m_bucketsPerFace.begin(); 
+        it != m_bucketsPerFace.end();
+        it++ )
+    {
+        it->second = std::max( 0.0, it->second - leakSize[it->first] );
+    }
+}
+    
+void 
+CcnxPit::LeakBucket(Ptr<CcnxFace> face, int amount )
+{
+    m_bucketsPerFace[face->GetId()] = std::max( 0.0, m_bucketsPerFace[face->GetId()] - amount );
 }
 
 
