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);
