diff --git a/ndn-cpp/interest.cpp b/ndn-cpp/interest.cpp
new file mode 100644
index 0000000..7aa7e35
--- /dev/null
+++ b/ndn-cpp/interest.cpp
@@ -0,0 +1,75 @@
+/**
+ * @author: Jeff Thompson
+ * See COPYING for copyright and distribution information.
+ */
+
+#include <stdexcept>
+#include "common.hpp"
+#include "interest.hpp"
+
+using namespace std;
+
+namespace ndn {
+  
+void Exclude::get(struct ndn_Exclude &excludeStruct) const
+{
+  if (excludeStruct.maxEntries < entries_.size())
+    throw runtime_error("excludeStruct.maxEntries must be >= this exclude getEntryCount()");
+  
+  excludeStruct.nEntries = entries_.size();
+  for (unsigned int i = 0; i < excludeStruct.nEntries; ++i)
+    entries_[i].get(excludeStruct.entries[i]);  
+}
+
+void Exclude::set(const struct ndn_Exclude &excludeStruct)
+{
+  entries_.clear();
+  for (unsigned int i = 0; i < excludeStruct.nEntries; ++i) {
+    ndn_ExcludeEntry *entry = &excludeStruct.entries[i];
+    
+    if (entry->type == ndn_Exclude_COMPONENT)
+      addComponent(entry->component, entry->componentLength);
+    else if (entry->type == ndn_Exclude_ANY)
+      addAny();
+    else
+      throw runtime_error("unrecognized ndn_ExcludeType");
+  }
+}
+
+void Interest::set(const struct ndn_Interest &interestStruct) 
+{
+  name_.set(interestStruct.name);
+	minSuffixComponents_ = interestStruct.minSuffixComponents;
+	maxSuffixComponents_ = interestStruct.maxSuffixComponents;
+	
+	publisherPublicKeyDigest_.set(interestStruct.publisherPublicKeyDigest);
+  
+  exclude_.set(interestStruct.exclude);
+	childSelector_ = interestStruct.childSelector;
+	answerOriginKind_ = interestStruct.answerOriginKind;
+	scope_ = interestStruct.scope;
+	interestLifetimeMilliseconds_ = interestStruct.interestLifetimeMilliseconds;
+  setVector(nonce_, interestStruct.nonce, interestStruct.nonceLength);
+}
+
+void Interest::get(struct ndn_Interest &interestStruct) const 
+{
+  name_.get(interestStruct.name);
+  interestStruct.minSuffixComponents = minSuffixComponents_;
+  interestStruct.maxSuffixComponents = maxSuffixComponents_;
+  publisherPublicKeyDigest_.get(interestStruct.publisherPublicKeyDigest);
+  exclude_.get(interestStruct.exclude);
+  interestStruct.childSelector = childSelector_;
+  interestStruct.answerOriginKind = answerOriginKind_;
+  interestStruct.scope = scope_;
+  interestStruct.interestLifetimeMilliseconds = interestLifetimeMilliseconds_;
+
+  interestStruct.nonceLength = nonce_.size();
+  if (nonce_.size() > 0)
+    interestStruct.nonce = (unsigned char *)&nonce_[0];
+  else
+    interestStruct.nonce = 0;
+}
+  
+}
+
