diff --git a/src/name-assignments/assignment-hash.cpp b/src/name-assignments/assignment-hash.cpp
index 4849324..ebcf6d0 100644
--- a/src/name-assignments/assignment-hash.cpp
+++ b/src/name-assignments/assignment-hash.cpp
@@ -31,40 +31,32 @@
     if (startIndex != factoryParam.size()) {
         paramList.push_back(factoryParam.substr(startIndex));
     }
-    return HashAssignmentFunc(paramList);
-}
+    return [paramList](const std::vector<std::tuple<std::string, std::string>> params){
+        if (params.size() > paramList.size() * 8) { // might be attack
+            BOOST_THROW_EXCEPTION(std::runtime_error("Too many extra parameters given"));
+        }
+        std::map<std::string, std::string> paramMap;
+        for (const auto& param : params) {
+            paramMap[std::get<0>(param)] = std::get<1>(param);
+        }
 
-AssignmentHash::HashAssignmentFunc::HashAssignmentFunc(std::list<std::string> paramList)
-    : m_paramList(std::move(paramList))
-{}
+        //construct name
+        PartialName name;
+        for (const auto& field : paramList) {
+            auto it = paramMap.find(field);
+            if (it == paramMap.end()) {
+                return std::vector<PartialName>();
+            } else {
+                name.append(it->second);
+            }
+        }
+        std::vector<PartialName> nameList;
+        util::Sha256 digest;
+        digest << name.wireEncode();
+        nameList.emplace_back(digest.toString());
 
-std::vector<PartialName>
-AssignmentHash::HashAssignmentFunc::operator() (const std::vector<std::tuple<std::string, std::string>> params)
-{
-  if (params.size() > m_paramList.size() * 8) { // might be attack
-      BOOST_THROW_EXCEPTION(std::runtime_error("Too many extra parameters given"));
-  }
-  std::map<std::string, std::string> paramMap;
-  for (const auto& param : params) {
-      paramMap[std::get<0>(param)] = std::get<1>(param);
-  }
-
-  //construct name
-  PartialName name;
-  for (const auto& field : m_paramList) {
-      auto it = paramMap.find(field);
-      if (it == paramMap.end()) {
-          return std::vector<PartialName>();
-      } else {
-          name.append(it->second);
-      }
-  }
-  std::vector<PartialName> nameList;
-  util::Sha256 digest;
-  digest << name.wireEncode();
-  nameList.emplace_back(digest.toString());
-
-  return nameList;
+        return nameList;
+    };
 }
 
 }
