diff --git a/src/common.hpp b/src/common.hpp
index aa38241..ed2bf19 100644
--- a/src/common.hpp
+++ b/src/common.hpp
@@ -82,7 +82,18 @@
 
 using std::function;
 using std::bind;
-using std::placeholders; // _1, _2, ..
+using std::placeholders::_1;
+using std::placeholders::_2;
+using std::placeholders::_3;
+using std::placeholders::_4;
+using std::placeholders::_5;
+using std::placeholders::_6;
+using std::placeholders::_7;
+using std::placeholders::_8;
+using std::placeholders::_9;
+
+using std::ref;
+using std::cref;
 
 } // namespace ndn
 
@@ -114,6 +125,9 @@
 using boost::function;
 using boost::bind;
 
+using boost::ref;
+using boost::cref;
+
 } // namespace ndn
 
 #endif // NDN_CXX_HAVE_CXX11
diff --git a/src/encoding/buffer.hpp b/src/encoding/buffer.hpp
index 616832c..3130a73 100644
--- a/src/encoding/buffer.hpp
+++ b/src/encoding/buffer.hpp
@@ -20,8 +20,8 @@
 namespace ndn {
 
 class Buffer;
-typedef ptr_lib::shared_ptr<const Buffer> ConstBufferPtr;
-typedef ptr_lib::shared_ptr<Buffer> BufferPtr;
+typedef shared_ptr<const Buffer> ConstBufferPtr;
+typedef shared_ptr<Buffer> BufferPtr;
 
 /**
  * @brief Class representing a general-use automatically managed/resized buffer
diff --git a/src/face.cpp b/src/face.cpp
index d351c0a..44de6cc 100644
--- a/src/face.cpp
+++ b/src/face.cpp
@@ -92,8 +92,8 @@
   m_transport = transport;
   m_ioService = ioService;
 
-  m_pitTimeoutCheckTimer      = make_shared<monotonic_deadline_timer>(boost::ref(*m_ioService));
-  m_processEventsTimeoutTimer = make_shared<monotonic_deadline_timer>(boost::ref(*m_ioService));
+  m_pitTimeoutCheckTimer      = make_shared<monotonic_deadline_timer>(ref(*m_ioService));
+  m_processEventsTimeoutTimer = make_shared<monotonic_deadline_timer>(ref(*m_ioService));
 
   std::string protocol = "nrd-0.1";
 
@@ -112,15 +112,15 @@
 
   if (isSupportedNrdProtocol(protocol))
     {
-      m_fwController = make_shared<nrd::Controller>(boost::ref(*this));
+      m_fwController = make_shared<nrd::Controller>(ref(*this));
     }
   else if (isSupportedNfdProtocol(protocol))
     {
-      m_fwController = make_shared<nfd::Controller>(boost::ref(*this));
+      m_fwController = make_shared<nfd::Controller>(ref(*this));
     }
   else if (isSupportedNdndProtocol(protocol))
     {
-      m_fwController = make_shared<ndnd::Controller>(boost::ref(*this));
+      m_fwController = make_shared<ndnd::Controller>(ref(*this));
     }
   else
     {
@@ -135,7 +135,7 @@
     m_transport->connect(*m_ioService,
                         bind(&Face::onReceiveElement, this, _1));
 
-  shared_ptr<const Interest> interestToExpress(new Interest(interest));
+  shared_ptr<Interest> interestToExpress(new Interest(interest));
 
   // If the same ioService thread, dispatch directly calls the method
   m_ioService->dispatch(bind(&Face::asyncExpressInterest, this,
@@ -219,6 +219,12 @@
   m_pendingInterestTable.remove_if(MatchPendingInterestId(pendingInterestId));
 }
 
+void
+Face::finalizeSetInterestFilter(const shared_ptr<RegisteredPrefix>& registeredPrefix)
+{
+  m_registeredPrefixTable.push_back(registeredPrefix);
+}
+
 const RegisteredPrefixId*
 Face::setInterestFilter(const Name& prefix,
                         const OnInterest& onInterest,
@@ -227,8 +233,7 @@
   shared_ptr<RegisteredPrefix> prefixToRegister(new RegisteredPrefix(prefix, onInterest));
 
   m_fwController->selfRegisterPrefix(prefixToRegister->getPrefix(),
-                                     bind(&RegisteredPrefixTable::push_back,
-                                          &m_registeredPrefixTable, prefixToRegister),
+                                     bind(&Face::finalizeSetInterestFilter, this, prefixToRegister),
                                      bind(onSetInterestFilterFailed,
                                           prefixToRegister->getPrefix(), _1));
 
@@ -244,8 +249,7 @@
   shared_ptr<RegisteredPrefix> prefixToRegister(new RegisteredPrefix(prefix, onInterest));
 
   m_fwController->selfRegisterPrefix(prefixToRegister->getPrefix(),
-                                     bind(&RegisteredPrefixTable::push_back,
-                                          &m_registeredPrefixTable, prefixToRegister),
+                                     bind(&Face::finalizeSetInterestFilter, this, prefixToRegister),
                                      bind(onSetInterestFilterFailed,
                                           prefixToRegister->getPrefix(), _1),
                                      certificate);
@@ -262,8 +266,7 @@
   shared_ptr<RegisteredPrefix> prefixToRegister(new RegisteredPrefix(prefix, onInterest));
 
   m_fwController->selfRegisterPrefix(prefixToRegister->getPrefix(),
-                                     bind(&RegisteredPrefixTable::push_back,
-                                          &m_registeredPrefixTable, prefixToRegister),
+                                     bind(&Face::finalizeSetInterestFilter, this, prefixToRegister),
                                      bind(onSetInterestFilterFailed,
                                           prefixToRegister->getPrefix(), _1),
                                      identity);
@@ -380,7 +383,7 @@
 
       if (keepThread) {
         // work will ensure that m_ioService is running until work object exists
-        m_ioServiceWork = make_shared<boost::asio::io_service::work>(boost::ref(*m_ioService));
+        m_ioServiceWork = make_shared<boost::asio::io_service::work>(ref(*m_ioService));
       }
 
       m_ioService->run();
diff --git a/src/face.hpp b/src/face.hpp
index 48f253e..d0efc03 100644
--- a/src/face.hpp
+++ b/src/face.hpp
@@ -394,6 +394,9 @@
                                        const Name& identity);
 
   void
+  finalizeSetInterestFilter(const shared_ptr<RegisteredPrefix>& registeredPrefix);
+
+  void
   finalizeUnsetInterestFilter(RegisteredPrefixTable::iterator item);
 
   void
diff --git a/src/management/nfd-controller.hpp b/src/management/nfd-controller.hpp
index 583be71..081389e 100644
--- a/src/management/nfd-controller.hpp
+++ b/src/management/nfd-controller.hpp
@@ -53,7 +53,7 @@
     start<Command>(parameters, onSuccess, onFailure,
                    bind(&CommandInterestGenerator::generate,
                         &m_commandInterestGenerator, _1,
-                        boost::cref(Name())),
+                        Name()),
                    timeout);
   }
 
@@ -68,7 +68,7 @@
     start<Command>(parameters, onSuccess, onFailure,
                    bind(&CommandInterestGenerator::generate,
                         &m_commandInterestGenerator, _1,
-                        boost::cref(certificate.getName())),
+                        cref(certificate.getName())),
                    timeout);
   }
 
@@ -83,7 +83,7 @@
     start<Command>(parameters, onSuccess, onFailure,
                    bind(&CommandInterestGenerator::generateWithIdentity,
                         &m_commandInterestGenerator, _1,
-                        boost::cref(identity)),
+                        cref(identity)),
                    timeout);
   }
 
@@ -96,7 +96,7 @@
     this->selfRegisterPrefix(prefixToRegister, onSuccess, onFail,
                              bind(&CommandInterestGenerator::generate,
                                   &m_commandInterestGenerator, _1,
-                                  boost::cref(Name())));
+                                  Name()));
   }
 
   virtual void
@@ -108,7 +108,7 @@
     this->selfRegisterPrefix(prefixToRegister, onSuccess, onFail,
                              bind(&CommandInterestGenerator::generate,
                                   &m_commandInterestGenerator, _1,
-                                  boost::cref(certificate.getName())));
+                                  cref(certificate.getName())));
   }
 
   virtual void
@@ -120,7 +120,7 @@
     this->selfRegisterPrefix(prefixToRegister, onSuccess, onFail,
                              bind(&CommandInterestGenerator::generateWithIdentity,
                                   &m_commandInterestGenerator, _1,
-                                  boost::cref(identity)));
+                                  cref(identity)));
   }
 
   virtual void
@@ -131,7 +131,7 @@
     this->selfDeregisterPrefix(prefixToDeRegister, onSuccess, onFail,
                                bind(&CommandInterestGenerator::generate,
                                     &m_commandInterestGenerator, _1,
-                                    boost::cref(Name())));
+                                    Name()));
   }
 
   virtual void
@@ -143,7 +143,7 @@
     this->selfDeregisterPrefix(prefixToDeRegister, onSuccess, onFail,
                                bind(&CommandInterestGenerator::generate,
                                     &m_commandInterestGenerator, _1,
-                                    boost::cref(certificate.getName())));
+                                    cref(certificate.getName())));
   }
 
   virtual void
@@ -155,7 +155,7 @@
     this->selfDeregisterPrefix(prefixToDeRegister, onSuccess, onFail,
                                bind(&CommandInterestGenerator::generateWithIdentity,
                                     &m_commandInterestGenerator, _1,
-                                    boost::cref(identity)));
+                                    cref(identity)));
   }
 
 protected:
diff --git a/src/security/conf/checker.hpp b/src/security/conf/checker.hpp
index cb56d85..05eb8c1 100644
--- a/src/security/conf/checker.hpp
+++ b/src/security/conf/checker.hpp
@@ -380,8 +380,7 @@
     if (propertyIt != configSection.end())
       throw Error("Expect the end of checker!");
 
-    return make_shared<CustomizedChecker>(boost::cref(getSigType(sigType)),
-                                          boost::cref(keyLocatorChecker));
+    return make_shared<CustomizedChecker>(getSigType(sigType), cref(keyLocatorChecker));
   }
 
   static shared_ptr<Checker>
@@ -401,7 +400,7 @@
     if (propertyIt != configSection.end())
       throw Error("Expect the end of checker!");
 
-    return make_shared<HierarchicalChecker>(boost::cref(getSigType(sigType)));
+    return make_shared<HierarchicalChecker>(getSigType(sigType));
   }
 
   static shared_ptr<Checker>
diff --git a/src/security/conf/filter.hpp b/src/security/conf/filter.hpp
index 5891c76..8fa91b8 100644
--- a/src/security/conf/filter.hpp
+++ b/src/security/conf/filter.hpp
@@ -199,8 +199,8 @@
         if (propertyIt != configSection.end())
           throw Error("Expect the end of filter!");
 
-        return make_shared<RelationNameFilter>(boost::cref(name),
-                                               boost::cref(relation));
+        return make_shared<RelationNameFilter>(cref(name),
+                                               cref(relation));
       }
     else if (boost::iequals(propertyIt->first, "regex"))
       {
diff --git a/src/security/key-chain.cpp b/src/security/key-chain.cpp
index 58c3570..67cdda6 100644
--- a/src/security/key-chain.cpp
+++ b/src/security/key-chain.cpp
@@ -265,8 +265,8 @@
       m_pib->addCertificateAsIdentityDefault(*cert);
     }
 
-  shared_ptr<SecuredBag> secureBag = make_shared<SecuredBag>(boost::cref(*cert),
-                                                             boost::cref(pkcs5));
+  // make_shared on OSX 10.9 has some strange problem here
+  shared_ptr<SecuredBag> secureBag(new SecuredBag(*cert, pkcs5));
 
   return secureBag;
 }
diff --git a/src/security/sec-public-info-memory.cpp b/src/security/sec-public-info-memory.cpp
index f84b291..c9efc2f 100644
--- a/src/security/sec-public-info-memory.cpp
+++ b/src/security/sec-public-info-memory.cpp
@@ -61,7 +61,7 @@
 
   addIdentity(identityName);
 
-  m_keyStore[keyName.toUri()] = make_shared<KeyRecord>(keyType, boost::cref(publicKey));
+  m_keyStore[keyName.toUri()] = make_shared<KeyRecord>(keyType, cref(publicKey));
 }
 
 shared_ptr<PublicKey>
diff --git a/src/security/validator-config.cpp b/src/security/validator-config.cpp
index 80d2fb1..11f63a3 100644
--- a/src/security/validator-config.cpp
+++ b/src/security/validator-config.cpp
@@ -33,7 +33,7 @@
   , m_certificateCache(certificateCache)
 {
   if (!static_cast<bool>(m_certificateCache))
-    m_certificateCache = make_shared<CertificateCacheTtl>(boost::ref(m_face.getIoService()));
+    m_certificateCache = make_shared<CertificateCacheTtl>(ref(m_face.getIoService()));
 }
 
 void
diff --git a/src/security/validator-config.hpp b/src/security/validator-config.hpp
index 00d7c66..9dc69e3 100644
--- a/src/security/validator-config.hpp
+++ b/src/security/validator-config.hpp
@@ -209,7 +209,7 @@
           Interest certInterest(keyLocatorName);
 
           shared_ptr<ValidationRequest> nextStep =
-            make_shared<ValidationRequest>(boost::cref(certInterest),
+            make_shared<ValidationRequest>(cref(certInterest),
                                            onCertValidated,
                                            onCertValidationFailed,
                                            1, nSteps + 1);
@@ -229,7 +229,7 @@
                                  const OnFailed& onValidationFailed)
 {
   shared_ptr<IdentityCertificate> certificate =
-    make_shared<IdentityCertificate>(boost::cref(*signCertificate));
+    make_shared<IdentityCertificate>(cref(*signCertificate));
 
   if (!certificate->isTooLate() && !certificate->isTooEarly())
     {
diff --git a/src/security/validator-regex.cpp b/src/security/validator-regex.cpp
index c0797c7..b4fd1b8 100644
--- a/src/security/validator-regex.cpp
+++ b/src/security/validator-regex.cpp
@@ -36,7 +36,7 @@
   , m_certificateCache(certificateCache)
 {
   if (!static_cast<bool>(m_certificateCache))
-    m_certificateCache = make_shared<CertificateCacheTtl>(boost::ref(m_face.getIoService()));
+    m_certificateCache = make_shared<CertificateCacheTtl>(ref(m_face.getIoService()));
 }
 
 void
@@ -46,7 +46,7 @@
                                        const OnDataValidationFailed& onValidationFailed)
 {
   shared_ptr<IdentityCertificate> certificate =
-    make_shared<IdentityCertificate>(boost::cref(*signCertificate));
+    make_shared<IdentityCertificate>(cref(*signCertificate));
 
   if (!certificate->isTooLate() && !certificate->isTooEarly())
     {
@@ -137,7 +137,7 @@
 
                   Interest interest(sig.getKeyLocator().getName());
                   shared_ptr<ValidationRequest> nextStep =
-                    make_shared<ValidationRequest>(boost::cref(interest),
+                    make_shared<ValidationRequest>(cref(interest),
                                                    onKeyValidated,
                                                    onKeyValidationFailed,
                                                    3,
diff --git a/src/transport/stream-transport.hpp b/src/transport/stream-transport.hpp
index ca1ce9a..c9d61b7 100644
--- a/src/transport/stream-transport.hpp
+++ b/src/transport/stream-transport.hpp
@@ -59,7 +59,7 @@
             buffer.push_back(boost::asio::buffer(i->first.wire(),  i->first.size()));
             buffer.push_back(boost::asio::buffer(i->second.wire(), i->second.size()));
             m_socket.async_send(buffer,
-                                bind(&impl::handle_async_send, this, _1, i->first, i->second));
+                                bind(&impl::handle_async_send2, this, _1, i->first, i->second));
           }
 
         m_sendQueue.clear();
@@ -172,7 +172,7 @@
         buffers.push_back(boost::asio::buffer(payload.wire(), payload.size()));
 
         m_socket.async_send(buffers,
-                            bind(&impl::handle_async_send, this, _1, header, payload));
+                            bind(&impl::handle_async_send2, this, _1, header, payload));
       }
   }
 
@@ -253,8 +253,8 @@
   }
 
   void
-  handle_async_send(const boost::system::error_code& error,
-                    const Block& header, const Block& payload)
+  handle_async_send2(const boost::system::error_code& error,
+                     const Block& header, const Block& payload)
   {
     // pass (needed to keep data blocks alive during the send)
   }
@@ -327,7 +327,7 @@
 
       // typename boost::asio::ip::basic_resolver< protocol > resolver;
       shared_ptr<typename protocol::resolver> resolver =
-        make_shared<typename protocol::resolver>(boost::ref(this->m_socket.get_io_service()));
+        make_shared<typename protocol::resolver>(ref(this->m_socket.get_io_service()));
 
       resolver->async_resolve(query, bind(&impl::resolveHandler, this, _1, _2, resolver));
     }
diff --git a/src/transport/tcp-transport.cpp b/src/transport/tcp-transport.cpp
index 8f835a6..fafe987 100644
--- a/src/transport/tcp-transport.cpp
+++ b/src/transport/tcp-transport.cpp
@@ -34,8 +34,7 @@
   if (!static_cast<bool>(m_impl)) {
     Transport::connect(ioService, receiveCallback);
 
-    m_impl = make_shared<Impl> (boost::ref(*this),
-                                boost::ref(ioService));
+    m_impl = make_shared<Impl>(ref(*this), ref(ioService));
   }
 
   boost::asio::ip::tcp::resolver::query query(m_host, m_port);
diff --git a/src/transport/unix-transport.cpp b/src/transport/unix-transport.cpp
index cce5f0f..a7acd44 100644
--- a/src/transport/unix-transport.cpp
+++ b/src/transport/unix-transport.cpp
@@ -77,8 +77,7 @@
   if (!static_cast<bool>(m_impl)) {
     Transport::connect(ioService, receiveCallback);
 
-    m_impl = make_shared<Impl> (boost::ref(*this),
-                                boost::ref(ioService));
+    m_impl = make_shared<Impl>(ref(*this), ref(ioService));
   }
 
   m_impl->connect(boost::asio::local::stream_protocol::endpoint(m_unixSocket));
diff --git a/src/util/regex/regex-pattern-list-matcher.hpp b/src/util/regex/regex-pattern-list-matcher.hpp
index d6e3a72..827c3f2 100644
--- a/src/util/regex/regex-pattern-list-matcher.hpp
+++ b/src/util/regex/regex-pattern-list-matcher.hpp
@@ -97,7 +97,7 @@
       shared_ptr<RegexMatcher> matcher =
         make_shared<RegexBackrefMatcher>(m_expr.substr(start, end - start), m_backrefManager);
       m_backrefManager->pushRef(matcher);
-      boost::dynamic_pointer_cast<RegexBackrefMatcher>(matcher)->lateCompile();
+      dynamic_pointer_cast<RegexBackrefMatcher>(matcher)->lateCompile();
 
       m_matcherList.push_back(matcher);
     }
diff --git a/src/util/regex/regex-repeat-matcher.hpp b/src/util/regex/regex-repeat-matcher.hpp
index 502369f..ce0abb1 100644
--- a/src/util/regex/regex-repeat-matcher.hpp
+++ b/src/util/regex/regex-repeat-matcher.hpp
@@ -89,7 +89,7 @@
   if ('(' == m_expr[0]){
     matcher = make_shared<RegexBackrefMatcher>(m_expr.substr(0, m_indicator), m_backrefManager);
     m_backrefManager->pushRef(matcher);
-    boost::dynamic_pointer_cast<RegexBackrefMatcher>(matcher)->lateCompile();
+    dynamic_pointer_cast<RegexBackrefMatcher>(matcher)->lateCompile();
   }
   else{
     matcher = make_shared<RegexComponentSetMatcher>(m_expr.substr(0, m_indicator),
diff --git a/src/util/regex/regex-top-matcher.cpp b/src/util/regex/regex-top-matcher.cpp
index b00a891..6a4cf36 100644
--- a/src/util/regex/regex-top-matcher.cpp
+++ b/src/util/regex/regex-top-matcher.cpp
@@ -47,13 +47,13 @@
     expr = expr.substr(0, expr.size()-1);
 
   if ('^' != expr[0])
-    m_secondaryMatcher = make_shared<RegexPatternListMatcher>(boost::cref("<.*>*" + expr),
-                                                              boost::cref(m_secondaryBackRefManager));
+    m_secondaryMatcher = make_shared<RegexPatternListMatcher>("<.*>*" + expr,
+                                                              cref(m_secondaryBackRefManager));
   else
     expr = expr.substr(1, expr.size()-1);
 
-  m_primaryMatcher = make_shared<RegexPatternListMatcher>(boost::cref(expr),
-                                                          boost::cref(m_primaryBackRefManager));
+  m_primaryMatcher = make_shared<RegexPatternListMatcher>(func_lib::cref(expr),
+                                                          func_lib::cref(m_primaryBackRefManager));
 }
 
 bool
@@ -199,7 +199,8 @@
   if (hasAnchor)
     regexStr.append("$");
 
-  return make_shared<RegexTopMatcher>(boost::cref(regexStr));
+  // OSX 10.9 has problems with just cref
+  return make_shared<RegexTopMatcher>(func_lib::cref(regexStr));
 }
 
 std::string
diff --git a/src/util/scheduler.cpp b/src/util/scheduler.cpp
index 9a51871..4e74d10 100644
--- a/src/util/scheduler.cpp
+++ b/src/util/scheduler.cpp
@@ -62,7 +62,8 @@
 {
 }
 
-Scheduler::EventInfo::EventInfo(const time::steady_clock::TimePoint& when, const EventInfo& previousEvent)
+Scheduler::EventInfo::EventInfo(const time::steady_clock::TimePoint& when,
+                                const EventInfo& previousEvent)
   : m_scheduledTime(when)
   , m_period(previousEvent.m_period)
   , m_event(previousEvent.m_event)
@@ -101,7 +102,7 @@
                                  const Event& event)
 {
   EventQueue::iterator i = m_events.insert(EventInfo(after, period, event));
-  i->m_eventId = make_shared<EventIdImpl>(boost::cref(i));
+  i->m_eventId = make_shared<EventIdImpl>(func_lib::cref(i));
 
   if (!m_isEventExecuting)
     {
