Another set of refactoring
diff --git a/model/fib/ndn-fib-entry.cc b/model/fib/ndn-fib-entry.cc
index 965886f..01e2970 100644
--- a/model/fib/ndn-fib-entry.cc
+++ b/model/fib/ndn-fib-entry.cc
@@ -32,30 +32,25 @@
 #include <boost/lambda/bind.hpp>
 namespace ll = boost::lambda;
 
-NS_LOG_COMPONENT_DEFINE ("NdnFibEntry");
+NS_LOG_COMPONENT_DEFINE ("ndn.fib.Entry");
 
-namespace ns3
-{
+namespace ns3 {
+namespace ndn {
+namespace fib {
 
 //////////////////////////////////////////////////////////////////////
 // Helpers
 //////////////////////////////////////////////////////////////////////
-namespace __ndn_private {
 
-struct NdnFibFaceMetricByFace
+struct FaceMetricByFace
 {
-  typedef NdnFibFaceMetricContainer::type::index<i_face>::type
+  typedef FaceMetricContainer::type::index<i_face>::type
   type;
 };
 
-}
-//////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////
-
-using namespace __ndn_private;
 
 void
-NdnFibFaceMetric::UpdateRtt (const Time &rttSample)
+FaceMetric::UpdateRtt (const Time &rttSample)
 {
   // const Time & this->m_rttSample
   
@@ -78,56 +73,56 @@
 /////////////////////////////////////////////////////////////////////
 
 void
-NdnFibEntry::UpdateFaceRtt (Ptr<NdnFace> face, const Time &sample)
+Entry::UpdateFaceRtt (Ptr<Face> face, const Time &sample)
 {
-  NdnFibFaceMetricByFace::type::iterator record = m_faces.get<i_face> ().find (face);
+  FaceMetricByFace::type::iterator record = m_faces.get<i_face> ().find (face);
   NS_ASSERT_MSG (record != m_faces.get<i_face> ().end (),
                  "Update status can be performed only on existing faces of CcxnFibEntry");
 
   m_faces.modify (record,
-                  ll::bind (&NdnFibFaceMetric::UpdateRtt, ll::_1, sample));
+                  ll::bind (&FaceMetric::UpdateRtt, ll::_1, sample));
 
   // reordering random access index same way as by metric index
   m_faces.get<i_nth> ().rearrange (m_faces.get<i_metric> ().begin ());
 }
 
 void
-NdnFibEntry::UpdateStatus (Ptr<NdnFace> face, NdnFibFaceMetric::Status status)
+Entry::UpdateStatus (Ptr<Face> face, FaceMetric::Status status)
 {
   NS_LOG_FUNCTION (this << boost::cref(*face) << status);
 
-  NdnFibFaceMetricByFace::type::iterator record = m_faces.get<i_face> ().find (face);
+  FaceMetricByFace::type::iterator record = m_faces.get<i_face> ().find (face);
   NS_ASSERT_MSG (record != m_faces.get<i_face> ().end (),
                  "Update status can be performed only on existing faces of CcxnFibEntry");
 
   m_faces.modify (record,
-                  (&ll::_1)->*&NdnFibFaceMetric::m_status = status);
+                  (&ll::_1)->*&FaceMetric::m_status = status);
 
   // reordering random access index same way as by metric index
   m_faces.get<i_nth> ().rearrange (m_faces.get<i_metric> ().begin ());
 }
 
 void
-NdnFibEntry::AddOrUpdateRoutingMetric (Ptr<NdnFace> face, int32_t metric)
+Entry::AddOrUpdateRoutingMetric (Ptr<Face> face, int32_t metric)
 {
   NS_LOG_FUNCTION (this);
   NS_ASSERT_MSG (face != NULL, "Trying to Add or Update NULL face");
 
-  NdnFibFaceMetricByFace::type::iterator record = m_faces.get<i_face> ().find (face);
+  FaceMetricByFace::type::iterator record = m_faces.get<i_face> ().find (face);
   if (record == m_faces.get<i_face> ().end ())
     {
-      m_faces.insert (NdnFibFaceMetric (face, metric));
+      m_faces.insert (FaceMetric (face, metric));
     }
   else
   {
     // don't update metric to higher value
-    if (record->m_routingCost > metric || record->m_status == NdnFibFaceMetric::NDN_FIB_RED)
+    if (record->m_routingCost > metric || record->m_status == FaceMetric::NDN_FIB_RED)
       {
         m_faces.modify (record,
-                        (&ll::_1)->*&NdnFibFaceMetric::m_routingCost = metric);
+                        (&ll::_1)->*&FaceMetric::m_routingCost = metric);
 
         m_faces.modify (record,
-                        (&ll::_1)->*&NdnFibFaceMetric::m_status = NdnFibFaceMetric::NDN_FIB_YELLOW);
+                        (&ll::_1)->*&FaceMetric::m_status = FaceMetric::NDN_FIB_YELLOW);
       }
   }
   
@@ -136,31 +131,31 @@
 }
 
 void
-NdnFibEntry::Invalidate ()
+Entry::Invalidate ()
 {
-  for (NdnFibFaceMetricByFace::type::iterator face = m_faces.begin ();
+  for (FaceMetricByFace::type::iterator face = m_faces.begin ();
        face != m_faces.end ();
        face++)
     {
       m_faces.modify (face,
-                      (&ll::_1)->*&NdnFibFaceMetric::m_routingCost = std::numeric_limits<uint16_t>::max ());
+                      (&ll::_1)->*&FaceMetric::m_routingCost = std::numeric_limits<uint16_t>::max ());
 
       m_faces.modify (face,
-                      (&ll::_1)->*&NdnFibFaceMetric::m_status = NdnFibFaceMetric::NDN_FIB_RED);
+                      (&ll::_1)->*&FaceMetric::m_status = FaceMetric::NDN_FIB_RED);
     }
 }
 
-const NdnFibFaceMetric &
-NdnFibEntry::FindBestCandidate (uint32_t skip/* = 0*/) const
+const FaceMetric &
+Entry::FindBestCandidate (uint32_t skip/* = 0*/) const
 {
-  if (m_faces.size () == 0) throw NdnFibEntry::NoFaces ();
+  if (m_faces.size () == 0) throw Entry::NoFaces ();
   skip = skip % m_faces.size();
   return m_faces.get<i_nth> () [skip];
 }
 
-std::ostream& operator<< (std::ostream& os, const NdnFibEntry &entry)
+std::ostream& operator<< (std::ostream& os, const Entry &entry)
 {
-  for (NdnFibFaceMetricContainer::type::index<i_nth>::type::iterator metric =
+  for (FaceMetricContainer::type::index<i_nth>::type::iterator metric =
          entry.m_faces.get<i_nth> ().begin ();
        metric != entry.m_faces.get<i_nth> ().end ();
        metric++)
@@ -173,7 +168,7 @@
   return os;
 }
 
-std::ostream& operator<< (std::ostream& os, const NdnFibFaceMetric &metric)
+std::ostream& operator<< (std::ostream& os, const FaceMetric &metric)
 {
   static const std::string statusString[] = {"","g","y","r"};
 
@@ -181,5 +176,6 @@
   return os;
 }
 
-
-} // ns3
+} // namespace fib
+} // namespace ndn
+} // namespace ns3
diff --git a/model/fib/ndn-fib-entry.h b/model/fib/ndn-fib-entry.h
index cf8cbe6..532120f 100644
--- a/model/fib/ndn-fib-entry.h
+++ b/model/fib/ndn-fib-entry.h
@@ -23,8 +23,8 @@
 
 #include "ns3/ptr.h"
 #include "ns3/nstime.h"
-#include "ns3/ndn.h"
 #include "ns3/ndn-face.h"
+#include "ns3/ndn-name-components.h"
 
 #include <boost/multi_index_container.hpp>
 #include <boost/multi_index/tag.hpp>
@@ -35,16 +35,18 @@
 #include <boost/multi_index/member.hpp>
 #include <boost/multi_index/mem_fun.hpp>
 
-namespace ns3
-{
+namespace ns3 {
+namespace ndn {
 
-class NdnNameComponents;
+class NameComponents;
+
+namespace fib {
 
 /**
  * \ingroup ndn
  * \brief Structure holding various parameters associated with a (FibEntry, Face) tuple
  */
-class NdnFibFaceMetric
+class FaceMetric
 {
 public:
   /**
@@ -60,7 +62,7 @@
    * \param face Face for which metric
    * \param cost Initial value for routing cost
    */
-  NdnFibFaceMetric (Ptr<NdnFace> face, int32_t cost)
+  FaceMetric (Ptr<Face> face, int32_t cost)
     : m_face (face)
     , m_status (NDN_FIB_YELLOW)
     , m_routingCost (cost)
@@ -72,18 +74,18 @@
    * \brief Comparison operator used by boost::multi_index::identity<>
    */
   bool
-  operator< (const NdnFibFaceMetric &fm) const { return *m_face < *fm.m_face; } // return identity of the face
+  operator< (const FaceMetric &fm) const { return *m_face < *fm.m_face; } // return identity of the face
 
   /**
-   * @brief Comparison between NdnFibFaceMetric and NdnFace
+   * @brief Comparison between FaceMetric and Face
    */
   bool
-  operator< (const Ptr<NdnFace> &face) const { return *m_face < *face; } 
+  operator< (const Ptr<Face> &face) const { return *m_face < *face; } 
 
   /**
-   * @brief Return NdnFace associated with NdnFibFaceMetric
+   * @brief Return Face associated with FaceMetric
    */
-  Ptr<NdnFace>
+  Ptr<Face>
   GetFace () const { return m_face; }
 
   /**
@@ -94,9 +96,9 @@
   UpdateRtt (const Time &rttSample);
   
 private:
-  friend std::ostream& operator<< (std::ostream& os, const NdnFibFaceMetric &metric);
+  friend std::ostream& operator<< (std::ostream& os, const FaceMetric &metric);
 public:
-  Ptr<NdnFace> m_face; ///< Face
+  Ptr<Face> m_face; ///< Face
   
   Status m_status;		///< \brief Status of the next hop: 
 				///<		- NDN_FIB_GREEN
@@ -109,9 +111,16 @@
   Time m_rttVar;       ///< \brief round-trip time variation
 };
 
+/// @cond include_hidden
+class i_face {};
+class i_metric {};
+class i_nth {};
+/// @endcond
+
+
 /**
  * \ingroup ndn
- * \brief Typedef for indexed face container of NdnFibEntry
+ * \brief Typedef for indexed face container of Entry
  *
  * Currently, there are 2 indexes:
  * - by face (used to find record and update metric)
@@ -119,31 +128,31 @@
  * - random access index (for fast lookup on nth face). Order is
  *   maintained manually to be equal to the 'by metric' order
  */
-struct NdnFibFaceMetricContainer
+struct FaceMetricContainer
 {
   /// @cond include_hidden
   typedef boost::multi_index::multi_index_container<
-    NdnFibFaceMetric,
+    FaceMetric,
     boost::multi_index::indexed_by<
-      // For fast access to elements using NdnFace
+      // For fast access to elements using Face
       boost::multi_index::ordered_unique<
-        boost::multi_index::tag<__ndn_private::i_face>,
-        boost::multi_index::member<NdnFibFaceMetric,Ptr<NdnFace>,&NdnFibFaceMetric::m_face>
+        boost::multi_index::tag<i_face>,
+        boost::multi_index::member<FaceMetric,Ptr<Face>,&FaceMetric::m_face>
       >,
 
       // List of available faces ordered by (status, m_routingCost)
       boost::multi_index::ordered_non_unique<
-        boost::multi_index::tag<__ndn_private::i_metric>,
+        boost::multi_index::tag<i_metric>,
         boost::multi_index::composite_key<
-          NdnFibFaceMetric,
-          boost::multi_index::member<NdnFibFaceMetric,NdnFibFaceMetric::Status,&NdnFibFaceMetric::m_status>,
-          boost::multi_index::member<NdnFibFaceMetric,int32_t,&NdnFibFaceMetric::m_routingCost>
+          FaceMetric,
+          boost::multi_index::member<FaceMetric,FaceMetric::Status,&FaceMetric::m_status>,
+          boost::multi_index::member<FaceMetric,int32_t,&FaceMetric::m_routingCost>
         >
       >,
 
       // To optimize nth candidate selection (sacrifice a little bit space to gain speed)
       boost::multi_index::random_access<
-        boost::multi_index::tag<__ndn_private::i_nth>
+        boost::multi_index::tag<i_nth>
       >
     >
    > type;
@@ -155,7 +164,7 @@
  * \brief Structure for FIB table entry, holding indexed list of
  *        available faces and their respective metrics
  */
-class NdnFibEntry : public SimpleRefCount<NdnFibEntry>
+class Entry : public SimpleRefCount<Entry>
 {
 public:
   class NoFaces {}; ///< @brief Exception class for the case when FIB entry is not found
@@ -164,7 +173,7 @@
    * \brief Constructor
    * \param prefix smart pointer to the prefix for the FIB entry
    */
-  NdnFibEntry (const Ptr<const NdnNameComponents> &prefix)
+  Entry (const Ptr<const NameComponents> &prefix)
   : m_prefix (prefix)
   , m_needsProbing (false)
   { }
@@ -173,14 +182,14 @@
    * \brief Update status of FIB next hop
    * \param status Status to set on the FIB entry
    */
-  void UpdateStatus (Ptr<NdnFace> face, NdnFibFaceMetric::Status status);
+  void UpdateStatus (Ptr<Face> face, FaceMetric::Status status);
 
   /**
    * \brief Add or update routing metric of FIB next hop
    *
    * Initial status of the next hop is set to YELLOW
    */
-  void AddOrUpdateRoutingMetric (Ptr<NdnFace> face, int32_t metric);
+  void AddOrUpdateRoutingMetric (Ptr<Face> face, int32_t metric);
 
   /**
    * @brief Invalidate face
@@ -194,44 +203,46 @@
    * @brief Update RTT averages for the face
    */
   void
-  UpdateFaceRtt (Ptr<NdnFace> face, const Time &sample);
+  UpdateFaceRtt (Ptr<Face> face, const Time &sample);
   
   /**
    * \brief Get prefix for the FIB entry
    */
-  const NdnNameComponents&
+  const NameComponents&
   GetPrefix () const { return *m_prefix; }
 
   /**
    * \brief Find "best route" candidate, skipping `skip' first candidates (modulo # of faces)
    *
-   * throws NdnFibEntry::NoFaces if m_faces.size()==0
+   * throws Entry::NoFaces if m_faces.size()==0
    */
-  const NdnFibFaceMetric &
+  const FaceMetric &
   FindBestCandidate (uint32_t skip = 0) const;
 
   /**
    * @brief Remove record associated with `face`
    */
   void
-  RemoveFace (const Ptr<NdnFace> &face)
+  RemoveFace (const Ptr<Face> &face)
   {
     m_faces.erase (face);
   }
 	
 private:
-  friend std::ostream& operator<< (std::ostream& os, const NdnFibEntry &entry);
+  friend std::ostream& operator<< (std::ostream& os, const Entry &entry);
 
 public:
-  Ptr<const NdnNameComponents> m_prefix; ///< \brief Prefix of the FIB entry
-  NdnFibFaceMetricContainer::type m_faces; ///< \brief Indexed list of faces
+  Ptr<const NameComponents> m_prefix; ///< \brief Prefix of the FIB entry
+  FaceMetricContainer::type m_faces; ///< \brief Indexed list of faces
 
   bool m_needsProbing;      ///< \brief flag indicating that probing should be performed 
 };
 
-std::ostream& operator<< (std::ostream& os, const NdnFibEntry &entry);
-std::ostream& operator<< (std::ostream& os, const NdnFibFaceMetric &metric);
+std::ostream& operator<< (std::ostream& os, const Entry &entry);
+std::ostream& operator<< (std::ostream& os, const FaceMetric &metric);
 
-} // ns3
+} // namespace fib
+} // namespace ndn
+} // namespace ns3
 
 #endif // _NDN_FIB_ENTRY_H_
diff --git a/model/fib/ndn-fib-impl.cc b/model/fib/ndn-fib-impl.cc
index 747c689..a55e9fd 100644
--- a/model/fib/ndn-fib-impl.cc
+++ b/model/fib/ndn-fib-impl.cc
@@ -34,43 +34,45 @@
 #include <boost/lambda/bind.hpp>
 namespace ll = boost::lambda;
 
-NS_LOG_COMPONENT_DEFINE ("NdnFibImpl");
+NS_LOG_COMPONENT_DEFINE ("ndn.fib.FibImpl");
 
 namespace ns3 {
+namespace ndn {
+namespace fib {
 
-NS_OBJECT_ENSURE_REGISTERED (NdnFibImpl);
+NS_OBJECT_ENSURE_REGISTERED (FibImpl);
 
 TypeId 
-NdnFibImpl::GetTypeId (void)
+FibImpl::GetTypeId (void)
 {
-  static TypeId tid = TypeId ("ns3::NdnFib") // cheating ns3 object system
-    .SetParent<NdnFib> ()
+  static TypeId tid = TypeId ("ns3::ndn::fib::Default") // cheating ns3 object system
+    .SetParent<Fib> ()
     .SetGroupName ("Ndn")
-    .AddConstructor<NdnFibImpl> ()
+    .AddConstructor<FibImpl> ()
   ;
   return tid;
 }
 
-NdnFibImpl::NdnFibImpl ()
+FibImpl::FibImpl ()
 {
 }
 
 void
-NdnFibImpl::NotifyNewAggregate ()
+FibImpl::NotifyNewAggregate ()
 {
   Object::NotifyNewAggregate ();
 }
 
 void 
-NdnFibImpl::DoDispose (void)
+FibImpl::DoDispose (void)
 {
   clear ();
   Object::DoDispose ();
 }
 
 
-Ptr<NdnFibEntry>
-NdnFibImpl::LongestPrefixMatch (const NdnInterestHeader &interest)
+Ptr<Entry>
+FibImpl::LongestPrefixMatch (const InterestHeader &interest)
 {
   super::iterator item = super::longest_prefix_match (interest.GetName ());
   // @todo use predicate to search with exclude filters
@@ -82,14 +84,14 @@
 }
 
 
-Ptr<NdnFibEntry>
-NdnFibImpl::Add (const NdnNameComponents &prefix, Ptr<NdnFace> face, int32_t metric)
+Ptr<Entry>
+FibImpl::Add (const NameComponents &prefix, Ptr<Face> face, int32_t metric)
 {
-  return Add (Create<NdnNameComponents> (prefix), face, metric);
+  return Add (Create<NameComponents> (prefix), face, metric);
 }
   
-Ptr<NdnFibEntry>
-NdnFibImpl::Add (const Ptr<const NdnNameComponents> &prefix, Ptr<NdnFace> face, int32_t metric)
+Ptr<Entry>
+FibImpl::Add (const Ptr<const NameComponents> &prefix, Ptr<Face> face, int32_t metric)
 {
   NS_LOG_FUNCTION (this->GetObject<Node> ()->GetId () << boost::cref(*prefix) << boost::cref(*face) << metric);
 
@@ -99,13 +101,13 @@
     {
       if (result.second)
         {
-            Ptr<NdnFibEntryImpl> newEntry = Create<NdnFibEntryImpl> (prefix);
+            Ptr<EntryImpl> newEntry = Create<EntryImpl> (prefix);
             newEntry->SetTrie (result.first);
             result.first->set_payload (newEntry);
         }
   
       super::modify (result.first,
-                     ll::bind (&NdnFibEntry::AddOrUpdateRoutingMetric, ll::_1, face, metric));
+                     ll::bind (&Entry::AddOrUpdateRoutingMetric, ll::_1, face, metric));
     
       return result.first->payload ();
     }
@@ -114,7 +116,7 @@
 }
 
 void
-NdnFibImpl::Remove (const Ptr<const NdnNameComponents> &prefix)
+FibImpl::Remove (const Ptr<const NameComponents> &prefix)
 {
   NS_LOG_FUNCTION (this->GetObject<Node> ()->GetId () << boost::cref(*prefix));
 
@@ -122,7 +124,7 @@
 }
 
 // void
-// NdnFibImpl::Invalidate (const Ptr<const NdnNameComponents> &prefix)
+// FibImpl::Invalidate (const Ptr<const NameComponents> &prefix)
 // {
 //   NS_LOG_FUNCTION (this->GetObject<Node> ()->GetId () << boost::cref(*prefix));
 
@@ -134,11 +136,11 @@
 //     return; // nothing to invalidate
 
 //   super::modify (lastItem,
-//                  ll::bind (&NdnFibEntry::Invalidate, ll::_1));
+//                  ll::bind (&Entry::Invalidate, ll::_1));
 // }
 
 void
-NdnFibImpl::InvalidateAll ()
+FibImpl::InvalidateAll ()
 {
   NS_LOG_FUNCTION (this->GetObject<Node> ()->GetId ());
 
@@ -149,28 +151,28 @@
       if (item->payload () == 0) continue;
 
       super::modify (&(*item),
-                     ll::bind (&NdnFibEntry::Invalidate, ll::_1));
+                     ll::bind (&Entry::Invalidate, ll::_1));
     }
 }
 
 void
-NdnFibImpl::RemoveFace (super::parent_trie &item, Ptr<NdnFace> face)
+FibImpl::RemoveFace (super::parent_trie &item, Ptr<Face> face)
 {
   if (item.payload () == 0) return;
   NS_LOG_FUNCTION (this);
 
   super::modify (&item,
-                 ll::bind (&NdnFibEntry::RemoveFace, ll::_1, face));
+                 ll::bind (&Entry::RemoveFace, ll::_1, face));
 }
 
 void
-NdnFibImpl::RemoveFromAll (Ptr<NdnFace> face)
+FibImpl::RemoveFromAll (Ptr<Face> face)
 {
   NS_LOG_FUNCTION (this);
 
   std::for_each (super::parent_trie::recursive_iterator (super::getTrie ()),
                  super::parent_trie::recursive_iterator (0), 
-                 ll::bind (&NdnFibImpl::RemoveFace,
+                 ll::bind (&FibImpl::RemoveFace,
                            this, ll::_1, face));
 
   super::parent_trie::recursive_iterator trieNode (super::getTrie ());
@@ -187,7 +189,7 @@
 }
 
 void
-NdnFibImpl::Print (std::ostream &os) const
+FibImpl::Print (std::ostream &os) const
 {
   // !!! unordered_set imposes "random" order of item in the same level !!!
   super::parent_trie::const_recursive_iterator item (super::getTrie ());
@@ -201,13 +203,13 @@
 }
 
 uint32_t
-NdnFibImpl::GetSize () const
+FibImpl::GetSize () const
 {
   return super::getPolicy ().size ();
 }
 
-Ptr<const NdnFibEntry>
-NdnFibImpl::Begin ()
+Ptr<const Entry>
+FibImpl::Begin ()
 {
   super::parent_trie::const_recursive_iterator item (super::getTrie ());
   super::parent_trie::const_recursive_iterator end (0);
@@ -223,18 +225,18 @@
     return item->payload ();
 }
 
-Ptr<const NdnFibEntry>
-NdnFibImpl::End ()
+Ptr<const Entry>
+FibImpl::End ()
 {
   return 0;
 }
 
-Ptr<const NdnFibEntry>
-NdnFibImpl::Next (Ptr<const NdnFibEntry> from)
+Ptr<const Entry>
+FibImpl::Next (Ptr<const Entry> from)
 {
   if (from == 0) return 0;
   
-  super::parent_trie::const_recursive_iterator item (*StaticCast<const NdnFibEntryImpl> (from)->to_iterator ());
+  super::parent_trie::const_recursive_iterator item (*StaticCast<const EntryImpl> (from)->to_iterator ());
   super::parent_trie::const_recursive_iterator end (0);
   for (item++; item != end; item++)
     {
@@ -248,5 +250,6 @@
     return item->payload ();
 }
 
-
+} // namespace fib
+} // namespace ndn
 } // namespace ns3
diff --git a/model/fib/ndn-fib-impl.h b/model/fib/ndn-fib-impl.h
index 562f06e..4c78997 100644
--- a/model/fib/ndn-fib-impl.h
+++ b/model/fib/ndn-fib-impl.h
@@ -28,18 +28,20 @@
 #include "../../utils/counting-policy.h"
 
 namespace ns3 {
+namespace ndn {
+namespace fib {
 
-class NdnFibEntryImpl : public NdnFibEntry
+class EntryImpl : public Entry
 {
 public:
   typedef ndnSIM::trie_with_policy<
-    NdnNameComponents,
-    ndnSIM::smart_pointer_payload_traits<NdnFibEntryImpl>,
+    NameComponents,
+    ndnSIM::smart_pointer_payload_traits<EntryImpl>,
     ndnSIM::counting_policy_traits
     > trie;
 
-  NdnFibEntryImpl (const Ptr<const NdnNameComponents> &prefix)
-    : NdnFibEntry (prefix)
+  EntryImpl (const Ptr<const NameComponents> &prefix)
+    : Entry (prefix)
     , item_ (0)
   {
   }
@@ -57,24 +59,19 @@
   trie::iterator item_;
 };
 
-struct NdnFibEntryContainer
-{
-  typedef ndnSIM::trie_with_policy<
-    NdnNameComponents,
-    ndnSIM::smart_pointer_payload_traits<NdnFibEntryImpl>,
-    ndnSIM::counting_policy_traits
-    > type;
-};
-
 /**
  * \ingroup ndn
  * \brief Class implementing FIB functionality
  */
-class NdnFibImpl : public NdnFib,
-                    private NdnFibEntryContainer::type
+class FibImpl : public Fib,
+                protected ndnSIM::trie_with_policy< NameComponents,
+                                                    ndnSIM::smart_pointer_payload_traits< EntryImpl >,
+                                                    ndnSIM::counting_policy_traits >
 {
 public:
-  typedef NdnFibEntryContainer::type super;
+  typedef ndnSIM::trie_with_policy< NameComponents,
+                                    ndnSIM::smart_pointer_payload_traits<EntryImpl>,
+                                    ndnSIM::counting_policy_traits > super;
   
   /**
    * \brief Interface ID
@@ -86,25 +83,25 @@
   /**
    * \brief Constructor
    */
-  NdnFibImpl ();
+  FibImpl ();
 
-  virtual Ptr<NdnFibEntry>
-  LongestPrefixMatch (const NdnInterestHeader &interest);
+  virtual Ptr<Entry>
+  LongestPrefixMatch (const InterestHeader &interest);
   
-  virtual Ptr<NdnFibEntry>
-  Add (const NdnNameComponents &prefix, Ptr<NdnFace> face, int32_t metric);
+  virtual Ptr<Entry>
+  Add (const NameComponents &prefix, Ptr<Face> face, int32_t metric);
 
-  virtual Ptr<NdnFibEntry>
-  Add (const Ptr<const NdnNameComponents> &prefix, Ptr<NdnFace> face, int32_t metric);
+  virtual Ptr<Entry>
+  Add (const Ptr<const NameComponents> &prefix, Ptr<Face> face, int32_t metric);
 
   virtual void
-  Remove (const Ptr<const NdnNameComponents> &prefix);
+  Remove (const Ptr<const NameComponents> &prefix);
 
   virtual void
   InvalidateAll ();
   
   virtual void
-  RemoveFromAll (Ptr<NdnFace> face);
+  RemoveFromAll (Ptr<Face> face);
 
   virtual void
   Print (std::ostream &os) const;
@@ -112,24 +109,14 @@
   virtual uint32_t
   GetSize () const;
 
-  virtual Ptr<const NdnFibEntry>
+  virtual Ptr<const Entry>
   Begin ();
 
-  virtual Ptr<const NdnFibEntry>
+  virtual Ptr<const Entry>
   End ();
 
-  virtual Ptr<const NdnFibEntry>
-  Next (Ptr<const NdnFibEntry> item);
-  
-  // /**
-  //  * @brief Modify element in container
-  //  */
-  // template<typename Modifier>
-  // bool
-  // modify (Ptr<NdnFibEntry> item, Modifier mod)
-  // {
-  //   return super::modify (StaticCast<NdnFibEntryImpl> (item)->to_iterator (), mod);
-  // }
+  virtual Ptr<const Entry>
+  Next (Ptr<const Entry> item);
   
 protected:
   // inherited from Object class
@@ -142,12 +129,14 @@
    * entry will be removed
    */
   void
-  RemoveFace (super::parent_trie &item, Ptr<NdnFace> face);
+  RemoveFace (super::parent_trie &item, Ptr<Face> face);
   
 private:
   Ptr<Node> m_node;
 };
- 
+
+} // namespace fib
+} // namespace ndn
 } // namespace ns3
 
 #endif	/* _NDN_FIB_IMPL_H_ */
diff --git a/model/fib/ndn-fib.cc b/model/fib/ndn-fib.cc
index 7046634..f63dadf 100644
--- a/model/fib/ndn-fib.cc
+++ b/model/fib/ndn-fib.cc
@@ -20,36 +20,24 @@
 
 #include "ndn-fib.h"
 
-#include "ndn-fib-impl.h"
-
-#include "ns3/ndn.h"
-#include "ns3/ndn-face.h"
-#include "ns3/ndn-interest-header.h"
-#include "ns3/ndn-name-components.h"
-
 #include "ns3/node.h"
 #include "ns3/names.h"
 
-#include <boost/ref.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/lambda/bind.hpp>
-namespace ll = boost::lambda;
-
 namespace ns3 {
-
-using namespace __ndn_private;
+namespace ndn {
 
 TypeId 
-NdnFib::GetTypeId (void)
+Fib::GetTypeId (void)
 {
-  static TypeId tid = TypeId ("ns3::private::NdnFib") // cheating ns3 object system
+  static TypeId tid = TypeId ("ns3::ndn::Fib") // cheating ns3 object system
     .SetParent<Object> ()
     .SetGroupName ("Ndn")
   ;
   return tid;
 }
 
-std::ostream& operator<< (std::ostream& os, const NdnFib &fib)
+std::ostream&
+operator<< (std::ostream& os, const Fib &fib)
 {
   os << "Node " << Names::FindName (fib.GetObject<Node>()) << "\n";
   os << "  Dest prefix      Interfaces(Costs)                  \n";
@@ -59,4 +47,5 @@
   return os;
 }
 
+} // namespace ndn
 } // namespace ns3
diff --git a/model/fib/ndn-fib.h b/model/fib/ndn-fib.h
index 12a6148..b1b4be7 100644
--- a/model/fib/ndn-fib.h
+++ b/model/fib/ndn-fib.h
@@ -27,14 +27,15 @@
 #include "ns3/ndn-fib-entry.h"
 
 namespace ns3 {
+namespace ndn {
 
-class NdnInterestHeader;
+class InterestHeader;
 
 /**
  * \ingroup ndn
  * \brief Class implementing FIB functionality
  */
-class NdnFib : public Object
+class Fib : public Object
 {
 public:
   /**
@@ -46,12 +47,12 @@
   /**
    * @brief Default constructor
    */
-  NdnFib () {}
+  Fib () {}
   
   /**
    * @brief Virtual destructor
    */
-  virtual ~NdnFib () { };
+  virtual ~Fib () { };
   
   /**
    * \brief Perform longest prefix match
@@ -61,8 +62,8 @@
    * \param interest Interest packet header
    * \returns If entry found a valid iterator will be returned, otherwise end ()
    */
-  virtual Ptr<NdnFibEntry>
-  LongestPrefixMatch (const NdnInterestHeader &interest) = 0;
+  virtual Ptr<fib::Entry>
+  LongestPrefixMatch (const InterestHeader &interest) = 0;
   
   /**
    * \brief Add or update FIB entry
@@ -75,8 +76,8 @@
    * @param face	Forwarding face
    * @param metric	Routing metric
    */
-  virtual Ptr<NdnFibEntry>
-  Add (const NdnNameComponents &prefix, Ptr<NdnFace> face, int32_t metric) = 0;
+  virtual Ptr<fib::Entry>
+  Add (const NameComponents &prefix, Ptr<Face> face, int32_t metric) = 0;
 
   /**
    * \brief Add or update FIB entry using smart pointer to prefix
@@ -89,8 +90,8 @@
    * @param face	Forwarding face
    * @param metric	Routing metric
    */
-  virtual Ptr<NdnFibEntry>
-  Add (const Ptr<const NdnNameComponents> &prefix, Ptr<NdnFace> face, int32_t metric) = 0;
+  virtual Ptr<fib::Entry>
+  Add (const Ptr<const NameComponents> &prefix, Ptr<Face> face, int32_t metric) = 0;
 
   /**
    * @brief Remove FIB entry
@@ -101,7 +102,7 @@
    * @param name	Smart pointer to prefix
    */
   virtual void
-  Remove (const Ptr<const NdnNameComponents> &prefix) = 0;
+  Remove (const Ptr<const NameComponents> &prefix) = 0;
 
   // /**
   //  * @brief Invalidate FIB entry ("Safe" version of Remove)
@@ -110,7 +111,7 @@
   //  * @param name	Smart pointer to prefix
   //  */
   // virtual void
-  // Invalidate (const Ptr<const NdnNameComponents> &prefix) = 0;
+  // Invalidate (const Ptr<const NameComponents> &prefix) = 0;
 
   /**
    * @brief Invalidate all FIB entries
@@ -123,7 +124,7 @@
    * this FIB entry will be removed.
    */
   virtual void
-  RemoveFromAll (Ptr<NdnFace> face) = 0;
+  RemoveFromAll (Ptr<Face> face) = 0;
 
   /**
    * @brief Print out entries in FIB
@@ -140,20 +141,20 @@
   /**
    * @brief Return first element of FIB (no order guaranteed)
    */
-  virtual Ptr<const NdnFibEntry>
+  virtual Ptr<const fib::Entry>
   Begin () = 0;
 
   /**
    * @brief Return item next after last (no order guaranteed)
    */
-  virtual Ptr<const NdnFibEntry>
+  virtual Ptr<const fib::Entry>
   End () = 0;
 
   /**
    * @brief Advance the iterator
    */
-  virtual Ptr<const NdnFibEntry>
-  Next (Ptr<const NdnFibEntry>) = 0;
+  virtual Ptr<const fib::Entry>
+  Next (Ptr<const fib::Entry>) = 0;
 
   ////////////////////////////////////////////////////////////////////////////
   ////////////////////////////////////////////////////////////////////////////
@@ -162,28 +163,29 @@
   /**
    * @brief Static call to cheat python bindings
    */
-  static inline Ptr<NdnFib>
-  GetNdnFib (Ptr<Object> node);
+  static inline Ptr<Fib>
+  GetFib (Ptr<Object> node);
 
   ////////////////////////////////////////////////////////////////////////////
   ////////////////////////////////////////////////////////////////////////////
   ////////////////////////////////////////////////////////////////////////////
   
 private:
-  NdnFib(const NdnFib&) {} ; ///< \brief copy constructor is disabled
+  Fib (const Fib&) {} ; ///< \brief copy constructor is disabled
 };
 
 ///////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////
 
-std::ostream& operator<< (std::ostream& os, const NdnFib &fib);
+std::ostream& operator<< (std::ostream& os, const Fib &fib);
 
-Ptr<NdnFib>
-NdnFib::GetNdnFib (Ptr<Object> node)
+Ptr<Fib>
+Fib::GetFib (Ptr<Object> node)
 {
-  return node->GetObject<NdnFib> ();
+  return node->GetObject<Fib> ();
 }
 
+} // namespace ndn
 } // namespace ns3
 
 #endif // _NDN_FIB_H_