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_ */
