diff --git a/ParameterLib/FunctionParameter.h b/ParameterLib/FunctionParameter.h
index e919d56d42139fd30eb7ef5678a9f528d084873d..6cf9a720bf56ffe898f4f6e7a7a92341f27a053a 100644
--- a/ParameterLib/FunctionParameter.h
+++ b/ParameterLib/FunctionParameter.h
@@ -121,14 +121,20 @@ struct FunctionParameter final : public Parameter<T>
                 "coordinates.");
         }
         auto const coords = pos.getCoordinates().value();
-        x = coords[0];
-        y = coords[1];
-        z = coords[2];
-        time = t;
 
-        for (unsigned i = 0; i < _vec_expression.size(); i++)
         {
-            cache[i] = _vec_expression[i].value();
+            std::lock_guard lock_guard(_mutex);
+            x = coords[0];
+            y = coords[1];
+            z = coords[2];
+            time = t;
+
+            {
+                for (unsigned i = 0; i < _vec_expression.size(); i++)
+                {
+                    cache[i] = _vec_expression[i].value();
+                }
+            }
         }
 
         if (!this->_coordinate_system)
@@ -143,6 +149,7 @@ private:
     symbol_table_t _symbol_table;
     std::vector<expression_t> _vec_expression;
     std::vector<std::pair<std::string, CurveWrapper>> _curves;
+    mutable std::mutex _mutex;
 };
 
 std::unique_ptr<ParameterBase> createFunctionParameter(