diff --git a/src/data.cpp b/src/data.cpp
index db60f80..fa1afe9 100644
--- a/src/data.cpp
+++ b/src/data.cpp
@@ -7,131 +7,42 @@
 
 #include <ndn-cpp/common.hpp>
 #include <ndn-cpp/data.hpp>
-#include <ndn-cpp/sha256-with-rsa-signature.hpp>
-#include "c/data.h"
 
 using namespace std;
 
 namespace ndn {
 
-Signature::~Signature()
+const Block &
+Data::wireEncode() const
 {
-}
+  // size_t signedPortionBeginOffset, signedPortionEndOffset;
+  // Blob encoding = wireFormat.encodeData(*this, &signedPortionBeginOffset, &signedPortionEndOffset);
+  // SignedBlob wireEncoding = SignedBlob(encoding, signedPortionBeginOffset, signedPortionEndOffset);
   
-void 
-MetaInfo::get(struct ndn_MetaInfo& metaInfoStruct) const 
+  // if (&wireFormat == WireFormat::getDefaultWireFormat())
+  //   // This is the default wire encoding.
+  //   const_cast<Data*>(this)->defaultWireEncoding_ = wireEncoding;
+  
+  // return wireEncoding;
+  return wire_;
+}
+
+void
+Data::wireDecode(const Block &wire)
 {
-  metaInfoStruct.timestampMilliseconds = timestampMilliseconds_;
-  metaInfoStruct.type = type_;
-  metaInfoStruct.freshnessSeconds = freshnessSeconds_;
-  finalBlockID_.get(metaInfoStruct.finalBlockID);
 }
 
 void 
-MetaInfo::set(const struct ndn_MetaInfo& metaInfoStruct)
+Data::wireDecode(const uint8_t* input, size_t inputLength) 
 {
-  timestampMilliseconds_ = metaInfoStruct.timestampMilliseconds;
-  type_ = metaInfoStruct.type;
-  freshnessSeconds_ = metaInfoStruct.freshnessSeconds;
-  finalBlockID_ = Name::Component(Blob(metaInfoStruct.finalBlockID.value));
-}
-
-Data::Data()
-: signature_(new Sha256WithRsaSignature())
-{
-}
+  // size_t signedPortionBeginOffset, signedPortionEndOffset;
+  // wireFormat.decodeData(*this, input, inputLength, &signedPortionBeginOffset, &signedPortionEndOffset);
   
-Data::Data(const Name& name)
-: name_(name), signature_(new Sha256WithRsaSignature())
-{
-}
-
-Data::Data(const Data& data)
-: name_(data.name_), metaInfo_(data.metaInfo_), content_(data.content_), defaultWireEncoding_(data.defaultWireEncoding_)
-{
-  if (data.signature_)
-    signature_ = data.signature_->clone();
-}
-
-Data::~Data()
-{
-}
-
-Data& Data::operator=(const Data& data)
-{
-  if (data.signature_)
-    signature_ = data.signature_->clone();
-  else
-    signature_ = ptr_lib::shared_ptr<Signature>();
-  
-  name_ = data.name_;
-  metaInfo_ = data.metaInfo_;
-  content_ = data.content_;
-  defaultWireEncoding_ = data.defaultWireEncoding_;
-
-  return *this;
-}
-
-void 
-Data::get(struct ndn_Data& dataStruct) const 
-{
-  signature_->get(dataStruct.signature);
-  name_.get(dataStruct.name);
-  metaInfo_.get(dataStruct.metaInfo);
-  content_.get(dataStruct.content);
-}
-
-void 
-Data::set(const struct ndn_Data& dataStruct)
-{
-  signature_->set(dataStruct.signature);
-  name_.set(dataStruct.name);
-  metaInfo_.set(dataStruct.metaInfo);
-  content_ = Blob(dataStruct.content);
-
-  onChanged();
-}
-
-Data& 
-Data::setName(const Name& name) 
-{ 
-  name_ = name; 
-  onChanged();
-  return *this;
-}
-
-SignedBlob 
-Data::wireEncode(WireFormat& wireFormat) const
-{
-  size_t signedPortionBeginOffset, signedPortionEndOffset;
-  Blob encoding = wireFormat.encodeData(*this, &signedPortionBeginOffset, &signedPortionEndOffset);
-  SignedBlob wireEncoding = SignedBlob(encoding, signedPortionBeginOffset, signedPortionEndOffset);
-  
-  if (&wireFormat == WireFormat::getDefaultWireFormat())
-    // This is the default wire encoding.
-    const_cast<Data*>(this)->defaultWireEncoding_ = wireEncoding;
-  
-  return wireEncoding;
-}
-
-void 
-Data::wireDecode(const uint8_t* input, size_t inputLength, WireFormat& wireFormat) 
-{
-  size_t signedPortionBeginOffset, signedPortionEndOffset;
-  wireFormat.decodeData(*this, input, inputLength, &signedPortionBeginOffset, &signedPortionEndOffset);
-  
-  if (&wireFormat == WireFormat::getDefaultWireFormat())
-    // This is the default wire encoding.
-    defaultWireEncoding_ = SignedBlob(input, inputLength, signedPortionBeginOffset, signedPortionEndOffset);
-  else
-    defaultWireEncoding_ = SignedBlob();
-}
-
-void 
-Data::onChanged()
-{
-  // The values have changed, so the default wire encoding is invalidated.
-  defaultWireEncoding_ = SignedBlob();
+  // if (&wireFormat == WireFormat::getDefaultWireFormat())
+  //   // This is the default wire encoding.
+  //   defaultWireEncoding_ = SignedBlob(input, inputLength, signedPortionBeginOffset, signedPortionEndOffset);
+  // else
+  //   defaultWireEncoding_ = SignedBlob();
 }
 
 }
diff --git a/src/key-locator.cpp b/src/key-locator.cpp
deleted file mode 100644
index fbd7729..0000000
--- a/src/key-locator.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/**
- * Copyright (C) 2013 Regents of the University of California.
- * @author: Jeff Thompson <jefft0@remap.ucla.edu>
- * See COPYING for copyright and distribution information.
- */
-
-#include <ndn-cpp/common.hpp>
-#include <ndn-cpp/key-locator.hpp>
-#include "c/key-locator.h"
-
-using namespace std;
-
-namespace ndn {
-  
-void 
-KeyLocator::get(struct ndn_KeyLocator& keyLocatorStruct) const 
-{
-  keyLocatorStruct.type = type_;
-  keyData_.get(keyLocatorStruct.keyData);
-  keyName_.get(keyLocatorStruct.keyName);
-  keyLocatorStruct.keyNameType = keyNameType_;
-}
-
-void 
-KeyLocator::set(const struct ndn_KeyLocator& keyLocatorStruct)
-{
-  type_ = keyLocatorStruct.type;
-  keyData_ = Blob(keyLocatorStruct.keyData);
-  if (keyLocatorStruct.type == ndn_KeyLocatorType_KEYNAME) {
-    keyName_.set(keyLocatorStruct.keyName);
-    keyNameType_ = keyLocatorStruct.keyNameType;
-  }
-  else {
-    keyName_.clear();
-    keyNameType_ = (ndn_KeyNameType)-1;
-  }
-}
-
-}
-
diff --git a/src/publisher-public-key-digest.cpp b/src/publisher-public-key-digest.cpp
deleted file mode 100644
index a0667fa..0000000
--- a/src/publisher-public-key-digest.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/**
- * Copyright (C) 2013 Regents of the University of California.
- * @author: Jeff Thompson <jefft0@remap.ucla.edu>
- * See COPYING for copyright and distribution information.
- */
-
-#include "c/publisher-public-key-digest.h"
-#include <ndn-cpp/publisher-public-key-digest.hpp>
-
-using namespace std;
-
-namespace ndn {
-
-void 
-PublisherPublicKeyDigest::get(struct ndn_PublisherPublicKeyDigest& publisherPublicKeyDigestStruct) const 
-{
-  publisherPublicKeyDigest_.get(publisherPublicKeyDigestStruct.publisherPublicKeyDigest);
-}
-
-void 
-PublisherPublicKeyDigest::set(const struct ndn_PublisherPublicKeyDigest& publisherPublicKeyDigestStruct) 
-{
-  publisherPublicKeyDigest_ = Blob(publisherPublicKeyDigestStruct.publisherPublicKeyDigest);
-}
-
-}
diff --git a/src/sha256-with-rsa-signature.cpp b/src/sha256-with-rsa-signature.cpp
deleted file mode 100644
index ccf0230..0000000
--- a/src/sha256-with-rsa-signature.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/**
- * Copyright (C) 2013 Regents of the University of California.
- * @author: Jeff Thompson <jefft0@remap.ucla.edu>
- * See COPYING for copyright and distribution information.
- */
-
-#include "c/data.h"
-#include <ndn-cpp/sha256-with-rsa-signature.hpp>
-
-using namespace std;
-
-namespace ndn {
-
-ptr_lib::shared_ptr<Signature> 
-Sha256WithRsaSignature::clone() const
-{
-  return ptr_lib::shared_ptr<Signature>(new Sha256WithRsaSignature(*this));
-}
-
-void 
-Sha256WithRsaSignature::get(struct ndn_Signature& signatureStruct) const 
-{
-  digestAlgorithm_.get(signatureStruct.digestAlgorithm);
-  witness_.get(signatureStruct.witness);
-  signature_.get(signatureStruct.signature);  
-  publisherPublicKeyDigest_.get(signatureStruct.publisherPublicKeyDigest);
-  keyLocator_.get(signatureStruct.keyLocator);
-}
-
-void 
-Sha256WithRsaSignature::set(const struct ndn_Signature& signatureStruct)
-{
-  digestAlgorithm_ = Blob(signatureStruct.digestAlgorithm);
-  witness_ = Blob(signatureStruct.witness);
-  signature_ = Blob(signatureStruct.signature);
-  publisherPublicKeyDigest_.set(signatureStruct.publisherPublicKeyDigest);
-  keyLocator_.set(signatureStruct.keyLocator);
-}
-
-}
