diff --git a/tools/nfdc.cpp b/tools/nfdc.cpp
index 8578e43..123cdb5 100644
--- a/tools/nfdc.cpp
+++ b/tools/nfdc.cpp
@@ -79,6 +79,7 @@
   , m_origin(ROUTE_ORIGIN_STATIC)
   , m_expires(DEFAULT_EXPIRATION_PERIOD)
   , m_controller(face)
+  , m_ioService(face.getIoService())
 {
 }
 
@@ -169,17 +170,28 @@
     fibAddNextHop(parameters);
   }
   else {
-    ControlParameters faceParameters;
-    faceParameters.setUri(m_commandLineArguments[1]);
+    ndn::util::FaceUri faceUri;
+    faceUri.parse(m_commandLineArguments[1]);
 
-    m_controller.start<FaceCreateCommand>(faceParameters,
-                                          bind(&Nfdc::fibAddNextHop, this, _1),
-                                          bind(&Nfdc::onError, this, _1, _2,
-                                               "Face creation failed"));
+    faceUri.canonize(bind(&Nfdc::startFibAddNextHop, this, _1),
+                     bind(&Nfdc::onCanonizeFailure, this, _1),
+                     m_ioService, ndn::time::seconds(4));
   }
 }
 
 void
+Nfdc::startFibAddNextHop(const ndn::util::FaceUri& canonicalUri)
+{
+  ControlParameters parameters;
+  parameters.setUri(canonicalUri.toString());
+
+  m_controller.start<FaceCreateCommand>(parameters,
+                                        bind(&Nfdc::fibAddNextHop, this, _1),
+                                        bind(&Nfdc::onError, this, _1, _2,
+                                             "Face creation failed"));
+}
+
+void
 Nfdc::fibAddNextHop(const ControlParameters& faceCreateResult)
 {
   ControlParameters ribParameters;
@@ -245,17 +257,28 @@
     ribRegisterPrefix(parameters);
   }
   else {
-    ControlParameters faceParameters;
-    faceParameters.setUri(m_commandLineArguments[1]);
+    ndn::util::FaceUri faceUri;
+    faceUri.parse(m_commandLineArguments[1]);
 
-    m_controller.start<FaceCreateCommand>(faceParameters,
-                                          bind(&Nfdc::ribRegisterPrefix, this, _1),
-                                          bind(&Nfdc::onError, this, _1, _2,
-                                               "Face creation failed"));
+    faceUri.canonize(bind(&Nfdc::startRibRegisterPrefix, this, _1),
+                     bind(&Nfdc::onCanonizeFailure, this, _1),
+                     m_ioService, ndn::time::seconds(4));
   }
 }
 
 void
+Nfdc::startRibRegisterPrefix(const ndn::util::FaceUri& canonicalUri)
+{
+  ControlParameters parameters;
+  parameters.setUri(canonicalUri.toString());
+
+  m_controller.start<FaceCreateCommand>(parameters,
+                                        bind(&Nfdc::ribRegisterPrefix, this, _1),
+                                        bind(&Nfdc::onError, this, _1, _2,
+                                             "Face creation failed"));
+}
+
+void
 Nfdc::ribRegisterPrefix(const ControlParameters& faceCreateResult)
 {
   ControlParameters ribParameters;
@@ -302,13 +325,30 @@
 }
 
 void
+Nfdc::onCanonizeFailure(const std::string& reason)
+{
+  std::cerr << reason << std::endl;
+}
+
+void
 Nfdc::faceCreate()
 {
   if (!isValidUri(m_commandLineArguments[0]))
     throw Error("invalid uri format");
 
+  ndn::util::FaceUri faceUri;
+  faceUri.parse(m_commandLineArguments[0]);
+
+  faceUri.canonize(bind(&Nfdc::startFaceCreate, this, _1),
+                   bind(&Nfdc::onCanonizeFailure, this, _1),
+                   m_ioService, ndn::time::seconds(4));
+}
+
+void
+Nfdc::startFaceCreate(const ndn::util::FaceUri& canonicalUri)
+{
   ControlParameters parameters;
-  parameters.setUri(m_commandLineArguments[0]);
+  parameters.setUri(canonicalUri.toString());
 
   m_controller.start<FaceCreateCommand>(parameters,
                                         bind(&Nfdc::onSuccess, this, _1,
@@ -333,16 +373,28 @@
     faceDestroy(parameters);
   }
   else{
-    ControlParameters faceParameters;
-    faceParameters.setUri(m_commandLineArguments[0]);
-    m_controller.start<FaceCreateCommand>(faceParameters,
-                                          bind(&Nfdc::faceDestroy, this, _1),
-                                          bind(&Nfdc::onError, this, _1, _2,
-                                               "Face destroy failed"));
+    ndn::util::FaceUri faceUri;
+    faceUri.parse(m_commandLineArguments[0]);
+
+    faceUri.canonize(bind(&Nfdc::startFaceDestroy, this, _1),
+                     bind(&Nfdc::onCanonizeFailure, this, _1),
+                     m_ioService, ndn::time::seconds(4));
   }
 }
 
 void
+Nfdc::startFaceDestroy(const ndn::util::FaceUri& canonicalUri)
+{
+  ControlParameters parameters;
+  parameters.setUri(canonicalUri.toString());
+
+  m_controller.start<FaceCreateCommand>(parameters,
+                                        bind(&Nfdc::faceDestroy, this, _1),
+                                        bind(&Nfdc::onError, this, _1, _2,
+                                             "Face destroy failed"));
+}
+
+void
 Nfdc::faceDestroy(const ControlParameters& faceCreateResult)
 {
   ControlParameters faceParameters;
diff --git a/tools/nfdc.hpp b/tools/nfdc.hpp
index 3624bb6..84a7fc8 100644
--- a/tools/nfdc.hpp
+++ b/tools/nfdc.hpp
@@ -29,10 +29,10 @@
 #include <ndn-cxx/face.hpp>
 #include <ndn-cxx/util/time.hpp>
 #include <ndn-cxx/management/nfd-controller.hpp>
+#include <ndn-cxx/util/face-uri.hpp>
 
 namespace nfdc {
 
-
 using namespace ndn::nfd;
 
 class Nfdc : boost::noncopyable
@@ -177,6 +177,21 @@
   void
   onError(uint32_t code, const std::string& error, const std::string& message);
 
+  void
+  onCanonizeFailure(const std::string& reason);
+
+  void
+  startFaceCreate(const ndn::util::FaceUri& canonicalUri);
+
+  void
+  startFaceDestroy(const ndn::util::FaceUri& canonicalUri);
+
+  void
+  startFibAddNextHop(const ndn::util::FaceUri& canonicalUri);
+
+  void
+  startRibRegisterPrefix(const ndn::util::FaceUri& canonicalUri);
+
 public:
   const char* m_programName;
 
@@ -193,6 +208,7 @@
 
 private:
   Controller m_controller;
+  boost::asio::io_service& m_ioService;
 };
 
 } // namespace nfdc
