diff --git a/src/ims/in-memory-storage-lfu.hpp b/src/ims/in-memory-storage-lfu.hpp
new file mode 100644
index 0000000..7633cfd
--- /dev/null
+++ b/src/ims/in-memory-storage-lfu.hpp
@@ -0,0 +1,119 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013-2017 Regents of the University of California.
+ *
+ * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
+ *
+ * ndn-cxx library is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * ndn-cxx library 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 Lesser General Public License for more details.
+ *
+ * You should have received copies of the GNU General Public License and GNU Lesser
+ * General Public License along with ndn-cxx, e.g., in COPYING.md file.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
+ */
+
+#ifndef NDN_IMS_IN_MEMORY_STORAGE_LFU_HPP
+#define NDN_IMS_IN_MEMORY_STORAGE_LFU_HPP
+
+#include "in-memory-storage.hpp"
+
+#include <boost/multi_index_container.hpp>
+#include <boost/multi_index/hashed_index.hpp>
+#include <boost/multi_index/identity.hpp>
+#include <boost/multi_index/member.hpp>
+#include <boost/multi_index/ordered_index.hpp>
+
+namespace ndn {
+
+/** @brief Provides an in-memory storage with Least Frequently Used (LFU) replacement policy.
+ *  @note The frequency right now is usage count.
+ *  @sa https://en.wikipedia.org/w/index.php?title=Least_frequently_used&oldid=604542656
+ */
+class InMemoryStorageLfu : public InMemoryStorage
+{
+public:
+  explicit
+  InMemoryStorageLfu(size_t limit = 10);
+
+  explicit
+  InMemoryStorageLfu(boost::asio::io_service& ioService, size_t limit = 10);
+
+NDN_CXX_PUBLIC_WITH_TESTS_ELSE_PROTECTED:
+  /** @brief Removes one Data packet from in-memory storage based on LFU, i.e. evict the least
+   *  frequently accessed Data packet
+   *  @return{ whether the Data was removed }
+   */
+  bool
+  evictItem() override;
+
+  /** @brief Update the entry when the entry is returned by the find() function,
+   *  increment the frequency according to LFU
+   */
+  void
+  afterAccess(InMemoryStorageEntry* entry) override;
+
+  /** @brief Update the entry after a entry is successfully inserted, add it to the cleanupIndex
+   */
+  void
+  afterInsert(InMemoryStorageEntry* entry) override;
+
+  /** @brief Update the entry or other data structures before a entry is successfully erased,
+   *  erase it from the cleanupIndex
+   */
+  void
+  beforeErase(InMemoryStorageEntry* entry) override;
+
+private:
+  // binds frequency and entry together
+  struct CleanupEntry
+  {
+    InMemoryStorageEntry* entry;
+    uint64_t frequency; // could potentially be overflowed
+  };
+
+  /** @brief Function to increment frequency of the entry in the CleanupEntry
+   */
+  static inline void
+  incrementFrequency(CleanupEntry& cleanupEntry)
+  {
+    ++cleanupEntry.frequency;
+  }
+
+private:
+  // multi_index_container to implement LFU
+  class byFrequency;
+  class byEntity;
+
+  typedef boost::multi_index_container<
+    CleanupEntry,
+    boost::multi_index::indexed_by<
+
+      // by Entry itself
+      boost::multi_index::hashed_unique<
+        boost::multi_index::tag<byEntity>,
+        boost::multi_index::member<CleanupEntry, InMemoryStorageEntry*, &CleanupEntry::entry>
+      >,
+
+      // by frequency (LFU)
+      boost::multi_index::ordered_non_unique<
+        boost::multi_index::tag<byFrequency>,
+        boost::multi_index::member<CleanupEntry, uint64_t, &CleanupEntry::frequency>,
+        std::less<uint64_t>
+      >
+
+    >
+  > CleanupIndex;
+
+  CleanupIndex m_cleanupIndex;
+};
+
+} // namespace ndn
+
+#endif // NDN_IMS_IN_MEMORY_STORAGE_LFU_HPP
