diff --git a/ndn-cpp/name.hpp b/ndn-cpp/name.hpp
index 587301c..cd80fac 100644
--- a/ndn-cpp/name.hpp
+++ b/ndn-cpp/name.hpp
@@ -19,12 +19,12 @@
 class Name {
 public:
   /**
-   * A Name::Component is holds an immutable name component value.
+   * A Name::Component is holds a read-only name component value.
    */
   class Component {
   public:
     /**
-     * Create a new Name::Component with an empty value.
+     * Create a new Name::Component with a null value.
      */
     Component() 
     {    
@@ -74,24 +74,23 @@
   
     const Blob& getValue() const { return value_; }
     
-    void setValue(const Blob& value) { value_ = value; }
-  
     /**
-     * Set this component value by decoding the escapedString between beginOffset and endOffset according to the NDN URI Scheme.
-     * If the escaped string is "", "." or ".." then return false, which means this component value was not changed, and
+     * Make a component value by decoding the escapedString between beginOffset and endOffset according to the NDN URI Scheme.
+     * If the escaped string is "", "." or ".." then return a Blob with a null pointer, which means this component value was not changed, and
      * the component should be skipped in a URI name.
      * @param escapedString The escaped string.  It does not need to be null-terminated because we only scan to endOffset.
      * @param beginOffset The offset in escapedString of the beginning of the portion to decode.
      * @param endOffset The offset in escapedString of the end of the portion to decode.
-     * @return True for success, false if escapedString is not a valid escaped component.
+     * @return The component value as a Blob, or a Blob with a null pointer if escapedString is not a valid escaped component.
      */
-    bool setFromEscapedString(const char *escapedString, unsigned int beginOffset, unsigned int endOffset);
+    static Blob makeFromEscapedString(const char *escapedString, unsigned int beginOffset, unsigned int endOffset);
     
     /**
-     * Set this component to the encoded segment number.
+     * Make a component as the encoded segment number.
      * @param segment The segment number.
+     * @return The component value as a Blob.
      */
-    void setSegment(unsigned long segment);
+    static Blob makeSegment(unsigned long segment);
   
   private:
     Blob value_;
@@ -198,8 +197,7 @@
    */
   void appendSegment(unsigned long segment)
   {
-    components_.push_back(Component());
-    components_.back().setSegment(segment);
+    components_.push_back(Component(Component::makeSegment(segment)));
   }
   
   /**
