diff --git a/src/name-assignments/assignment-funcs.cpp b/src/name-assignments/assignment-funcs.cpp
index 7e806f8..f67e8b0 100644
--- a/src/name-assignments/assignment-funcs.cpp
+++ b/src/name-assignments/assignment-funcs.cpp
@@ -38,7 +38,7 @@
 }
 
 unique_ptr<NameAssignmentFuncFactory>
-NameAssignmentFuncFactory::createNameAssignmentConfigFuncs(const std::string& challengeType)
+NameAssignmentFuncFactory::createNameAssignmentFuncFactories(const std::string& challengeType)
 {
   FuncFactoryFactory& factory = getFactory();
   auto i = factory.find(challengeType);
diff --git a/src/name-assignments/assignment-funcs.hpp b/src/name-assignments/assignment-funcs.hpp
index d45f082..e42299c 100644
--- a/src/name-assignments/assignment-funcs.hpp
+++ b/src/name-assignments/assignment-funcs.hpp
@@ -36,7 +36,7 @@
 
   template <class ChallengeType>
   static void
-  registerNameAssignmentFuncFactorys(const std::string& typeName)
+  registerNameAssignmentFuncFactories(const std::string& typeName)
   {
     FuncFactoryFactory& factory = getFactory();
     BOOST_ASSERT(factory.count(typeName) == 0);
@@ -47,7 +47,7 @@
   isChallengeSupported(const std::string& challengeType);
 
   static unique_ptr<NameAssignmentFuncFactory>
-  createNameAssignmentConfigFuncs(const std::string& challengeType);
+  createNameAssignmentFuncFactories(const std::string& challengeType);
 
   virtual NameAssignmentFunc
   getFunction(const std::string& factoryParam) = 0;
@@ -63,13 +63,13 @@
   getFactory();
 };
 
-#define NDNCERT_REGISTER_FUNCFACTORY(C, T)                              \
-  static class NdnCert##C##FuncFactoryRegistrationClass {               \
-  public:                                                             \
-    NdnCert##C##FuncFactoryRegistrationClass()                          \
-    {                                                                 \
-      ::ndn::ndncert::NameAssignmentFuncFactory::registerNameAssignmentFuncFactorys<C>(T); \
-    }                                                                 \
+#define NDNCERT_REGISTER_FUNCFACTORY(C, T)                               \
+  static class NdnCert##C##FuncFactoryRegistrationClass {                \
+  public:                                                                \
+    NdnCert##C##FuncFactoryRegistrationClass()                           \
+    {                                                                    \
+      ::ndn::ndncert::NameAssignmentFuncFactory::registerNameAssignmentFuncFactories<C>(T); \
+    }                                                                    \
   } g_NdnCert##C##ChallengeRegistrationVariable
 
 }  // namespace ndncert
diff --git a/src/name-assignments/assignment-hash.cpp b/src/name-assignments/assignment-hash.cpp
index 9a73e0e..22b6e69 100644
--- a/src/name-assignments/assignment-hash.cpp
+++ b/src/name-assignments/assignment-hash.cpp
@@ -9,6 +9,7 @@
 namespace ndncert {
 
 _LOG_INIT(ndncert.assignment.hash);
+
 NDNCERT_REGISTER_FUNCFACTORY(AssignmentHash, "hash");
 
 AssignmentHash::AssignmentHash()
diff --git a/src/name-assignments/assignment-param.cpp b/src/name-assignments/assignment-param.cpp
index 83de6a4..c7d0cfb 100644
--- a/src/name-assignments/assignment-param.cpp
+++ b/src/name-assignments/assignment-param.cpp
@@ -8,6 +8,7 @@
 namespace ndncert {
 
 _LOG_INIT(ndncert.assignment.param);
+
 NDNCERT_REGISTER_FUNCFACTORY(AssignmentParam, "param");
 
 AssignmentParam::AssignmentParam()
@@ -42,6 +43,9 @@
   std::map<std::string, std::string> paramMap;
   for (const auto& param : params) {
       paramMap[std::get<0>(param)] = std::get<1>(param);
+      if (std::get<1>(param).size() == 0) { // empty parameter!
+          return std::vector<PartialName>();
+      }
   }
 
   //construct name
diff --git a/src/name-assignments/assignment-random.cpp b/src/name-assignments/assignment-random.cpp
index b713665..9ebf45f 100644
--- a/src/name-assignments/assignment-random.cpp
+++ b/src/name-assignments/assignment-random.cpp
@@ -9,6 +9,7 @@
 namespace ndncert {
 
 _LOG_INIT(ndncert.assignment.random);
+
 NDNCERT_REGISTER_FUNCFACTORY(AssignmentRandom, "random");
 
 AssignmentRandom::AssignmentRandom()
