diff --git a/tools/ndn-autoconfig.cpp b/tools/ndn-autoconfig.cpp
index 71bca2f..87fd884 100644
--- a/tools/ndn-autoconfig.cpp
+++ b/tools/ndn-autoconfig.cpp
@@ -103,8 +103,8 @@
         finalBlockId.toSegment() > currentSegment)
       {
         m_face.expressInterest(data.getName().getPrefix(-1).appendSegment(currentSegment+1),
-                               bind(&NdnAutoconfig::fetchSegments, this, _2, buffer, onDone),
-                               bind(&NdnAutoconfig::discoverHubStage2, this, "Timeout"));
+                               ndn::bind(&NdnAutoconfig::fetchSegments, this, _2, buffer, onDone),
+                               ndn::bind(&NdnAutoconfig::discoverHubStage2, this, "Timeout"));
       }
     else
       {
@@ -122,9 +122,9 @@
     interest.setMustBeFresh(true);
 
     m_face.expressInterest(interest,
-                           bind(&NdnAutoconfig::fetchSegments, this, _2, buffer,
-                                &NdnAutoconfig::discoverHubStage1_registerHubDiscoveryPrefix),
-                           bind(&NdnAutoconfig::discoverHubStage2, this, "Timeout"));
+                           ndn::bind(&NdnAutoconfig::fetchSegments, this, _2, buffer,
+                                     &NdnAutoconfig::discoverHubStage1_registerHubDiscoveryPrefix),
+                           ndn::bind(&NdnAutoconfig::discoverHubStage2, this, "Timeout"));
   }
 
   void
diff --git a/tools/ndn-tlv-peek.cpp b/tools/ndn-tlv-peek.cpp
index dc70175..dca57e0 100644
--- a/tools/ndn-tlv-peek.cpp
+++ b/tools/ndn-tlv-peek.cpp
@@ -27,15 +27,19 @@
 
 #include "version.hpp"
 
-#include <boost/asio.hpp>
+#include <boost/noncopyable.hpp>
 
 #include <ndn-cxx/face.hpp>
 
 namespace ndntlvpeek {
 
-class NdnTlvPeek
+using ndn::_1;
+using ndn::_2;
+
+class NdnTlvPeek : boost::noncopyable
 {
 public:
+  explicit
   NdnTlvPeek(char* programName)
     : m_programName(programName)
     , m_mustBeFresh(false)
@@ -180,10 +184,8 @@
     try
       {
         m_face.expressInterest(createInterestPacket(),
-                               ndn::func_lib::bind(&NdnTlvPeek::onData,
-                                                   this, _1, _2),
-                               ndn::func_lib::bind(&NdnTlvPeek::onTimeout,
-                                                   this, _1));
+                               bind(&NdnTlvPeek::onData, this, _1, _2),
+                               bind(&NdnTlvPeek::onTimeout, this, _1));
         if (m_timeout < ndn::time::milliseconds::zero())
           {
             if (m_interestLifetime < ndn::time::milliseconds::zero())
diff --git a/tools/ndn-tlv-poke.cpp b/tools/ndn-tlv-poke.cpp
index 3f5a3b6..31ec561 100644
--- a/tools/ndn-tlv-poke.cpp
+++ b/tools/ndn-tlv-poke.cpp
@@ -27,18 +27,19 @@
 
 #include "version.hpp"
 
-#include <boost/utility.hpp>
+#include <boost/noncopyable.hpp>
 
 #include <ndn-cxx/face.hpp>
 #include <ndn-cxx/security/key-chain.hpp>
 
 namespace ndntlvpoke {
 
+using ndn::_1;
+using ndn::_2;
+
 class NdnTlvPoke : boost::noncopyable
 {
-
 public:
-
   explicit
   NdnTlvPoke(char* programName)
     : m_programName(programName)
@@ -186,11 +187,9 @@
         else
           {
             m_face.setInterestFilter(m_prefixName,
-                                     ndn::bind(&NdnTlvPoke::onInterest,
-                                               this, _1, _2, dataPacket),
+                                     bind(&NdnTlvPoke::onInterest, this, _1, _2, dataPacket),
                                      ndn::RegisterPrefixSuccessCallback(),
-                                     ndn::bind(&NdnTlvPoke::onRegisterFailed,
-                                               this, _1, _2));
+                                     bind(&NdnTlvPoke::onRegisterFailed, this, _1, _2));
           }
         if (m_timeout < ndn::time::milliseconds::zero())
           m_face.processEvents(getDefaultTimeout());
diff --git a/tools/nfdc.cpp b/tools/nfdc.cpp
index 123cdb5..4ef98bf 100644
--- a/tools/nfdc.cpp
+++ b/tools/nfdc.cpp
@@ -70,6 +70,10 @@
 
 namespace nfdc {
 
+using ndn::bind;
+using ndn::_1;
+using ndn::_2;
+
 const ndn::time::milliseconds Nfdc::DEFAULT_EXPIRATION_PERIOD = ndn::time::milliseconds::max();
 const uint64_t Nfdc::DEFAULT_COST = 0;
 
@@ -186,9 +190,11 @@
   parameters.setUri(canonicalUri.toString());
 
   m_controller.start<FaceCreateCommand>(parameters,
-                                        bind(&Nfdc::fibAddNextHop, this, _1),
+                                        [this](const ControlParameters& result) {
+                                          fibAddNextHop(result);
+                                        },
                                         bind(&Nfdc::onError, this, _1, _2,
-                                             "Face creation failed"));
+                                                  "Face creation failed"));
 }
 
 void
@@ -273,7 +279,9 @@
   parameters.setUri(canonicalUri.toString());
 
   m_controller.start<FaceCreateCommand>(parameters,
-                                        bind(&Nfdc::ribRegisterPrefix, this, _1),
+                                        [this](const ControlParameters& result) {
+                                          ribRegisterPrefix(result);
+                                        },
                                         bind(&Nfdc::onError, this, _1, _2,
                                              "Face creation failed"));
 }
@@ -389,7 +397,9 @@
   parameters.setUri(canonicalUri.toString());
 
   m_controller.start<FaceCreateCommand>(parameters,
-                                        bind(&Nfdc::faceDestroy, this, _1),
+                                        [this](const ControlParameters& result) {
+                                          faceDestroy(result);
+                                        },
                                         bind(&Nfdc::onError, this, _1, _2,
                                              "Face destroy failed"));
 }
