diff --git a/model/ccnx-app-face.cc b/model/ccnx-app-face.cc
index f032cd7..cec8a1c 100644
--- a/model/ccnx-app-face.cc
+++ b/model/ccnx-app-face.cc
@@ -91,7 +91,7 @@
   m_app->RegisterProtocolHandler (MakeCallback (&CcnxFace::Receive, this));
 }
 
-void
+bool
 CcnxAppFace::SendImpl (Ptr<Packet> p)
 {
   NS_LOG_FUNCTION (this << p);
@@ -124,10 +124,13 @@
             break;
           }
         }
+      
+      return true;
     }
   catch (CcnxUnknownHeaderException)
     {
       NS_LOG_ERROR ("Unknown header type");
+      return false;
     }
 }
 
diff --git a/model/ccnx-app-face.h b/model/ccnx-app-face.h
index 06d9a3f..967ee13 100644
--- a/model/ccnx-app-face.h
+++ b/model/ccnx-app-face.h
@@ -61,7 +61,7 @@
   RegisterProtocolHandler (ProtocolHandler handler);
 
 protected:
-  virtual void
+  virtual bool
   SendImpl (Ptr<Packet> p);
 
 public:
diff --git a/model/ccnx-face.cc b/model/ccnx-face.cc
index 3c18af0..a1dec50 100644
--- a/model/ccnx-face.cc
+++ b/model/ccnx-face.cc
@@ -185,9 +185,17 @@
   //     packet->AddPacketTag (tag);
   //   }
 
-  m_ccnxTxTrace (packet);
-  SendImpl (packet);
-  return true;
+  bool ok = SendImpl (packet);
+  if (ok)
+    {
+      m_ccnxTxTrace (packet);
+      return true;
+    }
+  else
+    {
+      m_ccnxDropTrace (packet);
+      return false;
+    }
 }
 
 bool
diff --git a/model/ccnx-face.h b/model/ccnx-face.h
index 1119ba8..4a0cdf9 100644
--- a/model/ccnx-face.h
+++ b/model/ccnx-face.h
@@ -225,7 +225,7 @@
    *
    * \param p smart pointer to a packet to send
    */
-  virtual void
+  virtual bool
   SendImpl (Ptr<Packet> p) = 0;  
 
 private:
diff --git a/model/ccnx-net-device-face.cc b/model/ccnx-net-device-face.cc
index 23b5e97..95e45c2 100644
--- a/model/ccnx-net-device-face.cc
+++ b/model/ccnx-net-device-face.cc
@@ -88,7 +88,7 @@
                                    CcnxL3Protocol::ETHERNET_FRAME_TYPE, m_netDevice, true/*promiscuous mode*/);
 }
 
-void
+bool
 CcnxNetDeviceFace::SendImpl (Ptr<Packet> packet)
 {
   NS_LOG_FUNCTION (this << packet);
@@ -98,8 +98,9 @@
                  << m_netDevice->GetMtu ()
                  << " for Ccnx; fragmentation not supported");
 
-  m_netDevice->Send (packet, m_netDevice->GetBroadcast (), 
-                     CcnxL3Protocol::ETHERNET_FRAME_TYPE);
+  bool ok = m_netDevice->Send (packet, m_netDevice->GetBroadcast (), 
+                               CcnxL3Protocol::ETHERNET_FRAME_TYPE);
+  return ok;
 }
 
 // callback
diff --git a/model/ccnx-net-device-face.h b/model/ccnx-net-device-face.h
index 0fdefea..2a018bf 100644
--- a/model/ccnx-net-device-face.h
+++ b/model/ccnx-net-device-face.h
@@ -40,7 +40,7 @@
  * object and this object cannot be changed for the lifetime of the
  * face
  *
- * \see CcnxLocalFace, CcnxNetDeviceFace, CcnxIpv4Face, CcnxUdpFace
+ * \see CcnxAppFace, CcnxNetDeviceFace, CcnxIpv4Face, CcnxUdpFace
  */
 class CcnxNetDeviceFace  : public CcnxFace
 {
@@ -51,7 +51,8 @@
   /**
    * \brief Constructor
    *
-   * \param netDevice a smart pointer to NetDevice object to which
+   * @param node Node associated with the face
+   * @param netDevice a smart pointer to NetDevice object to which
    * this face will be associate
    */
   CcnxNetDeviceFace (Ptr<Node> node, const Ptr<NetDevice> &netDevice);
@@ -61,10 +62,10 @@
   // methods overloaded from CcnxFace
   virtual void
   RegisterProtocolHandler (ProtocolHandler handler);
-
+  
 protected:
   // also from CcnxFace
-  virtual void
+  virtual bool
   SendImpl (Ptr<Packet> p);
 
 public:
diff --git a/model/forwarding-strategy/best-route.cc b/model/forwarding-strategy/best-route.cc
index f109568..867527f 100644
--- a/model/forwarding-strategy/best-route.cc
+++ b/model/forwarding-strategy/best-route.cc
@@ -93,7 +93,7 @@
       Ptr<Packet> packetToSend = packet->Copy ();
       metricFace.m_face->Send (packetToSend);
 
-      DidSendOutInterest (metricFace.m_face, header, pitEntry);
+      DidSendOutInterest (metricFace.m_face, header, packet, pitEntry);
 
       propagatedCount++;
       break; // do only once
diff --git a/model/forwarding-strategy/ccnx-forwarding-strategy.cc b/model/forwarding-strategy/ccnx-forwarding-strategy.cc
index 93afbeb..88451e6 100644
--- a/model/forwarding-strategy/ccnx-forwarding-strategy.cc
+++ b/model/forwarding-strategy/ccnx-forwarding-strategy.cc
@@ -300,9 +300,19 @@
   //satisfy all pending incoming Interests
   BOOST_FOREACH (const CcnxPitEntryIncomingFace &incoming, pitEntry->GetIncoming ())
     {
-      incoming.m_face->Send (packet->Copy ());
-      m_outData (header, payload, false, incoming.m_face);
-      NS_LOG_DEBUG ("Satisfy " << *incoming.m_face);
+      bool ok = incoming.m_face->Send (packet->Copy ());
+      if (ok)
+        {
+          m_outData (header, payload, incomingFace == 0, incoming.m_face);
+          DidSendOutData (incoming.m_face, header, payload, packet);
+          
+          NS_LOG_DEBUG ("Satisfy " << *incoming.m_face);
+        }
+      else
+        {
+          m_dropData (header, payload, incoming.m_face);
+          NS_LOG_DEBUG ("Cannot satisfy data to " << *incoming.m_face);
+        }
           
       // successfull forwarded data trace
     }
@@ -443,12 +453,21 @@
 void
 CcnxForwardingStrategy::DidSendOutInterest (const Ptr<CcnxFace> &outgoingFace,
                                             Ptr<CcnxInterestHeader> header,
+                                            const Ptr<const Packet> &packet,
                                             Ptr<CcnxPitEntry> pitEntry)
 {
   m_outInterests (header, outgoingFace);
 }
 
 void
+CcnxForwardingStrategy::DidSendOutData (const Ptr<CcnxFace> &face,
+                                        Ptr<const CcnxContentObjectHeader> header,
+                                        Ptr<const Packet> payload,
+                                        const Ptr<const Packet> &packet)
+{
+}
+
+void
 CcnxForwardingStrategy::WillErasePendingInterest (Ptr<CcnxPitEntry> pitEntry)
 {
   // do nothing for now. may be need to do some logging
diff --git a/model/forwarding-strategy/ccnx-forwarding-strategy.h b/model/forwarding-strategy/ccnx-forwarding-strategy.h
index c46c70f..20ef1b5 100644
--- a/model/forwarding-strategy/ccnx-forwarding-strategy.h
+++ b/model/forwarding-strategy/ccnx-forwarding-strategy.h
@@ -128,6 +128,12 @@
                           Ptr<CcnxPitEntry> pitEntry);
 
   virtual void
+  DidSendOutData (const Ptr<CcnxFace> &face,
+                  Ptr<const CcnxContentObjectHeader> header,
+                  Ptr<const Packet> payload,
+                  const Ptr<const Packet> &packet);
+  
+  virtual void
   DidReceiveUnsolicitedData (const Ptr<CcnxFace> &incomingFace,
                              Ptr<const CcnxContentObjectHeader> header,
                              Ptr<const Packet> payload);
@@ -151,9 +157,9 @@
    */
   virtual void
   DidSendOutInterest (const Ptr<CcnxFace> &outgoingFace,
-                       Ptr<CcnxInterestHeader> header,
-                       Ptr<CcnxPitEntry> pitEntry);
-  
+                      Ptr<CcnxInterestHeader> header,
+                      const Ptr<const Packet> &packet,
+                      Ptr<CcnxPitEntry> pitEntry);
 
   virtual void
   PropagateInterest (const Ptr<CcnxFace> &incomingFace,
diff --git a/model/forwarding-strategy/flooding.cc b/model/forwarding-strategy/flooding.cc
index 545d1fb..176122d 100644
--- a/model/forwarding-strategy/flooding.cc
+++ b/model/forwarding-strategy/flooding.cc
@@ -90,7 +90,7 @@
       Ptr<Packet> packetToSend = packet->Copy ();
       metricFace.m_face->Send (packetToSend);
 
-      DidSendOutInterest (metricFace.m_face, header, pitEntry);
+      DidSendOutInterest (metricFace.m_face, header, packet, pitEntry);
       
       propagatedCount++;
     }
diff --git a/model/forwarding-strategy/fw-stats.cc b/model/forwarding-strategy/fw-stats.cc
index 76638e2..9d15152 100644
--- a/model/forwarding-strategy/fw-stats.cc
+++ b/model/forwarding-strategy/fw-stats.cc
@@ -69,6 +69,32 @@
 }
 
 void
+FwStats::OnInterest (const Ptr<CcnxFace> &face,
+                     Ptr<CcnxInterestHeader> &header,
+                     const Ptr<const Packet> &packet)
+{
+  super::OnInterest (face, header, packet);
+  
+  m_stats.Rx (header->GetName (), face, packet->GetSize ());
+
+  ScheduleRefreshingIfNecessary ();
+}
+
+void
+FwStats::OnData (const Ptr<CcnxFace> &face,
+                 Ptr<CcnxContentObjectHeader> &header,
+                 Ptr<Packet> &payload,
+                 const Ptr<const Packet> &packet)
+{
+  super::OnData (face, header, payload, packet);
+  
+  m_stats.Rx (header->GetName (), face, packet->GetSize ());
+
+  ScheduleRefreshingIfNecessary ();
+}
+
+
+void
 FwStats::FailedToCreatePitEntry (const Ptr<CcnxFace> &incomingFace,
                                  Ptr<CcnxInterestHeader> header,
                                  const Ptr<const Packet> &packet)
@@ -77,7 +103,10 @@
 
   // Kind of cheating... But at least this way we will have some statistics
   m_stats.NewPitEntry (header->GetName ());
+  m_stats.Incoming (header->GetName (), incomingFace);
   m_stats.Timeout (header->GetName ());
+
+  ScheduleRefreshingIfNecessary ();
 }
 
 void
@@ -108,16 +137,32 @@
 void
 FwStats::DidSendOutInterest (const Ptr<CcnxFace> &outgoingFace,
                              Ptr<CcnxInterestHeader> header,
+                             const Ptr<const Packet> &packet,
                              Ptr<CcnxPitEntry> pitEntry)
 {
-  super::DidSendOutInterest (outgoingFace, header, pitEntry);
+  super::DidSendOutInterest (outgoingFace, header, packet, pitEntry);
 
   m_stats.Outgoing (header->GetName (), outgoingFace);
+  m_stats.Tx (header->GetName (), outgoingFace, packet->GetSize ());
   
   ScheduleRefreshingIfNecessary ();
 }
 
 void
+FwStats::DidSendOutData (const Ptr<CcnxFace> &face,
+                         Ptr<const CcnxContentObjectHeader> header,
+                         Ptr<const Packet> payload,
+                         const Ptr<const Packet> &packet)
+{
+  super::DidSendOutData (face, header, payload, packet);
+
+  m_stats.Tx (header->GetName (), face, packet->GetSize ());
+  
+  ScheduleRefreshingIfNecessary ();
+}
+
+
+void
 FwStats::WillErasePendingInterest (Ptr<CcnxPitEntry> pitEntry)
 {
   super::WillErasePendingInterest (pitEntry);
diff --git a/model/forwarding-strategy/fw-stats.h b/model/forwarding-strategy/fw-stats.h
index a422ccc..1849fb2 100644
--- a/model/forwarding-strategy/fw-stats.h
+++ b/model/forwarding-strategy/fw-stats.h
@@ -46,6 +46,17 @@
    */
   FwStats ();
 
+  virtual void
+  OnInterest (const Ptr<CcnxFace> &face,
+              Ptr<CcnxInterestHeader> &header,
+              const Ptr<const Packet> &p);
+
+  virtual void
+  OnData (const Ptr<CcnxFace> &face,
+          Ptr<CcnxContentObjectHeader> &header,
+          Ptr<Packet> &payload,
+          const Ptr<const Packet> &packet);
+  
 protected:
   virtual void
   DidCreatePitEntry (const Ptr<CcnxFace> &incomingFace,
@@ -65,9 +76,16 @@
   virtual void
   DidSendOutInterest (const Ptr<CcnxFace> &outgoingFace,
                       Ptr<CcnxInterestHeader> header,
+                      const Ptr<const Packet> &packet,
                       Ptr<CcnxPitEntry> pitEntry);
 
   virtual void
+  DidSendOutData (const Ptr<CcnxFace> &face,
+                  Ptr<const CcnxContentObjectHeader> header,
+                  Ptr<const Packet> payload,
+                  const Ptr<const Packet> &packet);
+
+  virtual void
   WillErasePendingInterest (Ptr<CcnxPitEntry> pitEntry);
 
   // from Object
diff --git a/model/forwarding-strategy/green-yellow-red.cc b/model/forwarding-strategy/green-yellow-red.cc
index d881b00..c00e6d8 100644
--- a/model/forwarding-strategy/green-yellow-red.cc
+++ b/model/forwarding-strategy/green-yellow-red.cc
@@ -93,7 +93,7 @@
       Ptr<Packet> packetToSend = packet->Copy ();
       metricFace.m_face->Send (packetToSend);
 
-      DidSendOutInterest (metricFace.m_face, header, pitEntry);
+      DidSendOutInterest (metricFace.m_face, header, packet, pitEntry);
       
       propagatedCount++;
       break; // propagate only one interest
diff --git a/model/forwarding-strategy/smart-flooding.cc b/model/forwarding-strategy/smart-flooding.cc
index 6cc05e3..a7d0167 100644
--- a/model/forwarding-strategy/smart-flooding.cc
+++ b/model/forwarding-strategy/smart-flooding.cc
@@ -96,7 +96,7 @@
       Ptr<Packet> packetToSend = packet->Copy ();
       metricFace.m_face->Send (packetToSend);
 
-      DidSendOutInterest (metricFace.m_face, header, pitEntry);
+      DidSendOutInterest (metricFace.m_face, header, packet, pitEntry);
       
       propagatedCount++;
     }
