diff --git a/model/ccnx-content-object-header.cc b/model/ccnx-content-object-header.cc
index f66bf3c..726415e 100644
--- a/model/ccnx-content-object-header.cc
+++ b/model/ccnx-content-object-header.cc
@@ -1,4 +1,4 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2011 University of California, Los Angeles
  *
@@ -21,6 +21,8 @@
 
 #include "ccnx-content-object-header.h"
 
+#include "ns3/log.h"
+
 NS_LOG_COMPONENT_DEFINE ("CcnxContentObjectHeader");
 
 namespace ns3
diff --git a/model/ccnx-content-object-header.h b/model/ccnx-content-object-header.h
index 86bcc59..0800885 100644
--- a/model/ccnx-content-object-header.h
+++ b/model/ccnx-content-object-header.h
@@ -1,4 +1,4 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2011 University of California, Los Angeles
  *
@@ -100,7 +100,6 @@
   // ? content
 };
 
-} // namespace NDNabstraction
 } // namespace ns3
 
 #endif // _CCNX_CONTENT_OBJECT_HEADER_H_
diff --git a/model/ccnx-face.cc b/model/ccnx-face.cc
index 27483b0..7635a3e 100644
--- a/model/ccnx-face.cc
+++ b/model/ccnx-face.cc
@@ -21,7 +21,6 @@
 
 #include "ccnx-face.h"
 
-#include "ns3/ccnx-address.h"
 #include "ns3/ccnx-l3-protocol.h"
 #include "ns3/net-device.h"
 #include "ns3/log.h"
@@ -50,10 +49,10 @@
  * invoke SetUp on them once an Ccnx address and mask have been set.
  */
 CcnxFace::CcnxFace () 
-  : m_ifup (false),
-    m_metric (1),
-    m_node (0), 
-    m_device (0),
+  : m_ifup (false)
+  , m_metric (1)
+  , m_node (0)
+  , m_device (0)
 {
   NS_LOG_FUNCTION (this);
 }
diff --git a/model/ccnx-face.h b/model/ccnx-face.h
index 769f938..2b5ba5f 100644
--- a/model/ccnx-face.h
+++ b/model/ccnx-face.h
@@ -1,4 +1,4 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
diff --git a/model/ccnx-forwarding-protocol.cc b/model/ccnx-forwarding-protocol.cc
index b7e5a11..afc7f33 100644
--- a/model/ccnx-forwarding-protocol.cc
+++ b/model/ccnx-forwarding-protocol.cc
@@ -1,4 +1,4 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2009 University of Washington
  *
diff --git a/model/ccnx-forwarding-protocol.h b/model/ccnx-forwarding-protocol.h
index e6d2586..072c7f9 100644
--- a/model/ccnx-forwarding-protocol.h
+++ b/model/ccnx-forwarding-protocol.h
@@ -1,4 +1,4 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2009 University of Washington
  *
@@ -22,11 +22,10 @@
 #include "ns3/callback.h"
 #include "ns3/object.h"
 #include "ns3/socket.h"
-#include "ccnx-header.h"
-#include "ns3/ccnx-interface-address.h"
-#include "ccnx.h"
 #include "ns3/output-stream-wrapper.h"
 
+#include "ccnx.h"
+
 namespace ns3 {
 
 class CcnxRoute;
@@ -51,8 +50,8 @@
 public:
   static TypeId GetTypeId (void);
 
-  typedef Callback<void, Ptr<const Packet>, Ptr<CcnxRoute> > SendCallback;
-  typedef Callback<void, Ptr<const Packet>, Socket::SocketErrno > ErrorCallback;
+  typedef Callback<void, Ptr<Packet>, Ptr<CcnxRoute> > SendCallback;
+  typedef Callback<void, Ptr<Packet>/*, Socket::SocketErrno*/ > ErrorCallback;
 
   /**
    * \brief Query forwarding cache for an existing route, for an outbound packet
@@ -88,7 +87,7 @@
    * \returns true if the CcnxForwardingProtocol takes responsibility for 
    *          forwarding or delivering the packet, false otherwise
    */ 
-  virtual bool RouteInput  (Ptr<const Packet> p, Ptr<const CcnxFace> iface, 
+  virtual bool RouteInput  (Ptr<Packet> p, Ptr<CcnxFace> iface, 
                             SendCallback ucb, ErrorCallback ecb) = 0;
 
   /**
@@ -106,6 +105,9 @@
    */
   virtual void NotifyInterfaceDown (uint32_t interface) = 0;
 
+
+  // Should be modified to notify about new prefixes ?
+  
   /**
    * \param interface the index of the interface we are being notified about
    * \param address a new address being added to an interface
@@ -114,7 +116,7 @@
    * a new address is added to an interface. Typically used to add a 'network route' on an
    * interface. Can be invoked on an up or down interface.
    */
-  virtual void NotifyAddAddress (uint32_t interface, CcnxInterfaceAddress address) = 0;
+  // virtual void NotifyAddAddress (uint32_t interface, CcnxInterfaceAddress address) = 0;
 
   /**
    * \param interface the index of the interface we are being notified about
@@ -124,7 +126,7 @@
    * a new address is removed from an interface. Typically used to remove the 'network route' of an
    * interface. Can be invoked on an up or down interface.
    */
-  virtual void NotifyRemoveAddress (uint32_t interface, CcnxInterfaceAddress address) = 0;
+  // virtual void NotifyRemoveAddress (uint32_t interface, CcnxInterfaceAddress address) = 0;
 
   /**
    * \param ccnx the ccnx object this forwarding protocol is being associated with
diff --git a/model/ccnx-interest-header.cc b/model/ccnx-interest-header.cc
index a7f2feb..6b322e2 100644
--- a/model/ccnx-interest-header.cc
+++ b/model/ccnx-interest-header.cc
@@ -25,6 +25,8 @@
 
 #include "ccnx-interest-header.h"
 
+#include "ns3/log.h"
+
 NS_LOG_COMPONENT_DEFINE ("CcnxInterestHeader");
 
 namespace ns3
diff --git a/model/ccnx-interest-header.h b/model/ccnx-interest-header.h
index 4b505ea..259e156 100644
--- a/model/ccnx-interest-header.h
+++ b/model/ccnx-interest-header.h
@@ -132,7 +132,7 @@
    *
    * Creates a null header
    **/
-  InterestHeader ();
+  CcnxInterestHeader ();
 
   /**
    * \brief Set interest name
diff --git a/model/ccnx-l3-protocol.cc b/model/ccnx-l3-protocol.cc
index bbb5853..b906a4c 100644
--- a/model/ccnx-l3-protocol.cc
+++ b/model/ccnx-l3-protocol.cc
@@ -1,4 +1,4 @@
-// -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*-
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 //
 // Copyright (c) 2006 Georgia Tech Research Corporation
 //
@@ -18,21 +18,21 @@
 // Author: 
 //
 
+#include "ccnx-l3-protocol.h"
+
 #include "ns3/packet.h"
+#include "ns3/net-device.h"
+#include "ns3/node.h"
 #include "ns3/log.h"
 #include "ns3/callback.h"
-#include "ns3/ccnx-address.h"
-#include "ns3/ccnx-route.h"
-#include "ns3/node.h"
-#include "ns3/net-device.h"
 #include "ns3/uinteger.h"
 #include "ns3/trace-source-accessor.h"
 #include "ns3/object-vector.h"
 #include "ns3/boolean.h"
-//#include "ns3/ccnx-routing-table-entry.h"
 
-#include "ccnx-l3-protocol.h"
-#include "ccnx-interface.h"
+#include "ccnx-face.h"
+#include "ccnx-route.h"
+#include "ccnx-forwarding-protocol.h"
 
 NS_LOG_COMPONENT_DEFINE ("CcnxL3Protocol");
 
@@ -56,8 +56,8 @@
                      MakeTraceSourceAccessor (&CcnxL3Protocol::m_dropTrace))
     .AddAttribute ("InterfaceList", "The set of Ccnx interfaces associated to this Ccnx stack.",
                    ObjectVectorValue (),
-                   MakeObjectVectorAccessor (&CcnxL3Protocol::m_interfaces),
-                   MakeObjectVectorChecker<CcnxInterface> ())
+                   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))
@@ -121,7 +121,7 @@
 {
   NS_LOG_FUNCTION (this);
 
-  for (CcnxInterfaceList::iterator i = m_faces.begin (); i != m_faces.end (); ++i)
+  for (CcnxFaceList::iterator i = m_faces.begin (); i != m_faces.end (); ++i)
     {
       *i = 0;
     }
@@ -137,21 +137,21 @@
   NS_LOG_FUNCTION (this << *face);
 
   // Ptr<Node> node = GetObject<Node> (); ///< \todo not sure why this thing should be called...
-  face->setNode (m_node);
+  face->SetNode (m_node);
 
   if (face->GetDevice() != 0)
     {
-      m_node->RegisterProtocolHandler (MakeCallback (&CcnxL3Protocol::Receive, this), 
+      m_node->RegisterProtocolHandler (MakeCallback (&CcnxL3Protocol::ReceiveFromLower, this), 
                                        CcnxL3Protocol::PROT_NUMBER, face->GetDevice(), true/*promiscuous mode*/);
     }
 
   uint32_t index = m_faces.size ();
-  m_faces.push_back (interface);
+  m_faces.push_back (face);
   return index;
 }
 
 
-Ptr<CcnxInterface>
+Ptr<CcnxFace>
 CcnxL3Protocol::GetFace (uint32_t index) const
 {
   if (index < m_faces.size ())
@@ -168,11 +168,11 @@
 }
 
 Ptr<CcnxFace>
-GetFaceForDevice (Ptr<const NetDevice> device) const
+CcnxL3Protocol::GetFaceForDevice (Ptr<const NetDevice> device) const
 {
-  for (CcnxInterfaceList::const_iterator i = m_faces.begin (); 
+  for (CcnxFaceList::const_iterator i = m_faces.begin (); 
        i != m_faces.end (); 
-       i++, face++)
+       i++)
     {
       if ((*i)->GetDevice () == device)
         {
@@ -180,29 +180,27 @@
         }
     }
 
-  NS_ASSERT_MSG (false "Should never get to this place" );
+  NS_ASSERT_MSG (false, "Should never get to this place" );
   return 0;
 }
 
 // Callback from lower layer
 void 
-CcnxL3Protocol::Receive ( Ptr<NetDevice> device, Ptr<const Packet> p, uint16_t protocol, const Address &from,
+CcnxL3Protocol::ReceiveFromLower ( Ptr<NetDevice> device, Ptr<const Packet> p, uint16_t protocol, const Address &from,
                           const Address &to, NetDevice::PacketType packetType)
 {
   NS_LOG_FUNCTION (this << &device << p << protocol <<  from);
 
   NS_LOG_LOGIC ("Packet from " << from << " received on node " <<  m_node->GetId ());
 
-  uint32_t interface = 0;
-  Ptr<Packet> packet = p->Copy ();
+  Ptr<CcnxFace> ccnxFace = GetFaceForDevice (device);
 
-  Ptr<CcnxFace> ccnxFace = GetFaceFromDevice (device);
-
-  Receive (ccnxFace, p);
+  Ptr<Packet> packet = p->Copy (); // give upper layers a rw copy of the packet
+  ReceiveAndProcess (ccnxFace, packet);
 }
 
 // Callback from higher level
-void Receive (Ptr<CcnxFace> incomingFace, Ptr<const Packet> p)
+void CcnxL3Protocol::ReceiveAndProcess (Ptr<CcnxFace> incomingFace, Ptr<Packet> packet)
 {
   if ( incomingFace->IsUp ())
     {
@@ -213,8 +211,8 @@
   
   m_rxTrace (packet, m_node->GetObject<Ccnx> (), incomingFace);
 
-  NS_ASSERT_MSG (m_routingProtocol != 0, "Need a routing protocol object to process packets");
-  if (!m_routingProtocol->RouteInput (packet, incomingFace,
+  NS_ASSERT_MSG (m_forwardingProtocol != 0, "Need a forwarding protocol object to process packets");
+  if (!m_forwardingProtocol->RouteInput (packet, incomingFace,
                                       MakeCallback (&CcnxL3Protocol::Send, this),
                                       MakeCallback (&CcnxL3Protocol::RouteInputError, this)
                                       ))
@@ -229,11 +227,11 @@
 CcnxL3Protocol::Send (Ptr<Packet> packet, Ptr<CcnxRoute> route)
 {
   NS_LOG_FUNCTION (this << "packet: " << packet << ", route: "<< route);
-
+  
   if (route == 0)
     {
       NS_LOG_WARN ("No route to host.  Drop.");
-      m_dropTrace (ipHeader, packet, DROP_NO_ROUTE, m_node->GetObject<Ccnx> (), 0);
+      m_dropTrace (packet, DROP_NO_ROUTE, m_node->GetObject<Ccnx> (), 0);
       return;
     }
   Ptr<CcnxFace> outFace = route->GetOutputFace ();
@@ -256,28 +254,28 @@
 CcnxL3Protocol::SetMetric (uint32_t i, uint16_t metric)
 {
   NS_LOG_FUNCTION (this << i << metric);
-  Ptr<CcnxInterface> interface = GetInterface (i);
-  interface->SetMetric (metric);
+  Ptr<CcnxFace> face = GetFace (i);
+  face->SetMetric (metric);
 }
 
 uint16_t
 CcnxL3Protocol::GetMetric (uint32_t i) const
 {
-  Ptr<CcnxInterface> interface = GetInterface (i);
-  return interface->GetMetric ();
+  Ptr<const CcnxFace> face = GetFace (i);
+  return face->GetMetric ();
 }
 
 uint16_t 
 CcnxL3Protocol::GetMtu (uint32_t i) const
 {
-  Ptr<CcnxInterface> interface = GetInterface (i);
-  return interface->GetDevice ()->GetMtu ();
+  Ptr<CcnxFace> face = GetFace (i);
+  return face->GetDevice ()->GetMtu ();
 }
 
 bool 
 CcnxL3Protocol::IsUp (uint32_t i) const
 {
-  Ptr<CcnxInterface> interface = GetInterface (i);
+  Ptr<CcnxFace> interface = GetFace (i);
   return interface->IsUp ();
 }
 
@@ -285,12 +283,12 @@
 CcnxL3Protocol::SetUp (uint32_t i)
 {
   NS_LOG_FUNCTION (this << i);
-  Ptr<CcnxInterface> interface = GetInterface (i);
+  Ptr<CcnxFace> interface = GetFace (i);
   interface->SetUp ();
 
-  if (m_routingProtocol != 0)
+  if (m_forwardingProtocol != 0)
     {
-      m_routingProtocol->NotifyInterfaceUp (i);
+      m_forwardingProtocol->NotifyInterfaceUp (i);
     }
 }
 
@@ -298,21 +296,21 @@
 CcnxL3Protocol::SetDown (uint32_t ifaceIndex)
 {
   NS_LOG_FUNCTION (this << ifaceIndex);
-  Ptr<CcnxInterface> interface = GetInterface (ifaceIndex);
+  Ptr<CcnxFace> interface = GetFace (ifaceIndex);
   interface->SetDown ();
 
-  if (m_routingProtocol != 0)
+  if (m_forwardingProtocol != 0)
     {
-      m_routingProtocol->NotifyInterfaceDown (ifaceIndex);
+      m_forwardingProtocol->NotifyInterfaceDown (ifaceIndex);
     }
 }
 
 void
-CcnxL3Protocol::RouteInputError (Ptr<const Packet> p, const CcnxHeader & ipHeader, Socket::SocketErrno sockErrno)
+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 (ipHeader, p, DROP_ROUTE_ERROR, m_node->GetObject<Ccnx> (), 0);
+  // 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
diff --git a/model/ccnx-l3-protocol.h b/model/ccnx-l3-protocol.h
index d45f0b3..3af0c9a 100644
--- a/model/ccnx-l3-protocol.h
+++ b/model/ccnx-l3-protocol.h
@@ -1,4 +1,4 @@
-// -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*-
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 //
 // Copyright (c) 2006 Georgia Tech Research Corporation
 //
@@ -26,20 +26,19 @@
 #include <stdint.h>
 #include "ns3/ptr.h"
 #include "ns3/net-device.h"
-#include "ns3/ccnx.h"
 #include "ns3/traced-callback.h"
 
+#include "ccnx.h"
+
 namespace ns3 {
 
 class Packet;
 class NetDevice;
-class CcnxInterface;
-class CcnxRoute;
 class Node;
-class Socket;
+class CcnxFace;
+class CcnxRoute;
 class CcnxForwardingProtocol;
 
-
 /**
  * \brief Implement the Ccnx layer.
  * 
@@ -96,7 +95,7 @@
    * \param to lower layer address of the destination
    * \param packetType type of the packet (broadcast/multicast/unicast/otherhost)
    */
-  void Receive (Ptr<NetDevice> device, Ptr<const Packet> p, uint16_t protocol,
+  void ReceiveFromLower (Ptr<NetDevice> device, Ptr<const Packet> p, uint16_t protocol,
                  const Address &from,
                  const Address &to,
                  NetDevice::PacketType packetType);
@@ -104,7 +103,7 @@
   /**
    * Actual processing of incoming CCNx packets. Also processing packets coming from local apps
    */
-  void Receive (Ptr<CcnxFace> face, Ptr<const Packet> p);
+  void ReceiveAndProcess (Ptr<CcnxFace> face, Ptr<Packet> p);
   
   /**
    * \param packet packet to send
@@ -117,7 +116,7 @@
 
   virtual uint32_t AddFace (Ptr<CcnxFace> face);
   virtual uint32_t GetNFaces (void) const;
-  virtual Ptr<CcnxFace> GetFace (uint32_t face);
+  virtual Ptr<CcnxFace> GetFace (uint32_t face) const;
 
   virtual void SetMetric (uint32_t i, uint16_t metric);
   virtual uint16_t GetMetric (uint32_t i) const;
@@ -144,24 +143,25 @@
    */
   Ptr<CcnxFace> GetFaceForDevice (Ptr<const NetDevice> device) const;
   
-  void RouteInputError (Ptr<const Packet> p, const CcnxHeader & ipHeader, Socket::SocketErrno sockErrno);
+  void RouteInputError (Ptr<Packet> p);
+                        //, Socket::SocketErrno sockErrno);
 
 private:
   typedef std::vector<Ptr<CcnxFace> > CcnxFaceList;
   CcnxFaceList m_faces;
 
   Ptr<Node> m_node;
-  // Ptr<CcnxForwardingProtocol> m_forwardingProtocol;
+  Ptr<CcnxForwardingProtocol> m_forwardingProtocol;
 
-  TracedCallback<const CcnxHeader &, Ptr<const Packet>, uint32_t> m_sendOutgoingTrace;
-  TracedCallback<const CcnxHeader &, Ptr<const Packet>, uint32_t> m_unicastForwardTrace;
-  TracedCallback<const CcnxHeader &, Ptr<const Packet>, uint32_t> m_localDeliverTrace;
+  TracedCallback<Ptr<const Packet>, Ptr<const CcnxFace> > m_sendOutgoingTrace;
+  TracedCallback<Ptr<const Packet>, Ptr<const CcnxFace> > m_unicastForwardTrace;
+  TracedCallback<Ptr<const Packet>, Ptr<const CcnxFace> > m_localDeliverTrace;
 
   // The following two traces pass a packet with an IP header
-  TracedCallback<Ptr<const Packet>, Ptr<Ccnx>,  uint32_t> m_txTrace;
-  TracedCallback<Ptr<const Packet>, Ptr<Ccnx>, uint32_t> m_rxTrace;
+  TracedCallback<Ptr<const Packet>, Ptr<Ccnx>, Ptr<const CcnxFace> > m_txTrace;
+  TracedCallback<Ptr<const Packet>, Ptr<Ccnx>, Ptr<const CcnxFace> > m_rxTrace;
   // <ip-header, payload, reason, ifindex> (ifindex not valid if reason is DROP_NO_ROUTE)
-  TracedCallback<const CcnxHeader &, Ptr<const Packet>, DropReason, Ptr<Ccnx>, uint32_t> m_dropTrace;
+  TracedCallback<Ptr<const Packet>, DropReason, Ptr<const Ccnx>, Ptr<const CcnxFace> > m_dropTrace;
 };
   
 } // Namespace ns3
diff --git a/model/ccnx-l4-protocol.cc b/model/ccnx-l4-protocol.cc
deleted file mode 100644
index 9cdd0a1..0000000
--- a/model/ccnx-l4-protocol.cc
+++ /dev/null
@@ -1,107 +0,0 @@
-// -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*-
-//
-// Copyright (c) 2006 Georgia Tech Research Corporation
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-//
-// Author:
-//
-
-
-#include "ccnx-l4-protocol.h"
-
-#include "ns3/uinteger.h"
-
-NS_LOG_COMPONENT_DEFINE ("CcnxL4Protocol");
-
-namespace ns3 {
-
-NS_OBJECT_ENSURE_REGISTERED (CcnxL4Protocol);
-
-TypeId 
-CcnxL4Protocol::GetTypeId (void)
-{
-  static TypeId tid = TypeId ("ns3::CcnxL4Protocol")
-    .SetParent<Object> ()
-  ;
-  return tid;
-}
-
-CcnxL4Protocol::CcnxL4Protocol ()
-{
-  NS_LOG_FUNCTION_NOARGS ();
-}
-
-CcnxL4Protocol::~CcnxL4Protocol ()
-{
-  NS_LOG_FUNCTION_NOARGS ();
-}
-
-void 
-CcnxL4Protocol::SetNode (Ptr<Node> node)
-{
-  m_node = node;
-}
-
-/*
- * This method is called by AddAgregate and completes the aggregation
- * by setting the node in the udp stack and link it to the ipv4 object
- * present in the node along with the socket factory
- */
-void
-CcnxL4Protocol::NotifyNewAggregate ()
-{
-  if (m_node == 0)
-    {
-      Ptr<Node> node = this->GetObject<Node> ();
-      if (node != 0)
-        {
-          Ptr<Ccnx> ccnx = this->GetObject<Ccnx> ();
-          if (ccnx != 0)
-            {
-              this->SetNode (node);
-              ccnx->Insert (this);
-              // Ptr<UdpSocketFactoryImpl> udpFactory = CreateObject<UdpSocketFactoryImpl> ();
-              // udpFactory->SetUdp (this);
-              // node->AggregateObject (udpFactory);
-              this->SetDownTarget (MakeCallback (&Ccnx::Send, ccnx));
-            }
-        }
-    }
-  Object::NotifyNewAggregate ();
-}
-
-void
-CcnxL4Protocol::DoDispose (void)
-{
-  NS_LOG_FUNCTION_NOARGS ();
-
-  m_node = 0;
-  m_downTarget.Nullify ();
-  CcnxL4Protocol::DoDispose ();
-}
-
-void
-SetDownTarget (DownTargetCallback cb)
-{
-  m_downTarget = cb;
-}
-
-DownTargetCallback
-GetDownTarget (void) const
-{
-  retur m_downTarget;
-}
-
-} //namespace ns3
diff --git a/model/ccnx-l4-protocol.h b/model/ccnx-l4-protocol.h
deleted file mode 100644
index e0a6aed..0000000
--- a/model/ccnx-l4-protocol.h
+++ /dev/null
@@ -1,98 +0,0 @@
-// -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*-
-//
-// Copyright (c) 2006 Georgia Tech Research Corporation
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-//
-// Author:
-//
-
-#ifndef CCNX_L4_PROTOCOL_H
-#define CCNX_L4_PROTOCOL_H
-
-#include "ns3/object.h"
-#include "ns3/callback.h"
-#include "ns3/ccnx-interest-header.h"
-#include "ns3/ccnx-content-object-header.h"
-
-namespace ns3 {
-
-class Packet;
-class CcnxInterface;
-class CcnxRoute;
-
-/**
- * \brief Actual implementation of CCNx protocol 
- */
-class CcnxL4Protocol : public Object
-{
-public:
-  enum RxStatus {
-    RX_OK,
-    
-    // RX_CSUM_FAILED,
-    // RX_ENDPOINT_CLOSED,
-    // RX_ENDPOINT_UNREACH
-  };
-
-  static TypeId GetTypeId (void);
-
-  CcnxL4Protocol ();
-  virtual ~CcnxL4Protocol ();
-
-  void SetNode (Ptr<Node> node);
-
-  /**
-   * \param p packet to forward up
-   * \param header Ccnx Header information
-   * \param incomingInterface the CcnxInterface on which the packet arrived
-   * 
-   * Called from lower-level layers to send the packet up
-   * in the stack. 
-   */
-  virtual enum RxStatus Receive (Ptr<Packet> p,
-                                 CcnxHeader const &header,
-                                 Ptr<CcnxInterface> incomingInterface);
-
-  typedef Callback<void,Ptr<Packet>, Ptr<CcnxRoute> > DownTargetCallback;
-  /**
-   * This method allows a caller to set the current down target callback
-   * set for this L4 protocol
-   *
-   * \param cb current Callback for the L4 protocol
-   */
-  virtual void SetDownTarget (DownTargetCallback cb);
-  /**
-   * This method allows a caller to get the current down target callback
-   * set for this L4 protocol, for
-   *
-   * \return current Callback for the L4 protocol
-   */
-  virtual DownTargetCallback GetDownTarget (void) const;
-
-protected:
-  virtual void DoDispose (void);
-  /*
-   * This function will notify other components connected to the node that a new stack member is now connected
-   * This will be used to notify Layer 3 protocol of layer 4 protocol stack to connect them together.
-   */
-  virtual void NotifyNewAggregate ();
-
-private:
-  DownTargetCallback m_downTarget;
-};
-
-} // Namespace ns3
-
-#endif // CCNX_L4_PROTOCOL_H
diff --git a/model/ccnx-local-face.cc b/model/ccnx-local-face.cc
index aeb2002..d5de90f 100644
--- a/model/ccnx-local-face.cc
+++ b/model/ccnx-local-face.cc
@@ -21,7 +21,6 @@
 
 #include "ccnx-local-face.h"
 
-#include "ns3/ccnx-address.h"
 #include "ns3/ccnx-l3-protocol.h"
 #include "ns3/net-device.h"
 #include "ns3/log.h"
@@ -70,17 +69,15 @@
 void 
 CcnxLocalFace::SetDevice (Ptr<NetDevice> device)
 {
-  assert (false);
+  NS_ASSERT_MSG (false, "It is impossible to set device to LocalFace");
 }
 
 Ptr<NetDevice>
 CcnxLocalFace::GetDevice (void) const
 {
-  assert (false)
+  return 0;
 }
 
-
-
 void
 CcnxLocalFace::Send (Ptr<Packet> p)
 {
diff --git a/model/ccnx-local-face.h b/model/ccnx-local-face.h
index 33d884a..63ea570 100644
--- a/model/ccnx-local-face.h
+++ b/model/ccnx-local-face.h
@@ -1,4 +1,4 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
diff --git a/model/ccnx-route.cc b/model/ccnx-route.cc
index 98e8b7b..987c001 100644
--- a/model/ccnx-route.cc
+++ b/model/ccnx-route.cc
@@ -1,4 +1,4 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2009 University of Washington
  *
diff --git a/model/ccnx-route.h b/model/ccnx-route.h
index c3d7e5e..4d45023 100644
--- a/model/ccnx-route.h
+++ b/model/ccnx-route.h
@@ -1,4 +1,4 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2009 University of Washington
  *
@@ -23,6 +23,7 @@
 #include <map>
 #include <ostream>
 
+#include "ns3/ptr.h"
 #include "ns3/simple-ref-count.h"
 #include "ns3/name-components.h"
 
@@ -64,7 +65,7 @@
   Ptr<CcnxFace> GetOutputFace (void) const;
 
 private:
-  Name::Components m_prefix;
+  Ptr<Name::Components> m_prefix;
   Ptr<CcnxFace> m_outputFace;
 };
 
diff --git a/model/ccnx.h b/model/ccnx.h
index 40e2678..b2cde94 100644
--- a/model/ccnx.h
+++ b/model/ccnx.h
@@ -32,7 +32,7 @@
 class Node;
 class NetDevice;
 class Packet;
-// class CcnxRoutingProtocol;
+class CcnxForwardingProtocol;
 
 /**
  * \ingroup internet
@@ -64,22 +64,22 @@
   virtual ~Ccnx ();
 
   /**
-   * \brief Register a new routing protocol to be used by this Ccnx stack
+   * \brief Register a new forwarding protocol to be used by this Ccnx stack
    *
-   * This call will replace any routing protocol that has been previously 
-   * registered.  If you want to add multiple routing protocols, you must
-   * add them to a CcnxListRoutingProtocol directly.
+   * This call will replace any forwarding protocol that has been previously 
+   * registered.  If you want to add multiple forwarding protocols, you must
+   * add them to a CcnxListForwardingProtocol directly.
    * 
-   * \param routingProtocol smart pointer to CcnxRoutingProtocol object
+   * \param forwardingProtocol smart pointer to CcnxForwardingProtocol object
    */
-  // virtual void SetRoutingProtocol (Ptr<CcnxRoutingProtocol> routingProtocol) = 0;
+  virtual void SetForwardingProtocol (Ptr<CcnxForwardingProtocol> forwardingProtocol) = 0;
 
   /**
-   * \brief Get the routing protocol to be used by this Ccnx stack
+   * \brief Get the forwarding protocol to be used by this Ccnx stack
    * 
-   * \returns smart pointer to CcnxRoutingProtocol object, or null pointer if none
+   * \returns smart pointer to CcnxForwardingProtocol object, or null pointer if none
    */
-  // virtual Ptr<CcnxRoutingProtocol> GetRoutingProtocol (void) const = 0;
+  virtual Ptr<CcnxForwardingProtocol> GetForwardingProtocol (void) const = 0;
 
   /**
    * \param device device to add to the list of Ccnx interfaces
@@ -110,7 +110,7 @@
    * \param face The face number of an Ccnx interface.
    * \returns The CcnxFace associated with the Ccnx face number.
    */
-  virtual Ptr<CcnxFace> GetFace (uint32_t face) = 0;
+  virtual Ptr<CcnxFace> GetFace (uint32_t face) const = 0;
 
   // /**
   //  * \param face CcnxFace object pointer 
@@ -120,14 +120,14 @@
 
   /**
    * \param face The face number of an Ccnx face
-   * \param metric routing metric (cost) associated to the underlying 
+   * \param metric forwarding metric (cost) associated to the underlying 
    *          Ccnx interface
    */
   virtual void SetMetric (uint32_t face, uint16_t metric) = 0;
 
   /**
    * \param face The interface number of an Ccnx interface
-   * \returns routing metric (cost) associated to the underlying 
+   * \returns forwarding metric (cost) associated to the underlying 
    *          Ccnx interface
    */
   virtual uint16_t GetMetric (uint32_t face) const = 0;
diff --git a/model/name-components.cc b/model/name-components.cc
index 319151f..c0e9ea0 100644
--- a/model/name-components.cc
+++ b/model/name-components.cc
@@ -1,4 +1,4 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2011 University of California, Los Angeles
  *
diff --git a/model/name-components.h b/model/name-components.h
index 4e74ad8..6faa38c 100644
--- a/model/name-components.h
+++ b/model/name-components.h
@@ -1,4 +1,4 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2011 University of California, Los Angeles
  *
diff --git a/model/ndnabstraction-header.cc b/model/ndnabstraction-header.cc
index a7ea402..ccb3cf3 100644
--- a/model/ndnabstraction-header.cc
+++ b/model/ndnabstraction-header.cc
@@ -1,4 +1,4 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2011 University of California, Los Angeles
  *
diff --git a/model/ndnabstraction-header.h b/model/ndnabstraction-header.h
index 2cbd4a3..cd172c7 100644
--- a/model/ndnabstraction-header.h
+++ b/model/ndnabstraction-header.h
@@ -1,4 +1,4 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2011 University of California, Los Angeles
  *
