diff --git a/src/language/node_processor/FunctionProcessor.hpp b/src/language/node_processor/FunctionProcessor.hpp
index 2a8db08f29fa7ad061c46c7c1b7679a53138ea2b..c45faaa3935da1102660293ee863799d9a3aa195 100644
--- a/src/language/node_processor/FunctionProcessor.hpp
+++ b/src/language/node_processor/FunctionProcessor.hpp
@@ -63,10 +63,10 @@ class FunctionProcessor : public INodeProcessor
   DataVariant
   execute(ExecutionPolicy& exec_policy)
   {
-    ExecutionPolicy context_exec_policy{exec_policy,
-                                        ExecutionPolicy::Context{m_context_id,
-                                                                 std::make_shared<ExecutionPolicy::Context::Values>(
-                                                                   m_context_size)}};
+    // Context is built in each execution for thread safety: multiple thread can call a function at once
+    ExecutionPolicy::Context context{m_context_id, std::make_shared<ExecutionPolicy::Context::Values>(m_context_size)};
+
+    ExecutionPolicy context_exec_policy{exec_policy, context};
 
     if (m_argument_converters.size() == 1) {
       m_argument_converters[0]->convert(context_exec_policy, m_argument_node.execute(context_exec_policy));