diff --git a/debug-tools/dump-local-prefix.cc b/debug-tools/dump-local-prefix.cc
index 7f3af3f..d5d4664 100644
--- a/debug-tools/dump-local-prefix.cc
+++ b/debug-tools/dump-local-prefix.cc
@@ -26,12 +26,12 @@
   Name name("/local/ndn/prefix");
   name.appendVersion().appendSegment(0);
 
-  Data data(name);
+  shared_ptr<Data> data = make_shared<Data>(name);
   std::string prefix("/ndn/test");
-  data.setContent(reinterpret_cast<const uint8_t*>(prefix.c_str()), prefix.size());
-  keyChain.signByIdentity(data, root);
+  data->setContent(reinterpret_cast<const uint8_t*>(prefix.c_str()), prefix.size());
+  keyChain.signByIdentity(*data, root);
 
-  face.put(data);
+  face.put(*data);
 
   face.getIoService().run();
 }
diff --git a/src/chat-dialog.cpp b/src/chat-dialog.cpp
index 93d7dd0..334f345 100644
--- a/src/chat-dialog.cpp
+++ b/src/chat-dialog.cpp
@@ -544,11 +544,11 @@
   OBufferStream os;
   msg.SerializeToOstream(&os);
 
-  Data data(interest.getName());
-  data.setContent(os.buf());
-  m_keyChain.sign(data, m_myCertificate.getName());
+  shared_ptr<Data> data = make_shared<Data>(interest.getName());
+  data->setContent(os.buf());
+  m_keyChain.sign(*data, m_myCertificate.getName());
 
-  m_face->put(data);
+  m_face->put(*data);
 }
 
 void
@@ -563,10 +563,11 @@
   try {
     Name certName = interest.getName().getSubName(prefix.size());
     const Sync::IntroCertificate& introCert = m_sock->getIntroCertificate(certName);
-    Data data(interest.getName());
-    data.setContent(introCert.wireEncode());
-    m_keyChain.sign(data,  m_myCertificate.getName());
-    m_face->put(data);
+
+    shared_ptr<Data> data = make_shared<Data>(interest.getName());
+    data->setContent(introCert.wireEncode());
+    m_keyChain.sign(*data,  m_myCertificate.getName());
+    m_face->put(*data);
   }
   catch(Sync::SyncSocket::Error& e) {
     return;
diff --git a/src/contact-manager.cpp b/src/contact-manager.cpp
index a6fec03..742b7c3 100644
--- a/src/contact-manager.cpp
+++ b/src/contact-manager.cpp
@@ -407,8 +407,8 @@
   Name dnsName = m_identity;
   dnsName.append("DNS").append("ENDORSED").appendVersion();
 
-  Data data;
-  data.setName(dnsName);
+  shared_ptr<Data> data = make_shared<Data>();
+  data->setName(dnsName);
 
   EndorseCollection endorseCollection;
   m_contactStorage->getCollectEndorse(endorseCollection);
@@ -416,11 +416,11 @@
   OBufferStream os;
   endorseCollection.SerializeToOstream(&os);
 
-  data.setContent(os.buf());
-  m_keyChain.signByIdentity(data, m_identity);
+  data->setContent(os.buf());
+  m_keyChain.signByIdentity(*data, m_identity);
 
-  m_contactStorage->updateDnsOthersEndorse(data);
-  m_face->put(data);
+  m_contactStorage->updateDnsOthersEndorse(*data);
+  m_face->put(*data);
 }
 
 void
@@ -499,15 +499,15 @@
   Name dnsName = m_identity;
   dnsName.append("DNS").append("PROFILE").appendVersion();
 
-  Data data;
-  data.setName(dnsName);
-  data.setContent(selfEndorseCertificate.wireEncode());
-  data.setFreshnessPeriod(time::milliseconds(1000));
+  shared_ptr<Data> data = make_shared<Data>();
+  data->setName(dnsName);
+  data->setContent(selfEndorseCertificate.wireEncode());
+  data->setFreshnessPeriod(time::milliseconds(1000));
 
-  m_keyChain.signByIdentity(data, m_identity);
+  m_keyChain.signByIdentity(*data, m_identity);
 
-  m_contactStorage->updateDnsSelfProfileData(data);
-  m_face->put(data);
+  m_contactStorage->updateDnsSelfProfileData(*data);
+  m_face->put(*data);
 }
 
 shared_ptr<EndorseCertificate>
@@ -545,14 +545,14 @@
     .append("ENDORSEE")
     .appendVersion();
 
-  Data data;
-  data.setName(dnsName);
-  data.setContent(endorseCertificate.wireEncode());
+  shared_ptr<Data> data = make_shared<Data>();
+  data->setName(dnsName);
+  data->setContent(endorseCertificate.wireEncode());
 
-  m_keyChain.signByIdentity(data, m_identity);
+  m_keyChain.signByIdentity(*data, m_identity);
 
-  m_contactStorage->updateDnsEndorseOthers(data, dnsName.get(-3).toUri());
-  m_face->put(data);
+  m_contactStorage->updateDnsEndorseOthers(*data, dnsName.get(-3).toUri());
+  m_face->put(*data);
 }
 
 void
diff --git a/src/controller.cpp b/src/controller.cpp
index 22af126..483bc61 100644
--- a/src/controller.cpp
+++ b/src/controller.cpp
@@ -738,7 +738,7 @@
 void
 Controller::onInvitationResponded(const ndn::Name& invitationName, bool accepted)
 {
-  Data response;
+  shared_ptr<Data> response = make_shared<Data>();
   shared_ptr<IdentityCertificate> chatroomCert;
 
   // generate reply;
@@ -746,41 +746,41 @@
     Name responseName = invitationName;
     responseName.append(m_localPrefix.wireEncode());
 
-    response.setName(responseName);
+    response->setName(responseName);
 
     // We should create a particular certificate for this chatroom,
     //but let's use default one for now.
     chatroomCert
       = m_keyChain.getCertificate(m_keyChain.getDefaultCertificateNameForIdentity(m_identity));
 
-    response.setContent(chatroomCert->wireEncode());
-    response.setFreshnessPeriod(time::milliseconds(1000));
+    response->setContent(chatroomCert->wireEncode());
+    response->setFreshnessPeriod(time::milliseconds(1000));
   }
   else {
-    response.setName(invitationName);
-    response.setFreshnessPeriod(time::milliseconds(1000));
+    response->setName(invitationName);
+    response->setFreshnessPeriod(time::milliseconds(1000));
   }
 
-  m_keyChain.signByIdentity(response, m_identity);
+  m_keyChain.signByIdentity(*response, m_identity);
 
   // Check if we need a wrapper
   Name invitationRoutingPrefix = getInvitationRoutingPrefix();
   if (invitationRoutingPrefix.isPrefixOf(m_identity))
-    m_face->put(response);
+    m_face->put(*response);
   else {
     Name wrappedName;
     wrappedName.append(invitationRoutingPrefix)
       .append(ROUTING_PREFIX_SEPARATOR, 2)
-      .append(response.getName());
+      .append(response->getName());
 
     // _LOG_DEBUG("onInvitationResponded: prepare reply " << wrappedName);
 
-    Data wrappedData(wrappedName);
-    wrappedData.setContent(response.wireEncode());
-    wrappedData.setFreshnessPeriod(time::milliseconds(1000));
+    shared_ptr<Data> wrappedData = make_shared<Data>(wrappedName);
+    wrappedData->setContent(response->wireEncode());
+    wrappedData->setFreshnessPeriod(time::milliseconds(1000));
 
-    m_keyChain.signByIdentity(wrappedData, m_identity);
-    m_face->put(wrappedData);
+    m_keyChain.signByIdentity(*wrappedData, m_identity);
+    m_face->put(*wrappedData);
   }
 
   // create chatroom
