diff --git a/include/ccnx-common.h b/include/ccnx-common.h
index 7394c03..0636a62 100644
--- a/include/ccnx-common.h
+++ b/include/ccnx-common.h
@@ -13,12 +13,21 @@
 using namespace std;
 namespace Ccnx {
 typedef vector<unsigned char> Bytes;
+typedef vector<string>Comps;
 
+// --- Bytes operations start ---
 void
 readRaw(Bytes &bytes, const unsigned char *src, size_t len);
 
 const unsigned char *
 head(const Bytes &bytes);
 
+// --- Bytes operations end ---
+
+// --- Name operation start ---
+void
+split(const string &name, Comps &comps);
+// --- Name operation end ---
+
 } // Ccnx
 #endif // CCNX_COMMON_H
diff --git a/include/ccnx-interest.h b/include/ccnx-interest.h
new file mode 100644
index 0000000..fd1db18
--- /dev/null
+++ b/include/ccnx-interest.h
@@ -0,0 +1,31 @@
+#ifndef CCNX_INTEREST_H
+#define CCNX_INTEREST_H
+#include "ccnx-common.h"
+
+namespace Ccnx {
+
+// Currently, other classes use string when Interest is needed.
+// The constructor from string ensures that if we change other classes' APIs to use Interest object 
+// instead of string, it is still backwards compatible
+// Using a separate Interest class instead of simple string allows us to add control fields
+// to the Interest, e.g. ChildSelector. Perhaps that's a separate Selectors class. Will do it after ChronoShare project finishes.
+
+// Since the selector is only useful when sending Interest (in callbacks, usually we only need to know the name of the Interest),
+// we currently only use Interest object in sendInterest of CcnxWrapper. In other places, Interest object is equivalent of
+// its string name.
+
+class Interest
+{
+public:
+  Interest(const string &name) : m_name(name) {}
+  virtual ~Interest() {}
+
+  string
+  name() const { return m_name; }
+
+protected:
+  string m_name;
+};
+
+} // Ccnx
+#endif
diff --git a/include/ccnx-tunnel.h b/include/ccnx-tunnel.h
index 4e1eade..61ed964 100644
--- a/include/ccnx-tunnel.h
+++ b/include/ccnx-tunnel.h
@@ -40,7 +40,7 @@
   publishData(const string &name, const unsigned char *buf, size_t len, int freshness) _OVERRIDE;
 
   virtual int
-  sendInterest (const std::string &interest, Closure *closure);
+  sendInterest (const Interest &interest, Closure *closure);
 
 
   // prefix is topology-independent
diff --git a/include/ccnx-wrapper.h b/include/ccnx-wrapper.h
index 6ee5749..8d24b19 100644
--- a/include/ccnx-wrapper.h
+++ b/include/ccnx-wrapper.h
@@ -14,6 +14,7 @@
 #include <boost/thread/thread.hpp>
 
 #include "ccnx-common.h"
+#include "ccnx-interest.h"
 #include "ccnx-closure.h"
 
 using namespace std;
@@ -37,7 +38,7 @@
   clearInterestFilter (const string &prefix);
 
   virtual int 
-  sendInterest (const string &strInterest, Closure *closure);
+  sendInterest (const Interest &interest, Closure *closure);
 
   virtual int 
   publishData (const string &name, const unsigned char *buf, size_t len, int freshness);
diff --git a/src/ccnx-tunnel.cpp b/src/ccnx-tunnel.cpp
index 467f7a1..b36b030 100644
--- a/src/ccnx-tunnel.cpp
+++ b/src/ccnx-tunnel.cpp
@@ -28,10 +28,11 @@
 }
 
 int
-CcnxTunnel::sendInterest (const std::string &interest, Closure *closure)
+CcnxTunnel::sendInterest (const Interest &interest, Closure *closure)
 {
-  string tunneledInterest = queryRoutableName(interest);
-  Closure *cp = new TunnelClosure(closure, this, interest);
+  string strInterest = interest.name();
+  string tunneledInterest = queryRoutableName(strInterest);
+  Closure *cp = new TunnelClosure(closure, this, strInterest);
   sendInterest(tunneledInterest, cp);
 }
 
diff --git a/src/ccnx-wrapper.cpp b/src/ccnx-wrapper.cpp
index 0710c67..1b791c9 100644
--- a/src/ccnx-wrapper.cpp
+++ b/src/ccnx-wrapper.cpp
@@ -32,6 +32,17 @@
   return &bytes[0];
 }
 
+void
+split(const string &name, Comps &comps)
+{
+  stringstream ss(name);
+  string comp;
+  while(getline(ss, comp, '/'))
+  {
+    comps.push_back(comp);
+  }
+}
+
 CcnxWrapper::CcnxWrapper()
   : m_handle (0)
   , m_keyStore (0)
@@ -376,7 +387,7 @@
   return CCN_UPCALL_RESULT_OK;
 }
 
-int CcnxWrapper::sendInterest (const string &strInterest, Closure *closure)
+int CcnxWrapper::sendInterest (const Interest &interest, Closure *closure)
 {
   recursive_mutex::scoped_lock lock(m_mutex);
   if (!m_running || !m_connected)
@@ -385,7 +396,7 @@
   ccn_charbuf *pname = ccn_charbuf_create();
   ccn_closure *dataClosure = new ccn_closure;
 
-  ccn_name_from_uri (pname, strInterest.c_str());
+  ccn_name_from_uri (pname, interest.name().c_str());
   dataClosure->data = (void *)closure;
 
   dataClosure->p = &incomingData;
