diff --git a/src/configuration.cpp b/src/configuration.cpp
index 60097a6..0117df7 100644
--- a/src/configuration.cpp
+++ b/src/configuration.cpp
@@ -153,12 +153,11 @@
   auto nameAssignmentItems = configJson.get_child_optional(CONFIG_NAME_ASSIGNMENT);
   if (nameAssignmentItems) {
     for (const auto item : *nameAssignmentItems) {
-      try {
-        m_heuristic.push_back(NameAssignmentFuncFactory::createNameAssignmentFuncFactory(item.first));
-      }
-      catch (const std::exception& e) {
+      auto func = NameAssignmentFuncFactory::createNameAssignmentFuncFactory(item.first, item.second.data());
+      if (func == nullptr) {
         BOOST_THROW_EXCEPTION(std::runtime_error("Error on creating name assignment function"));
       }
+      m_heuristic.push_back(std::move(func));
     }
   }
 }
diff --git a/src/name-assignments/assignment-funcs.cpp b/src/name-assignments/assignment-funcs.cpp
index 501c510..50c8df1 100644
--- a/src/name-assignments/assignment-funcs.cpp
+++ b/src/name-assignments/assignment-funcs.cpp
@@ -27,13 +27,17 @@
 NameAssignmentFuncFactory::NameAssignmentFuncFactory(const std::string& factoryType, const std::string& format)
   : FACTORY_TYPE(factoryType)
 {
-  auto s = format;
-  size_t pos = 0;
-  while ((pos = s.find("/")) != std::string::npos) {
-    m_nameFormat.push_back(s.substr(0, pos));
-    s.erase(0, pos + 1);
+  size_t index = 0, startIndex = 0;
+  while ((index = format.find("/", startIndex)) != std::string::npos) {
+    auto component = format.substr(startIndex, index - startIndex);
+    if (!component.empty()) {
+      m_nameFormat.push_back(component);
+    }
+    startIndex = index + 1;
   }
-  m_nameFormat.push_back(s);
+  if (startIndex != format.size()) {
+    m_nameFormat.push_back(format.substr(startIndex));
+  }
 }
 
 unique_ptr<NameAssignmentFuncFactory>
diff --git a/tests/unit-tests/configuration.t.cpp b/tests/unit-tests/configuration.t.cpp
index 223b52f..5d4a7dd 100644
--- a/tests/unit-tests/configuration.t.cpp
+++ b/tests/unit-tests/configuration.t.cpp
@@ -55,6 +55,11 @@
   BOOST_CHECK_EQUAL(config.m_redirection->at(0)->getName(),
                     "/ndn/site1/KEY/%11%BC%22%F4c%15%FF%17/self/%FD%00%00%01Y%C8%14%D9%A5");
   BOOST_CHECK_EQUAL(config.m_heuristic.size(), 3);
+  BOOST_CHECK_EQUAL(config.m_heuristic[0]->FACTORY_TYPE, "param");
+  BOOST_CHECK_EQUAL(config.m_heuristic[1]->FACTORY_TYPE, "param");
+  BOOST_CHECK_EQUAL(config.m_heuristic[2]->FACTORY_TYPE, "random");
+  BOOST_CHECK_EQUAL(config.m_heuristic[0]->m_nameFormat[0], "group");
+  BOOST_CHECK_EQUAL(config.m_heuristic[0]->m_nameFormat[1], "email");
   std::vector<std::tuple<std::string, std::string>> params;
   params.emplace_back("email", "1@1.edu");
   params.emplace_back("group", "irl");
@@ -62,11 +67,13 @@
   std::vector<Name> names;
   for (auto& assignment : config.m_heuristic) {
     auto results = assignment->assignName(params);
+    BOOST_CHECK_EQUAL(results.size(), 1);
     names.insert(names.end(), results.begin(), results.end());
   }
+  BOOST_CHECK_EQUAL(names.size(), 3);
   BOOST_CHECK_EQUAL(names[0], Name("/irl/1@1.edu"));
   BOOST_CHECK_EQUAL(names[1], Name("/irl/ndncert"));
-  BOOST_CHECK_EQUAL(names[2].size(), 2);
+  BOOST_CHECK_EQUAL(names[2].size(), 1);
 }
 
 BOOST_AUTO_TEST_CASE(CAConfigFileWithErrors)
