diff --git a/src/management/nfd-control-parameters.hpp b/src/management/nfd-control-parameters.hpp
index c92a23f..0eff8ae 100644
--- a/src/management/nfd-control-parameters.hpp
+++ b/src/management/nfd-control-parameters.hpp
@@ -13,17 +13,6 @@
 namespace ndn {
 namespace nfd {
 
-class ControlParameters;
-/** \deprecated use ControlParameters instead
- */
-typedef ControlParameters FaceManagementOptions;
-/** \deprecated use ControlParameters instead
- */
-typedef ControlParameters FibManagementOptions;
-/** \deprecated use ControlParameters instead
- */
-typedef ControlParameters StrategyChoiceOptions;
-
 enum ControlParameterField {
   CONTROL_PARAMETER_NAME,
   CONTROL_PARAMETER_FACE_ID,
diff --git a/src/management/nfd-controller.cpp b/src/management/nfd-controller.cpp
index 5a7e397..08285c1 100644
--- a/src/management/nfd-controller.cpp
+++ b/src/management/nfd-controller.cpp
@@ -69,7 +69,7 @@
 void
 Controller::selfRegisterPrefix(const Name& prefixToRegister,
                                const SuccessCallback& onSuccess,
-                               const FailCallback&    onFail)
+                               const FailCallback& onFail)
 {
   const uint32_t selfFaceId = 0;
 
@@ -85,7 +85,7 @@
 void
 Controller::selfDeregisterPrefix(const Name& prefixToDeRegister,
                                  const SuccessCallback& onSuccess,
-                                 const FailCallback&    onFail)
+                                 const FailCallback& onFail)
 {
   const uint32_t selfFaceId = 0;
 
@@ -98,101 +98,5 @@
                                        bind(onFail, _2));
 }
 
-void
-Controller::fibAddNextHop(const Name& prefix, uint64_t faceId, int cost,
-                          const FibCommandSucceedCallback& onSuccess,
-                          const FailCallback& onFail)
-{
-  BOOST_ASSERT(cost >= 0);
-
-  ControlParameters parameters;
-  parameters.setName(prefix)
-            .setFaceId(faceId)
-            .setCost(static_cast<uint64_t>(cost));
-
-  this->start<FibAddNextHopCommand>(parameters,
-                                    onSuccess,
-                                    bind(onFail, _2));
-}
-
-void
-Controller::fibRemoveNextHop(const Name& prefix, uint64_t faceId,
-                             const FibCommandSucceedCallback& onSuccess,
-                             const FailCallback& onFail)
-{
-  ControlParameters parameters;
-  parameters.setName(prefix)
-            .setFaceId(faceId);
-
-  this->start<FibRemoveNextHopCommand>(parameters,
-                                       onSuccess,
-                                       bind(onFail, _2));
-}
-
-void
-Controller::startFibCommand(const std::string& command,
-                            const FibManagementOptions& options,
-                            const FibCommandSucceedCallback& onSuccess,
-                            const FailCallback& onFail)
-{
-  if (command == "add-nexthop") {
-    this->start<FibAddNextHopCommand>(options,
-                                      onSuccess,
-                                      bind(onFail, _2));
-  }
-  else if (command == "remove-nexthop") {
-    this->start<FibRemoveNextHopCommand>(options,
-                                         onSuccess,
-                                         bind(onFail, _2));
-  }
-  else {
-    onFail("unknown command");
-  }
-}
-
-void
-Controller::startFaceCommand(const std::string& command,
-                             const FaceManagementOptions& options,
-                             const FaceCommandSucceedCallback& onSuccess,
-                             const FailCallback& onFail)
-{
-  if (command == "create") {
-    this->start<FaceCreateCommand>(options,
-                                   onSuccess,
-                                   bind(onFail, _2));
-  }
-  else if (command == "destroy") {
-    this->start<FaceDestroyCommand>(options,
-                                    onSuccess,
-                                    bind(onFail, _2));
-  }
-  // enable-local-control and disable-local-control are not in legacy API.
-  else {
-    onFail("unknown command");
-  }
-}
-
-void
-Controller::startStrategyChoiceCommand(const std::string& command,
-                                       const StrategyChoiceOptions& options,
-                                       const StrategyChoiceCommandSucceedCallback& onSuccess,
-                                       const FailCallback& onFail)
-{
-  if (command == "set") {
-    this->start<StrategyChoiceSetCommand>(options,
-                                          onSuccess,
-                                          bind(onFail, _2));
-  }
-  else if (command == "unset") {
-    this->start<StrategyChoiceUnsetCommand>(options,
-                                            onSuccess,
-                                            bind(onFail, _2));
-  }
-  else {
-    onFail("unknown command");
-  }
-}
-
-
 } // namespace nfd
 } // namespace ndn
diff --git a/src/management/nfd-controller.hpp b/src/management/nfd-controller.hpp
index 536994c..823169a 100644
--- a/src/management/nfd-controller.hpp
+++ b/src/management/nfd-controller.hpp
@@ -35,8 +35,8 @@
   template<typename Command>
   void
   start(const ControlParameters& parameters,
-               const CommandSucceedCallback& onSuccess,
-               const CommandFailCallback&    onFailure);
+        const CommandSucceedCallback& onSuccess,
+        const CommandFailCallback& onFailure);
 
 public: // selfreg
   virtual void
@@ -49,81 +49,6 @@
                        const SuccessCallback& onSuccess,
                        const FailCallback&    onFail);
 
-public:
-  /** \deprecated use CommandSucceedCallback instead
-   */
-  typedef function<void(const FibManagementOptions&)> FibCommandSucceedCallback;
-  /** \deprecated use CommandSucceedCallback instead
-   */
-  typedef function<void(const FaceManagementOptions&)> FaceCommandSucceedCallback;
-  /** \deprecated use CommandSucceedCallback instead
-   */
-  typedef function<void(const StrategyChoiceOptions&)> StrategyChoiceCommandSucceedCallback;
-
-  /**
-   * \brief Adds a nexthop to an existing or new FIB entry
-   * \deprecated use startCommand instead
-   *
-   * If FIB entry for the specified prefix does not exist, it will be automatically created.
-   *
-   * \param prefix    Prefix of the FIB entry
-   * \param faceId    ID of the face which should be added as a next hop for prefix FIB entry.
-   *                  If a nexthop of same FaceId exists on the FIB entry, its cost is updated.
-   *                  If FaceId is set to zero, it is implied as the face of the entity sending
-   *                  this command.
-   * \param cost      Cost that should be associated with the next hop
-   * \param onSuccess Callback that will be called when operation succeeds
-   * \param onFail    Callback that will be called when operation fails
-   */
-  void
-  fibAddNextHop(const Name& prefix, uint64_t faceId, int cost,
-                const FibCommandSucceedCallback& onSuccess,
-                const FailCallback& onFail);
-
-  /**
-   * \brief Remove a nexthop from FIB entry
-   * \deprecated use startCommand instead
-   *
-   * If after removal of the nexthop FIB entry has zero next hops, this FIB entry will
-   * be automatically deleted.
-   *
-   * \param prefix    Prefix of the FIB entry
-   * \param faceId    ID of the face which should be removed FIB entry.
-   *                  If FaceId is set to zero, it is implied as the face of the entity sending
-   *                  this command.
-   * \param onSuccess Callback that will be called when operation succeeds
-   * \param onFail    Callback that will be called when operation fails
-   */
-  void
-  fibRemoveNextHop(const Name& prefix, uint64_t faceId,
-                   const FibCommandSucceedCallback& onSuccess,
-                   const FailCallback& onFail);
-
-protected:
-  /** \deprecated use startCommand instead
-   */
-  void
-  startFibCommand(const std::string& command,
-                  const FibManagementOptions& options,
-                  const FibCommandSucceedCallback& onSuccess,
-                  const FailCallback& onFailure);
-
-  /** \deprecated use startCommand instead
-   */
-  void
-  startFaceCommand(const std::string& command,
-                   const FaceManagementOptions& options,
-                   const FaceCommandSucceedCallback& onSuccess,
-                   const FailCallback& onFailure);
-
-  /** \deprecated use startCommand instead
-   */
-  void
-  startStrategyChoiceCommand(const std::string& command,
-                             const StrategyChoiceOptions& options,
-                             const StrategyChoiceCommandSucceedCallback& onSuccess,
-                             const FailCallback& onFailure);
-
 private:
   void
   processCommandResponse(const Data& data,
diff --git a/src/management/nfd-face-management-options.hpp b/src/management/nfd-face-management-options.hpp
deleted file mode 100644
index 5efc4f8..0000000
--- a/src/management/nfd-face-management-options.hpp
+++ /dev/null
@@ -1,12 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/**
- * Copyright (C) 2013 Regents of the University of California.
- * See COPYING for copyright and distribution information.
- */
-
-#ifndef NDN_MANAGEMENT_NFD_FACE_MANAGEMENT_OPTIONS_HPP
-#define NDN_MANAGEMENT_NFD_FACE_MANAGEMENT_OPTIONS_HPP
-
-#include "nfd-control-parameters.hpp"
-
-#endif // NDN_MANAGEMENT_NFD_FACE_MANAGEMENT_OPTIONS_HPP
diff --git a/src/management/nfd-fib-management-options.hpp b/src/management/nfd-fib-management-options.hpp
deleted file mode 100644
index d1270c3..0000000
--- a/src/management/nfd-fib-management-options.hpp
+++ /dev/null
@@ -1,15 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/**
- * Copyright (C) 2013 Regents of the University of California.
- *
- * @author: Wentao Shang <wentao@cs.ucla.edu>
- *
- * See COPYING for copyright and distribution information.
- */
-
-#ifndef NDN_MANAGEMENT_NFD_FIB_MANAGEMENT_OPTIONS_HPP
-#define NDN_MANAGEMENT_NFD_FIB_MANAGEMENT_OPTIONS_HPP
-
-#include "nfd-control-parameters.hpp"
-
-#endif // NDN_MANAGEMENT_NFD_FIB_MANAGEMENT_OPTIONS_HPP
diff --git a/src/management/nfd-status.hpp b/src/management/nfd-status.hpp
deleted file mode 100644
index 4725a66..0000000
--- a/src/management/nfd-status.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/**
- * Copyright (C) 2013 Regents of the University of California.
- * See COPYING for copyright and distribution information.
- */
-
-#ifndef NDN_MANAGEMENT_NFD_STATUS_HPP
-#define NDN_MANAGEMENT_NFD_STATUS_HPP
-
-#include "nfd-forwarder-status.hpp"
-
-namespace ndn {
-namespace nfd {
-
-/** \deprecated use ForwarderStatus instead
- */
-typedef ForwarderStatus Status;
-
-} // namespace nfd
-} // namespace ndn
-
-#endif // NDN_MANAGEMENT_NFD_STATUS_HPP
diff --git a/src/management/nfd-strategy-choice-options.hpp b/src/management/nfd-strategy-choice-options.hpp
deleted file mode 100644
index 99889c7..0000000
--- a/src/management/nfd-strategy-choice-options.hpp
+++ /dev/null
@@ -1,12 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
-* Copyright (C) 2014 Named Data Networking Project
-* See COPYING for copyright and distribution information.
-*/
-
-#ifndef NDN_MANAGEMENT_NFD_STRATEGY_CHOICE_OPTIONS_HPP
-#define NDN_MANAGEMENT_NFD_STRATEGY_CHOICE_OPTIONS_HPP
-
-#include "nfd-control-parameters.hpp"
-
-#endif // NDN_MANAGEMENT_NFD_STRATEGY_CHOICE_MANAGEMENT_OPTIONS_HPP
diff --git a/tests/management/test-ndnd-forwarding-entry.cpp b/tests/management/test-ndnd-forwarding-entry.cpp
index c116fd6..1a47780 100644
--- a/tests/management/test-ndnd-forwarding-entry.cpp
+++ b/tests/management/test-ndnd-forwarding-entry.cpp
@@ -17,7 +17,7 @@
                                         0x08, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
                                       0x8a, 0x01, 0x03};
 
-BOOST_AUTO_TEST_SUITE(TestForwardingEntry)
+BOOST_AUTO_TEST_SUITE(ManagementTestNdndForwardingEntry)
 
 BOOST_AUTO_TEST_CASE (Encode)
 {
diff --git a/tests/management/nfd-control-command.cpp b/tests/management/test-nfd-control-command.cpp
similarity index 99%
rename from tests/management/nfd-control-command.cpp
rename to tests/management/test-nfd-control-command.cpp
index 2a3dec4..36d19e0 100644
--- a/tests/management/nfd-control-command.cpp
+++ b/tests/management/test-nfd-control-command.cpp
@@ -11,7 +11,7 @@
 namespace ndn {
 namespace nfd {
 
-BOOST_AUTO_TEST_SUITE(NfdControlCommand)
+BOOST_AUTO_TEST_SUITE(ManagementTestNfdControlCommand)
 
 BOOST_AUTO_TEST_CASE(FaceCreate)
 {
diff --git a/tests/management/nfd-control-parameters.cpp b/tests/management/test-nfd-control-parameters.cpp
similarity index 97%
rename from tests/management/nfd-control-parameters.cpp
rename to tests/management/test-nfd-control-parameters.cpp
index d8c203b..e0733a3 100644
--- a/tests/management/nfd-control-parameters.cpp
+++ b/tests/management/test-nfd-control-parameters.cpp
@@ -11,7 +11,7 @@
 namespace ndn {
 namespace nfd {
 
-BOOST_AUTO_TEST_SUITE(NfdControlParameters)
+BOOST_AUTO_TEST_SUITE(ManagementTestNfdControlParameters)
 
 BOOST_AUTO_TEST_CASE(FaceOptions)
 {
diff --git a/tests/management/test-nfd-control-response.cpp b/tests/management/test-nfd-control-response.cpp
new file mode 100644
index 0000000..a7add12
--- /dev/null
+++ b/tests/management/test-nfd-control-response.cpp
@@ -0,0 +1,45 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/**
+ * Copyright (C) 2013 Regents of the University of California.
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "management/nfd-control-response.hpp"
+
+#include "boost-test.hpp"
+
+namespace ndn {
+namespace nfd {
+
+BOOST_AUTO_TEST_SUITE(ManagementTestNfdControlResponse)
+
+const uint8_t TestControlResponse[] = {0x65, 0x17,
+                                       0x66, 0x02, 0x01, 0x94, 0x67, 0x11, 0x4e, 0x6f, 0x74,
+                                       0x68, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x6f, 0x74, 0x20,
+                                       0x66, 0x6f, 0x75, 0x6e, 0x64};
+
+// ControlResponse
+
+BOOST_AUTO_TEST_CASE(ControlResponseEncode)
+{
+  ControlResponse controlResponse(404, "Nothing not found");
+  const Block &wire = controlResponse.wireEncode();
+
+  BOOST_REQUIRE_EQUAL_COLLECTIONS(TestControlResponse, TestControlResponse+sizeof(TestControlResponse),
+                                  wire.begin(), wire.end());
+}
+
+BOOST_AUTO_TEST_CASE(ControlResponseDecode)
+{
+  ControlResponse controlResponse;
+
+  BOOST_REQUIRE_NO_THROW(controlResponse.wireDecode(Block(TestControlResponse, sizeof(TestControlResponse))));
+
+  BOOST_REQUIRE_EQUAL(controlResponse.getCode(), 404);
+  BOOST_REQUIRE_EQUAL(controlResponse.getText(), "Nothing not found");
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} // namespace nfd
+} // namespace ndn
diff --git a/tests/management/test-nfd-control.cpp b/tests/management/test-nfd-control.cpp
deleted file mode 100644
index 0aabbe9..0000000
--- a/tests/management/test-nfd-control.cpp
+++ /dev/null
@@ -1,149 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/**
- * Copyright (C) 2013 Regents of the University of California.
- * See COPYING for copyright and distribution information.
- */
-
-#include "management/nfd-control-response.hpp"
-#include "management/nfd-fib-management-options.hpp"
-#include "management/nfd-face-management-options.hpp"
-
-#include "boost-test.hpp"
-
-namespace ndn {
-namespace nfd {
-
-BOOST_AUTO_TEST_SUITE(TestNfdControl)
-
-const uint8_t TestControlResponse[] = {0x65, 0x17,
-                                         0x66, 0x02, 0x01, 0x94, 0x67, 0x11, 0x4e, 0x6f, 0x74,
-                                         0x68, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x6f, 0x74, 0x20,
-                                         0x66, 0x6f, 0x75, 0x6e, 0x64};
-
-const uint8_t TestFibManagementOptions[] = {
-  0x68, 0x49, 0x07, 0x16, 0x08, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68,
-  0x6f, 0x73, 0x74, 0x08, 0x03, 0x72, 0x65, 0x67, 0x08, 0x04, 0x74, 0x65,
-  0x73, 0x74, 0x69, 0x01, 0x00, 0x6a, 0x01, 0x01, 0x6b, 0x29, 0x07, 0x27,
-  0x08, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x08,
-  0x03, 0x6e, 0x66, 0x64, 0x08, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65,
-  0x67, 0x79, 0x08, 0x0b, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x2d, 0x77, 0x6f,
-  0x72, 0x6c, 0x64
-};
-
-const uint8_t TestFaceManagementOptions[] = {
-  0x68, 0x1e, 0x69, 0x01, 0x0a, 0x72, 0x19, 0x74, 0x63, 0x70, 0x3a, 0x2f,
-  0x2f, 0x31, 0x2e, 0x31, 0x2e, 0x31, 0x2e, 0x31, 0x2f, 0x68, 0x65, 0x6c,
-  0x6c, 0x6f, 0x2f, 0x77, 0x6f, 0x72, 0x6c, 0x64
-};
-
-// ControlResponse
-
-BOOST_AUTO_TEST_CASE(ControlResponseEncode)
-{
-  ControlResponse controlResponse(404, "Nothing not found");
-  const Block &wire = controlResponse.wireEncode();
-
-  BOOST_REQUIRE_EQUAL_COLLECTIONS(TestControlResponse, TestControlResponse+sizeof(TestControlResponse),
-                                  wire.begin(), wire.end());
-}
-
-BOOST_AUTO_TEST_CASE(ControlResponseDecode)
-{
-  ControlResponse controlResponse;
-
-  BOOST_REQUIRE_NO_THROW(controlResponse.wireDecode(Block(TestControlResponse, sizeof(TestControlResponse))));
-
-  BOOST_REQUIRE_EQUAL(controlResponse.getCode(), 404);
-  BOOST_REQUIRE_EQUAL(controlResponse.getText(), "Nothing not found");
-}
-
-// FibManagementOptions
-
-BOOST_AUTO_TEST_CASE(FibManagementOptionsEncoding)
-{
-  Name n("/localhost/reg/test");
-  FibManagementOptions opt;
-
-  opt.setName(n);
-  opt.setFaceId(0);
-  opt.setCost(1);
-  opt.setStrategy("/localhost/nfd/strategy/hello-world");
-
-  const Block& blk = opt.wireEncode();
-
-  BOOST_REQUIRE_EQUAL_COLLECTIONS(TestFibManagementOptions,
-                                  TestFibManagementOptions + sizeof(TestFibManagementOptions),
-                                  blk.begin(), blk.end());
-}
-
-BOOST_AUTO_TEST_CASE(FibManagementOptionsFastEncoding)
-{
-  Name n("/localhost/reg/test");
-  FibManagementOptions opt;
-
-  opt.setName(n);
-  opt.setFaceId(0);
-  opt.setCost(1);
-  opt.setStrategy("/localhost/nfd/strategy/hello-world");
-
-  EncodingBuffer blk;
-
-  BOOST_REQUIRE_NO_THROW(opt.wireEncode(blk));
-
-  BOOST_REQUIRE_EQUAL_COLLECTIONS(TestFibManagementOptions,
-                                  TestFibManagementOptions + sizeof(TestFibManagementOptions),
-                                  blk.begin(), blk.end());
-
-  EncodingBuffer blk2(4);
-
-  BOOST_REQUIRE_NO_THROW(opt.wireEncode(blk2));
-
-  BOOST_REQUIRE_EQUAL_COLLECTIONS(TestFibManagementOptions,
-                                  TestFibManagementOptions + sizeof(TestFibManagementOptions),
-                                  blk2.begin(), blk2.end());
-}
-
-BOOST_AUTO_TEST_CASE(FibManagementOptionsDecoding)
-{
-  Block blk(TestFibManagementOptions, sizeof(TestFibManagementOptions));
-  Name n("/localhost/reg/test");
-  FibManagementOptions opt;
-
-  BOOST_REQUIRE_NO_THROW(opt.wireDecode(blk));
-
-  BOOST_CHECK_EQUAL(opt.getName(), n);
-  BOOST_CHECK_EQUAL(opt.getFaceId(), 0);
-  BOOST_CHECK_EQUAL(opt.getCost(), 1);
-  BOOST_CHECK_EQUAL(opt.getStrategy().toUri(), "/localhost/nfd/strategy/hello-world");
-}
-
-BOOST_AUTO_TEST_CASE(FaceManagementOptionsFastEncoding)
-{
-  FaceManagementOptions opt;
-
-  opt.setFaceId(10);
-  opt.setUri("tcp://1.1.1.1/hello/world");
-
-  BOOST_REQUIRE_NO_THROW(opt.wireEncode ());
-
-  BOOST_REQUIRE_EQUAL_COLLECTIONS(TestFaceManagementOptions,
-                                  TestFaceManagementOptions + sizeof(TestFaceManagementOptions),
-                                  opt.wireEncode().begin(), opt.wireEncode().end());
-}
-
-BOOST_AUTO_TEST_CASE(FaceManagementOptionsDecoding)
-{
-  Block blk(TestFaceManagementOptions, sizeof(TestFaceManagementOptions));
-  FaceManagementOptions opt;
-
-  BOOST_REQUIRE_NO_THROW(opt.wireDecode(blk));
-
-  BOOST_CHECK_EQUAL(opt.getFaceId(), 10);
-  BOOST_CHECK_EQUAL(opt.getUri(), "tcp://1.1.1.1/hello/world");
-}
-
-
-BOOST_AUTO_TEST_SUITE_END()
-
-} // namespace nfd
-} // namespace ndn
diff --git a/tests/management/nfd-controller.cpp b/tests/management/test-nfd-controller.cpp
similarity index 98%
rename from tests/management/nfd-controller.cpp
rename to tests/management/test-nfd-controller.cpp
index 37b9cc6..fcb53b2 100644
--- a/tests/management/nfd-controller.cpp
+++ b/tests/management/test-nfd-controller.cpp
@@ -14,7 +14,7 @@
 namespace ndn {
 namespace nfd {
 
-BOOST_AUTO_TEST_SUITE(NfdController)
+BOOST_AUTO_TEST_SUITE(ManagementTestNfdController)
 
 class CommandFixture
 {
diff --git a/tests/management/nfd-face-event-notification.cpp b/tests/management/test-nfd-face-event-notification.cpp
similarity index 98%
rename from tests/management/nfd-face-event-notification.cpp
rename to tests/management/test-nfd-face-event-notification.cpp
index 2ff00cf..230cbd6 100644
--- a/tests/management/nfd-face-event-notification.cpp
+++ b/tests/management/test-nfd-face-event-notification.cpp
@@ -11,7 +11,7 @@
 namespace ndn {
 namespace nfd {
 
-BOOST_AUTO_TEST_SUITE(NfdFaceEventNotification)
+BOOST_AUTO_TEST_SUITE(ManagementTestNfdFaceEventNotification)
 
 BOOST_AUTO_TEST_CASE(Flags)
 {
diff --git a/tests/management/nfd-face-status.cpp b/tests/management/test-nfd-face-status.cpp
similarity index 97%
rename from tests/management/nfd-face-status.cpp
rename to tests/management/test-nfd-face-status.cpp
index 56693dd..fe3457c 100644
--- a/tests/management/nfd-face-status.cpp
+++ b/tests/management/test-nfd-face-status.cpp
@@ -11,7 +11,7 @@
 namespace ndn {
 namespace nfd {
 
-BOOST_AUTO_TEST_SUITE(NfdFaceStatus)
+BOOST_AUTO_TEST_SUITE(ManagementTestNfdFaceStatus)
 
 BOOST_AUTO_TEST_CASE(Encode)
 {
diff --git a/tests/management/test-nfd-fib-entry.cpp b/tests/management/test-nfd-fib-entry.cpp
index ccb26d5..dd191ad 100644
--- a/tests/management/test-nfd-fib-entry.cpp
+++ b/tests/management/test-nfd-fib-entry.cpp
@@ -11,7 +11,7 @@
 namespace ndn {
 namespace nfd {
 
-BOOST_AUTO_TEST_SUITE(TestNfdFibEntry)
+BOOST_AUTO_TEST_SUITE(ManagementTestNfdFibEntry)
 
 const uint8_t TestNextHopRecord[] =
 {
diff --git a/tests/management/nfd-forwarder-status.cpp b/tests/management/test-nfd-forwarder-status.cpp
similarity index 98%
rename from tests/management/nfd-forwarder-status.cpp
rename to tests/management/test-nfd-forwarder-status.cpp
index 2523795..b38f432 100644
--- a/tests/management/nfd-forwarder-status.cpp
+++ b/tests/management/test-nfd-forwarder-status.cpp
@@ -12,7 +12,7 @@
 namespace ndn {
 namespace nfd {
 
-BOOST_AUTO_TEST_SUITE(NfdForwarderStatus)
+BOOST_AUTO_TEST_SUITE(ManagementTestNfdForwarderStatus)
 
 BOOST_AUTO_TEST_CASE(Encode)
 {
diff --git a/tests/management/test-nrd.cpp b/tests/management/test-nrd.cpp
index 197857d..b287a6b 100644
--- a/tests/management/test-nrd.cpp
+++ b/tests/management/test-nrd.cpp
@@ -11,7 +11,7 @@
 namespace ndn {
 namespace nrd {
 
-BOOST_AUTO_TEST_SUITE(TestNrd)
+BOOST_AUTO_TEST_SUITE(ManagementTestNrd)
 
 const uint8_t RealPrefixRegOptions[] = {
   0x65, 0x1b, 0x07, 0x16, 0x08, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74,
diff --git a/tests/security/test-certificate-cache.cpp b/tests/security/test-certificate-cache.cpp
index e4e6f1d..e2b91b4 100644
--- a/tests/security/test-certificate-cache.cpp
+++ b/tests/security/test-certificate-cache.cpp
@@ -13,7 +13,7 @@
 
 namespace ndn {
 
-BOOST_AUTO_TEST_SUITE(TestCertificateCache)
+BOOST_AUTO_TEST_SUITE(SecurityTestCertificateCache)
 
 void
 getCertificateTtl(shared_ptr<CertificateCacheTtl> cache, const Name &name, bool cached)
diff --git a/tests/security/test-encode-decode-certificate.cpp b/tests/security/test-encode-decode-certificate.cpp
index b9d8d36..a855347 100644
--- a/tests/security/test-encode-decode-certificate.cpp
+++ b/tests/security/test-encode-decode-certificate.cpp
@@ -15,7 +15,7 @@
 
 using namespace CryptoPP;
 
-BOOST_AUTO_TEST_SUITE(TestCertificate)
+BOOST_AUTO_TEST_SUITE(SecurityTestCertificate)
 
 const uint8_t PUBLIC_KEY[] = {
 0x30, 0x81, 0x9d, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81,
diff --git a/tests/security/test-keychain.cpp b/tests/security/test-keychain.cpp
index 00e848a..7eebc3e 100644
--- a/tests/security/test-keychain.cpp
+++ b/tests/security/test-keychain.cpp
@@ -12,7 +12,7 @@
 
 namespace ndn {
 
-BOOST_AUTO_TEST_SUITE(TestKeyChain)
+BOOST_AUTO_TEST_SUITE(SecurityTestKeyChain)
 
 BOOST_AUTO_TEST_CASE (ExportIdentity)
 {
diff --git a/tests/security/test-sec-public-info-sqlite3.cpp b/tests/security/test-sec-public-info-sqlite3.cpp
index 52ae0ec..26f9226 100644
--- a/tests/security/test-sec-public-info-sqlite3.cpp
+++ b/tests/security/test-sec-public-info-sqlite3.cpp
@@ -12,7 +12,7 @@
 using namespace std;
 namespace ndn {
 
-BOOST_AUTO_TEST_SUITE(TestSecPublicInfoSqlite3)
+BOOST_AUTO_TEST_SUITE(SecurityTestSecPublicInfoSqlite3)
 
 BOOST_AUTO_TEST_CASE (Delete)
 {
diff --git a/tests/security/test-sec-tpm-file.cpp b/tests/security/test-sec-tpm-file.cpp
index 1ef4ad4..e42986a 100644
--- a/tests/security/test-sec-tpm-file.cpp
+++ b/tests/security/test-sec-tpm-file.cpp
@@ -13,7 +13,7 @@
 using namespace std;
 namespace ndn {
 
-BOOST_AUTO_TEST_SUITE(TestSecTpmFile)
+BOOST_AUTO_TEST_SUITE(SecurityTestSecTpmFile)
 
 BOOST_AUTO_TEST_CASE (Delete)
 {
diff --git a/tests/security/test-sec-tpm-osx.cpp b/tests/security/test-sec-tpm-osx.cpp
index 1ae9996..435b2ce 100644
--- a/tests/security/test-sec-tpm-osx.cpp
+++ b/tests/security/test-sec-tpm-osx.cpp
@@ -13,7 +13,7 @@
 using namespace std;
 namespace ndn {
 
-BOOST_AUTO_TEST_SUITE(TestSecTpmOsx)
+BOOST_AUTO_TEST_SUITE(SecurityTestSecTpmOsx)
 
 BOOST_AUTO_TEST_CASE (Delete)
 {
diff --git a/tests/security/test-signature-sha256.cpp b/tests/security/test-signature-sha256.cpp
index a5450b9..4491f13 100644
--- a/tests/security/test-signature-sha256.cpp
+++ b/tests/security/test-signature-sha256.cpp
@@ -14,7 +14,7 @@
 using namespace std;
 namespace ndn {
 
-BOOST_AUTO_TEST_SUITE(TestSignatureSha256)
+BOOST_AUTO_TEST_SUITE(SecurityTestSignatureSha256)
 
 string SHA256_RESULT("a883dafc480d466ee04e0d6da986bd78eb1fdd2178d04693723da3a8f95d42f4");
 
diff --git a/tests/security/test-signed-interest.cpp b/tests/security/test-signed-interest.cpp
index b870fb1..4b7a63e 100644
--- a/tests/security/test-signed-interest.cpp
+++ b/tests/security/test-signed-interest.cpp
@@ -15,7 +15,7 @@
 using namespace std;
 namespace ndn {
 
-BOOST_AUTO_TEST_SUITE(TestSignedInterest)
+BOOST_AUTO_TEST_SUITE(SecurityTestSignedInterest)
 
 BOOST_AUTO_TEST_CASE (SignedInterest)
 {
diff --git a/tests/security/test-validator.cpp b/tests/security/test-validator.cpp
index 6e9ce4c..c3e5809 100644
--- a/tests/security/test-validator.cpp
+++ b/tests/security/test-validator.cpp
@@ -14,7 +14,7 @@
 
 namespace ndn {
 
-BOOST_AUTO_TEST_SUITE(TestValidator)
+BOOST_AUTO_TEST_SUITE(SecurityTestValidator)
 
 void
 onValidated(const shared_ptr<const Data>& data)
diff --git a/tests/key-locator.cpp b/tests/test-key-locator.cpp
similarity index 100%
rename from tests/key-locator.cpp
rename to tests/test-key-locator.cpp
diff --git a/tests/transport/test-unix-transport.cpp b/tests/transport/test-unix-transport.cpp
index 535b63c..da543ee 100644
--- a/tests/transport/test-unix-transport.cpp
+++ b/tests/transport/test-unix-transport.cpp
@@ -29,7 +29,7 @@
   std::string m_HOME;
 };
 
-BOOST_FIXTURE_TEST_SUITE(TestTransportUnixTransport, UnixTransportFixture)
+BOOST_FIXTURE_TEST_SUITE(TransportTestUnixTransport, UnixTransportFixture)
 
 BOOST_AUTO_TEST_CASE(TestGetDefaultSocketNameOk)
 {
diff --git a/tests/util/test-config-file.cpp b/tests/util/test-config-file.cpp
index c431e19..f4d6f66 100644
--- a/tests/util/test-config-file.cpp
+++ b/tests/util/test-config-file.cpp
@@ -30,7 +30,7 @@
   std::string m_HOME;
 };
 
-BOOST_FIXTURE_TEST_SUITE(TestConfigFile, ConfigFileFixture)
+BOOST_FIXTURE_TEST_SUITE(UtilTestConfigFile, ConfigFileFixture)
 
 BOOST_AUTO_TEST_CASE(TestParse)
 {
diff --git a/tests/util/test-io.cpp b/tests/util/test-io.cpp
index c3c247b..0ba1342 100644
--- a/tests/util/test-io.cpp
+++ b/tests/util/test-io.cpp
@@ -10,9 +10,9 @@
 
 namespace ndn {
 
-BOOST_AUTO_TEST_SUITE(TestIO)
+BOOST_AUTO_TEST_SUITE(UtilTestIo)
 
-BOOST_AUTO_TEST_CASE (Basic)
+BOOST_AUTO_TEST_CASE(Basic)
 {
   KeyChainImpl<SecPublicInfoSqlite3, SecTpmFile> keychain;
 
diff --git a/tests/util/test-regex.cpp b/tests/util/test-regex.cpp
index 86bad95..d286732 100644
--- a/tests/util/test-regex.cpp
+++ b/tests/util/test-regex.cpp
@@ -19,428 +19,428 @@
 using namespace std;
 namespace ndn {
 
-BOOST_AUTO_TEST_SUITE(TestRegex)
+BOOST_AUTO_TEST_SUITE(UtilTestRegex)
 
 BOOST_AUTO_TEST_CASE(ComponentMatcher)
 {
 
-  ptr_lib::shared_ptr<RegexBackrefManager> backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  ptr_lib::shared_ptr<RegexComponentMatcher> cm = ptr_lib::make_shared<RegexComponentMatcher>("a", backRef);
+  shared_ptr<RegexBackrefManager> backRef = make_shared<RegexBackrefManager>();
+  shared_ptr<RegexComponentMatcher> cm = make_shared<RegexComponentMatcher>("a", backRef);
   bool res = cm->match(Name("/a/b/"), 0, 1);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 1);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 1);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
 
-  backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  cm = ptr_lib::make_shared<RegexComponentMatcher>("a", backRef);
+  backRef = make_shared<RegexBackrefManager>();
+  cm = make_shared<RegexComponentMatcher>("a", backRef);
   res = cm->match(Name("/a/b/"), 1, 1);
   BOOST_CHECK_EQUAL(res, false);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 0);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 0);
 
-  backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  cm = ptr_lib::make_shared<RegexComponentMatcher>("(c+)\\.(cd)", backRef);
+  backRef = make_shared<RegexBackrefManager>();
+  cm = make_shared<RegexComponentMatcher>("(c+)\\.(cd)", backRef);
   res = cm->match(Name("/ccc.cd/b/"), 0, 1);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 1);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("ccc.cd"));
-  BOOST_CHECK_EQUAL(backRef->getBackRef (0)->getMatchResult ()[0].toEscapedString(), string("ccc"));
-  BOOST_CHECK_EQUAL(backRef->getBackRef (1)->getMatchResult ()[0].toEscapedString(), string("cd"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 1);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("ccc.cd"));
+  BOOST_CHECK_EQUAL(backRef->getBackRef(0)->getMatchResult()[0].toEscapedString(), string("ccc"));
+  BOOST_CHECK_EQUAL(backRef->getBackRef(1)->getMatchResult()[0].toEscapedString(), string("cd"));
 }
 
-BOOST_AUTO_TEST_CASE (ComponentSetMatcher)
+BOOST_AUTO_TEST_CASE(ComponentSetMatcher)
 {
 
-  ptr_lib::shared_ptr<RegexBackrefManager> backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  ptr_lib::shared_ptr<RegexComponentSetMatcher> cm = ptr_lib::make_shared<RegexComponentSetMatcher>("<a>", backRef);
+  shared_ptr<RegexBackrefManager> backRef = make_shared<RegexBackrefManager>();
+  shared_ptr<RegexComponentSetMatcher> cm = make_shared<RegexComponentSetMatcher>("<a>", backRef);
   bool res = cm->match(Name("/a/b/"), 0, 1);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 1);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 1);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
 
   res = cm->match(Name("/a/b/"), 1, 1);
   BOOST_CHECK_EQUAL(res, false);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 0);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 0);
 
   res = cm->match(Name("/a/b/"), 0, 2);
   BOOST_CHECK_EQUAL(res, false);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 0);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 0);
 
-  backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  cm = ptr_lib::make_shared<RegexComponentSetMatcher>("[<a><b><c>]", backRef);
+  backRef = make_shared<RegexBackrefManager>();
+  cm = make_shared<RegexComponentSetMatcher>("[<a><b><c>]", backRef);
   res = cm->match(Name("/a/b/d"), 1, 1);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 1);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 1);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("b"));
 
   res = cm->match(Name("/a/b/d"), 2, 1);
   BOOST_CHECK_EQUAL(res, false);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 0);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 0);
 
-  backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  cm = ptr_lib::make_shared<RegexComponentSetMatcher>("[^<a><b><c>]", backRef);
+  backRef = make_shared<RegexBackrefManager>();
+  cm = make_shared<RegexComponentSetMatcher>("[^<a><b><c>]", backRef);
   res = cm->match(Name("/b/d"), 1, 1);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 1);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("d"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 1);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("d"));
 
 }
 
-BOOST_AUTO_TEST_CASE (RepeatMatcher)
+BOOST_AUTO_TEST_CASE(RepeatMatcher)
 {
 
-  ptr_lib::shared_ptr<RegexBackrefManager> backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  ptr_lib::shared_ptr<RegexRepeatMatcher> cm = ptr_lib::make_shared<RegexRepeatMatcher>("[<a><b>]*", backRef, 8);
+  shared_ptr<RegexBackrefManager> backRef = make_shared<RegexBackrefManager>();
+  shared_ptr<RegexRepeatMatcher> cm = make_shared<RegexRepeatMatcher>("[<a><b>]*", backRef, 8);
   bool res = cm->match(Name("/a/b/c"), 0, 0);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 0);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 0);
 
   cm->match(Name("/a/b/c"), 0, 2);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 2);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 2);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
 
 
 
-  backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  cm = ptr_lib::make_shared<RegexRepeatMatcher>("[<a><b>]+", backRef, 8);
+  backRef = make_shared<RegexBackrefManager>();
+  cm = make_shared<RegexRepeatMatcher>("[<a><b>]+", backRef, 8);
   res = cm->match(Name("/a/b/c"), 0, 0);
   BOOST_CHECK_EQUAL(res, false);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 0);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 0);
 
   res = cm->match(Name("/a/b/c"), 0, 2);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 2);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 2);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
 
 
 
-  backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  cm = ptr_lib::make_shared<RegexRepeatMatcher>("<.*>*", backRef, 4);
+  backRef = make_shared<RegexBackrefManager>();
+  cm = make_shared<RegexRepeatMatcher>("<.*>*", backRef, 4);
   res = cm->match(Name("/a/b/c/d/e/f/"), 0, 6);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 6);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[2].toEscapedString(), string("c"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[3].toEscapedString(), string("d"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[4].toEscapedString(), string("e"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[5].toEscapedString(), string("f"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 6);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[2].toEscapedString(), string("c"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[3].toEscapedString(), string("d"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[4].toEscapedString(), string("e"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[5].toEscapedString(), string("f"));
 
 
 
-  backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  cm = ptr_lib::make_shared<RegexRepeatMatcher>("<>*", backRef, 2);
+  backRef = make_shared<RegexBackrefManager>();
+  cm = make_shared<RegexRepeatMatcher>("<>*", backRef, 2);
   res = cm->match(Name("/a/b/c/d/e/f/"), 0, 6);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 6);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[2].toEscapedString(), string("c"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[3].toEscapedString(), string("d"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[4].toEscapedString(), string("e"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[5].toEscapedString(), string("f"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 6);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[2].toEscapedString(), string("c"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[3].toEscapedString(), string("d"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[4].toEscapedString(), string("e"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[5].toEscapedString(), string("f"));
 
 
 
-  backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  cm = ptr_lib::make_shared<RegexRepeatMatcher>("<a>?", backRef, 3);
+  backRef = make_shared<RegexBackrefManager>();
+  cm = make_shared<RegexRepeatMatcher>("<a>?", backRef, 3);
   res = cm->match(Name("/a/b/c"), 0, 0);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 0);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 0);
 
-  cm = ptr_lib::make_shared<RegexRepeatMatcher>("<a>?", backRef, 3);
+  cm = make_shared<RegexRepeatMatcher>("<a>?", backRef, 3);
   res = cm->match(Name("/a/b/c"), 0, 1);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 1);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 1);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
 
-  cm = ptr_lib::make_shared<RegexRepeatMatcher>("<a>?", backRef, 3);
+  cm = make_shared<RegexRepeatMatcher>("<a>?", backRef, 3);
   res = cm->match(Name("/a/b/c"), 0, 2);
   BOOST_CHECK_EQUAL(res, false);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 0);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 0);
 
 
 
-  backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  cm = ptr_lib::make_shared<RegexRepeatMatcher>("[<a><b>]{3}", backRef, 8);
+  backRef = make_shared<RegexBackrefManager>();
+  cm = make_shared<RegexRepeatMatcher>("[<a><b>]{3}", backRef, 8);
   res = cm->match(Name("/a/b/a/d/"), 0, 2);
   BOOST_CHECK_EQUAL(res, false);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 0);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 0);
 
   res = cm->match(Name("/a/b/a/d/"), 0, 3);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 3);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[2].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 3);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[2].toEscapedString(), string("a"));
 
   res = cm->match(Name("/a/b/a/d/"), 0, 4);
   BOOST_CHECK_EQUAL(res, false);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 0);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 0);
 
 
 
-  backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  cm = ptr_lib::make_shared<RegexRepeatMatcher>("[<a><b>]{2,3}", backRef, 8);
+  backRef = make_shared<RegexBackrefManager>();
+  cm = make_shared<RegexRepeatMatcher>("[<a><b>]{2,3}", backRef, 8);
   res = cm->match(Name("/a/b/a/d/e/"), 0, 2);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 2);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 2);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
 
   res = cm->match(Name("/a/b/a/d/e/"), 0, 3);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 3);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[2].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 3);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[2].toEscapedString(), string("a"));
 
   res = cm->match(Name("/a/b/a/b/e/"), 0, 4);
   BOOST_CHECK_EQUAL(res, false);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 0);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 0);
 
   res = cm->match(Name("/a/b/a/d/e/"), 0, 1);
   BOOST_CHECK_EQUAL(res, false);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 0);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 0);
 
 
-  backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  cm = ptr_lib::make_shared<RegexRepeatMatcher>("[<a><b>]{2,}", backRef, 8);
+  backRef = make_shared<RegexBackrefManager>();
+  cm = make_shared<RegexRepeatMatcher>("[<a><b>]{2,}", backRef, 8);
   res = cm->match(Name("/a/b/a/d/e/"), 0, 2);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 2);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 2);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
 
   res = cm->match(Name("/a/b/a/b/e/"), 0, 4);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 4);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[2].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[3].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 4);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[2].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[3].toEscapedString(), string("b"));
 
   res = cm->match(Name("/a/b/a/d/e/"), 0, 1);
   BOOST_CHECK_EQUAL(res, false);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 0);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 0);
 
 
 
-  backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  cm = ptr_lib::make_shared<RegexRepeatMatcher>("[<a><b>]{,2}", backRef, 8);
+  backRef = make_shared<RegexBackrefManager>();
+  cm = make_shared<RegexRepeatMatcher>("[<a><b>]{,2}", backRef, 8);
   res = cm->match(Name("/a/b/a/b/e/"), 0, 3);
   BOOST_CHECK_EQUAL(res, false);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 0);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 0);
 
   res = cm->match(Name("/a/b/a/b/e/"), 0, 2);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 2);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 2);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
 
   res = cm->match(Name("/a/b/a/d/e/"), 0, 1);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 1);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 1);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
 
   res = cm->match(Name("/a/b/a/d/e/"), 0, 0);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 0);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 0);
 }
 
-BOOST_AUTO_TEST_CASE (BackRefMatcher)
+BOOST_AUTO_TEST_CASE(BackRefMatcher)
 {
 
-  ptr_lib::shared_ptr<RegexBackrefManager> backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  ptr_lib::shared_ptr<RegexBackrefMatcher> cm = ptr_lib::make_shared<RegexBackrefMatcher>("(<a><b>)", backRef);
+  shared_ptr<RegexBackrefManager> backRef = make_shared<RegexBackrefManager>();
+  shared_ptr<RegexBackrefMatcher> cm = make_shared<RegexBackrefMatcher>("(<a><b>)", backRef);
   backRef->pushRef(boost::static_pointer_cast<RegexMatcher>(cm));
   cm->lateCompile();
   bool res = cm->match(Name("/a/b/c"), 0, 2);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 2);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 2);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
   BOOST_CHECK_EQUAL(backRef->size(), 1);
 
-  backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  cm = ptr_lib::make_shared<RegexBackrefMatcher>("(<a>(<b>))", backRef);
+  backRef = make_shared<RegexBackrefManager>();
+  cm = make_shared<RegexBackrefMatcher>("(<a>(<b>))", backRef);
   backRef->pushRef(cm);
   cm->lateCompile();
   res = cm->match(Name("/a/b/c"), 0, 2);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 2);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 2);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
   BOOST_CHECK_EQUAL(backRef->size(), 2);
-  BOOST_CHECK_EQUAL(backRef->getBackRef (0)->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(backRef->getBackRef (0)->getMatchResult ()[1].toEscapedString(), string("b"));
-  BOOST_CHECK_EQUAL(backRef->getBackRef (1)->getMatchResult ()[0].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(backRef->getBackRef(0)->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(backRef->getBackRef(0)->getMatchResult()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(backRef->getBackRef(1)->getMatchResult()[0].toEscapedString(), string("b"));
 }
 
-BOOST_AUTO_TEST_CASE (BackRefMatcherAdvanced)
+BOOST_AUTO_TEST_CASE(BackRefMatcherAdvanced)
 {
 
-  ptr_lib::shared_ptr<RegexBackrefManager> backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  ptr_lib::shared_ptr<RegexRepeatMatcher> cm = ptr_lib::make_shared<RegexRepeatMatcher>("([<a><b>])+", backRef, 10);
+  shared_ptr<RegexBackrefManager> backRef = make_shared<RegexBackrefManager>();
+  shared_ptr<RegexRepeatMatcher> cm = make_shared<RegexRepeatMatcher>("([<a><b>])+", backRef, 10);
   bool res = cm->match(Name("/a/b/c"), 0, 2);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 2);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 2);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
   BOOST_CHECK_EQUAL(backRef->size(), 1);
-  BOOST_CHECK_EQUAL(backRef->getBackRef (0)->getMatchResult ()[0].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(backRef->getBackRef(0)->getMatchResult()[0].toEscapedString(), string("b"));
 }
 
-BOOST_AUTO_TEST_CASE (BackRefMatcherAdvanced2)
+BOOST_AUTO_TEST_CASE(BackRefMatcherAdvanced2)
 {
 
-  ptr_lib::shared_ptr<RegexBackrefManager> backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  ptr_lib::shared_ptr<RegexPatternListMatcher> cm = ptr_lib::make_shared<RegexPatternListMatcher>("(<a>(<b>))<c>", backRef);
+  shared_ptr<RegexBackrefManager> backRef = make_shared<RegexBackrefManager>();
+  shared_ptr<RegexPatternListMatcher> cm = make_shared<RegexPatternListMatcher>("(<a>(<b>))<c>", backRef);
   bool res = cm->match(Name("/a/b/c"), 0, 3);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 3);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[2].toEscapedString(), string("c"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 3);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[2].toEscapedString(), string("c"));
   BOOST_CHECK_EQUAL(backRef->size(), 2);
-  BOOST_CHECK_EQUAL(backRef->getBackRef (0)->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(backRef->getBackRef (0)->getMatchResult ()[1].toEscapedString(), string("b"));
-  BOOST_CHECK_EQUAL(backRef->getBackRef (1)->getMatchResult ()[0].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(backRef->getBackRef(0)->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(backRef->getBackRef(0)->getMatchResult()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(backRef->getBackRef(1)->getMatchResult()[0].toEscapedString(), string("b"));
 }
 
-BOOST_AUTO_TEST_CASE (PatternListMatcher)
+BOOST_AUTO_TEST_CASE(PatternListMatcher)
 {
 
-  ptr_lib::shared_ptr<RegexBackrefManager> backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  ptr_lib::shared_ptr<RegexPatternListMatcher> cm = ptr_lib::make_shared<RegexPatternListMatcher>("<a>[<a><b>]", backRef);
+  shared_ptr<RegexBackrefManager> backRef = make_shared<RegexBackrefManager>();
+  shared_ptr<RegexPatternListMatcher> cm = make_shared<RegexPatternListMatcher>("<a>[<a><b>]", backRef);
   bool res = cm->match(Name("/a/b/c"), 0, 2);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 2);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 2);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
 
-  backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  cm = ptr_lib::make_shared<RegexPatternListMatcher>("<>*<a>", backRef);
+  backRef = make_shared<RegexBackrefManager>();
+  cm = make_shared<RegexPatternListMatcher>("<>*<a>", backRef);
   res = cm->match(Name("/a/b/c"), 0, 1);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 1);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 1);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
 
-  backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  cm = ptr_lib::make_shared<RegexPatternListMatcher>("<>*<a>", backRef);
+  backRef = make_shared<RegexBackrefManager>();
+  cm = make_shared<RegexPatternListMatcher>("<>*<a>", backRef);
   res = cm->match(Name("/a/b/c"), 0, 2);
   BOOST_CHECK_EQUAL(res, false);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 0);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 0);
 
-  backRef = ptr_lib::make_shared<RegexBackrefManager>();
-  cm = ptr_lib::make_shared<RegexPatternListMatcher>("<>*<a><>*", backRef);
+  backRef = make_shared<RegexBackrefManager>();
+  cm = make_shared<RegexPatternListMatcher>("<>*<a><>*", backRef);
   res = cm->match(Name("/a/b/c"), 0, 3);
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 3);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[2].toEscapedString(), string("c"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 3);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[2].toEscapedString(), string("c"));
 
 }
 
-BOOST_AUTO_TEST_CASE (TopMatcher)
+BOOST_AUTO_TEST_CASE(TopMatcher)
 {
 
-  ptr_lib::shared_ptr<RegexTopMatcher> cm = ptr_lib::make_shared<RegexTopMatcher>("^<a><b><c>");
+  shared_ptr<RegexTopMatcher> cm = make_shared<RegexTopMatcher>("^<a><b><c>");
   bool res = cm->match(Name("/a/b/c/d"));
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 4);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[2].toEscapedString(), string("c"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[3].toEscapedString(), string("d"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 4);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[2].toEscapedString(), string("c"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[3].toEscapedString(), string("d"));
 
-  cm = ptr_lib::make_shared<RegexTopMatcher>("<b><c><d>$");
+  cm = make_shared<RegexTopMatcher>("<b><c><d>$");
   res = cm->match(Name("/a/b/c/d"));
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 4);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[2].toEscapedString(), string("c"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[3].toEscapedString(), string("d"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 4);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[2].toEscapedString(), string("c"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[3].toEscapedString(), string("d"));
 
-  cm = ptr_lib::make_shared<RegexTopMatcher>("^<a><b><c><d>$");
+  cm = make_shared<RegexTopMatcher>("^<a><b><c><d>$");
   res = cm->match(Name("/a/b/c/d"));
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 4);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[2].toEscapedString(), string("c"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[3].toEscapedString(), string("d"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 4);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[2].toEscapedString(), string("c"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[3].toEscapedString(), string("d"));
 
   res = cm->match(Name("/a/b/c/d/e"));
   BOOST_CHECK_EQUAL(res, false);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 0);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 0);
 
-  cm = ptr_lib::make_shared<RegexTopMatcher>("<a><b><c><d>");
+  cm = make_shared<RegexTopMatcher>("<a><b><c><d>");
   res = cm->match(Name("/a/b/c/d"));
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 4);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[2].toEscapedString(), string("c"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[3].toEscapedString(), string("d"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 4);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[2].toEscapedString(), string("c"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[3].toEscapedString(), string("d"));
 
 
-  cm = ptr_lib::make_shared<RegexTopMatcher>("<b><c>");
+  cm = make_shared<RegexTopMatcher>("<b><c>");
   res = cm->match(Name("/a/b/c/d"));
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 4);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[0].toEscapedString(), string("a"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[1].toEscapedString(), string("b"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[2].toEscapedString(), string("c"));
-  BOOST_CHECK_EQUAL(cm->getMatchResult ()[3].toEscapedString(), string("d"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 4);
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[0].toEscapedString(), string("a"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[1].toEscapedString(), string("b"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[2].toEscapedString(), string("c"));
+  BOOST_CHECK_EQUAL(cm->getMatchResult()[3].toEscapedString(), string("d"));
 }
 
-BOOST_AUTO_TEST_CASE (TopMatcherAdvanced)
+BOOST_AUTO_TEST_CASE(TopMatcherAdvanced)
 {
-  ptr_lib::shared_ptr<Regex> cm = ptr_lib::make_shared<Regex>("^(<.*>*)<.*>");
+  shared_ptr<Regex> cm = make_shared<Regex>("^(<.*>*)<.*>");
   bool res = cm->match(Name("/n/a/b/c"));
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 4);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 4);
   BOOST_CHECK_EQUAL(cm->expand("\\1"), Name("/n/a/b/"));
 
-  cm = ptr_lib::make_shared<Regex>("^(<.*>*)<.*><c>(<.*>)<.*>");
+  cm = make_shared<Regex>("^(<.*>*)<.*><c>(<.*>)<.*>");
   res = cm->match(Name("/n/a/b/c/d/e/"));
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 6);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 6);
   BOOST_CHECK_EQUAL(cm->expand("\\1\\2"), Name("/n/a/d/"));
 
-  cm = ptr_lib::make_shared<Regex>("(<.*>*)<.*>$");
+  cm = make_shared<Regex>("(<.*>*)<.*>$");
   res = cm->match(Name("/n/a/b/c/"));
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 4);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 4);
   BOOST_CHECK_EQUAL(cm->expand("\\1"), Name("/n/a/b/"));
 
-  cm = ptr_lib::make_shared<Regex>("<.*>(<.*>*)<.*>$");
+  cm = make_shared<Regex>("<.*>(<.*>*)<.*>$");
   res = cm->match(Name("/n/a/b/c/"));
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 4);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 4);
   BOOST_CHECK_EQUAL(cm->expand("\\1"), Name("/a/b/"));
 
-  cm = ptr_lib::make_shared<Regex>("<a>(<>*)<>$");
+  cm = make_shared<Regex>("<a>(<>*)<>$");
   res = cm->match(Name("/n/a/b/c/"));
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 4);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 4);
   BOOST_CHECK_EQUAL(cm->expand("\\1"), Name("/b/"));
 
-  cm = ptr_lib::make_shared<Regex>("^<ndn><(.*)\\.(.*)><DNS>(<>*)<>");
+  cm = make_shared<Regex>("^<ndn><(.*)\\.(.*)><DNS>(<>*)<>");
   res = cm->match(Name("/ndn/ucla.edu/DNS/yingdi/mac/ksk-1/"));
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 6);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 6);
   BOOST_CHECK_EQUAL(cm->expand("<ndn>\\2\\1\\3"), Name("/ndn/edu/ucla/yingdi/mac/"));
 
-  cm = ptr_lib::make_shared<Regex>("^<ndn><(.*)\\.(.*)><DNS>(<>*)<>", "<ndn>\\2\\1\\3");
+  cm = make_shared<Regex>("^<ndn><(.*)\\.(.*)><DNS>(<>*)<>", "<ndn>\\2\\1\\3");
   res = cm->match(Name("/ndn/ucla.edu/DNS/yingdi/mac/ksk-1/"));
   BOOST_CHECK_EQUAL(res, true);
-  BOOST_CHECK_EQUAL(cm->getMatchResult ().size(), 6);
+  BOOST_CHECK_EQUAL(cm->getMatchResult().size(), 6);
   BOOST_CHECK_EQUAL(cm->expand(), Name("/ndn/edu/ucla/yingdi/mac/"));
 }
 
diff --git a/tests/util/test-scheduler.cpp b/tests/util/test-scheduler.cpp
index 01fb18c..5a975f3 100644
--- a/tests/util/test-scheduler.cpp
+++ b/tests/util/test-scheduler.cpp
@@ -10,7 +10,7 @@
 
 namespace ndn {
 
-BOOST_AUTO_TEST_SUITE(TestScheduler)
+BOOST_AUTO_TEST_SUITE(UtilTestScheduler)
 
 struct SchedulerFixture
 {
diff --git a/tests/util/test-time.cpp b/tests/util/test-time.cpp
index 9a6bf1e..2db2131 100644
--- a/tests/util/test-time.cpp
+++ b/tests/util/test-time.cpp
@@ -9,9 +9,9 @@
 
 namespace ndn {
 
-BOOST_AUTO_TEST_SUITE(TestTime)
+BOOST_AUTO_TEST_SUITE(UtilTestTime)
 
-BOOST_AUTO_TEST_CASE (SystemClock)
+BOOST_AUTO_TEST_CASE(SystemClock)
 {
   time::system_clock::TimePoint value = time::system_clock::now();
   time::system_clock::TimePoint referenceTime =
@@ -25,7 +25,7 @@
   BOOST_CHECK_EQUAL(time::fromIsoString("20140129T034247.032000Z"), referenceTime);
 }
 
-BOOST_AUTO_TEST_CASE (SteadyClock)
+BOOST_AUTO_TEST_CASE(SteadyClock)
 {
   time::steady_clock::TimePoint oldValue = time::steady_clock::now();
   usleep(100);
