diff --git a/include/ndn-cpp/interest.hpp b/include/ndn-cpp/interest.hpp
index 2c9688a..36a3859 100644
--- a/include/ndn-cpp/interest.hpp
+++ b/include/ndn-cpp/interest.hpp
@@ -33,7 +33,7 @@
   }
   
   /**
-   * Create an ExcludeEntry of type ndn_Exclude_COMPONENT
+   * Create an ExcludeEntry of type ndn_Exclude_COMPONENT.
    */
   ExcludeEntry(uint8_t *component, size_t componentLen) 
   : type_(ndn_Exclude_COMPONENT), component_(component, componentLen)
@@ -41,6 +41,14 @@
   }
   
   /**
+   * Create an ExcludeEntry of type ndn_Exclude_COMPONENT.
+   */
+  ExcludeEntry(const Blob& component) 
+  : type_(ndn_Exclude_COMPONENT), component_(component)
+  {
+  }
+  
+  /**
    * Set the type in the excludeEntryStruct and to point to this component, without copying any memory.
    * WARNING: The resulting pointer in excludeEntryStruct is invalid after a further use of this object which could reallocate memory.
    * @param excludeEntryStruct the C ndn_NameComponent struct to receive the pointer
@@ -92,22 +100,52 @@
   set(const struct ndn_Exclude& excludeStruct);
 
   /**
-   * Add a new entry of type ndn_Exclude_ANY
+   * Append a new entry of type ndn_Exclude_ANY.
+   * @return This Exclude so that you can chain calls to append.
    */
-  void 
-  addAny()
+  Exclude& 
+  appendAny()
   {    
     entries_.push_back(ExcludeEntry());
+    return *this;
   }
   
   /**
-   * Add a new entry of type ndn_Exclude_COMPONENT, copying from component of length compnentLength
+   * Append a new entry of type ndn_Exclude_COMPONENT, copying from component of length compnentLength.
+   * @param component A pointer to the component byte array.
+   * @param componentLength The length of component.
+   * @return This Exclude so that you can chain calls to append.
    */
-  void 
-  addComponent(uint8_t *component, size_t componentLen) 
+  Exclude& 
+  appendComponent(uint8_t *component, size_t componentLength) 
   {
-    entries_.push_back(ExcludeEntry(component, componentLen));
+    entries_.push_back(ExcludeEntry(component, componentLength));
+    return *this;
   }
+
+  /**
+   * Append a new entry of type ndn_Exclude_COMPONENT, copying from component of length compnentLength.
+   * @param component A blob with a pointer to an immutable array.  The pointer is copied.
+   * @return This Exclude so that you can chain calls to append.
+   */
+  Exclude& 
+  appendComponent(const Blob &component) 
+  {
+    entries_.push_back(ExcludeEntry(component));
+    return *this;
+  }
+
+  /**
+   * @deprecated Use appendAny.
+   */
+  Exclude& 
+  addAny() { return appendAny(); }
+
+  /**
+   * @deprecated Use appendComponent.
+   */
+  Exclude& 
+  addComponent(uint8_t *component, size_t componentLength) { return appendComponent(component, componentLength); }
   
   /**
    * Clear all the entries.
