diff --git a/model/ndn-net-device-face.cc b/model/ndn-net-device-face.cc
index 7baa363..f5f38a0 100644
--- a/model/ndn-net-device-face.cc
+++ b/model/ndn-net-device-face.cc
@@ -28,19 +28,21 @@
 #include "ns3/node.h"
 #include "ns3/pointer.h"
 
+// #include "ns3/address.h"
 #include "ns3/point-to-point-net-device.h"
 #include "ns3/channel.h"
 #include "ns3/ndn-name-components.h"
 
-NS_LOG_COMPONENT_DEFINE ("NdnNetDeviceFace");
+NS_LOG_COMPONENT_DEFINE ("ndn.NetDeviceFace");
 
 namespace ns3 {
+namespace ndn {
 
 TypeId
-NdnNetDeviceFace::GetTypeId ()
+NetDeviceFace::GetTypeId ()
 {
-  static TypeId tid = TypeId ("ns3::NdnNetDeviceFace")
-    .SetParent<NdnFace> ()
+  static TypeId tid = TypeId ("ns3::ndn::NetDeviceFace")
+    .SetParent<Face> ()
     .SetGroupName ("Ndn")
     ;
   return tid;
@@ -50,46 +52,46 @@
  * By default, Ndn face are created in the "down" state.  Before
  * becoming useable, the user must invoke SetUp on the face
  */
-NdnNetDeviceFace::NdnNetDeviceFace (Ptr<Node> node, const Ptr<NetDevice> &netDevice)
-  : NdnFace (node)
+NetDeviceFace::NetDeviceFace (Ptr<Node> node, const Ptr<NetDevice> &netDevice)
+  : Face (node)
   , m_netDevice (netDevice)
 {
   NS_LOG_FUNCTION (this << netDevice);
 
   SetMetric (1); // default metric
 
-  NS_ASSERT_MSG (m_netDevice != 0, "NdnNetDeviceFace needs to be assigned a valid NetDevice");
+  NS_ASSERT_MSG (m_netDevice != 0, "NetDeviceFace needs to be assigned a valid NetDevice");
 }
 
-NdnNetDeviceFace::~NdnNetDeviceFace ()
+NetDeviceFace::~NetDeviceFace ()
 {
   NS_LOG_FUNCTION_NOARGS ();
 }
 
-NdnNetDeviceFace& NdnNetDeviceFace::operator= (const NdnNetDeviceFace &)
+NetDeviceFace& NetDeviceFace::operator= (const NetDeviceFace &)
 {
   return *this;
 }
 
 Ptr<NetDevice>
-NdnNetDeviceFace::GetNetDevice () const
+NetDeviceFace::GetNetDevice () const
 {
   return m_netDevice;
 }
 
 void
-NdnNetDeviceFace::RegisterProtocolHandler (ProtocolHandler handler)
+NetDeviceFace::RegisterProtocolHandler (ProtocolHandler handler)
 {
   NS_LOG_FUNCTION (this);
 
-  NdnFace::RegisterProtocolHandler (handler);
+  Face::RegisterProtocolHandler (handler);
   
-  m_node->RegisterProtocolHandler (MakeCallback (&NdnNetDeviceFace::ReceiveFromNetDevice, this),
-                                   NdnL3Protocol::ETHERNET_FRAME_TYPE, m_netDevice, true/*promiscuous mode*/);
+  m_node->RegisterProtocolHandler (MakeCallback (&NetDeviceFace::ReceiveFromNetDevice, this),
+                                   L3Protocol::ETHERNET_FRAME_TYPE, m_netDevice, true/*promiscuous mode*/);
 }
 
 bool
-NdnNetDeviceFace::SendImpl (Ptr<Packet> packet)
+NetDeviceFace::SendImpl (Ptr<Packet> packet)
 {
   NS_LOG_FUNCTION (this << packet);
   
@@ -99,18 +101,18 @@
                  << " for Ndn; fragmentation not supported");
 
   bool ok = m_netDevice->Send (packet, m_netDevice->GetBroadcast (), 
-                               NdnL3Protocol::ETHERNET_FRAME_TYPE);
+                               L3Protocol::ETHERNET_FRAME_TYPE);
   return ok;
 }
 
 // callback
 void
-NdnNetDeviceFace::ReceiveFromNetDevice (Ptr<NetDevice> device,
-                                         Ptr<const Packet> p,
-                                         uint16_t protocol,
-                                         const Address &from,
-                                         const Address &to,
-                                         NetDevice::PacketType packetType)
+NetDeviceFace::ReceiveFromNetDevice (Ptr<NetDevice> device,
+                                     Ptr<const Packet> p,
+                                     uint16_t protocol,
+                                     const Address &from,
+                                     const Address &to,
+                                     NetDevice::PacketType packetType)
 {
   NS_LOG_FUNCTION (device << p << protocol << from << to << packetType);
   Receive (p);
@@ -118,15 +120,20 @@
 
 
 std::ostream&
-NdnNetDeviceFace::Print (std::ostream& os) const
+NetDeviceFace::Print (std::ostream& os) const
 {
+#ifdef NS3_LOG_ENABLE
   os << "dev[" << GetNode ()->GetId () << "]=net(" << GetId () << ",";
   os << DynamicCast<PointToPointNetDevice> (m_netDevice)->GetChannel ()->GetDevice (0)->GetNode ()->GetId ();
   os << "-";
   os << DynamicCast<PointToPointNetDevice> (m_netDevice)->GetChannel ()->GetDevice (1)->GetNode ()->GetId ();
   os << ")";
+#else
+  os << "dev=net(" << GetId () << ")";
+#endif  
   return os;
 }
 
-}; // namespace ns3
+} // namespace ndnsim
+} // namespace ns3
 
