diff --git a/utils/load-stats-node.cc b/utils/load-stats-node.cc
index 8775a22..9514a84 100644
--- a/utils/load-stats-node.cc
+++ b/utils/load-stats-node.cc
@@ -19,7 +19,7 @@
  */
 
 #include "load-stats-node.h"
-#include "ns3/ccnx-face.h"
+#include "ns3/ndn-face.h"
 #include "ns3/log.h"
 #include <boost/lambda/lambda.hpp>
 #include <boost/lambda/bind.hpp>
@@ -62,13 +62,13 @@
 }
 
 void
-LoadStatsNode::AddIncoming (ns3::Ptr<ns3::CcnxFace> face)
+LoadStatsNode::AddIncoming (ns3::Ptr<ns3::NdnFace> face)
 {
   m_incoming [face].count ()++;
 }
 
 void
-LoadStatsNode::AddOutgoing (ns3::Ptr<ns3::CcnxFace> face)
+LoadStatsNode::AddOutgoing (ns3::Ptr<ns3::NdnFace> face)
 {
   m_outgoing [face].count ()++;
 }
@@ -114,14 +114,14 @@
 }
 
 void
-LoadStatsNode::Rx (ns3::Ptr<ns3::CcnxFace> face, uint32_t amount)
+LoadStatsNode::Rx (ns3::Ptr<ns3::NdnFace> face, uint32_t amount)
 {
   m_pit.rx () += amount;
   m_incoming [face].rx () += amount;
 }
 
 void
-LoadStatsNode::Tx (ns3::Ptr<ns3::CcnxFace> face, uint32_t amount)
+LoadStatsNode::Tx (ns3::Ptr<ns3::NdnFace> face, uint32_t amount)
 {
   m_pit.tx () += amount;
   m_outgoing [face].tx () += amount;
@@ -187,7 +187,7 @@
 
 
 void
-LoadStatsNode::RemoveFace (ns3::Ptr<ns3::CcnxFace> face)
+LoadStatsNode::RemoveFace (ns3::Ptr<ns3::NdnFace> face)
 {
   NS_LOG_FUNCTION (this);
   m_incoming.erase (face);
diff --git a/utils/load-stats-node.h b/utils/load-stats-node.h
index a4d6d87..b0b580d 100644
--- a/utils/load-stats-node.h
+++ b/utils/load-stats-node.h
@@ -27,7 +27,7 @@
 
 namespace ns3
 {
-class CcnxFace;
+class NdnFace;
 }
 
 namespace ndnSIM
@@ -38,7 +38,7 @@
 class LoadStatsNode
 {
 public:
-  typedef std::map< ns3::Ptr<ns3::CcnxFace>, LoadStatsFace > stats_container;
+  typedef std::map< ns3::Ptr<ns3::NdnFace>, LoadStatsFace > stats_container;
 
   LoadStatsNode () {}
   LoadStatsNode (const LoadStatsNode &) {}
@@ -56,13 +56,13 @@
    * Increment counter to incoming list
    */
   void
-  AddIncoming (ns3::Ptr<ns3::CcnxFace> face);
+  AddIncoming (ns3::Ptr<ns3::NdnFace> face);
 
   /**
    * Increment counter to outgoing list
    */
   void
-  AddOutgoing (ns3::Ptr<ns3::CcnxFace> face);
+  AddOutgoing (ns3::Ptr<ns3::NdnFace> face);
 
   /**
    * Increment counter to both incoming and outgoing lists, for all faces
@@ -80,13 +80,13 @@
    * Increment counter for Tx amount
    */
   void
-  Rx (ns3::Ptr<ns3::CcnxFace> face, uint32_t amount);
+  Rx (ns3::Ptr<ns3::NdnFace> face, uint32_t amount);
 
   /**
    * Increment counter for Tx amount
    */
   void
-  Tx (ns3::Ptr<ns3::CcnxFace> face, uint32_t amount);
+  Tx (ns3::Ptr<ns3::NdnFace> face, uint32_t amount);
 
   LoadStatsNode &
   operator += (const LoadStatsNode &stats);
@@ -120,7 +120,7 @@
   }
 
   void
-  RemoveFace (ns3::Ptr<ns3::CcnxFace> face);
+  RemoveFace (ns3::Ptr<ns3::NdnFace> face);
   
 private:
   LoadStatsFace   m_pit;
diff --git a/utils/stats-tree.cc b/utils/stats-tree.cc
index d83b881..7a7116c 100644
--- a/utils/stats-tree.cc
+++ b/utils/stats-tree.cc
@@ -19,7 +19,7 @@
  */
 
 #include "stats-tree.h"
-#include "ns3/ccnx-face.h"
+#include "ns3/ndn-face.h"
 #include "ns3/log.h"
 
 using namespace ns3;
@@ -48,7 +48,7 @@
 }
 
 void
-StatsTree::NewPitEntry (const ns3::CcnxNameComponents &key)
+StatsTree::NewPitEntry (const ns3::NdnNameComponents &key)
 {
   std::pair<tree_type::iterator, bool> item = m_tree.insert (key, LoadStatsNode ());
 
@@ -56,7 +56,7 @@
 }
 
 void
-StatsTree::Incoming (const CcnxNameComponents &key, Ptr<CcnxFace> face)
+StatsTree::Incoming (const NdnNameComponents &key, Ptr<NdnFace> face)
 {
   std::pair<tree_type::iterator, bool> item = m_tree.insert (key, LoadStatsNode ());
 
@@ -64,7 +64,7 @@
 }
 
 void
-StatsTree::Outgoing (const CcnxNameComponents &key, Ptr<CcnxFace> face)
+StatsTree::Outgoing (const NdnNameComponents &key, Ptr<NdnFace> face)
 {
   std::pair<tree_type::iterator, bool> item = m_tree.insert (key, LoadStatsNode ());
 
@@ -72,7 +72,7 @@
 }
 
 void
-StatsTree::Satisfy (const CcnxNameComponents &key)
+StatsTree::Satisfy (const NdnNameComponents &key)
 {
   std::pair<tree_type::iterator, bool> item = m_tree.insert (key, LoadStatsNode ());
 
@@ -80,7 +80,7 @@
 }
 
 void
-StatsTree::Timeout (const CcnxNameComponents &key)
+StatsTree::Timeout (const NdnNameComponents &key)
 {
   std::pair<tree_type::iterator, bool> item = m_tree.insert (key, LoadStatsNode ());
 
@@ -88,7 +88,7 @@
 }
 
 void
-StatsTree::Rx (const ns3::CcnxNameComponents &key, ns3::Ptr<ns3::CcnxFace> face, uint32_t amount)
+StatsTree::Rx (const ns3::NdnNameComponents &key, ns3::Ptr<ns3::NdnFace> face, uint32_t amount)
 {
   std::pair<tree_type::iterator, bool> item = m_tree.insert (key, LoadStatsNode ());
 
@@ -96,7 +96,7 @@
 }
 
 void
-StatsTree::Tx (const ns3::CcnxNameComponents &key, ns3::Ptr<ns3::CcnxFace> face, uint32_t amount)
+StatsTree::Tx (const ns3::NdnNameComponents &key, ns3::Ptr<ns3::NdnFace> face, uint32_t amount)
 {
   std::pair<tree_type::iterator, bool> item = m_tree.insert (key, LoadStatsNode ());
 
@@ -104,9 +104,9 @@
 }
 
 // const LoadStatsNode &
-// StatsTree::Get (const ns3::CcnxNameComponents &key) const
+// StatsTree::Get (const ns3::NdnNameComponents &key) const
 const LoadStatsNode &
-StatsTree::operator [] (const ns3::CcnxNameComponents &key) const
+StatsTree::operator [] (const ns3::NdnNameComponents &key) const
 {
   tree_type::iterator foundItem, lastItem;
   bool reachLast;
@@ -138,7 +138,7 @@
 }
 
 void
-StatsTree::RemoveFace (ns3::Ptr<ns3::CcnxFace> face)
+StatsTree::RemoveFace (ns3::Ptr<ns3::NdnFace> face)
 {
   tree_type::recursive_iterator item (&m_tree), end;
   for (; item != end; item ++)
diff --git a/utils/stats-tree.h b/utils/stats-tree.h
index 1bb128b..c6bf97a 100644
--- a/utils/stats-tree.h
+++ b/utils/stats-tree.h
@@ -23,7 +23,7 @@
 
 #include "trie.h"
 #include "load-stats-node.h"
-#include "ns3/ccnx-name-components.h"
+#include "ns3/ndn-name-components.h"
 #include "ns3/ptr.h"
 
 namespace ndnSIM
@@ -32,7 +32,7 @@
 class StatsTree
 {
 public:
-  typedef trie< ns3::CcnxNameComponents,
+  typedef trie< ns3::NdnNameComponents,
                 non_pointer_traits< LoadStatsNode >, void* > tree_type;
   
   StatsTree ();
@@ -41,33 +41,33 @@
   Step ();
   
   void
-  NewPitEntry (const ns3::CcnxNameComponents &key);
+  NewPitEntry (const ns3::NdnNameComponents &key);
 
   void
-  Incoming (const ns3::CcnxNameComponents &key, ns3::Ptr<ns3::CcnxFace> face);
+  Incoming (const ns3::NdnNameComponents &key, ns3::Ptr<ns3::NdnFace> face);
 
   void
-  Outgoing (const ns3::CcnxNameComponents &key, ns3::Ptr<ns3::CcnxFace> face);
+  Outgoing (const ns3::NdnNameComponents &key, ns3::Ptr<ns3::NdnFace> face);
 
   void
-  Satisfy (const ns3::CcnxNameComponents &key);
+  Satisfy (const ns3::NdnNameComponents &key);
 
   void
-  Timeout (const ns3::CcnxNameComponents &key);
+  Timeout (const ns3::NdnNameComponents &key);
 
   void
-  Rx (const ns3::CcnxNameComponents &key, ns3::Ptr<ns3::CcnxFace> face, uint32_t amount);
+  Rx (const ns3::NdnNameComponents &key, ns3::Ptr<ns3::NdnFace> face, uint32_t amount);
 
   void
-  Tx (const ns3::CcnxNameComponents &key, ns3::Ptr<ns3::CcnxFace> face, uint32_t amount);
+  Tx (const ns3::NdnNameComponents &key, ns3::Ptr<ns3::NdnFace> face, uint32_t amount);
 
   // const LoadStatsNode &
-  // Get (const ns3::CcnxNameComponents &key) const;
+  // Get (const ns3::NdnNameComponents &key) const;
   const LoadStatsNode &
-  operator [] (const ns3::CcnxNameComponents &key) const;
+  operator [] (const ns3::NdnNameComponents &key) const;
 
   void
-  RemoveFace (ns3::Ptr<ns3::CcnxFace> face);
+  RemoveFace (ns3::Ptr<ns3::NdnFace> face);
   
 private:
   const LoadStatsNode &
