diff --git a/src/ca-module.cpp b/src/ca-module.cpp
index fed30aa..b41efac 100644
--- a/src/ca-module.cpp
+++ b/src/ca-module.cpp
@@ -31,6 +31,7 @@
 #include <ndn-cxx/security/verification-helpers.hpp>
 #include <ndn-cxx/util/io.hpp>
 #include <ndn-cxx/util/random.hpp>
+#include <name-assignments/assignment-funcs.hpp>
 
 namespace ndn {
 namespace ndncert {
@@ -50,6 +51,10 @@
   m_storage = CaStorage::createCaStorage(storageType, m_config.m_caItem.m_caPrefix, "");
   random::generateSecureBytes(m_requestIdGenKey, 32);
   registerPrefix();
+  if (!m_config.m_nameAssignmentFunc) {
+      m_config.m_nameAssignmentFunc =
+              NameAssignmentFuncFactory::createNameAssignmentFuncFactory("random")->getFunction("");
+  }
 }
 
 CaModule::~CaModule()
@@ -186,20 +191,14 @@
   // process PROBE requests: collect probe parameters
   auto parameters = PROBE::decodeApplicationParameters(request.getApplicationParameters());
   std::vector<PartialName> availableComponents;
-  if (m_config.m_nameAssignmentFunc) {
-    try {
-      availableComponents = m_config.m_nameAssignmentFunc(parameters);
-    }
-    catch (const std::exception& e) {
-      _LOG_TRACE("Cannot parse probe parameters: " << e.what());
-      m_face.put(generateErrorDataPacket(request.getName(), ErrorCode::INVALID_PARAMETER,
-                                         "Cannot parse probe parameters: " + std::string(e.what())));
-      return;
-    }
+  try {
+    availableComponents = m_config.m_nameAssignmentFunc(parameters);
   }
-  else {
-    // if there is no app-specified name lookup, use a random name id
-    availableComponents.push_back(std::to_string(random::generateSecureWord64()));
+  catch (const std::exception& e) {
+    _LOG_TRACE("Cannot parse probe parameters: " << e.what());
+    m_face.put(generateErrorDataPacket(request.getName(), ErrorCode::INVALID_PARAMETER,
+            "Cannot parse probe parameters: " + std::string(e.what())));
+    return;
   }
   std::vector<Name> availableNames;
   for (const auto& component : availableComponents) {
diff --git a/src/configuration.cpp b/src/configuration.cpp
index 10fe352..5bad3bb 100644
--- a/src/configuration.cpp
+++ b/src/configuration.cpp
@@ -22,6 +22,7 @@
 #include "challenge-module.hpp"
 #include <ndn-cxx/util/io.hpp>
 #include <boost/filesystem.hpp>
+#include <name-assignments/assignment-funcs.hpp>
 
 namespace ndn {
 namespace ndncert {
@@ -147,6 +148,31 @@
       m_redirection->push_back(caCert);
     }
   }
+  //parse name assignment if appears
+  m_nameAssignmentFunc = nullptr;
+  auto nameAssignmentItems = configJson.get_child_optional(CONFIG_NAME_ASSIGNMENT);
+  if (nameAssignmentItems) {
+    std::vector<NameAssignmentFunc> funcs;
+    for (const auto item : *nameAssignmentItems) {
+        auto factory = NameAssignmentFuncFactory::createNameAssignmentFuncFactory(item.first);
+        if (!factory) {
+            BOOST_THROW_EXCEPTION(std::runtime_error("Invalid assignment factory type"));
+        }
+        try {
+            funcs.push_back(factory->getFunction(item.second.data()));
+        } catch (const std::exception& e) {
+            BOOST_THROW_EXCEPTION(std::runtime_error("Error on creating function"));
+        }
+    }
+    if (funcs.size() < 1) {
+        BOOST_THROW_EXCEPTION(std::runtime_error("Empty assignment body supplied"));
+    } else if (funcs.size() == 1) {
+        m_nameAssignmentFunc = funcs[0];
+    } else {
+        //TODO "or" all the name function together as all suggestions
+        m_nameAssignmentFunc = funcs[0];
+    }
+  }
 }
 
 void
diff --git a/src/name-assignments/assignment-funcs.cpp b/src/name-assignments/assignment-funcs.cpp
index f67e8b0..6e7f008 100644
--- a/src/name-assignments/assignment-funcs.cpp
+++ b/src/name-assignments/assignment-funcs.cpp
@@ -38,7 +38,7 @@
 }
 
 unique_ptr<NameAssignmentFuncFactory>
-NameAssignmentFuncFactory::createNameAssignmentFuncFactories(const std::string& challengeType)
+NameAssignmentFuncFactory::createNameAssignmentFuncFactory(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 e42299c..bef3de1 100644
--- a/src/name-assignments/assignment-funcs.hpp
+++ b/src/name-assignments/assignment-funcs.hpp
@@ -47,7 +47,7 @@
   isChallengeSupported(const std::string& challengeType);
 
   static unique_ptr<NameAssignmentFuncFactory>
-  createNameAssignmentFuncFactories(const std::string& challengeType);
+  createNameAssignmentFuncFactory(const std::string& challengeType);
 
   virtual NameAssignmentFunc
   getFunction(const std::string& factoryParam) = 0;
diff --git a/src/ndncert-common.hpp b/src/ndncert-common.hpp
index 4da43c9..b14cd12 100644
--- a/src/ndncert-common.hpp
+++ b/src/ndncert-common.hpp
@@ -123,6 +123,7 @@
 const std::string CONFIG_CHALLENGE = "challenge";
 const std::string CONFIG_CERTIFICATE = "certificate";
 const std::string CONFIG_REDIRECTION = "redirect-to";
+const std::string CONFIG_NAME_ASSIGNMENT = "name-assignment";
 
 
 // NDNCERT Status Enum
