diff --git a/model/ccnx-l3-protocol.cc b/model/ccnx-l3-protocol.cc
index 2ea1414..2a13f4c 100644
--- a/model/ccnx-l3-protocol.cc
+++ b/model/ccnx-l3-protocol.cc
@@ -43,7 +43,7 @@
 
 namespace ns3 {
 
-const uint16_t CcnxL3Protocol::PROT_NUMBER = 0x7777;
+const uint16_t CcnxL3Protocol::ETHERNET_FRAME_TYPE = 0x7777;
 
 NS_OBJECT_ENSURE_REGISTERED (CcnxL3Protocol);
 
@@ -53,19 +53,19 @@
   static TypeId tid = TypeId ("ns3::CcnxL3Protocol")
     .SetParent<Ccnx> ()
     .AddConstructor<CcnxL3Protocol> ()
-    .AddTraceSource ("Tx", "Send ccnx packet to outgoing interface.",
-                     MakeTraceSourceAccessor (&CcnxL3Protocol::m_txTrace))
-    .AddTraceSource ("Rx", "Receive ccnx packet from incoming interface.",
-                     MakeTraceSourceAccessor (&CcnxL3Protocol::m_rxTrace))
-    .AddTraceSource ("Drop", "Drop ccnx packet",
-                     MakeTraceSourceAccessor (&CcnxL3Protocol::m_dropTrace))
+    // .AddTraceSource ("Tx", "Send ccnx packet to outgoing interface.",
+    //                  MakeTraceSourceAccessor (&CcnxL3Protocol::m_txTrace))
+    // .AddTraceSource ("Rx", "Receive ccnx packet from incoming interface.",
+    //                  MakeTraceSourceAccessor (&CcnxL3Protocol::m_rxTrace))
+    // .AddTraceSource ("Drop", "Drop ccnx packet",
+    //                  MakeTraceSourceAccessor (&CcnxL3Protocol::m_dropTrace))
     .AddAttribute ("InterfaceList", "The set of Ccnx interfaces associated to this Ccnx stack.",
                    ObjectVectorValue (),
                    MakeObjectVectorAccessor (&CcnxL3Protocol::m_faces),
                    MakeObjectVectorChecker<CcnxFace> ())
 
-    .AddTraceSource ("SendOutgoing", "A newly-generated packet by this node is about to be queued for transmission",
-                     MakeTraceSourceAccessor (&CcnxL3Protocol::m_sendOutgoingTrace))
+    // .AddTraceSource ("SendOutgoing", "A newly-generated packet by this node is about to be queued for transmission",
+    //                  MakeTraceSourceAccessor (&CcnxL3Protocol::m_sendOutgoingTrace))
 
   ;
   return tid;
@@ -137,7 +137,7 @@
 }
 
 uint32_t 
-CcnxL3Protocol::AddFace (Ptr<CcnxFace> face)
+CcnxL3Protocol::AddFace (const Ptr<CcnxFace> &face)
 {
   NS_LOG_FUNCTION (this << *face);
 
@@ -147,7 +147,7 @@
   if (face->GetDevice() != 0)
     {
       m_node->RegisterProtocolHandler (MakeCallback (&CcnxL3Protocol::ReceiveFromLower, this), 
-                                       CcnxL3Protocol::PROT_NUMBER, face->GetDevice(), true/*promiscuous mode*/);
+                                       CcnxL3Protocol::ETHERNET_FRAME_TYPE, face->GetDevice(), true/*promiscuous mode*/);
     }
 
   uint32_t index = m_faces.size ();
@@ -218,7 +218,7 @@
   if (incomingFace->IsUp ())
     {
       NS_LOG_LOGIC ("Dropping received packet -- interface is down");
-      m_dropTrace (packet, DROP_INTERFACE_DOWN, m_node->GetObject<Ccnx> (), incomingFace);
+      // m_dropTrace (packet, DROP_INTERFACE_DOWN, m_node->GetObject<Ccnx> (), incomingFace);
       return;
     }
 
@@ -242,7 +242,7 @@
   if (incomingFace->IsUp ())
     {
       NS_LOG_LOGIC ("Dropping received packet -- interface is down");
-      m_dropTrace (packet, DROP_INTERFACE_DOWN, m_node->GetObject<Ccnx> (), incomingFace);
+      // m_dropTrace (packet, DROP_INTERFACE_DOWN, m_node->GetObject<Ccnx> (), incomingFace);
       return;
     }
 
@@ -258,29 +258,29 @@
 
 
 void
-CcnxL3Protocol::Send (Ptr<Packet> packet, Ptr<CcnxRoute> route)
+CcnxL3Protocol::Send (Ptr<Packet> packet, const Ptr<CcnxFace> &face)
 {
-  NS_LOG_FUNCTION (this << "packet: " << packet << ", route: "<< route);
+  // NS_LOG_FUNCTION (this << "packet: " << packet << ", route: "<< route);
   
-  if (route == 0)
-    {
-      NS_LOG_WARN ("No route to host.  Drop.");
-      m_dropTrace (packet, DROP_NO_ROUTE, m_node->GetObject<Ccnx> (), 0);
-      return;
-    }
-  Ptr<CcnxFace> outFace = route->GetOutputFace ();
+  // if (route == 0)
+  //   {
+  //     NS_LOG_WARN ("No route to host.  Drop.");
+  //     // m_dropTrace (packet, DROP_NO_ROUTE, m_node->GetObject<Ccnx> (), 0);
+  //     return;
+  //   }
+  // Ptr<CcnxFace> outFace = route->GetOutputFace ();
 
-  if (outFace->IsUp ())
-    {
-      NS_LOG_LOGIC ("Sending via face " << *outFace);
-      m_txTrace (packet, m_node->GetObject<Ccnx> (), outFace);
-      outFace->Send (packet);
-    }
-  else
-    {
-      NS_LOG_LOGIC ("Dropping -- outgoing interface is down: " << *outFace);
-      m_dropTrace (packet, DROP_INTERFACE_DOWN, m_node->GetObject<Ccnx> (), outFace);
-    }
+  // if (outFace->IsUp ())
+  //   {
+  //     NS_LOG_LOGIC ("Sending via face " << *outFace);
+  //     // m_txTrace (packet, m_node->GetObject<Ccnx> (), outFace);
+  //     outFace->Send (packet);
+  //   }
+  // else
+  //   {
+  //     NS_LOG_LOGIC ("Dropping -- outgoing interface is down: " << *outFace);
+  //     // m_dropTrace (packet, DROP_INTERFACE_DOWN, m_node->GetObject<Ccnx> (), outFace);
+  //   }
 }
 
 
@@ -339,12 +339,4 @@
     }
 }
 
-void
-CcnxL3Protocol::RouteInputError (Ptr<Packet> p)//, Socket::SocketErrno sockErrno)
-{
-  // NS_LOG_FUNCTION (this << p << ipHeader << sockErrno);
-  // NS_LOG_LOGIC ("Route input failure-- dropping packet to " << ipHeader << " with errno " << sockErrno); 
-  m_dropTrace (p, DROP_ROUTE_ERROR, m_node->GetObject<Ccnx> (), 0);
-}
-
 } //namespace ns3
