diff --git a/ndn.cxx/name-component.cc b/ndn.cxx/name-component.cc
index 4f4e253..d889a76 100644
--- a/ndn.cxx/name-component.cc
+++ b/ndn.cxx/name-component.cc
@@ -23,7 +23,7 @@
 NDN_NAMESPACE_BEGIN
 
 namespace name {
-  
+
 Component::Component ()
 {
 }
@@ -95,7 +95,7 @@
   if (diff.first == end ()) // components are actually equal
     return 0;
 
-  return (std::lexicographical_compare (diff.first, end (), diff.second, other.end ())) ? -1 : +1;    
+  return (std::lexicographical_compare (diff.first, end (), diff.second, other.end ())) ? -1 : +1;
 }
 
 Component &
@@ -142,13 +142,50 @@
 {
   std::ostringstream os;
   toUri (os);
-  return os.str ();  
+  return os.str ();
 }
 
 void
 Component::toUri (std::ostream &os) const
 {
-  Uri::toEscaped (begin (), end (), std::ostream_iterator<char> (os));
+  const uint8_t* valuePtr = reinterpret_cast<const uint8_t*>(buf());
+  size_t valueSize = size();
+
+  bool gotNonDot = false;
+  for (unsigned i = 0; i < valueSize; ++i) {
+    if (valuePtr[i] != 0x2e) {
+      gotNonDot = true;
+      break;
+    }
+  }
+  if (!gotNonDot) {
+    // Special case for component of zero or more periods.  Add 3 periods.
+    os << "...";
+    for (size_t i = 0; i < valueSize; ++i)
+      os << '.';
+  }
+  else {
+    // In case we need to escape, set to upper case hex and save the previous flags.
+    std::ios::fmtflags saveFlags = os.flags(std::ios::hex | std::ios::uppercase);
+
+    for (size_t i = 0; i < valueSize; ++i) {
+      uint8_t x = valuePtr[i];
+      // Check for 0-9, A-Z, a-z, (+), (-), (.), (_)
+      if ((x >= 0x30 && x <= 0x39) || (x >= 0x41 && x <= 0x5a) ||
+          (x >= 0x61 && x <= 0x7a) || x == 0x2b || x == 0x2d ||
+          x == 0x2e || x == 0x5f)
+        os << x;
+      else {
+        os << '%';
+        if (x < 16)
+          os << '0';
+        os << static_cast<unsigned int>(x);
+      }
+    }
+
+    // Restore.
+    os.flags(saveFlags);
+  }
 }
 
 uint64_t
