diff --git a/daemon/face/ndnlp-partial-message-store.cpp b/daemon/face/ndnlp-partial-message-store.cpp
index 54a5537..fafeaf0 100644
--- a/daemon/face/ndnlp-partial-message-store.cpp
+++ b/daemon/face/ndnlp-partial-message-store.cpp
@@ -1,11 +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
+ * Copyright (c) 2014-2015,  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.
@@ -20,7 +21,7 @@
  *
  * 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/>.
- **/
+ */
 
 #include "ndnlp-partial-message-store.hpp"
 
@@ -99,38 +100,28 @@
   }
 
   uint64_t messageIdentifier = parsed.m_seq - parsed.m_fragIndex;
-  shared_ptr<PartialMessage> pm = m_partialMessages[messageIdentifier];
-  if (!static_cast<bool>(pm)) {
-    m_partialMessages[messageIdentifier] = pm = make_shared<PartialMessage>();
-  }
+  PartialMessage& pm = m_partialMessages[messageIdentifier];
   this->scheduleCleanup(messageIdentifier, pm);
 
-  pm->add(parsed.m_fragIndex, parsed.m_fragCount, parsed.m_payload);
-  if (pm->isComplete()) {
-    this->onReceive(pm->reassemble());
+  pm.add(parsed.m_fragIndex, parsed.m_fragCount, parsed.m_payload);
+  if (pm.isComplete()) {
+    this->onReceive(pm.reassemble());
     this->cleanup(messageIdentifier);
   }
 }
 
 void
 PartialMessageStore::scheduleCleanup(uint64_t messageIdentifier,
-                                     shared_ptr<PartialMessage> partialMessage)
+                                     PartialMessage& partialMessage)
 {
-  partialMessage->m_expiry = scheduler::schedule(m_idleDuration,
+  partialMessage.expiry = scheduler::schedule(m_idleDuration,
     bind(&PartialMessageStore::cleanup, this, messageIdentifier));
 }
 
 void
 PartialMessageStore::cleanup(uint64_t messageIdentifier)
 {
-  std::map<uint64_t, shared_ptr<PartialMessage> >::iterator it =
-    m_partialMessages.find(messageIdentifier);
-  if (it == m_partialMessages.end()) {
-    return;
-  }
-
-  scheduler::cancel(it->second->m_expiry);
-  m_partialMessages.erase(it);
+  m_partialMessages.erase(messageIdentifier);
 }
 
 } // namespace ndnlp
diff --git a/daemon/face/ndnlp-partial-message-store.hpp b/daemon/face/ndnlp-partial-message-store.hpp
index 4143107..6fbf0f7 100644
--- a/daemon/face/ndnlp-partial-message-store.hpp
+++ b/daemon/face/ndnlp-partial-message-store.hpp
@@ -34,11 +34,21 @@
 
 /** \brief represents a partially received message
  */
-class PartialMessage : noncopyable
+class PartialMessage
 {
 public:
   PartialMessage();
 
+  PartialMessage(const PartialMessage&) = delete;
+
+  PartialMessage&
+  operator=(const PartialMessage&) = delete;
+
+  PartialMessage(PartialMessage&&) = default;
+
+  PartialMessage&
+  operator=(PartialMessage&&) = default;
+
   bool
   add(uint16_t fragIndex, uint16_t fragCount, const Block& payload);
 
@@ -56,7 +66,7 @@
   reassemble();
 
 public:
-  scheduler::EventId m_expiry;
+  scheduler::ScopedEventId expiry;
 
 private:
   size_t m_fragCount;
@@ -84,18 +94,19 @@
   void
   receiveNdnlpData(const Block& pkt);
 
-  /// fires when network layer packet is received
+  /** \brief fires when network layer packet is received
+   */
   signal::Signal<PartialMessageStore, Block> onReceive;
 
 private:
   void
-  scheduleCleanup(uint64_t messageIdentifier, shared_ptr<PartialMessage> partialMessage);
+  scheduleCleanup(uint64_t messageIdentifier, PartialMessage& partialMessage);
 
   void
   cleanup(uint64_t messageIdentifier);
 
 private:
-  std::map<uint64_t, shared_ptr<PartialMessage> > m_partialMessages;
+  std::unordered_map<uint64_t, PartialMessage> m_partialMessages;
 
   time::nanoseconds m_idleDuration;
 };
