diff --git a/Framework/CurveFitting/src/ParameterEstimator.cpp b/Framework/CurveFitting/src/ParameterEstimator.cpp
index 93c46fd68fbb9ae0690fbf296458a5f3bb20b7c4..db682fa12c32e3fce6170d9e4ca8c7a28725dfcd 100644
--- a/Framework/CurveFitting/src/ParameterEstimator.cpp
+++ b/Framework/CurveFitting/src/ParameterEstimator.cpp
@@ -7,6 +7,8 @@
 
 #include "MantidKernel/Logger.h"
 
+#include <Poco/Mutex.h>
+
 #include <cmath>
 
 namespace Mantid {
@@ -18,20 +20,44 @@ using namespace Functions;
 /// The logger.
 Kernel::Logger g_log("ParameterEstimator");
 
+namespace {
+/// Mutex to prevent simultaneous access to functionMap
+Poco::Mutex FUNCTION_MAP_MUTEX;
+}
+
 enum Function { None, Gaussian, Lorentzian, BackToBackExponential };
 typedef std::map<std::string, std::pair<size_t, Function>> FunctionMapType;
 
 //----------------------------------------------------------------------------------------------
+
+/// Initializes a FunctionMapType object
+/// @param functionMapType :: the function map to initialize
+void initFunctionLookup(FunctionMapType &functionMapType) {
+  assert(functionMapType.empty());
+
+  functionMapType["Gaussian"] = std::make_pair(2, Gaussian);
+  functionMapType["Lorentzian"] = std::make_pair(2, Lorentzian);
+  functionMapType["BackToBackExponential"] =
+      std::make_pair(4, BackToBackExponential);
+}
+
+/// Returns a reference to the static functionMapType
+/// @returns :: a const reference to the functionMapType
+const FunctionMapType &getFunctionMapType() {
+
+  Poco::Mutex::ScopedLock lock(FUNCTION_MAP_MUTEX);
+
+  static FunctionMapType functionMapType;
+
+  if (functionMapType.empty())
+    initFunctionLookup(functionMapType);
+  return functionMapType;
+}
+
 /// Return a function code for a function if it needs setting values or None
 /// otherwise.
 Function whichFunction(const API::IFunction &function) {
-  static FunctionMapType functionMap;
-  if (functionMap.empty()) {
-    functionMap["Gaussian"] = std::make_pair(2, Gaussian);
-    functionMap["Lorentzian"] = std::make_pair(2, Lorentzian);
-    functionMap["BackToBackExponential"] =
-        std::make_pair(4, BackToBackExponential);
-  }
+  const FunctionMapType &functionMap = getFunctionMapType();
   auto index = functionMap.find(function.name());
   if (index != functionMap.end()) {
     if (!function.isExplicitlySet(index->second.first))