diff --git a/ndn-cpp/name.cpp b/ndn-cpp/name.cpp
index 2b5c6a9..1496219 100644
--- a/ndn-cpp/name.cpp
+++ b/ndn-cpp/name.cpp
@@ -18,7 +18,8 @@
  * Modify str in place to erase whitespace on the left.
  * @param str
  */
-static inline void trimLeft(string& str)
+static inline void 
+trimLeft(string& str)
 {
   size_t found = str.find_first_not_of(WHITESPACE_CHARS);
   if (found != string::npos) {
@@ -34,7 +35,8 @@
  * Modify str in place to erase whitespace on the right.
  * @param str
  */
-static inline void trimRight(string& str)
+static inline void 
+trimRight(string& str)
 {
   size_t found = str.find_last_not_of(WHITESPACE_CHARS);
   if (found != string::npos) {
@@ -50,7 +52,8 @@
  * Modify str in place to erase whitespace on the left and right.
  * @param str
  */
-static void trim(string& str)
+static void 
+trim(string& str)
 {
   trimLeft(str);
   trimRight(str);
@@ -61,7 +64,8 @@
  * @param c
  * @return 
  */
-static int fromHexChar(unsigned char c)
+static int 
+fromHexChar(unsigned char c)
 {
   if (c >= '0' && c <= '9')
     return (int)c - (int)'0';
@@ -77,7 +81,8 @@
  * Return a copy of str, converting each escaped "%XX" to the char value.
  * @param str
  */
-static string unescape(const string& str)
+static string 
+unescape(const string& str)
 {
   ostringstream result;
   
@@ -103,7 +108,8 @@
   return result.str();
 }
 
-Blob Name::Component::makeFromEscapedString(const char *escapedString, unsigned int beginOffset, unsigned int endOffset)
+Blob 
+Name::Component::makeFromEscapedString(const char *escapedString, unsigned int beginOffset, unsigned int endOffset)
 {
   string trimmedString(escapedString + beginOffset, escapedString + endOffset);
   trim(trimmedString);
@@ -122,7 +128,8 @@
     return Blob((const unsigned char *)&component[0], component.size()); 
 }
 
-Blob Name::Component::makeSegment(unsigned long segment)
+Blob 
+Name::Component::makeSegment(unsigned long segment)
 {
   ptr_lib::shared_ptr<vector<unsigned char> > value;
   
@@ -140,7 +147,8 @@
   return Blob(value);
 }
 
-void Name::set(const char *uri_cstr) 
+void 
+Name::set(const char *uri_cstr) 
 {
   components_.clear();
   
@@ -196,7 +204,8 @@
   }
 }
 
-void Name::get(struct ndn_Name& nameStruct) const
+void 
+Name::get(struct ndn_Name& nameStruct) const
 {
   if (nameStruct.maxComponents < components_.size())
     throw runtime_error("nameStruct.maxComponents must be >= this name getNComponents()");
@@ -206,14 +215,16 @@
     components_[i].get(nameStruct.components[i]);
 }
   
-void Name::set(const struct ndn_Name& nameStruct) 
+void 
+Name::set(const struct ndn_Name& nameStruct) 
 {
   clear();
   for (unsigned int i = 0; i < nameStruct.nComponents; ++i)
     addComponent(nameStruct.components[i].value, nameStruct.components[i].valueLength);  
 }
 
-std::string Name::toUri() const
+std::string 
+Name::toUri() const
 {
   if (components_.size() == 0)
     return "/";
@@ -227,7 +238,8 @@
   return result.str();
 }
 
-bool Name::match(const Name& name) const
+bool 
+Name::match(const Name& name) const
 {
   // Imitate ndn_Name_match.
   
@@ -248,7 +260,8 @@
 	return true;
 }
 
-void Name::toEscapedString(const vector<unsigned char>& value, ostringstream& result)
+void 
+Name::toEscapedString(const vector<unsigned char>& value, ostringstream& result)
 {
   bool gotNonDot = false;
   for (unsigned i = 0; i < value.size(); ++i) {
