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
