diff --git a/rib/rib.hpp b/rib/rib.hpp
index 7c19c9f..37136bc 100644
--- a/rib/rib.hpp
+++ b/rib/rib.hpp
@@ -1,12 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014  Regents of the University of California,
- *                     Arizona Board of Regents,
- *                     Colorado State University,
- *                     University Pierre & Marie Curie, Sorbonne University,
- *                     Washington University in St. Louis,
- *                     Beijing Institute of Technology,
- *                     The University of Memphis
+ * Copyright (c) 2014,  Regents of the University of California,
+ *                      Arizona Board of Regents,
+ *                      Colorado State University,
+ *                      University Pierre & Marie Curie, Sorbonne University,
+ *                      Washington University in St. Louis,
+ *                      Beijing Institute of Technology,
+ *                      The University of Memphis
  *
  * This file is part of NFD (Named Data Networking Forwarding Daemon).
  * See AUTHORS.md for complete list of NFD authors and contributors.
@@ -21,61 +21,46 @@
  *
  * You should have received a copy of the GNU General Public License along with
  * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- **/
+ */
 
 #ifndef NFD_RIB_RIB_HPP
 #define NFD_RIB_RIB_HPP
 
 #include "common.hpp"
+#include "rib-entry.hpp"
 #include <ndn-cxx/management/nfd-control-command.hpp>
 
 namespace nfd {
 namespace rib {
 
-class RibEntry
-{
-public:
-  RibEntry()
-    : faceId(0)
-    , origin(0)
-    , flags(0)
-    , cost(0)
-    , expires(time::steady_clock::TimePoint::min())
-  {
-  }
-
-public:
-  Name name;
-  uint64_t faceId;
-  uint64_t origin;
-  uint64_t flags;
-  uint64_t cost;
-  time::steady_clock::TimePoint expires;
-};
-
 /** \brief represents the RIB
  */
 class Rib : noncopyable
 {
 public:
-  typedef std::list<RibEntry> RibTable;
+  typedef std::list<shared_ptr<RibEntry> > RibEntryList;
+  typedef std::map<Name, shared_ptr<RibEntry> > RibTable;
   typedef RibTable::const_iterator const_iterator;
+  typedef std::map<uint64_t, std::list<shared_ptr<RibEntry> > > FaceLookupTable;
 
   Rib();
 
   ~Rib();
 
   const_iterator
-  find(const RibEntry& entry) const;
+  find(const Name& prefix) const;
+
+  shared_ptr<FaceEntry>
+  find(const Name& prefix, const FaceEntry& face) const;
 
   void
-  insert(const RibEntry& entry);
+  insert(const Name& prefix, const FaceEntry& face);
 
   void
-  erase(const RibEntry& entry);
+  erase(const Name& prefix, const FaceEntry& face);
 
   void
-  erase(uint64_t faceId);
+  erase(const uint64_t faceId);
 
   const_iterator
   begin() const;
@@ -86,13 +71,29 @@
   size_t
   size() const;
 
-  size_t
+  bool
   empty() const;
 
+
+  shared_ptr<RibEntry>
+  findParent(const Name& prefix) const;
+
+  /** \brief finds namespaces under the passed prefix
+   *  \return{ a list of entries which are under the passed prefix }
+   */
+  std::list<shared_ptr<RibEntry> >
+  findDescendants(const Name& prefix) const;
+
+  RibTable::iterator
+  eraseEntry(RibTable::iterator it);
+
+  void
+  eraseEntry(const Name& name);
+
 private:
-  // Note: Taking a list right now. A Trie will be used later to store
-  // prefixes
   RibTable m_rib;
+  FaceLookupTable m_faceMap;
+  size_t m_nItems;
 };
 
 inline Rib::const_iterator
@@ -110,18 +111,24 @@
 inline size_t
 Rib::size() const
 {
-  return m_rib.size();
+  return m_nItems;
 }
 
-inline size_t
+inline bool
 Rib::empty() const
 {
   return m_rib.empty();
 }
 
 std::ostream&
+operator<<(std::ostream& os, const FaceEntry& entry);
+
+std::ostream&
 operator<<(std::ostream& os, const RibEntry& entry);
 
+std::ostream&
+operator<<(std::ostream& os, const Rib& rib);
+
 } // namespace rib
 } // namespace nfd
 
