diff --git a/model/ccnx-fib.cc b/model/ccnx-fib.cc
index 1c86b28..4159f73 100644
--- a/model/ccnx-fib.cc
+++ b/model/ccnx-fib.cc
@@ -303,25 +303,6 @@
                       this, ll::_1, face));
 }
 
-/**
- * \brief Get number of FIB entry (for python bindings)
- */
-uint32_t 
-CcnxFib::GetCcnxFibEntryCount () const
-{
-  return m_fib.size ();
-}
-
-/**
- * \brief Get FIB entry by index (for python bindings)
- */
-const CcnxFibEntry &
-CcnxFib::GetCcnxFibEntry (uint32_t index)
-{
-  NS_ASSERT (0 <= index && index < m_fib.size ());
-  return m_fib.get <i_nth> () [index];
-}
-
 
 std::ostream& operator<< (std::ostream& os, const CcnxFib &fib)
 {
diff --git a/model/ccnx-fib.h b/model/ccnx-fib.h
index bbbc44f..1baaf6f 100644
--- a/model/ccnx-fib.h
+++ b/model/ccnx-fib.h
@@ -254,11 +254,7 @@
         boost::multi_index::const_mem_fun<CcnxFibEntry,
                                           const CcnxNameComponents&,
                                           &CcnxFibEntry::GetPrefix>,
-        CcnxPrefixHash>,
-
-      boost::multi_index::random_access<
-        boost::multi_index::tag<__ccnx_private::i_nth>
-        >
+        CcnxPrefixHash>
       >
     > type;
   /// @endcond
@@ -364,18 +360,6 @@
   void
   RemoveFromAll (Ptr<CcnxFace> face);
 
-  /**
-   * \brief Get number of FIB entry (for python bindings)
-   */
-  uint32_t 
-  GetCcnxFibEntryCount () const;
-
-  /**
-   * \brief Get FIB entry by index (for python bindings)
-   */
-  const CcnxFibEntry &
-  GetCcnxFibEntry (uint32_t index);
-
 public:
   CcnxFibEntryContainer::type m_fib; ///< @brief Internal container
 
diff --git a/utils/empty-policy.h b/utils/empty-policy.h
new file mode 100644
index 0000000..0fe43f8
--- /dev/null
+++ b/utils/empty-policy.h
@@ -0,0 +1,50 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#ifndef EMPTY_POLICY_H_
+#define EMPTY_POLICY_H_
+
+namespace ndnSIM
+{
+
+struct empty_policy_traits
+{
+  typedef void policy_hook_type;
+
+  template<class Container> struct container_hook { typedef void type; }
+
+  template<class Base,
+           class Container,
+           class Hook>
+  struct policy 
+  {
+    class type
+    {
+      inline void update (typename parent_trie::iterator) { }
+      inline bool insert (typename parent_trie::iterator) { return true; }
+      inline void  lookup (typename parent_trie::iterator item) { }
+      inline void erase (typename parent_trie::iterator item) { }
+    };
+  };
+};
+
+}
+
+#endif // EMPTY_POLICY_H_
