diff --git a/src/ca-module.cpp b/src/ca-module.cpp
index 2c82f67..7b806b7 100644
--- a/src/ca-module.cpp
+++ b/src/ca-module.cpp
@@ -163,16 +163,13 @@
   // process PROBE requests: collect probe parameters
   auto parameters = PROBE::decodeApplicationParameters(request.getApplicationParameters());
   std::vector<PartialName> availableComponents;
-  try {
     for (auto& item : m_config.m_heuristic) {
       auto names = item->assignName(parameters);
       availableComponents.insert(availableComponents.end(), names.begin(), names.end());
     }
-  }
-  catch (const std::exception& e) {
-    _LOG_TRACE("Cannot parse probe parameters: " << e.what());
+  if (availableComponents.size() == 0) {
     m_face.put(generateErrorDataPacket(request.getName(), ErrorCode::INVALID_PARAMETER,
-                                       "Cannot parse probe parameters: " + std::string(e.what())));
+                                       "Cannot generate available names from parameters provided."));
     return;
   }
   std::vector<Name> availableNames;
diff --git a/src/name-assignments/assignment-param.cpp b/src/name-assignments/assignment-param.cpp
index 56da436..890af34 100644
--- a/src/name-assignments/assignment-param.cpp
+++ b/src/name-assignments/assignment-param.cpp
@@ -21,7 +21,7 @@
   for (const auto& item : m_nameFormat) {
     auto it = std::find_if(params.begin(), params.end(),
                            [&](const std::tuple<std::string, std::string>& e) { return std::get<0>(e) == item; });
-    if (it != params.end()) {
+    if (it != params.end() && !std::get<1>(*it).empty()) {
       result.append(std::get<1>(*it));
     }
     else {
diff --git a/tests/unit-tests/name-assignment.t.cpp b/tests/unit-tests/name-assignment.t.cpp
index 83c492c..8c690f5 100644
--- a/tests/unit-tests/name-assignment.t.cpp
+++ b/tests/unit-tests/name-assignment.t.cpp
@@ -38,34 +38,34 @@
 BOOST_AUTO_TEST_CASE(NameAssignmentParam)
 {
   AssignmentParam assignment("/abc/xyz");
-  std::vector<std::tuple<std::string, std::string>> requirements;
-  requirements.emplace_back("abc", "123");
-  BOOST_CHECK_EQUAL(assignment.assignName(requirements).size(), 0);
-  requirements.emplace_back("xyz", "789");
-  BOOST_CHECK_EQUAL(assignment.assignName(requirements).size(), 1);
-  BOOST_CHECK_EQUAL(*assignment.assignName(requirements).begin(), Name("/123/789"));
-  requirements.emplace_back("fake", "456");
-  BOOST_CHECK_EQUAL(assignment.assignName(requirements).size(), 1);
-  BOOST_CHECK_EQUAL(*assignment.assignName(requirements).begin(), Name("/123/789"));
-  requirements[1] = std::tuple<std::string, std::string>("xyz", "");
-  BOOST_CHECK_EQUAL(assignment.assignName(requirements).size(), 0);
+  std::vector<std::tuple<std::string, std::string>> params;
+  params.emplace_back("abc", "123");
+  BOOST_CHECK_EQUAL(assignment.assignName(params).size(), 0);
+  params.emplace_back("xyz", "789");
+  BOOST_CHECK_EQUAL(assignment.assignName(params).size(), 1);
+  BOOST_CHECK_EQUAL(*assignment.assignName(params).begin(), Name("/123/789"));
+  params.emplace_back("fake", "456");
+  BOOST_CHECK_EQUAL(assignment.assignName(params).size(), 1);
+  BOOST_CHECK_EQUAL(*assignment.assignName(params).begin(), Name("/123/789"));
+  params[1] = std::tuple<std::string, std::string>("xyz", "");
+  BOOST_CHECK_EQUAL(assignment.assignName(params).size(), 0);
 }
 
 BOOST_AUTO_TEST_CASE(NameAssignmentHash)
 {
-  AssignmentHash assignment("/abe/xyz");
-  std::vector<std::tuple<std::string, std::string>> requirements;
-  requirements.emplace_back("abc", "123");
-  BOOST_CHECK_EQUAL(assignment.assignName(requirements).size(), 0);
-  requirements.emplace_back("xyz", "789");
-  BOOST_CHECK_EQUAL(assignment.assignName(requirements).size(), 1);
-  BOOST_CHECK_EQUAL(assignment.assignName(requirements).begin()->size(), 1);
-  requirements.emplace_back("fake", "456");
-  BOOST_CHECK_EQUAL(assignment.assignName(requirements).size(), 1);
-  BOOST_CHECK_EQUAL(assignment.assignName(requirements).begin()->size(), 1);
-  requirements[1] = std::tuple<std::string, std::string>("xyz", "");
-  BOOST_CHECK_EQUAL(assignment.assignName(requirements).size(), 1);
-  BOOST_CHECK_EQUAL(assignment.assignName(requirements).begin()->size(), 1);
+  AssignmentHash assignment("/abc/xyz");
+  std::vector<std::tuple<std::string, std::string>> params;
+  params.emplace_back("abc", "123");
+  BOOST_CHECK_EQUAL(assignment.assignName(params).size(), 0);
+  params.emplace_back("xyz", "789");
+  BOOST_CHECK_EQUAL(assignment.assignName(params).size(), 1);
+  BOOST_CHECK_EQUAL(assignment.assignName(params).begin()->size(), 2);
+  params.emplace_back("fake", "456");
+  BOOST_CHECK_EQUAL(assignment.assignName(params).size(), 1);
+  BOOST_CHECK_EQUAL(assignment.assignName(params).begin()->size(), 2);
+  params[1] = std::tuple<std::string, std::string>("xyz", "");
+  BOOST_CHECK_EQUAL(assignment.assignName(params).size(), 1);
+  BOOST_CHECK_EQUAL(assignment.assignName(params).begin()->size(), 2);
 }
 
 BOOST_AUTO_TEST_SUITE_END()
