Making everything compile. Now everything seems to work, but more
checking is necessary
diff --git a/model/ccnx-bestroute-strategy.cc b/model/ccnx-bestroute-strategy.cc
index cad2d67..a7a9801 100644
--- a/model/ccnx-bestroute-strategy.cc
+++ b/model/ccnx-bestroute-strategy.cc
@@ -24,6 +24,10 @@
 #include "ns3/assert.h"
 #include "ns3/log.h"
 
+#include <boost/lambda/lambda.hpp>
+#include <boost/lambda/bind.hpp>
+namespace ll = boost::lambda;
+
 NS_LOG_COMPONENT_DEFINE ("CcnxBestRouteStrategy");
 
 namespace ns3 
@@ -65,12 +69,16 @@
           if (pitEntry.m_outgoing.find (bestMetric.m_face) != pitEntry.m_outgoing.end ()) // already forwarded before
             continue;
 
-          bool faceAvailable = bestMetric.m_face->SendWithLimit (packet->Copy ());
+          bool faceAvailable = bestMetric.m_face->IsBelowLimit ();
           if (!faceAvailable) // huh...
             continue;
 
           m_pit->modify (m_pit->iterator_to (pitEntry),
-                         bind(&CcnxPitEntry::AddOutgoing, lambda::_1, bestMetric.m_face));
+                         ll::bind(&CcnxPitEntry::AddOutgoing, ll::_1, bestMetric.m_face));
+
+          // NS_LOG_DEBUG ("new outgoing entry for " << boost::cref (*metricFace.m_face));
+
+          bestMetric.m_face->Send (packet->Copy ());
 
           forwardedCount++;
           break; // if we succeeded in sending one packet, stop
diff --git a/model/ccnx-face.cc b/model/ccnx-face.cc
index 1bb55ab..e6aa03f 100644
--- a/model/ccnx-face.cc
+++ b/model/ccnx-face.cc
@@ -21,6 +21,7 @@
 
 #include "ccnx-face.h"
 
+#include "ns3/packet.h"
 #include "ns3/log.h"
 #include "ns3/node.h"
 #include "ns3/assert.h"
@@ -35,7 +36,7 @@
  * invoke SetUp on them once an Ccnx address and mask have been set.
  */
 CcnxFace::CcnxFace (Ptr<Node> node) 
-  : m_node (Ptr<Node> node)
+  : m_node (node)
   , m_bucket (0.0)
   , m_bucketMax (-1.0)
   , m_bucketLeak (0.0)
@@ -44,6 +45,8 @@
   , m_id ((uint32_t)-1)
 {
   NS_LOG_FUNCTION (this);
+
+  NS_ASSERT_MSG (node != 0, "node cannot be NULL. Check the code");
 }
 
 CcnxFace::~CcnxFace ()
@@ -63,17 +66,20 @@
 void
 CcnxFace::RegisterProtocolHandler (ProtocolHandler handler)
 {
+  NS_LOG_FUNCTION_NOARGS ();
+
   m_protocolHandler = handler;
 }
 
 bool
-CcnxFace::SendWithLimit (Ptr<Packet> packet)
+CcnxFace::IsBelowLimit ()
 {
+  NS_LOG_FUNCTION_NOARGS ();
+
   /// \todo Implement tracing, if requested
-  
   if (!IsUp ())
     return false;
-
+  
   if (m_bucketMax > 0)
     {
       if (m_bucket+1.0 > m_bucketMax)
@@ -82,13 +88,14 @@
       m_bucket += 1.0;
     }
 
-  SendImpl (packet);
   return true;
 }
 
 bool
-CcnxFace::SendWithoutLimits (Ptr<Packet> packet)
+CcnxFace::Send (Ptr<Packet> packet)
 {
+  NS_LOG_FUNCTION_NOARGS ();
+
   /// \todo Implement tracing, if requested
 
   if (!IsUp ())
@@ -99,14 +106,18 @@
 }
 
 bool
-CcnxFace::Receive (Ptr<const Packet> packet)
+CcnxFace::Receive (const Ptr<const Packet> &packet)
 {
+  NS_LOG_FUNCTION_NOARGS ();
+
   /// \todo Implement tracing, if requested
 
   if (!IsUp ())
     return false;
 
   m_protocolHandler (this, packet);
+  
+  return true;
 }
 
 // void
diff --git a/model/ccnx-face.h b/model/ccnx-face.h
index bc6769e..132ef36 100644
--- a/model/ccnx-face.h
+++ b/model/ccnx-face.h
@@ -22,9 +22,11 @@
 #define CCNX_FACE_H
 
 #include <ostream>
+#include <algorithm>
 
 #include "ns3/ptr.h"
 #include "ns3/ccnx.h"
+#include "ns3/nstime.h"
 
 namespace ns3 {
 
@@ -71,40 +73,36 @@
    */
   virtual void
   RegisterProtocolHandler (ProtocolHandler handler);
-  
-  /**
-   * \brief Send packet on a face with regard Interest limits
-   *
-   * This method will be called by lower layers to send data to device or application
-   *
-   * \param p smart pointer to a packet to send
-   *
-   * @return false if either limit is reached or face is down
-   */ 
-  bool
-  SendWithLimit (Ptr<Packet> p);
 
   /**
-   * \brief Send content packet on a face without regard to limits
+   * @brief Check if Interest limit is reached
+   *
+   * Side effect: if limit is not yet reached, the number of outstanding packets will be increased
+   *
+   * @returns true if Interest limit is not yet reached
+   */
+  bool
+  IsBelowLimit ();
+  
+  /**
+   * \brief Send packet on a face
    *
    * This method will be called by lower layers to send data to device or application
    *
-   * !!! The only difference between this call and SendInterest is that the former check Interest limit !!!
-   *
    * \param p smart pointer to a packet to send
    *
-   * @return false if face is down
+   * @return false if either limit is reached
    */ 
   bool
-  SendWithoutLimits (Ptr<Packet> p);
+  Send (Ptr<Packet> p);
 
   /**
    * \brief Receive packet from application or another node and forward it to the CCNx stack
    *
    * \todo The only reason for this call is to handle tracing, if requested
    */
-  void
-  Receive (Ptr<const Packet> p);
+  bool
+  Receive (const Ptr<const Packet> &p);
   ////////////////////////////////////////////////////////////////////
 
   // /**
@@ -251,7 +249,7 @@
 CcnxFace::LeakBucket (const Time &interval)
 {
   const double leak = m_bucketLeak * 1.0 / interval.ToDouble (Time::S);
-  m_bucket -= std::max (0, m_bucket-leak); 
+  m_bucket -= std::max (0.0, m_bucket-leak); 
 }
 
 
diff --git a/model/ccnx-fib.cc b/model/ccnx-fib.cc
index bd3cd67..e4e36d5 100644
--- a/model/ccnx-fib.cc
+++ b/model/ccnx-fib.cc
@@ -33,14 +33,10 @@
 #define NDN_RTO_BETA 0.25
 #define NDN_RTO_K 4
 
-//#define NDN_DEBUG_OSPF	0
-//#define NDN_DEBUG_OSPF_NODES 0
-
 #include <boost/lambda/lambda.hpp>
+#include <boost/lambda/bind.hpp>
+namespace ll = boost::lambda;
 
-using namespace boost;
-
-//#define NDN_DUMP_FIB		0
 namespace ns3 {
 
 
@@ -107,7 +103,7 @@
                  "Update status can be performed only on existing faces of CcxnFibEntry");
 
   m_faces.modify (record,
-                  bind (&CcnxFibFaceMetric::UpdateRtt, lambda::_1, sample));
+                  ll::bind (&CcnxFibFaceMetric::UpdateRtt, ll::_1, sample));
 
   // reordering random access index same way as by metric index
   m_faces.get<i_nth> ().rearrange (m_faces.get<i_metric> ().begin ());
@@ -121,7 +117,7 @@
                  "Update status can be performed only on existing faces of CcxnFibEntry");
 
   m_faces.modify (record,
-                  (&lambda::_1)->*&CcnxFibFaceMetric::m_status = status);
+                  (&ll::_1)->*&CcnxFibFaceMetric::m_status = status);
 
   // reordering random access index same way as by metric index
   m_faces.get<i_nth> ().rearrange (m_faces.get<i_metric> ().begin ());
@@ -141,7 +137,7 @@
   else
   {
     m_faces.modify (record,
-                    (&lambda::_1)->*&CcnxFibFaceMetric::m_routingCost = metric);
+                    (&ll::_1)->*&CcnxFibFaceMetric::m_routingCost = metric);
   }
   
   // reordering random access index same way as by metric index
@@ -211,33 +207,37 @@
 
   NS_ASSERT_MSG (face != NULL, "Trying to modify NULL face");
   modify (entry,
-          bind (&CcnxFibEntry::AddOrUpdateRoutingMetric, lambda::_1, face, metric));
+          ll::bind (&CcnxFibEntry::AddOrUpdateRoutingMetric, ll::_1, face, metric));
     
   return entry;
 }
     
 void
-CcnxFib::Delete (const CcnxNameComponents &prefix, Ptr<CcnxFace> face)
+CcnxFib::Remove (const CcnxFibEntry &entry, Ptr<CcnxFace> face)
 {
-  NS_LOG_FUNCTION (this << prefix << face);
+  NS_LOG_FUNCTION (this);
 
-  CcnxFibEntryContainer::type::iterator entry = find (prefix);
-  if (entry == end ())
-    return;
-
-  modify (entry,
-          bind (&CcnxFibEntry::RemoveFace, _1, face));
-  if (entry->m_faces.size () == 0)
+  modify (iterator_to (entry),
+          ll::bind (&CcnxFibEntry::RemoveFace, ll::_1, face));
+  if (entry.m_faces.size () == 0)
     {
-      erase (entry);
+      erase (iterator_to (entry));
     }
 }
 
 void
-CcnxFib::DeleteFromAll (Ptr<CcnxFace> face)
+CcnxFib::RemoveFromAll (Ptr<CcnxFace> face)
 {
+  NS_LOG_FUNCTION (this);
+
+  for_each (begin (), end (), ll::bind (&CcnxFib::Remove, this, ll::_1, face));
+  // BOOST_FOREACH (const CcnxFibEntry &entry, *this)
+  //   {
+  //     Remove (entry, face);
+  //   }
 }
 
+
 std::ostream& operator<< (std::ostream& os, const CcnxFib &fib)
 {
   os << "Node " << Names::FindName (fib.m_node) << "\n";
diff --git a/model/ccnx-fib.h b/model/ccnx-fib.h
index 84d618d..3e7807b 100644
--- a/model/ccnx-fib.h
+++ b/model/ccnx-fib.h
@@ -193,6 +193,15 @@
    */
   const CcnxFibFaceMetric &
   FindBestCandidate (uint32_t skip = 0) const;
+
+  /**
+   * @brief Remove record associated with `face`
+   */
+  void
+  RemoveFace (const Ptr<CcnxFace> &face)
+  {
+    m_faces.erase (face);
+  }
 	
 private:
   friend std::ostream& operator<< (std::ostream& os, const CcnxFibEntry &entry);
@@ -278,18 +287,18 @@
   Add (const CcnxNameComponents &prefix, Ptr<CcnxFace> face, int32_t metric);
 
   /**
-   * @brief Remove reference to a face from the entry for `prefix`. If entry had only this face, the whole
+   * @brief Remove reference to a face from the entry. If entry had only this face, the whole
    * entry will be removed
    */
   void
-  Delete (const CcnxNameComponents &prefix, Ptr<CcnxFace> face);
+  Remove (const CcnxFibEntry &entry, Ptr<CcnxFace> face);
 
   /**
    * @brief Remove all references to a face from FIB.  If for some enty that face was the only element,
    * this FIB entry will be removed.
    */
   void
-  DeleteFromAll (Ptr<CcnxFace> face);
+  RemoveFromAll (Ptr<CcnxFace> face);
 
 protected:
   // inherited from Object class
diff --git a/model/ccnx-flooding-strategy.cc b/model/ccnx-flooding-strategy.cc
index 1fa7a93..52231b4 100644
--- a/model/ccnx-flooding-strategy.cc
+++ b/model/ccnx-flooding-strategy.cc
@@ -23,7 +23,11 @@
 #include "ns3/log.h"
 #include "ccnx-interest-header.h"
 
+#include <boost/ref.hpp>
 #include <boost/foreach.hpp>
+#include <boost/lambda/lambda.hpp>
+#include <boost/lambda/bind.hpp>
+namespace ll = boost::lambda;
 
 NS_LOG_COMPONENT_DEFINE ("CcnxFloodingStrategy");
 
@@ -65,16 +69,21 @@
       if (pitEntry.m_outgoing.find (metricFace.m_face) != pitEntry.m_outgoing.end ()) // already forwarded before
         continue;
 
-      bool faceAvailable = metricFace.m_face->SendWithLimit (packet->Copy ());
+      bool faceAvailable = metricFace.m_face->IsBelowLimit ();
       if (!faceAvailable) // huh...
         continue;
 
       m_pit->modify (m_pit->iterator_to (pitEntry),
-                     bind(&CcnxPitEntry::AddOutgoing, lambda::_1, metricFace.m_face));
-        
+                     ll::bind(&CcnxPitEntry::AddOutgoing, ll::_1, metricFace.m_face));
+
+      // NS_LOG_DEBUG ("new outgoing entry for " << boost::cref (*metricFace.m_face));
+
+      metricFace.m_face->Send (packet->Copy ());
+      
       propagatedCount++;
     }
 
+  NS_LOG_INFO ("Propagated to " << propagatedCount << " faces");
   return propagatedCount > 0;
 }
     
diff --git a/model/ccnx-l3-protocol.cc b/model/ccnx-l3-protocol.cc
index 1d4c548..e0e12c2 100644
--- a/model/ccnx-l3-protocol.cc
+++ b/model/ccnx-l3-protocol.cc
@@ -64,7 +64,8 @@
     .AddAttribute ("BucketLeakInterval",
                    "Interval to leak buckets",
                    StringValue ("10ms"),
-                   MakeTimeAccessor (&CcnxPit::GetBucketLeakInterval, &CcnxPit::SetBucketLeakInterval),
+                   MakeTimeAccessor (&CcnxL3Protocol::GetBucketLeakInterval,
+                                     &CcnxL3Protocol::SetBucketLeakInterval),
                    MakeTimeChecker ())
   ;
   return tid;
@@ -144,7 +145,7 @@
 {
   NS_LOG_FUNCTION (this);
   m_forwardingStrategy = forwardingStrategy;
-  // m_forwardingStrategy->SetCcnx (this);
+  m_forwardingStrategy->SetPit (m_pit);
 }
 
 Ptr<CcnxForwardingStrategy>
@@ -158,7 +159,6 @@
 {
   NS_LOG_FUNCTION (this << &face);
 
-  face->SetNode (m_node);
   face->SetId (m_faceCounter); // sets a unique ID of the face. This ID serves only informational purposes
 
   // ask face to register in lower-layer stack
@@ -176,16 +176,16 @@
   face->RegisterProtocolHandler (MakeNullCallback<void,const Ptr<CcnxFace>&,const Ptr<const Packet>&> ());
 
   // just to be on a safe side. Do the process in two steps
-  list<CcnxPitEntryContainer::type::iterator> entriesToRemoves; 
+  std::list<CcnxPitEntryContainer::type::iterator> entriesToRemoves; 
   BOOST_FOREACH (const CcnxPitEntry &pitEntry, *m_pit)
     {
       m_pit->modify (m_pit->iterator_to (pitEntry),
-                     ll::bind (CcnxPitEntry::RemoveAllReferencesToFace, ll::_1, face));
+                     ll::bind (&CcnxPitEntry::RemoveAllReferencesToFace, ll::_1, face));
 
       // If this face is the only for the associated FIB entry, then FIB entry will be removed soon.
       // Thus, we have to remove the whole PIT entry
-      if (m_pit->m_fibEntry.size () == 1 &&
-          m_pit->m_fibEntry.m_faces.begin ()->m_face == face)
+      if (pitEntry.m_fibEntry.m_faces.size () == 1 &&
+          pitEntry.m_fibEntry.m_faces.begin ()->m_face == face)
         {
           entriesToRemoves.push_back (m_pit->iterator_to (pitEntry));
         }
@@ -330,7 +330,7 @@
   //               {
   //                 header->SetNonce(it->m_nonce);
   //                 header->SetNack(true);
-  //                 face.m_face->SendWithoutLimit (packet->Copy());
+  //                 face.m_face->Send (packet->Copy());
   //               }
   //           }
   //       }
@@ -373,7 +373,7 @@
       Ptr<Packet> packet = Create<Packet> ();
       packet->AddHeader (*header);
 
-      incomingFace->SendWithoutLimit (packet);
+      incomingFace->Send (packet);
       
       // //Trace duplicate interest  
       // m_droppedInterestsTrace (header, NDN_DUPLICATE_INTEREST, m_node->GetObject<Ccnx> (), incomingFace);
@@ -391,7 +391,7 @@
         
       // TransmittedDataTrace (contentObject, CACHED,
       //                       m_node->GetObject<Ccnx> (), incomingFace);
-      incomingFace->SendWithoutLimit (contentObject);
+      incomingFace->Send (contentObject);
 
       // Set pruning timout on PIT entry (instead of deleting the record)
       m_pit->modify (m_pit->iterator_to (pitEntry),
@@ -462,7 +462,7 @@
 
       BOOST_FOREACH (const CcnxPitEntryIncomingFace &incoming, pitEntry.m_incoming)
         {
-          incoming.m_face->SendWithoutLimit (packet->Copy ());
+          incoming.m_face->Send (packet->Copy ());
 
           // m_droppedInterestsTrace (header, DROP_CONGESTION,
           //                          m_node->GetObject<Ccnx> (), incomingFace);
@@ -479,10 +479,11 @@
 }
 
 // Processing ContentObjects
-void CcnxL3Protocol::OnData (const Ptr<CcnxFace> &incomingFace,
-                             Ptr<CcnxContentObjectHeader> &header,
-                             Ptr<Packet> &payload,
-                             const Ptr<const Packet> &packet)
+void
+CcnxL3Protocol::OnData (const Ptr<CcnxFace> &incomingFace,
+                        Ptr<CcnxContentObjectHeader> &header,
+                        Ptr<Packet> &payload,
+                        const Ptr<const Packet> &packet)
 {
     
   NS_LOG_FUNCTION (incomingFace << header << payload << packet);
@@ -494,14 +495,6 @@
       const CcnxPitEntry &pitEntry = m_pit->Lookup (*header);
 
       // Note that with MultiIndex we need to modify entries indirectly
-  
-      // Update metric status for the incoming interface in the corresponding FIB entry
-      m_fib->modify (m_fib->iterator_to (pitEntry.m_fibEntry),
-                     ll::bind (&CcnxFibEntry::UpdateStatus, ll::_1,
-                           incomingFace, CcnxFibFaceMetric::NDN_FIB_GREEN));
-  
-      // Add or update entry in the content store
-      m_contentStore->Add (header, payload);
 
       CcnxPitEntryOutgoingFaceContainer::type::iterator out = pitEntry.m_outgoing.find (incomingFace);
   
@@ -510,9 +503,9 @@
         {
           m_fib->modify (m_fib->iterator_to (pitEntry.m_fibEntry),
                          ll::bind (&CcnxFibEntry::UpdateFaceRtt,
-                               ll::_1,
-                               incomingFace,
-                               Simulator::Now () - out->m_sendTime));
+                                   ll::_1,
+                                   incomingFace,
+                                   Simulator::Now () - out->m_sendTime));
         }
       else
         {
@@ -521,16 +514,25 @@
           
           NS_LOG_ERROR ("Node "<< m_node->GetId() <<
                        ". PIT entry for "<< header->GetName ()<<" is valid, "
-                       "but outgoing entry for interface "<< incomingFace <<" doesn't exist\n");
+                        "but outgoing entry for interface "<< boost::cref(*incomingFace) <<" doesn't exist\n");
 
-          NS_ASSERT (false); // temporary put false here
+          // ignore unsolicited data
+          return;
         }
 
+      // Update metric status for the incoming interface in the corresponding FIB entry
+      m_fib->modify (m_fib->iterator_to (pitEntry.m_fibEntry),
+                     ll::bind (&CcnxFibEntry::UpdateStatus, ll::_1,
+                               incomingFace, CcnxFibFaceMetric::NDN_FIB_GREEN));
+  
+      // Add or update entry in the content store
+      m_contentStore->Add (header, payload);
+
       //satisfy all pending incoming Interests
       BOOST_FOREACH (const CcnxPitEntryIncomingFace &incoming, pitEntry.m_incoming)
         {
           if (incoming.m_face != incomingFace)
-            incoming.m_face->SendWithoutLimit (packet->Copy ());
+            incoming.m_face->Send (packet->Copy ());
 
           // successfull forwarded data trace
         }
@@ -573,7 +575,7 @@
 }
 
 void 
-CcnxPit::LeakBuckets ()
+CcnxL3Protocol::LeakBuckets ()
 {
   BOOST_FOREACH (const Ptr<CcnxFace> &face, m_faces)
     {
diff --git a/model/ccnx-local-face.cc b/model/ccnx-local-face.cc
index 4a7c777..0f8ef27 100644
--- a/model/ccnx-local-face.cc
+++ b/model/ccnx-local-face.cc
@@ -28,6 +28,8 @@
 #include "ns3/assert.h"
 
 #include "ns3/ccnx-header-helper.h"
+#include "ns3/ccnx-app.h"
+
 #include "ccnx-interest-header.h"
 #include "ccnx-content-object-header.h"
 
@@ -37,12 +39,12 @@
 {
 
 CcnxLocalFace::CcnxLocalFace (Ptr<CcnxApp> app)
-  : CcnxFace (app->GetObject<Node> ())
+  : CcnxFace (app->GetNode ())
   , m_app (app)
 {
   NS_LOG_FUNCTION (this << app);
   
-  NS_ASSERT (app != 0);
+  NS_ASSERT (m_app != 0);
 }
 
 CcnxLocalFace::~CcnxLocalFace ()
@@ -53,11 +55,11 @@
 void
 CcnxLocalFace::RegisterProtocolHandler (ProtocolHandler handler)
 {
-  NS_LOG_FUNCTION (this << handler);
+  NS_LOG_FUNCTION (this);
 
   CcnxFace::RegisterProtocolHandler (handler);
 
-  app->RegisterProtocolHandler (MakeCallback (&CcnxFace::Receive, this));
+  m_app->RegisterProtocolHandler (MakeCallback (&CcnxFace::Receive, this));
 }
     
 void
@@ -71,23 +73,27 @@
       switch (type)
         {
         case CcnxHeaderHelper::INTEREST:
-          if (!m_onInterest.IsNull ())
-            {
-              Ptr<CcnxInterestHeader> header = Create<CcnxInterestHeader> ();
-              p->RemoveHeader (*header);
-              app->OnInterest (header);
-            }
-          break;
+          {
+            Ptr<CcnxInterestHeader> header = Create<CcnxInterestHeader> ();
+            p->RemoveHeader (*header);
+
+            if (header->GetNack () > 0)
+              m_app->OnNack (header);
+            else
+              m_app->OnInterest (header);
+          
+            break;
+          }
         case CcnxHeaderHelper::CONTENT_OBJECT:
-          if (!m_onContentObject.IsNull ())
-            {
-              static CcnxContentObjectTail tail;
-              Ptr<CcnxContentObjectHeader> header = Create<CcnxContentObjectHeader> ();
-              p->RemoveHeader (*header);
-              p->RemoveTrailer (tail);
-              app->OnContentObject (header, p/*payload*/);
-            }
-          break;
+          {
+            static CcnxContentObjectTail tail;
+            Ptr<CcnxContentObjectHeader> header = Create<CcnxContentObjectHeader> ();
+            p->RemoveHeader (*header);
+            p->RemoveTrailer (tail);
+            m_app->OnContentObject (header, p/*payload*/);
+          
+            break;
+          }
         }
     }
   catch (CcnxUnknownHeaderException)
diff --git a/model/ccnx-local-face.h b/model/ccnx-local-face.h
index a7705ed..c8c4515 100644
--- a/model/ccnx-local-face.h
+++ b/model/ccnx-local-face.h
@@ -30,6 +30,7 @@
 class CcnxInterestHeader;
 class CcnxContentObjectHeader;
 class Packet;
+class CcnxApp;
 
 /**
  * \ingroup ccnx-face
@@ -69,7 +70,7 @@
   CcnxLocalFace& operator= (const CcnxLocalFace &); ///< \brief Disabled copy operator
 
 private:
-  Ptr<CcnxApp> m_application;
+  Ptr<CcnxApp> m_app;
 };
 
 std::ostream& operator<< (std::ostream& os, const CcnxLocalFace &localFace);
diff --git a/model/ccnx-name-components.h b/model/ccnx-name-components.h
index 5dafcfc..fdffe91 100644
--- a/model/ccnx-name-components.h
+++ b/model/ccnx-name-components.h
@@ -119,6 +119,13 @@
   return *this;
 }
 
+// template<>
+// void
+// CcnxNameComponents::Add (const std::string &string)
+// {
+//   m_prefix.push_back (string);
+// }
+
 template<class T>
 void
 CcnxNameComponents::Add (const T &value)
@@ -128,13 +135,6 @@
   m_prefix.push_back (os.str ());
 }
 
-template<class T=std::string>
-void
-CcnxNameComponents::Add (const T &string)
-{
-  m_prefix.push_back (string);
-}
-
 bool
 CcnxNameComponents::operator== (const CcnxNameComponents &prefix) const
 {
diff --git a/model/ccnx-net-device-face.cc b/model/ccnx-net-device-face.cc
index 72aa14a..dff7694 100644
--- a/model/ccnx-net-device-face.cc
+++ b/model/ccnx-net-device-face.cc
@@ -50,10 +50,6 @@
   NS_LOG_FUNCTION_NOARGS ();
 }
 
-CcnxNetDeviceFace::CcnxNetDeviceFace (const CcnxNetDeviceFace &)
-{
-}
-
 CcnxNetDeviceFace& CcnxNetDeviceFace::operator= (const CcnxNetDeviceFace &)
 {
   return *this;
@@ -68,7 +64,7 @@
 void
 CcnxNetDeviceFace::RegisterProtocolHandler (ProtocolHandler handler)
 {
-  NS_LOG_FUNCTION (this << handler);
+  NS_LOG_FUNCTION (this);
 
   CcnxFace::RegisterProtocolHandler (handler);
   
@@ -77,7 +73,7 @@
 }
 
 void
-CcnxNetDeviceFace::Send (Ptr<Packet> packet)
+CcnxNetDeviceFace::SendImpl (Ptr<Packet> packet)
 {
   NS_LOG_FUNCTION (this << packet);
   
diff --git a/model/ccnx-pit-entry.cc b/model/ccnx-pit-entry.cc
index cd6d854..a4db50a 100644
--- a/model/ccnx-pit-entry.cc
+++ b/model/ccnx-pit-entry.cc
@@ -38,12 +38,6 @@
 {
 }
 
-const CcnxNameComponents &
-CcnxPitEntry::GetPrefix () const
-{
-  return *m_prefix;
-}
-
 CcnxPitEntryIncomingFaceContainer::type::iterator
 CcnxPitEntry::AddIncoming (Ptr<CcnxFace> face)
 {
diff --git a/model/ccnx-pit-entry.h b/model/ccnx-pit-entry.h
index 52e7921..9f05e1e 100644
--- a/model/ccnx-pit-entry.h
+++ b/model/ccnx-pit-entry.h
@@ -108,8 +108,11 @@
   // // Get number of outgoing interests that we're expecting data from
   // inline size_t numberOfPromisingInterests( ) const; 
 
-  // const CcnxNameComponents &
-  // GetPrefix () const;
+  const CcnxNameComponents &
+  GetPrefix () const
+  {
+    return *m_prefix;
+  }
 
   /**
    * @brief Get current expiration time of the record
diff --git a/model/ccnx-pit.cc b/model/ccnx-pit.cc
index 63e1db8..9770bd0 100644
--- a/model/ccnx-pit.cc
+++ b/model/ccnx-pit.cc
@@ -86,9 +86,6 @@
   if (m_cleanupEvent.IsRunning ())
     m_cleanupEvent.Cancel ();
 
-  if (m_PitBucketLeakEvent.IsRunning ())
-    m_PitBucketLeakEvent.Cancel ();
-
   clear ();
 }