diff --git a/include/ndn-cpp/forwarding-entry.hpp b/include/ndn-cpp/forwarding-entry.hpp
index d56d03d..b828a7b 100644
--- a/include/ndn-cpp/forwarding-entry.hpp
+++ b/include/ndn-cpp/forwarding-entry.hpp
@@ -96,16 +96,16 @@
   set(const struct ndn_ForwardingEntry& forwardingEntryStruct);
 
   void 
-  setAction(const std::string& value) { action_ = value; }
+  setAction(const std::string& action) { action_ = action; }
   
   void 
-  setFaceId(int value) { faceId_ = value; }
+  setFaceId(int faceId) { faceId_ = faceId; }
       
   void 
-  setForwardingFlags(const ForwardingFlags& value) { forwardingFlags_ = value; }
+  setForwardingFlags(const ForwardingFlags& forwardingFlags) { forwardingFlags_ = forwardingFlags; }
       
   void 
-  setFreshnessSeconds(int value) { freshnessSeconds_ = value; }
+  setFreshnessSeconds(int freshnessSeconds) { freshnessSeconds_ = freshnessSeconds; }
       
 private:
   std::string action_;   /**< empty for none. */
diff --git a/include/ndn-cpp/forwarding-flags.hpp b/include/ndn-cpp/forwarding-flags.hpp
index d722275..7c878b9 100644
--- a/include/ndn-cpp/forwarding-flags.hpp
+++ b/include/ndn-cpp/forwarding-flags.hpp
@@ -82,51 +82,51 @@
 
   /**
    * Set the value of the "active" flag
-   * @param value true to set the flag, false to clear it.
+   * @param active true to set the flag, false to clear it.
    */  
-  void setActive(bool value) { active = value ? 1 : 0; }
+  void setActive(bool active) { this->active = active ? 1 : 0; }
   
   /**
    * Set the value of the "childInherit" flag
-   * @param value true to set the flag, false to clear it.
+   * @param childInherit true to set the flag, false to clear it.
    */  
-  void setChildInherit(bool value) { childInherit = value ? 1 : 0; }
+  void setChildInherit(bool childInherit) { this->childInherit = childInherit ? 1 : 0; }
   
   /**
    * Set the value of the "advertise" flag
-   * @param value true to set the flag, false to clear it.
+   * @param advertise true to set the flag, false to clear it.
    */  
-  void setAdvertise(bool value) { advertise = value ? 1 : 0; }
+  void setAdvertise(bool advertise) { this->advertise = advertise ? 1 : 0; }
   
   /**
    * Set the value of the "last" flag
-   * @param value true to set the flag, false to clear it.
+   * @param last true to set the flag, false to clear it.
    */  
-  void setLast(bool value) { last = value ? 1 : 0; }
+  void setLast(bool last) { this->last = last ? 1 : 0; }
   
   /**
    * Set the value of the "capture" flag
-   * @param value true to set the flag, false to clear it.
+   * @param capture true to set the flag, false to clear it.
    */  
-  void setCapture(bool value) { capture = value ? 1 : 0; }
+  void setCapture(bool capture) { this->capture = capture ? 1 : 0; }
   
   /**
    * Set the value of the "local" flag
-   * @param value true to set the flag, false to clear it.
+   * @param local true to set the flag, false to clear it.
    */  
-  void setLocal(bool value) { local = value ? 1 : 0; }
+  void setLocal(bool local) { this->local = local ? 1 : 0; }
   
   /**
    * Set the value of the "tap" flag
-   * @param value true to set the flag, false to clear it.
+   * @param tap true to set the flag, false to clear it.
    */  
-  void setTap(bool value) { tap = value ? 1 : 0; }
+  void setTap(bool tap) { this->tap = tap ? 1 : 0; }
   
   /**
    * Set the value of the "captureOk" flag
-   * @param value true to set the flag, false to clear it.
+   * @param captureOk true to set the flag, false to clear it.
    */  
-  void setCaptureOk(bool value) { captureOk = value ? 1 : 0; }
+  void setCaptureOk(bool captureOk) { this->captureOk = captureOk ? 1 : 0; }
 };
 
 }
diff --git a/include/ndn-cpp/interest.hpp b/include/ndn-cpp/interest.hpp
index aee7e0d..7e77165 100644
--- a/include/ndn-cpp/interest.hpp
+++ b/include/ndn-cpp/interest.hpp
@@ -185,7 +185,7 @@
    */
   Interest(const Name& name, int minSuffixComponents, int maxSuffixComponents, 
     const PublisherPublicKeyDigest& publisherPublicKeyDigest, const Exclude& exclude, int childSelector, int answerOriginKind, 
-    int scope, Milliseconds interestLifetimeMilliseconds, const std::vector<uint8_t>& nonce) 
+    int scope, Milliseconds interestLifetimeMilliseconds, const Blob& nonce) 
   : name_(name), minSuffixComponents_(minSuffixComponents), maxSuffixComponents_(maxSuffixComponents),
   publisherPublicKeyDigest_(publisherPublicKeyDigest), exclude_(exclude), childSelector_(childSelector), 
   answerOriginKind_(answerOriginKind), scope_(scope), interestLifetimeMilliseconds_(interestLifetimeMilliseconds),
@@ -336,25 +336,25 @@
   setName(const Name& name) { name_ = name; }
   
   void 
-  setMinSuffixComponents(int value) { minSuffixComponents_ = value; }
+  setMinSuffixComponents(int minSuffixComponents) { minSuffixComponents_ = minSuffixComponents; }
   
   void 
-  setMaxSuffixComponents(int value) { maxSuffixComponents_ = value; }
+  setMaxSuffixComponents(int maxSuffixComponents) { maxSuffixComponents_ = maxSuffixComponents; }
   
   void 
-  setChildSelector(int value) { childSelector_ = value; }
+  setChildSelector(int childSelector) { childSelector_ = childSelector; }
 
   void 
-  setAnswerOriginKind(int value) { answerOriginKind_ = value; }
+  setAnswerOriginKind(int answerOriginKind) { answerOriginKind_ = answerOriginKind; }
 
   void 
-  setScope(int value) { scope_ = value; }
+  setScope(int scope) { scope_ = scope; }
 
   void 
-  setInterestLifetimeMilliseconds(Milliseconds value) { interestLifetimeMilliseconds_ = value; }
+  setInterestLifetimeMilliseconds(Milliseconds interestLifetimeMilliseconds) { interestLifetimeMilliseconds_ = interestLifetimeMilliseconds; }
 
   void 
-  setNonce(const Blob& value) { nonce_ = value; }
+  setNonce(const Blob& nonce) { nonce_ = nonce; }
   
 private:
   void 
