diff --git a/.flake8 b/.flake8
new file mode 100644
index 0000000000000000000000000000000000000000..45b35b251689dd540e1bc6dc3dd96738975a679f
--- /dev/null
+++ b/.flake8
@@ -0,0 +1,28 @@
+[flake8]
+ignore = E114,E115,E116,E12,E13,E2,E3,F403,F405,F999
+exclude =
+    buildconfig,
+    docs,
+    Framework/Algorithms/test,
+    Framework/DataObjects,
+    Framework/MPIAlgorithms,
+    Framework/PythonInterface/mantid,
+    Framework/PythonInterface/test,
+    Framework/WorkflowAlgorithms,
+    images,
+    installers,
+    instrument,
+    MantidPlot,
+    MantidQt,
+    QtPropertyBrowser,
+    scripts/lib1to2,
+    scripts/test,
+    Testing/PerformanceTests,
+    Testing/SystemTests/lib,
+    Testing/SystemTests/scripts,
+    Testing/SystemTests/tests/analysis/reference,
+    Testing/Tools,
+    Vates/ParaviewPlugins,
+    Vates/VatesSimpleGui
+max-complexity = 20
+max-line-length = 140
diff --git a/Framework/API/CMakeLists.txt b/Framework/API/CMakeLists.txt
index ca49d2504b3950424a7d820a88508c8fda5d3b0a..df47eec291153886281e3b466d38813d9f3438c7 100644
--- a/Framework/API/CMakeLists.txt
+++ b/Framework/API/CMakeLists.txt
@@ -89,7 +89,6 @@ set ( SRC_FILES
 	src/LogManager.cpp
 	src/LogarithmScale.cpp
 	src/MDGeometry.cpp
-	src/MatrixWSIndexCalculator.cpp
 	src/MatrixWorkspace.cpp
 	src/MatrixWorkspaceMDIterator.cpp
 	src/ModeratorModel.cpp
@@ -270,7 +269,6 @@ set ( INC_FILES
 	inc/MantidAPI/LogManager.h
 	inc/MantidAPI/LogarithmScale.h
 	inc/MantidAPI/MDGeometry.h
-	inc/MantidAPI/MatrixWSIndexCalculator.h
 	inc/MantidAPI/MatrixWorkspace.h
 	inc/MantidAPI/MatrixWorkspaceMDIterator.h
 	inc/MantidAPI/MatrixWorkspaceValidator.h
diff --git a/Framework/API/inc/MantidAPI/CompositeFunction.h b/Framework/API/inc/MantidAPI/CompositeFunction.h
index 3f4e10dfaca6acad8d59250148190d3a99e8eb75..bf3053b02fd003e18cddf4ec8ebed1424b4a4908 100644
--- a/Framework/API/inc/MantidAPI/CompositeFunction.h
+++ b/Framework/API/inc/MantidAPI/CompositeFunction.h
@@ -298,6 +298,12 @@ public:
   double get(size_t iY, size_t iP) override {
     return m_J->get(m_iY0 + iY, m_iP0 + iP);
   }
+  /** Zero all matrix elements.
+  */
+  void zero() override {
+    throw Kernel::Exception::NotImplementedError(
+        "zero() is not implemented for PartialJacobian");
+  }
   /**  Add number to all iY (data) Jacobian elements for a given iP (parameter)
    *   @param value :: Value to add
    *   @param iP :: The index of an active parameter.
diff --git a/Framework/API/inc/MantidAPI/ISpectrum.h b/Framework/API/inc/MantidAPI/ISpectrum.h
index 11e208bc3a6c2d4356944c24bd40721bf8b2a171..6ee6ed57aae5697242f03aaeeeff7805744557a9 100644
--- a/Framework/API/inc/MantidAPI/ISpectrum.h
+++ b/Framework/API/inc/MantidAPI/ISpectrum.h
@@ -125,9 +125,6 @@ public:
   }
 
   HistogramData::BinEdges binEdges() const { return histogramRef().binEdges(); }
-  HistogramData::BinEdgeStandardDeviations binEdgeStandardDeviations() const {
-    return histogramRef().binEdgeStandardDeviations();
-  }
   HistogramData::Points points() const { return histogramRef().points(); }
   HistogramData::PointStandardDeviations pointStandardDeviations() const {
     return histogramRef().pointStandardDeviations();
@@ -135,24 +132,17 @@ public:
   template <typename... T> void setBinEdges(T &&... data) & {
     mutableHistogramRef().setBinEdges(std::forward<T>(data)...);
   }
-  template <typename... T> void setBinEdgeVariances(T &&... data) & {
-    mutableHistogramRef().setBinEdgeVariances(std::forward<T>(data)...);
-  }
-  template <typename... T> void setBinEdgeStandardDeviations(T &&... data) & {
-    mutableHistogramRef().setBinEdgeStandardDeviations(
-        std::forward<T>(data)...);
-  }
   template <typename... T> void setPoints(T &&... data) & {
     // Check for the special case EventList, it only works with BinEdges.
     checkWorksWithPoints();
     mutableHistogramRef().setPoints(std::forward<T>(data)...);
   }
   template <typename... T> void setPointVariances(T &&... data) & {
-    checkWorksWithPoints();
+    // Note that we can set point variances even if storage mode is BinEdges, Dx
+    // is *always* one value *per bin*.
     mutableHistogramRef().setPointVariances(std::forward<T>(data)...);
   }
   template <typename... T> void setPointStandardDeviations(T &&... data) & {
-    checkWorksWithPoints();
     mutableHistogramRef().setPointStandardDeviations(std::forward<T>(data)...);
   }
   virtual HistogramData::Counts counts() const {
diff --git a/Framework/API/inc/MantidAPI/Jacobian.h b/Framework/API/inc/MantidAPI/Jacobian.h
index 40df30f74c06b384fc16cc93fcc95ff813c6cfec..0c15231dbff93608b1da2bd65bcc7db988766f68 100644
--- a/Framework/API/inc/MantidAPI/Jacobian.h
+++ b/Framework/API/inc/MantidAPI/Jacobian.h
@@ -50,6 +50,10 @@ public:
   */
   virtual double get(size_t iY, size_t iP) = 0;
 
+  /** Zero all matrix elements.
+  */
+  virtual void zero() = 0;
+
   ///@cond do not document
   /**  Add number to all iY (data) Jacobian elements for a given iP (parameter)
   *   @param value :: Value to add
diff --git a/Framework/API/inc/MantidAPI/MatrixWSIndexCalculator.h b/Framework/API/inc/MantidAPI/MatrixWSIndexCalculator.h
deleted file mode 100644
index 2fc210c73aa480069d45aa17bdbf275e72bb929f..0000000000000000000000000000000000000000
--- a/Framework/API/inc/MantidAPI/MatrixWSIndexCalculator.h
+++ /dev/null
@@ -1,76 +0,0 @@
-#ifndef _MATRIX_WS_INDEX_CALCULATOR_H_
-#define _MATRIX_WS_INDEX_CALCULATOR_H_
-
-#include "MantidAPI/DllConfig.h"
-
-namespace Mantid {
-namespace API {
-/** \class MantidWSIndexCalculator
-
-Utitlity type to decompose indexes in one dimension to dual indexes used by
-MatrixWorkspaces.
-
-\author Owen Arnold Tessella
-\date 18/11/2010
-
-Copyright &copy; 2007-10 ISIS Rutherford Appleton Laboratory, NScD Oak Ridge
-National Laboratory & European Spallation Source
-
-This file is part of Mantid.
-
-Mantid is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3 of the License, or
-(at your option) any later version.
-
-Mantid is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-File change history is stored at: <https://github.com/mantidproject/mantid>.
-Code Documentation is available at: <http://doxygen.mantidproject.org>
-*/
-
-/// Denotes index in 1D array.
-typedef size_t Index;
-/// Denotes index of a particular bin in a histogram.
-typedef size_t BinIndex;
-/// Denotes index of a particular histogram in the Matrix Workspace.
-typedef size_t HistogramIndex;
-
-class MANTID_API_DLL MatrixWSIndexCalculator {
-private:
-  size_t m_blockSize;
-
-public:
-  // Default constructor gives blocksize as 1.
-  MatrixWSIndexCalculator();
-
-  /// Constructor requires block size for calculation.
-  MatrixWSIndexCalculator(size_t blockSize);
-
-  /// Determine which histogram an index in a 1D array relates to given the
-  /// known blockSize
-  HistogramIndex getHistogramIndex(Index oneDimIndex) const;
-
-  /// Get the bin index.
-  BinIndex getBinIndex(Index oneDimIndex,
-                       HistogramIndex histogramDimIndex) const;
-
-  /// Get the one dimensional index given a histogram and bin index.
-  Index getOneDimIndex(HistogramIndex histogramIndex, BinIndex binIndex) const;
-
-  ////Assignment operator
-  MatrixWSIndexCalculator &operator=(const MatrixWSIndexCalculator &other);
-
-  ////Copy constructor
-  MatrixWSIndexCalculator(const MatrixWSIndexCalculator &other);
-};
-}
-}
-
-#endif
diff --git a/Framework/API/inc/MantidAPI/MatrixWorkspace.h b/Framework/API/inc/MantidAPI/MatrixWorkspace.h
index df53499c00805a2edd1b61d913890dbfbb7b20f3..67667402be261318bd468bcbb1cbc0baf4ef14a7 100644
--- a/Framework/API/inc/MantidAPI/MatrixWorkspace.h
+++ b/Framework/API/inc/MantidAPI/MatrixWorkspace.h
@@ -9,7 +9,6 @@
 #include "MantidAPI/ExperimentInfo.h"
 #include "MantidAPI/IMDWorkspace.h"
 #include "MantidAPI/ISpectrum.h"
-#include "MantidAPI/MatrixWSIndexCalculator.h"
 #include "MantidAPI/MatrixWorkspace_fwd.h"
 
 namespace Mantid {
@@ -200,10 +199,6 @@ public:
   HistogramData::BinEdges binEdges(const size_t index) const {
     return getSpectrum(index).binEdges();
   }
-  HistogramData::BinEdgeStandardDeviations
-  binEdgeStandardDeviations(const size_t index) const {
-    return getSpectrum(index).binEdgeStandardDeviations();
-  }
   HistogramData::Points points(const size_t index) const {
     return getSpectrum(index).points();
   }
@@ -215,14 +210,6 @@ public:
   void setBinEdges(const size_t index, T &&... data) & {
     getSpectrum(index).setBinEdges(std::forward<T>(data)...);
   }
-  template <typename... T>
-  void setBinEdgeVariances(const size_t index, T &&... data) & {
-    getSpectrum(index).setBinEdgeVariances(std::forward<T>(data)...);
-  }
-  template <typename... T>
-  void setBinEdgeStandardDeviations(const size_t index, T &&... data) & {
-    getSpectrum(index).setBinEdgeStandardDeviations(std::forward<T>(data)...);
-  }
   template <typename... T> void setPoints(const size_t index, T &&... data) & {
     getSpectrum(index).setPoints(std::forward<T>(data)...);
   }
@@ -626,9 +613,6 @@ private:
   mutable std::unique_ptr<SpectrumInfo> m_spectrumInfo;
 
 protected:
-  /// Assists conversions to and from 2D histogram indexing to 1D indexing.
-  MatrixWSIndexCalculator m_indexCalculator;
-
   /// Scoped pointer to NearestNeighbours factory
   boost::scoped_ptr<Mantid::Geometry::INearestNeighboursFactory>
       m_nearestNeighboursFactory;
diff --git a/Framework/API/inc/MantidAPI/MultiPeriodGroupWorker.h b/Framework/API/inc/MantidAPI/MultiPeriodGroupWorker.h
index 05272d87dac2aa63bdf906eae1d2da064a4c87a5..89b2cad4803e5729108100c031eb3c94fc864120 100644
--- a/Framework/API/inc/MantidAPI/MultiPeriodGroupWorker.h
+++ b/Framework/API/inc/MantidAPI/MultiPeriodGroupWorker.h
@@ -67,9 +67,9 @@ private:
   MultiPeriodGroupWorker &operator=(const MultiPeriodGroupWorker &);
 
   /// Try ot add a workspace to the group of input workspaces.
-  void
-  tryAddInputWorkspaceToInputGroups(Workspace_sptr ws,
-                                    VecWSGroupType &vecWorkspaceGroups) const;
+  void tryAddInputWorkspaceToInputGroups(
+      Workspace_sptr ws, VecWSGroupType &vecMultiPeriodWorkspaceGroups,
+      VecWSGroupType &vecWorkspaceGroups) const;
 
   /// Copy input workspace properties to spawned algorithm.
   void copyInputWorkspaceProperties(IAlgorithm *targetAlg,
diff --git a/Framework/API/inc/MantidAPI/MultipleFileProperty.h b/Framework/API/inc/MantidAPI/MultipleFileProperty.h
index 0d018416d5e7a756629d2168d041465ed6d34fdf..19e83a87a89a688ae5a59cdc32788b1210d3762a 100644
--- a/Framework/API/inc/MantidAPI/MultipleFileProperty.h
+++ b/Framework/API/inc/MantidAPI/MultipleFileProperty.h
@@ -129,21 +129,22 @@ namespace API {
 class DLLExport MultipleFileProperty
     : public Kernel::PropertyWithValue<std::vector<std::vector<std::string>>> {
 public:
-  /// Constructor
+  MultipleFileProperty(
+      const std::string &name, unsigned int action,
+      const std::vector<std::string> &exts = std::vector<std::string>());
+
   MultipleFileProperty(
       const std::string &name,
       const std::vector<std::string> &exts = std::vector<std::string>());
 
-  /// 'Virtual copy constructor
   MultipleFileProperty *clone() const override {
     return new MultipleFileProperty(*this);
   }
 
-  /// Overridden functions to accomodate std::vector<std::vector<std::string>>>
-  /// structure of this property.
   std::string setValue(const std::string &propValue) override;
   std::string value() const override;
   std::string getDefault() const override;
+  bool isOptional() const;
 
   /// @return the vector of suggested extensions. For use in GUIs showing files.
   std::vector<std::string> getExts() const { return m_exts; }
@@ -156,6 +157,8 @@ public:
   operator=;
 
 private:
+  /// Returns a string depending on whether an empty value is valid
+  std::string isEmptyValueValid() const;
   std::string setValueAsSingleFile(const std::string &propValue);
   std::string setValueAsMultipleFiles(const std::string &propValue);
   /// Whether or not the user has turned on multifile loading.
@@ -168,6 +171,9 @@ private:
   /// The default file extension associated with the type of file this property
   /// will handle
   std::string m_defaultExt;
+  /// The action type of this property
+  /// Load (dafault) or OptionalLoad are supported
+  unsigned int m_action;
 };
 
 } // namespace API
diff --git a/Framework/API/src/FrameworkManager.cpp b/Framework/API/src/FrameworkManager.cpp
index 2c698b63b6e1fcf00d963d598f1355dcb1c2b308..eeeb270e609f5eb36e7766bc932db8a52c1d9b91 100644
--- a/Framework/API/src/FrameworkManager.cpp
+++ b/Framework/API/src/FrameworkManager.cpp
@@ -138,7 +138,7 @@ void FrameworkManagerImpl::UpdateInstrumentDefinitions() {
     IAlgorithm *algDownloadInstrument =
         this->createAlgorithm("DownloadInstrument");
     algDownloadInstrument->setAlgStartupLogging(false);
-    Poco::ActiveResult<bool> result = algDownloadInstrument->executeAsync();
+    algDownloadInstrument->executeAsync();
   } catch (Kernel::Exception::NotFoundError &) {
     g_log.debug() << "DowndloadInstrument algorithm is not available - cannot "
                      "update instrument definitions.\n";
@@ -150,7 +150,7 @@ void FrameworkManagerImpl::CheckIfNewerVersionIsAvailable() {
   try {
     IAlgorithm *algCheckVersion = this->createAlgorithm("CheckMantidVersion");
     algCheckVersion->setAlgStartupLogging(false);
-    Poco::ActiveResult<bool> result = algCheckVersion->executeAsync();
+    algCheckVersion->executeAsync();
   } catch (Kernel::Exception::NotFoundError &) {
     g_log.debug() << "CheckMantidVersion algorithm is not available - cannot "
                      "check if a newer version is available.\n";
diff --git a/Framework/API/src/IPeakFunction.cpp b/Framework/API/src/IPeakFunction.cpp
index 6f8aa8fd20250dad2ccf552e2aff45701377c099..63d4f9b66ce2fd173c72825e0d2ea1627330946e 100644
--- a/Framework/API/src/IPeakFunction.cpp
+++ b/Framework/API/src/IPeakFunction.cpp
@@ -42,6 +42,12 @@ public:
    * @param iP :: The parameter index of an individual function.
    */
   double get(size_t iY, size_t iP) override { return m_J->get(m_iY0 + iY, iP); }
+  /** Zero all matrix elements.
+  */
+  void zero() override {
+    throw Kernel::Exception::NotImplementedError(
+        "zero() is not implemented for PartialJacobian1");
+  }
 };
 
 class TempJacobian : public Jacobian {
@@ -64,6 +70,7 @@ public:
 
     return maxIndex;
   }
+  void zero() override { m_J.assign(m_J.size(), 0.0); }
 
 protected:
   size_t m_y;
diff --git a/Framework/API/src/MatrixWSIndexCalculator.cpp b/Framework/API/src/MatrixWSIndexCalculator.cpp
deleted file mode 100644
index ab41b041e6389a8446adea919c9bae881e77414d..0000000000000000000000000000000000000000
--- a/Framework/API/src/MatrixWSIndexCalculator.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "MantidAPI/MatrixWSIndexCalculator.h"
-
-namespace Mantid {
-namespace API {
-MatrixWSIndexCalculator::MatrixWSIndexCalculator() : m_blockSize(0) {}
-
-MatrixWSIndexCalculator::MatrixWSIndexCalculator(size_t blockSize)
-    : m_blockSize(blockSize) {}
-
-HistogramIndex
-MatrixWSIndexCalculator::getHistogramIndex(Index oneDimIndex) const {
-  return oneDimIndex / m_blockSize;
-}
-
-BinIndex
-MatrixWSIndexCalculator::getBinIndex(Index oneDimIndex,
-                                     HistogramIndex histogramDimIndex) const {
-  return oneDimIndex - (histogramDimIndex * m_blockSize);
-}
-
-Index MatrixWSIndexCalculator::getOneDimIndex(HistogramIndex histogramIndex,
-                                              BinIndex binIndex) const {
-  return binIndex + (histogramIndex * m_blockSize);
-}
-
-MatrixWSIndexCalculator &MatrixWSIndexCalculator::
-operator=(const MatrixWSIndexCalculator &other) {
-  if (this != &other) // protect against invalid self-assignment
-  {
-    this->m_blockSize = other.m_blockSize;
-  }
-  return *this;
-}
-
-MatrixWSIndexCalculator::MatrixWSIndexCalculator(
-    const MatrixWSIndexCalculator &other) {
-  m_blockSize = other.m_blockSize;
-}
-}
-}
diff --git a/Framework/API/src/MatrixWorkspace.cpp b/Framework/API/src/MatrixWorkspace.cpp
index 285b0c6148ae8a7ccc4094897e3404a9197a4d67..7ea2d8631fc0eadd1254cec89285734b63f37a43 100644
--- a/Framework/API/src/MatrixWorkspace.cpp
+++ b/Framework/API/src/MatrixWorkspace.cpp
@@ -16,7 +16,7 @@
 #include "MantidKernel/MDUnit.h"
 #include "MantidKernel/make_unique.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 #include <numeric>
 
@@ -44,7 +44,7 @@ MatrixWorkspace::MatrixWorkspace(
     Mantid::Geometry::INearestNeighboursFactory *nnFactory)
     : IMDWorkspace(), ExperimentInfo(), m_axes(), m_isInitialized(false),
       m_YUnit(), m_YUnitLabel(), m_isCommonBinsFlagSet(false),
-      m_isCommonBinsFlag(false), m_masks(), m_indexCalculator(),
+      m_isCommonBinsFlag(false), m_masks(),
       m_nearestNeighboursFactory(
           (nnFactory == nullptr) ? new NearestNeighboursFactory : nnFactory),
       m_nearestNeighbours() {}
@@ -61,7 +61,6 @@ MatrixWorkspace::MatrixWorkspace(const MatrixWorkspace &other)
   m_isCommonBinsFlagSet = other.m_isCommonBinsFlagSet;
   m_isCommonBinsFlag = other.m_isCommonBinsFlag;
   m_masks = other.m_masks;
-  m_indexCalculator = other.m_indexCalculator;
   // I think it is necessary to create our own copy of the factory, since we do
   // not know who owns the factory in other and how its lifetime is controlled.
   m_nearestNeighboursFactory.reset(new NearestNeighboursFactory);
@@ -147,7 +146,6 @@ void MatrixWorkspace::initialize(const std::size_t &NVectors,
     throw;
   }
 
-  m_indexCalculator = MatrixWSIndexCalculator(this->blocksize());
   // Indicate that this workspace has been initialized to prevent duplicate
   // attempts.
   m_isInitialized = true;
@@ -699,7 +697,7 @@ void MatrixWorkspace::getXMinMax(double &xmin, double &xmax) const {
     const MantidVec &dataX = this->readX(workspaceIndex);
     const double xfront = dataX.front();
     const double xback = dataX.back();
-    if (boost::math::isfinite(xfront) && boost::math::isfinite(xback)) {
+    if (std::isfinite(xfront) && std::isfinite(xback)) {
       if (xfront < xmin)
         xmin = xfront;
       if (xback > xmax)
@@ -1019,8 +1017,8 @@ bool MatrixWorkspace::isCommonBins() const {
         }
 
         // handle Nan's and inf's
-        if ((boost::math::isinf(first) != boost::math::isinf(last)) ||
-            (boost::math::isnan(first) != boost::math::isnan(last))) {
+        if ((std::isinf(first) != std::isinf(last)) ||
+            (std::isnan(first) != std::isnan(last))) {
           m_isCommonBinsFlag = false;
         }
       }
diff --git a/Framework/API/src/MultiDomainFunction.cpp b/Framework/API/src/MultiDomainFunction.cpp
index 1c6dbae3d4decbe205e2b2ba9b22259919509119..60c664a88f25b31842560cf4971b251db5849ae9 100644
--- a/Framework/API/src/MultiDomainFunction.cpp
+++ b/Framework/API/src/MultiDomainFunction.cpp
@@ -168,6 +168,7 @@ void MultiDomainFunction::functionDeriv(const FunctionDomain &domain,
                                   std::to_string(m_maxIndex) + ").");
     }
 
+    jacobian.zero();
     countValueOffsets(cd);
     // evaluate member functions derivatives
     for (size_t iFun = 0; iFun < nFunctions(); ++iFun) {
diff --git a/Framework/API/src/MultiPeriodGroupWorker.cpp b/Framework/API/src/MultiPeriodGroupWorker.cpp
index 7b2c160be1503435119f76376481cded0a6685e3..fe63cbb3e21d69a91de5613bcf5da52f04e17340 100644
--- a/Framework/API/src/MultiPeriodGroupWorker.cpp
+++ b/Framework/API/src/MultiPeriodGroupWorker.cpp
@@ -22,15 +22,20 @@ MultiPeriodGroupWorker::MultiPeriodGroupWorker(
 /**
  * Try to add the input workspace to the multiperiod input group list.
  * @param ws: candidate workspace
- * @param vecWorkspaceGroups: Vector of multi period workspace groups.
+ * @param vecMultiPeriodWorkspaceGroups: Vector of multi period workspace
+ * groups.
+ * @param vecWorkspaceGroups: Vector of non-multi period workspace groups.
  */
 void MultiPeriodGroupWorker::tryAddInputWorkspaceToInputGroups(
     Workspace_sptr ws,
+    MultiPeriodGroupWorker::VecWSGroupType &vecMultiPeriodWorkspaceGroups,
     MultiPeriodGroupWorker::VecWSGroupType &vecWorkspaceGroups) const {
   WorkspaceGroup_sptr inputGroup =
       boost::dynamic_pointer_cast<WorkspaceGroup>(ws);
   if (inputGroup) {
     if (inputGroup->isMultiperiod()) {
+      vecMultiPeriodWorkspaceGroups.push_back(inputGroup);
+    } else {
       vecWorkspaceGroups.push_back(inputGroup);
     }
   }
@@ -42,6 +47,7 @@ MultiPeriodGroupWorker::findMultiPeriodGroups(
   if (!sourceAlg->isInitialized()) {
     throw std::invalid_argument("Algorithm must be initialized");
   }
+  VecWSGroupType vecMultiPeriodWorkspaceGroups;
   VecWSGroupType vecWorkspaceGroups;
 
   // Handles the case in which the algorithm is providing a non-workspace
@@ -72,7 +78,8 @@ MultiPeriodGroupWorker::findMultiPeriodGroups(
       if (!ws) {
         throw Kernel::Exception::NotFoundError("Workspace", workspace);
       }
-      tryAddInputWorkspaceToInputGroups(ws, vecWorkspaceGroups);
+      tryAddInputWorkspaceToInputGroups(ws, vecMultiPeriodWorkspaceGroups,
+                                        vecWorkspaceGroups);
     }
   } else {
     typedef std::vector<boost::shared_ptr<Workspace>> WorkspaceVector;
@@ -81,13 +88,20 @@ MultiPeriodGroupWorker::findMultiPeriodGroups(
     sourceAlg->findWorkspaceProperties(inWorkspaces, outWorkspaces);
     UNUSED_ARG(outWorkspaces);
     for (auto &inWorkspace : inWorkspaces) {
-      tryAddInputWorkspaceToInputGroups(inWorkspace, vecWorkspaceGroups);
+      tryAddInputWorkspaceToInputGroups(
+          inWorkspace, vecMultiPeriodWorkspaceGroups, vecWorkspaceGroups);
     }
   }
 
-  validateMultiPeriodGroupInputs(vecWorkspaceGroups);
+  if ((vecMultiPeriodWorkspaceGroups.size() != 0) &&
+      (vecWorkspaceGroups.size() != 0)) {
+    throw std::invalid_argument(
+        "The input contains a mix of multi-period and other workspaces.");
+  }
+
+  validateMultiPeriodGroupInputs(vecMultiPeriodWorkspaceGroups);
 
-  return vecWorkspaceGroups;
+  return vecMultiPeriodWorkspaceGroups;
 }
 
 bool MultiPeriodGroupWorker::useCustomWorkspaceProperty() const {
diff --git a/Framework/API/src/MultipleFileProperty.cpp b/Framework/API/src/MultipleFileProperty.cpp
index 0316d3507fd9aae2664fde98b6429410d919660a..a961771273cf7a3afdb4243b50f47c407e2e7ebf 100644
--- a/Framework/API/src/MultipleFileProperty.cpp
+++ b/Framework/API/src/MultipleFileProperty.cpp
@@ -37,17 +37,27 @@ bool doesNotContainWildCard(const std::string &ext) {
 namespace Mantid {
 namespace API {
 /**
- * Constructor
+ * Alternative constructor with action
  *
- * @param name :: The name of the property
- * @param exts ::  The allowed/suggested extensions
+ * @param name   :: The name of the property
+ * @param action :: File action
+ * @param exts   ::  The allowed/suggested extensions
  */
 MultipleFileProperty::MultipleFileProperty(const std::string &name,
+                                           unsigned int action,
                                            const std::vector<std::string> &exts)
     : PropertyWithValue<std::vector<std::vector<std::string>>>(
           name, std::vector<std::vector<std::string>>(),
-          boost::make_shared<MultiFileValidator>(exts), Direction::Input),
-      m_multiFileLoadingEnabled(), m_exts(), m_parser(), m_defaultExt("") {
+          boost::make_shared<MultiFileValidator>(
+              exts, (action == FileProperty::Load)),
+          Direction::Input) {
+  if (action != FileProperty::Load && action != FileProperty::OptionalLoad) {
+    /// raise error for unsupported actions
+    throw std::runtime_error(
+        "Specified action is not supported for MultipleFileProperty");
+  } else {
+    m_action = action;
+  }
   std::string allowMultiFileLoading =
       Kernel::ConfigService::Instance().getString("loading.multifile");
 
@@ -61,6 +71,35 @@ MultipleFileProperty::MultipleFileProperty(const std::string &name,
       m_exts.push_back(ext);
 }
 
+/**
+ * Default constructor with default action
+ *
+ * @param name :: The name of the property
+ * @param exts ::  The allowed/suggested extensions
+ */
+MultipleFileProperty::MultipleFileProperty(const std::string &name,
+                                           const std::vector<std::string> &exts)
+    : MultipleFileProperty(name, FileProperty::Load, exts) {}
+
+/**
+* Check if this property is optional
+* @returns True if the property is optinal, false otherwise
+*/
+bool MultipleFileProperty::isOptional() const {
+  return (m_action == FileProperty::OptionalLoad);
+}
+
+/**
+ * @returns Empty string if empty value is valid, error message otherwise
+ */
+std::string MultipleFileProperty::isEmptyValueValid() const {
+  if (isOptional()) {
+    return "";
+  } else {
+    return "No file specified.";
+  }
+}
+
 /**
  * Convert the given propValue into a comma and plus separated list of full
  *filenames, and pass to the parent's
@@ -74,8 +113,11 @@ MultipleFileProperty::MultipleFileProperty(const std::string &name,
  *An empty string indicates success.
  */
 std::string MultipleFileProperty::setValue(const std::string &propValue) {
-  // No empty value is allowed.
-  if (propValue.empty())
+  // No empty value is allowed, unless optional.
+  // This is yet aditional check that is beyond the underlying
+  // MultiFileValidator,
+  // so isOptional needs to be inspected here as well
+  if (propValue.empty() && !isOptional())
     return "No file(s) specified.";
 
   // If multiple file loading is disabled, then set value assuming it is a
diff --git a/Framework/API/src/NumericAxis.cpp b/Framework/API/src/NumericAxis.cpp
index f2003d68f13f6fd94c6bfc6ca5e2a160ddcbe329..d241d1df3736d670d73fdcda1b731d38418157c8 100644
--- a/Framework/API/src/NumericAxis.cpp
+++ b/Framework/API/src/NumericAxis.cpp
@@ -6,7 +6,7 @@
 #include "MantidKernel/VectorHelper.h"
 
 #include <boost/format.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 #include "MantidKernel/Logger.h"
 namespace {
@@ -16,9 +16,9 @@ class EqualWithinTolerance {
 public:
   explicit EqualWithinTolerance(double tolerance) : m_tolerance(tolerance){};
   bool operator()(double a, double b) {
-    if (boost::math::isnan(a) && boost::math::isnan(b))
+    if (std::isnan(a) && std::isnan(b))
       return true;
-    if (boost::math::isinf(a) && boost::math::isinf(b))
+    if (std::isinf(a) && std::isinf(b))
       return true;
     return std::abs(a - b) <= m_tolerance;
   }
diff --git a/Framework/API/src/Run.cpp b/Framework/API/src/Run.cpp
index 392b40d0730417e6fd58c14b7989140aab304660..0e256285d942737f7b5d98d3cbfb0aff0d1b0ce3 100644
--- a/Framework/API/src/Run.cpp
+++ b/Framework/API/src/Run.cpp
@@ -443,7 +443,7 @@ void Run::calculateGoniometerMatrix() {
         getLogAsSingleValue(axisName, Kernel::Math::Maximum);
     const double angle = getLogAsSingleValue(axisName, Kernel::Math::Mean);
     if (minAngle != maxAngle &&
-        !(boost::math::isnan(minAngle) && boost::math::isnan(maxAngle))) {
+        !(std::isnan(minAngle) && std::isnan(maxAngle))) {
       const double lastAngle =
           getLogAsSingleValue(axisName, Kernel::Math::LastValue);
       g_log.warning("Goniometer angle changed in " + axisName + " log from " +
diff --git a/Framework/API/src/SpectrumInfo.cpp b/Framework/API/src/SpectrumInfo.cpp
index faf85265880c9bb6a0cdbe5f47bde23ddbd89267..761463cd85956b633d66f1193c6665e0e4d3d9da 100644
--- a/Framework/API/src/SpectrumInfo.cpp
+++ b/Framework/API/src/SpectrumInfo.cpp
@@ -1,5 +1,5 @@
-#include "MantidAPI/MatrixWorkspace.h"
 #include "MantidAPI/SpectrumInfo.h"
+#include "MantidAPI/MatrixWorkspace.h"
 #include "MantidGeometry/Instrument.h"
 #include "MantidGeometry/Instrument/DetectorGroup.h"
 #include "MantidGeometry/Instrument/ReferenceFrame.h"
@@ -11,7 +11,7 @@ namespace Mantid {
 namespace API {
 
 SpectrumInfo::SpectrumInfo(const MatrixWorkspace &workspace)
-    : m_workspace(workspace), m_instrument(workspace.getInstrument()),
+    : m_workspace(workspace), m_instrument(workspace.getInstrument()), m_L1(0),
       m_detectors(PARALLEL_GET_MAX_THREADS),
       m_lastIndex(PARALLEL_GET_MAX_THREADS, -1) {
   // Note: This does not seem possible currently (the instrument objects is
diff --git a/Framework/API/src/WorkspaceOpOverloads.cpp b/Framework/API/src/WorkspaceOpOverloads.cpp
index 86b49a7884fdb977f0d3c19973668e0e17cf314b..3be1fd8b086f542a31e47d54d8031b5d25ac7f40 100644
--- a/Framework/API/src/WorkspaceOpOverloads.cpp
+++ b/Framework/API/src/WorkspaceOpOverloads.cpp
@@ -420,15 +420,14 @@ bool WorkspaceHelpers::commonBoundaries(const MatrixWorkspace_const_sptr WS) {
   const double commonSum =
       std::accumulate(WS->readX(0).begin(), WS->readX(0).end(), 0.);
   // If this results in infinity or NaN, then we can't tell - return false
-  if (commonSum == std::numeric_limits<double>::infinity() ||
-      commonSum != commonSum)
+  if (!std::isfinite(commonSum))
     return false;
   const size_t numHist = WS->getNumberHistograms();
   for (size_t j = 1; j < numHist; ++j) {
     const double sum =
         std::accumulate(WS->readX(j).begin(), WS->readX(j).end(), 0.);
     // If this results in infinity or NaN, then we can't tell - return false
-    if (sum == std::numeric_limits<double>::infinity() || sum != sum)
+    if (!std::isfinite(sum))
       return false;
 
     if (std::abs(commonSum) < 1.0E-7 && std::abs(sum) < 1.0E-7) {
diff --git a/Framework/API/test/IFunction1DTest.h b/Framework/API/test/IFunction1DTest.h
index 12bc39036d98ba689197cf23da5b535de72fe0ec..d7df3385f9d075f1ff50b3a24d255cbbf11b2e5f 100644
--- a/Framework/API/test/IFunction1DTest.h
+++ b/Framework/API/test/IFunction1DTest.h
@@ -44,6 +44,7 @@ public:
     m_data[iY * m_np + iP] = value;
   }
   double get(size_t iY, size_t iP) override { return m_data[iY * m_np + iP]; }
+  void zero() override { m_data.assign(m_data.size(), 0.0); }
 
 private:
   size_t m_np;
diff --git a/Framework/API/test/ILatticeFunctionTest.h b/Framework/API/test/ILatticeFunctionTest.h
index 1a6b4ce1a53d8a6b6402604f29642ae3a2d64510..ba66cf38f8a738d1a245bdf977389d984f8e9899 100644
--- a/Framework/API/test/ILatticeFunctionTest.h
+++ b/Framework/API/test/ILatticeFunctionTest.h
@@ -94,6 +94,7 @@ private:
   public:
     MOCK_METHOD3(set, void(size_t, size_t, double));
     MOCK_METHOD2(get, double(size_t, size_t));
+    MOCK_METHOD0(zero, void());
   };
 
   // Mock domain to simulate a wrong domain type
diff --git a/Framework/API/test/IMDWorkspaceTest.h b/Framework/API/test/IMDWorkspaceTest.h
index 70eb6df9e6e058abc0490f1a8f8a756601de7b15..b4b09383e9874df1bceeb4540944b60b55ecd8e3 100644
--- a/Framework/API/test/IMDWorkspaceTest.h
+++ b/Framework/API/test/IMDWorkspaceTest.h
@@ -10,7 +10,6 @@
 #include "MantidAPI/SpectraAxis.h"
 #include "MantidGeometry/Instrument.h"
 #include "MantidGeometry/MDGeometry/IMDDimension.h"
-#include "MantidAPI/MatrixWSIndexCalculator.h"
 #include "MantidTestHelpers/FakeObjects.h"
 #include "PropertyManagerHelper.h"
 
@@ -114,29 +113,6 @@ public:
                       25, matrixWS.getNPoints());
   }
 
-  void testGetHistogramIndex() {
-    MatrixWSIndexCalculator indexCalculator(5);
-    HistogramIndex histogramIndexA = indexCalculator.getHistogramIndex(4);
-    HistogramIndex histogramIndexB = indexCalculator.getHistogramIndex(5);
-    HistogramIndex histogramIndexC = indexCalculator.getHistogramIndex(10);
-    TSM_ASSERT_EQUALS("histogram index has not been calculated correctly.", 0,
-                      histogramIndexA);
-    TSM_ASSERT_EQUALS("histogram index has not been calculated correctly.", 1,
-                      histogramIndexB);
-    TSM_ASSERT_EQUALS("histogram index has not been calculated correctly.", 2,
-                      histogramIndexC);
-  }
-
-  void testGetBinIndex() {
-    MatrixWSIndexCalculator indexCalculator(5);
-    BinIndex binIndexA = indexCalculator.getBinIndex(4, 0);
-    BinIndex binIndexB = indexCalculator.getBinIndex(12, 2);
-    TSM_ASSERT_EQUALS("bin index has not been calculated correctly.", 4,
-                      binIndexA);
-    TSM_ASSERT_EQUALS("bin index has not been calculated correctly.", 2,
-                      binIndexB);
-  }
-
   /**
   * Test declaring an input workspace and retrieving as const_sptr or sptr
   */
diff --git a/Framework/API/test/MultiDomainFunctionTest.h b/Framework/API/test/MultiDomainFunctionTest.h
index 40e28146d4a9d6f6130d139c03b7e7d9937540e2..e43d41070fc5a3e79b5158491c6fb2126415a349 100644
--- a/Framework/API/test/MultiDomainFunctionTest.h
+++ b/Framework/API/test/MultiDomainFunctionTest.h
@@ -81,6 +81,7 @@ public:
       off_diag += value;
   }
   double get(size_t, size_t) override { return 0.0; }
+  void zero() override {}
 };
 }
 
diff --git a/Framework/API/test/MultipleFilePropertyTest.h b/Framework/API/test/MultipleFilePropertyTest.h
index 67fa5c0034df099b04f4b8d0f9e156925833ad81..2aaa8ff37fdc6235e2b858c3f91cbc44c615385e 100644
--- a/Framework/API/test/MultipleFilePropertyTest.h
+++ b/Framework/API/test/MultipleFilePropertyTest.h
@@ -1,6 +1,7 @@
 #ifndef MANTID_API_MULTIPLEFILEPROPERTYTEST_H_
 #define MANTID_API_MULTIPLEFILEPROPERTYTEST_H_
 
+#include "MantidAPI/FileProperty.h"
 #include "MantidAPI/MultipleFileProperty.h"
 #include "MantidKernel/System.h"
 #include "MantidKernel/Timer.h"
@@ -17,6 +18,7 @@
 
 using namespace Mantid;
 using namespace Mantid::API;
+using Mantid::API::FileProperty;
 
 //////////////////////////////////////////////////////////////////////////////////////////////
 // Helper functions.
@@ -616,6 +618,18 @@ public:
     TS_ASSERT_EQUALS(fileNames[0].size(), 1);
   }
 
+  void test_multiFileOptionalLoad() {
+    MultipleFileProperty p("Filename", FileProperty::OptionalLoad);
+    p.setValue("myJunkFile.nxs");
+    TS_ASSERT(p.isValid().empty());
+  }
+
+  void test_multiFileOptionalLoadEmpty() {
+    MultipleFileProperty p("Filename", FileProperty::OptionalLoad);
+    p.setValue("");
+    TS_ASSERT(p.isValid().empty());
+  }
+
 private:
   //////////////////////////////////////////////////////////////////////////////////////////////
   // Private helper functions.
diff --git a/Framework/Algorithms/CMakeLists.txt b/Framework/Algorithms/CMakeLists.txt
index d0cc016e98329ba351e17a3e35d0f6c1864b4205..11361b26422ade971c0603e6246ad5518dc04ab2 100644
--- a/Framework/Algorithms/CMakeLists.txt
+++ b/Framework/Algorithms/CMakeLists.txt
@@ -18,6 +18,7 @@ set ( SRC_FILES
 	src/AverageLogData.cpp
 	src/BinaryOperateMasks.cpp
 	src/BinaryOperation.cpp
+	src/CalculateCountRate.cpp
 	src/CalMuonDeadTime.cpp
 	src/CalMuonDetectorPhases.cpp
 	src/CalculateDIFC.cpp
@@ -292,6 +293,7 @@ set ( SRC_FILES
 	src/WeightedMeanOfWorkspace.cpp
 	src/WeightingStrategy.cpp
 	src/WienerSmooth.cpp
+	src/WorkflowAlgorithmRunner.cpp
 	src/WorkspaceJoiners.cpp
 	src/XDataConverter.cpp
 )
@@ -323,6 +325,7 @@ set ( INC_FILES
 	inc/MantidAlgorithms/BinaryOperateMasks.h
 	inc/MantidAlgorithms/BinaryOperation.h
 	inc/MantidAlgorithms/BoostOptionalToAlgorithmProperty.h
+	inc/MantidAlgorithms/CalculateCountRate.h
 	inc/MantidAlgorithms/CalMuonDeadTime.h
 	inc/MantidAlgorithms/CalMuonDetectorPhases.h
 	inc/MantidAlgorithms/CalculateDIFC.h
@@ -605,6 +608,7 @@ set ( INC_FILES
 	inc/MantidAlgorithms/WeightedMeanOfWorkspace.h
 	inc/MantidAlgorithms/WeightingStrategy.h
 	inc/MantidAlgorithms/WienerSmooth.h
+	inc/MantidAlgorithms/WorkflowAlgorithmRunner.h
 	inc/MantidAlgorithms/WorkspaceJoiners.h
 	inc/MantidAlgorithms/XDataConverter.h
 )
@@ -640,6 +644,7 @@ set ( TEST_FILES
 	AverageLogDataTest.h
 	BinaryOperateMasksTest.h
 	BinaryOperationTest.h
+	CalculateCountRateTest.h
 	CalMuonDeadTimeTest.h
 	CalMuonDetectorPhasesTest.h
 	CalculateDIFCTest.h
@@ -888,6 +893,7 @@ set ( TEST_FILES
 	WeightedMeanTest.h
 	WeightingStrategyTest.h
 	WienerSmoothTest.h
+	WorkflowAlgorithmRunnerTest.h
 	WorkspaceCreationHelperTest.h
 	WorkspaceGroupTest.h
 )
diff --git a/Framework/Algorithms/inc/MantidAlgorithms/CalculateCountRate.h b/Framework/Algorithms/inc/MantidAlgorithms/CalculateCountRate.h
new file mode 100644
index 0000000000000000000000000000000000000000..3efe13216946e866559fb6312226241ac2a64301
--- /dev/null
+++ b/Framework/Algorithms/inc/MantidAlgorithms/CalculateCountRate.h
@@ -0,0 +1,115 @@
+#ifndef MANTID_ALGORITHMS_CALCCOUNTRATE_H_
+#define MANTID_ALGORITHMS_CALCCOUNTRATE_H_
+
+#include "MantidKernel/System.h"
+#include "MantidAPI/Algorithm.h"
+#include "MantidDataObjects/EventWorkspace.h"
+#include "MantidDataObjects/Workspace2D.h"
+
+namespace Mantid {
+namespace Algorithms {
+
+/**  In normal circumstances an instrument in event mode counts neutrons with
+  constant steady rate which depends on beam intensity, instrument settings and
+  sample.
+  Sometimes hardware issues cause it to count much faster or slower. This
+  appears as spurious signals on the final neutron images and users want to
+  filter these signals.
+
+  The algorithm calculates neutrons counting rate as the function of the
+  experiment's time and adds appropriate logs to the event workspace
+  for further event filtering on the basis of these logs, if the log values in
+  some parts differ strongly from the average values.
+
+
+  Copyright &copy; 2016 ISIS Rutherford Appleton Laboratory, NScD Oak Ridge
+  National Laboratory & European Spallation Source
+
+  This file is part of Mantid.
+
+  Mantid is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 3 of the License, or
+  (at your option) any later version.
+
+  Mantid is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+  File change history is stored at: <https://github.com/mantidproject/mantid>
+  Code Documentation is available at: <http://doxygen.mantidproject.org>
+*/
+class DLLExport CalculateCountRate : public API::Algorithm {
+public:
+  const std::string name() const override;
+  int version() const override;
+  const std::string category() const override;
+  const std::string summary() const override;
+  /// Helper function: true if count rate should be normalized and false
+  /// otherwise
+  bool normalizeCountRate() const;
+  /// Helper function to test if log derivative is used
+  bool useLogDerivative() const;
+  /// helper function to test if visualization workspace is requested
+  bool buildVisWS() const;
+
+private:
+  void init() override;
+  void exec() override;
+  // holder of the temporary log, used for normalization, binning source etc...
+  std::unique_ptr<Kernel::TimeSeriesProperty<double>> m_tmpLogHolder;
+  // diable log normalization
+  void disableNormalization(const std::string &NormLogError);
+
+protected: // for testing, actually private
+  /// pointer to the log used to normalize results or NULL if no such log
+  /// present on input workspace.
+  bool m_normalizeResult{false};
+  Kernel::TimeSeriesProperty<double> const *m_pNormalizationLog{nullptr};
+  /// default number of points in the target log
+  int m_numLogSteps{200};
+  /// specify if rate is calculated in selected frame interval (range defined)
+  /// or all frame should be used
+  bool m_rangeExplicit{false};
+  bool m_useLogDerivative{false};
+  /// spurion search ranges (TOF or other units requested)
+  double m_XRangeMin{0}, m_XRangeMax{0};
+  /// experiment time ranges:
+  Kernel::DateAndTime m_TRangeMin{0}, m_TRangeMax{0};
+  /// temporary workspace used to keep intermediate results
+  DataObjects::EventWorkspace_sptr m_workingWS;
+
+  void setSourceWSandXRanges(DataObjects::EventWorkspace_sptr &InputWorkspace);
+
+  void
+  setOutLogParameters(const DataObjects::EventWorkspace_sptr &InputWorkspace);
+
+  void calcRateLog(DataObjects::EventWorkspace_sptr &InputWorkspace,
+                   Kernel::TimeSeriesProperty<double> *const targLog);
+
+  void checkAndInitVisWorkspace();
+
+  void histogramEvents(const DataObjects::EventList &el,
+                       std::mutex *spectraLocks);
+
+  void normalizeVisWs(int64_t wsIndex);
+  void buildVisWSNormalization(std::vector<double> &normalization);
+
+  /// should algo generate visualization VS
+  bool m_doVis{false};
+  /// shared pointer to the optional visualization workspace
+  DataObjects::Workspace2D_sptr m_visWs;
+  // variables used in 2D histogramming of the visualization workspace
+  double m_visX0, m_visDX, m_visT0, m_visDT, m_visTmax;
+  // vector used in normalization of the visualization workspace
+  std::vector<double> m_visNorm;
+};
+
+} // namespace Algorithms
+} // namespace Mantid
+
+#endif /* MANTID_ALGORITHMS_CALCCOUNTRATE_H_ */
diff --git a/Framework/Algorithms/inc/MantidAlgorithms/ConvertEmptyToTof.h b/Framework/Algorithms/inc/MantidAlgorithms/ConvertEmptyToTof.h
index 982cc1123c21a7026ce99d5eb2733f468008a3d9..8422d341ea20d3d4a0b4ce943cb1c6157dca1912 100644
--- a/Framework/Algorithms/inc/MantidAlgorithms/ConvertEmptyToTof.h
+++ b/Framework/Algorithms/inc/MantidAlgorithms/ConvertEmptyToTof.h
@@ -77,7 +77,8 @@ private:
 
   DataObjects::Workspace2D_sptr m_inputWS;
   API::MatrixWorkspace_sptr m_outputWS;
-  const API::SpectrumInfo *m_spectrumInfo;
+  // Provide hint to compiler that this should be default initialized to nullptr
+  const API::SpectrumInfo *m_spectrumInfo = nullptr;
 };
 
 } // namespace Algorithms
diff --git a/Framework/Algorithms/inc/MantidAlgorithms/MergeRuns.h b/Framework/Algorithms/inc/MantidAlgorithms/MergeRuns.h
index 60c8627db59ad6be2cbdae2bdf54ac460e63d80d..824bd04017c71d5267c6b8b3d854e646a1667d36 100644
--- a/Framework/Algorithms/inc/MantidAlgorithms/MergeRuns.h
+++ b/Framework/Algorithms/inc/MantidAlgorithms/MergeRuns.h
@@ -161,7 +161,7 @@ private:
   /// Addition tables for event workspaces
   std::vector<AdditionTable> m_tables;
   /// Total number of histograms in the output workspace
-  size_t m_outputSize;
+  size_t m_outputSize = 0;
 };
 
 } // namespace Algorithm
diff --git a/Framework/Algorithms/inc/MantidAlgorithms/RemoveExpDecay.h b/Framework/Algorithms/inc/MantidAlgorithms/RemoveExpDecay.h
index 9967eacdc66331083905fde1d71c973d02e7fdc6..7ab51404be3088ff5e2a128d3faac92c7a795845 100644
--- a/Framework/Algorithms/inc/MantidAlgorithms/RemoveExpDecay.h
+++ b/Framework/Algorithms/inc/MantidAlgorithms/RemoveExpDecay.h
@@ -5,13 +5,14 @@
 // Includes
 //----------------------------------------------------------------------
 #include "MantidAPI/Algorithm.h"
+#include "MantidHistogramData/Histogram.h"
 #include "MantidKernel/cow_ptr.h"
 
 namespace Mantid {
 namespace Algorithms {
 /**Takes a muon workspace as input and removes the exponential decay from a time
 channel.
-     This is done by multipling the data by exp(t/tmuon).
+     This is done by multiplying the data by exp(t/tmuon).
 
 Required Properties:
 <UL>
@@ -65,10 +66,9 @@ private:
   // Overridden Algorithm methods
   void init() override;
   void exec() override;
-  void removeDecayError(const MantidVec &inX, const MantidVec &inY,
-                        MantidVec &outY);
-  void removeDecayData(const MantidVec &inX, const MantidVec &inY,
-                       MantidVec &outY);
+  // Remove exponential decay from Y and E
+  HistogramData::Histogram
+  removeDecay(const HistogramData::Histogram &histogram) const;
   // calculate Muon normalisation constant
   double calNormalisationConst(API::MatrixWorkspace_sptr ws, int wsIndex);
 };
diff --git a/Framework/Algorithms/inc/MantidAlgorithms/WorkflowAlgorithmRunner.h b/Framework/Algorithms/inc/MantidAlgorithms/WorkflowAlgorithmRunner.h
new file mode 100644
index 0000000000000000000000000000000000000000..dbb7e76c267bd6da8666d33224d0b1c67b516052
--- /dev/null
+++ b/Framework/Algorithms/inc/MantidAlgorithms/WorkflowAlgorithmRunner.h
@@ -0,0 +1,68 @@
+#ifndef MANTID_ALGORITHMS_WORKFLOWALGORITHMRUNNER_H_
+#define MANTID_ALGORITHMS_WORKFLOWALGORITHMRUNNER_H_
+
+#include "MantidAlgorithms/DllConfig.h"
+#include "MantidAPI/Algorithm.h"
+#include "MantidAPI/ITableWorkspace_fwd.h"
+
+namespace Mantid {
+namespace Algorithms {
+
+/** Controls the data flow and the order of algorithm execution.
+
+  Copyright &copy; 2016 ISIS Rutherford Appleton Laboratory, NScD Oak
+  Ridge National Laboratory & European Spallation Source
+
+  This file is part of Mantid.
+
+  Mantid is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 3 of the License, or
+  (at your option) any later version.
+
+  Mantid is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+  File change history is stored at: <https://github.com/mantidproject/mantid>
+  Code Documentation is available at: <http://doxygen.mantidproject.org>
+*/
+class MANTID_ALGORITHMS_DLL WorkflowAlgorithmRunner : public API::Algorithm {
+public:
+  /// Algorithm's name
+  const std::string name() const override { return "WorkflowAlgorithmRunner"; }
+  /// Summary of algorithms purpose
+  const std::string summary() const override {
+    return "Manages dependency resolution, input/output mapping and running of "
+           "algorithms.";
+  }
+
+  /// Algorithm's version
+  int version() const override { return 1; }
+  /// Algorithm's category for identification
+  const std::string category() const override { return "Utility"; }
+
+private:
+  /// Initialisation code
+  void init() override;
+  /// Execution code
+  void exec() override;
+
+  /// Configures a row in `setupTable`.
+  template <typename QUEUE, typename MAP>
+  void
+  configureRow(API::ITableWorkspace_sptr setupTable,
+               API::ITableWorkspace_sptr propertyTable, const size_t currentRow,
+               QUEUE &queue, const MAP &ioMap,
+               std::shared_ptr<std::unordered_set<size_t>> rowsBeingQueued =
+                   nullptr) const;
+};
+
+} // namespace Algorithms
+} // namespace Mantid
+
+#endif /* MANTID_ALGORITHMS_WORKFLOWALGORITHMRUNNER_H_ */
diff --git a/Framework/Algorithms/src/CalculateCountRate.cpp b/Framework/Algorithms/src/CalculateCountRate.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..18e68b99ed3b3165874400068644889981059dbb
--- /dev/null
+++ b/Framework/Algorithms/src/CalculateCountRate.cpp
@@ -0,0 +1,727 @@
+#include "MantidAlgorithms/CalculateCountRate.h"
+
+#include "MantidKernel/PropertyWithValue.h"
+#include "MantidKernel/BoundedValidator.h"
+#include "MantidKernel/TimeSeriesProperty.h"
+#include "MantidKernel/ListValidator.h"
+#include "MantidKernel/UnitFactory.h"
+#include "MantidKernel/MandatoryValidator.h"
+#include "MantidKernel/make_unique.h"
+
+#include "MantidAPI/AlgorithmManager.h"
+#include "MantidAPI/Axis.h"
+#include "MantidAPI/NumericAxis.h"
+#include "MantidAPI/WorkspaceFactory.h"
+
+#include "MantidDataObjects/Workspace2D.h"
+#include <numeric>
+
+namespace Mantid {
+namespace Algorithms {
+
+// Register the algorithm into the AlgorithmFactory
+DECLARE_ALGORITHM(CalculateCountRate)
+
+//----------------------------------------------------------------------------------------------
+
+/// Algorithms name for identification. @see Algorithm::name
+const std::string CalculateCountRate::name() const {
+  return "CalculateCountRate";
+}
+
+/// Algorithm's version for identification. @see Algorithm::version
+int CalculateCountRate::version() const { return 1; }
+
+/// Algorithm's category for identification. @see Algorithm::category
+const std::string CalculateCountRate::category() const {
+  return "Inelastic\\Utility;Diagnostics;Events\\EventFiltering";
+}
+
+/// Algorithm's summary for use in the GUI and help. @see Algorithm::summary
+const std::string CalculateCountRate::summary() const {
+  return "Calculates instrument count rate as the function of the "
+         "experiment time and adds CountRate log to the source workspace.";
+}
+
+//----------------------------------------------------------------------------------------------
+/** Declare the algorithm's properties.
+ */
+void CalculateCountRate::init() {
+
+  declareProperty(
+      Kernel::make_unique<API::WorkspaceProperty<DataObjects::EventWorkspace>>(
+          "Workspace", "", Kernel::Direction::InOut),
+      "Name of the event workspace to calculate counting rate for.");
+  declareProperty(Kernel::make_unique<Kernel::PropertyWithValue<double>>(
+                      "XMin", EMPTY_DBL(), Kernel::Direction::Input),
+                  "Minimal value of X-range for the rate calculations. If left "
+                  "to default, Workspace X-axis minimal value is used.");
+  declareProperty(Kernel::make_unique<Kernel::PropertyWithValue<double>>(
+                      "XMax", EMPTY_DBL(), Kernel::Direction::Input),
+                  "Maximal value of X-range for the rate calculations. If left "
+                  "to default, Workspace X-axis maximal value is used.");
+  declareProperty(
+      Kernel::make_unique<Kernel::PropertyWithValue<std::string>>(
+          "RangeUnits", "Energy",
+          boost::make_shared<Kernel::StringListValidator>(
+              Kernel::UnitFactory::Instance().getKeys()),
+          Kernel::Direction::Input),
+      "The units from Mantid Unit factory for calculating the "
+      "counting rate and XMin-XMax ranges are in. If the "
+      "X-axis of the input workspace is not expressed"
+      "in these units, unit conversion will be performed, so the "
+      "workspace should contain all necessary information for this "
+      "conversion. E.g. if *RangeUnits* is *EnergyTransfer*, Ei "
+      "log containing incident energy value should be attached to the "
+      "input workspace. See ConvertUnits algorithm for the details.");
+  std::vector<std::string> propOptions{"Elastic", "Direct", "Indirect"};
+  declareProperty(
+      "EMode", "Elastic",
+      boost::make_shared<Kernel::StringListValidator>(propOptions),
+      "The energy mode for 'RangeUnits' conversion mode (default: elastic)");
+
+  // Used logs group
+  std::string used_logs_mode("Used normalization logs");
+  declareProperty(
+      "NormalizeTheRate", true,
+      "Usually you want to normalize counting rate to some "
+      "rate related to the source beam intensity. Change this to "
+      "'false' if appropriate time series log is broken || not attached to "
+      "the input workspace.");
+  declareProperty("UseLogDerivative", false,
+                  "If the normalization log contains "
+                  "cumulative counting, derivative "
+                  "of this log is necessary to get "
+                  "correct normalization values.");
+  declareProperty(
+      "NormalizationLogName", "proton_charge",
+      "The name of the log, used in the counting rate normalization. ");
+  setPropertyGroup("NormalizeTheRate", used_logs_mode);
+  setPropertyGroup("UseLogDerivative", used_logs_mode);
+  setPropertyGroup("NormalizationLogName", used_logs_mode);
+
+  // Results
+  declareProperty("CountRateLogName", "block_count_rate",
+                  boost::make_shared<Kernel::MandatoryValidator<std::string>>(),
+                  "The name of the processed time series log with instrument "
+                  "count rate to be added"
+                  " to the source workspace");
+  declareProperty(
+      "UseNormLogGranularity", true,
+      "If true, the count rate log will have the normalization log "
+      "accuracy; If false, the 'NumTimeSteps' in the visualization "
+      "workspace below will be used for the target log granularity too.");
+
+  // visualization group
+  std::string spur_vis_mode("Spurion visualization");
+  declareProperty(
+      Kernel::make_unique<API::WorkspaceProperty<>>(
+          "VisualizationWs", "", Kernel::Direction::Output,
+          API::PropertyMode::Optional),
+      "Optional name to build 2D matrix workspace for spurion visualization. "
+      "If name is provided, a 2D workspace with this name will be created "
+      "containing data to visualize counting rate as function of time in the "
+      "ranges XMin-XMax");
+
+  auto mustBeReasonable = boost::make_shared<Kernel::BoundedValidator<int>>();
+  mustBeReasonable->setLower(3);
+  declareProperty(
+      Kernel::make_unique<Kernel::PropertyWithValue<int>>(
+          "NumTimeSteps", 200, mustBeReasonable, Kernel::Direction::Input),
+      "Number of time steps (time accuracy) the visualization workspace has. "
+      "Also number of steps in 'CountRateLogName' log if "
+      "'UseNormLogGranularity' is set to false. Should be bigger than 3");
+  declareProperty(
+      Kernel::make_unique<Kernel::PropertyWithValue<int>>(
+          "XResolution", 100, mustBeReasonable, Kernel::Direction::Input),
+      "Number of steps (accuracy) of the visualization workspace has along "
+      "X-axis. ");
+  setPropertyGroup("VisualizationWs", spur_vis_mode);
+  setPropertyGroup("NumTimeSteps", spur_vis_mode);
+  setPropertyGroup("XResolution", spur_vis_mode);
+}
+
+//----------------------------------------------------------------------------------------------
+/** Execute the algorithm.
+ */
+void CalculateCountRate::exec() {
+
+  DataObjects::EventWorkspace_sptr sourceWS = getProperty("Workspace");
+  API::EventType et = sourceWS->getEventType();
+  if (et == API::EventType::WEIGHTED_NOTIME) {
+    throw std::runtime_error("Event workspace " + sourceWS->name() +
+                             " contains events without necessary frame "
+                             "information. Can not process counting rate");
+  }
+
+  // Identify correct way to treat input logs and general properties of output
+  // log
+  this->setOutLogParameters(sourceWS);
+
+  //-------------------------------------
+  // identify ranges for count rate calculations and initiate source workspace
+  this->setSourceWSandXRanges(sourceWS);
+
+  // check if visualization workspace is necessary and if it is, prepare
+  // visualization workspace to use
+  this->checkAndInitVisWorkspace();
+
+  // create results log and add it to the source workspace
+  std::string logname = getProperty("CountRateLogName");
+  auto newlog = new Kernel::TimeSeriesProperty<double>(logname);
+  sourceWS->mutableRun().addProperty(newlog, true);
+
+  // calculate averages requested and modify results log
+  this->calcRateLog(m_workingWS, newlog);
+
+  // clear up log derivative and existing log pointer (if any)
+  // to avoid incorrect usage
+  // at subsequent calls to the same algorithm.
+  m_tmpLogHolder.release();
+  m_pNormalizationLog = nullptr;
+}
+
+/** Process input workspace to calculate instrument counting rate as function of
+*experiment time
+*@param InputWorkspace :: shared pointer to the input workspace to process
+*@param targLog        :: pointer to time series property containing count rate
+*log.
+*                         Property should exist on input and will be modified
+*with
+*                         counting rate log on output.
+*/
+void CalculateCountRate::calcRateLog(
+    DataObjects::EventWorkspace_sptr &InputWorkspace,
+    Kernel::TimeSeriesProperty<double> *const targLog) {
+
+  MantidVec countRate(m_numLogSteps);
+  std::vector<double> countNormalization;
+  if (this->normalizeCountRate())
+    countNormalization = m_pNormalizationLog->valuesAsVector();
+
+  std::unique_ptr<std::mutex[]> pVisWS_locks;
+  if (this->buildVisWS()) {
+    pVisWS_locks.reset(new std::mutex[m_visWs->getNumberHistograms()]);
+  }
+
+  int64_t nHist = static_cast<int64_t>(InputWorkspace->getNumberHistograms());
+  // Initialize progress reporting.
+  API::Progress prog(this, 0.0, 1.0, nHist);
+
+  double dTRangeMin = static_cast<double>(m_TRangeMin.totalNanoseconds());
+  double dTRangeMax = static_cast<double>(m_TRangeMax.totalNanoseconds());
+  std::vector<MantidVec> Buff;
+  int nThreads;
+
+#pragma omp parallel
+  {
+#pragma omp single
+    {
+      // initialize thread's histogram buffer
+      nThreads = PARALLEL_NUMBER_OF_THREADS;
+      Buff.resize(nThreads);
+    }
+    auto nThread = PARALLEL_THREAD_NUMBER;
+    Buff[nThread].assign(m_numLogSteps, 0);
+#pragma omp for
+    for (int64_t i = 0; i < nHist; ++i) {
+      auto nThread = PARALLEL_THREAD_NUMBER;
+      PARALLEL_START_INTERUPT_REGION
+
+      // Get a const event list reference. eventInputWS->dataY() doesn't work.
+      const DataObjects::EventList &el = InputWorkspace->getSpectrum(i);
+      el.generateCountsHistogramPulseTime(dTRangeMin, dTRangeMax, Buff[nThread],
+                                          m_XRangeMin, m_XRangeMax);
+      if (this->buildVisWS()) {
+        this->histogramEvents(el, pVisWS_locks.get());
+      }
+
+      // Report progress
+      prog.report(name());
+      PARALLEL_END_INTERUPT_REGION
+    }
+    PARALLEL_CHECK_INTERUPT_REGION
+// calculate final sums
+#pragma omp for
+    for (int64_t j = 0; j < m_numLogSteps; j++) {
+
+      for (int i = 0; i < nThreads; i++) {
+        countRate[j] += Buff[i][j];
+      }
+      // normalize if requested
+      if (!countNormalization.empty()) {
+        countRate[j] /= countNormalization[j];
+      }
+    }
+    if (!countNormalization.empty() && this->buildVisWS()) {
+#pragma omp for
+      for (int64_t j = 0; j < int64_t(m_visNorm.size()); j++) {
+        this->normalizeVisWs(j);
+      }
+    }
+  }
+
+  // generate target log timing
+  std::vector<Kernel::DateAndTime> times(m_numLogSteps);
+  double dt = (dTRangeMax - dTRangeMin) / static_cast<double>(m_numLogSteps);
+  auto t0 = m_TRangeMin.totalNanoseconds();
+  for (auto i = 0; i < m_numLogSteps; i++) {
+    times[i] =
+        Kernel::DateAndTime(t0 + static_cast<int64_t>((0.5 + double(i)) * dt));
+  }
+  // store calculated values within the target log.
+  targLog->replaceValues(times, countRate);
+}
+/** histogram event list into visualization workspace
+* @param el       :: event list to rebin into visualization workspace
+* @param spectraLocks :: pointer to the array of mutexes to lock modifyed
+*                        visualization workspace spectra for a thread
+*/
+void CalculateCountRate::histogramEvents(const DataObjects::EventList &el,
+                                         std::mutex *spectraLocks) {
+
+  if (el.empty())
+    return;
+
+  auto events = el.getEvents();
+  for (const DataObjects::TofEvent &ev : events) {
+    double pulsetime = static_cast<double>(ev.pulseTime().totalNanoseconds());
+    double tof = ev.tof();
+    if (pulsetime < m_visT0 || pulsetime >= m_visTmax)
+      continue;
+    if (tof < m_XRangeMin || tof >= m_XRangeMax)
+      continue;
+
+    size_t n_spec = static_cast<size_t>((pulsetime - m_visT0) / m_visDT);
+    size_t n_bin = static_cast<size_t>((tof - m_XRangeMin) / m_visDX);
+    (spectraLocks + n_spec)->lock();
+    auto &Y = m_visWs->mutableY(n_spec);
+    Y[n_bin]++;
+    (spectraLocks + n_spec)->unlock();
+  }
+}
+
+/** Normalize single spectrum of the normalization workspace using prepared
+ *  normzlization log
+ @param wsIndex -- appropriate visualization workspace index to normalize
+                   the spectrum
+ */
+void CalculateCountRate::normalizeVisWs(int64_t wsIndex) {
+
+  auto &Y = m_visWs->mutableY(wsIndex);
+  for (auto &yv : Y) {
+    yv /= m_visNorm[wsIndex];
+  }
+}
+/** Disable normalization using normalization log.
+Helper function to avoid code duplication.
+@param NormLogError -- error to print if normalization log is disabled*/
+void CalculateCountRate::disableNormalization(const std::string &NormLogError) {
+  g_log.warning() << NormLogError << std::endl;
+  m_pNormalizationLog = nullptr;
+  m_normalizeResult = false;
+}
+/*Analyse input log parameters and logs, attached to the workspace and identify
+ * the parameters of the target log, including experiment time.
+ *
+ @param InputWorkspace -- input workspace to analyse logs
+ */
+void CalculateCountRate::setOutLogParameters(
+    const DataObjects::EventWorkspace_sptr &InputWorkspace) {
+
+  std::string NormLogName = getProperty("NormalizationLogName");
+  std::string TargetLog = getProperty("CountRateLogName");
+  if (NormLogName == TargetLog) {
+    throw std::invalid_argument("Target log name: " + TargetLog +
+                                " and normalization log name: " + NormLogName +
+                                " can not be the same");
+  }
+
+  m_normalizeResult = getProperty("NormalizeTheRate");
+  bool useLogDerivative = getProperty("UseLogDerivative");
+  bool useLogAccuracy = getProperty("UseNormLogGranularity");
+
+  bool logPresent = InputWorkspace->run().hasProperty(NormLogName);
+  if (!logPresent) {
+    if (m_normalizeResult) {
+      this->disableNormalization(
+          "Normalization log '" + NormLogName +
+          "' values requested but the log is not attached to the "
+          "workspace. Normalization disabled");
+    }
+    if (useLogDerivative) {
+      g_log.warning() << "Normalization by log: '" << NormLogName
+                      << "' -- log derivative requested but the source log is "
+                         "not attached to "
+                         "the workspace. Log derivative will not be used.\n";
+      useLogDerivative = false;
+    }
+    if (useLogAccuracy) {
+      g_log.warning() << "Using accuracy of the log: '" << NormLogName
+                      << "' is requested but the log is not attached to the "
+                         "workspace. Will use accuracy defined by "
+                         "'NumTimeSteps' property value.\n";
+      useLogAccuracy = false;
+    }
+  } else {
+    m_pNormalizationLog =
+        InputWorkspace->run().getTimeSeriesProperty<double>(NormLogName);
+  }
+
+  // Analyse properties interactions
+
+  // if property derivative is specified.
+  if (useLogDerivative) {
+    m_tmpLogHolder = m_pNormalizationLog->getDerivative();
+    m_pNormalizationLog = m_tmpLogHolder.get();
+    m_useLogDerivative = true;
+  }
+
+  ///
+  if (m_normalizeResult) {
+    if (!useLogAccuracy) {
+      g_log.warning() << "Change of the counting log accuracy while "
+                         "normalizing by log values is not implemented. Will "
+                         "use log accuracy.\n";
+      useLogAccuracy = true;
+    }
+  } //---------------------------------------------------------------------
+  // find target log ranges and identify what normalization should be used
+
+  Kernel::DateAndTime runTMin, runTMax;
+  InputWorkspace->getPulseTimeMinMax(runTMin, runTMax);
+  //
+  if (useLogAccuracy) { // extract log times located inside the run time
+    Kernel::DateAndTime tLogMin, tLogMax;
+    if (m_useLogDerivative) { // derivative moves events to the bin centre,
+                              // but we need initial range
+      auto pSource =
+          InputWorkspace->run().getTimeSeriesProperty<double>(NormLogName);
+      tLogMin = pSource->firstTime();
+      tLogMax = pSource->lastTime();
+    } else {
+      tLogMin = m_pNormalizationLog->firstTime();
+      tLogMax = m_pNormalizationLog->lastTime();
+    }
+    //
+    if (tLogMin < runTMin || tLogMax > runTMax) {
+      if (tLogMin > runTMax ||
+          tLogMax < runTMin) { // log time is outside of the experiment time.
+                               // Log normalization is impossible
+        this->disableNormalization(
+            "Normalization log " + m_pNormalizationLog->name() +
+            " time lies outside of the the whole experiment time. "
+            "Log normalization impossible.");
+        useLogAccuracy = false;
+      } else {
+        if (!m_tmpLogHolder) {
+          m_tmpLogHolder =
+              Kernel::make_unique<Kernel::TimeSeriesProperty<double>>(
+                  *m_pNormalizationLog->clone());
+        }
+        m_tmpLogHolder->filterByTime(runTMin, runTMax);
+        m_pNormalizationLog = m_tmpLogHolder.get();
+        m_numLogSteps = m_pNormalizationLog->realSize();
+      }
+    } else {
+      if (tLogMin > runTMin || tLogMax < runTMax) {
+        this->disableNormalization(
+            "Normalization log " + m_pNormalizationLog->name() +
+            " time does not cover the whole experiment time. "
+            "Log normalization impossible.");
+        useLogAccuracy = false;
+      }
+    }
+  }
+
+  if (useLogAccuracy) {
+    m_numLogSteps = m_pNormalizationLog->realSize();
+    if (m_numLogSteps < 2) { // should not ever happen but...
+
+      this->disableNormalization(
+          "Number of points in the Normalization log " +
+          m_pNormalizationLog->name() +
+          " smaller then 2. Can not normalize using this log.");
+      m_numLogSteps = getProperty("NumTimeSteps"); // Always > 2
+      useLogAccuracy = false;
+    }
+  } else {
+    m_numLogSteps = getProperty("NumTimeSteps");
+  }
+  // identify epsilon to use with current time
+  double t_epsilon = double(runTMax.totalNanoseconds()) *
+                     (1 + std::numeric_limits<double>::epsilon());
+  int64_t eps_increment =
+      static_cast<int64_t>(t_epsilon - double(runTMax.totalNanoseconds()));
+
+  m_TRangeMin = runTMin - eps_increment;
+  if (useLogAccuracy) {
+    // Let's try to establish log step (it should be constant in real
+    // applications) and define
+    // binning in such a way, that each historgam bin accomodates
+    // single log value.
+    auto iTMax = runTMax.totalNanoseconds();
+    auto iTMin = m_TRangeMin.totalNanoseconds();
+    int64_t provDT = (iTMax - iTMin) / (m_numLogSteps - 1);
+    if (provDT < 1) { // something is fundamentally wrong. This can only happen
+                      // if the log is very short and the distance between log
+                      // boundaries is smaller than dt
+      this->disableNormalization("Time step of the log " +
+                                 m_pNormalizationLog->name() +
+                                 " is not consistent with number of log steps. "
+                                 "Can not use this log normalization");
+      useLogAccuracy = false;
+    } else {
+      auto iTMax1 = iTMin + provDT * m_numLogSteps;
+      if (iTMax1 <= iTMax) { // == is possible
+        m_numLogSteps++;
+        iTMax1 = iTMin + provDT * m_numLogSteps;
+      }
+      m_TRangeMax = Kernel::DateAndTime(iTMax1);
+    }
+  }
+
+  if (!useLogAccuracy) {
+    // histogramming excludes rightmost events. Modify max limit to keep them
+    m_TRangeMax = runTMax + eps_increment; // Should be
+    // *(1+std::numeric_limits<double>::epsilon())
+    // but DateTime does not have multiplication
+    // operator
+  }
+}
+
+/* Retrieve and define data search ranges from input workspace parameters and
+ * algorithm properties
+ *
+ *@param InputWorkspace -- event workspace to process. Also retrieves algorithm
+ *                         properties, relevant to the workspace.
+ *@return -- the input workspace cropped according to XMin-XMax ranges in units,
+ *           requested by the user
+ *
+*/
+void CalculateCountRate::setSourceWSandXRanges(
+    DataObjects::EventWorkspace_sptr &InputWorkspace) {
+
+  std::string RangeUnits = getProperty("RangeUnits");
+  auto axis = InputWorkspace->getAxis(0);
+  const auto unit = axis->unit();
+
+  API::MatrixWorkspace_sptr wst;
+  if (unit->unitID() != RangeUnits) {
+    auto conv = createChildAlgorithm("ConvertUnits", 0, 1);
+    std::string wsName = InputWorkspace->name();
+    if (wsName.empty()) {
+      wsName = "_CountRate_UnitsConverted";
+    } else {
+      wsName = "_" + wsName + "_converted";
+    }
+
+    conv->setProperty("InputWorkspace", InputWorkspace);
+    conv->setPropertyValue("OutputWorkspace", wsName);
+    std::string Emode = getProperty("Emode");
+    conv->setProperty("Emode", Emode);
+    conv->setProperty("Target", RangeUnits);
+
+    conv->setRethrows(true);
+    conv->execute();
+    wst = conv->getProperty("OutputWorkspace");
+
+  } else {
+    wst = InputWorkspace;
+  }
+  m_workingWS = boost::dynamic_pointer_cast<DataObjects::EventWorkspace>(wst);
+  if (!m_workingWS) {
+    throw std::runtime_error("SetWSDataRanges:Can not retrieve EventWorkspace "
+                             "after converting units");
+  }
+  // data ranges
+  m_XRangeMin = getProperty("XMin");
+  m_XRangeMax = getProperty("XMax");
+
+  if (m_XRangeMin == EMPTY_DBL() && m_XRangeMax == EMPTY_DBL()) {
+    m_rangeExplicit = false;
+  } else {
+    m_rangeExplicit = true;
+  }
+
+  double realMin, realMax;
+  m_workingWS->getEventXMinMax(realMin, realMax);
+  if (!m_rangeExplicit) { // The range is the whole workspace range
+    m_XRangeMin = realMin;
+    // include rightmost limit into the histogramming
+    m_XRangeMax = realMax * (1. + std::numeric_limits<double>::epsilon());
+    return;
+  }
+
+  if (m_XRangeMin == EMPTY_DBL()) {
+    m_XRangeMin = realMin;
+  }
+  if (m_XRangeMax == EMPTY_DBL()) {
+    // include rightmost limit into the histogramming
+    m_XRangeMax = realMax * (1. + std::numeric_limits<double>::epsilon());
+  }
+  if (m_XRangeMin < realMin) {
+    g_log.debug() << "Workspace constrain min range changed from: "
+                  << m_XRangeMin << " To: " << realMin << std::endl;
+    m_XRangeMin = realMin;
+  }
+  if (m_XRangeMax > realMax) {
+    g_log.debug() << "Workspace constrain max range changed from: "
+                  << m_XRangeMax << " To: " << realMax << std::endl;
+    m_XRangeMax = realMax * (1. + std::numeric_limits<double>::epsilon());
+  }
+  // check final ranges valid
+  if (m_XRangeMax < realMin || m_XRangeMin > realMax) {
+    throw std::invalid_argument(
+        " Spurion data search range: [" + std::to_string(m_XRangeMin) + "," +
+        std::to_string(m_XRangeMin) +
+        "] lies outside of the workspace's real data range: [" +
+        std::to_string(realMin) + "," + std::to_string(realMax) + "]");
+  }
+
+  if (m_XRangeMin > m_XRangeMax) {
+    throw std::invalid_argument(" Minimal spurion search data limit is bigger "
+                                "than the maximal limit. ( Min: " +
+                                std::to_string(m_XRangeMin) + "> Max: " +
+                                std::to_string(m_XRangeMax) + ")");
+  }
+}
+
+/**Check if visualization workspace is necessary and initiate it if requested.
+* Sets or clears up internal m_visWS pointer and "do-visualization workspace"
+* option.
+*/
+void CalculateCountRate::checkAndInitVisWorkspace() {
+  std::string visWSName = getProperty("VisualizationWs");
+  if (visWSName.empty()) {
+    m_visWs.reset();
+    m_doVis = false;
+    return;
+  }
+  m_doVis = true;
+
+  int numTBins = getProperty("NumTimeSteps");
+  if (this->normalizeCountRate()) {
+    if (numTBins > m_numLogSteps) {
+      g_log.information() << "Number of time step in normalized visualization "
+                             "workspace exceeds the number of points in the "
+                             "normalization log. This mode is not supported so "
+                             "number of time steps decreased to be equal to "
+                             "the number of normalization log points\n";
+      numTBins = m_numLogSteps;
+    }
+  }
+  int numXBins = getProperty("XResolution");
+  std::string RangeUnits = getProperty("RangeUnits");
+
+  m_visWs = boost::dynamic_pointer_cast<DataObjects::Workspace2D>(
+      API::WorkspaceFactory::Instance().create("Workspace2D", numTBins,
+                                               numXBins + 1, numXBins));
+  m_visWs->setTitle(visWSName);
+
+  double Xmax = m_XRangeMax;
+  // a bit dodgy code. It can be generalized
+  if (std::isinf(Xmax)) {
+    const auto &Xbin = m_workingWS->x(0);
+    for (int64_t i = Xbin.size() - 1; i >= 0; --i) {
+      if (!std::isinf(Xbin[i])) {
+        Xmax = Xbin[i];
+        break;
+      }
+    }
+    if (std::isinf(Xmax)) {
+      g_log.warning() << "All X-range for visualization workspace is infinity. "
+                         "Can not build visualization workspace in the units "
+                         "requested\n";
+      m_visWs.reset();
+      m_doVis = false;
+      return;
+    }
+  }
+
+  // define X-axis in target units
+  double dX = (Xmax - m_XRangeMin) / numXBins;
+  std::vector<double> xx(numXBins);
+  for (int i = 0; i < numXBins; ++i) {
+    xx[i] = m_XRangeMin + (0.5 + static_cast<double>(i)) * dX;
+  }
+  auto ax0 = Kernel::make_unique<API::NumericAxis>(xx);
+  ax0->setUnit(RangeUnits);
+  m_visWs->replaceAxis(0, ax0.release());
+
+  // define Y axis (in seconds);
+  double dt = (static_cast<double>(m_TRangeMax.totalNanoseconds() -
+                                   m_TRangeMin.totalNanoseconds()) /
+               static_cast<double>(numTBins)) *
+              1.e-9;
+  xx.resize(numTBins);
+  for (int i = 0; i < numTBins; i++) {
+    xx[i] = (0.5 + static_cast<double>(i)) * dt;
+  }
+  auto ax1 = Kernel::make_unique<API::NumericAxis>(xx);
+  auto labelY = boost::dynamic_pointer_cast<Kernel::Units::Label>(
+      Kernel::UnitFactory::Instance().create("Label"));
+  labelY->setLabel("sec");
+  ax1->unit() = labelY;
+  m_visWs->replaceAxis(1, ax1.release());
+
+  setProperty("VisualizationWs", m_visWs);
+
+  // define binning parameters used while calculating visualization
+  m_visX0 = m_XRangeMin;
+  m_visDX = dX;
+  m_visT0 = static_cast<double>(m_TRangeMin.totalNanoseconds());
+  m_visTmax = static_cast<double>(m_TRangeMax.totalNanoseconds());
+  m_visDT = (m_visTmax - m_visT0) / static_cast<double>(numTBins);
+
+  if (this->normalizeCountRate()) {
+    m_visNorm.resize(numTBins);
+    this->buildVisWSNormalization(m_visNorm);
+  }
+}
+/** Helper function to check if visualization workspace should be used*/
+bool CalculateCountRate::buildVisWS() const { return m_doVis; }
+
+/** Helper function, mainly for testing
+* @return  true if count rate should be normalized and false
+* otherwise */
+bool CalculateCountRate::normalizeCountRate() const {
+  return m_normalizeResult;
+}
+/** Helper function, mainly for testing
+* @return  true if log derivative is used instead of log itself */
+bool CalculateCountRate::useLogDerivative() const { return m_useLogDerivative; }
+
+/** method to prepare normalization vector for the visualisation workspace using
+* data from normalization log with, usually, different number of time steps
+* Here we assume that the number of time points in the visualization workspace
+* is smaller or equal to the number of points in the normalization log.
+*
+@param normalization -- on output, the vector containing normalization
+*                       coefficients for the visualization workspace spectra
+*/
+void CalculateCountRate::buildVisWSNormalization(
+    std::vector<double> &normalization) {
+  if (!m_pNormalizationLog) {
+    m_normalizeResult = false;
+    g_log.warning() << "CalculateCountRate::buildVisWSNormalization: No source "
+                       "normalization log is found. Will not normalize "
+                       "visualization workspace\n";
+    return;
+  }
+  // visualization workspace should be present and initialized at this stage:
+  auto ax = dynamic_cast<API::NumericAxis *>(m_visWs->getAxis(1));
+  if (!ax)
+    throw std::runtime_error(
+        "Can not retrieve Y-axis from visualization workspace");
+
+  normalization.assign(ax->length(), 0.);
+  // For more accurate logging (in a future, if necessary:)
+  // auto t_bins = ax->createBinBoundaries();
+  // double dt = t_bins[2] - t_bins[1]; // equal bins, first bin may be weird.
+  //
+  m_pNormalizationLog->histogramData(m_TRangeMin, m_TRangeMax, normalization);
+}
+
+} // namespace Algorithms
+} // namespace Mantid
diff --git a/Framework/Algorithms/src/ConvertUnits.cpp b/Framework/Algorithms/src/ConvertUnits.cpp
index ba046bf0efb10a9781db7c65af5df81db345a7e1..83d1698a0677d1b2f98945274b296b5fc5235ff8 100644
--- a/Framework/Algorithms/src/ConvertUnits.cpp
+++ b/Framework/Algorithms/src/ConvertUnits.cpp
@@ -674,7 +674,7 @@ const std::vector<double> ConvertUnits::calculateRebinParams(
         auto &XData = workspace->x(i);
         double xfront = XData.front();
         double xback = XData.back();
-        if (boost::math::isfinite(xfront) && boost::math::isfinite(xback)) {
+        if (std::isfinite(xfront) && std::isfinite(xback)) {
           if (xfront < XMin)
             XMin = xfront;
           if (xback > XMax)
diff --git a/Framework/Algorithms/src/ConvertUnitsUsingDetectorTable.cpp b/Framework/Algorithms/src/ConvertUnitsUsingDetectorTable.cpp
index 3b374881c1acbb540550afa2aec77501fc9b9712..8b57d341e7e833955bb9cb70312da437f6b05ab3 100644
--- a/Framework/Algorithms/src/ConvertUnitsUsingDetectorTable.cpp
+++ b/Framework/Algorithms/src/ConvertUnitsUsingDetectorTable.cpp
@@ -12,12 +12,10 @@
 
 #include <boost/bind.hpp>
 #include <boost/function.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
 
 #include <algorithm>
 #include <numeric>
 #include <cfloat>
-#include <limits>
 
 namespace Mantid {
 namespace Algorithms {
diff --git a/Framework/Algorithms/src/DetectorEfficiencyVariation.cpp b/Framework/Algorithms/src/DetectorEfficiencyVariation.cpp
index 5bd44d2b2e911134a2b0e731dabc6f8559348c03..101c657e0bb916de257aa2096c09fa5d80ca9192 100644
--- a/Framework/Algorithms/src/DetectorEfficiencyVariation.cpp
+++ b/Framework/Algorithms/src/DetectorEfficiencyVariation.cpp
@@ -3,8 +3,6 @@
 #include "MantidAPI/SpectrumInfo.h"
 #include "MantidKernel/BoundedValidator.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
-
 namespace Mantid {
 namespace Algorithms {
 
@@ -236,8 +234,7 @@ int DetectorEfficiencyVariation::doDetectorTests(
     const double signal2 = counts2->y(i)[0];
 
     // Mask out NaN and infinite
-    if (boost::math::isinf(signal1) || boost::math::isnan(signal1) ||
-        boost::math::isinf(signal2) || boost::math::isnan(signal2)) {
+    if (!std::isfinite(signal1) || !std::isfinite(signal2)) {
       maskWS->mutableY(i)[0] = deadValue;
       PARALLEL_ATOMIC
       ++numFailed;
diff --git a/Framework/Algorithms/src/DiffractionFocussing.cpp b/Framework/Algorithms/src/DiffractionFocussing.cpp
index 3b5ae57b7e7f034801237964bdba78edd42ff0ad..458256d04f9c153ec1b80aeab4549ef62faea217 100644
--- a/Framework/Algorithms/src/DiffractionFocussing.cpp
+++ b/Framework/Algorithms/src/DiffractionFocussing.cpp
@@ -210,8 +210,7 @@ void DiffractionFocussing::calculateRebinParams(
     auto &xVec = workspace->x(i);
     const double &localMin = xVec.front();
     const double &localMax = xVec.back();
-    if (localMin != std::numeric_limits<double>::infinity() &&
-        localMax != std::numeric_limits<double>::infinity()) {
+    if (std::isfinite(localMin) && std::isfinite(localMax)) {
       min = std::min(min, localMin);
       max = std::max(max, localMax);
     }
diff --git a/Framework/Algorithms/src/ExtractSpectra.cpp b/Framework/Algorithms/src/ExtractSpectra.cpp
index bccfc43de3c7b3959f3c753eacb0586792f4e595..9581e735c9e85696290aaecc7ecaa8fa43e39800 100644
--- a/Framework/Algorithms/src/ExtractSpectra.cpp
+++ b/Framework/Algorithms/src/ExtractSpectra.cpp
@@ -155,8 +155,9 @@ void ExtractSpectra::execHistogram() {
       if (hasDx) {
         auto &oldDx = m_inputWorkspace->dx(i);
         outputWorkspace->setSharedDx(
-            j, make_cow<HistogramData::HistogramDx>(oldDx.begin() + m_minX,
-                                                    oldDx.begin() + m_maxX));
+            j,
+            make_cow<HistogramData::HistogramDx>(
+                oldDx.begin() + m_minX, oldDx.begin() + m_maxX - m_histogram));
       }
     } else {
       // Safe to just copy whole vector 'cos can't be cropping in X if not
@@ -345,8 +346,8 @@ void ExtractSpectra::execEvent() {
       outEL.setX(XValues_new.cowData());
       if (hasDx) {
         auto &oldDx = m_inputWorkspace->dx(i);
-        outEL.setBinEdgeStandardDeviations(oldDx.begin() + m_minX,
-                                           oldDx.begin() + m_maxX);
+        outEL.setPointStandardDeviations(oldDx.begin() + m_minX,
+                                         oldDx.begin() + m_maxX - m_histogram);
       }
     }
 
diff --git a/Framework/Algorithms/src/FindDetectorsOutsideLimits.cpp b/Framework/Algorithms/src/FindDetectorsOutsideLimits.cpp
index cc9a172ec5c133621f4faeee02995759f8bafe38..e4967081d2a96f658f0edf774a4700bda8a13617 100644
--- a/Framework/Algorithms/src/FindDetectorsOutsideLimits.cpp
+++ b/Framework/Algorithms/src/FindDetectorsOutsideLimits.cpp
@@ -5,8 +5,6 @@
 #include "MantidKernel/BoundedValidator.h"
 #include "MantidKernel/MultiThreaded.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
-
 #include <fstream>
 #include <cmath>
 
@@ -145,7 +143,7 @@ void FindDetectorsOutsideLimits::exec() {
 
     const double &yValue = countsWS->y(countsInd)[0];
     // Mask out NaN and infinite
-    if (boost::math::isinf(yValue) || boost::math::isnan(yValue)) {
+    if (!std::isfinite(yValue)) {
       keepData = false;
     } else {
       if (yValue <= lowThreshold) {
diff --git a/Framework/Algorithms/src/GetDetectorOffsets.cpp b/Framework/Algorithms/src/GetDetectorOffsets.cpp
index d0028db0599c3e9b1c69cc8dadbba1f3f5e42a47..3f20683ea86634d330b737b1e1dd530d05581fe9 100644
--- a/Framework/Algorithms/src/GetDetectorOffsets.cpp
+++ b/Framework/Algorithms/src/GetDetectorOffsets.cpp
@@ -178,7 +178,7 @@ double GetDetectorOffsets::fitSpectra(const int64_t s, bool isAbsolbute) {
   const double peakLoc = inputW->x(s)[it - yValues.begin()];
   // Return if peak of Cross Correlation is nan (Happens when spectra is zero)
   // Pixel with large offset will be masked
-  if (boost::math::isnan(peakHeight))
+  if (std::isnan(peakHeight))
     return (1000.);
 
   IAlgorithm_sptr fit_alg;
diff --git a/Framework/Algorithms/src/IntegrateByComponent.cpp b/Framework/Algorithms/src/IntegrateByComponent.cpp
index f2e51448bb144cdcfa21226414b9cb675bed0057..06b10990bcad9b228fba447e32c2dfed29bf0620 100644
--- a/Framework/Algorithms/src/IntegrateByComponent.cpp
+++ b/Framework/Algorithms/src/IntegrateByComponent.cpp
@@ -4,7 +4,6 @@
 #include "MantidGeometry/Instrument.h"
 #include "MantidKernel/BoundedValidator.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
 #include <gsl/gsl_statistics.h>
 #include <unordered_map>
 
@@ -91,9 +90,7 @@ void IntegrateByComponent::exec() {
         const double yValue = integratedWS->readY(hists[i])[0];
         const double eValue = integratedWS->readE(hists[i])[0];
 
-        if (boost::math::isnan(yValue) || boost::math::isinf(yValue) ||
-            boost::math::isnan(eValue) ||
-            boost::math::isinf(eValue)) // NaNs/Infs
+        if (!std::isfinite(yValue) || !std::isfinite(eValue)) // NaNs/Infs
           continue;
 
         // Now we have a good value
@@ -128,9 +125,7 @@ void IntegrateByComponent::exec() {
 
         const double yValue = integratedWS->readY(hists[i])[0];
         const double eValue = integratedWS->readE(hists[i])[0];
-        if (boost::math::isnan(yValue) || boost::math::isinf(yValue) ||
-            boost::math::isnan(eValue) ||
-            boost::math::isinf(eValue)) // NaNs/Infs
+        if (!std::isfinite(yValue) || !std::isfinite(eValue)) // NaNs/Infs
           continue;
 
         // Now we have a good value
diff --git a/Framework/Algorithms/src/MedianDetectorTest.cpp b/Framework/Algorithms/src/MedianDetectorTest.cpp
index 0f7f8eb53fd8e9b84fae76b9ae1b3a2c113ee286..98c72be2d0334abec7f1be8b3b136bf130793a8a 100644
--- a/Framework/Algorithms/src/MedianDetectorTest.cpp
+++ b/Framework/Algorithms/src/MedianDetectorTest.cpp
@@ -2,7 +2,7 @@
 #include "MantidAPI/HistogramValidator.h"
 #include "MantidKernel/BoundedValidator.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 namespace Mantid {
 namespace Algorithms {
@@ -347,7 +347,7 @@ int MedianDetectorTest::doDetectorTests(
       const double signal = countsWS->y(hists.at(i))[0];
 
       // Mask out NaN and infinite
-      if (boost::math::isinf(signal) || boost::math::isnan(signal)) {
+      if (!std::isfinite(signal)) {
         maskWS->mutableY(hists.at(i))[0] = deadValue;
         PARALLEL_ATOMIC
         ++numFailed;
diff --git a/Framework/Algorithms/src/MergeRuns.cpp b/Framework/Algorithms/src/MergeRuns.cpp
index 964e228304e62c8654f24fbeb6b5cc5d68d00ee9..72af05903c2a6ca9c067454f3d0f87ccfe589c8c 100644
--- a/Framework/Algorithms/src/MergeRuns.cpp
+++ b/Framework/Algorithms/src/MergeRuns.cpp
@@ -107,8 +107,7 @@ void MergeRuns::exec() {
   }
 
   if (inputs.size() == 1) {
-    g_log.error("Only one input workspace specified");
-    throw std::invalid_argument("Only one input workspace specified");
+    g_log.warning("Only one input workspace specified");
   }
 
   // First, try as event workspaces
diff --git a/Framework/Algorithms/src/PDCalibration.cpp b/Framework/Algorithms/src/PDCalibration.cpp
index d56b2277b09becd759dd4e32fe00f45c82cbb25f..a5996da106def8fa79408aba953c05ab9cfbaf29 100644
--- a/Framework/Algorithms/src/PDCalibration.cpp
+++ b/Framework/Algorithms/src/PDCalibration.cpp
@@ -115,7 +115,7 @@ public:
 //----------------------------------------------------------------------------------------------
 /** Constructor
  */
-PDCalibration::PDCalibration() {}
+PDCalibration::PDCalibration() : m_tofMin(0), m_tofMax(0), m_hasDasIds(false) {}
 
 //----------------------------------------------------------------------------------------------
 /** Destructor
diff --git a/Framework/Algorithms/src/PlotAsymmetryByLogValue.cpp b/Framework/Algorithms/src/PlotAsymmetryByLogValue.cpp
index a87f12291ff67b5ddfe67371f0f0a795c65f2c87..4938e34f8376efa8c660e8b3630240b61fc0dd3a 100644
--- a/Framework/Algorithms/src/PlotAsymmetryByLogValue.cpp
+++ b/Framework/Algorithms/src/PlotAsymmetryByLogValue.cpp
@@ -162,7 +162,10 @@ void PlotAsymmetryByLogValue::exec() {
   for (size_t i = is; i <= ie; i++) {
 
     // Check if run i was already loaded
-    if (!m_logValue.count(i)) {
+    std::ostringstream logMessage;
+    if (m_logValue.count(i)) {
+      logMessage << "Found run " << i;
+    } else {
       // Load run, apply dead time corrections and detector grouping
       Workspace_sptr loadedWs = doLoad(i);
 
@@ -170,8 +173,9 @@ void PlotAsymmetryByLogValue::exec() {
         // Analyse loadedWs
         doAnalysis(loadedWs, i);
       }
+      logMessage << "Loaded run " << i;
     }
-    progress.report();
+    progress.report(logMessage.str());
   }
 
   // Create the 2D workspace for the output
diff --git a/Framework/Algorithms/src/Q1D2.cpp b/Framework/Algorithms/src/Q1D2.cpp
index 0a53c4accc71dd13a4ae71d348fd2a006004beaf..5c97a099e5364eb60e32dcfd19ce684fcb2399b7 100644
--- a/Framework/Algorithms/src/Q1D2.cpp
+++ b/Framework/Algorithms/src/Q1D2.cpp
@@ -140,7 +140,7 @@ void Q1D2::exec() {
   MantidVec normError2(YOut.size(), 0.0);
 
   // the averaged Q resolution.
-  HistogramData::HistogramDx qResolutionOut(QOut.size(), 0.0);
+  HistogramData::HistogramDx qResolutionOut(QOut.size() - 1, 0.0);
 
   const int numSpec = static_cast<int>(m_dataWS->getNumberHistograms());
   Progress progress(this, 0.05, 1.0, numSpec + 1);
@@ -267,12 +267,7 @@ void Q1D2::exec() {
         *qResolutionIterator = (*qResolutionIterator) / (*countsIterator);
       }
     }
-    // Now duplicate write the second to last element into the last element of
-    // the deltaQ vector
-    if (qResolutionOut.size() > 1) {
-      qResolutionOut.rbegin()[0] = qResolutionOut.rbegin()[1];
-    }
-    outputWS->setBinEdgeStandardDeviations(0, std::move(qResolutionOut));
+    outputWS->setPointStandardDeviations(0, std::move(qResolutionOut));
   }
 
   bool doOutputParts = getProperty("OutputParts");
diff --git a/Framework/Algorithms/src/Qxy.cpp b/Framework/Algorithms/src/Qxy.cpp
index ae243f9f5d41e034597ae292553d8315acf3aafe..8f5389434b3d5e13f2e3270f4762f3adaabebf7d 100644
--- a/Framework/Algorithms/src/Qxy.cpp
+++ b/Framework/Algorithms/src/Qxy.cpp
@@ -13,7 +13,6 @@
 #include "MantidKernel/CompositeValidator.h"
 #include "MantidKernel/UnitFactory.h"
 #include "MantidKernel/VectorHelper.h"
-#include <boost/math/special_functions/fpclassify.hpp>
 
 namespace Mantid {
 namespace Algorithms {
@@ -122,6 +121,8 @@ void Qxy::exec() {
   // Set the progress bar (1 update for every one percent increase in progress)
   Progress prog(this, 0.05, 1.0, numSpec);
 
+  const auto &spectrumInfo = inputWorkspace->spectrumInfo();
+
   //  PARALLEL_FOR2(inputWorkspace,outputWorkspace)
   for (int64_t i = 0; i < int64_t(numSpec); ++i) {
     //    PARALLEL_START_INTERUPT_REGION
@@ -192,8 +193,7 @@ void Qxy::exec() {
     // constructed once per spectrum
     GravitySANSHelper grav;
     if (doGravity) {
-      grav = GravitySANSHelper(inputWorkspace->spectrumInfo(), i,
-                               getProperty("ExtraLength"));
+      grav = GravitySANSHelper(spectrumInfo, i, getProperty("ExtraLength"));
     }
 
     for (int j = static_cast<int>(numBins) - 1; j >= static_cast<int>(wavStart);
@@ -235,7 +235,7 @@ void Qxy::exec() {
         double &outputBinY = outputWorkspace->dataY(yIndex)[xIndex];
         double &outputBinE = outputWorkspace->dataE(yIndex)[xIndex];
 
-        if (boost::math::isnan(outputBinY)) {
+        if (std::isnan(outputBinY)) {
           outputBinY = outputBinE = 0;
         }
         // Add the contents of the current bin to the 2D array.
diff --git a/Framework/Algorithms/src/Rebin2D.cpp b/Framework/Algorithms/src/Rebin2D.cpp
index a6cf257796eab15a5240ff2402e0cf00e1ef1310..f1a38bd712b34dd0db9fb87f34706c422c88e7db 100644
--- a/Framework/Algorithms/src/Rebin2D.cpp
+++ b/Framework/Algorithms/src/Rebin2D.cpp
@@ -15,8 +15,6 @@
 #include "MantidKernel/PropertyWithValue.h"
 #include "MantidKernel/VectorHelper.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
-
 namespace Mantid {
 namespace Algorithms {
 
diff --git a/Framework/Algorithms/src/ReflectometryReductionOne.cpp b/Framework/Algorithms/src/ReflectometryReductionOne.cpp
index 983bf40e83e50a26ac3cd7f216ae78bfcaf61551..276a71b2f17551997605d149af7468644e5d5b62 100644
--- a/Framework/Algorithms/src/ReflectometryReductionOne.cpp
+++ b/Framework/Algorithms/src/ReflectometryReductionOne.cpp
@@ -876,4 +876,4 @@ void ReflectometryReductionOne::verifySpectrumMaps(
 }
 
 } // namespace Algorithms
-} // namespace Mantid
\ No newline at end of file
+} // namespace Mantid
diff --git a/Framework/Algorithms/src/ReflectometryReductionOneAuto.cpp b/Framework/Algorithms/src/ReflectometryReductionOneAuto.cpp
index 4619205a5267dd55a3dfe345602aea52f185b0f3..060c169b191450288e25ac7e19f5816d8933b957 100644
--- a/Framework/Algorithms/src/ReflectometryReductionOneAuto.cpp
+++ b/Framework/Algorithms/src/ReflectometryReductionOneAuto.cpp
@@ -568,8 +568,10 @@ void ReflectometryReductionOneAuto::exec() {
     setProperty("MomentumTransferMaximum",
                 boost::lexical_cast<double>(
                     refRedOne->getPropertyValue("MomentumTransferMaximum")));
-    setProperty("ThetaIn", boost::lexical_cast<double>(
-                               refRedOne->getPropertyValue("ThetaIn")));
+    if (theta_in.is_initialized())
+      setProperty("ThetaIn", theta_in.get());
+    else
+      setProperty("ThetaIn", thetaOut1 / 2.);
 
   } else {
     throw std::runtime_error(
diff --git a/Framework/Algorithms/src/RemoveBackground.cpp b/Framework/Algorithms/src/RemoveBackground.cpp
index bb6a613fe91a2e5fb17ea9ed1da91ab878572018..f04c9446100afead32214a6880c293b6d2627954 100644
--- a/Framework/Algorithms/src/RemoveBackground.cpp
+++ b/Framework/Algorithms/src/RemoveBackground.cpp
@@ -1,8 +1,8 @@
 #include "MantidAlgorithms/RemoveBackground.h"
 
 #include "MantidAPI/Axis.h"
-#include "MantidAPI/InstrumentValidator.h"
 #include "MantidAPI/HistogramValidator.h"
+#include "MantidAPI/InstrumentValidator.h"
 #include "MantidAPI/SpectrumInfo.h"
 #include "MantidAPI/WorkspaceFactory.h"
 #include "MantidAPI/WorkspaceUnitValidator.h"
@@ -146,9 +146,9 @@ void RemoveBackground::exec() {
 //-------------------------------------------------------------------------------------------------------------------------------
 /// Constructor
 BackgroundHelper::BackgroundHelper()
-    : m_WSUnit(), m_bgWs(), m_wkWS(), m_pgLog(nullptr), m_inPlace(true),
-      m_singleValueBackground(false), m_NBg(0), m_dtBg(1), m_ErrSq(0),
-      m_Emode(0), m_Efix(0), m_nullifyNegative(false),
+    : m_WSUnit(), m_bgWs(), m_wkWS(), m_spectrumInfo(nullptr), m_pgLog(nullptr),
+      m_inPlace(true), m_singleValueBackground(false), m_NBg(0), m_dtBg(1),
+      m_ErrSq(0), m_Emode(0), m_Efix(0), m_nullifyNegative(false),
       m_previouslyRemovedBkgMode(false) {}
 /// Destructor
 BackgroundHelper::~BackgroundHelper() { this->deleteUnitsConverters(); }
diff --git a/Framework/Algorithms/src/RemoveBins.cpp b/Framework/Algorithms/src/RemoveBins.cpp
index c4c25a833ed0169a4b949008449e6a368325567a..4a5467e32c94249dbeabdcf014df10780c7a1b4b 100644
--- a/Framework/Algorithms/src/RemoveBins.cpp
+++ b/Framework/Algorithms/src/RemoveBins.cpp
@@ -5,8 +5,8 @@
 #include "MantidAPI/SpectrumInfo.h"
 #include "MantidAPI/WorkspaceFactory.h"
 #include "MantidAPI/WorkspaceUnitValidator.h"
-#include "MantidGeometry/Instrument.h"
 #include "MantidGeometry/IDetector.h"
+#include "MantidGeometry/Instrument.h"
 #include "MantidKernel/BoundedValidator.h"
 #include "MantidKernel/CompositeValidator.h"
 #include "MantidKernel/ListValidator.h"
@@ -24,8 +24,9 @@ using namespace API;
 DECLARE_ALGORITHM(RemoveBins)
 
 RemoveBins::RemoveBins()
-    : API::Algorithm(), m_inputWorkspace(), m_startX(DBL_MAX), m_endX(-DBL_MAX),
-      m_rangeUnit(), m_interpolate(false) {}
+    : API::Algorithm(), m_inputWorkspace(), m_spectrumInfo(nullptr),
+      m_startX(DBL_MAX), m_endX(-DBL_MAX), m_rangeUnit(), m_interpolate(false) {
+}
 
 /** Initialisation method. Declares properties to be used in algorithm.
  *
diff --git a/Framework/Algorithms/src/RemoveExpDecay.cpp b/Framework/Algorithms/src/RemoveExpDecay.cpp
index 5fd6d2cacec3b86f6ee781a0c9743f18334e844e..f8b53edef4b398246da4f1d31d4f763fd4408d17 100644
--- a/Framework/Algorithms/src/RemoveExpDecay.cpp
+++ b/Framework/Algorithms/src/RemoveExpDecay.cpp
@@ -10,8 +10,17 @@
 #include "MantidKernel/ArrayProperty.h"
 
 #include <cmath>
+#include <numeric>
 #include <vector>
 
+namespace {
+/// Number of microseconds in one second (10^6)
+constexpr double MICROSECONDS_PER_SECOND{1000000.0};
+/// Muon lifetime in microseconds
+constexpr double MUON_LIFETIME_MICROSECONDS{
+    Mantid::PhysicalConstants::MuonLifetime * MICROSECONDS_PER_SECOND};
+}
+
 namespace Mantid {
 namespace Algorithms {
 
@@ -47,105 +56,64 @@ void MuonRemoveExpDecay::exec() {
   // Get original workspace
   API::MatrixWorkspace_const_sptr inputWS = getProperty("InputWorkspace");
   int numSpectra = static_cast<int>(inputWS->size() / inputWS->blocksize());
-
   // Create output workspace with same dimensions as input
   API::MatrixWorkspace_sptr outputWS = getProperty("OutputWorkspace");
   if (inputWS != outputWS) {
     outputWS = API::WorkspaceFactory::Instance().create(inputWS);
   }
-  // Copy over the X vaules to avoid a race-condition in main the loop
-  PARALLEL_FOR2(inputWS, outputWS)
-  for (int i = 0; i < numSpectra; ++i) {
-    PARALLEL_START_INTERUPT_REGION
-
-    outputWS->dataX(i) = inputWS->readX(i);
-
-    PARALLEL_END_INTERUPT_REGION
+  // Share the X values
+  for (size_t i = 0; i < static_cast<size_t>(numSpectra); ++i) {
+    outputWS->setSharedX(i, inputWS->sharedX(i));
   }
-  PARALLEL_CHECK_INTERUPT_REGION
 
+  // No spectra specified = process all spectra
   if (spectra.empty()) {
+    std::vector<int> allSpectra(numSpectra);
+    std::iota(allSpectra.begin(), allSpectra.end(), 0);
+    spectra.swap(allSpectra);
+  }
 
-    Progress prog(this, 0.0, 1.0, numSpectra);
-    // Do all the spectra
+  Progress prog(this, 0.0, 1.0, numSpectra + spectra.size());
+  if (inputWS != outputWS) {
+
+    // Copy all the Y and E data
     PARALLEL_FOR2(inputWS, outputWS)
-    for (int i = 0; i < numSpectra; ++i) {
+    for (int64_t i = 0; i < int64_t(numSpectra); ++i) {
       PARALLEL_START_INTERUPT_REGION
-
-      // Make sure reference to input X vector is obtained after output one
-      // because in the case
-      // where the input & output workspaces are the same, it might move if the
-      // vectors were shared.
-      const MantidVec &xIn = inputWS->readX(i);
-
-      MantidVec &yOut = outputWS->dataY(i);
-      MantidVec &eOut = outputWS->dataE(i);
-
-      removeDecayData(xIn, inputWS->readY(i), yOut);
-      removeDecayError(xIn, inputWS->readE(i), eOut);
-      double normConst = calNormalisationConst(outputWS, i);
-
-      // do scaling and substract by minus 1.0
-      const size_t nbins = outputWS->dataY(i).size();
-      for (size_t j = 0; j < nbins; j++) {
-        yOut[j] /= normConst;
-        yOut[j] -= 1.0;
-        eOut[j] /= normConst;
-      }
-
+      const auto index = static_cast<size_t>(i);
+      outputWS->setSharedY(index, inputWS->sharedY(index));
+      outputWS->setSharedE(index, inputWS->sharedE(index));
       prog.report();
       PARALLEL_END_INTERUPT_REGION
     }
     PARALLEL_CHECK_INTERUPT_REGION
-  } else {
-    Progress prog(this, 0.0, 1.0, numSpectra + spectra.size());
-    if (inputWS != outputWS) {
+  }
 
-      // Copy all the Y and E data
-      PARALLEL_FOR2(inputWS, outputWS)
-      for (int64_t i = 0; i < int64_t(numSpectra); ++i) {
-        PARALLEL_START_INTERUPT_REGION
-        outputWS->dataY(i) = inputWS->readY(i);
-        outputWS->dataE(i) = inputWS->readE(i);
-        prog.report();
-        PARALLEL_END_INTERUPT_REGION
-      }
-      PARALLEL_CHECK_INTERUPT_REGION
+  // Do the specified spectra only
+  int specLength = static_cast<int>(spectra.size());
+  PARALLEL_FOR2(inputWS, outputWS)
+  for (int i = 0; i < specLength; ++i) {
+    PARALLEL_START_INTERUPT_REGION
+    const auto specNum = static_cast<size_t>(spectra[i]);
+    if (spectra[i] > numSpectra) {
+      g_log.error("Spectra size greater than the number of spectra!");
+      throw std::invalid_argument(
+          "Spectra size greater than the number of spectra!");
     }
 
-    // Do the specified spectra only
-    int specLength = static_cast<int>(spectra.size());
-    PARALLEL_FOR2(inputWS, outputWS)
-    for (int i = 0; i < specLength; ++i) {
-      PARALLEL_START_INTERUPT_REGION
-      if (spectra[i] > numSpectra) {
-        g_log.error("Spectra size greater than the number of spectra!");
-        throw std::invalid_argument(
-            "Spectra size greater than the number of spectra!");
-      }
-      // Get references to the x data
-      const MantidVec &xIn = inputWS->readX(spectra[i]);
-      MantidVec &yOut = outputWS->dataY(spectra[i]);
-      MantidVec &eOut = outputWS->dataE(spectra[i]);
-
-      removeDecayData(xIn, inputWS->readY(spectra[i]), yOut);
-      removeDecayError(xIn, inputWS->readE(spectra[i]), eOut);
-
-      double normConst = calNormalisationConst(outputWS, spectra[i]);
+    // Remove decay from Y and E
+    outputWS->setHistogram(specNum, removeDecay(inputWS->histogram(specNum)));
 
-      // do scaling and substract by minus 1.0
-      const size_t nbins = outputWS->dataY(i).size();
-      for (size_t j = 0; j < nbins; j++) {
-        yOut[j] /= normConst;
-        yOut[j] -= 1.0;
-        eOut[j] /= normConst;
-      }
+    // do scaling and subtract 1
+    const double normConst = calNormalisationConst(outputWS, spectra[i]);
+    outputWS->mutableY(specNum) /= normConst;
+    outputWS->mutableY(specNum) -= 1.0;
+    outputWS->mutableE(specNum) /= normConst;
 
-      prog.report();
-      PARALLEL_END_INTERUPT_REGION
-    }
-    PARALLEL_CHECK_INTERUPT_REGION
+    prog.report();
+    PARALLEL_END_INTERUPT_REGION
   }
+  PARALLEL_CHECK_INTERUPT_REGION
 
   // Update Y axis units
   outputWS->setYUnit("Asymmetry");
@@ -153,51 +121,37 @@ void MuonRemoveExpDecay::exec() {
   setProperty("OutputWorkspace", outputWS);
 }
 
-/** This method corrects the errors for one spectra.
- *	 The muon lifetime is in microseconds not seconds, i.e. 2.1969811 rather
- *   than 0.0000021969811.
- *   This is because the data is in microseconds.
- *   @param inX ::  The X vector
- *   @param inY ::  The input error vector
- *   @param outY :: The output error vector
+/**
+ * Corrects the data and errors for one spectrum.
+ * The muon lifetime is in microseconds, not seconds, because the data is in
+ * microseconds.
+ * @param histogram :: [input] Input histogram
+ * @returns :: Histogram with exponential removed from Y and E
  */
-void MuonRemoveExpDecay::removeDecayError(const MantidVec &inX,
-                                          const MantidVec &inY,
-                                          MantidVec &outY) {
-  // Do the removal
-  for (size_t i = 0; i < inY.size(); ++i) {
-    if (inY[i] != 0.0)
-      outY[i] =
-          inY[i] *
-          exp(inX[i] / (Mantid::PhysicalConstants::MuonLifetime * 1000000.0));
-    else
-      outY[i] =
-          exp(inX[i] / (Mantid::PhysicalConstants::MuonLifetime * 1000000.0));
-  }
-}
+HistogramData::Histogram MuonRemoveExpDecay::removeDecay(
+    const HistogramData::Histogram &histogram) const {
+  HistogramData::Histogram result(histogram);
+
+  auto &yData = result.mutableY();
+  auto &eData = result.mutableE();
+  for (size_t i = 0; i < yData.size(); ++i) {
+    const double factor = exp(result.x()[i] / MUON_LIFETIME_MICROSECONDS);
+    // Correct the Y data
+    if (yData[i] != 0.0) {
+      yData[i] *= factor;
+    } else {
+      yData[i] = 0.1 * factor;
+    }
 
-/** This method corrects the data for one spectra.
- *	 The muon lifetime is in microseconds not seconds, i.e. 2.1969811 rather
- *   than 0.0000021969811.
- *   This is because the data is in microseconds.
- *   @param inX ::  The X vector
- *   @param inY ::  The input data vector
- *   @param outY :: The output data vector
- */
-void MuonRemoveExpDecay::removeDecayData(const MantidVec &inX,
-                                         const MantidVec &inY,
-                                         MantidVec &outY) {
-  // Do the removal
-  for (size_t i = 0; i < inY.size(); ++i) {
-    if (inY[i] != 0.0)
-      outY[i] =
-          inY[i] *
-          exp(inX[i] / (Mantid::PhysicalConstants::MuonLifetime * 1000000.0));
-    else
-      outY[i] =
-          0.1 *
-          exp(inX[i] / (Mantid::PhysicalConstants::MuonLifetime * 1000000.0));
+    // Correct the E data
+    if (eData[i] != 0.0) {
+      eData[i] *= factor;
+    } else {
+      eData[i] = factor;
+    }
   }
+
+  return result;
 }
 
 /**
@@ -215,7 +169,7 @@ double MuonRemoveExpDecay::calNormalisationConst(API::MatrixWorkspace_sptr ws,
   fit = createChildAlgorithm("Fit", -1, -1, true);
 
   std::stringstream ss;
-  ss << "name=LinearBackground,A0=" << ws->readY(wsIndex)[0] << ",A1=" << 0.0
+  ss << "name=LinearBackground,A0=" << ws->y(wsIndex)[0] << ",A1=" << 0.0
      << ",ties=(A1=0.0)";
   std::string function = ss.str();
 
diff --git a/Framework/Algorithms/src/RemoveLowResTOF.cpp b/Framework/Algorithms/src/RemoveLowResTOF.cpp
index ede2da959788d55cccf01d78824f59a37eb60526..711fea813694721da46c6037d22a2ba004d3ee72 100644
--- a/Framework/Algorithms/src/RemoveLowResTOF.cpp
+++ b/Framework/Algorithms/src/RemoveLowResTOF.cpp
@@ -142,12 +142,12 @@ void RemoveLowResTOF::exec() {
   for (size_t workspaceIndex = 0; workspaceIndex < m_numberOfSpectra;
        workspaceIndex++) {
     // calculate where to zero out to
-    double tofMin = this->calcTofMin(workspaceIndex);
-    const MantidVec &X = m_inputWS->readX(0);
+    const double tofMin = this->calcTofMin(workspaceIndex);
+    const auto &X = m_inputWS->x(0);
     auto last = std::lower_bound(X.cbegin(), X.cend(), tofMin);
     if (last == X.end())
       --last;
-    size_t endBin = last - X.begin();
+    const size_t endBin = last - X.begin();
 
     // flatten out the data
     for (size_t i = 0; i < endBin; i++) {
diff --git a/Framework/Algorithms/src/RemoveMaskedSpectra.cpp b/Framework/Algorithms/src/RemoveMaskedSpectra.cpp
index a6cfda13d47e8df55c35c1f29a7436a87b9f9e87..3d8e8ec711031d3abfa864f1d42c7618ca4cd905 100644
--- a/Framework/Algorithms/src/RemoveMaskedSpectra.cpp
+++ b/Framework/Algorithms/src/RemoveMaskedSpectra.cpp
@@ -91,7 +91,7 @@ void RemoveMaskedSpectra::makeIndexList(
   auto mask = dynamic_cast<const DataObjects::MaskWorkspace *>(maskedWorkspace);
   if (mask) {
     for (size_t i = 0; i < mask->getNumberHistograms(); ++i) {
-      if (mask->readY(i)[0] == 0.0) {
+      if (mask->y(i)[0] == 0.0) {
         indices.push_back(static_cast<size_t>(i));
       }
     }
diff --git a/Framework/Algorithms/src/RemovePromptPulse.cpp b/Framework/Algorithms/src/RemovePromptPulse.cpp
index ad45cc57c85b850f81d9b6688f51d60a5ba48fdb..3649d14769c20378748f0e21ce22e8dd8862984d 100644
--- a/Framework/Algorithms/src/RemovePromptPulse.cpp
+++ b/Framework/Algorithms/src/RemovePromptPulse.cpp
@@ -50,6 +50,9 @@ void RemovePromptPulse::init() {
 namespace { // anonymous namespace begin
 double getMedian(const API::Run &run, const std::string &name) {
 
+  if (!run.hasProperty(name)) {
+    return Mantid::EMPTY_DBL();
+  }
   Kernel::TimeSeriesProperty<double> *log =
       dynamic_cast<Kernel::TimeSeriesProperty<double> *>(run.getLogData(name));
   if (!log)
diff --git a/Framework/Algorithms/src/ReplaceSpecialValues.cpp b/Framework/Algorithms/src/ReplaceSpecialValues.cpp
index ebce095ad184309d204a0658f60bcf29f9155f26..bd36b77a27722277e67f7c6e138b4c331f844a54 100644
--- a/Framework/Algorithms/src/ReplaceSpecialValues.cpp
+++ b/Framework/Algorithms/src/ReplaceSpecialValues.cpp
@@ -3,7 +3,6 @@
 //----------------------------------------------------------------------
 #include "MantidAlgorithms/ReplaceSpecialValues.h"
 #include "MantidKernel/Exception.h"
-#include "boost/math/special_functions/fpclassify.hpp"
 #include <limits>
 #include <cmath>
 
@@ -84,11 +83,11 @@ void ReplaceSpecialValues::performUnaryOperation(const double XIn,
 }
 
 bool ReplaceSpecialValues::checkIfNan(const double &value) const {
-  return (boost::math::isnan(value));
+  return (std::isnan(value));
 }
 
 bool ReplaceSpecialValues::checkIfInfinite(const double &value) const {
-  return (std::abs(value) == std::numeric_limits<double>::infinity());
+  return (std::isinf(value));
 }
 
 bool ReplaceSpecialValues::checkIfBig(const double &value) const {
diff --git a/Framework/Algorithms/src/ResampleX.cpp b/Framework/Algorithms/src/ResampleX.cpp
index ee4c36e24e21acf42b3cc10c51862f94dff13df3..b40eaafee21e290e38ce66b0f60c7772aa4477b6 100644
--- a/Framework/Algorithms/src/ResampleX.cpp
+++ b/Framework/Algorithms/src/ResampleX.cpp
@@ -6,8 +6,6 @@
 #include "MantidKernel/BoundedValidator.h"
 #include "MantidKernel/VectorHelper.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
-
 #include <sstream>
 
 namespace Mantid {
@@ -133,16 +131,16 @@ string determineXMinMax(MatrixWorkspace_sptr inputWS, vector<double> &xmins,
   for (size_t i = 0; i < numSpectra; ++i) {
     // determine ranges if necessary
     if (updateXMins || updateXMaxs) {
-      const MantidVec &xvalues = inputWS->getSpectrum(i).dataX();
+      const auto &xvalues = inputWS->x(i);
       if (updateXMins) {
-        if (boost::math::isnan(xvalues.front())) {
+        if (std::isnan(xvalues.front())) {
           xmins.push_back(xmin_wksp);
         } else {
           xmins.push_back(xvalues.front());
         }
       }
       if (updateXMaxs) {
-        if (boost::math::isnan(xvalues.back())) {
+        if (std::isnan(xvalues.back())) {
           xmaxs.push_back(xmax_wksp);
         } else {
           xmaxs.push_back(xvalues.back());
@@ -396,8 +394,8 @@ void ResampleX::exec() {
         el.generateHistogram(xValues, y_data, e_data);
 
         // Copy the data over.
-        outputWS->dataY(wkspIndex).assign(y_data.begin(), y_data.end());
-        outputWS->dataE(wkspIndex).assign(e_data.begin(), e_data.end());
+        outputWS->mutableY(wkspIndex) = std::move(y_data);
+        outputWS->mutableE(wkspIndex) = std::move(e_data);
 
         // Report progress
         prog.report(name());
@@ -412,8 +410,9 @@ void ResampleX::exec() {
       }
 
       // Copy the units over too.
-      for (int i = 0; i < outputWS->axes(); ++i)
+      for (int i = 0; i < outputWS->axes(); ++i) {
         outputWS->getAxis(i)->unit() = inputWS->getAxis(i)->unit();
+      }
       outputWS->setYUnit(inputEventWS->YUnit());
       outputWS->setYUnitLabel(inputEventWS->YUnitLabel());
     }
@@ -450,11 +449,13 @@ void ResampleX::exec() {
     for (int wkspIndex = 0; wkspIndex < numSpectra; ++wkspIndex) {
       PARALLEL_START_INTERUPT_REGION
       // get const references to input Workspace arrays (no copying)
+      // TODO: replace with HistogramX/Y/E when VectorHelper::rebin is updated
       const MantidVec &XValues = inputWS->readX(wkspIndex);
       const MantidVec &YValues = inputWS->readY(wkspIndex);
       const MantidVec &YErrors = inputWS->readE(wkspIndex);
 
       // get references to output workspace data (no copying)
+      // TODO: replace with HistogramX/Y/E when VectorHelper::rebin is updated
       MantidVec &YValues_new = outputWS->dataY(wkspIndex);
       MantidVec &YErrors_new = outputWS->dataE(wkspIndex);
 
@@ -464,10 +465,6 @@ void ResampleX::exec() {
                                             xmaxs[wkspIndex]);
       g_log.debug() << "delta[wkspindex=" << wkspIndex << "] = " << delta
                     << "\n";
-      //        outputWS->setX(wkspIndex, xValues);
-      //        const int ntcnew =
-      //        VectorHelper::createAxisFromRebinParams(rb_params,
-      //        XValues_new.access());
 
       // output data arrays are implicitly filled by function
       try {
diff --git a/Framework/Algorithms/src/ResetNegatives.cpp b/Framework/Algorithms/src/ResetNegatives.cpp
index bd91749e433c293c01feca547a6b4240774b6672..c1e0ce16578e9f3c04cd3a87c725c51bbb25f2ae 100644
--- a/Framework/Algorithms/src/ResetNegatives.cpp
+++ b/Framework/Algorithms/src/ResetNegatives.cpp
@@ -37,7 +37,7 @@ void ResetNegatives::init() {
                   "An output workspace.");
   declareProperty(
       "AddMinimum", true,
-      "Add the minumum value of the spectrum to bring it up to zero.");
+      "Add the minimum value of the spectrum to bring it up to zero.");
   declareProperty("ResetValue", 0.,
                   "Reset negative values to this number (default=0)");
   setPropertySettings("ResetValue", make_unique<EnabledWhenProperty>(
@@ -60,7 +60,7 @@ void ResetNegatives::exec() {
   int64_t nHist = static_cast<int64_t>(minWS->getNumberHistograms());
   bool hasNegative = false;
   for (int64_t i = 0; i < nHist; i++) {
-    if (minWS->readY(i)[0] < 0) {
+    if (minWS->y(i)[0] < 0.0) {
       hasNegative = true;
       break;
     }
@@ -96,9 +96,8 @@ void ResetNegatives::exec() {
   PARALLEL_FOR2(inputWS, outputWS)
   for (int64_t i = 0; i < nHist; i++) {
     PARALLEL_START_INTERUPT_REGION
-    outputWS->dataY(i) = inputWS->readY(i);
-    outputWS->dataE(i) = inputWS->readE(i);
-    outputWS->setX(i, inputWS->refX(i)); // share the pointer more
+    const auto index = static_cast<size_t>(i);
+    outputWS->setHistogram(index, inputWS->histogram(index));
     prog.report();
     PARALLEL_END_INTERUPT_REGION
   }
@@ -142,10 +141,10 @@ void ResetNegatives::pushMinimum(MatrixWorkspace_const_sptr minWS,
   PARALLEL_FOR2(wksp, minWS)
   for (int64_t i = 0; i < nHist; i++) {
     PARALLEL_START_INTERUPT_REGION
-    double minValue = minWS->readY(i)[0];
+    double minValue = minWS->y(i)[0];
     if (minValue <= 0) {
       minValue *= -1.;
-      MantidVec &y = wksp->dataY(i);
+      auto &y = wksp->mutableY(i);
       for (double &value : y) {
         value = fixZero(value + minValue);
       }
@@ -174,10 +173,10 @@ void ResetNegatives::changeNegatives(MatrixWorkspace_const_sptr minWS,
   PARALLEL_FOR2(minWS, wksp)
   for (int64_t i = 0; i < nHist; i++) {
     PARALLEL_START_INTERUPT_REGION
-    if (minWS->readY(i)[0] <=
+    if (minWS->y(i)[0] <=
         0.) // quick check to see if there is a reason to bother
     {
-      MantidVec &y = wksp->dataY(i);
+      auto &y = wksp->mutableY(i);
       for (double &value : y) {
         if (value < 0.) {
           value = spectrumNegativeValues;
diff --git a/Framework/Algorithms/src/Stitch1D.cpp b/Framework/Algorithms/src/Stitch1D.cpp
index 714d2577d93b4c2e58aa3949a40e8f09cb387999..7448ce8de0edec4cdb30288c546d255c01eff463 100644
--- a/Framework/Algorithms/src/Stitch1D.cpp
+++ b/Framework/Algorithms/src/Stitch1D.cpp
@@ -33,12 +33,6 @@ MinMaxTuple calculateXIntersection(MatrixWorkspace_sptr lhsWS,
 }
 
 bool isNonzero(double i) { return (0 != i); }
-
-bool isNan(const double &value) { return boost::math::isnan(value); }
-
-bool isInf(const double &value) {
-  return std::abs(value) == std::numeric_limits<double>::infinity();
-}
 }
 
 namespace Mantid {
@@ -320,18 +314,18 @@ MatrixWorkspace_sptr Stitch1D::rebin(MatrixWorkspace_sptr &input,
     for (size_t j = 0; j < sourceY.size(); ++j) {
       const double &value = sourceY[j];
       const double &eValue = sourceE[j];
-      if (isNan(value)) {
+      if (std::isnan(value)) {
         nanYIndexes.push_back(j);
         sourceY[j] = 0;
-      } else if (isInf(value)) {
+      } else if (std::isinf(value)) {
         infYIndexes.push_back(j);
         sourceY[j] = 0;
       }
 
-      if (isNan(eValue)) {
+      if (std::isnan(eValue)) {
         nanEIndexes.push_back(j);
         sourceE[j] = 0;
-      } else if (isInf(eValue)) {
+      } else if (std::isinf(eValue)) {
         infEIndexes.push_back(j);
         sourceE[j] = 0;
       }
@@ -581,8 +575,7 @@ void Stitch1D::exec() {
     }
     scaleFactor = ratio->y(0).front();
     errorScaleFactor = ratio->e(0).front();
-    if (scaleFactor < 1e-2 || scaleFactor > 1e2 ||
-        boost::math::isnan(scaleFactor)) {
+    if (scaleFactor < 1e-2 || scaleFactor > 1e2 ||std::isnan(scaleFactor)) {
       std::stringstream messageBuffer;
       messageBuffer << "Stitch1D calculated scale factor is: " << scaleFactor
                     << ". Check that in both input workspaces the integrated "
diff --git a/Framework/Algorithms/src/TOFSANSResolution.cpp b/Framework/Algorithms/src/TOFSANSResolution.cpp
index dc8684db22668cab6c0c0f839837f38e09e5a0ec..6ec683c5a0cb5bd4eab2b54f9c968c17b3faaa7d 100644
--- a/Framework/Algorithms/src/TOFSANSResolution.cpp
+++ b/Framework/Algorithms/src/TOFSANSResolution.cpp
@@ -12,8 +12,6 @@
 #include "MantidKernel/RebinParamsValidator.h"
 #include "MantidKernel/VectorHelper.h"
 
-#include "boost/math/special_functions/fpclassify.hpp"
-
 namespace Mantid {
 namespace Algorithms {
 
@@ -124,9 +122,7 @@ void TOFSANSResolution::exec() {
   MantidVec &TOFY = tofWS->dataY(0);
 
   // Initialize Dq
-  MantidVec &DxOut = iqWS->dataDx(0);
-  for (int i = 0; i < xLength; i++)
-    DxOut[i] = 0.0;
+  HistogramData::HistogramDx DxOut(xLength - 1, 0.0);
 
   const int numberOfSpectra =
       static_cast<int>(reducedWS->getNumberHistograms());
@@ -203,7 +199,7 @@ void TOFSANSResolution::exec() {
       // By using only events with a positive weight, we use only the data
       // distribution and leave out the background events.
       // Note: we are looping over bins, therefore the xLength-1.
-      if (iq >= 0 && iq < xLength - 1 && !boost::math::isnan(dq_over_q) &&
+      if (iq >= 0 && iq < xLength - 1 && !std::isnan(dq_over_q) &&
           dq_over_q > 0 && YIn[j] > 0) {
         _dx[iq] += q * dq_over_q * YIn[j];
         _norm[iq] += YIn[j];
@@ -236,6 +232,7 @@ void TOFSANSResolution::exec() {
     TOFY[i] /= XNorm[i];
     ThetaY[i] /= XNorm[i];
   }
+  iqWS->setPointStandardDeviations(0, std::move(DxOut));
 }
 } // namespace Algorithms
 } // namespace Mantid
diff --git a/Framework/Algorithms/src/TOFSANSResolutionByPixel.cpp b/Framework/Algorithms/src/TOFSANSResolutionByPixel.cpp
index 628312a15949b9f8ecaa2cf4c14740cf39952551..97dd63711186958f0afdf75a81973a9c9b67b69d 100644
--- a/Framework/Algorithms/src/TOFSANSResolutionByPixel.cpp
+++ b/Framework/Algorithms/src/TOFSANSResolutionByPixel.cpp
@@ -13,7 +13,6 @@
 #include "MantidKernel/UnitFactory.h"
 #include "MantidKernel/make_unique.h"
 
-#include "boost/math/special_functions/fpclassify.hpp"
 #include "boost/lexical_cast.hpp"
 
 namespace Mantid {
diff --git a/Framework/Algorithms/src/WeightedMeanOfWorkspace.cpp b/Framework/Algorithms/src/WeightedMeanOfWorkspace.cpp
index ce733e1af692588e38e75eca5aa3b83797fa9f5a..11fbcab1b4a8074a80d63e970dd771f109bb6a40 100644
--- a/Framework/Algorithms/src/WeightedMeanOfWorkspace.cpp
+++ b/Framework/Algorithms/src/WeightedMeanOfWorkspace.cpp
@@ -4,8 +4,6 @@
 #include "MantidDataObjects/EventWorkspace.h"
 #include "MantidGeometry/Instrument.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
-
 namespace Mantid {
 using namespace API;
 using namespace DataObjects;
@@ -67,8 +65,7 @@ void WeightedMeanOfWorkspace::exec() {
     MantidVec e = inputWS->dataE(i);
     double weight = 0.0;
     for (std::size_t j = 0; j < y.size(); ++j) {
-      if (!boost::math::isnan(y[j]) && !boost::math::isinf(y[j]) &&
-          !boost::math::isnan(e[j]) && !boost::math::isinf(e[j])) {
+      if (std::isfinite(y[j]) && std::isfinite(e[j])) {
         weight = 1.0 / (e[j] * e[j]);
         averageValue += (y[j] * weight);
         weightSum += weight;
diff --git a/Framework/Algorithms/src/WorkflowAlgorithmRunner.cpp b/Framework/Algorithms/src/WorkflowAlgorithmRunner.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c41b7b2f6cf0db115c3073f9d21b2d8dc0cbc12a
--- /dev/null
+++ b/Framework/Algorithms/src/WorkflowAlgorithmRunner.cpp
@@ -0,0 +1,288 @@
+#include "MantidAlgorithms/WorkflowAlgorithmRunner.h"
+
+#include "MantidAPI/ITableWorkspace.h"
+#include "MantidKernel/MandatoryValidator.h"
+
+#include <unordered_map>
+
+using namespace Mantid::API;
+using namespace Mantid::Kernel;
+
+namespace Mantid {
+namespace Algorithms {
+
+namespace PropertyNames {
+const static std::string ALGORITHM("Algorithm");
+const static std::string IO_MAP("InputOutputMap");
+const static std::string SETUP_TABLE("SetupTable");
+}
+
+/** Checks if a string is a hard coded workspace name.
+ * @param s string to be checked
+ * @return return true if `s` is surrounded by '"' or '''
+ */
+bool isHardCodedWorkspaceName(const std::string &s) {
+  if (s.size() < 3) {
+    return false;
+  }
+  const auto f = s.front();
+  const auto b = s.back();
+  return (f == '\'' && b == '\'') || (f == '"' && b == '"');
+}
+
+/** Removes first and last character of a string.
+ * @param s string to be tidied
+ * @return tidied string
+ * @throw std::runtime_error if `s` is too short
+ */
+std::string tidyWorkspaceName(const std::string &s) {
+  if (s.length() < 3) {
+    throw std::runtime_error("Workspace name is too short.");
+  }
+  return std::string(s.cbegin() + 1, s.cend() - 1);
+}
+
+/** Transforms a setup table to an empty property table.
+ * Clear cells referred to in `ioMapping`, if they do not contain
+ * hard coded values. In the case of hard coded values, removes
+ * '"' and ''' characters.
+ * @tparam MAP a type with `std::map` like iterators
+ * @param[in,out] table the table to be cleaned
+ * @param[in] ioMapping input/output property lookup table
+ * @throw std::runtime_error in case of errorneous entries in `table`
+ */
+template <typename MAP>
+void cleanPropertyTable(ITableWorkspace_sptr table, const MAP &ioMapping) {
+  // Some output columns may be processed several times, but this should
+  // not be a serious performance hit.
+  for (const auto &ioPair : ioMapping) {
+    Column_sptr inputColumn = table->getColumn(ioPair.first);
+    Column_sptr outputColumn = table->getColumn(ioPair.second);
+    for (size_t i = 0; i < table->rowCount(); ++i) {
+      inputColumn->cell<std::string>(i).clear();
+      std::string &outputValue = outputColumn->cell<std::string>(i);
+      if (!isHardCodedWorkspaceName(outputValue)) {
+        outputValue.clear();
+      }
+    }
+  }
+  // Second pass: tidy hard-coded outputs.
+  // This could not be done in first pass as multiple inputs may depend
+  // on single output and then the hard-coded values would be cleared.
+  for (const auto &ioPair : ioMapping) {
+    Column_sptr outputColumn = table->getColumn(ioPair.second);
+    for (size_t i = 0; i < table->rowCount(); ++i) {
+      std::string &outputValue = outputColumn->cell<std::string>(i);
+      if (isHardCodedWorkspaceName(outputValue)) {
+        outputValue = tidyWorkspaceName(outputValue);
+      }
+    }
+  }
+}
+
+// Register the algorithm into the algorithm factory.
+DECLARE_ALGORITHM(WorkflowAlgorithmRunner)
+
+void WorkflowAlgorithmRunner::init() {
+  declareProperty(PropertyNames::ALGORITHM, "",
+                  boost::make_shared<MandatoryValidator<std::string>>(),
+                  "Name of the algorithm to run");
+  declareProperty(make_unique<WorkspaceProperty<ITableWorkspace>>(
+                      PropertyNames::SETUP_TABLE.c_str(), "", Direction::Input),
+                  "Table workspace containing the setup of the runs.");
+  declareProperty(make_unique<WorkspaceProperty<ITableWorkspace>>(
+                      PropertyNames::IO_MAP.c_str(), "", Direction::Input),
+                  "Table workspace mapping algorithm outputs to inputs.");
+}
+
+void WorkflowAlgorithmRunner::exec() {
+  ITableWorkspace_sptr setupTable = getProperty(PropertyNames::SETUP_TABLE);
+  // propertyTable will contain the final properties of the managed algorithms.
+  ITableWorkspace_sptr propertyTable = setupTable->clone();
+  ITableWorkspace_sptr ioMappingTable = getProperty(PropertyNames::IO_MAP);
+  if (ioMappingTable->rowCount() != 1) {
+    throw std::runtime_error("Row count in " + PropertyNames::IO_MAP + " is " +
+                             std::to_string(ioMappingTable->rowCount()) +
+                             ", not 1.");
+  }
+  // Transform ioMappingTable to a real lookup table (ioMap) and check for
+  // consistency.
+  std::unordered_map<std::string, std::string> ioMap;
+  const auto inputPropertyNames = ioMappingTable->getColumnNames();
+  for (size_t col = 0; col < ioMappingTable->columnCount(); ++col) {
+    const auto &inputPropertyName = ioMappingTable->getColumn(col)->name();
+    const auto &outputPropertyName = ioMappingTable->String(0, col);
+    if (!outputPropertyName.empty()) {
+      if (std::find(inputPropertyNames.cbegin(), inputPropertyNames.cend(),
+                    outputPropertyName) != inputPropertyNames.cend()) {
+        throw std::runtime_error("Property " + outputPropertyName +
+                                 " linked to " + inputPropertyName +
+                                 " is also an input property.");
+      }
+      if (ioMap.find(inputPropertyName) != ioMap.end()) {
+        throw std::runtime_error("Cannot assign more than one output to " +
+                                 inputPropertyName + '.');
+      }
+      ioMap[inputPropertyName] = outputPropertyName;
+    }
+  }
+  // Declare order of execution and fill in propertyTable.
+  cleanPropertyTable(propertyTable, ioMap);
+  std::deque<size_t> queue;
+  for (size_t i = 0; i < setupTable->rowCount(); ++i) {
+    configureRow(setupTable, propertyTable, i, queue, ioMap);
+  }
+
+  // Execute the algorithm in the order specified by queue.
+  const std::string algorithmName = getProperty(PropertyNames::ALGORITHM);
+  auto &algorithmFactory = AlgorithmFactory::Instance();
+  while (!queue.empty()) {
+    const auto row = queue.front();
+    auto algorithm = algorithmFactory.create(
+        algorithmName, algorithmFactory.highestVersion(algorithmName));
+    algorithm->initialize();
+    if (!algorithm->isInitialized()) {
+      throw std::runtime_error("Workflow algorithm failed to initialise.");
+    }
+    // First column in taskTable is for id.
+    for (size_t col = 1; col < propertyTable->columnCount(); ++col) {
+      const auto column = propertyTable->getColumn(col);
+      const auto &propertyName = column->name();
+      const auto &valueType = column->get_type_info();
+      try {
+        if (valueType == typeid(std::string)) {
+          const auto &value = propertyTable->cell<std::string>(row, col);
+          algorithm->setProperty(propertyName, value);
+        } else if (valueType == typeid(int)) {
+          const auto &value = propertyTable->cell<int>(row, col);
+          algorithm->setProperty(propertyName, static_cast<long>(value));
+        } else if (valueType == typeid(size_t)) {
+          const auto &value = propertyTable->cell<size_t>(row, col);
+          algorithm->setProperty(propertyName, value);
+        } else if (valueType == typeid(float) || valueType == typeid(double)) {
+          const auto &value = propertyTable->cell<double>(row, col);
+          algorithm->setProperty(propertyName, value);
+        } else if (valueType == typeid(bool)) {
+          const auto &value = propertyTable->cell<bool>(row, col);
+          algorithm->setProperty(propertyName, value);
+        } else if (valueType == typeid(Kernel::V3D)) {
+          const auto &value = propertyTable->cell<V3D>(row, col);
+          algorithm->setProperty(propertyName, value);
+        } else {
+          throw std::runtime_error("Unimplemented column type in " +
+                                   PropertyNames::SETUP_TABLE + ": " +
+                                   valueType.name() + '.');
+        }
+      } catch (std::invalid_argument &e) {
+        throw std::runtime_error("While setting properties for algorithm " +
+                                 algorithmName + ": " + e.what());
+      }
+    }
+    algorithm->execute();
+    if (!algorithm->isExecuted()) {
+      throw std::runtime_error("Workflow algorithm failed to execute.");
+    }
+    queue.pop_front();
+  }
+}
+
+/**
+ * Appends `currentRow` and the rows it depends on to `queue` if needed.
+ * Additionally, configures `propertyTable` appropriately.
+ * @tparam QUEUE a type which supports iterators and has `emplace_back()`
+ * @tparam MAP a type with `std::map` like iterators
+ * @param[in] setupTable a table defining the property dependencies
+ * @param[in,out] propertyTable a table containing the final property values
+ * @param[in] currentRow the row in `setupTable` to configure
+ * @param[in,out] queue a queue of row indexes in order of execution
+ * @param[in] ioMap input/output property lookup table
+ * @param[in,out] rowsBeingQueued a set of rows currently being configured
+ * @throw std::runtime_error in several errorneous cases
+ */
+template <typename QUEUE, typename MAP>
+void WorkflowAlgorithmRunner::configureRow(
+    ITableWorkspace_sptr setupTable, ITableWorkspace_sptr propertyTable,
+    const size_t currentRow, QUEUE &queue, const MAP &ioMap,
+    std::shared_ptr<std::unordered_set<size_t>> rowsBeingQueued) const {
+  // This method works recursively with regards to dependency resolution.
+
+  if (currentRow > setupTable->rowCount()) {
+    throw std::runtime_error("Current row " + std::to_string(currentRow) +
+                             " out of task table bounds " +
+                             std::to_string(setupTable->rowCount()) + '.');
+  }
+
+  // 1. currentRow is already in queue? Nothing to be done, then.
+  // Here we blindly assume that propertyTable has been configured as well.
+  if (std::find(queue.cbegin(), queue.cend(), currentRow) != queue.cend()) {
+    return;
+  }
+
+  // 2. Check if currentRow is being processed already to prevent circular
+  // dependencies. If not, mark the row as such.
+  if (!rowsBeingQueued) {
+    rowsBeingQueued.reset(new std::unordered_set<size_t>());
+  }
+  const auto status = rowsBeingQueued->emplace(currentRow);
+  if (!status.second) {
+    throw std::runtime_error("Circular dependencies!");
+  }
+
+  // 3a. Find the rows on which currentRow depends on. For each of them,
+  // call this method recursively to make sure they are in the queue
+  // before currentRow.
+  // 3b. Configure propertyTable for currentRow by adding the correct
+  // workspace names to input/output columns.
+  for (const auto &ioPair : ioMap) {
+    const auto &outputId =
+        setupTable->getRef<std::string>(ioPair.first, currentRow);
+    if (!outputId.empty()) {
+      if (isHardCodedWorkspaceName(outputId)) {
+        // Handle hard-coded input.
+        propertyTable->getRef<std::string>(ioPair.first, currentRow) =
+            tidyWorkspaceName(outputId);
+      } else {
+        // If input is not hard-coded, we have a dependency.
+        // Find the source row.
+        size_t outputRow = -1;
+        try {
+          setupTable->find(outputId, outputRow, 0);
+        } catch (std::out_of_range &) {
+          throw std::runtime_error(
+              "Identifier \"" + outputId + "\" not found in " +
+              PropertyNames::SETUP_TABLE + " (referenced in row " +
+              std::to_string(currentRow) + ", column \"" + ioPair.first +
+              "\").");
+        }
+        // Configure the source row and recursively the rows it depends on.
+        configureRow(setupTable, propertyTable, outputRow, queue, ioMap,
+                     rowsBeingQueued);
+        const auto outputCol = ioPair.second;
+        auto outputWorkspaceName =
+            setupTable->getRef<std::string>(outputCol, outputRow);
+        if (outputWorkspaceName.empty()) {
+          throw std::runtime_error("No source workspace name found for " +
+                                   ioPair.first + '.');
+        }
+        // Handle forced output.
+        if (isHardCodedWorkspaceName(outputWorkspaceName)) {
+          outputWorkspaceName = tidyWorkspaceName(outputWorkspaceName);
+        }
+        propertyTable->getRef<std::string>(ioPair.first, currentRow) =
+            outputWorkspaceName;
+        propertyTable->getRef<std::string>(outputCol, outputRow) =
+            outputWorkspaceName;
+      }
+    }
+  }
+
+  // 4. Dependencies have been taken care of -> add currentRow to
+  // queue.
+  queue.emplace_back(currentRow);
+
+  // 5. Finally, unmark currentRow as being processed.
+  rowsBeingQueued->erase(currentRow);
+}
+
+} // namespace Algorithms
+} // namespace Mantid
diff --git a/Framework/Algorithms/test/AverageLogDataTest.h b/Framework/Algorithms/test/AverageLogDataTest.h
index 9586a085fdad110c69b9f735a0875e435da29a32..0323e175ef1220af6a8ff1acab91942ed18b461c 100644
--- a/Framework/Algorithms/test/AverageLogDataTest.h
+++ b/Framework/Algorithms/test/AverageLogDataTest.h
@@ -6,7 +6,6 @@
 #include "MantidAlgorithms/AverageLogData.h"
 #include "MantidKernel/TimeSeriesProperty.h"
 #include "MantidTestHelpers/WorkspaceCreationHelper.h"
-#include <boost/math/special_functions/fpclassify.hpp>
 
 using Mantid::Algorithms::AverageLogData;
 
@@ -102,8 +101,8 @@ public:
     // check average
     const double av = alg.getProperty("Average"),
                  err = alg.getProperty("Error");
-    TS_ASSERT(boost::math::isnan(av));
-    TS_ASSERT(boost::math::isnan(err));
+    TS_ASSERT(std::isnan(av));
+    TS_ASSERT(std::isnan(err));
 
     // Remove workspace from the data service.*/
     Mantid::API::AnalysisDataService::Instance().remove(inputWS);
diff --git a/Framework/Algorithms/test/CalculateCountRateTest.h b/Framework/Algorithms/test/CalculateCountRateTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..6468872581dcea60356f5a820cab5839930946dc
--- /dev/null
+++ b/Framework/Algorithms/test/CalculateCountRateTest.h
@@ -0,0 +1,486 @@
+#ifndef MANTID_ALGORITHMS_CALC_COUNTRATE_TEST_H_
+#define MANTID_ALGORITHMS_CALC_COUNTRATE_TEST_H_
+
+#include <cxxtest/TestSuite.h>
+
+#include "MantidKernel/TimeSeriesProperty.h"
+
+#include "MantidAlgorithms/CalculateCountRate.h"
+#include "MantidAPI/AlgorithmManager.h"
+#include "MantidAPI/Axis.h"
+#include "MantidAPI/NumericAxis.h"
+#include "MantidHistogramData/HistogramX.h"
+
+#include "MantidTestHelpers/WorkspaceCreationHelper.h"
+#include <numeric>
+
+using namespace Mantid;
+using Mantid::DataObjects::Workspace2D_sptr;
+using namespace Mantid::API;
+using namespace Mantid::Algorithms;
+
+class CalculateCountRateTester : public CalculateCountRate {
+public:
+  CalculateCountRateTester() { this->setChild(true); }
+  void setSearchRanges(DataObjects::EventWorkspace_sptr &InputWorkspace) {
+    CalculateCountRate::setSourceWSandXRanges(InputWorkspace);
+  }
+  std::tuple<double, double, bool> getXRanges() const {
+    return std::tuple<double, double, bool>(m_XRangeMin, m_XRangeMax,
+                                            m_rangeExplicit);
+  }
+  void
+  setOutLogParameters(const DataObjects::EventWorkspace_sptr &InputWorkspace) {
+    CalculateCountRate::setOutLogParameters(InputWorkspace);
+  }
+  void getAlgLogSettings(size_t &numLogSteps,
+                         Kernel::TimeSeriesProperty<double> const *&pNormLog) {
+    pNormLog = m_pNormalizationLog;
+    numLogSteps = m_numLogSteps;
+  }
+
+  DataObjects::EventWorkspace *getWorkingWS() { return m_workingWS.get(); }
+  void setVisWS(const std::string &wsName) {
+    this->setProperty("VisualizationWs", wsName);
+    this->checkAndInitVisWorkspace();
+  }
+  const std::vector<double> &getVisNormLog() { return m_visNorm; }
+};
+
+class CalculateCountRateTest : public CxxTest::TestSuite {
+public:
+  // This pair of boilerplate methods prevent the suite being created statically
+  // This means the constructor isn't called when running other tests
+  static CalculateCountRateTest *createSuite() {
+    return new CalculateCountRateTest();
+  }
+  static void destroySuite(CalculateCountRateTest *suite) { delete suite; }
+
+  void test_Init() {
+    CalculateCountRate alg;
+
+    alg.setRethrows(true);
+    TS_ASSERT_THROWS_NOTHING(alg.initialize())
+    TS_ASSERT(alg.isInitialized())
+  }
+  void test_ranges() {
+
+    auto sws = build_test_ws(false);
+
+    double XRangeMin, XRangeMax;
+
+    CalculateCountRateTester alg;
+
+    alg.initialize();
+    alg.setProperty("Workspace", sws);
+    alg.setProperty("RangeUnits", "dSpacing");
+
+    alg.setSearchRanges(sws); // explicit ranges:
+    //-- real workspace ranges returned
+
+    auto ranges = alg.getXRanges();
+    TS_ASSERT_DELTA(std::get<0>(ranges), 0.5, 1.e-8);
+    TS_ASSERT_DELTA(std::get<1>(ranges), 99.5, 1.e-8);
+    TS_ASSERT(!std::get<2>(ranges));
+
+    alg.getWorkingWS()->getEventXMinMax(XRangeMin, XRangeMax);
+    TS_ASSERT_EQUALS(XRangeMin, std::get<0>(ranges));
+    TS_ASSERT_DELTA(XRangeMax, std::get<1>(ranges), 1.e-8);
+
+    //--------------------------------------------------------------------
+    // right crop range is specified. Top range is within the right
+    // limit
+    alg.setProperty("Workspace", sws);
+    alg.setProperty("XMax", 20.);
+    alg.setProperty("RangeUnits", "dSpacing");
+
+    alg.setSearchRanges(sws);
+
+    ranges = alg.getXRanges();
+    TS_ASSERT_DELTA(std::get<0>(ranges), 0.5, 1.e-8); // left range is real
+    // range as not specified
+    TS_ASSERT_DELTA(std::get<1>(ranges), 20.,
+                    1.e-8); // Right range is specified
+    TS_ASSERT(std::get<2>(ranges));
+
+    sws->getEventXMinMax(XRangeMin, XRangeMax);
+    TS_ASSERT_DELTA(XRangeMin, 0.5, 1.e-5);
+    TS_ASSERT_DELTA(XRangeMax, 99.5, 1.e-5);
+
+    //--------------------------------------------------------------------
+    // both crop ranges are specified. Result lies within the crop
+    // ranges in energy units.
+
+    sws = WorkspaceCreationHelper::createEventWorkspaceWithFullInstrument(
+        2, 10, false);
+
+    alg.setProperty("XMin", 1.);
+    alg.setProperty("XMax", 30.);
+    alg.setProperty("RangeUnits", "Energy");
+
+    alg.setSearchRanges(sws);
+
+    ranges = alg.getXRanges();
+    TS_ASSERT_DELTA(std::get<0>(ranges), 19.9301, 1.e-4);
+    TS_ASSERT_DELTA(std::get<1>(ranges), 30., 1.e-8);
+    TS_ASSERT(std::get<2>(ranges));
+
+    // units have been converted
+    alg.getWorkingWS()->getEventXMinMax(XRangeMin, XRangeMax);
+
+    TS_ASSERT_DELTA(std::get<0>(ranges), XRangeMin, 1.e-4);
+    TS_ASSERT(std::isinf(XRangeMax));
+  }
+
+  void test_log_params() {
+
+    auto sws = build_test_ws(false);
+
+    size_t numLogSteps;
+    Kernel::TimeSeriesProperty<double> const *pNormLog;
+
+    CalculateCountRateTester alg;
+    alg.initialize();
+
+    //-------- check defaults
+    alg.setOutLogParameters(sws);
+
+    alg.getAlgLogSettings(numLogSteps, pNormLog);
+    TS_ASSERT_EQUALS(numLogSteps, 200);
+    TS_ASSERT(!pNormLog);
+
+    //-------- check numLogSteps
+    alg.setProperty("NumTimeSteps", 100);
+
+    alg.setOutLogParameters(sws);
+
+    alg.getAlgLogSettings(numLogSteps, pNormLog);
+    TS_ASSERT_EQUALS(numLogSteps, 100);
+    TS_ASSERT(!pNormLog);
+
+    //-------- check numLogSteps, normalization log ignored
+    alg.setProperty("NumTimeSteps", 120);
+    alg.setProperty("NormalizeTheRate", true);
+    alg.setProperty("UseLogDerivative", false);
+    alg.setProperty("UseNormLogGranularity", true);
+
+    alg.setOutLogParameters(sws);
+    alg.getAlgLogSettings(numLogSteps, pNormLog);
+    TS_ASSERT_EQUALS(numLogSteps, 120);
+    TS_ASSERT(!pNormLog);
+    TS_ASSERT(!alg.normalizeCountRate());
+
+    // Check time series log outside of the data range
+    auto pTime_log = new Kernel::TimeSeriesProperty<double>("proton_charge");
+    Kernel::DateAndTime first("2015-11-30T16:17:10");
+    std::vector<Kernel::DateAndTime> times(140);
+    std::vector<double> values(140);
+
+    for (size_t i = 0; i < 140; ++i) {
+      times[i] = first + double(i);
+      values[i] = double(i);
+    }
+
+    // DateAndTime("2010-01-01T00:00:00")
+
+    pTime_log->addValues(times, values);
+    sws->mutableRun().addProperty(pTime_log, true);
+
+    alg.setOutLogParameters(sws);
+    alg.getAlgLogSettings(numLogSteps, pNormLog);
+    TS_ASSERT_EQUALS(numLogSteps, 120);
+    TS_ASSERT(!pNormLog);
+    TS_ASSERT(!alg.normalizeCountRate());
+    TS_ASSERT(!alg.useLogDerivative());
+
+    // Check correct date and time
+    first = Kernel::DateAndTime("2010-01-01T00:00:00");
+    times.resize(240);
+    values.resize(240);
+    for (size_t i = 0; i < 240; ++i) {
+      times[i] = first - 20. + double(i);
+      values[i] = double(i);
+    }
+    pTime_log->replaceValues(times, values);
+
+    alg.setOutLogParameters(sws);
+    alg.getAlgLogSettings(numLogSteps, pNormLog);
+    TS_ASSERT_EQUALS(numLogSteps, 99);
+    TS_ASSERT(pNormLog);
+    TS_ASSERT(alg.normalizeCountRate());
+    TS_ASSERT(!alg.useLogDerivative());
+
+    // check useLogDerivative
+    alg.setProperty("UseLogDerivative", true);
+    //
+    alg.setOutLogParameters(sws);
+    alg.getAlgLogSettings(numLogSteps, pNormLog);
+    TS_ASSERT_EQUALS(numLogSteps, 100);
+    TS_ASSERT(pNormLog);
+    TS_ASSERT(alg.normalizeCountRate());
+    TS_ASSERT(alg.useLogDerivative());
+  }
+
+  void test_processing() {
+
+    auto sws = build_test_ws(true);
+
+    CalculateCountRateTester alg;
+    alg.initialize();
+
+    alg.setProperty("NumTimeSteps", 120);
+    alg.setProperty("NormalizeTheRate", true);
+    alg.setProperty("UseLogDerivative", true);
+    alg.setProperty("UseNormLogGranularity", true);
+
+    alg.setProperty("Workspace", sws);
+
+    alg.setRethrows(true);
+    TS_ASSERT_THROWS_NOTHING(alg.execute());
+
+    TS_ASSERT(sws->run().hasProperty("block_count_rate"));
+
+    auto newLog = dynamic_cast<Kernel::TimeSeriesProperty<double> *>(
+        sws->run().getLogData("block_count_rate"));
+
+    TS_ASSERT(newLog);
+    if (!newLog)
+      return;
+
+    TS_ASSERT_EQUALS(newLog->realSize(), 100);
+    TS_ASSERT_EQUALS(newLog->size(), 100);
+    auto val_vec = newLog->valuesAsVector();
+
+    for (size_t i = 0; i < val_vec.size(); i++) {
+      TS_ASSERT_DELTA(val_vec[i], 198., 1.e-4);
+    }
+  }
+
+  void test_visWS_creation() {
+
+    auto sws = build_test_ws(false);
+
+    CalculateCountRateTester alg;
+    alg.initialize();
+
+    alg.setProperty("NumTimeSteps", 120);
+    alg.setProperty("XResolution", 200);
+    alg.setProperty("XMin", 10.);
+    alg.setProperty("XMax", 50.);
+
+    alg.setProperty("Workspace", sws);
+    alg.setSearchRanges(sws);
+
+    TS_ASSERT_THROWS_NOTHING(alg.setVisWS("testVisWSName"));
+
+    API::MatrixWorkspace_sptr testVisWS = alg.getProperty("VisualizationWs");
+    TS_ASSERT(testVisWS);
+    if (!testVisWS)
+      return;
+
+    TS_ASSERT_EQUALS(testVisWS->getNumberHistograms(), 120);
+    auto X = testVisWS->readX(0);
+    auto Y = testVisWS->readY(0);
+    TS_ASSERT_EQUALS(X.size(), 201);
+    TS_ASSERT_EQUALS(Y.size(), 200);
+  }
+
+  void test_visWS_noNormalization() {
+
+    DataObjects::EventWorkspace_sptr sws =
+        WorkspaceCreationHelper::createEventWorkspaceWithFullInstrument(2, 10,
+                                                                        false);
+
+    CalculateCountRateTester alg;
+    alg.initialize();
+
+    alg.setProperty("NumTimeSteps", 100);
+    alg.setProperty("XResolution", 200);
+
+    alg.setProperty("RangeUnits", "dSpacing");
+
+    alg.setProperty("NormalizeTheRate", false);
+    alg.setProperty("UseLogDerivative", true);
+    alg.setProperty("UseNormLogGranularity", true);
+
+    alg.setProperty("Workspace", sws);
+    alg.setProperty("VisualizationWs", "testVisWSNoNorm");
+
+    alg.setRethrows(true);
+    TS_ASSERT_THROWS_NOTHING(alg.execute());
+
+    API::MatrixWorkspace_sptr testVisWS = alg.getProperty("VisualizationWs");
+    TS_ASSERT(testVisWS);
+    TS_ASSERT_EQUALS(testVisWS->getNumberHistograms(), 100);
+    const MantidVec &X = testVisWS->readX(0);
+    const MantidVec &Y = testVisWS->readY(0);
+    TS_ASSERT_EQUALS(X.size(), 201);
+    TS_ASSERT_EQUALS(Y.size(), 200);
+    auto Yax = dynamic_cast<API::NumericAxis *>(testVisWS->getAxis(1));
+    TS_ASSERT(Yax);
+    if (!Yax)
+      return;
+
+    auto newLog = dynamic_cast<Kernel::TimeSeriesProperty<double> *>(
+        sws->run().getLogData("block_count_rate"));
+    TS_ASSERT(newLog);
+    if (!newLog)
+      return;
+
+    MantidVec counts = newLog->valuesAsVector();
+    TS_ASSERT_EQUALS(counts.size(), testVisWS->getNumberHistograms());
+    if (counts.size() != testVisWS->getNumberHistograms())
+      return;
+
+    for (size_t i = 0; i < testVisWS->getNumberHistograms(); ++i) {
+      const MantidVec &Y = testVisWS->readY(i);
+      double sum = std::accumulate(Y.begin(), Y.end(), 0.);
+      TSM_ASSERT_DELTA("Incorrect counts at index: " +
+                           boost::lexical_cast<std::string>(i),
+                       counts[i], sum, 1.e-6);
+    }
+  }
+
+  void test_visWS_NormalizationFine() {
+
+    auto sws = build_test_ws(true);
+
+    CalculateCountRateTester alg;
+    alg.initialize();
+
+    alg.setProperty("NumTimeSteps", 300);
+    alg.setProperty("XResolution", 200);
+
+    alg.setProperty("RangeUnits", "dSpacing");
+
+    alg.setProperty("NormalizeTheRate", true);
+    alg.setProperty("UseLogDerivative", true);
+    alg.setProperty("UseNormLogGranularity", true);
+
+    alg.setProperty("Workspace", sws);
+
+    alg.setOutLogParameters(sws);
+    alg.setSearchRanges(sws);
+    TS_ASSERT_THROWS_NOTHING(alg.setVisWS("testVisWSNorm"));
+
+    auto visNormLog = alg.getVisNormLog();
+    TS_ASSERT_EQUALS(visNormLog.size(), 100);
+    TS_ASSERT_DELTA(visNormLog[10], 2, 1.e-5);
+    auto sum = std::accumulate(visNormLog.begin(), visNormLog.end(), 0.);
+
+    TS_ASSERT_DELTA(sum, 200., 1.e-4);
+  }
+
+  void test_visWS_NormalizationCoarce() {
+
+    auto sws = build_test_ws(true);
+
+    CalculateCountRateTester alg;
+    alg.initialize();
+
+    alg.setProperty("NumTimeSteps", 50);
+    alg.setProperty("XResolution", 200);
+
+    alg.setProperty("RangeUnits", "dSpacing");
+
+    alg.setProperty("NormalizeTheRate", true);
+    alg.setProperty("UseLogDerivative", true);
+    alg.setProperty("UseNormLogGranularity", true);
+
+    alg.setProperty("Workspace", sws);
+
+    alg.setOutLogParameters(sws);
+    alg.setSearchRanges(sws);
+    TS_ASSERT_THROWS_NOTHING(alg.setVisWS("testVisWSNorm"));
+
+    auto visNormLog = alg.getVisNormLog();
+    TS_ASSERT_EQUALS(visNormLog.size(), 50);
+    TS_ASSERT_DELTA(visNormLog[10], 4, 1.e-5);
+    auto sum = std::accumulate(visNormLog.begin(), visNormLog.end(), 0.);
+
+    TS_ASSERT_DELTA(sum, 200., 1.e-4);
+  }
+
+  void test_visWS_Normalized() {
+
+    auto sws = build_test_ws(true);
+
+    CalculateCountRateTester alg;
+    alg.initialize();
+
+    alg.setProperty("NumTimeSteps", 50);
+    alg.setProperty("XResolution", 200);
+    alg.setProperty("VisualizationWs", "testVisWSNormalized");
+
+    alg.setProperty("RangeUnits", "dSpacing");
+
+    alg.setProperty("NormalizeTheRate", true);
+    alg.setProperty("UseLogDerivative", true);
+    alg.setProperty("UseNormLogGranularity", true);
+
+    alg.setProperty("Workspace", sws);
+
+    alg.setRethrows(true);
+    TS_ASSERT_THROWS_NOTHING(alg.execute());
+
+    API::MatrixWorkspace_sptr testVisWS = alg.getProperty("VisualizationWs");
+    TS_ASSERT(testVisWS);
+    if (!testVisWS)
+      return;
+    TS_ASSERT_EQUALS(testVisWS->getNumberHistograms(), 50);
+    const HistogramData::HistogramX &X = testVisWS->x(0);
+    const HistogramData::HistogramY &Y = testVisWS->y(0);
+    TS_ASSERT_EQUALS(X.size(), 201);
+    TS_ASSERT_EQUALS(Y.size(), 200);
+    auto Yax = dynamic_cast<API::NumericAxis *>(testVisWS->getAxis(1));
+    TS_ASSERT(Yax);
+    if (!Yax)
+      return;
+
+    auto newLog = dynamic_cast<Kernel::TimeSeriesProperty<double> *>(
+        sws->run().getLogData("block_count_rate"));
+    TS_ASSERT(newLog);
+    if (!newLog)
+      return;
+
+    MantidVec counts = newLog->valuesAsVector();
+
+    // verify everywhere except boundaries, where round-off errors and
+    // different time steps make results unstable
+    for (size_t i = 1; i < testVisWS->getNumberHistograms() - 1; ++i) {
+      const HistogramData::HistogramY &Y = testVisWS->y(i);
+      // const MantidVec &Y = testVisWS->readY(i); // -- better for debugging as
+      // one can see what is inside
+      double sum = std::accumulate(Y.begin(), Y.end(), 0.);
+      TSM_ASSERT_DELTA("Incorrect counts at index: " + std::to_string(i),
+                       counts[i], sum, 1.e-6);
+    }
+  }
+  //----------------------------------------------------------------------
+  DataObjects::EventWorkspace_sptr build_test_ws(bool addLog = false) {
+
+    DataObjects::EventWorkspace_sptr sws =
+        WorkspaceCreationHelper::createEventWorkspaceWithFullInstrument(2, 10,
+                                                                        false);
+
+    if (!addLog) {
+      return sws;
+    }
+
+    auto pTime_log = new Kernel::TimeSeriesProperty<double>("proton_charge");
+    Kernel::DateAndTime first("2010-01-01T00:00:00");
+    std::vector<Kernel::DateAndTime> times(240);
+    std::vector<double> values(240);
+
+    for (size_t i = 0; i < values.size(); ++i) {
+      times[i] = first - 10. + double(i);
+      values[i] = 2 * double(i);
+    }
+    pTime_log->addValues(times, values);
+    sws->mutableRun().addProperty(pTime_log, true);
+
+    return sws;
+  }
+};
+
+#endif /* MANTID_ALGORITHMS_CALC_COUNTRATE_TEST_H_ */
diff --git a/Framework/Algorithms/test/CloneWorkspaceTest.h b/Framework/Algorithms/test/CloneWorkspaceTest.h
index 11c7bfea2f078a3ebc47794aecfaa4675b4972b8..c35f470f9f48995bc3f8b51d3997f4e332f5334d 100644
--- a/Framework/Algorithms/test/CloneWorkspaceTest.h
+++ b/Framework/Algorithms/test/CloneWorkspaceTest.h
@@ -49,9 +49,9 @@ public:
     MatrixWorkspace_sptr in =
         AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>("in");
     // Input file does not contain Dx, we just add it for testing.
-    HistogramData::BinEdgeStandardDeviations dx(in->readX(0).size());
+    HistogramData::PointStandardDeviations dx(in->readX(0).size() - 1);
     for (size_t i = 0; i < in->getNumberHistograms(); ++i)
-      in->setBinEdgeStandardDeviations(i, dx);
+      in->setPointStandardDeviations(i, dx);
 
     TS_ASSERT_THROWS_NOTHING(cloner.setPropertyValue("InputWorkspace", "in"));
     TS_ASSERT_THROWS_NOTHING(cloner.setPropertyValue("OutputWorkspace", "out"));
diff --git a/Framework/Algorithms/test/ExtractSpectraTest.h b/Framework/Algorithms/test/ExtractSpectraTest.h
index 403566cc20ab040119c21d0657735dce0f8dd93d..1e16115d6a22914f8e35351d9fd1ba2edcc70465 100644
--- a/Framework/Algorithms/test/ExtractSpectraTest.h
+++ b/Framework/Algorithms/test/ExtractSpectraTest.h
@@ -429,8 +429,8 @@ private:
     auto ws = createInputWorkspaceHisto();
     // Add the delta x values
     for (size_t j = 0; j < nSpec; ++j) {
-      ws->setBinEdgeStandardDeviations(j, nBins + 1);
-      for (size_t k = 0; k <= nBins; ++k) {
+      ws->setPointStandardDeviations(j, nBins);
+      for (size_t k = 0; k < nBins; ++k) {
         // Add a constant error to all spectra
         ws->mutableDx(j)[k] = sqrt(double(k));
       }
@@ -468,13 +468,13 @@ private:
   MatrixWorkspace_sptr createInputWorkspaceEventWithDx() const {
     auto ws = createInputWorkspaceEvent();
     // Add the delta x values
-    auto dXvals = HistogramData::BinEdgeStandardDeviations(nBins + 1, 0.0);
+    auto dXvals = HistogramData::PointStandardDeviations(nBins, 0.0);
     auto &dX = dXvals.mutableData();
-    for (size_t k = 0; k <= nBins; ++k) {
+    for (size_t k = 0; k < nBins; ++k) {
       dX[k] = sqrt(double(k)) + 1;
     }
     for (size_t j = 0; j < nSpec; ++j) {
-      ws->setBinEdgeStandardDeviations(j, dXvals);
+      ws->setPointStandardDeviations(j, dXvals);
     }
     return ws;
   }
@@ -636,11 +636,8 @@ private:
         TS_ASSERT_EQUALS(ws.dx(0)[1], 1.0);
         TS_ASSERT_EQUALS(ws.dx(0)[2], M_SQRT2);
         TS_ASSERT_EQUALS(ws.dx(0)[3], sqrt(3.0));
-        // Check that the length of x and dx is the same
-        auto &x = ws.x(0);
-        auto dX = ws.dx(0);
-        TS_ASSERT_EQUALS(x.size(), dX.size());
-
+        // Check that the length of x and dx differs by 1
+        TS_ASSERT_EQUALS(ws.x(0).size() - 1, ws.dx(0).size());
       } else if (wsType == "event-dx") {
         TS_ASSERT(ws.hasDx(0));
         TS_ASSERT_EQUALS(ws.dx(0)[0], 0.0 + 1.0);
diff --git a/Framework/Algorithms/test/GetAllEiTest.h b/Framework/Algorithms/test/GetAllEiTest.h
index ef27ed4a6b1ab04da889112ae107b4802937053c..2365239cc9f39add70f91a4ec9d0d8e269d013d5 100644
--- a/Framework/Algorithms/test/GetAllEiTest.h
+++ b/Framework/Algorithms/test/GetAllEiTest.h
@@ -2,7 +2,6 @@
 #define GETALLEI_TEST_H_
 
 #include <memory>
-#include <boost/math/special_functions/fpclassify.hpp>
 #include <cxxtest/TestSuite.h>
 #include "MantidAlgorithms/GetAllEi.h"
 #include "MantidGeometry/Instrument.h"
@@ -443,8 +442,8 @@ public:
     auto Xsp2 = wws->getSpectrum(1).mutableX();
     size_t nSpectra = Xsp2.size();
     TS_ASSERT_EQUALS(nSpectra, 101);
-    TS_ASSERT(boost::math::isinf(Xsp1[nSpectra - 1]));
-    TS_ASSERT(boost::math::isinf(Xsp2[nSpectra - 1]));
+    TS_ASSERT(std::isinf(Xsp1[nSpectra - 1]));
+    TS_ASSERT(std::isinf(Xsp2[nSpectra - 1]));
 
     // for(size_t i=0;i<Xsp1.size();i++){
     //  TS_ASSERT_DELTA(Xsp1[i],Xsp2[i],1.e-6);
diff --git a/Framework/Algorithms/test/MergeRunsTest.h b/Framework/Algorithms/test/MergeRunsTest.h
index 2c99b9a35943f95c45e7c5092de702d7984fa98d..8a6c76ae12501d6da3e410d985f3529f6fd74e07 100644
--- a/Framework/Algorithms/test/MergeRunsTest.h
+++ b/Framework/Algorithms/test/MergeRunsTest.h
@@ -1340,6 +1340,24 @@ public:
         SampleLogsBehaviour::LIST_MERGE, "1, 2, 6, 7");
   }
 
+  void test_merging_single_workspace() {
+    std::string mergeType = SampleLogsBehaviour::TIME_SERIES_MERGE;
+
+    auto ws = create_group_workspace_with_sample_logs<double>(
+        mergeType, "prop1", 1.0, 2.0, 3.0, 4.0);
+
+    ws->remove("b1");
+
+    MergeRuns alg;
+    alg.initialize();
+    alg.setPropertyValue("InputWorkspaces", ws->name());
+    alg.setPropertyValue("OutputWorkspace", "outWS1");
+    TS_ASSERT_THROWS_NOTHING(alg.execute());
+
+    do_test_mergeSampleLogs(ws, "prop1", mergeType, "2013-Jun-25 10:59:15  1\n",
+                            1);
+  }
+
 private:
   MergeRuns merge;
 };
diff --git a/Framework/Algorithms/test/MultiplyDivideTest.in.h b/Framework/Algorithms/test/MultiplyDivideTest.in.h
index e19d443cdab649986afe4a5164b63acb36e8263b..37e0b89832f1666850256d671c46f6491cf204fb 100644
--- a/Framework/Algorithms/test/MultiplyDivideTest.in.h
+++ b/Framework/Algorithms/test/MultiplyDivideTest.in.h
@@ -970,7 +970,7 @@ public:
         TS_ASSERT_EQUALS(det->isMasked(), true);
         double yValue = output->readY(i)[0];
         TS_ASSERT_EQUALS(yValue, yValue );
-        TS_ASSERT_DIFFERS(yValue, std::numeric_limits<double>::infinity() );
+        TS_ASSERT( !std::isinf(yValue) );
       }
     }
     AnalysisDataService::Instance().remove(lhs);
diff --git a/Framework/Algorithms/test/PDFFourierTransformTest.h b/Framework/Algorithms/test/PDFFourierTransformTest.h
index 6d37b7188c713382d50aad2bf9662b7f0e8e1046..f50088bedd486fd8fe1ca9b1ff9f82383828201b 100644
--- a/Framework/Algorithms/test/PDFFourierTransformTest.h
+++ b/Framework/Algorithms/test/PDFFourierTransformTest.h
@@ -1,9 +1,9 @@
 #ifndef MANTID_ALGORITHMS_PDFFOURIERTRANSFORMTEST_H_
 #define MANTID_ALGORITHMS_PDFFOURIERTRANSFORMTEST_H_
 
-#include <boost/math/special_functions/fpclassify.hpp>
 #include <cxxtest/TestSuite.h>
 #include <numeric>
+#include <cmath>
 #include "MantidKernel/Timer.h"
 #include "MantidKernel/System.h"
 #include "MantidKernel/UnitFactory.h"
@@ -116,7 +116,8 @@ public:
     TS_ASSERT_DELTA(R[249], 2.5, 0.0001);
     // make sure that nan didn' slip in
     TS_ASSERT(std::find_if(GofR.begin(), GofR.end(),
-                           boost::math::isnan<double>) == GofR.end());
+                           static_cast<bool (*)(double)>(std::isnan)) ==
+              GofR.end());
   }
 
   void test_filter() {
diff --git a/Framework/Algorithms/test/PlotAsymmetryByLogValueTest.h b/Framework/Algorithms/test/PlotAsymmetryByLogValueTest.h
index dce1169ee19625528cbf9e948490183d7ca9c9b6..64b6d539043899d3825911495e92593d111b2e9d 100644
--- a/Framework/Algorithms/test/PlotAsymmetryByLogValueTest.h
+++ b/Framework/Algorithms/test/PlotAsymmetryByLogValueTest.h
@@ -15,12 +15,92 @@
 #include "MantidDataHandling/SaveNexus.h"
 
 #include <Poco/File.h>
+#include <Poco/NObserver.h>
+#include <Poco/TemporaryFile.h>
 
 using namespace Mantid::API;
 using namespace Mantid::Algorithms;
 using namespace Mantid::DataObjects;
 using namespace Mantid::DataHandling;
 
+/// RAII class to temporarily rename a file for the duration of a test
+/// Original name is restored on destruction.
+class TemporaryRenamer {
+public:
+  /// Constructor: rename the file and store its original name
+  explicit TemporaryRenamer(const std::string &fileName)
+      : m_originalName(fileName) {
+    try {
+      Poco::File file(m_originalName);
+      TS_ASSERT(file.exists() && file.canWrite() && file.isFile());
+      m_tempName = Poco::TemporaryFile::tempName();
+      file.copyTo(m_tempName);
+      file.remove();
+    } catch (const Poco::FileException &ex) {
+      failCopyWithError(m_originalName, m_tempName, ex);
+    }
+  }
+  /// Destructor: restore the file's original name
+  ~TemporaryRenamer() {
+    try {
+      Poco::File file(m_tempName);
+      file.copyTo(m_originalName);
+      file.remove();
+    } catch (const Poco::FileException &ex) { // Do not throw in the destructor!
+      failCopyWithError(m_tempName, m_originalName, ex);
+    }
+  }
+  /// Fail with an error
+  void failCopyWithError(const std::string &from, const std::string &to,
+                         const Poco::FileException &error) const {
+    std::ostringstream message;
+    message << "Failed to copy " << from << " to " << to << ": "
+            << error.displayText();
+    TS_FAIL(message.str());
+  }
+
+private:
+  const std::string m_originalName;
+  std::string m_tempName;
+};
+
+/// Class to count number of progress reports given out by an algorithm
+class ProgressWatcher {
+public:
+  /// Constructor
+  ProgressWatcher()
+      : m_loadedCount(0), m_foundCount(0),
+        m_observer(*this, &ProgressWatcher::handleProgress) {}
+  /// Add a notification to the count
+  void handleProgress(const Poco::AutoPtr<
+      Mantid::API::Algorithm::ProgressNotification> &notification) {
+    const auto &message = notification->message;
+    if (0 == message.compare(0, 5, "Found")) {
+      ++m_foundCount;
+    } else if (0 == message.compare(0, 6, "Loaded")) {
+      ++m_loadedCount;
+    }
+  }
+  /// Return the number of "found" progress reports seen so far
+  size_t getFoundCount() { return m_foundCount; }
+  /// Return the number of "loaded" progress reports seen so far
+  size_t getLoadedCount() { return m_loadedCount; }
+  /// Getter for the observer
+  Poco::NObserver<ProgressWatcher, Mantid::API::Algorithm::ProgressNotification>
+  getObserver() {
+    return m_observer;
+  }
+
+private:
+  /// Count of "file loaded" progress reports seen so far
+  size_t m_loadedCount;
+  /// Count of "file found" progress reports seen so far
+  size_t m_foundCount;
+  /// Observer
+  Poco::NObserver<ProgressWatcher, Mantid::API::Algorithm::ProgressNotification>
+      m_observer;
+};
+
 class PlotAsymmetryByLogValueTest : public CxxTest::TestSuite {
 public:
   // This pair of boilerplate methods prevent the suite being created statically
@@ -448,6 +528,64 @@ public:
     TS_ASSERT_DELTA(outputX[1], 215.0, 1.e-7);
   }
 
+  void test_skip_missing_file() {
+    PlotAsymmetryByLogValue alg;
+    alg.initialize();
+
+    // Find path to data file by going via an algorithm property...
+    alg.setPropertyValue("FirstRun", "MUSR00015190.nxs");
+    const std::string &middleFile = alg.getPropertyValue("FirstRun");
+
+    // Temporarily rename MUSR00015190.nxs so it's "missing" for this test
+    TemporaryRenamer renamedFile(middleFile);
+
+    alg.setPropertyValue("FirstRun", "MUSR00015189.nxs");
+    alg.setPropertyValue("LastRun", "MUSR00015191.nxs");
+    alg.setPropertyValue("OutputWorkspace", "PlotAsymmetryByLogValueTest_WS");
+    alg.setPropertyValue("LogValue", "run_number");
+    alg.setPropertyValue("Red", "2");
+    alg.setPropertyValue("Green", "1");
+    TS_ASSERT_THROWS_NOTHING(alg.execute());
+    TS_ASSERT(alg.isExecuted());
+
+    MatrixWorkspace_sptr outWS = boost::dynamic_pointer_cast<MatrixWorkspace>(
+        AnalysisDataService::Instance().retrieve(
+            "PlotAsymmetryByLogValueTest_WS"));
+    TS_ASSERT(outWS);
+    const auto &outputX = outWS->points(0);
+    TS_ASSERT_EQUALS(outputX.size(), 2);
+    TS_ASSERT_DELTA(outputX[0], 15189.0, 1.e-7);
+    TS_ASSERT_DELTA(outputX[1], 15191.0, 1.e-7);
+  }
+
+  void test_extend_run_sequence() {
+    PlotAsymmetryByLogValue alg;
+    alg.initialize();
+
+    // Watch for the algorithm's progress reports as it loads each file
+    ProgressWatcher watcher;
+    alg.addObserver(watcher.getObserver());
+
+    // Load the first two runs
+    alg.setPropertyValue("FirstRun", "MUSR00015189.nxs");
+    alg.setPropertyValue("LastRun", "MUSR00015190.nxs");
+    alg.setPropertyValue("OutputWorkspace", "PlotAsymmetryByLogValueTest_WS");
+    alg.setPropertyValue("LogValue", "run_number");
+    alg.setPropertyValue("Red", "2");
+    alg.setPropertyValue("Green", "1");
+    TS_ASSERT_THROWS_NOTHING(alg.execute());
+    TS_ASSERT(alg.isExecuted());
+    TS_ASSERT_EQUALS(watcher.getLoadedCount(), 2);
+    TS_ASSERT_EQUALS(watcher.getFoundCount(), 0);
+
+    // Now extend the run sequence with an extra run
+    alg.setPropertyValue("LastRun", "MUSR00015191.nxs");
+    TS_ASSERT_THROWS_NOTHING(alg.execute());
+    TS_ASSERT(alg.isExecuted());
+    TS_ASSERT_EQUALS(watcher.getLoadedCount(), 3); // i.e. not 5 loads
+    TS_ASSERT_EQUALS(watcher.getFoundCount(), 2);  // reused 2
+  }
+
 private:
   std::string firstRun, lastRun;
 };
diff --git a/Framework/Algorithms/test/Q1D2Test.h b/Framework/Algorithms/test/Q1D2Test.h
index fe2f2bad20cd74d0c0c10f03bccd7c2363c69fe8..98b3808b6d6d929643bc0d3720e5a060dd6fe032 100644
--- a/Framework/Algorithms/test/Q1D2Test.h
+++ b/Framework/Algorithms/test/Q1D2Test.h
@@ -10,7 +10,6 @@
 #include "MantidDataHandling/LoadRaw3.h"
 #include "MantidDataHandling/LoadRKH.h"
 #include "MantidDataHandling/MaskDetectors.h"
-#include <boost/math/special_functions/fpclassify.hpp>
 
 #include "MantidTestHelpers/WorkspaceCreationHelper.h"
 
@@ -93,12 +92,12 @@ public:
     // empty bins are 0/0
     TS_ASSERT_DELTA(result->readY(0).front(), 2226533, 1)
     TS_ASSERT_DELTA(result->readY(0)[4], 946570.8, 0.1)
-    TS_ASSERT(boost::math::isnan(result->readY(0)[18]))
-    TS_ASSERT(boost::math::isnan(result->readY(0).back()))
+    TS_ASSERT(std::isnan(result->readY(0)[18]))
+    TS_ASSERT(std::isnan(result->readY(0).back()))
 
     TS_ASSERT_DELTA(result->readE(0)[1], 57964.04, 0.01)
     TS_ASSERT_DELTA(result->readE(0)[5], 166712.6, 0.1)
-    TS_ASSERT(boost::math::isnan(result->readE(0).back()))
+    TS_ASSERT(std::isnan(result->readE(0).back()))
 
     Mantid::API::AnalysisDataService::Instance().remove(outputWS);
   }
@@ -196,12 +195,12 @@ public:
     TS_ASSERT_DELTA(result->readY(0).front(), 944237.8, 0.1)
     TS_ASSERT_DELTA(result->readY(0)[3], 1009296, 1)
     TS_ASSERT_DELTA(result->readY(0)[12], 620952.6, 0.1)
-    TS_ASSERT(boost::math::isnan(result->readY(0).back()))
+    TS_ASSERT(std::isnan(result->readY(0).back()))
 
     // empty bins are 0/0
     TS_ASSERT_DELTA(result->readE(0)[2], 404981, 10)
     TS_ASSERT_DELTA(result->readE(0)[10], 489710.39, 100)
-    TS_ASSERT(boost::math::isnan(result->readE(0)[7]))
+    TS_ASSERT(std::isnan(result->readE(0)[7]))
 
     TSM_ASSERT("Should not have a DX value", !result->hasDx(0))
   }
@@ -276,11 +275,11 @@ public:
 
     TS_ASSERT_DELTA(gravity->readY(0)[3], 1009296.4, 0.8)
     TS_ASSERT_DELTA(gravity->readY(0)[10], 891346.9, 0.1)
-    TS_ASSERT(boost::math::isnan(gravity->readY(0)[78]))
+    TS_ASSERT(std::isnan(gravity->readY(0)[78]))
 
     TS_ASSERT_DELTA(gravity->readE(0).front(), 329383, 1)
     TS_ASSERT_DELTA(gravity->readE(0)[10], 489708, 1) // 489710
-    TS_ASSERT(boost::math::isnan(gravity->readE(0)[77]))
+    TS_ASSERT(std::isnan(gravity->readE(0)[77]))
 
     Mantid::API::AnalysisDataService::Instance().remove(outputWS);
   }
@@ -315,13 +314,13 @@ public:
     TS_ASSERT_EQUALS(result->readX(0).back(), 0.5)
 
     TS_ASSERT_DELTA(result->readY(0).front(), 1192471.95, 0.1)
-    TS_ASSERT(boost::math::isnan(result->readY(0)[3]))
+    TS_ASSERT(std::isnan(result->readY(0)[3]))
     TS_ASSERT_DELTA(result->readY(0)[12], 503242.79, 0.1)
-    TS_ASSERT(boost::math::isnan(result->readY(0).back()))
+    TS_ASSERT(std::isnan(result->readY(0).back()))
 
     TS_ASSERT_DELTA(result->readE(0)[2], 404980, 1)
     TS_ASSERT_DELTA(result->readE(0)[10], 489708, 100)
-    TS_ASSERT(boost::math::isnan(result->readE(0)[7]))
+    TS_ASSERT(std::isnan(result->readE(0)[7]))
   }
 
   // here the cut parameters are set but should only affect detectors with lower
@@ -356,8 +355,8 @@ public:
 
     for (size_t i = 0; i < nocuts->readY(0).size(); ++i) {
       TS_ASSERT_EQUALS(nocuts->readX(0)[i], noGrav->readX(0)[i])
-      if (!boost::math::isnan(nocuts->readY(0)[i]) &&
-          !boost::math::isnan(nocuts->readE(0)[i])) {
+      if (!std::isnan(nocuts->readY(0)[i]) &&
+          !std::isnan(nocuts->readE(0)[i])) {
         TS_ASSERT_EQUALS(nocuts->readY(0)[i], noGrav->readY(0)[i])
 
         TS_ASSERT_EQUALS(nocuts->readE(0)[i], noGrav->readE(0)[i])
@@ -441,16 +440,14 @@ public:
     // into this
     // bin. We make sure that there is at least one bin with a count
     // of sqrt(1 + 0.5^2/12) ~ 1.01036297108
-    auto &dataDX = result->dx(0);
     unsigned int counter = 0;
-    for (auto it = dataDX.begin(); it != dataDX.end(); ++it) {
-
+    for (const auto &dx : result->dx(0)) {
       // Since we are dealing with a float it can be difficult to compare
       // our value with sqrt(1 + 0.5^2/12). Hence it is enough for us to confirm
       // that the values lie in an interval around this value
-      auto isZeroValue = *it == 0.0;
+      auto isZeroValue = dx == 0.0;
       auto isCloseToZeroPoint1DividedByRootTwelve =
-          (*it > 1.01035) && (*it < 1.01037);
+          (dx > 1.01035) && (dx < 1.01037);
       if (isCloseToZeroPoint1DividedByRootTwelve) {
         counter++;
       }
diff --git a/Framework/Algorithms/test/RemoveExpDecayTest.h b/Framework/Algorithms/test/RemoveExpDecayTest.h
index 288f8eaf40257354412201fcd87af28cec20f741..dfcdf1a8ad8b4b2d92679188846bdcd426ccf314 100644
--- a/Framework/Algorithms/test/RemoveExpDecayTest.h
+++ b/Framework/Algorithms/test/RemoveExpDecayTest.h
@@ -2,15 +2,59 @@
 #define MUONREMOVEEXPDECAYTEST_H_
 
 #include <cxxtest/TestSuite.h>
+#include "MantidAlgorithms/RemoveExpDecay.h"
 #include "MantidAPI/FrameworkManager.h"
 #include "MantidAPI/AlgorithmManager.h"
+#include "MantidHistogramData/LinearGenerator.h"
 #include "MantidTestHelpers/WorkspaceCreationHelper.h"
 
 using namespace Mantid::API;
 using Mantid::MantidVec;
+using Mantid::Algorithms::MuonRemoveExpDecay;
 
 const std::string outputName = "MuonRemoveExpDecay_Output";
 
+namespace {
+MatrixWorkspace_sptr createWorkspace(size_t nspec, size_t maxt) {
+
+  // Create a fake muon dataset
+  double a = 0.1; // Amplitude of the oscillations
+  double w = 25.; // Frequency of the oscillations
+  double tau = Mantid::PhysicalConstants::MuonLifetime *
+               1e6; // Muon life time in microseconds
+
+  MantidVec X;
+  MantidVec Y;
+  MantidVec E;
+  for (size_t s = 0; s < nspec; s++) {
+    for (size_t t = 0; t < maxt; t++) {
+      double x = static_cast<double>(t) / static_cast<double>(maxt);
+      double e = exp(-x / tau);
+      X.push_back(x);
+      Y.push_back(
+          a * sin(w * x +
+                  static_cast<double>(s) * M_PI / static_cast<double>(nspec)) *
+              e +
+          e);
+      E.push_back(0.005);
+    }
+  }
+
+  auto createWS = AlgorithmManager::Instance().create("CreateWorkspace");
+  createWS->initialize();
+  createWS->setChild(true);
+  createWS->setProperty("DataX", X);
+  createWS->setProperty("DataY", Y);
+  createWS->setProperty("DataE", E);
+  createWS->setProperty("NSpec", static_cast<int>(nspec));
+  createWS->setPropertyValue("OutputWorkspace", "ws");
+  createWS->execute();
+  MatrixWorkspace_sptr ws = createWS->getProperty("OutputWorkspace");
+
+  return ws;
+}
+}
+
 class RemoveExpDecayTest : public CxxTest::TestSuite {
 public:
   // This pair of boilerplate methods prevent the suite being created statically
@@ -57,31 +101,31 @@ public:
 
     // First spectrum
     // Test some X values
-    TS_ASSERT_DELTA(outWS->readX(0)[10], 0.2000, 0.0001);
-    TS_ASSERT_DELTA(outWS->readX(0)[19], 0.3800, 0.0001);
-    TS_ASSERT_DELTA(outWS->readX(0)[49], 0.9800, 0.0001);
+    TS_ASSERT_DELTA(outWS->x(0)[10], 0.2000, 0.0001);
+    TS_ASSERT_DELTA(outWS->x(0)[19], 0.3800, 0.0001);
+    TS_ASSERT_DELTA(outWS->x(0)[49], 0.9800, 0.0001);
     // Test some Y values
-    TS_ASSERT_DELTA(outWS->readY(0)[10], -0.0992, 0.0001);
-    TS_ASSERT_DELTA(outWS->readY(0)[19], -0.0111, 0.0001);
-    TS_ASSERT_DELTA(outWS->readY(0)[49], -0.0625, 0.0001);
+    TS_ASSERT_DELTA(outWS->y(0)[10], -0.0992, 0.0001);
+    TS_ASSERT_DELTA(outWS->y(0)[19], -0.0111, 0.0001);
+    TS_ASSERT_DELTA(outWS->y(0)[49], -0.0625, 0.0001);
     // Test some E values
-    TS_ASSERT_DELTA(outWS->readE(0)[10], 0.0054, 0.0001);
-    TS_ASSERT_DELTA(outWS->readE(0)[19], 0.0059, 0.0001);
-    TS_ASSERT_DELTA(outWS->readE(0)[49], 0.0077, 0.0001);
+    TS_ASSERT_DELTA(outWS->e(0)[10], 0.0054, 0.0001);
+    TS_ASSERT_DELTA(outWS->e(0)[19], 0.0059, 0.0001);
+    TS_ASSERT_DELTA(outWS->e(0)[49], 0.0077, 0.0001);
 
     // Second spectrum
     // Test some X values
-    TS_ASSERT_DELTA(outWS->readX(1)[10], 0.2000, 0.0001);
-    TS_ASSERT_DELTA(outWS->readX(1)[19], 0.3800, 0.0001);
-    TS_ASSERT_DELTA(outWS->readX(1)[49], 0.9800, 0.0001);
+    TS_ASSERT_DELTA(outWS->x(1)[10], 0.2000, 0.0001);
+    TS_ASSERT_DELTA(outWS->x(1)[19], 0.3800, 0.0001);
+    TS_ASSERT_DELTA(outWS->x(1)[49], 0.9800, 0.0001);
     // Test some Y values
-    TS_ASSERT_DELTA(outWS->readY(1)[10], 0.0276, 0.0001);
-    TS_ASSERT_DELTA(outWS->readY(1)[19], -0.1003, 0.0001);
-    TS_ASSERT_DELTA(outWS->readY(1)[49], 0.0798, 0.0001);
+    TS_ASSERT_DELTA(outWS->y(1)[10], 0.0276, 0.0001);
+    TS_ASSERT_DELTA(outWS->y(1)[19], -0.1003, 0.0001);
+    TS_ASSERT_DELTA(outWS->y(1)[49], 0.0798, 0.0001);
     // Test some E values
-    TS_ASSERT_DELTA(outWS->readE(1)[10], 0.0054, 0.0001);
-    TS_ASSERT_DELTA(outWS->readE(1)[19], 0.0059, 0.0001);
-    TS_ASSERT_DELTA(outWS->readE(1)[49], 0.0078, 0.0001);
+    TS_ASSERT_DELTA(outWS->e(1)[10], 0.0054, 0.0001);
+    TS_ASSERT_DELTA(outWS->e(1)[19], 0.0059, 0.0001);
+    TS_ASSERT_DELTA(outWS->e(1)[49], 0.0078, 0.0001);
   }
 
   void test_SpectrumList() {
@@ -116,14 +160,14 @@ public:
     TS_ASSERT_EQUALS(out2->getNumberHistograms(), ws->getNumberHistograms());
 
     // Compare results, they should match for the selected spectrum
-    TS_ASSERT_EQUALS(out1->readX(1), out2->readX(1));
-    TS_ASSERT_EQUALS(out1->readY(1), out2->readY(1));
-    TS_ASSERT_EQUALS(out1->readE(1), out2->readE(1));
+    TS_ASSERT_EQUALS(out1->x(1).rawData(), out2->x(1).rawData());
+    TS_ASSERT_EQUALS(out1->y(1).rawData(), out2->y(1).rawData());
+    TS_ASSERT_EQUALS(out1->e(1).rawData(), out2->e(1).rawData());
 
     // Compare non-selected spectra, the should match the input ones
-    TS_ASSERT_EQUALS(ws->readX(0), out2->readX(0));
-    TS_ASSERT_EQUALS(ws->readY(0), out2->readY(0));
-    TS_ASSERT_EQUALS(ws->readE(0), out2->readE(0));
+    TS_ASSERT_EQUALS(ws->x(0).rawData(), out2->x(0).rawData());
+    TS_ASSERT_EQUALS(ws->y(0).rawData(), out2->y(0).rawData());
+    TS_ASSERT_EQUALS(ws->e(0).rawData(), out2->e(0).rawData());
   }
 
   void test_yUnitLabel() {
@@ -142,45 +186,34 @@ public:
     TS_ASSERT(result);
     TS_ASSERT_EQUALS(result->YUnitLabel(), "Asymmetry");
   }
+};
 
-  MatrixWorkspace_sptr createWorkspace(size_t nspec, size_t maxt) {
-
-    // Create a fake muon dataset
-    double a = 0.1; // Amplitude of the oscillations
-    double w = 25.; // Frequency of the oscillations
-    double tau = Mantid::PhysicalConstants::MuonLifetime *
-                 1e6; // Muon life time in microseconds
-
-    MantidVec X;
-    MantidVec Y;
-    MantidVec E;
-    for (size_t s = 0; s < nspec; s++) {
-      for (size_t t = 0; t < maxt; t++) {
-        double x = static_cast<double>(t) / static_cast<double>(maxt);
-        double e = exp(-x / tau);
-        X.push_back(x);
-        Y.push_back(a * sin(w * x +
-                            static_cast<double>(s) * M_PI /
-                                static_cast<double>(nspec)) *
-                        e +
-                    e);
-        E.push_back(0.005);
-      }
-    }
+class RemoveExpDecayTestPerformance : public CxxTest::TestSuite {
+public:
+  // This pair of boilerplate methods prevent the suite being created statically
+  // This means the constructor isn't called when running other tests
+  static RemoveExpDecayTestPerformance *createSuite() {
+    return new RemoveExpDecayTestPerformance();
+  }
+  static void destroySuite(RemoveExpDecayTestPerformance *suite) {
+    AnalysisDataService::Instance().clear();
+    delete suite;
+  }
 
-    auto createWS = AlgorithmManager::Instance().create("CreateWorkspace");
-    createWS->initialize();
-    createWS->setChild(true);
-    createWS->setProperty("DataX", X);
-    createWS->setProperty("DataY", Y);
-    createWS->setProperty("DataE", E);
-    createWS->setProperty("NSpec", static_cast<int>(nspec));
-    createWS->setPropertyValue("OutputWorkspace", "ws");
-    createWS->execute();
-    MatrixWorkspace_sptr ws = createWS->getProperty("OutputWorkspace");
-
-    return ws;
+  RemoveExpDecayTestPerformance() { FrameworkManager::Instance(); }
+
+  void setUp() override { input = createWorkspace(1000, 100); }
+
+  void testExec2D() {
+    MuonRemoveExpDecay alg;
+    alg.initialize();
+    alg.setProperty("InputWorkspace", input);
+    alg.setPropertyValue("OutputWorkspace", "output");
+    alg.execute();
   }
+
+private:
+  MatrixWorkspace_sptr input;
 };
 
 #endif /*MUONREMOVEEXPDECAYTEST_H_*/
diff --git a/Framework/Algorithms/test/RemoveMaskedSpectraTest.h b/Framework/Algorithms/test/RemoveMaskedSpectraTest.h
index 2d69771e100a8ffc016827924ed9827faa9605a6..79c73b9322e8711d625d631e30d8a8c9b1594f05 100644
--- a/Framework/Algorithms/test/RemoveMaskedSpectraTest.h
+++ b/Framework/Algorithms/test/RemoveMaskedSpectraTest.h
@@ -7,6 +7,7 @@
 #include "MantidAPI/AlgorithmManager.h"
 #include "MantidAPI/MatrixWorkspace.h"
 #include "MantidAPI/WorkspaceFactory.h"
+#include "MantidHistogramData/LinearGenerator.h"
 #include "MantidTestHelpers/ComponentCreationHelper.h"
 
 using Mantid::Algorithms::RemoveMaskedSpectra;
@@ -40,8 +41,8 @@ public:
     maskWorkspace(maskedWS);
     auto output = runAlgorithm(inputWS, maskedWS);
     TS_ASSERT_EQUALS(output->getNumberHistograms(), 2);
-    TS_ASSERT_EQUALS(output->readY(0).front(), 1.0);
-    TS_ASSERT_EQUALS(output->readY(1).front(), 3.0);
+    TS_ASSERT_EQUALS(output->y(0).front(), 1.0);
+    TS_ASSERT_EQUALS(output->y(1).front(), 3.0);
   }
 
   void test_mask_workspace_mask() {
@@ -59,8 +60,8 @@ public:
 
     auto output = runAlgorithm(inputWS, maskedWS);
     TS_ASSERT_EQUALS(output->getNumberHistograms(), 2);
-    TS_ASSERT_EQUALS(output->readY(0).front(), 1.0);
-    TS_ASSERT_EQUALS(output->readY(1).front(), 3.0);
+    TS_ASSERT_EQUALS(output->y(0).front(), 1.0);
+    TS_ASSERT_EQUALS(output->y(1).front(), 3.0);
   }
 
   void test_self_mask() {
@@ -68,8 +69,8 @@ public:
     maskWorkspace(inputWS);
     auto output = runAlgorithm(inputWS);
     TS_ASSERT_EQUALS(output->getNumberHistograms(), 2);
-    TS_ASSERT_EQUALS(output->readY(0).front(), 1.0);
-    TS_ASSERT_EQUALS(output->readY(1).front(), 3.0);
+    TS_ASSERT_EQUALS(output->y(0).front(), 1.0);
+    TS_ASSERT_EQUALS(output->y(1).front(), 3.0);
   }
 
 private:
@@ -84,12 +85,16 @@ private:
         "Workspace2D", nSpec, nBins + 1, nBins);
     space->setInstrument(
         ComponentCreationHelper::createTestInstrumentCylindrical(1));
+    HistogramData::BinEdges edges(nBins + 1,
+                                  HistogramData::LinearGenerator(0.0, 1.0));
     for (size_t j = 0; j < nSpec; ++j) {
-      for (size_t k = 0; k <= nBins; ++k) {
-        space->dataX(j)[k] = double(k);
-      }
-      space->dataY(j).assign(nBins, double(j));
-      space->dataE(j).assign(nBins, sqrt(double(j)));
+      const double yVal{static_cast<double>(j)};
+      const double eVal{sqrt(yVal)};
+      space->setBinEdges(j, edges);
+      const std::vector<double> counts(nBins, yVal);
+      const std::vector<double> errors(nBins, eVal);
+      space->setCounts(j, counts);
+      space->setCountStandardDeviations(j, errors);
       space->getSpectrum(j).setDetectorID(detid_t(j + 1));
     }
     return space;
diff --git a/Framework/Algorithms/test/ReplaceSpecialValuesTest.h b/Framework/Algorithms/test/ReplaceSpecialValuesTest.h
index c4af4692414f8872ba8b06590c067824e8f055df..95dbbd337bab8ce0d62ce2f6e8c4bc469a2a9d59 100644
--- a/Framework/Algorithms/test/ReplaceSpecialValuesTest.h
+++ b/Framework/Algorithms/test/ReplaceSpecialValuesTest.h
@@ -204,25 +204,18 @@ public:
       for (int j = 1; j < 5; ++j) {
         TS_ASSERT_EQUALS(result->dataX(i)[j - 1], inputWS->dataX(i)[j - 1]);
 
-        if (infCheck &&
-            std::abs(inputWS->dataY(i)[j - 1]) ==
-                std::numeric_limits<double>::infinity()) {
-          if (std::abs(result->dataY(i)[j - 1]) ==
-              std::numeric_limits<double>::infinity()) {
+        if (infCheck && std::isinf(inputWS->dataY(i)[j - 1])) {
+          if (std::isinf(result->dataY(i)[j - 1])) {
             TS_FAIL("Infinity detected that shold have been replaced");
           } else {
             TS_ASSERT_DELTA(result->dataY(i)[j - 1], 999.0, 1e-8);
             TS_ASSERT_DELTA(result->dataE(i)[j - 1], 0.00005, 1e-8);
           }
-        } else if (naNCheck &&
-                   inputWS->dataY(i)[j - 1] !=
-                       inputWS->dataY(i)[j - 1]) // not equal to self == NaN
-        {
+        } else if (naNCheck && std::isnan(inputWS->dataY(i)[j - 1])) {
           TS_ASSERT_DELTA(result->dataY(i)[j - 1], -99.0, 1e-8);
           TS_ASSERT_DELTA(result->dataE(i)[j - 1], -50.0, 1e-8);
         } else {
-          if (!naNCheck &&
-              inputWS->dataY(i)[j - 1] != inputWS->dataY(i)[j - 1]) {
+          if (!naNCheck && std::isnan(inputWS->dataY(i)[j - 1])) {
             TS_ASSERT_DIFFERS(result->dataY(i)[j - 1], result->dataY(i)[j - 1]);
           } else {
             TS_ASSERT_EQUALS(result->dataY(i)[j - 1], inputWS->dataY(i)[j - 1]);
diff --git a/Framework/Algorithms/test/ResetNegativesTest.h b/Framework/Algorithms/test/ResetNegativesTest.h
index f9bbbec67ed1105b96ec17e832db47687be348b4..c14284f079c8e616cf42e063b8f0f4a20cc5face 100644
--- a/Framework/Algorithms/test/ResetNegativesTest.h
+++ b/Framework/Algorithms/test/ResetNegativesTest.h
@@ -59,8 +59,8 @@ public:
       return;
 
     // verify the results
-    const MantidVec &yIn = inputWS->readY(0);
-    const MantidVec &yOut = outputWS->readY(0);
+    const auto &yIn = inputWS->y(0);
+    const auto &yOut = outputWS->y(0);
     for (size_t i = 0; i < yIn.size(); i++)
       TS_ASSERT_DELTA(yOut[i], yIn[i], .000001);
 
@@ -94,7 +94,7 @@ public:
       return;
 
     // verify the results
-    const MantidVec &yOut = outputWS->readY(0);
+    const auto &yOut = outputWS->y(0);
     for (size_t i = 0; i < yOut.size(); i++)
       TS_ASSERT_DELTA(yOut[i], 0., .000001);
 
@@ -131,7 +131,7 @@ public:
       return;
 
     // verify the results
-    const MantidVec &yOut = outputWS->readY(0);
+    const auto &yOut = outputWS->y(0);
     for (size_t i = 0; i < yOut.size(); i++)
       TS_ASSERT(yOut[i] >= 0.);
 
@@ -143,13 +143,13 @@ public:
 private:
   MatrixWorkspace_sptr generateInput(const double offset,
                                      const double delta = 0.) {
-    int nhist = 3;
-    int nbins = 256;
+    constexpr int nhist = 3;
+    constexpr int nbins = 256;
     MatrixWorkspace_sptr inputWS =
         WorkspaceCreationHelper::Create2DWorkspaceBinned(nhist, nbins, 1., .2);
     for (int i = 0; i < nhist; i++) {
       double value = offset + static_cast<double>(i);
-      MantidVec &y = inputWS->dataY(i);
+      auto &y = inputWS->mutableY(i);
       for (size_t j = 0; j < y.size(); j++) {
         y[j] = value + delta * static_cast<double>(j);
       }
@@ -159,4 +159,46 @@ private:
   }
 };
 
+class ResetNegativesTestPerformance : public CxxTest::TestSuite {
+public:
+  // This pair of boilerplate methods prevent the suite being created statically
+  // This means the constructor isn't called when running other tests
+  static ResetNegativesTestPerformance *createSuite() {
+    return new ResetNegativesTestPerformance();
+  }
+  static void destroySuite(ResetNegativesTestPerformance *suite) {
+    AnalysisDataService::Instance().clear();
+    delete suite;
+  }
+
+  void setUp() override { input = generateInput(-1.0, 0.01); }
+
+  void testPerformance() {
+    ResetNegatives alg;
+    alg.initialize();
+    alg.setProperty("InputWorkspace", input);
+    alg.setPropertyValue("OutputWorkspace", "output");
+    alg.setProperty("AddMinimum", true);
+    alg.execute();
+  }
+
+private:
+  MatrixWorkspace_sptr input;
+  MatrixWorkspace_sptr generateInput(const double offset,
+                                     const double delta = 0.) {
+    constexpr int nhist = 50000;
+    constexpr int nbins = 1000;
+    MatrixWorkspace_sptr inputWS =
+        WorkspaceCreationHelper::Create2DWorkspaceBinned(nhist, nbins, 1., .2);
+    for (int i = 0; i < nhist; i++) {
+      double value = offset + static_cast<double>(i);
+      auto &y = inputWS->mutableY(i);
+      for (size_t j = 0; j < y.size(); j++) {
+        y[j] = value + delta * static_cast<double>(j);
+      }
+    }
+    return inputWS;
+  }
+};
+
 #endif /* MANTID_ALGORITHMS_RESETNEGATIVESTEST_H_ */
diff --git a/Framework/Algorithms/test/Stitch1DTest.h b/Framework/Algorithms/test/Stitch1DTest.h
index 354f7d4e155a98d146030ad9903e07b4785453b4..d25339040af3c8e91f3c0079269260e332c2d091 100644
--- a/Framework/Algorithms/test/Stitch1DTest.h
+++ b/Framework/Algorithms/test/Stitch1DTest.h
@@ -15,7 +15,6 @@
 #include <algorithm>
 #include <math.h>
 #include <boost/tuple/tuple.hpp>
-#include <boost/math/special_functions.hpp>
 #include <boost/make_shared.hpp>
 
 using namespace Mantid::API;
@@ -579,8 +578,7 @@ public:
 
     double scaleFactor = ret.get<1>();
 
-    TSM_ASSERT("ScaleFactor should not be NAN",
-               !boost::math::isnan(scaleFactor));
+    TSM_ASSERT("ScaleFactor should not be NAN", !std::isnan(scaleFactor));
   }
 
   void test_patch_inf_y_value_for_scaling() {
@@ -601,8 +599,7 @@ public:
 
     double scaleFactor = ret.get<1>();
 
-    TSM_ASSERT("ScaleFactor should not be Infinity",
-               !boost::math::isinf(scaleFactor));
+    TSM_ASSERT("ScaleFactor should not be Infinity", !std::isinf(scaleFactor));
   }
 
   void test_reset_nans() {
@@ -624,11 +621,10 @@ public:
     MatrixWorkspace_sptr outWs = ret.get<0>();
     double scaleFactor = ret.get<1>();
 
-    TSM_ASSERT("ScaleFactor should not be Infinity",
-               !boost::math::isinf(scaleFactor));
+    TSM_ASSERT("ScaleFactor should not be Infinity", !std::isinf(scaleFactor));
 
     auto outY = outWs->readY(0);
-    TSM_ASSERT("Nans should be put back", boost::math::isnan(outY[0]));
+    TSM_ASSERT("Nans should be put back", std::isnan(outY[0]));
   }
 };
 
diff --git a/Framework/Algorithms/test/TransposeTest.h b/Framework/Algorithms/test/TransposeTest.h
index 966c40d44c6a66ba9d5982dc02f26af9629494fe..664f820e6e85cbfa71ad28fa7070b5779d1b1c86 100644
--- a/Framework/Algorithms/test/TransposeTest.h
+++ b/Framework/Algorithms/test/TransposeTest.h
@@ -2,7 +2,6 @@
 #define TRANSPOSETEST_H_
 
 #include <cxxtest/TestSuite.h>
-#include <boost/math/special_functions/fpclassify.hpp>
 
 #include "MantidTestHelpers/WorkspaceCreationHelper.h"
 
@@ -121,8 +120,8 @@ public:
     TS_ASSERT_EQUALS(outputWS->dataF(0).size(), 4);
     TS_ASSERT_EQUALS(outputWS->dataF(3)[1], inputWS->dataF(1)[3]);
     // Check a nan
-    bool inNan = boost::math::isnan(inputWS->dataY(0)[5]);
-    bool outNan = boost::math::isnan(outputWS->dataY(5)[0]);
+    bool inNan = std::isnan(inputWS->dataY(0)[5]);
+    bool outNan = std::isnan(outputWS->dataY(5)[0]);
     TS_ASSERT_EQUALS(outNan, inNan);
 
     delete transpose;
diff --git a/Framework/Algorithms/test/WorkflowAlgorithmRunnerTest.h b/Framework/Algorithms/test/WorkflowAlgorithmRunnerTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..d72182ee6dcac587a89c9a190baf868f4a9d7b5e
--- /dev/null
+++ b/Framework/Algorithms/test/WorkflowAlgorithmRunnerTest.h
@@ -0,0 +1,256 @@
+#ifndef MANTID_ALGORITHMS_WORKFLOWALGORITHMRUNNERTEST_H_
+#define MANTID_ALGORITHMS_WORKFLOWALGORITHMRUNNERTEST_H_
+
+#include <cxxtest/TestSuite.h>
+
+#include "MantidAlgorithms/WorkflowAlgorithmRunner.h"
+
+#include "MantidAlgorithms/DeleteWorkspace.h"
+#include "MantidAPI/ITableWorkspace.h"
+#include "MantidAPI/MatrixWorkspace.h"
+#include "MantidAPI/WorkspaceFactory.h"
+
+using Mantid::Algorithms::DeleteWorkspace;
+using Mantid::Algorithms::WorkflowAlgorithmRunner;
+
+using namespace Mantid::API;
+
+const static double DEFAULT_TEST_VALUE = 2;
+
+class WorkflowAlgorithmRunnerTest : public CxxTest::TestSuite {
+public:
+  // This pair of boilerplate methods prevent the suite being created statically
+  // This means the constructor isn't called when running other tests
+  static WorkflowAlgorithmRunnerTest *createSuite() {
+    return new WorkflowAlgorithmRunnerTest();
+  }
+  static void destroySuite(WorkflowAlgorithmRunnerTest *suite) { delete suite; }
+
+  WorkflowAlgorithmRunnerTest() {
+    auto ioMap = WorkspaceFactory::Instance().createTable();
+    ioMap->addColumn("str", "InputWorkspace");
+    ioMap->setRowCount(1);
+    ioMap->cell<std::string>(0, 0) = "OutputWorkspace";
+    m_ioMapForScale = ioMap;
+  }
+
+  ~WorkflowAlgorithmRunnerTest() { deleteWorkspace(m_ioMapForScale); }
+
+  void test_CircularDependenciesThrows() {
+    auto setupTable = createSetupTableForScale();
+    setupTable->setRowCount(2);
+    setupTable->getRef<std::string>("Id", 0) = "flow1";
+    setupTable->getRef<std::string>("InputWorkspace", 0) = "out2";
+    setupTable->getRef<std::string>("OutputWorkspace", 0) = "out1";
+    const double scaling1 = 0.03;
+    setupTable->getRef<double>("Factor", 0) = scaling1;
+    setupTable->getRef<std::string>("Id", 1) = "flow2";
+    setupTable->getRef<std::string>("InputWorkspace", 1) = "out1";
+    setupTable->getRef<std::string>("OutputWorkspace", 1) = "out2";
+    const double scaling2 = 0.09;
+    setupTable->getRef<double>("Factor", 1) = scaling2;
+    WorkflowAlgorithmRunner algorithm;
+    algorithm.setRethrows(true);
+    TS_ASSERT_THROWS_NOTHING(algorithm.initialize())
+    TS_ASSERT(algorithm.isInitialized())
+    TS_ASSERT_THROWS_NOTHING(algorithm.setProperty("Algorithm", "Scale"))
+    TS_ASSERT_THROWS_NOTHING(algorithm.setProperty("SetupTable", setupTable))
+    TS_ASSERT_THROWS_NOTHING(
+        algorithm.setProperty("InputOutputMap", m_ioMapForScale))
+    TS_ASSERT_THROWS_ANYTHING(algorithm.execute())
+    TS_ASSERT(!algorithm.isExecuted())
+  }
+
+  void test_ComplexRun() {
+    // Data flow: input3->id3->id2->id1->output1; input3->id3->id5->output5;
+    // input4->id4->output4
+    auto setupTable = createSetupTableForScale();
+    setupTable->setRowCount(5);
+    setupTable->getRef<std::string>("Id", 0) = "id1";
+    setupTable->getRef<std::string>("InputWorkspace", 0) = "id2";
+    setupTable->getRef<std::string>("OutputWorkspace", 0) = "\"output1\"";
+    const double scaling1 = 2.79;
+    setupTable->getRef<double>("Factor", 0) = scaling1;
+    setupTable->getRef<std::string>("Id", 1) = "id2";
+    setupTable->getRef<std::string>("InputWorkspace", 1) = "id3";
+    setupTable->getRef<std::string>("OutputWorkspace", 1) = "output2";
+    const double scaling2 = -72.5;
+    setupTable->getRef<double>("Factor", 1) = scaling2;
+    setupTable->getRef<std::string>("Id", 2) = "id3";
+    setupTable->getRef<std::string>("InputWorkspace", 2) = "\"input3\"";
+    setupTable->getRef<std::string>("OutputWorkspace", 2) = "output3";
+    const double scaling3 = 0.23;
+    setupTable->getRef<double>("Factor", 2) = scaling3;
+    setupTable->getRef<std::string>("Id", 3) = "id4";
+    setupTable->getRef<std::string>("InputWorkspace", 3) = "\"input4\"";
+    setupTable->getRef<std::string>("OutputWorkspace", 3) = "\"output4\"";
+    const double scaling4 = 4.01;
+    setupTable->getRef<double>("Factor", 3) = scaling4;
+    setupTable->getRef<std::string>("Id", 4) = "id5";
+    setupTable->getRef<std::string>("InputWorkspace", 4) = "id3";
+    setupTable->getRef<std::string>("OutputWorkspace", 4) = "\"output5\"";
+    const double scaling5 = -5.54;
+    setupTable->getRef<double>("Factor", 4) = scaling5;
+    auto inputWs3 = createTestWorkspace("input3");
+    auto inputWs4 = createTestWorkspace("input4");
+    WorkflowAlgorithmRunner algorithm;
+    algorithm.setRethrows(true);
+    TS_ASSERT_THROWS_NOTHING(algorithm.initialize())
+    TS_ASSERT(algorithm.isInitialized())
+    TS_ASSERT_THROWS_NOTHING(algorithm.setProperty("Algorithm", "Scale"))
+    TS_ASSERT_THROWS_NOTHING(algorithm.setProperty("SetupTable", setupTable))
+    TS_ASSERT_THROWS_NOTHING(
+        algorithm.setProperty("InputOutputMap", m_ioMapForScale))
+    TS_ASSERT_THROWS_NOTHING(algorithm.execute())
+    TS_ASSERT(algorithm.isExecuted())
+    assertOutputWorkspace("output1", scaling3 * scaling2 * scaling1);
+    assertOutputWorkspace("output2", scaling3 * scaling2);
+    assertOutputWorkspace("output3", scaling3);
+    assertOutputWorkspace("output4", scaling4);
+    assertOutputWorkspace("output5", scaling3 * scaling5);
+    deleteWorkspace(inputWs3);
+    deleteWorkspace(inputWs4);
+  }
+
+  void test_ForcedOutputAsInput() {
+    // Data flow: input->spider2->output2; input->spider2->mantid1->output1
+    auto setupTable = createSetupTableForScale();
+    setupTable->setRowCount(2);
+    setupTable->getRef<std::string>("Id", 0) = "mantid1";
+    setupTable->getRef<std::string>("InputWorkspace", 0) = "spider2";
+    setupTable->getRef<std::string>("OutputWorkspace", 0) = "\"output1\"";
+    const double scaling1 = 42;
+    setupTable->getRef<double>("Factor", 0) = scaling1;
+    setupTable->getRef<std::string>("Id", 1) = "spider2";
+    setupTable->getRef<std::string>("InputWorkspace", 1) = "\"input\"";
+    setupTable->getRef<std::string>("OutputWorkspace", 1) = "\"output2\"";
+    const double scaling2 = 2.3;
+    setupTable->getRef<double>("Factor", 1) = scaling2;
+    auto inputWs = createTestWorkspace("input");
+    WorkflowAlgorithmRunner algorithm;
+    algorithm.setRethrows(true);
+    TS_ASSERT_THROWS_NOTHING(algorithm.initialize())
+    TS_ASSERT(algorithm.isInitialized())
+    TS_ASSERT_THROWS_NOTHING(algorithm.setProperty("Algorithm", "Scale"))
+    TS_ASSERT_THROWS_NOTHING(algorithm.setProperty("SetupTable", setupTable))
+    TS_ASSERT_THROWS_NOTHING(
+        algorithm.setProperty("InputOutputMap", m_ioMapForScale))
+    TS_ASSERT_THROWS_NOTHING(algorithm.execute())
+    TS_ASSERT(algorithm.isExecuted())
+    assertOutputWorkspace("output1", scaling2 * scaling1);
+    assertOutputWorkspace("output2", scaling2);
+    deleteWorkspace(inputWs);
+  }
+
+  void test_Init() {
+    WorkflowAlgorithmRunner algorithm;
+    algorithm.setRethrows(true);
+    TS_ASSERT_THROWS_NOTHING(algorithm.initialize())
+    TS_ASSERT(algorithm.isInitialized())
+  }
+
+  void test_Name() {
+    WorkflowAlgorithmRunner algorithm;
+    TS_ASSERT_EQUALS(algorithm.name(), "WorkflowAlgorithmRunner")
+  }
+
+  void test_NonExistentInputThrows() {
+    auto setupTable = createSetupTableForScale();
+    setupTable->setRowCount(1);
+    setupTable->getRef<std::string>("Id", 0) = "failingJob";
+    setupTable->getRef<std::string>("InputWorkspace", 0) = "notInSetupTable";
+    setupTable->getRef<std::string>("OutputWorkspace", 0) = "\"output1\"";
+    WorkflowAlgorithmRunner algorithm;
+    algorithm.setRethrows(true);
+    TS_ASSERT_THROWS_NOTHING(algorithm.initialize())
+    TS_ASSERT(algorithm.isInitialized())
+    TS_ASSERT_THROWS_NOTHING(algorithm.setProperty("Algorithm", "Scale"))
+    TS_ASSERT_THROWS_NOTHING(algorithm.setProperty("SetupTable", setupTable))
+    TS_ASSERT_THROWS_NOTHING(
+        algorithm.setProperty("InputOutputMap", m_ioMapForScale))
+    TS_ASSERT_THROWS_ANYTHING(algorithm.execute())
+    TS_ASSERT(!algorithm.isExecuted())
+  }
+
+  void test_SimpleRun() {
+    auto setupTable = createSetupTableForScale();
+    setupTable->setRowCount(1);
+    setupTable->getRef<std::string>("Id", 0) = "id1";
+    setupTable->getRef<std::string>("InputWorkspace", 0) = "\"input\"";
+    setupTable->getRef<std::string>("OutputWorkspace", 0) = "\"output\"";
+    const double factor = 0.66;
+    setupTable->getRef<double>("Factor", 0) = factor;
+    auto inputWs = createTestWorkspace("input");
+    WorkflowAlgorithmRunner algorithm;
+    algorithm.setRethrows(true);
+    TS_ASSERT_THROWS_NOTHING(algorithm.initialize())
+    TS_ASSERT(algorithm.isInitialized())
+    TS_ASSERT_THROWS_NOTHING(algorithm.setProperty("Algorithm", "Scale"))
+    TS_ASSERT_THROWS_NOTHING(algorithm.setProperty("SetupTable", setupTable))
+    TS_ASSERT_THROWS_NOTHING(
+        algorithm.setProperty("InputOutputMap", m_ioMapForScale))
+    TS_ASSERT_THROWS_NOTHING(algorithm.execute())
+    TS_ASSERT(algorithm.isExecuted())
+    assertOutputWorkspace("output", factor);
+    deleteWorkspace(inputWs);
+    deleteWorkspace(setupTable);
+  }
+
+  void test_UnsetPropertiesThrows() {
+    WorkflowAlgorithmRunner algorithm;
+    algorithm.setRethrows(true);
+    TS_ASSERT_THROWS_NOTHING(algorithm.initialize())
+    TS_ASSERT_THROWS_ANYTHING(algorithm.execute())
+    TS_ASSERT(!algorithm.isExecuted())
+  }
+
+  void test_Version() {
+    WorkflowAlgorithmRunner algorithm;
+    TS_ASSERT_EQUALS(algorithm.version(), 1)
+  }
+
+private:
+  ITableWorkspace_sptr m_ioMapForScale;
+
+  static void assertOutputWorkspace(const std::string &name,
+                                    const double factor) {
+    TS_ASSERT(AnalysisDataService::Instance().doesExist(name))
+    auto outputWs =
+        AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(name);
+    TS_ASSERT_EQUALS(outputWs->y(0)[0], DEFAULT_TEST_VALUE * factor)
+    deleteWorkspace(outputWs);
+  }
+
+  static ITableWorkspace_sptr createSetupTableForScale() {
+    auto table = WorkspaceFactory::Instance().createTable();
+    table->addColumn("str", "Id");
+    table->addColumn("str", "InputWorkspace");
+    table->addColumn("str", "OutputWorkspace");
+    table->addColumn("double", "Factor");
+    // The "Operation" property will be left to its default value and thus
+    // omitted here.
+    return table;
+  }
+
+  static MatrixWorkspace_sptr createTestWorkspace(const std::string &name) {
+    auto ws = WorkspaceFactory::Instance().create("Workspace2D", 1, 1, 1);
+    auto &es = ws->mutableE(0);
+    auto &xs = ws->mutableX(0);
+    auto &ys = ws->mutableY(0);
+    es[0] = std::sqrt(DEFAULT_TEST_VALUE);
+    xs[0] = 0;
+    ys[0] = DEFAULT_TEST_VALUE;
+    AnalysisDataService::Instance().add(name, ws);
+    return ws;
+  }
+
+  template <typename T_sptr> static void deleteWorkspace(T_sptr ws) {
+    DeleteWorkspace deleter;
+    deleter.setChild(true);
+    deleter.initialize();
+    deleter.setProperty("Workspace", ws);
+    deleter.execute();
+  }
+};
+
+#endif /* MANTID_ALGORITHMS_WORKFLOWALGORITHMRUNNERTEST_H_ */
diff --git a/Framework/Crystal/src/IntegratePeaksHybrid.cpp b/Framework/Crystal/src/IntegratePeaksHybrid.cpp
index 49fbf042af26883d13c512403281ee78d983ebd7..7ded565d9a703f00a78bcecc81a4efab9a34c9b3 100644
--- a/Framework/Crystal/src/IntegratePeaksHybrid.cpp
+++ b/Framework/Crystal/src/IntegratePeaksHybrid.cpp
@@ -51,7 +51,7 @@
 #include "MantidDataObjects/PeaksWorkspace.h"
 
 #include <boost/format.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 using namespace Mantid::API;
 using namespace Mantid::Kernel;
@@ -232,7 +232,7 @@ void IntegratePeaksHybrid::exec() {
     const Mantid::signal_t signalValue = localProjection.signalAtPeakCenter(
         peak); // No normalization when extracting label ids!
 
-    if (boost::math::isnan(signalValue)) {
+    if (std::isnan(signalValue)) {
       g_log.warning()
           << "Warning: image for integration is off edge of detector for peak "
           << i << '\n';
diff --git a/Framework/Crystal/src/IntegratePeaksUsingClusters.cpp b/Framework/Crystal/src/IntegratePeaksUsingClusters.cpp
index 4def22120cce86e09bb4ed82b0c57c2435bd9cb9..52f214f8939aa11e7707f553ba50f67c2967b927 100644
--- a/Framework/Crystal/src/IntegratePeaksUsingClusters.cpp
+++ b/Framework/Crystal/src/IntegratePeaksUsingClusters.cpp
@@ -13,7 +13,7 @@
 #include "MantidKernel/Utils.h"
 #include "MantidDataObjects/PeaksWorkspace.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 using namespace Mantid::API;
 using namespace Mantid::Kernel;
@@ -156,7 +156,7 @@ void IntegratePeaksUsingClusters::exec() {
     Geometry::IPeak &peak = peakWS->getPeak(i);
     const Mantid::signal_t signalValue = projection.signalAtPeakCenter(
         peak); // No normalization when extracting label ids!
-    if (boost::math::isnan(signalValue)) {
+    if (std::isnan(signalValue)) {
       g_log.warning()
           << "Warning: image for integration is off edge of detector for peak "
           << i << '\n';
diff --git a/Framework/Crystal/src/PeakIntegration.cpp b/Framework/Crystal/src/PeakIntegration.cpp
index e6c729e6004ab378006fef50783eda63c72594ee..2f160d448df7e0f9a7cdd3d420c4d583de6bd11e 100644
--- a/Framework/Crystal/src/PeakIntegration.cpp
+++ b/Framework/Crystal/src/PeakIntegration.cpp
@@ -11,7 +11,7 @@
 #include "MantidKernel/ArrayProperty.h"
 #include "MantidKernel/VisibleWhenProperty.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 #include <boost/math/special_functions/round.hpp>
 
 namespace Mantid {
@@ -250,7 +250,7 @@ void PeakIntegration::exec() {
 
       // Calculate intensity
       for (iTOF = 0; iTOF < n; iTOF++)
-        if (!boost::math::isnan(y[iTOF]) && !boost::math::isinf(y[iTOF]))
+        if (std::isfinite(y[iTOF]))
           I += y[iTOF];
     } else
       for (iTOF = TOFmin; iTOF <= TOFmax; iTOF++)
diff --git a/Framework/Crystal/src/SCDCalibratePanels.cpp b/Framework/Crystal/src/SCDCalibratePanels.cpp
index f3628672655863c334c5ffca7729294de1a0d90e..a7906dac3469d903758b985a46d42083f3fd9740 100644
--- a/Framework/Crystal/src/SCDCalibratePanels.cpp
+++ b/Framework/Crystal/src/SCDCalibratePanels.cpp
@@ -196,10 +196,10 @@ void SCDCalibratePanels::exec() {
             "Workspace2D", 1, 3 * nBankPeaks, 3 * nBankPeaks));
 
     auto &outSpec = q3DWS->getSpectrum(0);
-    MantidVec &yVec = outSpec.dataY();
-    MantidVec &eVec = outSpec.dataE();
-    MantidVec &xVec = outSpec.dataX();
-    std::fill(yVec.begin(), yVec.end(), 0.0);
+    auto &yVec = outSpec.mutableY();
+    auto &eVec = outSpec.mutableE();
+    auto &xVec = outSpec.mutableX();
+    yVec = 0.0;
 
     for (int i = 0; i < nBankPeaks; i++) {
       const DataObjects::Peak &peak = local->getPeak(i);
@@ -381,12 +381,12 @@ void SCDCalibratePanels::exec() {
     ColWksp->getSpectrum(i).setSpectrumNo(specnum_t(bank));
     RowWksp->getSpectrum(i).setSpectrumNo(specnum_t(bank));
     TofWksp->getSpectrum(i).setSpectrumNo(specnum_t(bank));
-    Mantid::MantidVec &ColX = ColWksp->dataX(i);
-    Mantid::MantidVec &ColY = ColWksp->dataY(i);
-    Mantid::MantidVec &RowX = RowWksp->dataX(i);
-    Mantid::MantidVec &RowY = RowWksp->dataY(i);
-    Mantid::MantidVec &TofX = TofWksp->dataX(i);
-    Mantid::MantidVec &TofY = TofWksp->dataY(i);
+    auto &ColX = ColWksp->mutableX(i);
+    auto &ColY = ColWksp->mutableY(i);
+    auto &RowX = RowWksp->mutableX(i);
+    auto &RowY = RowWksp->mutableY(i);
+    auto &TofX = TofWksp->mutableX(i);
+    auto &TofY = TofWksp->mutableY(i);
     int icount = 0;
     for (int j = 0; j < nPeaks; j++) {
       Peak peak = peaksWs->getPeak(j);
@@ -434,10 +434,10 @@ void SCDCalibratePanels::findL1(int nPeaks,
                                                3 * nPeaks));
 
   auto &outSp = L1WS->getSpectrum(0);
-  MantidVec &yVec = outSp.dataY();
-  MantidVec &eVec = outSp.dataE();
-  MantidVec &xVec = outSp.dataX();
-  std::fill(yVec.begin(), yVec.end(), 0.0);
+  auto &yVec = outSp.mutableY();
+  auto &eVec = outSp.mutableE();
+  auto &xVec = outSp.mutableX();
+  yVec = 0.0;
 
   for (int i = 0; i < nPeaks; i++) {
     const DataObjects::Peak &peak = peaksWs->getPeak(i);
diff --git a/Framework/Crystal/src/SaveHKL.cpp b/Framework/Crystal/src/SaveHKL.cpp
index e1d0ab692e3d21f30294c3032c665bef12d6be27..727c8ba9e1bab86b12bdbff28a08fd66f0b2bcb5 100644
--- a/Framework/Crystal/src/SaveHKL.cpp
+++ b/Framework/Crystal/src/SaveHKL.cpp
@@ -11,7 +11,7 @@
 #include <fstream>
 
 #include <Poco/File.h>
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 using namespace Mantid::Geometry;
 using namespace Mantid::DataObjects;
@@ -321,8 +321,8 @@ void SaveHKL::exec() {
       for (auto wi : ids) {
 
         Peak &p = peaks[wi];
-        if (p.getIntensity() == 0.0 || boost::math::isnan(p.getIntensity()) ||
-            boost::math::isnan(p.getSigmaIntensity())) {
+        if (p.getIntensity() == 0.0 || !(std::isfinite(p.getIntensity())) ||
+            !(std::isfinite(p.getSigmaIntensity()))) {
           banned.insert(wi);
           continue;
         }
diff --git a/Framework/Crystal/src/SaveIsawPeaks.cpp b/Framework/Crystal/src/SaveIsawPeaks.cpp
index 5ab5947bf8e1439f5654b0aaf4ba3cb868d40189..ed1cb17d70b92f571271b6abf44c2bca43013eee 100644
--- a/Framework/Crystal/src/SaveIsawPeaks.cpp
+++ b/Framework/Crystal/src/SaveIsawPeaks.cpp
@@ -351,7 +351,7 @@ void SaveIsawPeaks::exec() {
           Workspace2D_sptr wsProfile2D = getProperty("ProfileWorkspace");
           if (wsProfile2D) {
             out << "8";
-            const Mantid::MantidVec &yValues = wsProfile2D->readY(wi);
+            const auto &yValues = wsProfile2D->y(wi);
             for (size_t j = 0; j < yValues.size(); j++) {
               out << std::setw(8) << static_cast<int>(yValues[j]);
               if ((j + 1) % 10 == 0) {
diff --git a/Framework/Crystal/src/SaveLauenorm.cpp b/Framework/Crystal/src/SaveLauenorm.cpp
index 22d4b4a654f80eaf8f07b1fb827a4dca60c73cb9..780faf5b3efc7397654ee0ef84949b65921e97e1 100644
--- a/Framework/Crystal/src/SaveLauenorm.cpp
+++ b/Framework/Crystal/src/SaveLauenorm.cpp
@@ -10,7 +10,7 @@
 #include <fstream>
 #include <Poco/File.h>
 #include <Poco/Path.h>
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 using namespace Mantid::Geometry;
 using namespace Mantid::DataObjects;
@@ -119,8 +119,7 @@ void SaveLauenorm::exec() {
     Peak &p = peaks[wi];
     double intensity = p.getIntensity();
     double sigI = p.getSigmaIntensity();
-    if (intensity == 0.0 || boost::math::isnan(intensity) ||
-        boost::math::isnan(sigI))
+    if (intensity == 0.0 || !(std::isfinite(sigI)))
       continue;
     if (minIsigI != EMPTY_DBL() && intensity < std::abs(minIsigI * sigI))
       continue;
diff --git a/Framework/Crystal/src/TOFExtinction.cpp b/Framework/Crystal/src/TOFExtinction.cpp
index 370c0563c756e520c7de06871de85064f7e109a1..7c6065667e837795b3aa1c8b68c37e52f9749f05 100644
--- a/Framework/Crystal/src/TOFExtinction.cpp
+++ b/Framework/Crystal/src/TOFExtinction.cpp
@@ -7,7 +7,7 @@
 #include "MantidKernel/Utils.h"
 #include "MantidKernel/ListValidator.h"
 #include <fstream>
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 using namespace Mantid::Geometry;
 using namespace Mantid::DataObjects;
@@ -168,7 +168,7 @@ void TOFExtinction::exec() {
     double ys = fsq / y_corr;
     // std::cout << fsq << "  " << y_corr<<"  "<<wl<<"  "<<twoth<<"  "<<tbar<< "
     // " << ys <<"\n";
-    if (!boost::math::isnan(ys))
+    if (!std::isnan(ys))
       peak1.setIntensity(ys);
     else
       peak1.setIntensity(0.0);
diff --git a/Framework/Crystal/test/PeakClusterProjectionTest.h b/Framework/Crystal/test/PeakClusterProjectionTest.h
index a80e7935e7af6908a4350163e94dddecf7f0378a..2270e6b1f4c28239c932272528dbf4d4458d78b5 100644
--- a/Framework/Crystal/test/PeakClusterProjectionTest.h
+++ b/Framework/Crystal/test/PeakClusterProjectionTest.h
@@ -16,8 +16,7 @@
 #include "MantidTestHelpers/ComponentCreationHelper.h"
 #include "MantidKernel/UnitLabelTypes.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
-#include <math.h>
+#include <cmath>
 
 using namespace Mantid::API;
 using namespace Mantid::Geometry;
@@ -139,7 +138,7 @@ public:
     Mantid::signal_t value = projection.signalAtPeakCenter(outOfBoundsPeak);
 
     TSM_ASSERT("Should indicate is out of bounds via a NAN.",
-               boost::math::isnan(value));
+               std::isnan(value));
   }
 
   void test_labelAtPeakCenter_with_peak_at_0_0_0() {
@@ -207,7 +206,7 @@ public:
 
     PeakClusterProjection projection(inWS);
     Mantid::signal_t value = projection.signalAtPeakCenter(outOfBoundsPeak);
-    TS_ASSERT(boost::math::isnan(value));
+    TS_ASSERT(std::isnan(value));
   }
 };
 
diff --git a/Framework/Crystal/test/PeakHKLErrorsTest.h b/Framework/Crystal/test/PeakHKLErrorsTest.h
index 56f0728381ce06b31b14ede019103ac6dcc40b05..f7cafeed10e2a2d3d22a3fa1cdf8e1ee298c4005 100644
--- a/Framework/Crystal/test/PeakHKLErrorsTest.h
+++ b/Framework/Crystal/test/PeakHKLErrorsTest.h
@@ -35,6 +35,8 @@ public:
   void set(size_t iY, size_t iP, double value) override { M[iP][iY] = value; }
 
   double get(size_t iY, size_t iP) override { return M[iP][iY]; }
+
+  void zero() override { M.zeroMatrix(); }
 };
 
 class PeakHKLErrorsTest : public CxxTest::TestSuite {
diff --git a/Framework/CurveFitting/CMakeLists.txt b/Framework/CurveFitting/CMakeLists.txt
index 46e4a44d033e6f3fdd3f34768217920242c5c0b3..dbe837a5f5c40d24984749c0770d7d526def5359 100644
--- a/Framework/CurveFitting/CMakeLists.txt
+++ b/Framework/CurveFitting/CMakeLists.txt
@@ -109,6 +109,7 @@ set ( SRC_FILES
 	src/Functions/StretchExp.cpp
 	src/Functions/StretchExpMuon.cpp
 	src/Functions/TabulatedFunction.cpp
+	src/Functions/TeixeiraWaterSQE.cpp
 	src/Functions/ThermalNeutronBk2BkExpAlpha.cpp
 	src/Functions/ThermalNeutronBk2BkExpBeta.cpp
 	src/Functions/ThermalNeutronBk2BkExpConvPVoigt.cpp
@@ -255,6 +256,7 @@ set ( INC_FILES
 	inc/MantidCurveFitting/Functions/StretchExp.h
 	inc/MantidCurveFitting/Functions/StretchExpMuon.h
 	inc/MantidCurveFitting/Functions/TabulatedFunction.h
+	inc/MantidCurveFitting/Functions/TeixeiraWaterSQE.h
 	inc/MantidCurveFitting/Functions/ThermalNeutronBk2BkExpAlpha.h
 	inc/MantidCurveFitting/Functions/ThermalNeutronBk2BkExpBeta.h
 	inc/MantidCurveFitting/Functions/ThermalNeutronBk2BkExpConvPVoigt.h
@@ -392,6 +394,7 @@ set ( TEST_FILES
 	Functions/StretchExpMuonTest.h
 	Functions/StretchExpTest.h
 	Functions/TabulatedFunctionTest.h
+    Functions/TeixeiraWaterSQETest.h
 	Functions/ThermalNeutronBk2BkExpAlphaTest.h
 	Functions/ThermalNeutronBk2BkExpBetaTest.h
 	Functions/ThermalNeutronBk2BkExpConvPVoigtTest.h
diff --git a/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/DTRSMinimizer.h b/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/DTRSMinimizer.h
index e48acad705be3453c3de86262bdc85e5f7d35734..6236656bd2acc5951e150cc8722f7de979b8f587 100644
--- a/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/DTRSMinimizer.h
+++ b/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/DTRSMinimizer.h
@@ -38,12 +38,13 @@ public:
   std::string name() const override;
 
 private:
-  void
-  calculate_step(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
-                 const DoubleFortranMatrix &hf, const DoubleFortranVector &g,
-                 double Delta, DoubleFortranVector &d, double &normd,
-                 const NLLS::nlls_options &options, NLLS::nlls_inform &inform,
-                 NLLS::calculate_step_work &w) override;
+  void calculateStep(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
+                     const DoubleFortranMatrix &hf,
+                     const DoubleFortranVector &g, double Delta,
+                     DoubleFortranVector &d, double &normd,
+                     const NLLS::nlls_options &options,
+                     NLLS::nlls_inform &inform,
+                     NLLS::calculate_step_work &w) override;
 };
 
 } // namespace FuncMinimisers
diff --git a/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/MoreSorensenMinimizer.h b/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/MoreSorensenMinimizer.h
index 167ef5a336e4264c7cf42950a1c550a4ff2be687..05e881e9d50ce0ecdb452de60872099a4c62bf69 100644
--- a/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/MoreSorensenMinimizer.h
+++ b/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/MoreSorensenMinimizer.h
@@ -41,12 +41,13 @@ public:
   std::string name() const override;
 
 private:
-  void
-  calculate_step(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
-                 const DoubleFortranMatrix &hf, const DoubleFortranVector &g,
-                 double Delta, DoubleFortranVector &d, double &normd,
-                 const NLLS::nlls_options &options, NLLS::nlls_inform &inform,
-                 NLLS::calculate_step_work &w) override;
+  void calculateStep(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
+                     const DoubleFortranMatrix &hf,
+                     const DoubleFortranVector &g, double Delta,
+                     DoubleFortranVector &d, double &normd,
+                     const NLLS::nlls_options &options,
+                     NLLS::nlls_inform &inform,
+                     NLLS::calculate_step_work &w) override;
 };
 
 } // namespace FuncMinimisers
diff --git a/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/TrustRegionMinimizer.h b/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/TrustRegionMinimizer.h
index 011fdf9bb8e56b634ccfe1883adcef4a69950a7f..856ad557055a000fb1a68ee0178afb50d65060f8 100644
--- a/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/TrustRegionMinimizer.h
+++ b/Framework/CurveFitting/inc/MantidCurveFitting/FuncMinimizers/TrustRegionMinimizer.h
@@ -51,19 +51,19 @@ public:
 
 private:
   /// Evaluate the fitting function and calculate the residuals.
-  void eval_F(const DoubleFortranVector &x, DoubleFortranVector &f) const;
+  void evalF(const DoubleFortranVector &x, DoubleFortranVector &f) const;
   /// Evaluate the Jacobian
-  void eval_J(const DoubleFortranVector &x, DoubleFortranMatrix &J) const;
+  void evalJ(const DoubleFortranVector &x, DoubleFortranMatrix &J) const;
   /// Evaluate the Hessian
-  void eval_HF(const DoubleFortranVector &x, const DoubleFortranVector &f,
-               DoubleFortranMatrix &h) const;
+  void evalHF(const DoubleFortranVector &x, const DoubleFortranVector &f,
+              DoubleFortranMatrix &h) const;
   /// Find a correction vector to the parameters.
   virtual void
-  calculate_step(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
-                 const DoubleFortranMatrix &hf, const DoubleFortranVector &g,
-                 double Delta, DoubleFortranVector &d, double &normd,
-                 const NLLS::nlls_options &options, NLLS::nlls_inform &inform,
-                 NLLS::calculate_step_work &w) = 0;
+  calculateStep(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
+                const DoubleFortranMatrix &hf, const DoubleFortranVector &g,
+                double Delta, DoubleFortranVector &d, double &normd,
+                const NLLS::nlls_options &options, NLLS::nlls_inform &inform,
+                NLLS::calculate_step_work &w) = 0;
 
   /// Stored cost function
   boost::shared_ptr<CostFunctions::CostFuncLeastSquares> m_leastSquares;
diff --git a/Framework/CurveFitting/inc/MantidCurveFitting/Functions/TeixeiraWaterSQE.h b/Framework/CurveFitting/inc/MantidCurveFitting/Functions/TeixeiraWaterSQE.h
new file mode 100644
index 0000000000000000000000000000000000000000..1b812d45bab61f7de2333cd2765c11f3e4154b94
--- /dev/null
+++ b/Framework/CurveFitting/inc/MantidCurveFitting/Functions/TeixeiraWaterSQE.h
@@ -0,0 +1,67 @@
+#ifndef MANTID_TEIXEIRAWATERSQE_H_
+#define MANTID_TEIXEIRAWATERSQE_H_
+
+// Mantid Coding standars <http://www.mantidproject.org/Coding_Standards>
+// Mantid Headers from the same project
+// Mantid headers from other projects
+#include "MantidAPI/ParamFunction.h"
+#include "MantidAPI/IFunction1D.h"
+// 3rd party library headers (N/A)
+// standard library headers (N/A)
+
+namespace Mantid {
+namespace CurveFitting {
+namespace Functions {
+/**
+@author Jose Borreguero, NScD
+@date 25/09/2016
+
+Copyright &copy; 2007-8 ISIS Rutherford Appleton Laboratory, NScD Oak Ridge
+National Laboratory & European Spallation Source
+
+This file is part of Mantid.
+
+Mantid is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3 of the License, or
+(at your option) any later version.
+
+Mantid is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+File change history is stored at: <https://github.com/mantidproject/mantid>
+Code Documentation is available at: <http://doxygen.mantidproject.org>
+*/
+
+/**
+ * @brief Teixeira's model to describe the translational diffusion of water
+ */
+class DLLExport TeixeiraWaterSQE : public API::ParamFunction,
+                                   public API::IFunction1D {
+public:
+  TeixeiraWaterSQE();
+
+  /// overwrite IFunction base class methods
+  void init() override;
+
+  /// overwrite IFunction base class methods
+  std::string name() const override { return "TeixeiraWaterSQE"; }
+
+  /// overwrite IFunction base class methods
+  const std::string category() const override { return "QuasiElastic"; }
+
+protected:
+  void function1D(double *out, const double *xValues,
+                  const size_t nData) const override;
+};
+
+} // namespace Functions
+} // namespace CurveFitting
+} // namespace Mantid
+
+#endif // MANTID_TEIXEIRAWATERSQE_H_
diff --git a/Framework/CurveFitting/inc/MantidCurveFitting/GSLJacobian.h b/Framework/CurveFitting/inc/MantidCurveFitting/GSLJacobian.h
index b0fd460b6a98519e10d945ad0ac2551e9867a9eb..bfb3628da6cee1260ce005e4b39ff843ee89526b 100644
--- a/Framework/CurveFitting/inc/MantidCurveFitting/GSLJacobian.h
+++ b/Framework/CurveFitting/inc/MantidCurveFitting/GSLJacobian.h
@@ -93,6 +93,8 @@ public:
       return m_J.get(iY, j);
     return 0.0;
   }
+  /// overwrite base method
+  void zero() override { m_J.zero(); }
 };
 
 /// The implementation of Jacobian
@@ -136,6 +138,8 @@ public:
       return gsl_matrix_get(m_J, iY, j);
     return 0.0;
   }
+  /// overwrite base method
+  void zero() override { gsl_matrix_set_zero(m_J); }
 };
 
 } // namespace CurveFitting
diff --git a/Framework/CurveFitting/inc/MantidCurveFitting/Jacobian.h b/Framework/CurveFitting/inc/MantidCurveFitting/Jacobian.h
index bb9ff2ce4e373046485bf7161028218a6c3a46b2..9fbf274107936a7ad7fefadd7ccfa286911ee7d8 100644
--- a/Framework/CurveFitting/inc/MantidCurveFitting/Jacobian.h
+++ b/Framework/CurveFitting/inc/MantidCurveFitting/Jacobian.h
@@ -88,6 +88,8 @@ public:
     }
     return m_data[iY * m_np + iP];
   }
+  /// overwrite base method
+  void zero() override { m_data.assign(m_data.size(), 0.0); }
 };
 
 } // namespace CurveFitting
diff --git a/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/TrustRegion.h b/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/TrustRegion.h
index 69dc2f1c8439e52b93a3fc4cc940597911aff7f9..cf02ffcb532276fb59e94e67353bae143953e81f 100644
--- a/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/TrustRegion.h
+++ b/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/TrustRegion.h
@@ -9,33 +9,31 @@ namespace Mantid {
 namespace CurveFitting {
 namespace NLLS {
 
-void matmult_inner(const DoubleFortranMatrix &J, DoubleFortranMatrix &A);
-void get_svd_J(const DoubleFortranMatrix &J, double &s1, double &sn);
+void matmultInner(const DoubleFortranMatrix &J, DoubleFortranMatrix &A);
+void getSvdJ(const DoubleFortranMatrix &J, double &s1, double &sn);
 double norm2(const DoubleFortranVector &v);
-void mult_J(const DoubleFortranMatrix &J, const DoubleFortranVector &x,
-            DoubleFortranVector &Jx);
-void mult_Jt(const DoubleFortranMatrix &J, const DoubleFortranVector &x,
-             DoubleFortranVector &Jtx);
-double evaluate_model(const DoubleFortranVector &f,
-                      const DoubleFortranMatrix &J,
-                      const DoubleFortranMatrix &hf,
-                      const DoubleFortranVector &d, const nlls_options &options,
-                      evaluate_model_work &w);
-double calculate_rho(double normf, double normfnew, double md,
-                     const nlls_options &options);
-void update_trust_region_radius(double &rho, const nlls_options &options,
-                                nlls_inform &inform, NLLS_workspace &w);
-void rank_one_update(DoubleFortranMatrix &hf, NLLS_workspace &w);
-void test_convergence(double normF, double normJF, double normF0,
-                      double normJF0, const nlls_options &options,
-                      nlls_inform &inform);
-void apply_scaling(const DoubleFortranMatrix &J, DoubleFortranMatrix &A,
-                   DoubleFortranVector &v, apply_scaling_work &w,
-                   const nlls_options &options, nlls_inform &inform);
-void all_eig_symm(const DoubleFortranMatrix &A, DoubleFortranVector &ew,
-                  DoubleFortranMatrix &ev);
+void multJ(const DoubleFortranMatrix &J, const DoubleFortranVector &x,
+           DoubleFortranVector &Jx);
+void multJt(const DoubleFortranMatrix &J, const DoubleFortranVector &x,
+            DoubleFortranVector &Jtx);
+double evaluateModel(const DoubleFortranVector &f, const DoubleFortranMatrix &J,
+                     const DoubleFortranMatrix &hf,
+                     const DoubleFortranVector &d, const nlls_options &options,
+                     evaluate_model_work &w);
+double calculateRho(double normf, double normfnew, double md,
+                    const nlls_options &options);
+void updateTrustRegionRadius(double &rho, const nlls_options &options,
+                             nlls_inform &inform, NLLS_workspace &w);
+void rankOneUpdate(DoubleFortranMatrix &hf, NLLS_workspace &w);
+void testConvergence(double normF, double normJF, double normF0, double normJF0,
+                     const nlls_options &options, nlls_inform &inform);
+void applyScaling(const DoubleFortranMatrix &J, DoubleFortranMatrix &A,
+                  DoubleFortranVector &v, apply_scaling_work &w,
+                  const nlls_options &options, nlls_inform &inform);
+void allEigSymm(const DoubleFortranMatrix &A, DoubleFortranVector &ew,
+                DoubleFortranMatrix &ev);
 // void apply_second_order_info(int n, int m, const DoubleFortranVector& X,
-// NLLS_workspace& w, eval_hf_type eval_HF, params_base_type params,
+// NLLS_workspace& w, eval_hf_type evalHF, params_base_type params,
 //  const nlls_options& options, nlls_inform& inform, const DoubleFortranVector&
 //  weights);
 
diff --git a/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/Workspaces.h b/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/Workspaces.h
index 7644cc0ef46c02666d026cd34e31c51209e0133d..4489594d782c1b17d373638bebcc306f434a97ac 100644
--- a/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/Workspaces.h
+++ b/Framework/CurveFitting/inc/MantidCurveFitting/RalNlls/Workspaces.h
@@ -255,7 +255,7 @@ struct solve_general_work {
   IntFortranVector ipiv;
 };
 
-/// workspace for subroutine evaluate_model
+/// workspace for subroutine evaluateModel
 struct evaluate_model_work {
   DoubleFortranVector Jd, Hd;
   double md_gn = 0.0;
@@ -274,12 +274,12 @@ struct min_eig_symm_work {
   IntFortranVector iwork, ifail;
 };
 
-/// workspace for subroutine all_eig_symm
+/// workspace for subroutine allEigSymm
 struct all_eig_symm_work {
   DoubleFortranVector work;
 };
 
-/// workspace for subrouine apply_scaling
+/// workspace for subrouine applyScaling
 struct apply_scaling_work {
   DoubleFortranVector diag;
   DoubleFortranMatrix ev;
@@ -295,7 +295,7 @@ struct solve_dtrs_work {
   apply_scaling_work apply_scaling_ws;
 };
 
-/// workspace for subroutine more_sorensen
+/// workspace for subroutine moreSorensen
 struct more_sorensen_work {
   DoubleFortranMatrix A, LtL, AplusSigma;
   DoubleFortranVector v, q, y1;
@@ -303,13 +303,13 @@ struct more_sorensen_work {
   apply_scaling_work apply_scaling_ws;
 };
 
-/// workspace for subroutine calculate_step
+/// workspace for subroutine calculateStep
 struct calculate_step_work {
   more_sorensen_work more_sorensen_ws;
   solve_dtrs_work solve_dtrs_ws;
 };
 
-/// workspace for subroutine get_svd_J
+/// workspace for subroutine getSvdJ
 struct get_svd_J_work {
   DoubleFortranVector Jcopy, S, work;
 };
diff --git a/Framework/CurveFitting/src/Algorithms/ConvertToYSpace.cpp b/Framework/CurveFitting/src/Algorithms/ConvertToYSpace.cpp
index e40b2eeb0534d4cee80a18b07950ad48a6f76604..edf74f30767a5e3fc79d12c6d9021e1c3e12a121 100644
--- a/Framework/CurveFitting/src/Algorithms/ConvertToYSpace.cpp
+++ b/Framework/CurveFitting/src/Algorithms/ConvertToYSpace.cpp
@@ -235,12 +235,12 @@ bool ConvertToYSpace::convert(const size_t index) {
     const double k1 = std::sqrt(detPar.efixed /
                                 PhysicalConstants::E_mev_toNeutronWavenumberSq);
 
-    auto &outX = m_outputWS->dataX(index);
-    auto &outY = m_outputWS->dataY(index);
-    auto &outE = m_outputWS->dataE(index);
-    const auto &inX = m_inputWS->readX(index);
-    const auto &inY = m_inputWS->readY(index);
-    const auto &inE = m_inputWS->readE(index);
+    auto &outX = m_outputWS->mutableX(index);
+    auto &outY = m_outputWS->mutableY(index);
+    auto &outE = m_outputWS->mutableE(index);
+    const auto &inX = m_inputWS->x(index);
+    const auto &inY = m_inputWS->y(index);
+    const auto &inE = m_inputWS->e(index);
 
     // The t->y mapping flips the order of the axis so we need to reverse it to
     // have a monotonically increasing axis
@@ -255,8 +255,8 @@ bool ConvertToYSpace::convert(const size_t index) {
       outE[outIndex] = prefactor * inE[j];
 
       if (m_qOutputWS) {
-        m_qOutputWS->dataX(index)[outIndex] = ys;
-        m_qOutputWS->dataY(index)[outIndex] = qs;
+        m_qOutputWS->mutableX(index)[outIndex] = ys;
+        m_qOutputWS->mutableY(index)[outIndex] = qs;
       }
     }
     return true;
diff --git a/Framework/CurveFitting/src/Algorithms/ConvolveWorkspaces.cpp b/Framework/CurveFitting/src/Algorithms/ConvolveWorkspaces.cpp
index 896d7bcbb2185724faa99c7e669f4b4e7a876b3c..bceffdf53e839c586f11f7086b84124da8fc63e7 100644
--- a/Framework/CurveFitting/src/Algorithms/ConvolveWorkspaces.cpp
+++ b/Framework/CurveFitting/src/Algorithms/ConvolveWorkspaces.cpp
@@ -52,9 +52,8 @@ void ConvolveWorkspaces::exec() {
 
   // Cache a few things for later use
   const size_t numHists = ws1->getNumberHistograms();
-  const size_t numBins = ws1->blocksize();
   Workspace2D_sptr outputWS = boost::dynamic_pointer_cast<Workspace2D>(
-      WorkspaceFactory::Instance().create(ws1, numHists, numBins + 1, numBins));
+      WorkspaceFactory::Instance().create(ws1));
 
   // First check that the workspace are the same size
   if (numHists != ws2->getNumberHistograms()) {
@@ -67,10 +66,8 @@ void ConvolveWorkspaces::exec() {
   for (int l = 0; l < static_cast<int>(numHists); ++l) {
     PARALLEL_START_INTERUPT_REGION
     prog->report();
-    const MantidVec &X1 = ws1->readX(l);
-    MantidVec &x = outputWS->dataX(l);
-    x = X1;
-    MantidVec &Yout = outputWS->dataY(l);
+    outputWS->setSharedX(l, ws1->sharedX(l));
+    auto &Yout = outputWS->mutableY(l);
     Convolution conv;
 
     auto res = boost::make_shared<TabulatedFunction>();
@@ -85,7 +82,8 @@ void ConvolveWorkspaces::exec() {
 
     conv.addFunction(fun);
     size_t N = Yout.size();
-    FunctionDomain1DView xView(&x[0], N);
+    const double *firstX = &outputWS->mutableX(l)[0];
+    FunctionDomain1DView xView(firstX, N);
     FunctionValues out(xView);
     conv.function(xView, out);
 
diff --git a/Framework/CurveFitting/src/Algorithms/Fit1D.cpp b/Framework/CurveFitting/src/Algorithms/Fit1D.cpp
index f7dd4b8e816f51e27fa1b11bbbc542d41be7d90e..a9e778a25210801c3cdbaacd49f84d653acbef96 100644
--- a/Framework/CurveFitting/src/Algorithms/Fit1D.cpp
+++ b/Framework/CurveFitting/src/Algorithms/Fit1D.cpp
@@ -65,6 +65,9 @@ public:
       return gsl_matrix_get(m_J, iY, j);
     return 0.0;
   }
+  /** Zero all matrix elements.
+  */
+  void zero() override { gsl_matrix_set_zero(m_J); }
   /// Set the pointer to the GSL's jacobian
   void setJ(gsl_matrix *J) { m_J = J; }
 
diff --git a/Framework/CurveFitting/src/AugmentedLagrangianOptimizer.cpp b/Framework/CurveFitting/src/AugmentedLagrangianOptimizer.cpp
index b4c421b85f2f1510d7668f8045d9cb883d3623a4..93e1d0d7df984b38faee6bd3de615743e74b3a39 100644
--- a/Framework/CurveFitting/src/AugmentedLagrangianOptimizer.cpp
+++ b/Framework/CurveFitting/src/AugmentedLagrangianOptimizer.cpp
@@ -2,7 +2,7 @@
 #include "MantidKernel/Exception.h"
 
 #include <boost/make_shared.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 #include <gsl/gsl_multimin.h>
 
@@ -109,7 +109,7 @@ int relstopX(const std::vector<double> &xvOld, const std::vector<double> &xvNew,
 int relstopX(const std::vector<double> &xvOld, const gsl_vector *xvNew,
              double reltol, double abstol) {
   for (size_t i = 0; i < xvOld.size(); ++i) {
-    if (boost::math::isnan(gsl_vector_get(xvNew, i)))
+    if (std::isnan(gsl_vector_get(xvNew, i)))
       return 1;
     if (!relstop(xvOld[i], gsl_vector_get(xvNew, i), reltol, abstol))
       return 0;
diff --git a/Framework/CurveFitting/src/FitMW.cpp b/Framework/CurveFitting/src/FitMW.cpp
index cdd87d5d4412876bfa0aaccb0621282bc499f3e2..32e1cde460f53d1563e531394fcde0305ffa3ffc 100644
--- a/Framework/CurveFitting/src/FitMW.cpp
+++ b/Framework/CurveFitting/src/FitMW.cpp
@@ -20,7 +20,7 @@
 #include "MantidKernel/EmptyValues.h"
 #include "MantidKernel/Matrix.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 #include <algorithm>
 
 namespace Mantid {
@@ -183,12 +183,12 @@ void FitMW::createDomain(boost::shared_ptr<API::FunctionDomain> &domain,
       error /= binWidth;
     }
 
-    if (!boost::math::isfinite(y)) // nan or inf data
+    if (!std::isfinite(y)) // nan or inf data
     {
       if (!m_ignoreInvalidData)
         throw std::runtime_error("Infinte number or NaN found in input data.");
-      y = 0.0; // leaving inf or nan would break the fit
-    } else if (!boost::math::isfinite(error)) // nan or inf error
+      y = 0.0;                        // leaving inf or nan would break the fit
+    } else if (!std::isfinite(error)) // nan or inf error
     {
       if (!m_ignoreInvalidData)
         throw std::runtime_error("Infinte number or NaN found in input data.");
diff --git a/Framework/CurveFitting/src/FuncMinimizers/DTRSMinimizer.cpp b/Framework/CurveFitting/src/FuncMinimizers/DTRSMinimizer.cpp
index 19cff42df237b6cb4150f354dfbc29e33640325c..7e7f23362b7d1afa45385ebc963aada5ed99f274 100644
--- a/Framework/CurveFitting/src/FuncMinimizers/DTRSMinimizer.cpp
+++ b/Framework/CurveFitting/src/FuncMinimizers/DTRSMinimizer.cpp
@@ -16,7 +16,7 @@ namespace FuncMinimisers {
 
 // clang-format off
 ///@cond nodoc
-DECLARE_FUNCMINIMIZER(DTRSMinimizer, DTRS)
+DECLARE_FUNCMINIMIZER(DTRSMinimizer, Trust Region)
 ///@endcond
 // clang-format on
 
@@ -25,7 +25,7 @@ using namespace NLLS;
 DTRSMinimizer::DTRSMinimizer() : TrustRegionMinimizer() {}
 
 /// Name of the minimizer.
-std::string DTRSMinimizer::name() const { return "DTRS"; }
+std::string DTRSMinimizer::name() const { return "Trust Region"; }
 
 namespace {
 
@@ -240,7 +240,7 @@ std::pair<double, double> minMaxValues(const DoubleFortranVector &v) {
 /// Compute the 2-norm of a vector which is a square root of the
 /// sum of squares of its elements.
 /// @param v :: The vector.
-double two_norm(const DoubleFortranVector &v) {
+double twoNorm(const DoubleFortranVector &v) {
   if (v.size() == 0)
     return 0.0;
   return gsl_blas_dnrm2(v.gsl());
@@ -249,8 +249,8 @@ double two_norm(const DoubleFortranVector &v) {
 /// Get the dot-product of two vectors of the same size.
 /// @param v1 :: The first vector.
 /// @param v2 :: The second vector.
-double dot_product(const DoubleFortranVector &v1,
-                   const DoubleFortranVector &v2) {
+double dotProduct(const DoubleFortranVector &v1,
+                  const DoubleFortranVector &v2) {
   return v1.dot(v2);
 }
 
@@ -280,8 +280,8 @@ double maxVal(const DoubleFortranVector &v, int n) {
 /// @param nroots :: The output number of real roots.
 /// @param root1 :: The first real root if nroots > 0.
 /// @param root2 :: The second real root if nroots = 2.
-void roots_quadratic(double a0, double a1, double a2, double tol, int &nroots,
-                     double &root1, double &root2) {
+void rootsQuadratic(double a0, double a1, double a2, double tol, int &nroots,
+                    double &root1, double &root2) {
 
   auto rhs = tol * a1 * a1;
   if (fabs(a0 * a2) > rhs) { // really is quadratic
@@ -364,12 +364,12 @@ void roots_quadratic(double a0, double a1, double a2, double tol, int &nroots,
 /// @param root1 :: The first real root.
 /// @param root2 :: The second real root if nroots > 1.
 /// @param root3 :: The third real root if nroots == 3.
-void roots_cubic(double a0, double a1, double a2, double a3, double tol,
-                 int &nroots, double &root1, double &root2, double &root3) {
+void rootsCubic(double a0, double a1, double a2, double a3, double tol,
+                int &nroots, double &root1, double &root2, double &root3) {
 
   //  Check to see if the cubic is actually a quadratic
   if (a3 == zero) {
-    roots_quadratic(a0, a1, a2, tol, nroots, root1, root2);
+    rootsQuadratic(a0, a1, a2, tol, nroots, root1, root2);
     root3 = infinity;
     return;
   }
@@ -377,7 +377,7 @@ void roots_cubic(double a0, double a1, double a2, double a3, double tol,
   //  Deflate the polnomial if the trailing coefficient is zero
   if (a0 == zero) {
     root1 = zero;
-    roots_quadratic(a1, a2, a3, tol, nroots, root2, root3);
+    rootsQuadratic(a1, a2, a3, tol, nroots, root2, root3);
     nroots = nroots + 1;
     return;
   }
@@ -502,9 +502,9 @@ void roots_cubic(double a0, double a1, double a2, double a3, double tol,
 ///                   (i) ith derivative of ||x||^2, i = 1, max_order
 /// @param pi_beta :: (0) value of ||x||^beta,
 ///                   (i) ith derivative of ||x||^beta, i = 1, max_order
-void dtrs_pi_derivs(int max_order, double beta,
-                    const DoubleFortranVector &x_norm2,
-                    DoubleFortranVector &pi_beta) {
+void dtrsPiDerivs(int max_order, double beta,
+                  const DoubleFortranVector &x_norm2,
+                  DoubleFortranVector &pi_beta) {
   double hbeta = half * beta;
   pi_beta(0) = pow(x_norm2(0), hbeta);
   pi_beta(1) = hbeta * (pow(x_norm2(0), (hbeta - one))) * x_norm2(1);
@@ -524,7 +524,7 @@ void dtrs_pi_derivs(int max_order, double beta,
 ///
 /// @param control :: A structure containing control information.
 /// @param inform  :: A structure containing information.
-void dtrs_initialize(dtrs_control_type &control, dtrs_inform_type &inform) {
+void dtrsInitialize(dtrs_control_type &control, dtrs_inform_type &inform) {
   inform.status = ErrorCode::ral_nlls_ok;
   control.stop_normal = pow(epsmch, 0.75);
   control.stop_absolute_normal = pow(epsmch, 0.75);
@@ -546,10 +546,9 @@ void dtrs_initialize(dtrs_control_type &control, dtrs_inform_type &inform) {
 /// @param control :: A structure containing control information.
 /// @param inform :: A structure containing information.
 ///
-void dtrs_solve_main(int n, double radius, double f,
-                     const DoubleFortranVector &c, const DoubleFortranVector &h,
-                     DoubleFortranVector &x, const dtrs_control_type &control,
-                     dtrs_inform_type &inform) {
+void dtrsSolveMain(int n, double radius, double f, const DoubleFortranVector &c,
+                   const DoubleFortranVector &h, DoubleFortranVector &x,
+                   const dtrs_control_type &control, dtrs_inform_type &inform) {
 
   //  set initial values
 
@@ -572,7 +571,7 @@ void dtrs_solve_main(int n, double radius, double f,
 
   //  compute the two-norm of c and the extreme eigenvalues of H
 
-  double c_norm = two_norm(c);
+  double c_norm = twoNorm(c);
   double lambda_min = 0.0;
   double lambda_max = 0.0;
   std::tie(lambda_min, lambda_max) = minMaxValues(h);
@@ -640,7 +639,7 @@ void dtrs_solve_main(int n, double radius, double f,
           x(i) = zero;
         }
       }
-      inform.x_norm = two_norm(x);
+      inform.x_norm = twoNorm(x);
 
       //  the hard case does occur
 
@@ -661,8 +660,8 @@ void dtrs_solve_main(int n, double radius, double f,
 
           x(i_hard) = x(i_hard) + alpha;
         }
-        inform.x_norm = two_norm(x);
-        inform.obj = f + half * (dot_product(c, x) - lambda * pow(radius, 2));
+        inform.x_norm = twoNorm(x);
+        inform.obj = f + half * (dotProduct(c, x) - lambda * pow(radius, 2));
         inform.status = ErrorCode::ral_nlls_ok;
         return;
 
@@ -705,13 +704,13 @@ void dtrs_solve_main(int n, double radius, double f,
     }
 
     //  compute the two-norm of x
-    inform.x_norm = two_norm(x);
+    inform.x_norm = twoNorm(x);
     x_norm2(0) = pow(inform.x_norm, 2);
 
     //  if the newton step lies within the trust region, exit
 
     if (lambda == zero && inform.x_norm <= radius) {
-      inform.obj = f + half * dot_product(c, x);
+      inform.obj = f + half * dotProduct(c, x);
       inform.status = ErrorCode::ral_nlls_ok;
       return;
     }
@@ -760,7 +759,7 @@ void dtrs_solve_main(int n, double radius, double f,
 
     //  compute pi_beta = ||x||^beta and its first derivative when beta = - 1
     double beta = -one;
-    dtrs_pi_derivs(1, beta, x_norm2, pi_beta);
+    dtrsPiDerivs(1, beta, x_norm2, pi_beta);
 
     //  compute the Newton correction (for beta = - 1)
 
@@ -791,7 +790,7 @@ void dtrs_solve_main(int n, double radius, double f,
       //  compute pi_beta = ||x||^beta and its derivatives when beta = 2
 
       beta = two;
-      dtrs_pi_derivs(max_order, beta, x_norm2, pi_beta);
+      dtrsPiDerivs(max_order, beta, x_norm2, pi_beta);
 
       //  compute the "cubic Taylor approximaton" step (beta = 2)
 
@@ -809,7 +808,7 @@ void dtrs_solve_main(int n, double radius, double f,
       int nroots = 0;
       double root1 = 0, root2 = 0, root3 = 0;
 
-      roots_cubic(a_0, a_1, a_2, a_3, roots_tol, nroots, root1, root2, root3);
+      rootsCubic(a_0, a_1, a_2, a_3, roots_tol, nroots, root1, root2, root3);
       n_lambda = n_lambda + 1;
       if (nroots == 3) {
         lambda_new(n_lambda) = lambda + root3;
@@ -820,7 +819,7 @@ void dtrs_solve_main(int n, double radius, double f,
       //  compute pi_beta = ||x||^beta and its derivatives when beta = - 0.4
 
       beta = -point4;
-      dtrs_pi_derivs(max_order, beta, x_norm2, pi_beta);
+      dtrsPiDerivs(max_order, beta, x_norm2, pi_beta);
 
       //  compute the "cubic Taylor approximaton" step (beta = - 0.4)
 
@@ -835,7 +834,7 @@ void dtrs_solve_main(int n, double radius, double f,
         a_2 = a_2 / a_max;
         a_3 = a_3 / a_max;
       }
-      roots_cubic(a_0, a_1, a_2, a_3, roots_tol, nroots, root1, root2, root3);
+      rootsCubic(a_0, a_1, a_2, a_3, roots_tol, nroots, root1, root2, root3);
       n_lambda = n_lambda + 1;
       if (nroots == 3) {
         lambda_new(n_lambda) = lambda + root3;
@@ -880,9 +879,9 @@ void dtrs_solve_main(int n, double radius, double f,
 /// @param control :: A structure containing control information.
 /// @param inform :: A structure containing information.
 ///
-void dtrs_solve(int n, double radius, double f, const DoubleFortranVector &c,
-                const DoubleFortranVector &h, DoubleFortranVector &x,
-                const dtrs_control_type &control, dtrs_inform_type &inform) {
+void dtrsSolve(int n, double radius, double f, const DoubleFortranVector &c,
+               const DoubleFortranVector &h, DoubleFortranVector &x,
+               const dtrs_control_type &control, dtrs_inform_type &inform) {
   //  scale the problem to solve instead
   //      minimize    q_s(x_s) = 1/2 <x_s, H_s x_s> + <c_s, x_s> + f_s
   //      subject to    ||x_s||_2 <= radius_s  or ||x_s||_2 = radius_s
@@ -944,8 +943,8 @@ void dtrs_solve(int n, double radius, double f, const DoubleFortranVector &c,
 
   //  solve the scaled problem
 
-  dtrs_solve_main(n, radius_scale, f_scale, c_scale, h_scale, x, control_scale,
-                  inform);
+  dtrsSolveMain(n, radius_scale, f_scale, c_scale, h_scale, x, control_scale,
+                inform);
 
   //  unscale the solution, function value, multiplier and related values
 
@@ -978,11 +977,11 @@ void dtrs_solve(int n, double radius, double f, const DoubleFortranVector &c,
 /// @param options :: The options.
 /// @param inform :: The inform struct.
 /// @param w :: The work struct.
-void solve_dtrs(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
-                const DoubleFortranMatrix &hf, double Delta,
-                DoubleFortranVector &d, double &normd,
-                const nlls_options &options, nlls_inform &inform,
-                solve_dtrs_work &w) {
+void solveDtrs(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
+               const DoubleFortranMatrix &hf, double Delta,
+               DoubleFortranVector &d, double &normd,
+               const nlls_options &options, nlls_inform &inform,
+               solve_dtrs_work &w) {
 
   dtrs_control_type dtrs_options;
   dtrs_inform_type dtrs_inform;
@@ -1000,23 +999,23 @@ void solve_dtrs(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
   //
   //  first, find the matrix H and vector v
   //  Set A = J^T J
-  matmult_inner(J, w.A);
+  matmultInner(J, w.A);
   // add any second order information...
   // so A = J^T J + HF
   w.A += hf;
 
   // now form v = J^T f
-  mult_Jt(J, f, w.v);
+  multJt(J, f, w.v);
 
   // if scaling needed, do it
   if (options.scale != 0) {
-    apply_scaling(J, w.A, w.v, w.apply_scaling_ws, options, inform);
+    applyScaling(J, w.A, w.v, w.apply_scaling_ws, options, inform);
   }
 
   // Now that we have the unprocessed matrices, we need to get an
   // eigendecomposition to make A diagonal
   //
-  all_eig_symm(w.A, w.ew, w.ev);
+  allEigSymm(w.A, w.ew, w.ev);
   if (inform.status != NLLS_ERROR::OK) {
     return;
   }
@@ -1029,10 +1028,10 @@ void solve_dtrs(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
   //       s.t.  ||x|| \leq Delta
   // <=>
   // we need to get the transformed vector v
-  mult_Jt(w.ev, w.v, w.v_trans);
+  multJt(w.ev, w.v, w.v_trans);
 
-  // we've now got the vectors we need, pass to dtrs_solve
-  dtrs_initialize(dtrs_options, dtrs_inform);
+  // we've now got the vectors we need, pass to dtrsSolve
+  dtrsInitialize(dtrs_options, dtrs_inform);
 
   auto n = J.len2();
   if (w.v_trans.len() != n) {
@@ -1048,8 +1047,8 @@ void solve_dtrs(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
     }
   }
 
-  dtrs_solve(n, Delta, zero, w.v_trans, w.ew, w.d_trans, dtrs_options,
-             dtrs_inform);
+  dtrsSolve(n, Delta, zero, w.v_trans, w.ew, w.d_trans, dtrs_options,
+            dtrs_inform);
   if (dtrs_inform.status != ErrorCode::ral_nlls_ok) {
     inform.external_return = int(dtrs_inform.status);
     inform.external_name = "galahad_dtrs";
@@ -1058,7 +1057,7 @@ void solve_dtrs(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
   }
 
   // and return the un-transformed vector
-  mult_J(w.ev, w.d_trans, d);
+  multJ(w.ev, w.d_trans, d);
 
   normd = norm2(d); // ! ||d||_D
 
@@ -1068,17 +1067,17 @@ void solve_dtrs(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
     }
   }
 
-} // solve_dtrs
+} // solveDtrs
 
 } // namespace
 
 /// Implements the abstarct method of TrustRegionMinimizer.
-void DTRSMinimizer::calculate_step(
+void DTRSMinimizer::calculateStep(
     const DoubleFortranMatrix &J, const DoubleFortranVector &f,
     const DoubleFortranMatrix &hf, const DoubleFortranVector &, double Delta,
     DoubleFortranVector &d, double &normd, const NLLS::nlls_options &options,
     NLLS::nlls_inform &inform, NLLS::calculate_step_work &w) {
-  solve_dtrs(J, f, hf, Delta, d, normd, options, inform, w.solve_dtrs_ws);
+  solveDtrs(J, f, hf, Delta, d, normd, options, inform, w.solve_dtrs_ws);
 }
 
 } // namespace FuncMinimisers
diff --git a/Framework/CurveFitting/src/FuncMinimizers/FABADAMinimizer.cpp b/Framework/CurveFitting/src/FuncMinimizers/FABADAMinimizer.cpp
index a3e24888f6f82774bb3c23efe2fde51a63264bc2..d6eb20dcda75a6f23a97e3a8a859925b14dda33d 100644
--- a/Framework/CurveFitting/src/FuncMinimizers/FABADAMinimizer.cpp
+++ b/Framework/CurveFitting/src/FuncMinimizers/FABADAMinimizer.cpp
@@ -26,7 +26,7 @@
 #include <boost/random/variate_generator.hpp>
 #include <boost/random/mersenne_twister.hpp>
 #include <boost/version.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 namespace Mantid {
 namespace CurveFitting {
@@ -338,7 +338,7 @@ bool FABADAMinimizer::iterate(size_t) {
     // the user should be aware of that.
 
     // Set the new value in order to calculate the new Chi square value
-    if (boost::math::isnan(new_value)) {
+    if (std::isnan(new_value)) {
       throw std::runtime_error("Parameter value is NaN.");
     }
     new_parameters.set(i, new_value);
@@ -773,7 +773,7 @@ void FABADAMinimizer::TieApplication(const size_t &ParameterIndex,
       API::ParameterTie *tie = m_FitFunction->getTie(j);
       if (tie) {
         new_value = tie->eval();
-        if (boost::math::isnan(new_value)) { // maybe not needed
+        if (std::isnan(new_value)) { // maybe not needed
           throw std::runtime_error("Parameter value is NaN.");
         }
         new_parameters.set(j, new_value);
@@ -785,7 +785,7 @@ void FABADAMinimizer::TieApplication(const size_t &ParameterIndex,
   API::ParameterTie *tie = m_FitFunction->getTie(i);
   if (tie) {
     new_value = tie->eval();
-    if (boost::math::isnan(new_value)) { // maybe not needed
+    if (std::isnan(new_value)) { // maybe not needed
       throw std::runtime_error("Parameter value is NaN.");
     }
     new_parameters.set(i, new_value);
diff --git a/Framework/CurveFitting/src/FuncMinimizers/MoreSorensenMinimizer.cpp b/Framework/CurveFitting/src/FuncMinimizers/MoreSorensenMinimizer.cpp
index 92dcfbbf9fb56820604ed9df6f1e6f5ec651cdf8..8c164a969fde38221cff04df26c6ab3e47c771fa 100644
--- a/Framework/CurveFitting/src/FuncMinimizers/MoreSorensenMinimizer.cpp
+++ b/Framework/CurveFitting/src/FuncMinimizers/MoreSorensenMinimizer.cpp
@@ -36,9 +36,9 @@ namespace {
 /// @param LtL :: A work matrix.
 /// @param x :: A vector that receives the solution.
 /// @param inform :: The information struct.
-void solve_spd(const DoubleFortranMatrix &A, const DoubleFortranVector &b,
-               DoubleFortranMatrix &LtL, DoubleFortranVector &x,
-               nlls_inform &inform) {
+void solveSpd(const DoubleFortranMatrix &A, const DoubleFortranVector &b,
+              DoubleFortranMatrix &LtL, DoubleFortranVector &x,
+              nlls_inform &inform) {
   // Fortran code uses this:
   // dposv('L', n, 1, LtL, n, x, n, inform.external_return)
   // This is the GSL replacement:
@@ -56,8 +56,8 @@ void solve_spd(const DoubleFortranMatrix &A, const DoubleFortranVector &b,
 /// @param sigma :: A variable to receive the value of the smallest
 ///        eigenvalue.
 /// @param y :: A vector that receives the corresponding eigenvector.
-void min_eig_symm(const DoubleFortranMatrix &A, double &sigma,
-                  DoubleFortranVector &y) {
+void minEigSymm(const DoubleFortranMatrix &A, double &sigma,
+                DoubleFortranVector &y) {
   auto M = A;
   DoubleFortranVector ew;
   DoubleFortranMatrix ev;
@@ -75,8 +75,8 @@ void min_eig_symm(const DoubleFortranMatrix &A, double &sigma,
 /// Calculate AplusSigma = A + sigma * I
 /// @param sigma :: The value of the diagonal shift.
 /// @param AplusSigma :: The resulting matrix.
-void shift_matrix(const DoubleFortranMatrix &A, double sigma,
-                  DoubleFortranMatrix &AplusSigma) {
+void shiftMatrix(const DoubleFortranMatrix &A, double sigma,
+                 DoubleFortranMatrix &AplusSigma) {
   AplusSigma = A;
   auto n = A.len1();
   for (int i = 1; i <= n; ++i) { // for_do(i,1,n)
@@ -100,14 +100,14 @@ DoubleFortranVector negative(const DoubleFortranVector &v) {
 /// @param options :: The options.
 /// @param inform :: The inform struct.
 /// @param w :: The work struct.
-void get_pd_shift(double &sigma, DoubleFortranVector &d,
-                  const nlls_options &options, nlls_inform &inform,
-                  more_sorensen_work &w) {
+void getPdShift(double &sigma, DoubleFortranVector &d,
+                const nlls_options &options, nlls_inform &inform,
+                more_sorensen_work &w) {
   int no_shifts = 0;
   bool successful_shift = false;
   while (!successful_shift) {
-    shift_matrix(w.A, sigma, w.AplusSigma);
-    solve_spd(w.AplusSigma, negative(w.v), w.LtL, d, inform);
+    shiftMatrix(w.A, sigma, w.AplusSigma);
+    solveSpd(w.AplusSigma, negative(w.v), w.LtL, d, inform);
     if (inform.status != NLLS_ERROR::OK) {
       // reset the error calls -- handled in the code....
       inform.status = NLLS_ERROR::OK;
@@ -136,7 +136,7 @@ void get_pd_shift(double &sigma, DoubleFortranVector &d,
 /// @param Delta :: The Delta.
 /// @param beta :: The beta.
 /// @param inform :: The inform struct.
-void findbeta(const DoubleFortranVector &a, const DoubleFortranVector &b,
+void findBeta(const DoubleFortranVector &a, const DoubleFortranVector &b,
               double Delta, double &beta, nlls_inform &inform) {
 
   auto c = a.dot(b);
@@ -147,7 +147,7 @@ void findbeta(const DoubleFortranVector &a, const DoubleFortranVector &b,
   double discrim = pow(c, 2) + (normb2) * (pow(Delta, 2) - norma2);
   if (discrim < zero) {
     inform.status = NLLS_ERROR::FIND_BETA;
-    inform.external_name = "findbeta";
+    inform.external_name = "findBeta";
     return;
   }
 
@@ -175,11 +175,11 @@ void findbeta(const DoubleFortranVector &a, const DoubleFortranVector &b,
 /// @param options :: The options.
 /// @param inform :: The inform struct.
 /// @param w :: The work struct.
-void more_sorensen(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
-                   const DoubleFortranMatrix &hf, double Delta,
-                   DoubleFortranVector &d, double &nd,
-                   const nlls_options &options, nlls_inform &inform,
-                   more_sorensen_work &w) {
+void moreSorensen(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
+                  const DoubleFortranMatrix &hf, double Delta,
+                  DoubleFortranVector &d, double &nd,
+                  const nlls_options &options, nlls_inform &inform,
+                  more_sorensen_work &w) {
 
   // The code finds
   //  d = arg min_p   v^T p + 0.5 * p^T A p
@@ -188,20 +188,20 @@ void more_sorensen(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
   // set A and v for the model being considered here...
 
   // Set A = J^T J
-  matmult_inner(J, w.A);
+  matmultInner(J, w.A);
   // add any second order information...
   // so A = J^T J + HF
   w.A += hf;
   // now form v = J^T f
-  mult_Jt(J, f, w.v);
+  multJt(J, f, w.v);
 
   // if scaling needed, do it
   if (options.scale != 0) {
-    apply_scaling(J, w.A, w.v, w.apply_scaling_ws, options, inform);
+    applyScaling(J, w.A, w.v, w.apply_scaling_ws, options, inform);
   }
 
   auto n = J.len2();
-  auto scale_back = [n, &d, &options, &w]() {
+  auto scaleBack = [n, &d, &options, &w]() {
     if (options.scale != 0) {
       for (int i = 1; i <= n; ++i) {
         d(i) = d(i) / w.apply_scaling_ws.diag(i);
@@ -213,7 +213,7 @@ void more_sorensen(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
   // d = -A\v
   DoubleFortranVector negv = w.v;
   negv *= -1.0;
-  solve_spd(w.A, negv, w.LtL, d, inform);
+  solveSpd(w.A, negv, w.LtL, d, inform);
   double sigma = 0.0;
   if (inform.status == NLLS_ERROR::OK) {
     // A is symmetric positive definite....
@@ -223,16 +223,16 @@ void more_sorensen(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
     inform.status = NLLS_ERROR::OK;
     inform.external_return = 0;
     inform.external_name = "";
-    min_eig_symm(w.A, sigma, w.y1);
+    minEigSymm(w.A, sigma, w.y1);
     if (inform.status != NLLS_ERROR::OK) {
-      scale_back();
+      scaleBack();
       return;
     }
     sigma = -(sigma - local_ms_shift);
     // find a shift that makes (A + sigma I) positive definite
-    get_pd_shift(sigma, d, options, inform, w);
+    getPdShift(sigma, d, options, inform, w);
     if (inform.status != NLLS_ERROR::OK) {
-      scale_back();
+      scaleBack();
       return;
     }
   }
@@ -261,7 +261,7 @@ void more_sorensen(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
       }
       if (w.y1.len() == n) {
         double alpha = 0.0;
-        findbeta(d, w.y1, Delta, alpha, inform);
+        findBeta(d, w.y1, Delta, alpha, inform);
         if (inform.status == NLLS_ERROR::OK) {
           DoubleFortranVector tmp = w.y1;
           tmp *= alpha;
@@ -287,7 +287,7 @@ void more_sorensen(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
     if (fabs(sigma_shift) < options.more_sorensen_tiny * fabs(sigma)) {
       if (no_restarts < 1) {
         // find a shift that makes (A + sigma I) positive definite
-        get_pd_shift(sigma, d, options, inform, w);
+        getPdShift(sigma, d, options, inform, w);
         if (inform.status != NLLS_ERROR::OK) {
           break;
         }
@@ -301,10 +301,10 @@ void more_sorensen(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
       sigma = sigma + sigma_shift;
     }
 
-    shift_matrix(w.A, sigma, w.AplusSigma);
+    shiftMatrix(w.A, sigma, w.AplusSigma);
     DoubleFortranVector negv = w.v;
     negv *= -1.0;
-    solve_spd(w.AplusSigma, negv, w.LtL, d, inform);
+    solveSpd(w.AplusSigma, negv, w.LtL, d, inform);
     if (inform.status != NLLS_ERROR::OK) {
       break;
     }
@@ -316,18 +316,18 @@ void more_sorensen(const DoubleFortranMatrix &J, const DoubleFortranVector &f,
     // maxits reached, not converged
     inform.status = NLLS_ERROR::MS_MAXITS;
   }
-  scale_back();
+  scaleBack();
 }
 
 } // namespace
 
 /// Implements the abstarct method of TrustRegionMinimizer.
-void MoreSorensenMinimizer::calculate_step(
+void MoreSorensenMinimizer::calculateStep(
     const DoubleFortranMatrix &J, const DoubleFortranVector &f,
     const DoubleFortranMatrix &hf, const DoubleFortranVector &, double Delta,
     DoubleFortranVector &d, double &normd, const NLLS::nlls_options &options,
     NLLS::nlls_inform &inform, NLLS::calculate_step_work &w) {
-  more_sorensen(J, f, hf, Delta, d, normd, options, inform, w.more_sorensen_ws);
+  moreSorensen(J, f, hf, Delta, d, normd, options, inform, w.more_sorensen_ws);
 }
 
 } // namespace FuncMinimisers
diff --git a/Framework/CurveFitting/src/FuncMinimizers/TrustRegionMinimizer.cpp b/Framework/CurveFitting/src/FuncMinimizers/TrustRegionMinimizer.cpp
index debb71921ea36f1ed19aeefbe18ee2fed83e66a1..dd9110f9ff0066af49cabea0582fc569baf7086d 100644
--- a/Framework/CurveFitting/src/FuncMinimizers/TrustRegionMinimizer.cpp
+++ b/Framework/CurveFitting/src/FuncMinimizers/TrustRegionMinimizer.cpp
@@ -60,8 +60,8 @@ void TrustRegionMinimizer::initialize(API::ICostFunction_sptr costFunction,
 /// Evaluate the fitting function and calculate the residuals.
 /// @param x :: The fitting parameters as a fortran 1d array.
 /// @param f :: The output fortran vector with the weighted residuals.
-void TrustRegionMinimizer::eval_F(const DoubleFortranVector &x,
-                                  DoubleFortranVector &f) const {
+void TrustRegionMinimizer::evalF(const DoubleFortranVector &x,
+                                 DoubleFortranVector &f) const {
   m_leastSquares->setParameters(x);
   auto &domain = *m_leastSquares->getDomain();
   auto &values = *m_leastSquares->getValues();
@@ -79,8 +79,8 @@ void TrustRegionMinimizer::eval_F(const DoubleFortranVector &x,
 /// Evaluate the Jacobian
 /// @param x :: The fitting parameters as a fortran 1d array.
 /// @param J :: The output fortran matrix with the weighted Jacobian.
-void TrustRegionMinimizer::eval_J(const DoubleFortranVector &x,
-                                  DoubleFortranMatrix &J) const {
+void TrustRegionMinimizer::evalJ(const DoubleFortranVector &x,
+                                 DoubleFortranMatrix &J) const {
   m_leastSquares->setParameters(x);
   auto &domain = *m_leastSquares->getDomain();
   auto &values = *m_leastSquares->getValues();
@@ -103,9 +103,9 @@ void TrustRegionMinimizer::eval_J(const DoubleFortranVector &x,
 /// @param x :: The fitting parameters as a fortran 1d array.
 /// @param f :: The fortran vector with the weighted residuals.
 /// @param h :: The fortran matrix with the Hessian.
-void TrustRegionMinimizer::eval_HF(const DoubleFortranVector &x,
-                                   const DoubleFortranVector &f,
-                                   DoubleFortranMatrix &h) const {
+void TrustRegionMinimizer::evalHF(const DoubleFortranVector &x,
+                                  const DoubleFortranVector &f,
+                                  DoubleFortranMatrix &h) const {
   UNUSED_ARG(x);
   UNUSED_ARG(f);
   int n = static_cast<int>(m_leastSquares->nParams());
@@ -132,11 +132,11 @@ bool TrustRegionMinimizer::iterate(size_t) {
     w.first_call = 1; // ?
 
     // evaluate the residual
-    eval_F(X, w.f);
+    evalF(X, w.f);
     inform.f_eval = inform.f_eval + 1;
 
     // and evaluate the jacobian
-    eval_J(X, w.J);
+    evalJ(X, w.J);
     inform.g_eval = inform.g_eval + 1;
 
     if (options.relative_tr_radius == 1) {
@@ -160,14 +160,14 @@ bool TrustRegionMinimizer::iterate(size_t) {
 
     if (options.calculate_svd_J) {
       // calculate the svd of J (if needed)
-      get_svd_J(w.J, w.smallest_sv(1), w.largest_sv(1));
+      getSvdJ(w.J, w.smallest_sv(1), w.largest_sv(1));
     }
 
     w.normF = norm2(w.f);
     w.normF0 = w.normF;
 
     // g = -J^Tf
-    mult_Jt(w.J, w.f, w.g);
+    multJt(w.J, w.f, w.g);
     w.g *= -1.0;
     w.normJF = norm2(w.g);
     w.normJF0 = w.normJF;
@@ -196,7 +196,7 @@ bool TrustRegionMinimizer::iterate(size_t) {
     case 2: // second order
     {
       if (options.exact_second_derivatives) {
-        eval_HF(X, w.f, w.hf);
+        evalHF(X, w.f, w.hf);
         inform.h_eval = inform.h_eval + 1;
       } else {
         // S_0 = 0 (see Dennis, Gay and Welsch)
@@ -239,13 +239,13 @@ bool TrustRegionMinimizer::iterate(size_t) {
       return true;
     }
     // Calculate the step d that the model thinks we should take next
-    calculate_step(w.J, w.f, w.hf, w.g, w.Delta, w.d, w.normd, options, inform,
-                   w.calculate_step_ws);
+    calculateStep(w.J, w.f, w.hf, w.g, w.Delta, w.d, w.normd, options, inform,
+                  w.calculate_step_ws);
 
     // Accept the step?
     w.Xnew = X;
     w.Xnew += w.d;
-    eval_F(w.Xnew, w.fnew);
+    evalF(w.Xnew, w.fnew);
     inform.f_eval = inform.f_eval + 1;
     normFnew = norm2(w.fnew);
 
@@ -253,7 +253,7 @@ bool TrustRegionMinimizer::iterate(size_t) {
     //      md :=   m_k(d)
     // evaluated at the new step
     double md =
-        evaluate_model(w.f, w.J, w.hf, w.d, options, w.evaluate_model_ws);
+        evaluateModel(w.f, w.J, w.hf, w.d, options, w.evaluate_model_ws);
 
     // Calculate the quantity
     //   rho = 0.5||f||^2 - 0.5||fnew||^2 =   actual_reduction
@@ -261,14 +261,14 @@ bool TrustRegionMinimizer::iterate(size_t) {
     //             m_k(0)  - m_k(d)         predicted_reduction
     //
     // if model is good, rho should be close to one
-    rho = calculate_rho(w.normF, normFnew, md, options);
+    rho = calculateRho(w.normF, normFnew, md, options);
     if (!std::isfinite(rho) || rho <= options.eta_successful) {
       if ((w.use_second_derivatives) && (options.model == 3) &&
           (no_reductions == 1)) {
         // recalculate rho based on the approx GN model
         // (i.e. the Gauss-Newton model evaluated at the Quasi-Newton step)
-        double rho_gn = calculate_rho(w.normF, normFnew,
-                                      w.evaluate_model_ws.md_gn, options);
+        double rho_gn =
+            calculateRho(w.normF, normFnew, w.evaluate_model_ws.md_gn, options);
         if (rho_gn > options.eta_successful) {
           // switch back to gauss-newton
           w.use_second_derivatives = false;
@@ -281,7 +281,7 @@ bool TrustRegionMinimizer::iterate(size_t) {
     }
 
     // Update the TR radius
-    update_trust_region_radius(rho, options, inform, w);
+    updateTrustRegionRadius(rho, options, inform, w);
 
     if (!success) {
       // finally, check d makes progress
@@ -302,20 +302,20 @@ bool TrustRegionMinimizer::iterate(size_t) {
     // g_old = -J_k^T r_k
     w.g_old = w.g;
     // g_mixed = -J_k^T r_{k+1}
-    mult_Jt(w.J, w.fnew, w.g_mixed);
+    multJt(w.J, w.fnew, w.g_mixed);
     w.g_mixed *= -1.0;
   }
 
   // evaluate J and hf at the new point
-  eval_J(X, w.J);
+  evalJ(X, w.J);
   inform.g_eval = inform.g_eval + 1;
 
   if (options.calculate_svd_J) {
-    get_svd_J(w.J, w.smallest_sv(w.iter + 1), w.largest_sv(w.iter + 1));
+    getSvdJ(w.J, w.smallest_sv(w.iter + 1), w.largest_sv(w.iter + 1));
   }
 
   // g = -J^Tf
-  mult_Jt(w.J, w.f, w.g);
+  multJt(w.J, w.f, w.g);
   w.g *= -1.0;
 
   w.normJFold = w.normJF;
@@ -363,20 +363,20 @@ bool TrustRegionMinimizer::iterate(size_t) {
       // call apply_second_order_info anyway, so that we update the
       // second order approximation
       if (!options.exact_second_derivatives) {
-        rank_one_update(w.hf_temp, w);
+        rankOneUpdate(w.hf_temp, w);
       }
     }
   }
 
   if (w.use_second_derivatives) {
-    // apply_second_order_info(n, m, X, w, eval_HF, params, options, inform,
+    // apply_second_order_info(n, m, X, w, evalHF, params, options, inform,
     //                        weights);
     if (options.exact_second_derivatives) {
-      eval_HF(X, w.f, w.hf);
+      evalHF(X, w.f, w.hf);
       inform.h_eval = inform.h_eval + 1;
     } else {
       // use the rank-one approximation...
-      rank_one_update(w.hf, w);
+      rankOneUpdate(w.hf, w);
     }
   }
 
@@ -390,7 +390,7 @@ bool TrustRegionMinimizer::iterate(size_t) {
   }
 
   // Test convergence
-  test_convergence(w.normF, w.normJF, w.normF0, w.normJF0, options, inform);
+  testConvergence(w.normF, w.normJF, w.normF0, w.normJF0, options, inform);
 
   if (inform.convergence_normf == 1 || inform.convergence_normg == 1) {
     return false;
diff --git a/Framework/CurveFitting/src/Functions/BackToBackExponential.cpp b/Framework/CurveFitting/src/Functions/BackToBackExponential.cpp
index 64a5d5aae6a6237bd4a293c78107fc7e4e7c5363..ab588d2eb0e6eb2b7a5243893f26d120ca9e6085 100644
--- a/Framework/CurveFitting/src/Functions/BackToBackExponential.cpp
+++ b/Framework/CurveFitting/src/Functions/BackToBackExponential.cpp
@@ -6,7 +6,6 @@
 
 #include <gsl/gsl_sf_erf.h>
 #include <gsl/gsl_multifit_nlin.h>
-#include <boost/math/special_functions/fpclassify.hpp>
 #include <cmath>
 #include <limits>
 
@@ -64,7 +63,7 @@ void BackToBackExponential::setHeight(const double h) {
   if (area <= 0.0) {
     area = 1e-6;
   }
-  if (boost::math::isnan(area) || boost::math::isinf(area)) {
+  if (!std::isfinite(area)) {
     area = std::numeric_limits<double>::max() / 2;
   }
   setParameter(0, area);
diff --git a/Framework/CurveFitting/src/Functions/CrystalElectricField.cpp b/Framework/CurveFitting/src/Functions/CrystalElectricField.cpp
index 1efdbc332bb12a9843d8170249fcfb4358715b41..099f22cc1c90317899991b1332c8888d56bc0268 100644
--- a/Framework/CurveFitting/src/Functions/CrystalElectricField.cpp
+++ b/Framework/CurveFitting/src/Functions/CrystalElectricField.cpp
@@ -527,10 +527,14 @@ double exp_(double z) {
 // calculates all transition intensities for
 // a polycrystalline sample (powder)
 //------------------------------------------
-void intcalc(double pi, double r0, double gj, double z,
-             const DoubleFortranMatrix &jt2, const DoubleFortranVector &e,
-             DoubleFortranMatrix &inten, int dim, double temp) {
-  auto constant = 4.0 * pi * pow(0.5 * r0 * gj, 2);
+void intcalc(double r0, double gj, double z, const DoubleFortranMatrix &jt2,
+             const DoubleFortranVector &e, DoubleFortranMatrix &inten, int dim,
+             double temp) {
+  // Original code from FOCUS calculated integrated intensity in barn
+  // auto constant = 4.0 * pi * pow(0.5 * r0 * gj, 2);
+  // ISIS normalised data is in milibarn/steradian - need to multiply
+  // by 1000 / 4 / PI
+  auto constant = pow(0.5 * r0 * gj, 2) * 1000.;
   if (temp == 0.0) {
     temp = 1.0;
   }
@@ -876,8 +880,7 @@ void calculateIntensities(int nre, const DoubleFortranVector &energies,
   auto r0 = c_r0();
   auto gj = ggj[nre - 1];
   DoubleFortranMatrix mat(1, dim, 1, dim);
-  intcalc(pi, r0, gj, occupation_factor, jt2mat, energies, mat, dim,
-          temperature);
+  intcalc(r0, gj, occupation_factor, jt2mat, energies, mat, dim, temperature);
 
   deg_on(energies, mat, degeneration, e_energies, i_energies, de);
 }
diff --git a/Framework/CurveFitting/src/Functions/CrystalFieldPeaksBase.cpp b/Framework/CurveFitting/src/Functions/CrystalFieldPeaksBase.cpp
index 37d26a5ff4814f8a24f6478852ec2d325dd6e063..26dfbddec3998cda7a8a44cf7813093d1e7de243 100644
--- a/Framework/CurveFitting/src/Functions/CrystalFieldPeaksBase.cpp
+++ b/Framework/CurveFitting/src/Functions/CrystalFieldPeaksBase.cpp
@@ -11,19 +11,22 @@ namespace Functions {
 namespace {
 
 // Maps ion name to its int code.
-std::map<std::string, int> ion2nre{{"Ce", 1},
-                                   {"Pr", 2},
-                                   {"Nd", 3},
-                                   {"Pm", 4},
-                                   {"Sm", 5},
-                                   {"Eu", 6},
-                                   {"Gd", 7},
-                                   {"Tb", 8},
-                                   {"Dy", 9},
-                                   {"Ho", 10},
-                                   {"Er", 11},
-                                   {"Tm", 12},
-                                   {"Yb", 13}};
+const std::map<std::string, int> ION_2_NRE{{"Ce", 1},
+                                           {"Pr", 2},
+                                           {"Nd", 3},
+                                           {"Pm", 4},
+                                           {"Sm", 5},
+                                           {"Eu", 6},
+                                           {"Gd", 7},
+                                           {"Tb", 8},
+                                           {"Dy", 9},
+                                           {"Ho", 10},
+                                           {"Er", 11},
+                                           {"Tm", 12},
+                                           {"Yb", 13}};
+
+const bool REAL_PARAM_PART = true;
+const bool IMAG_PARAM_PART = false;
 
 void fixx(API::IFunction &fun, const std::string &par) {
   fun.setParameter(par, 0.0);
@@ -44,9 +47,6 @@ void free(API::IFunction &fun, const std::string &par, bool realOnly) {
   }
 }
 
-const bool real = true;
-const bool cmplx = false;
-
 // Set symmetry C1 or Ci
 void setSymmetryC1(API::IFunction &fun) {
   fun.clearTies();
@@ -65,17 +65,17 @@ void setSymmetryC2(API::IFunction &fun) {
   fun.unfixParameter("B40");
   fun.unfixParameter("B60");
   fixx(fun, "B21");
-  free(fun, "B22", real);
+  free(fun, "B22", REAL_PARAM_PART);
   fixx(fun, "B41");
-  free(fun, "B42", cmplx);
+  free(fun, "B42", IMAG_PARAM_PART);
   fixx(fun, "B43");
-  free(fun, "B44", cmplx);
+  free(fun, "B44", IMAG_PARAM_PART);
   fixx(fun, "B61");
-  free(fun, "B62", cmplx);
+  free(fun, "B62", IMAG_PARAM_PART);
   fixx(fun, "B63");
-  free(fun, "B64", cmplx);
+  free(fun, "B64", IMAG_PARAM_PART);
   fixx(fun, "B65");
-  free(fun, "B66", cmplx);
+  free(fun, "B66", IMAG_PARAM_PART);
 }
 
 // Set symmetry C2v, D2 or D2h
@@ -85,17 +85,17 @@ void setSymmetryC2v(API::IFunction &fun) {
   fun.unfixParameter("B40");
   fun.unfixParameter("B60");
   fixx(fun, "B21");
-  free(fun, "B22", real);
+  free(fun, "B22", REAL_PARAM_PART);
   fixx(fun, "B41");
-  free(fun, "B42", real);
+  free(fun, "B42", REAL_PARAM_PART);
   fixx(fun, "B43");
-  free(fun, "B44", real);
+  free(fun, "B44", REAL_PARAM_PART);
   fixx(fun, "B61");
-  free(fun, "B62", real);
+  free(fun, "B62", REAL_PARAM_PART);
   fixx(fun, "B63");
-  free(fun, "B64", real);
+  free(fun, "B64", REAL_PARAM_PART);
   fixx(fun, "B65");
-  free(fun, "B66", real);
+  free(fun, "B66", REAL_PARAM_PART);
 }
 
 // Set symmetry C4, S4 or C4h
@@ -109,11 +109,11 @@ void setSymmetryC4(API::IFunction &fun) {
   fixx(fun, "B41");
   fixx(fun, "B42");
   fixx(fun, "B43");
-  free(fun, "B44", real);
+  free(fun, "B44", REAL_PARAM_PART);
   fixx(fun, "B61");
   fixx(fun, "B62");
   fixx(fun, "B63");
-  free(fun, "B64", cmplx);
+  free(fun, "B64", IMAG_PARAM_PART);
   fixx(fun, "B65");
   fixx(fun, "B66");
 }
@@ -129,11 +129,11 @@ void setSymmetryD4(API::IFunction &fun) {
   fixx(fun, "B41");
   fixx(fun, "B42");
   fixx(fun, "B43");
-  free(fun, "B44", real);
+  free(fun, "B44", REAL_PARAM_PART);
   fixx(fun, "B61");
   fixx(fun, "B62");
   fixx(fun, "B63");
-  free(fun, "B64", real);
+  free(fun, "B64", REAL_PARAM_PART);
   fixx(fun, "B65");
   fixx(fun, "B66");
 }
@@ -148,14 +148,14 @@ void setSymmetryC3(API::IFunction &fun) {
   fixx(fun, "B22");
   fixx(fun, "B41");
   fixx(fun, "B42");
-  free(fun, "B43", real);
+  free(fun, "B43", REAL_PARAM_PART);
   fixx(fun, "B44");
   fixx(fun, "B61");
   fixx(fun, "B62");
-  free(fun, "B63", cmplx);
+  free(fun, "B63", IMAG_PARAM_PART);
   fixx(fun, "B64");
   fixx(fun, "B65");
-  free(fun, "B66", cmplx);
+  free(fun, "B66", IMAG_PARAM_PART);
 }
 
 // Set symmetry D3, C3v or D3d
@@ -168,14 +168,14 @@ void setSymmetryD3(API::IFunction &fun) {
   fixx(fun, "B22");
   fixx(fun, "B41");
   fixx(fun, "B42");
-  free(fun, "B43", real);
+  free(fun, "B43", REAL_PARAM_PART);
   fixx(fun, "B44");
   fixx(fun, "B61");
   fixx(fun, "B62");
-  free(fun, "B63", real);
+  free(fun, "B63", REAL_PARAM_PART);
   fixx(fun, "B64");
   fixx(fun, "B65");
-  free(fun, "B66", real);
+  free(fun, "B66", REAL_PARAM_PART);
 }
 
 // Set symmetry C6, C3h, C6h, D6, C6v, D3h, or D6h
@@ -195,7 +195,7 @@ void setSymmetryC6(API::IFunction &fun) {
   fixx(fun, "B63");
   fixx(fun, "B64");
   fixx(fun, "B65");
-  free(fun, "B66", real);
+  free(fun, "B66", REAL_PARAM_PART);
 }
 
 // Set symmetry T, Td, Th, O, or Oh
@@ -210,11 +210,11 @@ void setSymmetryT(API::IFunction &fun) {
   fixx(fun, "B41");
   fixx(fun, "B42");
   fixx(fun, "B43");
-  free(fun, "B44", real);
+  free(fun, "B44", REAL_PARAM_PART);
   fixx(fun, "B61");
   fixx(fun, "B62");
   fixx(fun, "B63");
-  free(fun, "B64", real);
+  free(fun, "B64", REAL_PARAM_PART);
   fixx(fun, "B65");
   fixx(fun, "B66");
   fun.tie("B44", "5*B40");
@@ -222,7 +222,7 @@ void setSymmetryT(API::IFunction &fun) {
 }
 
 /// Maps symmetry group names to the symmetry setting functions
-std::map<std::string, std::function<void(API::IFunction &)>> symmetryMap{
+const std::map<std::string, std::function<void(API::IFunction &)>> SYMMETRY_MAP{
     // Set symmetry C1 or Ci
     {"C1", setSymmetryC1},
     {"Ci", setSymmetryC1},
@@ -274,7 +274,7 @@ CrystalFieldPeaksBase::CrystalFieldPeaksBase()
   declareAttribute("Ion", Attribute("Ce"));
   declareAttribute("Symmetry", Attribute("Ci"));
   declareAttribute("ToleranceEnergy", Attribute(1.0e-10));
-  declareAttribute("ToleranceIntensity", Attribute(1.0e-3));
+  declareAttribute("ToleranceIntensity", Attribute(1.0e-1));
   declareAttribute("MaxPeakCount", Attribute(0));
 
   declareParameter("BmolX", 0.0, "The x-component of the molecular field.");
@@ -330,8 +330,8 @@ void CrystalFieldPeaksBase::calculateEigenSystem(DoubleFortranVector &en,
     throw std::runtime_error("Ion name must be specified.");
   }
 
-  auto ionIter = ion2nre.find(ion);
-  if (ionIter == ion2nre.end()) {
+  auto ionIter = ION_2_NRE.find(ion);
+  if (ionIter == ION_2_NRE.end()) {
     throw std::runtime_error("Unknown ion name passed to CrystalFieldPeaks.");
   }
 
@@ -404,8 +404,8 @@ void CrystalFieldPeaksBase::calculateEigenSystem(DoubleFortranVector &en,
 void CrystalFieldPeaksBase::setAttribute(const std::string &name,
                                          const IFunction::Attribute &attr) {
   if (name == "Symmetry") {
-    auto symmIter = symmetryMap.find(attr.asString());
-    if (symmIter == symmetryMap.end()) {
+    auto symmIter = SYMMETRY_MAP.find(attr.asString());
+    if (symmIter == SYMMETRY_MAP.end()) {
       throw std::runtime_error("Unknown symmetry passed to CrystalFieldPeaks.");
     }
     symmIter->second(*this);
diff --git a/Framework/CurveFitting/src/Functions/Gaussian.cpp b/Framework/CurveFitting/src/Functions/Gaussian.cpp
index 9a90822fdb38bb15b13c576ec644c93218d31cc2..e4e7060c07643b66287d07b7195a617110a51e21 100644
--- a/Framework/CurveFitting/src/Functions/Gaussian.cpp
+++ b/Framework/CurveFitting/src/Functions/Gaussian.cpp
@@ -3,7 +3,6 @@
 //----------------------------------------------------------------------
 #include "MantidCurveFitting/Functions/Gaussian.h"
 #include "MantidAPI/FunctionFactory.h"
-#include <boost/math/special_functions/fpclassify.hpp>
 
 #include <cmath>
 #include <numeric>
@@ -83,7 +82,7 @@ double Gaussian::intensity() const {
   auto sigma = getParameter("Sigma");
   if (sigma == 0.0) {
     auto height = getParameter("Height");
-    if (boost::math::isfinite(height)) {
+    if (std::isfinite(height)) {
       m_intensityCache = height;
     }
   } else {
diff --git a/Framework/CurveFitting/src/Functions/TeixeiraWaterSQE.cpp b/Framework/CurveFitting/src/Functions/TeixeiraWaterSQE.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e7c313ee21a9541e655cde1d60470b34a8a628bb
--- /dev/null
+++ b/Framework/CurveFitting/src/Functions/TeixeiraWaterSQE.cpp
@@ -0,0 +1,93 @@
+// Mantid Coding standars <http://www.mantidproject.org/Coding_Standards>
+// Main Module Header
+#include "MantidCurveFitting/Functions/TeixeiraWaterSQE.h"
+// Mantid Headers from the same project
+#include "MantidCurveFitting/Constraints/BoundaryConstraint.h"
+// Mantid headers from other projects
+#include "MantidAPI/FunctionFactory.h"
+#include "MantidAPI/IFunction.h"
+// third party library headers
+// standard library headers
+#include <cmath>
+#include <limits>
+
+using BConstraint = Mantid::CurveFitting::Constraints::BoundaryConstraint;
+
+namespace {
+Mantid::Kernel::Logger g_log("TeixeiraWaterSQE");
+}
+
+namespace Mantid {
+namespace CurveFitting {
+namespace Functions {
+
+DECLARE_FUNCTION(TeixeiraWaterSQE)
+
+/**
+ * @brief Constructor where parameters and attributes are declared
+ */
+TeixeiraWaterSQE::TeixeiraWaterSQE() {
+  this->declareParameter("Height", 1.0, "scaling factor");
+  this->declareParameter("DiffCoeff", 2.3,
+                         "Diffusion coefficient (10^(-5)cm^2/s)");
+  this->declareParameter("Tau", 1.25, "Residence time (ps)");
+  this->declareParameter("Centre", 0.0, "Shift along the X-axis");
+  // Momentum transfer Q, an attribute (not a fitting parameter)
+  this->declareAttribute("Q", API::IFunction::Attribute(0.3));
+}
+
+/**
+ * @brief Set constraints on fitting parameters
+ */
+void TeixeiraWaterSQE::init() {
+  // Ensure positive values for Height, Length, and Tau
+  auto HeightConstraint = new BConstraint(
+      this, "Height", std::numeric_limits<double>::epsilon(), true);
+  this->addConstraint(HeightConstraint);
+  auto DiffCoeffConstraint = new BConstraint(
+      this, "DiffCoeff", std::numeric_limits<double>::epsilon(), true);
+  this->addConstraint(DiffCoeffConstraint);
+  auto TauConstraint = new BConstraint(
+      this, "Tau", std::numeric_limits<double>::epsilon(), true);
+  this->addConstraint(TauConstraint);
+}
+
+/**
+ * @brief Calculate function values on an energy domain
+ * @param out array to store function values
+ * @param xValues energy domain where function is evaluated
+ * @param nData size of the energy domain
+ */
+void TeixeiraWaterSQE::function1D(double *out, const double *xValues,
+                                  const size_t nData) const {
+  double hbar(0.658211626); // ps*meV
+  auto H = this->getParameter("Height");
+  auto D = this->getParameter("DiffCoeff");
+  auto T = this->getParameter("Tau");
+  auto C = this->getParameter("Centre");
+  auto Q = this->getAttribute("Q").asDouble();
+
+  // Penalize negative parameters, just in case they show up
+  // when calculating the numeric derivative
+  if (H < std::numeric_limits<double>::epsilon() ||
+      D < std::numeric_limits<double>::epsilon() ||
+      T < std::numeric_limits<double>::epsilon()) {
+    for (size_t j = 0; j < nData; j++) {
+      out[j] = std::numeric_limits<double>::infinity();
+    }
+    return;
+  }
+
+  // Lorentzian intensities and HWHM
+  D *= 0.10; // conversion from 10^{-5}cm^2/s to Angstrom^2/ps, the internal
+             // units used
+  auto G = hbar * D * Q * Q / (1 + D * Q * Q * T);
+  for (size_t j = 0; j < nData; j++) {
+    auto E = xValues[j] - C;
+    out[j] += H * G / (G * G + E * E) / M_PI;
+  }
+}
+
+} // namespace Functions
+} // namespace CurveFitting
+} // namespace Mantid
diff --git a/Framework/CurveFitting/src/HistogramDomainCreator.cpp b/Framework/CurveFitting/src/HistogramDomainCreator.cpp
index 59f68c4fae485b7db188cc15d25d1ab69c3a2f36..0b146233787b39863f773204a041a65770c72c79 100644
--- a/Framework/CurveFitting/src/HistogramDomainCreator.cpp
+++ b/Framework/CurveFitting/src/HistogramDomainCreator.cpp
@@ -84,12 +84,12 @@ void HistogramDomainCreator::createDomain(
       error *= dx;
     }
 
-    if (!boost::math::isfinite(y)) // nan or inf data
+    if (!std::isfinite(y)) // nan or inf data
     {
       if (!m_ignoreInvalidData)
         throw std::runtime_error("Infinte number or NaN found in input data.");
-      y = 0.0; // leaving inf or nan would break the fit
-    } else if (!boost::math::isfinite(error)) // nan or inf error
+      y = 0.0;                        // leaving inf or nan would break the fit
+    } else if (!std::isfinite(error)) // nan or inf error
     {
       if (!m_ignoreInvalidData)
         throw std::runtime_error("Infinte number or NaN found in input data.");
diff --git a/Framework/CurveFitting/src/IMWDomainCreator.cpp b/Framework/CurveFitting/src/IMWDomainCreator.cpp
index 90c779ae4ecbf37a37353605d281fc17ce63ef05..9a5ee6bfe8968de3a5b71e30e84ee30d3a34e152 100644
--- a/Framework/CurveFitting/src/IMWDomainCreator.cpp
+++ b/Framework/CurveFitting/src/IMWDomainCreator.cpp
@@ -20,7 +20,6 @@
 #include "MantidKernel/EmptyValues.h"
 #include "MantidKernel/Matrix.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
 #include <algorithm>
 
 namespace Mantid {
@@ -43,6 +42,8 @@ public:
   double get(size_t iY, size_t iP) override {
     return m_data[iY * m_nParams + iP];
   }
+  /// Zero
+  void zero() override { m_data.assign(m_data.size(), 0.0); }
 
 private:
   size_t m_nParams;           ///< number of parameters / second dimension
diff --git a/Framework/CurveFitting/src/RalNlls/TrustRegion.cpp b/Framework/CurveFitting/src/RalNlls/TrustRegion.cpp
index 5598f3d57ed1f7636c1071185391992d940584c0..17738f02743d9a678dc6de67d64d78df8f12ee0f 100644
--- a/Framework/CurveFitting/src/RalNlls/TrustRegion.cpp
+++ b/Framework/CurveFitting/src/RalNlls/TrustRegion.cpp
@@ -26,7 +26,7 @@ const double epsmch = std::numeric_limits<double>::epsilon();
 ///  A = J' * J
 /// @param J :: The matrix.
 /// @param A :: The result.
-void matmult_inner(const DoubleFortranMatrix &J, DoubleFortranMatrix &A) {
+void matmultInner(const DoubleFortranMatrix &J, DoubleFortranMatrix &A) {
   auto n = J.len2();
   A.allocate(n, n);
   gsl_blas_dgemm(CblasTrans, CblasNoTrans, 1.0, J.gsl(), J.gsl(), 0.0, A.gsl());
@@ -38,7 +38,7 @@ void matmult_inner(const DoubleFortranMatrix &J, DoubleFortranMatrix &A) {
 /// @param J :: The matrix.
 /// @param s1 :: The largest sv.
 /// @param sn :: The smalles sv.
-void get_svd_J(const DoubleFortranMatrix &J, double &s1, double &sn) {
+void getSvdJ(const DoubleFortranMatrix &J, double &s1, double &sn) {
 
   auto n = J.len2();
   DoubleFortranMatrix U = J;
@@ -63,8 +63,8 @@ double norm2(const DoubleFortranVector &v) {
 /// @param J :: The matrix.
 /// @param x :: The vector.
 /// @param Jx :: The result vector.
-void mult_J(const DoubleFortranMatrix &J, const DoubleFortranVector &x,
-            DoubleFortranVector &Jx) {
+void multJ(const DoubleFortranMatrix &J, const DoubleFortranVector &x,
+           DoubleFortranVector &Jx) {
   // dgemv('N',m,n,alpha,J,m,x,1,beta,Jx,1);
   if (Jx.len() != J.len1()) {
     Jx.allocate(J.len1());
@@ -76,8 +76,8 @@ void mult_J(const DoubleFortranMatrix &J, const DoubleFortranVector &x,
 /// @param J :: The matrix.
 /// @param x :: The vector.
 /// @param Jtx :: The result vector.
-void mult_Jt(const DoubleFortranMatrix &J, const DoubleFortranVector &x,
-             DoubleFortranVector &Jtx) {
+void multJt(const DoubleFortranMatrix &J, const DoubleFortranVector &x,
+            DoubleFortranVector &Jtx) {
   // dgemv('T',m,n,alpha,J,m,x,1,beta,Jtx,1)
   if (Jtx.len() != J.len2()) {
     Jtx.allocate(J.len2());
@@ -86,7 +86,7 @@ void mult_Jt(const DoubleFortranMatrix &J, const DoubleFortranVector &x,
 }
 
 /// Dot product of two vectors.
-double dot_product(const DoubleFortranVector &x, const DoubleFortranVector &y) {
+double dotProduct(const DoubleFortranVector &x, const DoubleFortranVector &y) {
   return x.dot(y);
 }
 
@@ -106,14 +106,13 @@ double dot_product(const DoubleFortranVector &x, const DoubleFortranVector &y) {
 /// @param d :: The point where to evaluate the model.
 /// @param options :: The options.
 /// @param w :: The work struct.
-double evaluate_model(const DoubleFortranVector &f,
-                      const DoubleFortranMatrix &J,
-                      const DoubleFortranMatrix &hf,
-                      const DoubleFortranVector &d, const nlls_options &options,
-                      evaluate_model_work &w) {
+double evaluateModel(const DoubleFortranVector &f, const DoubleFortranMatrix &J,
+                     const DoubleFortranMatrix &hf,
+                     const DoubleFortranVector &d, const nlls_options &options,
+                     evaluate_model_work &w) {
 
   // Jd = J*d
-  mult_J(J, d, w.Jd);
+  multJ(J, d, w.Jd);
 
   // First, get the base
   // 0.5 (f^T f + f^T J d + d^T' J ^T J d )
@@ -128,8 +127,8 @@ double evaluate_model(const DoubleFortranVector &f,
   default:
     // these have a dynamic H -- recalculate
     // H = J^T J + HF, HF is (an approx?) to the Hessian
-    mult_J(hf, d, w.Hd);
-    md = w.md_gn + 0.5 * dot_product(d, w.Hd);
+    multJ(hf, d, w.Hd);
+    md = w.md_gn + 0.5 * dotProduct(d, w.Hd);
   }
   return md;
 }
@@ -144,8 +143,8 @@ double evaluate_model(const DoubleFortranVector &f,
 /// @param normfnew :: The 2-norm of the residuals vector at d != 0.
 /// @param md :: The value of the model at the same d as normfnew.
 /// @param options :: The options.
-double calculate_rho(double normf, double normfnew, double md,
-                     const nlls_options &options) {
+double calculateRho(double normf, double normfnew, double md,
+                    const nlls_options &options) {
   UNUSED_ARG(options);
   auto actual_reduction = (0.5 * pow(normf, 2)) - (0.5 * pow(normfnew, 2));
   auto predicted_reduction = ((0.5 * pow(normf, 2)) - md);
@@ -163,22 +162,22 @@ double calculate_rho(double normf, double normfnew, double md,
 /// Update the Hessian matrix without actually evaluating it (quasi-Newton?)
 /// @param hf :: The matrix to update.
 /// @param w :: The work struct.
-void rank_one_update(DoubleFortranMatrix &hf, NLLS_workspace &w) {
+void rankOneUpdate(DoubleFortranMatrix &hf, NLLS_workspace &w) {
 
-  auto yts = dot_product(w.d, w.y);
+  auto yts = dotProduct(w.d, w.y);
   if (fabs(yts) < sqrt(10 * epsmch)) {
     //! safeguard: skip this update
     return;
   }
 
-  mult_J(hf, w.d, w.Sks); // hfs = S_k * d
+  multJ(hf, w.d, w.Sks); // hfs = S_k * d
 
   w.ysharpSks = w.y_sharp;
   w.ysharpSks -= w.Sks;
 
   // now, let's scale hd (Nocedal and Wright, Section 10.2)
-  auto dSks = fabs(dot_product(w.d, w.Sks));
-  auto alpha = fabs(dot_product(w.d, w.y_sharp)) / dSks;
+  auto dSks = fabs(dotProduct(w.d, w.Sks));
+  auto alpha = fabs(dotProduct(w.d, w.y_sharp)) / dSks;
   alpha = std::min(one, alpha);
   hf *= alpha;
 
@@ -192,21 +191,21 @@ void rank_one_update(DoubleFortranMatrix &hf, NLLS_workspace &w) {
   // call dGER(n,n,alpha,w.y,1,w.ysharpSks,1,hf,n)
   gsl_blas_dger(alpha, w.y.gsl(), w.ysharpSks.gsl(), hf.gsl());
   // hf = hf - ((y# - Sk d)^T d)/((yts)**2)) * y y^T
-  alpha = -dot_product(w.ysharpSks, w.d) / (pow(yts, 2));
+  alpha = -dotProduct(w.ysharpSks, w.d) / (pow(yts, 2));
   // call dGER(n,n,alpha,w.y,1,w.y,1,hf,n)
   gsl_blas_dger(alpha, w.y.gsl(), w.y.gsl(), hf.gsl());
 }
 
 /// Update the trust region radius which is hidden in NLLS_workspace w
 /// (w.Delta).
-/// @param rho :: The rho calculated by calculate_rho(...). It may also be
+/// @param rho :: The rho calculated by calculateRho(...). It may also be
 /// updated.
 /// @param options :: The options.
 /// @param inform :: The information.
 /// @param w :: The work struct containing the radius that is to be updated
 /// (w.Delta).
-void update_trust_region_radius(double &rho, const nlls_options &options,
-                                nlls_inform &inform, NLLS_workspace &w) {
+void updateTrustRegionRadius(double &rho, const nlls_options &options,
+                             nlls_inform &inform, NLLS_workspace &w) {
 
   switch (options.tr_update_strategy) {
   case 1: // default, step-function
@@ -260,9 +259,8 @@ void update_trust_region_radius(double &rho, const nlls_options &options,
 }
 
 /// Test the convergence.
-void test_convergence(double normF, double normJF, double normF0,
-                      double normJF0, const nlls_options &options,
-                      nlls_inform &inform) {
+void testConvergence(double normF, double normJF, double normF0, double normJF0,
+                     const nlls_options &options, nlls_inform &inform) {
 
   if (normF <=
       std::max(options.stop_g_absolute, options.stop_g_relative * normF0)) {
@@ -290,9 +288,9 @@ void test_convergence(double normF, double normJF, double normF0,
 /// @param w :: Stored scaling data.
 /// @param options :: The options.
 /// @param inform :: The information.
-void apply_scaling(const DoubleFortranMatrix &J, DoubleFortranMatrix &A,
-                   DoubleFortranVector &v, apply_scaling_work &w,
-                   const nlls_options &options, nlls_inform &inform) {
+void applyScaling(const DoubleFortranMatrix &J, DoubleFortranMatrix &A,
+                  DoubleFortranVector &v, apply_scaling_work &w,
+                  const nlls_options &options, nlls_inform &inform) {
   auto m = J.len1();
   auto n = J.len2();
   if (w.diag.len() != n) {
@@ -359,8 +357,8 @@ void apply_scaling(const DoubleFortranMatrix &J, DoubleFortranMatrix &A,
 /// @param A :: The input matrix.
 /// @param ew :: The output eigenvalues.
 /// @param ev :: The output eigenvectors.
-void all_eig_symm(const DoubleFortranMatrix &A, DoubleFortranVector &ew,
-                  DoubleFortranMatrix &ev) {
+void allEigSymm(const DoubleFortranMatrix &A, DoubleFortranVector &ew,
+                DoubleFortranMatrix &ev) {
   auto M = A;
   M.eigenSystem(ew, ev);
 }
@@ -369,7 +367,7 @@ void all_eig_symm(const DoubleFortranMatrix &A, DoubleFortranVector &ew,
 // If we start using them the method should be un-commented and used here
 //
 // void apply_second_order_info(int n, int m, const DoubleFortranVector &X,
-//                             NLLS_workspace &w, eval_hf_type eval_HF,
+//                             NLLS_workspace &w, eval_hf_type evalHF,
 //                             params_base_type params,
 //                             const nlls_options &options, nlls_inform &inform,
 //                             const DoubleFortranVector &weights) {
@@ -377,11 +375,11 @@ void all_eig_symm(const DoubleFortranMatrix &A, DoubleFortranVector &ew,
 //  if (options.exact_second_derivatives) {
 //    DoubleFortranVector temp = w.f;
 //    temp *= weights;
-//    eval_HF(inform.external_return, n, m, X, temp, w.hf, params);
+//    evalHF(inform.external_return, n, m, X, temp, w.hf, params);
 //    inform.h_eval = inform.h_eval + 1;
 //  } else {
 //    // use the rank-one approximation...
-//    rank_one_update(w.hf, w, n);
+//    rankOneUpdate(w.hf, w, n);
 //  }
 //}
 
diff --git a/Framework/CurveFitting/test/Algorithms/CalculateChiSquaredTest.h b/Framework/CurveFitting/test/Algorithms/CalculateChiSquaredTest.h
index d1abcf80c08a0b490ae10f017d9195c6a820d6ab..718c447c1ee2dfcc556b95d53dcd4edf813dc558 100644
--- a/Framework/CurveFitting/test/Algorithms/CalculateChiSquaredTest.h
+++ b/Framework/CurveFitting/test/Algorithms/CalculateChiSquaredTest.h
@@ -14,8 +14,7 @@
 #include "MantidAPI/WorkspaceFactory.h"
 #include "MantidKernel/EmptyValues.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
-
+#include <cmath>
 #include <algorithm>
 #include <limits>
 
@@ -310,8 +309,7 @@ private:
 
     bool isGoodValue(double y, double e) {
       return !ignoreInvalidData ||
-             (!boost::math::isnan(y) && !boost::math::isinf(y) &&
-              !boost::math::isnan(e) && !boost::math::isinf(e) && e > 0);
+             (std::isfinite(y) && std::isfinite(e) && e > 0);
     }
 
   public:
diff --git a/Framework/CurveFitting/test/Algorithms/ConvertToYSpaceTest.h b/Framework/CurveFitting/test/Algorithms/ConvertToYSpaceTest.h
index 839a9202dcdaa6ca483a5d439f97522d1dba0471..3dbfccc88a5773ca386155d141e64cfb905dca0a 100644
--- a/Framework/CurveFitting/test/Algorithms/ConvertToYSpaceTest.h
+++ b/Framework/CurveFitting/test/Algorithms/ConvertToYSpaceTest.h
@@ -54,9 +54,9 @@ public:
     const size_t npts = ySpOutputWs->blocksize();
 
     // Test a few y-Space values
-    const auto &ySpOutX = ySpOutputWs->readX(0);
-    const auto &ySpOutY = ySpOutputWs->readY(0);
-    const auto &ySpOutE = ySpOutputWs->readE(0);
+    const auto &ySpOutX = ySpOutputWs->x(0);
+    const auto &ySpOutY = ySpOutputWs->y(0);
+    const auto &ySpOutE = ySpOutputWs->e(0);
 
     // X
     TS_ASSERT_DELTA(-18.71348856, ySpOutX.front(), 1e-08);
@@ -72,9 +72,9 @@ public:
     TS_ASSERT_DELTA(138.38603736, ySpOutE.back(), 1e-08);
 
     // Test a few q-Space values
-    const auto &qSpOutX = qSpOutputWs->readX(0);
-    const auto &qSpOutY = qSpOutputWs->readY(0);
-    const auto &qSpOutE = qSpOutputWs->readE(0);
+    const auto &qSpOutX = qSpOutputWs->x(0);
+    const auto &qSpOutY = qSpOutputWs->y(0);
+    const auto &qSpOutE = qSpOutputWs->e(0);
 
     // X
     TS_ASSERT_DELTA(-18.71348856, qSpOutX.front(), 1e-08);
diff --git a/Framework/CurveFitting/test/Algorithms/ConvolveWorkspacesTest.h b/Framework/CurveFitting/test/Algorithms/ConvolveWorkspacesTest.h
index fe9dc90f597485b84dc5257466b1ec3f8a180aed..9343daa70f29d0ea1604572c77a4cc0ff407f154 100644
--- a/Framework/CurveFitting/test/Algorithms/ConvolveWorkspacesTest.h
+++ b/Framework/CurveFitting/test/Algorithms/ConvolveWorkspacesTest.h
@@ -23,22 +23,25 @@ using namespace Mantid::DataObjects;
 using namespace Mantid::CurveFitting;
 using namespace Mantid::CurveFitting::Algorithms;
 
+namespace {
+// Functor to generate spline values
+struct NormGaussianFunc1 {
+  double operator()(double x, int) {
+    double sig = 0.1;
+    return exp(-pow(x, 2) / (2 * pow(sig, 2))) / (sqrt(2 * M_PI) * sig);
+  }
+};
+// Functor to generate spline values
+struct NormGaussianFunc2 {
+  double operator()(double x, int) {
+    double sig = sqrt(0.1 * 0.1 + 0.1 * 0.1);
+    return exp(-pow(x, 2) / (2 * pow(sig, 2))) / (sqrt(2 * M_PI) * sig);
+  }
+};
+}
+
 class ConvolveWorkspacesTest : public CxxTest::TestSuite {
 public:
-  // Functor to generate spline values
-  struct NormGaussianFunc1 {
-    double operator()(double x, int) {
-      double sig = 0.1;
-      return exp(-pow(x, 2) / (2 * pow(sig, 2))) / (sqrt(2 * M_PI) * sig);
-    }
-  };
-  // Functor to generate spline values
-  struct NormGaussianFunc2 {
-    double operator()(double x, int) {
-      double sig = sqrt(0.1 * 0.1 + 0.1 * 0.1);
-      return exp(-pow(x, 2) / (2 * pow(sig, 2))) / (sqrt(2 * M_PI) * sig);
-    }
-  };
   void testFunction() {
     ConvolveWorkspaces alg;
 
@@ -68,10 +71,10 @@ public:
     Workspace2D_sptr ows = alg.getProperty("OutputWorkspace");
 
     for (size_t i = 0; i < ows->getNumberHistograms(); ++i) {
-      const auto &xs2 = ws2->readX(i);
-      const auto &xs = ows->readX(i);
-      const auto &ys2 = ws2->readY(i);
-      const auto &ys = ows->readY(i);
+      const auto &xs2 = ws2->x(i);
+      const auto &xs = ows->x(i);
+      const auto &ys2 = ws2->y(i);
+      const auto &ys = ows->y(i);
 
       // check output for consistency
       for (size_t j = 0; j < ys.size(); ++j) {
@@ -84,4 +87,41 @@ public:
   }
 };
 
+class ConvolveWorkspacesTestPerformance : public CxxTest::TestSuite {
+public:
+  // This pair of boilerplate methods prevent the suite being created statically
+  // This means the constructor isn't called when running other tests
+  static ConvolveWorkspacesTestPerformance *createSuite() {
+    return new ConvolveWorkspacesTestPerformance();
+  }
+  static void destroySuite(ConvolveWorkspacesTestPerformance *suite) {
+    delete suite;
+  }
+
+  ConvolveWorkspacesTestPerformance() { FrameworkManager::Instance(); }
+
+  void setUp() override {
+    ws1 = WorkspaceCreationHelper::Create2DWorkspaceFromFunction(
+        NormGaussianFunc1(), 1000, -5.0, 5.0, 0.005, false);
+    ws2 = WorkspaceCreationHelper::Create2DWorkspaceFromFunction(
+        NormGaussianFunc2(), 1000, -5.0, 5.0, 0.005, false);
+    AnalysisDataService::Instance().addOrReplace("wksp1", ws1);
+    AnalysisDataService::Instance().addOrReplace("wksp2", ws2);
+  }
+
+  void tearDown() override { AnalysisDataService::Instance().clear(); }
+
+  void testExec() {
+    ConvolveWorkspaces alg;
+    alg.initialize();
+    alg.setPropertyValue("OutputWorkspace", "Conv");
+    alg.setProperty("Workspace1", "wksp1");
+    alg.setProperty("Workspace2", "wksp2");
+    alg.execute();
+  }
+
+private:
+  Workspace2D_sptr ws1, ws2;
+};
+
 #endif /*ConvolveWorkspacesTEST_H_*/
diff --git a/Framework/CurveFitting/test/Algorithms/FitTest.h b/Framework/CurveFitting/test/Algorithms/FitTest.h
index e57a108a586ff24de6f6ba0bf6b654f6a0614c5e..30950a9230a87544ea2030fd0737ec6642dd7180 100644
--- a/Framework/CurveFitting/test/Algorithms/FitTest.h
+++ b/Framework/CurveFitting/test/Algorithms/FitTest.h
@@ -21,7 +21,6 @@
 #include "MantidTestHelpers/WorkspaceCreationHelper.h"
 
 #include <Poco/File.h>
-#include <gsl/gsl_version.h>
 
 using namespace Mantid;
 using namespace Mantid::API;
@@ -902,22 +901,25 @@ public:
 
   void test_function_crystal_field_peaks_fit() {
 
+    // Changed output intensity from barn to mb/sr
+    const double c_mbsr = 79.5774715459;
+
     auto data = TableWorkspace_sptr(new TableWorkspace);
     data->addColumn("double", "Energy");
     data->addColumn("double", "Intensity");
 
     TableRow row = data->appendRow();
-    row << 0.0 << 2.74937;
+    row << 0.0 << 2.74937 * c_mbsr;
     row = data->appendRow();
-    row << 29.3261 << 0.7204;
+    row << 29.3261 << 0.7204 * c_mbsr;
     row = data->appendRow();
-    row << 44.3412 << 0.429809;
+    row << 44.3412 << 0.429809 * c_mbsr;
 
     Fit fit;
     fit.initialize();
     fit.setProperty("Function",
                     "name=CrystalFieldPeaks,Ion=Ce,Symmetry=Ci,Temperature="
-                    "44,ToleranceEnergy=1e-10,ToleranceIntensity=0.001,"
+                    "44,ToleranceEnergy=1e-10,ToleranceIntensity=0.1,"
                     "BmolX=0,BmolY=0,BmolZ=0,BextX=0,BextY=0,BextZ=0,B20=0."
                     "37,B21=0,B22=3.9,B40=-0.03,B41=0,B42=-0.11,B43=0,B44=-"
                     "0.12,B60=0,B61=0,B62=0,B63=0,B64=0,B65=0,B66=0,IB21=0,"
@@ -938,11 +940,11 @@ public:
 
     Mantid::API::IFunction_sptr outF = fit.getProperty("Function");
 
-    TS_ASSERT_DELTA(outF->getParameter("B20"), 0.366336, 0.0001);
-    TS_ASSERT_DELTA(outF->getParameter("B22"), 3.98132, 0.0001);
-    TS_ASSERT_DELTA(outF->getParameter("B40"), -0.0304001, 0.0001);
-    TS_ASSERT_DELTA(outF->getParameter("B42"), -0.119605, 0.0001);
-    TS_ASSERT_DELTA(outF->getParameter("B44"), -0.130124, 0.0001);
+    TS_ASSERT_DELTA(outF->getParameter("B20"), 0.366336, 0.0001 * c_mbsr);
+    TS_ASSERT_DELTA(outF->getParameter("B22"), 3.98132, 0.0001 * c_mbsr);
+    TS_ASSERT_DELTA(outF->getParameter("B40"), -0.0304001, 0.0001 * c_mbsr);
+    TS_ASSERT_DELTA(outF->getParameter("B42"), -0.119605, 0.0001 * c_mbsr);
+    TS_ASSERT_DELTA(outF->getParameter("B44"), -0.130124, 0.0001 * c_mbsr);
 
     ITableWorkspace_sptr output =
         AnalysisDataService::Instance().retrieveWS<ITableWorkspace>(
@@ -956,17 +958,17 @@ public:
       TS_ASSERT_DELTA(column->toDouble(1), 29.3261, 0.0001);
       TS_ASSERT_DELTA(column->toDouble(2), 44.3412, 0.0001);
       column = output->getColumn("Intensity");
-      TS_ASSERT_DELTA(column->toDouble(0), 2.74937, 0.0001);
-      TS_ASSERT_DELTA(column->toDouble(1), 0.7204, 0.0001);
-      TS_ASSERT_DELTA(column->toDouble(2), 0.429809, 0.0001);
+      TS_ASSERT_DELTA(column->toDouble(0), 2.74937 * c_mbsr, 0.0001 * c_mbsr);
+      TS_ASSERT_DELTA(column->toDouble(1), 0.7204 * c_mbsr, 0.0001 * c_mbsr);
+      TS_ASSERT_DELTA(column->toDouble(2), 0.429809 * c_mbsr, 0.0001 * c_mbsr);
       column = output->getColumn("Energy_calc");
       TS_ASSERT_DELTA(column->toDouble(0), 0.0, 0.0001);
       TS_ASSERT_DELTA(column->toDouble(1), 29.3261, 0.0001);
       TS_ASSERT_DELTA(column->toDouble(2), 44.3412, 0.0001);
       column = output->getColumn("Intensity_calc");
-      TS_ASSERT_DELTA(column->toDouble(0), 2.74937, 0.0001);
-      TS_ASSERT_DELTA(column->toDouble(1), 0.7204, 0.0001);
-      TS_ASSERT_DELTA(column->toDouble(2), 0.429809, 0.0001);
+      TS_ASSERT_DELTA(column->toDouble(0), 2.74937 * c_mbsr, 0.0001 * c_mbsr);
+      TS_ASSERT_DELTA(column->toDouble(1), 0.7204 * c_mbsr, 0.0001 * c_mbsr);
+      TS_ASSERT_DELTA(column->toDouble(2), 0.429809 * c_mbsr, 0.0001 * c_mbsr);
     }
   }
 
@@ -1069,12 +1071,15 @@ public:
 
   void test_function_Multidomain_Fit() {
     auto multi = Mantid::TestHelpers::makeMultiDomainFunction3();
-    multi->getFunction(0)->setParameter("A", 0);
-    multi->getFunction(0)->setParameter("B", 0);
-    multi->getFunction(1)->setParameter("A", 0);
-    multi->getFunction(1)->setParameter("B", 0);
-    multi->getFunction(2)->setParameter("A", 0);
-    multi->getFunction(2)->setParameter("B", 0);
+    multi->getFunction(0)->setParameter("A", 1);
+    multi->getFunction(0)->setParameter("B", 1);
+    multi->getFunction(0)->setAttributeValue("Order", 1);
+    multi->getFunction(1)->setParameter("A", 1);
+    multi->getFunction(1)->setParameter("B", 1);
+    multi->getFunction(1)->setAttributeValue("Order", 3);
+    multi->getFunction(2)->setParameter("A", 1);
+    multi->getFunction(2)->setParameter("B", 1);
+    multi->getFunction(2)->setAttributeValue("Order", 5);
 
     Algorithms::Fit fit;
     fit.initialize();
@@ -1093,15 +1098,13 @@ public:
     fit.execute();
     TS_ASSERT(fit.isExecuted());
 
-#if GSL_MAJOR_VERSION < 2
     IFunction_sptr fun = fit.getProperty("Function");
-    TS_ASSERT_DELTA(fun->getParameter("f0.A"), 0, 1e-8);
-    TS_ASSERT_DELTA(fun->getParameter("f0.B"), 1, 1e-8);
-    TS_ASSERT_DELTA(fun->getParameter("f1.A"), 1, 1e-8);
-    TS_ASSERT_DELTA(fun->getParameter("f1.B"), 2, 1e-8);
-    TS_ASSERT_DELTA(fun->getParameter("f2.A"), 2, 1e-8);
-    TS_ASSERT_DELTA(fun->getParameter("f2.B"), 3, 1e-8);
-#endif
+    TS_ASSERT_DELTA(fun->getParameter("f0.A"), 0.5, 1e-8);
+    TS_ASSERT_DELTA(fun->getParameter("f0.B"), 5, 1e-8);
+    TS_ASSERT_DELTA(fun->getParameter("f1.A"), -4, 1e-8);
+    TS_ASSERT_DELTA(fun->getParameter("f1.B"), -20, 1e-8);
+    TS_ASSERT_DELTA(fun->getParameter("f2.A"), 4, 1e-8);
+    TS_ASSERT_DELTA(fun->getParameter("f2.B"), 16, 1e-8);
   }
 
   void test_function_Multidomain_one_function_to_two_parts_of_workspace() {
diff --git a/Framework/CurveFitting/test/Functions/BivariateNormalTest.h b/Framework/CurveFitting/test/Functions/BivariateNormalTest.h
index cc634fc8a96e7c01cb6aa667fbda5af95e8042aa..68ae5265d01eec368acb1df19ca89d8e90e5e5d2 100644
--- a/Framework/CurveFitting/test/Functions/BivariateNormalTest.h
+++ b/Framework/CurveFitting/test/Functions/BivariateNormalTest.h
@@ -45,6 +45,8 @@ public:
   void set(size_t iY, size_t iP, double value) override { M[iP][iY] = value; }
 
   double get(size_t iY, size_t iP) override { return M[iP][iY]; }
+
+  void zero() override { M.zeroMatrix(); }
 };
 
 class BivariateNormalTest : public CxxTest::TestSuite {
diff --git a/Framework/CurveFitting/test/Functions/CrystalFieldMultiSpectrumTest.h b/Framework/CurveFitting/test/Functions/CrystalFieldMultiSpectrumTest.h
index 9834b93021beaa9369d0865b2979c97105e69557..e2e9c534bb998e37d5f1bede2bb7cc580201e896 100644
--- a/Framework/CurveFitting/test/Functions/CrystalFieldMultiSpectrumTest.h
+++ b/Framework/CurveFitting/test/Functions/CrystalFieldMultiSpectrumTest.h
@@ -24,6 +24,9 @@ using namespace Mantid::CurveFitting::Functions;
 
 class CrystalFieldMultiSpectrumTest : public CxxTest::TestSuite {
 public:
+  // Conversion factor from barn to milibarn/steradian
+  const double c_mbsr = 79.5774715459;
+
   void test_function() {
     CrystalFieldMultiSpectrum fun;
     fun.setParameter("B20", 0.37737);
@@ -74,15 +77,18 @@ public:
     TS_ASSERT_DELTA(fun.getParameter("f0.f0.A0"), 0.0, 1e-3);
 
     TS_ASSERT_DELTA(fun.getParameter("f0.f1.PeakCentre"), 0.0, 1e-3);
-    TS_ASSERT_DELTA(fun.getParameter("f0.f1.Amplitude"), 2.749, 1e-3);
+    TS_ASSERT_DELTA(fun.getParameter("f0.f1.Amplitude"), 2.749 * c_mbsr,
+                    1e-3 * c_mbsr);
     TS_ASSERT_DELTA(fun.getParameter("f0.f1.FWHM"), 1.5, 1e-3);
 
     TS_ASSERT_DELTA(fun.getParameter("f0.f2.PeakCentre"), 29.3261, 1e-3);
-    TS_ASSERT_DELTA(fun.getParameter("f0.f2.Amplitude"), 0.7204, 1e-3);
+    TS_ASSERT_DELTA(fun.getParameter("f0.f2.Amplitude"), 0.7204 * c_mbsr,
+                    1e-3 * c_mbsr);
     TS_ASSERT_DELTA(fun.getParameter("f0.f2.FWHM"), 1.5, 1e-3);
 
     TS_ASSERT_DELTA(fun.getParameter("f0.f3.PeakCentre"), 44.3412, 1e-3);
-    TS_ASSERT_DELTA(fun.getParameter("f0.f3.Amplitude"), 0.4298, 1e-3);
+    TS_ASSERT_DELTA(fun.getParameter("f0.f3.Amplitude"), 0.4298 * c_mbsr,
+                    1e-3 * c_mbsr);
     TS_ASSERT_DELTA(fun.getParameter("f0.f3.FWHM"), 1.5, 1e-3);
   }
 
@@ -105,16 +111,16 @@ public:
         "Workspace_0");
     TS_ASSERT(out);
     TS_ASSERT_EQUALS(out->getNumberHistograms(), 3);
-    TS_ASSERT_DELTA(out->readY(1)[0], 1.094, 0.001);
-    TS_ASSERT_DELTA(out->readY(1)[1], 0.738, 0.001);
-    TS_ASSERT_DELTA(out->readY(1)[2], 0.373, 0.001);
+    TS_ASSERT_DELTA(out->readY(1)[0], 1.094 * c_mbsr, 0.001 * c_mbsr);
+    TS_ASSERT_DELTA(out->readY(1)[1], 0.738 * c_mbsr, 0.001 * c_mbsr);
+    TS_ASSERT_DELTA(out->readY(1)[2], 0.373 * c_mbsr, 0.001 * c_mbsr);
     out = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(
         "Workspace_1");
     TS_ASSERT(out);
     TS_ASSERT_EQUALS(out->getNumberHistograms(), 3);
-    TS_ASSERT_DELTA(out->readY(1)[0], 1.094, 0.001);
-    TS_ASSERT_DELTA(out->readY(1)[1], 0.738, 0.001);
-    TS_ASSERT_DELTA(out->readY(1)[2], 0.373, 0.001);
+    TS_ASSERT_DELTA(out->readY(1)[0], 1.094 * c_mbsr, 0.001 * c_mbsr);
+    TS_ASSERT_DELTA(out->readY(1)[1], 0.738 * c_mbsr, 0.001 * c_mbsr);
+    TS_ASSERT_DELTA(out->readY(1)[2], 0.373 * c_mbsr, 0.001 * c_mbsr);
     AnalysisDataService::Instance().clear();
   }
 
@@ -138,16 +144,16 @@ public:
         "Workspace_0");
     TS_ASSERT(out);
     TS_ASSERT_EQUALS(out->getNumberHistograms(), 3);
-    TS_ASSERT_DELTA(out->readY(1)[0], 1.094 * 2.0, 0.001);
-    TS_ASSERT_DELTA(out->readY(1)[1], 0.738 * 2.0, 0.001);
-    TS_ASSERT_DELTA(out->readY(1)[2], 0.373 * 2.0, 0.001);
+    TS_ASSERT_DELTA(out->readY(1)[0], 1.094 * 2.0 * c_mbsr, 0.001 * c_mbsr);
+    TS_ASSERT_DELTA(out->readY(1)[1], 0.738 * 2.0 * c_mbsr, 0.001 * c_mbsr);
+    TS_ASSERT_DELTA(out->readY(1)[2], 0.373 * 2.0 * c_mbsr, 0.001 * c_mbsr);
     out = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(
         "Workspace_1");
     TS_ASSERT(out);
     TS_ASSERT_EQUALS(out->getNumberHistograms(), 3);
-    TS_ASSERT_DELTA(out->readY(1)[0], 1.094 * 3.3, 0.001);
-    TS_ASSERT_DELTA(out->readY(1)[1], 0.738 * 3.3, 0.001);
-    TS_ASSERT_DELTA(out->readY(1)[2], 0.3734 * 3.3, 0.001);
+    TS_ASSERT_DELTA(out->readY(1)[0], 1.094 * 3.3 * c_mbsr, 0.001 * c_mbsr);
+    TS_ASSERT_DELTA(out->readY(1)[1], 0.738 * 3.3 * c_mbsr, 0.001 * c_mbsr);
+    TS_ASSERT_DELTA(out->readY(1)[2], 0.3734 * 3.3 * c_mbsr, 0.001 * c_mbsr);
     AnalysisDataService::Instance().clear();
   }
 
@@ -209,16 +215,16 @@ public:
         "Workspace_0");
     TS_ASSERT(out);
     TS_ASSERT_EQUALS(out->getNumberHistograms(), 3);
-    TS_ASSERT_DELTA(out->readY(1)[0], 2.9202, 0.001);
-    TS_ASSERT_DELTA(out->readY(1)[1], 2.4691, 0.001);
-    TS_ASSERT_DELTA(out->readY(1)[2], 1.3817, 0.001);
+    TS_ASSERT_DELTA(out->readY(1)[0], 2.9202 * c_mbsr, 0.001 * c_mbsr);
+    TS_ASSERT_DELTA(out->readY(1)[1], 2.4691 * c_mbsr, 0.001 * c_mbsr);
+    TS_ASSERT_DELTA(out->readY(1)[2], 1.3817 * c_mbsr, 0.001 * c_mbsr);
     out = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(
         "Workspace_1");
     TS_ASSERT(out);
     TS_ASSERT_EQUALS(out->getNumberHistograms(), 3);
-    TS_ASSERT_DELTA(out->readY(1)[0], 2.9192, 0.001);
-    TS_ASSERT_DELTA(out->readY(1)[1], 2.4647, 0.001);
-    TS_ASSERT_DELTA(out->readY(1)[2], 1.3791, 0.001);
+    TS_ASSERT_DELTA(out->readY(1)[0], 2.9192 * c_mbsr, 0.001 * c_mbsr);
+    TS_ASSERT_DELTA(out->readY(1)[1], 2.4647 * c_mbsr, 0.001 * c_mbsr);
+    TS_ASSERT_DELTA(out->readY(1)[2], 1.3791 * c_mbsr, 0.001 * c_mbsr);
     AnalysisDataService::Instance().clear();
   }
 
diff --git a/Framework/CurveFitting/test/Functions/CrystalFieldPeaksTest.h b/Framework/CurveFitting/test/Functions/CrystalFieldPeaksTest.h
index a735a36c721205e4c68e35dc5e4bfbec431a7402..c0dea78a243ad9c92e5182c70b0da8719b19c6ae 100644
--- a/Framework/CurveFitting/test/Functions/CrystalFieldPeaksTest.h
+++ b/Framework/CurveFitting/test/Functions/CrystalFieldPeaksTest.h
@@ -27,6 +27,9 @@ public:
   }
   static void destroySuite(CrystalFieldPeaksTest *suite) { delete suite; }
 
+  // Conversion factor from barn to milibarn/steradian
+  const double c_mbsr = 79.5774715459;
+
   void test_calculation() {
     CrystalFieldPeaks fun;
     FunctionDomainGeneral domain;
@@ -38,16 +41,16 @@ public:
     fun.setParameter("B44", -0.12544);
     fun.setAttributeValue("Ion", "Ce");
     fun.setAttributeValue("Temperature", 44.0);
-    fun.setAttributeValue("ToleranceIntensity", 0.001);
+    fun.setAttributeValue("ToleranceIntensity", 0.001 * c_mbsr);
     fun.function(domain, values);
 
     TS_ASSERT_EQUALS(values.size(), 6);
     TS_ASSERT_DELTA(values[0], 0.0, 0.01);
     TS_ASSERT_DELTA(values[1], 29.33, 0.01);
     TS_ASSERT_DELTA(values[2], 44.34, 0.01);
-    TS_ASSERT_DELTA(values[3], 2.75, 0.01);
-    TS_ASSERT_DELTA(values[4], 0.72, 0.01);
-    TS_ASSERT_DELTA(values[5], 0.43, 0.01);
+    TS_ASSERT_DELTA(values[3], 2.75 * c_mbsr, 0.001 * c_mbsr);
+    TS_ASSERT_DELTA(values[4], 0.72 * c_mbsr, 0.001 * c_mbsr);
+    TS_ASSERT_DELTA(values[5], 0.43 * c_mbsr, 0.001 * c_mbsr);
   }
 
   void test_further_calculation() {
@@ -62,15 +65,15 @@ public:
     fun.setParameter("B44", -0.130124);
     fun.setAttributeValue("Ion", "Ce");
     fun.setAttributeValue("Temperature", 44.0);
-    fun.setAttributeValue("ToleranceIntensity", 0.001);
+    fun.setAttributeValue("ToleranceIntensity", 0.001 * c_mbsr);
     fun.function(domain, values);
 
     TS_ASSERT_DELTA(values[0], 0.0, 0.0001);
     TS_ASSERT_DELTA(values[1], 29.3261, 0.00005);
     TS_ASSERT_DELTA(values[2], 44.3412, 0.00005);
-    TS_ASSERT_DELTA(values[3], 2.74937, 0.000005);
-    TS_ASSERT_DELTA(values[4], 0.7204, 0.00005);
-    TS_ASSERT_DELTA(values[5], 0.429809, 0.000005);
+    TS_ASSERT_DELTA(values[3], 2.74937 * c_mbsr, 0.000005 * c_mbsr);
+    TS_ASSERT_DELTA(values[4], 0.7204 * c_mbsr, 0.00005 * c_mbsr);
+    TS_ASSERT_DELTA(values[5], 0.429809 * c_mbsr, 0.000005 * c_mbsr);
   }
 
   void test_factory() {
@@ -90,7 +93,7 @@ public:
     TS_ASSERT_EQUALS(fun->getAttribute("Ion").asString(), "Ce");
     TS_ASSERT_EQUALS(fun->getAttribute("Temperature").asDouble(), 25.0);
     TS_ASSERT_EQUALS(fun->getAttribute("ToleranceEnergy").asDouble(), 1e-10);
-    TS_ASSERT_EQUALS(fun->getAttribute("ToleranceIntensity").asDouble(), 1e-3);
+    TS_ASSERT_EQUALS(fun->getAttribute("ToleranceIntensity").asDouble(), 1e-1);
   }
 
   void test_evaluate_alg_no_input_workspace() {
@@ -105,7 +108,7 @@ public:
     fun->setParameter("B44", -0.12544);
     fun->setAttributeValue("Ion", "Ce");
     fun->setAttributeValue("Temperature", 44.0);
-    fun->setAttributeValue("ToleranceIntensity", 0.001);
+    fun->setAttributeValue("ToleranceIntensity", 0.001 * c_mbsr);
 
     EvaluateFunction eval;
     eval.initialize();
@@ -128,9 +131,9 @@ public:
     TS_ASSERT_DELTA(column->toDouble(1), 29.3261, 0.00005);
     TS_ASSERT_DELTA(column->toDouble(2), 44.3412, 0.00005);
     column = output->getColumn("DataColumn_1");
-    TS_ASSERT_DELTA(column->toDouble(0), 2.74937, 0.000005);
-    TS_ASSERT_DELTA(column->toDouble(1), 0.7204, 0.00005);
-    TS_ASSERT_DELTA(column->toDouble(2), 0.429809, 0.0000005);
+    TS_ASSERT_DELTA(column->toDouble(0), 2.74937 * c_mbsr, 0.000005 * c_mbsr);
+    TS_ASSERT_DELTA(column->toDouble(1), 0.7204 * c_mbsr, 0.00005 * c_mbsr);
+    TS_ASSERT_DELTA(column->toDouble(2), 0.429809 * c_mbsr, 0.0000005 * c_mbsr);
 
     AnalysisDataService::Instance().clear();
   }
@@ -147,18 +150,18 @@ public:
     fun->setParameter("B44", -0.12);
     fun->setAttributeValue("Ion", "Ce");
     fun->setAttributeValue("Temperature", 44.0);
-    fun->setAttributeValue("ToleranceIntensity", 0.001);
+    fun->setAttributeValue("ToleranceIntensity", 0.001 * c_mbsr);
 
     auto data = TableWorkspace_sptr(new TableWorkspace);
     data->addColumn("double", "Energy");
     data->addColumn("double", "Intensity");
 
     TableRow row = data->appendRow();
-    row << 0.0 << 2.74937;
+    row << 0.0 << 2.74937 * c_mbsr;
     row = data->appendRow();
-    row << 29.3261 << 0.7204;
+    row << 29.3261 << 0.7204 * c_mbsr;
     row = data->appendRow();
-    row << 44.3412 << 0.429809;
+    row << 44.3412 << 0.429809 * c_mbsr;
 
     EvaluateFunction eval;
     eval.initialize();
@@ -179,17 +182,17 @@ public:
     TS_ASSERT_DELTA(column->toDouble(1), 29.3261, 0.00005);
     TS_ASSERT_DELTA(column->toDouble(2), 44.3412, 0.00005);
     column = output->getColumn("Intensity");
-    TS_ASSERT_DELTA(column->toDouble(0), 2.74937, 0.000005);
-    TS_ASSERT_DELTA(column->toDouble(1), 0.7204, 0.00005);
-    TS_ASSERT_DELTA(column->toDouble(2), 0.429809, 0.0000005);
+    TS_ASSERT_DELTA(column->toDouble(0), 2.74937 * c_mbsr, 0.000005 * c_mbsr);
+    TS_ASSERT_DELTA(column->toDouble(1), 0.7204 * c_mbsr, 0.00005 * c_mbsr);
+    TS_ASSERT_DELTA(column->toDouble(2), 0.429809 * c_mbsr, 0.0000005 * c_mbsr);
     column = output->getColumn("Energy_calc");
     TS_ASSERT_DELTA(column->toDouble(0), 0.0, 0.0001);
     TS_ASSERT_DELTA(column->toDouble(1), 28.7149, 0.0001);
     TS_ASSERT_DELTA(column->toDouble(2), 43.3162, 0.0001);
     column = output->getColumn("Intensity_calc");
-    TS_ASSERT_DELTA(column->toDouble(0), 2.7483, 0.0001);
-    TS_ASSERT_DELTA(column->toDouble(1), 0.7394, 0.0001);
-    TS_ASSERT_DELTA(column->toDouble(2), 0.4116, 0.0001);
+    TS_ASSERT_DELTA(column->toDouble(0), 2.7483 * c_mbsr, 0.0001 * c_mbsr);
+    TS_ASSERT_DELTA(column->toDouble(1), 0.7394 * c_mbsr, 0.0001 * c_mbsr);
+    TS_ASSERT_DELTA(column->toDouble(2), 0.4116 * c_mbsr, 0.0001 * c_mbsr);
 
     AnalysisDataService::Instance().clear();
   }
diff --git a/Framework/CurveFitting/test/Functions/CrystalFieldSpectrumTest.h b/Framework/CurveFitting/test/Functions/CrystalFieldSpectrumTest.h
index c490ad5af83d697727966f7e838471f56f8d914e..a1556b16a0254b503f3266f77065dfd1e86d7a6b 100644
--- a/Framework/CurveFitting/test/Functions/CrystalFieldSpectrumTest.h
+++ b/Framework/CurveFitting/test/Functions/CrystalFieldSpectrumTest.h
@@ -19,6 +19,9 @@ using namespace Mantid::CurveFitting::Functions;
 
 class CrystalFieldSpectrumTest : public CxxTest::TestSuite {
 public:
+  // Conversion factor from barn to milibarn/steradian
+  const double c_mbsr = 79.5774715459;
+
   void test_function() {
     CrystalFieldSpectrum fun;
     fun.setParameter("B20", 0.37737);
@@ -65,15 +68,18 @@ public:
     TS_ASSERT(fun.isActive(i));
 
     TS_ASSERT_DELTA(fun.getParameter("f0.PeakCentre"), 0.0, 1e-3);
-    TS_ASSERT_DELTA(fun.getParameter("f0.Amplitude"), 2.749, 1e-3);
+    TS_ASSERT_DELTA(fun.getParameter("f0.Amplitude"), 2.749 * c_mbsr,
+                    1e-3 * c_mbsr);
     TS_ASSERT_DELTA(fun.getParameter("f0.FWHM"), 1.5, 1e-3);
 
     TS_ASSERT_DELTA(fun.getParameter("f1.PeakCentre"), 29.3261, 1e-3);
-    TS_ASSERT_DELTA(fun.getParameter("f1.Amplitude"), 0.7204, 1e-3);
+    TS_ASSERT_DELTA(fun.getParameter("f1.Amplitude"), 0.7204 * c_mbsr,
+                    1e-3 * c_mbsr);
     TS_ASSERT_DELTA(fun.getParameter("f1.FWHM"), 1.5, 1e-3);
 
     TS_ASSERT_DELTA(fun.getParameter("f2.PeakCentre"), 44.3412, 1e-3);
-    TS_ASSERT_DELTA(fun.getParameter("f2.Amplitude"), 0.4298, 1e-3);
+    TS_ASSERT_DELTA(fun.getParameter("f2.Amplitude"), 0.4298 * c_mbsr,
+                    1e-3 * c_mbsr);
     TS_ASSERT_DELTA(fun.getParameter("f2.FWHM"), 1.5, 1e-3);
   }
 
@@ -87,11 +93,12 @@ public:
     fun->setParameter("B44", -0.12544);
     fun->setAttributeValue("Ion", "Ce");
     fun->setAttributeValue("Temperature", 44.0);
-    fun->setAttributeValue("ToleranceIntensity", 0.001);
+    fun->setAttributeValue("ToleranceIntensity", 0.001 * c_mbsr);
     fun->buildTargetFunction();
     fun->setParameter("f0.FWHM", 2.0);
     fun->setParameter("f1.FWHM", 20.0);
     fun->setParameter("f2.FWHM", 20.0);
+    fun->setParameter("IntensityScaling", 1 / c_mbsr);
     FunctionDomain1DVector x(0.0, 55.0, 100);
     FunctionValues y(x);
     fun->function(x, y);
@@ -118,12 +125,13 @@ public:
     fun->setParameter("B44", -0.12544);
     fun->setAttributeValue("Ion", "Ce");
     fun->setAttributeValue("Temperature", 44.0);
-    fun->setAttributeValue("ToleranceIntensity", 0.001);
+    fun->setAttributeValue("ToleranceIntensity", 0.001 * c_mbsr);
     fun->setAttributeValue("PeakShape", "Gaussian");
     fun->buildTargetFunction();
     fun->setParameter("f0.Sigma", 10.0);
     fun->setParameter("f1.Sigma", 2.0);
     fun->setParameter("f2.Sigma", 3.0);
+    fun->setParameter("IntensityScaling", 1 / c_mbsr);
     FunctionDomain1DVector x(0.0, 55.0, 100);
     FunctionValues y(x);
     fun->function(x, y);
diff --git a/Framework/CurveFitting/test/Functions/CrystalFieldTest.h b/Framework/CurveFitting/test/Functions/CrystalFieldTest.h
index 25780dfb0fb92337039455b080e6bd8194cdc715..741a45e39e18f9104eac98bd1754927cb89cb3a7 100644
--- a/Framework/CurveFitting/test/Functions/CrystalFieldTest.h
+++ b/Framework/CurveFitting/test/Functions/CrystalFieldTest.h
@@ -24,6 +24,9 @@ public:
   static CrystalFieldTest *createSuite() { return new CrystalFieldTest(); }
   static void destroySuite(CrystalFieldTest *suite) { delete suite; }
 
+  // Conversion factor from barn to milibarn/steradian
+  const double c_mbsr = 79.5774715459;
+
   void test_it_works() {
     int nre = 1;
     DoubleFortranVector bmol(1, 3);
@@ -162,7 +165,7 @@ public:
     DoubleFortranVector e_energies;
     DoubleFortranMatrix i_energies;
     const double de = 1e-10;
-    const double di = 1e-3;
+    const double di = 1e-3 * c_mbsr;
     calculateIntensities(nre, en, wf, temperature, de, degeneration, e_energies,
                          i_energies);
 
@@ -175,9 +178,9 @@ public:
     TS_ASSERT_DELTA(e_excitations(1), 0.0, 1e-10);
     TS_ASSERT_DELTA(e_excitations(2), 29.33, 0.01);
     TS_ASSERT_DELTA(e_excitations(3), 44.34, 0.01);
-    TS_ASSERT_DELTA(i_excitations(1), 2.75, 0.01);
-    TS_ASSERT_DELTA(i_excitations(2), 0.72, 0.01);
-    TS_ASSERT_DELTA(i_excitations(3), 0.43, 0.01);
+    TS_ASSERT_DELTA(i_excitations(1), 2.75 * c_mbsr, 0.01 * c_mbsr);
+    TS_ASSERT_DELTA(i_excitations(2), 0.72 * c_mbsr, 0.01 * c_mbsr);
+    TS_ASSERT_DELTA(i_excitations(3), 0.43 * c_mbsr, 0.01 * c_mbsr);
   }
 
 private:
diff --git a/Framework/CurveFitting/test/Functions/ResolutionTest.h b/Framework/CurveFitting/test/Functions/ResolutionTest.h
index 1bdb0a8a8b249f6be4aa4fcddb46501fffaa8dfd..e247c61288866ab23c568449889a54023f142848 100644
--- a/Framework/CurveFitting/test/Functions/ResolutionTest.h
+++ b/Framework/CurveFitting/test/Functions/ResolutionTest.h
@@ -71,6 +71,9 @@ public:
   double get(size_t, size_t) override {
     throw std::runtime_error("Get method shouldn't be called.");
   }
+  void zero() override {
+    throw std::runtime_error("Zero method shouldn't be called.");
+  }
 };
 
 DECLARE_FUNCTION(ResolutionTest_Gauss)
diff --git a/Framework/CurveFitting/test/Functions/StretchExpTest.h b/Framework/CurveFitting/test/Functions/StretchExpTest.h
index 42440a3b982d35e8a6a3e5064b8013d229285237..cd2db0c839030b0a6b7010abfd37bf8d39de97f5 100644
--- a/Framework/CurveFitting/test/Functions/StretchExpTest.h
+++ b/Framework/CurveFitting/test/Functions/StretchExpTest.h
@@ -13,6 +13,7 @@ public:
   StretchExpTest_Jacobian() { m_values.resize(3); }
   void set(size_t, size_t iP, double value) override { m_values[iP] = value; }
   double get(size_t, size_t iP) override { return m_values[iP]; }
+  void zero() override { m_values.assign(m_values.size(), 0.0); }
 };
 
 class StretchExpTest : public CxxTest::TestSuite {
diff --git a/Framework/CurveFitting/test/Functions/TeixeiraWaterSQETest.h b/Framework/CurveFitting/test/Functions/TeixeiraWaterSQETest.h
new file mode 100644
index 0000000000000000000000000000000000000000..98ad63a59dc237390a6697aafd452103cf02eba3
--- /dev/null
+++ b/Framework/CurveFitting/test/Functions/TeixeiraWaterSQETest.h
@@ -0,0 +1,100 @@
+#ifndef TEIXEIRAWATERSQETEST_H_
+#define TEIXEIRAWATERSQETEST_H_
+
+// Mantid Coding standars <http://www.mantidproject.org/Coding_Standards>
+// Main Module Header
+#include "MantidCurveFitting/Functions/TeixeiraWaterSQE.h"
+// Mantid Headers from the same project (n/a)
+// Mantid headers from other projects
+#include "MantidAPI/FunctionDomain1D.h"
+#include "MantidAPI/FunctionValues.h"
+#include <cxxtest/TestSuite.h>
+// third party library headers (n/a)
+// standard library headers (n/a)
+#include <random>
+#include <numeric>
+
+#include <boost/make_shared.hpp>
+using Mantid::CurveFitting::Functions::TeixeiraWaterSQE;
+
+class TeixeiraWaterSQETest : public CxxTest::TestSuite {
+public:
+  void test_categories() {
+    TeixeiraWaterSQE func;
+    const std::vector<std::string> categories = func.categories();
+    TS_ASSERT(categories.size() == 1);
+    TS_ASSERT(categories[0] == "QuasiElastic");
+  }
+
+  /**
+   * @brief Parameters can be set and read
+   */
+  void test_parameters() {
+    auto func = createTestTeixeiraWaterSQE();
+    TS_ASSERT_EQUALS(func->nParams(), 4);
+    TS_ASSERT_EQUALS(func->getParameter("Height"), 1.0);
+    TS_ASSERT_EQUALS(func->getParameter("DiffCoeff"), 1.0);
+    TS_ASSERT_EQUALS(func->getParameter("Tau"), 1.0);
+    TS_ASSERT_EQUALS(func->getParameter("Centre"), 0.001);
+  }
+
+  /**
+   * @brief Evaluate the function at one particular enery value
+   */
+  void test_function_gives_expected_value_for_given_input() {
+    auto func = createTestTeixeiraWaterSQE();
+    const size_t nData(1);
+    std::vector<double> xValues(nData, 0.1); // Evaluate at E=0.1meV
+    std::vector<double> calculatedValues(nData, 0);
+    func->function1D(calculatedValues.data(), xValues.data(), nData);
+    TS_ASSERT_DELTA(calculatedValues[0], 1.423369463, 1e-8);
+  }
+
+  /**
+   * @brief Test function is normalized in the Energy axis
+   */
+  void test_normalization() {
+    auto func = createTestTeixeiraWaterSQE();
+    func->setParameter("Tau", 50.0); // make it peaky
+    double dE(0.0001);               // dE is 1micro-eV
+    const size_t nData(20000);
+    // Create the domain of energy values
+    std::vector<double> xValues(nData, 0);
+    std::iota(xValues.begin(), xValues.end(), -10000.0);
+    std::transform(xValues.begin(), xValues.end(), xValues.begin(),
+                   std::bind1st(std::multiplies<double>(), dE));
+    // Evaluate the function on the domain
+    std::vector<double> calculatedValues(nData, 0);
+    func->function1D(calculatedValues.data(), xValues.data(), nData);
+    // Integrate the evaluation
+    std::transform(calculatedValues.begin(), calculatedValues.end(),
+                   calculatedValues.begin(),
+                   std::bind1st(std::multiplies<double>(), dE));
+    auto integral =
+        std::accumulate(calculatedValues.begin(), calculatedValues.end(), 0.0);
+    TS_ASSERT_DELTA(integral, 1.0, 0.01);
+  }
+
+private:
+  class TestableTeixeiraWaterSQE : public TeixeiraWaterSQE {
+  public:
+    void function1D(double *out, const double *xValues,
+                    const size_t nData) const override {
+      TeixeiraWaterSQE::function1D(out, xValues, nData);
+    }
+  };
+
+  boost::shared_ptr<TestableTeixeiraWaterSQE> createTestTeixeiraWaterSQE() {
+    auto func = boost::make_shared<TestableTeixeiraWaterSQE>();
+    func->initialize();
+    func->setParameter("Height", 1.0);
+    func->setParameter("DiffCoeff", 1.0); // 1Angstrom
+    func->setParameter("Tau", 1.0);       // 1ps
+    func->setParameter("Centre", 0.001);  // shifted by 1micro-eV
+    func->setAttributeValue("Q", 1.0);    // 1Angstrom^{-1}
+    // HWHM=0.329105813
+    return func;
+  }
+};
+
+#endif /*TEIXEIRAWATERSQETEST_H_*/
diff --git a/Framework/CurveFitting/test/Functions/UserFunctionTest.h b/Framework/CurveFitting/test/Functions/UserFunctionTest.h
index 96327ff532e90aa4658e0084e5ee6d3af9aeb6c8..3b1cd93dceb20e3a5f2d9a76cb2e08a0f1a9ecaf 100644
--- a/Framework/CurveFitting/test/Functions/UserFunctionTest.h
+++ b/Framework/CurveFitting/test/Functions/UserFunctionTest.h
@@ -27,6 +27,7 @@ public:
     double get(size_t iY, size_t iP) override {
       return m_buffer[iY * m_nParams + iP];
     }
+    void zero() override { m_buffer.assign(m_buffer.size(), 0.0); }
   };
 
   void testIt() {
diff --git a/Framework/CurveFitting/test/RalNlls/NLLSTest.h b/Framework/CurveFitting/test/RalNlls/NLLSTest.h
index 714f23e3a0e6204cbc0f1a3f59c1e2e565708076..94337fb13bf1564c746c5be59f78579c007ca852 100644
--- a/Framework/CurveFitting/test/RalNlls/NLLSTest.h
+++ b/Framework/CurveFitting/test/RalNlls/NLLSTest.h
@@ -35,7 +35,7 @@ public:
     fit.initialize();
     fit.setPropertyValue("Function", "name=ExpDecay");
     fit.setProperty("InputWorkspace", ws);
-    fit.setProperty("Minimizer", "DTRS");
+    fit.setProperty("Minimizer", "Trust Region");
     fit.execute();
     IFunction_sptr fun = fit.getProperty("Function");
     TS_ASSERT_DELTA(fun->getParameter(0), 60.195, 0.001);
@@ -58,7 +58,7 @@ public:
     fit.setPropertyValue(
         "Function", "name=UserFunction,Formula=b1*(1-exp(-b2*x)),b1=1,b2=1");
     fit.setProperty("InputWorkspace", ws);
-    fit.setProperty("Minimizer", "DTRS");
+    fit.setProperty("Minimizer", "Trust Region");
     fit.setRethrows(true);
     TS_ASSERT_THROWS_NOTHING(fit.execute());
   }
diff --git a/Framework/DataHandling/inc/MantidDataHandling/AsciiPointBase.h b/Framework/DataHandling/inc/MantidDataHandling/AsciiPointBase.h
index 445cd7e676ce3a7501fd09a074d3d893b26cd050..c230162717ffa03d7f72712f568c48fcd5857c86 100644
--- a/Framework/DataHandling/inc/MantidDataHandling/AsciiPointBase.h
+++ b/Framework/DataHandling/inc/MantidDataHandling/AsciiPointBase.h
@@ -62,10 +62,6 @@ private:
   void init() override;
   /// Overwrites Algorithm method
   void exec() override;
-  /// returns true if the value is NaN
-  bool checkIfNan(const double &value) const;
-  /// returns true if the value if + or - infinity
-  bool checkIfInfinite(const double &value) const;
   /// print the appropriate value to file
   void outputval(double val, std::ofstream &file, bool leadingSep = true);
   /// write the top of the file
diff --git a/Framework/DataHandling/src/AsciiPointBase.cpp b/Framework/DataHandling/src/AsciiPointBase.cpp
index f6fdc9efe6f64d15a349439dc2d21fd63df5f1b3..cd602aa12a50f352e16374c23059a34fe590d70c 100644
--- a/Framework/DataHandling/src/AsciiPointBase.cpp
+++ b/Framework/DataHandling/src/AsciiPointBase.cpp
@@ -13,8 +13,7 @@ GUI
 
 #include <boost/tokenizer.hpp>
 #include <boost/regex.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
-
+#include <cmath>
 #include <fstream>
 
 namespace Mantid {
@@ -112,8 +111,8 @@ void AsciiPointBase::data(std::ofstream &file, const std::vector<double> &XData,
  */
 void AsciiPointBase::outputval(double val, std::ofstream &file,
                                bool leadingSep) {
-  bool nancheck = checkIfNan(val);
-  bool infcheck = checkIfInfinite(val);
+  bool nancheck = std::isnan(val);
+  bool infcheck = std::isinf(val);
   if (leadingSep) {
     file << sep();
   }
@@ -128,18 +127,5 @@ void AsciiPointBase::outputval(double val, std::ofstream &file,
   }
 }
 
-/** checks if a value is Not A Number
- *  @returns boolean true if the supplied value was Not a Number
- */
-bool AsciiPointBase::checkIfNan(const double &value) const {
-  return (boost::math::isnan(value));
-}
-
-/** checks if a value is Infinite
- *  @returns boolean true if the supplied value was Infinite
- */
-bool AsciiPointBase::checkIfInfinite(const double &value) const {
-  return (std::abs(value) == std::numeric_limits<double>::infinity());
-}
 } // namespace DataHandling
 } // namespace Mantid
diff --git a/Framework/DataHandling/src/LoadNXSPE.cpp b/Framework/DataHandling/src/LoadNXSPE.cpp
index 04976f73fad0fb1ec54e5ac7358c16c7823e2e5a..536305c74ed502ca6c9c8a24a344268fd9dcf10f 100644
--- a/Framework/DataHandling/src/LoadNXSPE.cpp
+++ b/Framework/DataHandling/src/LoadNXSPE.cpp
@@ -17,7 +17,6 @@
 #include "MantidGeometry/Surfaces/Sphere.h"
 
 #include <boost/regex.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
 
 #include <map>
 #include <sstream>
@@ -290,7 +289,7 @@ void LoadNXSPE::exec() {
     itdataend = itdata + numBins;
     iterrorend = iterror + numBins;
     outputWS->dataX(i) = energies;
-    if ((!boost::math::isfinite(*itdata)) || (*itdata <= -1e10)) // masked bin
+    if ((!std::isfinite(*itdata)) || (*itdata <= -1e10)) // masked bin
     {
       outputWS->dataY(i) = std::vector<double>(numBins, 0);
       outputWS->dataE(i) = std::vector<double>(numBins, 0);
diff --git a/Framework/DataHandling/src/LoadNexusProcessed.cpp b/Framework/DataHandling/src/LoadNexusProcessed.cpp
index 0af7c4d903d98164e240c8770876c32536220cfc..2d13a382e461d95cda25aa968fd9b04146491df3 100644
--- a/Framework/DataHandling/src/LoadNexusProcessed.cpp
+++ b/Framework/DataHandling/src/LoadNexusProcessed.cpp
@@ -1294,6 +1294,13 @@ API::MatrixWorkspace_sptr LoadNexusProcessed::loadNonEventEntry(
   // although in this case it would never be used.
   auto hasXErrors = wksp_cls.isValid("xerrors");
   auto xErrors = hasXErrors ? wksp_cls.openNXDouble("xerrors") : errors;
+  if (hasXErrors) {
+    if (xErrors.dim1() == nchannels + 1)
+      g_log.warning() << "Legacy X uncertainty found in input file, i.e., "
+                         "delta-Q for each BIN EDGE. Uncertainties will be "
+                         "re-interpreted as delta-Q of the BIN CENTRE and the "
+                         "last value will be dropped.\n";
+  }
 
   int blocksize = 8;
   // const int fullblocks = nspectra / blocksize;
@@ -1875,9 +1882,14 @@ void LoadNexusProcessed::loadBlock(NXDataSetTyped<double> &data,
   double *err_end = err_start + nchannels;
   double *farea_start = nullptr;
   double *farea_end = nullptr;
-  const size_t nxbins(m_xbins.size());
   double *xErrors_start = nullptr;
   double *xErrors_end = nullptr;
+  size_t dx_increment = nchannels;
+  // NexusFileIO stores Dx data for all spectra (sharing not preserved) so dim0
+  // is the histograms, dim1 is Dx length. For old files this is nchannels+1,
+  // otherwise nchannels. See #16298.
+  // WARNING: We are dropping the last Dx value for old files!
+  size_t dx_input_increment = xErrors.dim1();
   RebinnedOutput_sptr rb_workspace;
   if (hasFArea) {
     farea.load(blocksize, hist);
@@ -1888,7 +1900,7 @@ void LoadNexusProcessed::loadBlock(NXDataSetTyped<double> &data,
   if (hasXErrors) {
     xErrors.load(blocksize, hist);
     xErrors_start = xErrors();
-    xErrors_end = xErrors_start + nxbins;
+    xErrors_end = xErrors_start + dx_increment;
   }
 
   int final(hist + blocksize);
@@ -1911,8 +1923,8 @@ void LoadNexusProcessed::loadBlock(NXDataSetTyped<double> &data,
       local_workspace->setSharedDx(
           hist, Kernel::make_cow<HistogramData::HistogramDx>(xErrors_start,
                                                              xErrors_end));
-      xErrors_start += nxbins;
-      xErrors_end += nxbins;
+      xErrors_start += dx_input_increment;
+      xErrors_end += dx_input_increment;
     }
 
     local_workspace->setSharedX(hist, m_xbins.cowData());
@@ -1953,9 +1965,14 @@ void LoadNexusProcessed::loadBlock(NXDataSetTyped<double> &data,
   double *err_end = err_start + nchannels;
   double *farea_start = nullptr;
   double *farea_end = nullptr;
-  const size_t nxbins(m_xbins.size());
   double *xErrors_start = nullptr;
   double *xErrors_end = nullptr;
+  size_t dx_increment = nchannels;
+  // NexusFileIO stores Dx data for all spectra (sharing not preserved) so dim0
+  // is the histograms, dim1 is Dx length. For old files this is nchannels+1,
+  // otherwise nchannels. See #16298.
+  // WARNING: We are dropping the last Dx value for old files!
+  size_t dx_input_increment = xErrors.dim1();
   RebinnedOutput_sptr rb_workspace;
   if (hasFArea) {
     farea.load(blocksize, hist);
@@ -1966,7 +1983,7 @@ void LoadNexusProcessed::loadBlock(NXDataSetTyped<double> &data,
   if (hasXErrors) {
     xErrors.load(blocksize, hist);
     xErrors_start = xErrors();
-    xErrors_end = xErrors_start + nxbins;
+    xErrors_end = xErrors_start + dx_increment;
   }
 
   int final(hist + blocksize);
@@ -1989,8 +2006,8 @@ void LoadNexusProcessed::loadBlock(NXDataSetTyped<double> &data,
       local_workspace->setSharedDx(
           wsIndex, Kernel::make_cow<HistogramData::HistogramDx>(xErrors_start,
                                                                 xErrors_end));
-      xErrors_start += nxbins;
-      xErrors_end += nxbins;
+      xErrors_start += dx_input_increment;
+      xErrors_end += dx_input_increment;
     }
     local_workspace->setSharedX(wsIndex, m_xbins.cowData());
     ++hist;
@@ -2033,6 +2050,12 @@ void LoadNexusProcessed::loadBlock(NXDataSetTyped<double> &data,
   double *farea_end = nullptr;
   double *xErrors_start = nullptr;
   double *xErrors_end = nullptr;
+  size_t dx_increment = nchannels;
+  // NexusFileIO stores Dx data for all spectra (sharing not preserved) so dim0
+  // is the histograms, dim1 is Dx length. For old files this is nchannels+1,
+  // otherwise nchannels. See #16298.
+  // WARNING: We are dropping the last Dx value for old files!
+  size_t dx_input_increment = xErrors.dim1();
   RebinnedOutput_sptr rb_workspace;
   if (hasFArea) {
     farea.load(blocksize, hist);
@@ -2049,7 +2072,7 @@ void LoadNexusProcessed::loadBlock(NXDataSetTyped<double> &data,
   if (hasXErrors) {
     xErrors.load(blocksize, hist);
     xErrors_start = xErrors();
-    xErrors_end = xErrors_start + nxbins;
+    xErrors_end = xErrors_start + dx_increment;
   }
 
   while (hist < final) {
@@ -2071,8 +2094,8 @@ void LoadNexusProcessed::loadBlock(NXDataSetTyped<double> &data,
       local_workspace->setSharedDx(
           wsIndex, Kernel::make_cow<HistogramData::HistogramDx>(xErrors_start,
                                                                 xErrors_end));
-      xErrors_start += nxbins;
-      xErrors_end += nxbins;
+      xErrors_start += dx_input_increment;
+      xErrors_end += dx_input_increment;
     }
     auto &X = local_workspace->mutableX(wsIndex);
     X.assign(xbin_start, xbin_end);
@@ -2201,4 +2224,4 @@ LoadNexusProcessed::calculateWorkspaceSize(const std::size_t numberofspectra,
 }
 
 } // namespace DataHandling
-} // namespace Mantid
\ No newline at end of file
+} // namespace Mantid
diff --git a/Framework/DataHandling/src/LoadQKK.cpp b/Framework/DataHandling/src/LoadQKK.cpp
index 98a103712115c03e8f1d37e40fb6a7d598a9e072..88a220ba15d822f908a0dd48d1b9a92a3ed8911a 100644
--- a/Framework/DataHandling/src/LoadQKK.cpp
+++ b/Framework/DataHandling/src/LoadQKK.cpp
@@ -14,8 +14,6 @@
 #include "MantidKernel/UnitFactory.h"
 #include "MantidNexus/NexusClasses.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
-
 #include <Poco/File.h>
 
 #include <fstream>
diff --git a/Framework/DataHandling/src/SaveGSS.cpp b/Framework/DataHandling/src/SaveGSS.cpp
index 0c4792d6a99457c193b1a62913daf0fdfcdb0d35..baab9bf2d60537bccf390277d30ea8464a1c457a 100644
--- a/Framework/DataHandling/src/SaveGSS.cpp
+++ b/Framework/DataHandling/src/SaveGSS.cpp
@@ -10,10 +10,10 @@
 #include "MantidKernel/TimeSeriesProperty.h"
 #include "MantidKernel/ListValidator.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
 #include <Poco/File.h>
 #include <Poco/Path.h>
 #include <fstream>
+#include <cmath>
 
 namespace Mantid {
 namespace DataHandling {
@@ -498,8 +498,8 @@ inline void writeBankLine(std::stringstream &out, const std::string &bintype,
 /** Fix error if value is less than zero or infinity
   */
 inline double fixErrorValue(const double value) {
-  if (value <= 0. || boost::math::isnan(value) ||
-      boost::math::isinf(value)) // Negative errors cannot be read by GSAS
+  if (value <= 0. ||
+      !std::isfinite(value)) // Negative errors cannot be read by GSAS
     return 0.;
   else
     return value;
@@ -516,7 +516,7 @@ void SaveGSS::writeRALFdata(const int bank, const bool MultiplyByBinWidth,
   double bc2 = (X[1] - X[0]) * 32;
   // Logarithmic step
   double bc4 = (X[1] - X[0]) / X[0];
-  if (boost::math::isnan(fabs(bc4)) || boost::math::isinf(bc4))
+  if (!std::isfinite(bc4))
     bc4 = 0; // If X is zero for BANK
 
   // Write out the data header
diff --git a/Framework/DataHandling/src/SavePDFGui.cpp b/Framework/DataHandling/src/SavePDFGui.cpp
index 08499cc4fea88334cf4a8f0047e3cf0e79a88bf6..853343525347e1222f84ca18d39f00a7eacc9dc9 100644
--- a/Framework/DataHandling/src/SavePDFGui.cpp
+++ b/Framework/DataHandling/src/SavePDFGui.cpp
@@ -105,11 +105,11 @@ void SavePDFGui::exec() {
 
   // --------- write the data
   auto x = inputWS->readX(0);
-  HistogramData::HistogramDx dx(x.size(), 0.0);
-  if (inputWS->sharedDx(0))
-    dx = inputWS->dx(0);
   auto y = inputWS->readY(0);
   auto dy = inputWS->readE(0);
+  HistogramData::HistogramDx dx(y.size(), 0.0);
+  if (inputWS->sharedDx(0))
+    dx = inputWS->dx(0);
   const size_t length = x.size();
   for (size_t i = 0; i < length; ++i) {
     out << "  " << x[i] << "  " << y[i] << "  " << dx[i] << "  " << dy[i]
diff --git a/Framework/DataHandling/src/SaveSPE.cpp b/Framework/DataHandling/src/SaveSPE.cpp
index 8216b3145bd8382f11c76aef7a600e43d6101390..4a655c3ec9d75c06500d0928fc9ac5240115140b 100644
--- a/Framework/DataHandling/src/SaveSPE.cpp
+++ b/Framework/DataHandling/src/SaveSPE.cpp
@@ -12,7 +12,7 @@
 #include "MantidKernel/CompositeValidator.h"
 
 #include "Poco/File.h"
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 #include <cstdio>
 #include <cmath>
@@ -272,7 +272,7 @@ void SaveSPE::check_and_copy_spectra(const MantidVec &inSignal,
     Error.resize(inSignal.size());
   }
   for (size_t i = 0; i < inSignal.size(); i++) {
-    if (boost::math::isnan(inSignal[i]) || boost::math::isinf(inSignal[i])) {
+    if (!std::isfinite(inSignal[i])) {
       Signal[i] = SaveSPE::MASK_FLAG;
       Error[i] = SaveSPE::MASK_ERROR;
     } else {
diff --git a/Framework/DataHandling/test/LoadGSSTest.h b/Framework/DataHandling/test/LoadGSSTest.h
index 4ff6c579944c343e0662153e48f99ba3596fea70..aba355b0aea2bae7426af856a85cdab4afcb51dc 100644
--- a/Framework/DataHandling/test/LoadGSSTest.h
+++ b/Framework/DataHandling/test/LoadGSSTest.h
@@ -67,7 +67,8 @@ public:
     ScopedFile file(gss, "gss_large_x.txt");
     API::IAlgorithm_sptr loader = createAlgorithm();
     loader->setPropertyValue("Filename", file.getFileName());
-    TS_ASSERT(loader->execute())
+    TS_ASSERT(loader->execute());
+    TS_ASSERT_EQUALS(loader->isExecuted(), true);
     API::MatrixWorkspace_const_sptr ws = loader->getProperty("OutputWorkspace");
     auto x1 = ws->readX(0)[0];
     auto x2 = ws->readX(0)[1];
diff --git a/Framework/DataHandling/test/LoadNexusProcessedTest.h b/Framework/DataHandling/test/LoadNexusProcessedTest.h
index 92c0fd39467a9f25a9006878a4d3a98f09923bbe..0519d9eebcf491d6eaa0e0b5faa181d55ecccf48 100644
--- a/Framework/DataHandling/test/LoadNexusProcessedTest.h
+++ b/Framework/DataHandling/test/LoadNexusProcessedTest.h
@@ -920,6 +920,10 @@ public:
     doTestLoadAndSaveHistogramWS(true);
   }
 
+  void test_SaveAndLoadOnHistogramWSwithLegacyXErrors() {
+    doTestLoadAndSaveHistogramWS(true, false, true);
+  }
+
   void test_SaveAndLoadOnPointLikeWS() { doTestLoadAndSavePointWS(false); }
 
   void test_SaveAndLoadOnPointLikeWSWithXErrors() {
@@ -1152,16 +1156,17 @@ private:
   }
 
   void doTestLoadAndSaveHistogramWS(bool useXErrors = false,
-                                    bool numericAxis = false) {
+                                    bool numericAxis = false,
+                                    bool legacyXErrors = false) {
     // Test SaveNexusProcessed/LoadNexusProcessed on a histogram workspace with
     // x errors
 
     // Create histogram workspace with two spectra and 4 points
     std::vector<double> x1{1, 2, 3};
-    std::vector<double> dx1{3, 2, 1};
+    std::vector<double> dx1{3, 2};
     std::vector<double> y1{1, 2};
     std::vector<double> x2{1, 2, 3};
-    std::vector<double> dx2{3, 2, 1};
+    std::vector<double> dx2{3, 2};
     std::vector<double> y2{1, 2};
     MatrixWorkspace_sptr inputWs = WorkspaceFactory::Instance().create(
         "Workspace2D", 2, x1.size(), y1.size());
@@ -1170,8 +1175,12 @@ private:
     inputWs->mutableY(0) = y1;
     inputWs->mutableY(1) = y2;
     if (useXErrors) {
-      inputWs->setBinEdgeStandardDeviations(0, dx1);
-      inputWs->setBinEdgeStandardDeviations(1, dx2);
+      inputWs->setPointStandardDeviations(0, dx1);
+      inputWs->setPointStandardDeviations(1, dx2);
+      if (legacyXErrors) {
+        inputWs->dataDx(0).push_back(1);
+        inputWs->dataDx(1).push_back(1);
+      }
     }
     if (numericAxis) {
       auto numericAxis = new NumericAxis(2);
@@ -1214,8 +1223,8 @@ private:
     TS_ASSERT_EQUALS(inputWs->e(1), outputWs->e(1));
     if (useXErrors) {
       TSM_ASSERT("Should have an x error", outputWs->hasDx(0));
-      TS_ASSERT_EQUALS(inputWs->dx(0).rawData(), outputWs->dx(0).rawData());
-      TS_ASSERT_EQUALS(inputWs->dx(1).rawData(), outputWs->dx(1).rawData());
+      TS_ASSERT_EQUALS(dx1, outputWs->dx(0).rawData());
+      TS_ASSERT_EQUALS(dx2, outputWs->dx(1).rawData());
     }
 
     // Axes
diff --git a/Framework/DataHandling/test/SaveCSVTest.h b/Framework/DataHandling/test/SaveCSVTest.h
index 6d5e87d66f66cedbe4844b3cf59110e05637e45e..b10beca6a1f93c39b80056e28ccf7e166357cc1d 100644
--- a/Framework/DataHandling/test/SaveCSVTest.h
+++ b/Framework/DataHandling/test/SaveCSVTest.h
@@ -135,7 +135,7 @@ private:
       }
       ws->dataY(j).assign(nBins, double(j));
       ws->dataE(j).assign(nBins, sqrt(double(j)));
-      ws->setBinEdgeStandardDeviations(j, nBins + 1, sqrt(double(j)));
+      ws->setPointStandardDeviations(j, nBins, sqrt(double(j)));
     }
     return ws;
   }
@@ -249,13 +249,12 @@ private:
       dataStream.clear();
       dataStream.str(line);
       dataStream >> indexMarker >> d1 >> separator >> d2 >> separator >> d3 >>
-          separator >> dEnd >> separator;
+          separator;
       TS_ASSERT_EQUALS(indexMarker, spec);
       TS_ASSERT_EQUALS(separator, ",");
       TS_ASSERT_DELTA(d1, sqrt(double(spec)), 1e-5);
       TS_ASSERT_DELTA(d2, sqrt(double(spec)), 1e-5);
       TS_ASSERT_DELTA(d3, sqrt(double(spec)), 1e-5);
-      TS_ASSERT_DELTA(dEnd, sqrt(double(spec)), 1e-5);
     }
     stream.close();
   }
diff --git a/Framework/DataHandling/test/SaveNXSPETest.h b/Framework/DataHandling/test/SaveNXSPETest.h
index e93d05e75d2f25dac8d4b483ba4af54ed10ff574..b7c210feae14bae75dd92dec1bdfcb64e4c4b07f 100644
--- a/Framework/DataHandling/test/SaveNXSPETest.h
+++ b/Framework/DataHandling/test/SaveNXSPETest.h
@@ -11,7 +11,6 @@
 #include "MantidDataHandling/LoadInstrument.h"
 #include "MantidTestHelpers/ComponentCreationHelper.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
 #include <boost/shared_array.hpp>
 #include "boost/tuple/tuple.hpp"
 
@@ -73,7 +72,7 @@ public:
     TS_ASSERT_DELTA(9.0, signal[9], tolerance);
     TS_ASSERT_DELTA(18.0, error[9], tolerance);
     // element 1,2 in 2D flat buffer
-    TS_ASSERT(boost::math::isnan(signal[1 * dims[1] + 2]));
+    TS_ASSERT(std::isnan(signal[1 * dims[1] + 2]));
     TS_ASSERT_DELTA(0.0, error[1 * dims[1] + 2], tolerance);
     // final element
     TS_ASSERT_DELTA(29.0, signal[dims[0] * dims[1] - 1], tolerance);
@@ -99,7 +98,7 @@ public:
     TS_ASSERT_DELTA(99.0, signal[99], tolerance);
     TS_ASSERT_DELTA(198.0, error[99], tolerance);
     // element 1,2 in 2D flat buffer
-    TS_ASSERT(boost::math::isnan(signal[1 * dims[1] + 2]));
+    TS_ASSERT(std::isnan(signal[1 * dims[1] + 2]));
     TS_ASSERT_DELTA(0.0, error[1 * dims[1] + 2], tolerance);
     // final element
     TS_ASSERT_DELTA(524999.0, signal[dims[0] * dims[1] - 1], tolerance);
diff --git a/Framework/DataHandling/test/SaveRKHTest.h b/Framework/DataHandling/test/SaveRKHTest.h
index 606281590cecf68832b07a623e154214ca1e428a..75f1e0a56efc76ff1cd31d5eab15fafb4221c2b6 100644
--- a/Framework/DataHandling/test/SaveRKHTest.h
+++ b/Framework/DataHandling/test/SaveRKHTest.h
@@ -11,8 +11,8 @@
 #include <Poco/File.h>
 using namespace Mantid::API;
 using Mantid::HistogramData::BinEdges;
-using Mantid::HistogramData::BinEdgeVariances;
 using Mantid::HistogramData::LinearGenerator;
+using Mantid::HistogramData::PointStandardDeviations;
 
 class SaveRKHTest : public CxxTest::TestSuite {
 public:
@@ -219,9 +219,9 @@ public:
 
     // Test values
     TSM_ASSERT_DELTA("Expecting mean of 0 and 1", x, 0.5, 1e-08);
-    TSM_ASSERT_DELTA("Expecting mean of 1 and 1", y, 1.0, 1e-08);
-    TSM_ASSERT_DELTA("Expecting mean of 1 and 1", err, 1.0, 1e-06);
-    TSM_ASSERT_DELTA("Expecting mean of sqrt(0) and sqrt(1)", dx, 0.5, 1e-06);
+    TS_ASSERT_DELTA(y, 1.0, 1e-08);
+    TS_ASSERT_DELTA(err, 1.0, 1e-06);
+    TS_ASSERT_DELTA(dx, 0.1, 1e-06);
 
     // We are at the first data entry now. We step over
     // Three more entries
@@ -240,10 +240,9 @@ public:
 
     // Test values
     TSM_ASSERT_DELTA("Expecting mean of 3 and 4", x, 3.5, 1e-08);
-    TSM_ASSERT_DELTA("Expecting mean of 1 and 1", y, 1.0, 1e-08);
-    TSM_ASSERT_DELTA("Expecting mean of 1 and 1", err, 1.0, 1e-06);
-    TSM_ASSERT_DELTA("Expecting mean of sqrt(3) and sqrt(4)", dx,
-                     (sqrt(3) + sqrt(4)) / 2, 1e-06);
+    TS_ASSERT_DELTA(y, 1.0, 1e-08);
+    TS_ASSERT_DELTA(err, 1.0, 1e-06);
+    TS_ASSERT_DELTA(dx, 3.1, 1e-06);
 
     file.close();
   }
@@ -263,11 +262,10 @@ private:
     MatrixWorkspace_sptr ws = WorkspaceFactory::Instance().create(
         "Workspace2D", nSpec, x_length, y_length);
     BinEdges x(x_length, LinearGenerator(0.0, 1.0));
-    BinEdgeVariances dx(x_length);
-    std::iota(dx.begin(), dx.end(), 0.0);
+    PointStandardDeviations dx(y_length, LinearGenerator(0.1, 1.0));
     for (size_t j = 0; j < nSpec; ++j) {
       ws->setBinEdges(j, x);
-      ws->setBinEdgeStandardDeviations(j, dx);
+      ws->setPointStandardDeviations(j, dx);
       ws->dataY(j).assign(y_length, double(1));
       ws->dataE(j).assign(y_length, double(1));
     }
diff --git a/Framework/DataObjects/inc/MantidDataObjects/EventList.h b/Framework/DataObjects/inc/MantidDataObjects/EventList.h
index 805547e8cf16904f5fa1701b2e7c483b64d7d872..c2557fe1b0afbdbe5a26bc48f014f8784bc40812 100644
--- a/Framework/DataObjects/inc/MantidDataObjects/EventList.h
+++ b/Framework/DataObjects/inc/MantidDataObjects/EventList.h
@@ -229,6 +229,7 @@ public:
   void generateHistogramPulseTime(const MantidVec &X, MantidVec &Y,
                                   MantidVec &E,
                                   bool skipError = false) const override;
+
   void generateHistogramTimeAtSample(const MantidVec &X, MantidVec &Y,
                                      MantidVec &E, const double &tofFactor,
                                      const double &tofOffset,
@@ -258,6 +259,8 @@ public:
   double getTofMax() const override;
   Mantid::Kernel::DateAndTime getPulseTimeMax() const override;
   Mantid::Kernel::DateAndTime getPulseTimeMin() const override;
+  void getPulseTimeMinMax(Mantid::Kernel::DateAndTime &tMin,
+                          Mantid::Kernel::DateAndTime &tM) const;
   Mantid::Kernel::DateAndTime
   getTimeAtSampleMax(const double &tofFactor,
                      const double &tofOffset) const override;
@@ -341,6 +344,11 @@ public:
   Kernel::cow_ptr<HistogramData::HistogramY> sharedY() const override;
   Kernel::cow_ptr<HistogramData::HistogramE> sharedE() const override;
 
+  void generateCountsHistogramPulseTime(
+      const double &xMin, const double &xMax, MantidVec &Y,
+      const double TofMin = -std::numeric_limits<double>::max(),
+      const double TofMax = std::numeric_limits<double>::max()) const;
+
 protected:
   void checkAndSanitizeHistogram(HistogramData::Histogram &histogram) override;
   void checkWorksWithPoints() const override;
diff --git a/Framework/DataObjects/inc/MantidDataObjects/EventWorkspace.h b/Framework/DataObjects/inc/MantidDataObjects/EventWorkspace.h
index e64347fed57f075d41aec670d810a544634ad861..8ad70d36ad70e88a56312bbdefa6445c7e7a0c94 100644
--- a/Framework/DataObjects/inc/MantidDataObjects/EventWorkspace.h
+++ b/Framework/DataObjects/inc/MantidDataObjects/EventWorkspace.h
@@ -69,8 +69,9 @@ public:
   double getTofMax() const override;
 
   Mantid::Kernel::DateAndTime getPulseTimeMin() const override;
-
   Mantid::Kernel::DateAndTime getPulseTimeMax() const override;
+  void getPulseTimeMinMax(Mantid::Kernel::DateAndTime &xmin,
+                          Mantid::Kernel::DateAndTime &xmax) const;
 
   Mantid::Kernel::DateAndTime
   getTimeAtSampleMin(double tofOffset = 0) const override;
diff --git a/Framework/DataObjects/inc/MantidDataObjects/MDEventWorkspace.tcc b/Framework/DataObjects/inc/MantidDataObjects/MDEventWorkspace.tcc
index 689069342842c8de04296ab5262c91a911fa01c3..2f7c3d4611880cbc978f31b934aecb7403300be7 100644
--- a/Framework/DataObjects/inc/MantidDataObjects/MDEventWorkspace.tcc
+++ b/Framework/DataObjects/inc/MantidDataObjects/MDEventWorkspace.tcc
@@ -908,7 +908,7 @@ TMDE(API::IMDWorkspace::LinePlot MDEventWorkspace)
         if (!box->getIsMasked()) {
           line.x.push_back(line_pos);
           signal_t signal = this->getNormalizedSignal(box, normalize);
-          if (boost::math::isinf(signal)) {
+          if (std::isinf(signal)) {
             // The plotting library (qwt) doesn't like infs.
             signal = std::numeric_limits<signal_t>::quiet_NaN();
           }
diff --git a/Framework/DataObjects/src/EventList.cpp b/Framework/DataObjects/src/EventList.cpp
index d1193933c60f122645082a8ed5965b1a4a7558d0..c72612926d7b3c127f8e919829f2838726dc552f 100644
--- a/Framework/DataObjects/src/EventList.cpp
+++ b/Framework/DataObjects/src/EventList.cpp
@@ -198,10 +198,6 @@ void EventList::createFromHistogram(const ISpectrum *inSpec, bool GenerateZeros,
   // Fresh start
   this->clear(true);
 
-  // Cached values for later checks
-  double inf = std::numeric_limits<double>::infinity();
-  double ninf = -inf;
-
   // Get the input histogram
   const MantidVec &X = inSpec->readX();
   const MantidVec &Y = inSpec->readY();
@@ -219,12 +215,10 @@ void EventList::createFromHistogram(const ISpectrum *inSpec, bool GenerateZeros,
 
   for (size_t i = 0; i < X.size() - 1; i++) {
     double weight = Y[i];
-    if ((weight != 0.0 || GenerateZeros) && (weight == weight) /*NAN check*/
-        && (weight != inf) && (weight != ninf)) {
+    if ((weight != 0.0 || GenerateZeros) && std::isfinite(weight)) {
       double error = E[i];
       // Also check that the error is not a bad number
-      if ((error == error) /*NAN check*/
-          && (error != inf) && (error != ninf)) {
+      if (std::isfinite(error)) {
         if (GenerateMultipleEvents) {
           // --------- Multiple events per bin ----------
           double errorSquared = error * error;
@@ -1407,7 +1401,7 @@ size_t EventList::histogram_size() const {
 }
 
 // ==============================================================================================
-// --- Setting the Histrogram X axis, without recalculating the histogram
+// --- Setting the Histogram X axis, without recalculating the histogram
 // -----------------------
 // ==============================================================================================
 
@@ -2221,6 +2215,48 @@ void EventList::generateCountsHistogramPulseTime(const MantidVec &X,
   } // end if (there are any events to histogram)
 }
 
+/** With respect to PulseTime fill a histogram given equal histogram
+*   bins.
+* Number of bins is equal to number of elements in vector Y.
+* Appends values to existing Y values.
+*
+* @param xMin :: Minimal Pulse time (in nanoseconds,
+*                i.e. DateTime->totalNanoseconds()) value to include
+*                in binning.
+* @param xMax :: Maximal Pulse time value to constrain binning by (include the
+*                times smaller than right boundary, excluding equal)
+* @param Y :: The generated counts histogram
+* @param TOF_min -- min TOF to include in histogram.
+* @param TOF_max -- max TOF to constrain values included in histogram.
+*/
+void EventList::generateCountsHistogramPulseTime(const double &xMin,
+                                                 const double &xMax,
+                                                 MantidVec &Y,
+                                                 const double TOF_min,
+                                                 const double TOF_max) const {
+
+  if (this->events.empty())
+    return;
+
+  size_t nBins = Y.size();
+
+  if (nBins == 0)
+    return;
+
+  double step = (xMax - xMin) / static_cast<double>(nBins);
+
+  for (const TofEvent &ev : this->events) {
+    double pulsetime = static_cast<double>(ev.pulseTime().totalNanoseconds());
+    if (pulsetime < xMin || pulsetime >= xMax)
+      continue;
+    if (ev.tof() < TOF_min || ev.tof() >= TOF_max)
+      continue;
+
+    size_t n_bin = static_cast<size_t>((pulsetime - xMin) / step);
+    Y[n_bin]++;
+  }
+}
+
 // --------------------------------------------------------------------------
 /** With respect to Time at Sample, fill a histogram given specified histogram
  * bounds. Does not modify
@@ -3106,6 +3142,56 @@ DateAndTime EventList::getPulseTimeMax() const {
   return tMax;
 }
 
+void EventList::getPulseTimeMinMax(Mantid::Kernel::DateAndTime &tMin,
+                                   Mantid::Kernel::DateAndTime &tMax) const {
+  // set up as the minimum available date time.
+  tMax = DateAndTime::minimum();
+  tMin = DateAndTime::maximum();
+
+  // no events is a soft error
+  if (this->empty())
+    return;
+
+  // when events are ordered by pulse time just need the first/last values
+  if (this->order == PULSETIME_SORT) {
+    switch (eventType) {
+    case TOF:
+      tMin = this->events.begin()->pulseTime();
+      tMax = this->events.rbegin()->pulseTime();
+      return;
+    case WEIGHTED:
+      tMin = this->weightedEvents.begin()->pulseTime();
+      tMax = this->weightedEvents.rbegin()->pulseTime();
+      return;
+    case WEIGHTED_NOTIME:
+      tMin = this->weightedEventsNoTime.begin()->pulseTime();
+      tMax = this->weightedEventsNoTime.rbegin()->pulseTime();
+      return;
+    }
+  }
+
+  // now we are stuck with a linear search
+  size_t numEvents = this->getNumberEvents();
+  DateAndTime temp = tMax; // start with the smallest possible value
+  for (size_t i = 0; i < numEvents; i++) {
+    switch (eventType) {
+    case TOF:
+      temp = this->events[i].pulseTime();
+      break;
+    case WEIGHTED:
+      temp = this->weightedEvents[i].pulseTime();
+      break;
+    case WEIGHTED_NOTIME:
+      temp = this->weightedEventsNoTime[i].pulseTime();
+      break;
+    }
+    if (temp > tMax)
+      tMax = temp;
+    if (temp < tMin)
+      tMin = temp;
+  }
+}
+
 DateAndTime EventList::getTimeAtSampleMax(const double &tofFactor,
                                           const double &tofOffset) const {
   // set up as the minimum available date time.
@@ -3422,7 +3508,7 @@ void EventList::multiplyHistogramHelper(std::vector<T> &events,
     while (bin < x_size - 1) {
       // Event is Within range?
       if ((tof >= X[bin]) && (tof < X[bin + 1])) {
-        // Process this event. Multilpy and calculate error.
+        // Process this event. Multiply and calculate error.
         itev->m_errorSquared =
             static_cast<float>(itev->m_errorSquared * valueSquared +
                                errorSquared * itev->m_weight * itev->m_weight);
diff --git a/Framework/DataObjects/src/EventWorkspace.cpp b/Framework/DataObjects/src/EventWorkspace.cpp
index 785af26d52fba8e8ebde99ed4d36a05d385a9f9f..1a96af72d26c3a32eabd36e3a9b06cc9ba89c883 100644
--- a/Framework/DataObjects/src/EventWorkspace.cpp
+++ b/Framework/DataObjects/src/EventWorkspace.cpp
@@ -181,6 +181,39 @@ DateAndTime EventWorkspace::getPulseTimeMax() const {
   }
   return tMax;
 }
+/**
+Get the maximum and mimumum pulse time for events accross the entire workspace.
+@param Tmin minimal pulse time as a DateAndTime.
+@param Tmax maximal pulse time as a DateAndTime.
+*/
+void EventWorkspace::getPulseTimeMinMax(
+    Mantid::Kernel::DateAndTime &Tmin,
+    Mantid::Kernel::DateAndTime &Tmax) const {
+
+  Tmax = DateAndTime::minimum();
+  Tmin = DateAndTime::maximum();
+
+  int64_t numWorkspace = static_cast<int64_t>(this->data.size());
+#pragma omp parallel
+  {
+    DateAndTime tTmax = DateAndTime::minimum();
+    DateAndTime tTmin = DateAndTime::maximum();
+#pragma omp for nowait
+    for (int64_t workspaceIndex = 0; workspaceIndex < numWorkspace;
+         workspaceIndex++) {
+      const EventList &evList = this->getSpectrum(workspaceIndex);
+      DateAndTime tempMin, tempMax;
+      evList.getPulseTimeMinMax(tempMin, tempMax);
+      tTmin = std::min(tTmin, tempMin);
+      tTmax = std::max(tTmax, tempMax);
+    }
+#pragma omp critical
+    {
+      Tmin = std::min(Tmin, tTmin);
+      Tmax = std::max(Tmax, tTmax);
+    }
+  }
+}
 
 /**
  Get the minimum time at sample for events across the entire workspace.
@@ -296,16 +329,25 @@ void EventWorkspace::getEventXMinMax(double &xmin, double &xmax) const {
   // set to crazy values to start
   xmin = std::numeric_limits<double>::max();
   xmax = -1.0 * xmin;
-  size_t numWorkspace = this->data.size();
-  for (size_t workspaceIndex = 0; workspaceIndex < numWorkspace;
-       workspaceIndex++) {
-    const EventList &evList = this->getSpectrum(workspaceIndex);
-    double temp = evList.getTofMin();
-    if (temp < xmin)
-      xmin = temp;
-    temp = evList.getTofMax();
-    if (temp > xmax)
-      xmax = temp;
+  int64_t numWorkspace = static_cast<int64_t>(this->data.size());
+#pragma omp parallel
+  {
+    double tXmin = xmin;
+    double tXmax = xmax;
+#pragma omp for nowait
+    for (int64_t workspaceIndex = 0; workspaceIndex < numWorkspace;
+         workspaceIndex++) {
+      const EventList &evList = this->getSpectrum(workspaceIndex);
+      double temp = evList.getTofMin();
+      tXmin = std::min(temp, tXmin);
+      temp = evList.getTofMax();
+      tXmax = std::max(temp, tXmax);
+    }
+#pragma omp critical
+    {
+      xmin = std::min(xmin, tXmin);
+      xmax = std::max(xmax, tXmax);
+    }
   }
 }
 
diff --git a/Framework/DataObjects/src/FractionalRebinning.cpp b/Framework/DataObjects/src/FractionalRebinning.cpp
index 4af9d68c202f9dc490726e2998151919458262ba..fdd104be7bfeb64ba211df59cdf6bf4aff7f888d 100644
--- a/Framework/DataObjects/src/FractionalRebinning.cpp
+++ b/Framework/DataObjects/src/FractionalRebinning.cpp
@@ -6,7 +6,7 @@
 #include "MantidGeometry/Math/PolygonIntersection.h"
 #include "MantidKernel/V2D.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 namespace Mantid {
 
@@ -140,7 +140,7 @@ void rebinToOutput(const Quadrilateral &inputQ,
       const Quadrilateral outputQ(ll, lr, ur, ul);
 
       double yValue = inY[j];
-      if (boost::math::isnan(yValue)) {
+      if (std::isnan(yValue)) {
         continue;
       }
       intersectOverlap.clear();
@@ -208,7 +208,7 @@ void rebinToFractionalOutput(const Quadrilateral &inputQ,
       const Quadrilateral outputQ(ll, lr, ur, ul);
 
       double yValue = inY[j];
-      if (boost::math::isnan(yValue)) {
+      if (std::isnan(yValue)) {
         continue;
       }
       intersectOverlap.clear();
diff --git a/Framework/DataObjects/src/MDHistoWorkspace.cpp b/Framework/DataObjects/src/MDHistoWorkspace.cpp
index 2abc2d6e30c2eb4e12c5f9a937b4f211b241d6ce..f950aa27beffee21ec1550517f91bdc4093b2f29 100644
--- a/Framework/DataObjects/src/MDHistoWorkspace.cpp
+++ b/Framework/DataObjects/src/MDHistoWorkspace.cpp
@@ -14,8 +14,8 @@
 #include "MantidAPI/IMDIterator.h"
 #include <boost/scoped_array.hpp>
 #include <boost/make_shared.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
 #include <boost/optional.hpp>
+#include <cmath>
 
 using namespace Mantid::Kernel;
 using namespace Mantid::Geometry;
@@ -611,7 +611,7 @@ IMDWorkspace::LinePlot MDHistoWorkspace::getLinePoints(
         auto normalizer = getNormalizationFactor(normalize, linearIndex);
         // And add the normalized signal/error to the list too
         auto signal = this->getSignalAt(linearIndex) * normalizer;
-        if (boost::math::isinf(signal)) {
+        if (std::isinf(signal)) {
           // The plotting library (qwt) doesn't like infs.
           signal = std::numeric_limits<signal_t>::quiet_NaN();
         }
diff --git a/Framework/DataObjects/test/EventListTest.h b/Framework/DataObjects/test/EventListTest.h
index ee98c874ec0e45bd8c8d783f393f2bfc6935df8f..00ea4deaa895338163e7451d54e40fc5da83ec7c 100644
--- a/Framework/DataObjects/test/EventListTest.h
+++ b/Framework/DataObjects/test/EventListTest.h
@@ -6,7 +6,6 @@
 #include "MantidDataObjects/EventWorkspace.h"
 #include "MantidKernel/Timer.h"
 #include <cmath>
-#include <boost/math/special_functions/fpclassify.hpp>
 #include "MantidKernel/CPUTimer.h"
 
 using namespace Mantid;
@@ -69,7 +68,7 @@ public:
     el.setSpectrumNo(42);
     MantidVec x{0.1, 0.2, 0.3};
     el.setX(make_cow<HistogramX>(x));
-    el.setSharedDx(Kernel::make_cow<HistogramData::HistogramDx>(x));
+    el.setPointVariances(2);
 
     EventList other;
     other = el;
@@ -555,8 +554,8 @@ public:
           int bini = static_cast<int>(tof / step);
           if (bini == 7) {
             // That was zeros
-            TS_ASSERT(boost::math::isnan(el.getEvent(i).weight()));
-            TS_ASSERT(boost::math::isnan(el.getEvent(i).errorSquared()));
+            TS_ASSERT(std::isnan(el.getEvent(i).weight()));
+            TS_ASSERT(std::isnan(el.getEvent(i).errorSquared()));
           } else {
             // Same weight error as dividing by a scalar with error before,
             // since we divided by 2+-0.5 again
@@ -869,6 +868,14 @@ public:
       TS_ASSERT_EQUALS(Y[i], 2.0);
       TS_ASSERT_DELTA(E[i], M_SQRT2, 1e-5);
     }
+
+    // check uniform counts histogram.
+    size_t hist1 = Y.size();
+    MantidVec Y1(hist1, 0);
+    eList.generateCountsHistogramPulseTime(X[0], X[hist1], Y1);
+    for (std::size_t i = 0; i < Y.size(); i++) {
+      TS_ASSERT_EQUALS(Y[i], Y1[i]);
+    }
   }
 
   void test_histogram_weighed_event_by_pulse_time_throws() {
@@ -2484,8 +2491,9 @@ public:
     el.setHistogram(HistogramData::BinEdges{0, 2});
     TS_ASSERT_THROWS_NOTHING(el.setBinEdges(HistogramData::BinEdges{0, 2}));
     TS_ASSERT_THROWS(el.setPoints(1), std::runtime_error);
-    TS_ASSERT_THROWS(el.setPointVariances(1), std::runtime_error);
-    TS_ASSERT_THROWS(el.setPointStandardDeviations(1), std::runtime_error);
+    // Uncertainties for X are always for Points, this must work.
+    TS_ASSERT_THROWS_NOTHING(el.setPointVariances(1));
+    TS_ASSERT_THROWS_NOTHING(el.setPointStandardDeviations(1));
   }
 
   void test_setCounts_fails() {
diff --git a/Framework/DataObjects/test/MDBoxIteratorTest.h b/Framework/DataObjects/test/MDBoxIteratorTest.h
index 07c0f3db3198d778e0f8ff5e666d1ee48e5801cc..1bebc64f4942799c2963477e2119e5c3bf4c4ea0 100644
--- a/Framework/DataObjects/test/MDBoxIteratorTest.h
+++ b/Framework/DataObjects/test/MDBoxIteratorTest.h
@@ -12,7 +12,6 @@
 #include "MantidKernel/Timer.h"
 #include "MantidKernel/WarningSuppressions.h"
 #include "MantidTestHelpers/MDEventsTestHelper.h"
-#include <boost/math/special_functions/fpclassify.hpp>
 #include <cxxtest/TestSuite.h>
 #include <gmock/gmock.h>
 
@@ -618,7 +617,7 @@ public:
     // Now mask the box
     it->getBox()->mask();
     // For masked boxes, getNormalizedSignal() should return NaN.
-    TS_ASSERT(boost::math::isnan(it->getNormalizedSignal()));
+    TS_ASSERT(std::isnan(it->getNormalizedSignal()));
   }
 };
 
diff --git a/Framework/DataObjects/test/MDEventWorkspaceTest.h b/Framework/DataObjects/test/MDEventWorkspaceTest.h
index 603e8707621254a132193d1d8cb51a3ca41ac577..137aa9dd40f137d10494849063b213dae694c6c2 100644
--- a/Framework/DataObjects/test/MDEventWorkspaceTest.h
+++ b/Framework/DataObjects/test/MDEventWorkspaceTest.h
@@ -28,7 +28,7 @@
 #include <memory>
 #include <vector>
 #include <typeinfo>
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 using namespace Mantid;
 using namespace Mantid::Kernel;
@@ -287,11 +287,11 @@ public:
         "The box with 2 events",
         ew->getSignalAtCoord(coords2, Mantid::API::NoNormalization), 3.0, 1e-5);
     TSM_ASSERT("Out of bounds returns NAN",
-               boost::math::isnan(ew->getSignalAtCoord(
-                   coords3, Mantid::API::NoNormalization)));
+               std::isnan(ew->getSignalAtCoord(coords3,
+                                               Mantid::API::NoNormalization)));
     TSM_ASSERT("Out of bounds returns NAN",
-               boost::math::isnan(ew->getSignalAtCoord(
-                   coords4, Mantid::API::NoNormalization)));
+               std::isnan(ew->getSignalAtCoord(coords4,
+                                               Mantid::API::NoNormalization)));
   }
 
   void test_getBoxBoundaryBisectsOnLine() {
@@ -416,7 +416,7 @@ public:
         "Value ignoring mask is 0.0 as masking deletes the events",
         ew->getSignalAtCoord(coords1, Mantid::API::NoNormalization), 0.0, 1e-5);
     TSM_ASSERT("Masked returns NaN",
-               boost::math::isnan(ew->getSignalWithMaskAtCoord(
+               std::isnan(ew->getSignalWithMaskAtCoord(
                    coords1, Mantid::API::NoNormalization)));
   }
 
diff --git a/Framework/DataObjects/test/MDHistoWorkspaceIteratorTest.h b/Framework/DataObjects/test/MDHistoWorkspaceIteratorTest.h
index f21936bb68a8087ce30ce0a155a131b5742b3f33..cc63960592dff086b9a55237727bea56a76398b3 100644
--- a/Framework/DataObjects/test/MDHistoWorkspaceIteratorTest.h
+++ b/Framework/DataObjects/test/MDHistoWorkspaceIteratorTest.h
@@ -14,7 +14,7 @@
 #include <boost/function.hpp>
 #include <boost/bind.hpp>
 #include <boost/scoped_ptr.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 using namespace Mantid;
 using namespace Mantid::DataObjects;
@@ -175,7 +175,7 @@ public:
                       3.0, histoIt->getNormalizedSignal());
     histoIt->jumpTo(2);
     TSM_ASSERT("Should return NaN here as data at the iterator are masked",
-               boost::math::isnan(histoIt->getNormalizedSignal()));
+               std::isnan(histoIt->getNormalizedSignal()));
     histoIt->jumpTo(3);
     TSM_ASSERT_EQUALS("Should get the signal value here as data at the iterator"
                       " are unmasked",
diff --git a/Framework/DataObjects/test/MDHistoWorkspaceTest.h b/Framework/DataObjects/test/MDHistoWorkspaceTest.h
index a80996e3702c4c4aefaefb06723dd62c6f782dff..e24aebe73286f37da157802ef6aa795080f94f82 100644
--- a/Framework/DataObjects/test/MDHistoWorkspaceTest.h
+++ b/Framework/DataObjects/test/MDHistoWorkspaceTest.h
@@ -13,7 +13,7 @@
 #include "MantidDataObjects/MDHistoWorkspace.h"
 #include "MantidDataObjects/MDHistoWorkspaceIterator.h"
 #include "MantidTestHelpers/MDEventsTestHelper.h"
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 #include <boost/scoped_array.hpp>
 #include <boost/scoped_ptr.hpp>
 #include <cxxtest/TestSuite.h>
@@ -123,10 +123,10 @@ public:
 
     // The values are cleared at the start
     for (size_t i = 0; i < ws.getNPoints(); i++) {
-      TS_ASSERT(boost::math::isnan(ws.getSignalAt(i)));
-      TS_ASSERT(boost::math::isnan(ws.getErrorAt(i)));
-      TS_ASSERT(boost::math::isnan(ws.getSignalNormalizedAt(i)));
-      TS_ASSERT(boost::math::isnan(ws.getErrorNormalizedAt(i)));
+      TS_ASSERT(std::isnan(ws.getSignalAt(i)));
+      TS_ASSERT(std::isnan(ws.getErrorAt(i)));
+      TS_ASSERT(std::isnan(ws.getSignalNormalizedAt(i)));
+      TS_ASSERT(std::isnan(ws.getErrorNormalizedAt(i)));
       TS_ASSERT(!ws.getIsMaskedAt(i));
     }
 
@@ -511,10 +511,10 @@ public:
     TS_ASSERT_DELTA(iws->getSignalAtVMD(VMD(1.5, 1.5)), 11.0, 1e-6);
     TS_ASSERT_DELTA(iws->getSignalAtVMD(VMD(9.5, 9.5)), 99.0, 1e-6);
     // Out of range = NaN
-    TS_ASSERT(boost::math::isnan(iws->getSignalAtVMD(VMD(-0.01, 2.5))));
-    TS_ASSERT(boost::math::isnan(iws->getSignalAtVMD(VMD(3.5, -0.02))));
-    TS_ASSERT(boost::math::isnan(iws->getSignalAtVMD(VMD(10.01, 2.5))));
-    TS_ASSERT(boost::math::isnan(iws->getSignalAtVMD(VMD(3.5, 10.02))));
+    TS_ASSERT(std::isnan(iws->getSignalAtVMD(VMD(-0.01, 2.5))));
+    TS_ASSERT(std::isnan(iws->getSignalAtVMD(VMD(3.5, -0.02))));
+    TS_ASSERT(std::isnan(iws->getSignalAtVMD(VMD(10.01, 2.5))));
+    TS_ASSERT(std::isnan(iws->getSignalAtVMD(VMD(3.5, 10.02))));
   }
 
   //---------------------------------------------------------------------------------------------------
@@ -563,12 +563,12 @@ public:
     // when MDMaskValue is NaN.
     // TS_ASSERT_DELTA(iws->getSignalWithMaskAtVMD(VMD(0.5, 0.5)), MDMaskValue,
     // 1e-6);
-    TS_ASSERT(boost::math::isnan(iws->getSignalAtVMD(VMD(0.5, 0.5))));
-    TS_ASSERT(boost::math::isnan(iws->getSignalWithMaskAtVMD(VMD(0.5, 0.5))));
+    TS_ASSERT(std::isnan(iws->getSignalAtVMD(VMD(0.5, 0.5))));
+    TS_ASSERT(std::isnan(iws->getSignalWithMaskAtVMD(VMD(0.5, 0.5))));
 
-    TS_ASSERT(boost::math::isnan(
-        iws->getSignalAtVMD(VMD(3.5, 0.5), VolumeNormalization)));
-    TS_ASSERT(boost::math::isnan(
+    TS_ASSERT(
+        std::isnan(iws->getSignalAtVMD(VMD(3.5, 0.5), VolumeNormalization)));
+    TS_ASSERT(std::isnan(
         iws->getSignalWithMaskAtVMD(VMD(3.5, 0.5), VolumeNormalization)));
   }
 
@@ -679,7 +679,7 @@ public:
 
     TS_ASSERT_EQUALS(line.y.size(), 10);
     // Masked value should be zero
-    TS_ASSERT(boost::math::isnan(line.y[2]));
+    TS_ASSERT(std::isnan(line.y[2]));
     // Unmasked value
     TS_ASSERT_DELTA(line.y[9], 9.0, 1e-5);
   }
diff --git a/Framework/DataObjects/test/TofEventTest.h b/Framework/DataObjects/test/TofEventTest.h
index 902e3c3eecaa556ad8f4a748f70a82b1d423bbfe..e78ff88c04c7b857b26ca2e97e0e0e3a9de77d72 100644
--- a/Framework/DataObjects/test/TofEventTest.h
+++ b/Framework/DataObjects/test/TofEventTest.h
@@ -5,7 +5,6 @@
 #include "MantidDataObjects/Events.h"
 #include "MantidKernel/Timer.h"
 #include <cmath>
-#include <boost/math/special_functions/fpclassify.hpp>
 
 using namespace Mantid;
 using namespace Mantid::Kernel;
diff --git a/Framework/DataObjects/test/WeightedEventNoTimeTest.h b/Framework/DataObjects/test/WeightedEventNoTimeTest.h
index af4783fe174f0b35f78ba8d229ec65235f7b9859..5a2463af868707bb2c5a6731f1a40283d356a94e 100644
--- a/Framework/DataObjects/test/WeightedEventNoTimeTest.h
+++ b/Framework/DataObjects/test/WeightedEventNoTimeTest.h
@@ -5,7 +5,6 @@
 #include "MantidDataObjects/Events.h"
 #include "MantidKernel/Timer.h"
 #include <cmath>
-#include <boost/math/special_functions/fpclassify.hpp>
 
 using namespace Mantid;
 using namespace Mantid::Kernel;
diff --git a/Framework/DataObjects/test/WeightedEventTest.h b/Framework/DataObjects/test/WeightedEventTest.h
index 3a43cc255eeb3e028e9e653ccc133c849dbac243..96cd4738adb030e9bf89c689f1214285e8a10158 100644
--- a/Framework/DataObjects/test/WeightedEventTest.h
+++ b/Framework/DataObjects/test/WeightedEventTest.h
@@ -5,7 +5,6 @@
 #include "MantidDataObjects/Events.h"
 #include "MantidKernel/Timer.h"
 #include <cmath>
-#include <boost/math/special_functions/fpclassify.hpp>
 
 using namespace Mantid;
 using namespace Mantid::Kernel;
diff --git a/Framework/DataObjects/test/Workspace2DTest.h b/Framework/DataObjects/test/Workspace2DTest.h
index b6800baa7d76162ff9c237006ca4ebb8cce5123d..70b7b0fa0c6e817bd3fe0c938b99541fefb78863 100644
--- a/Framework/DataObjects/test/Workspace2DTest.h
+++ b/Framework/DataObjects/test/Workspace2DTest.h
@@ -173,7 +173,7 @@ public:
   }
 
   void testDataDx() {
-    TS_ASSERT_EQUALS(ws->readDx(0).size(), 6);
+    TS_ASSERT_EQUALS(ws->readDx(0).size(), 5);
     TS_ASSERT_EQUALS(ws->readDx(6)[3], 0.0);
 
     TS_ASSERT_THROWS_NOTHING(ws->dataDx(6)[3] = 9.9);
diff --git a/Framework/Geometry/src/Crystal/IndexingUtils.cpp b/Framework/Geometry/src/Crystal/IndexingUtils.cpp
index 367a1cb0d6ec5a0b40e8fc7a39ad1e5f2845273a..4e423f22dcc8285bd72c4aa4a3d8dc03ecf3cd39 100644
--- a/Framework/Geometry/src/Crystal/IndexingUtils.cpp
+++ b/Framework/Geometry/src/Crystal/IndexingUtils.cpp
@@ -3,7 +3,7 @@
 #include "MantidGeometry/Crystal/OrientedLattice.h"
 #include "MantidKernel/Quat.h"
 #include <algorithm>
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 #include <boost/math/special_functions/round.hpp>
 #include <boost/numeric/conversion/cast.hpp>
 #include <stdexcept>
@@ -723,7 +723,7 @@ double IndexingUtils::Optimize_UB(DblMatrix &UB,
 
     for (size_t i = 0; i < 3; i++) {
       double value = gsl_vector_get(UB_row, i);
-      if (gsl_isnan(value) || gsl_isinf(value))
+      if (!std::isfinite(value))
         found_UB = false;
     }
 
@@ -843,7 +843,7 @@ double IndexingUtils::Optimize_Direction(V3D &best_vec,
 
   for (size_t i = 0; i < 3; i++) {
     double value = gsl_vector_get(x, i);
-    if (gsl_isnan(value) || gsl_isinf(value))
+    if (!std::isfinite(value))
       found_best_vec = false;
   }
 
@@ -1773,7 +1773,7 @@ void IndexingUtils::DiscardDuplicates(std::vector<V3D> &new_list,
           if ((length_diff / current_length) < len_tol) // continue scan
           {
             angle = current_dir.angle(next_dir) * RAD_TO_DEG;
-            if ((boost::math::isnan)(angle))
+            if ((std::isnan)(angle))
               angle = 0;
             if ((angle < ang_tol) || (angle > (180.0 - ang_tol))) {
               temp.push_back(next_dir);
@@ -1951,8 +1951,7 @@ bool IndexingUtils::CheckUB(const DblMatrix &UB) {
 
   for (size_t row = 0; row < 3; row++)
     for (size_t col = 0; col < 3; col++) {
-      if ((boost::math::isnan)(UB[row][col]) ||
-          (boost::math::isinf)(UB[row][col])) {
+      if (!std::isfinite(UB[row][col])) {
         return false;
       }
     }
diff --git a/Framework/Geometry/src/Crystal/NiggliCell.cpp b/Framework/Geometry/src/Crystal/NiggliCell.cpp
index b58473048b04e8e90e2cd180e177ef365f82e27b..2275e9c2297cab9ad5136880f67a33cf94cb312b 100644
--- a/Framework/Geometry/src/Crystal/NiggliCell.cpp
+++ b/Framework/Geometry/src/Crystal/NiggliCell.cpp
@@ -1,7 +1,6 @@
 #include "MantidGeometry/Crystal/NiggliCell.h"
 #include "MantidGeometry/Crystal/OrientedLattice.h"
 #include "MantidKernel/Quat.h"
-#include <boost/math/special_functions/fpclassify.hpp>
 #include "MantidGeometry/Crystal/OrientedLattice.h"
 #include <stdexcept>
 #include <algorithm>
diff --git a/Framework/Geometry/src/MDGeometry/MDPlane.cpp b/Framework/Geometry/src/MDGeometry/MDPlane.cpp
index dd10989a66a0e34d4fa958c14ca89c70c3f57e1b..7545dc8f0ab20575514a9d8caecc24f585c9b8e2 100644
--- a/Framework/Geometry/src/MDGeometry/MDPlane.cpp
+++ b/Framework/Geometry/src/MDGeometry/MDPlane.cpp
@@ -4,7 +4,6 @@
 #include "MantidKernel/VMD.h"
 #include <gsl/gsl_linalg.h>
 #include "MantidKernel/Matrix.h"
-#include <boost/math/special_functions/fpclassify.hpp>
 
 using namespace Mantid::Kernel;
 
diff --git a/Framework/HistogramData/CMakeLists.txt b/Framework/HistogramData/CMakeLists.txt
index b1f46f34a8a51a25b7ea50b09287ad63270c8feb..9783a1706b0c462eb34f16603bb18c529355c984 100644
--- a/Framework/HistogramData/CMakeLists.txt
+++ b/Framework/HistogramData/CMakeLists.txt
@@ -1,6 +1,4 @@
 set ( SRC_FILES
-	src/BinEdgeStandardDeviations.cpp
-	src/BinEdgeVariances.cpp
 	src/BinEdges.cpp
 	src/CountStandardDeviations.cpp
 	src/CountVariances.cpp
@@ -10,15 +8,11 @@ set ( SRC_FILES
 	src/FrequencyVariances.cpp
 	src/Histogram.cpp
 	src/HistogramMath.cpp
-	src/PointStandardDeviations.cpp
-	src/PointVariances.cpp
 	src/Points.cpp
 )
 
 set ( INC_FILES
 	inc/MantidHistogramData/Addable.h
-	inc/MantidHistogramData/BinEdgeStandardDeviations.h
-	inc/MantidHistogramData/BinEdgeVariances.h
 	inc/MantidHistogramData/BinEdges.h
 	inc/MantidHistogramData/CountStandardDeviations.h
 	inc/MantidHistogramData/CountVariances.h
@@ -53,8 +47,6 @@ set ( INC_FILES
 
 set ( TEST_FILES
 	AddableTest.h
-	BinEdgeStandardDeviationsTest.h
-	BinEdgeVariancesTest.h
 	BinEdgesTest.h
 	CountStandardDeviationsTest.h
 	CountVariancesTest.h
diff --git a/Framework/HistogramData/inc/MantidHistogramData/BinEdgeStandardDeviations.h b/Framework/HistogramData/inc/MantidHistogramData/BinEdgeStandardDeviations.h
deleted file mode 100644
index f510ca1410d2abb40c44a7473411c4fb1537ba35..0000000000000000000000000000000000000000
--- a/Framework/HistogramData/inc/MantidHistogramData/BinEdgeStandardDeviations.h
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef MANTID_HISTOGRAMDATA_BINEDGESTANDARDDEVIATIONS_H_
-#define MANTID_HISTOGRAMDATA_BINEDGESTANDARDDEVIATIONS_H_
-
-#include "MantidHistogramData/DllConfig.h"
-#include "MantidHistogramData/StandardDeviationVectorOf.h"
-#include "MantidHistogramData/HistogramDx.h"
-
-namespace Mantid {
-namespace HistogramData {
-
-class PointStandardDeviations;
-class BinEdgeVariances;
-
-/** BinEdgeStandardDeviations : TODO: DESCRIPTION
-
-  Copyright &copy; 2016 ISIS Rutherford Appleton Laboratory, NScD Oak Ridge
-  National Laboratory & European Spallation Source
-
-  This file is part of Mantid.
-
-  Mantid is free software; you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation; either version 3 of the License, or
-  (at your option) any later version.
-
-  Mantid is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-  File change history is stored at: <https://github.com/mantidproject/mantid>
-  Code Documentation is available at: <http://doxygen.mantidproject.org>
-*/
-class MANTID_HISTOGRAMDATA_DLL BinEdgeStandardDeviations
-    : public detail::StandardDeviationVectorOf<BinEdgeStandardDeviations,
-                                               HistogramDx, BinEdgeVariances> {
-public:
-  using StandardDeviationVectorOf<BinEdgeStandardDeviations, HistogramDx,
-                                  BinEdgeVariances>::StandardDeviationVectorOf;
-  using StandardDeviationVectorOf<BinEdgeStandardDeviations, HistogramDx,
-                                  BinEdgeVariances>::
-  operator=;
-  BinEdgeStandardDeviations() = default;
-  // The copy and move constructor and assignment are not captured properly by
-  // the using declaration above, so we need them here explicitly.
-  BinEdgeStandardDeviations(const BinEdgeStandardDeviations &) = default;
-  BinEdgeStandardDeviations(BinEdgeStandardDeviations &&) = default;
-  BinEdgeStandardDeviations &
-  operator=(const BinEdgeStandardDeviations &)& = default;
-  BinEdgeStandardDeviations &operator=(BinEdgeStandardDeviations &&)& = default;
-
-  /// Constructs BinEdgeStandardDeviations from points, approximating each bin
-  /// edge as mid-point between two points.
-  explicit BinEdgeStandardDeviations(const PointStandardDeviations &points);
-};
-
-} // namespace HistogramData
-} // namespace Mantid
-
-#endif /* MANTID_HISTOGRAMDATA_BINEDGESTANDARDDEVIATIONS_H_ */
diff --git a/Framework/HistogramData/inc/MantidHistogramData/BinEdgeVariances.h b/Framework/HistogramData/inc/MantidHistogramData/BinEdgeVariances.h
deleted file mode 100644
index 352eab3898ec91902a0903c7ddafb7a326eed663..0000000000000000000000000000000000000000
--- a/Framework/HistogramData/inc/MantidHistogramData/BinEdgeVariances.h
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifndef MANTID_HISTOGRAMDATA_BINEDGEVARIANCES_H_
-#define MANTID_HISTOGRAMDATA_BINEDGEVARIANCES_H_
-
-#include "MantidHistogramData/DllConfig.h"
-#include "MantidHistogramData/VarianceVectorOf.h"
-#include "MantidHistogramData/HistogramDx.h"
-
-namespace Mantid {
-namespace HistogramData {
-
-class BinEdgeStandardDeviations;
-class PointVariances;
-
-/** BinEdgeVariances : TODO: DESCRIPTION
-
-  Copyright &copy; 2016 ISIS Rutherford Appleton Laboratory, NScD Oak Ridge
-  National Laboratory & European Spallation Source
-
-  This file is part of Mantid.
-
-  Mantid is free software; you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation; either version 3 of the License, or
-  (at your option) any later version.
-
-  Mantid is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-  File change history is stored at: <https://github.com/mantidproject/mantid>
-  Code Documentation is available at: <http://doxygen.mantidproject.org>
-*/
-class MANTID_HISTOGRAMDATA_DLL BinEdgeVariances
-    : public detail::VarianceVectorOf<BinEdgeVariances, HistogramDx,
-                                      BinEdgeStandardDeviations> {
-public:
-  using VarianceVectorOf<BinEdgeVariances, HistogramDx,
-                         BinEdgeStandardDeviations>::VarianceVectorOf;
-  using VarianceVectorOf<BinEdgeVariances, HistogramDx,
-                         BinEdgeStandardDeviations>::
-  operator=;
-  BinEdgeVariances() = default;
-  // The copy and move constructor and assignment are not captured properly by
-  // the using declaration above, so we need them here explicitly.
-  BinEdgeVariances(const BinEdgeVariances &) = default;
-  BinEdgeVariances(BinEdgeVariances &&) = default;
-  BinEdgeVariances &operator=(const BinEdgeVariances &)& = default;
-  BinEdgeVariances &operator=(BinEdgeVariances &&)& = default;
-
-  /// Constructs BinEdgeVariances from points, approximating each bin
-  /// edge as mid-point between two points.
-  explicit BinEdgeVariances(const PointVariances &points);
-};
-
-} // namespace HistogramData
-} // namespace Mantid
-
-#endif /* MANTID_HISTOGRAMDATA_BINEDGEVARIANCES_H_ */
diff --git a/Framework/HistogramData/inc/MantidHistogramData/Histogram.h b/Framework/HistogramData/inc/MantidHistogramData/Histogram.h
index 7c91f01257e895bb7e67d5ec864a31540e3317eb..817f0bae2ae037b8dd5dfb216aff59af44c9c6c1 100644
--- a/Framework/HistogramData/inc/MantidHistogramData/Histogram.h
+++ b/Framework/HistogramData/inc/MantidHistogramData/Histogram.h
@@ -4,8 +4,6 @@
 #include "MantidHistogramData/DllConfig.h"
 #include "MantidKernel/cow_ptr.h"
 #include "MantidHistogramData/BinEdges.h"
-#include "MantidHistogramData/BinEdgeStandardDeviations.h"
-#include "MantidHistogramData/BinEdgeVariances.h"
 #include "MantidHistogramData/Counts.h"
 #include "MantidHistogramData/CountStandardDeviations.h"
 #include "MantidHistogramData/CountVariances.h"
@@ -100,14 +98,10 @@ public:
   YMode yMode() const noexcept { return m_yMode; }
 
   BinEdges binEdges() const;
-  BinEdgeVariances binEdgeVariances() const;
-  BinEdgeStandardDeviations binEdgeStandardDeviations() const;
   Points points() const;
   PointVariances pointVariances() const;
   PointStandardDeviations pointStandardDeviations() const;
   template <typename... T> void setBinEdges(T &&... data) & ;
-  template <typename... T> void setBinEdgeVariances(T &&... data) & ;
-  template <typename... T> void setBinEdgeStandardDeviations(T &&... data) & ;
   template <typename... T> void setPoints(T &&... data) & ;
   template <typename... T> void setPointVariances(T &&... data) & ;
   template <typename... T> void setPointStandardDeviations(T &&... data) & ;
@@ -168,17 +162,17 @@ public:
   // behavior which always has Dx allocated.
   MantidVec &dataDx() & {
     if (!m_dx)
-      m_dx = Kernel::make_cow<HistogramDx>(m_x->size(), 0.0);
+      m_dx = Kernel::make_cow<HistogramDx>(size(), 0.0);
     return m_dx.access().mutableRawData();
   }
   const MantidVec &dataDx() const & {
     if (!m_dx)
-      m_dx = Kernel::make_cow<HistogramDx>(m_x->size(), 0.0);
+      m_dx = Kernel::make_cow<HistogramDx>(size(), 0.0);
     return m_dx->rawData();
   }
   const MantidVec &readDx() const {
     if (!m_dx)
-      m_dx = Kernel::make_cow<HistogramDx>(m_x->size(), 0.0);
+      m_dx = Kernel::make_cow<HistogramDx>(size(), 0.0);
     return m_dx->rawData();
   }
 
@@ -203,6 +197,12 @@ private:
   void switchDxToBinEdges();
   void switchDxToPoints();
 
+  size_t size() const {
+    if (xMode() == XMode::BinEdges)
+      return m_x->size() - 1;
+    return m_x->size();
+  }
+
   XMode m_xMode;
   YMode m_yMode{YMode::Uninitialized};
 };
@@ -269,44 +269,10 @@ template <typename... T> void Histogram::setBinEdges(T &&... data) & {
   checkSize(edges);
   if (selfAssignmentX(data...))
     return;
-  switchDxToBinEdges();
   m_xMode = XMode::BinEdges;
   m_x = edges.cowData();
 }
 
-/// Sets the Histogram's bin edge variances.
-template <typename... T> void Histogram::setBinEdgeVariances(T &&... data) & {
-  if (m_xMode != XMode::BinEdges)
-    throw std::logic_error("Histogram::setBinEdgeVariances: XMode is not "
-                           "BinEdges, cannot set bin-edge variances.");
-  BinEdgeVariances edges(std::forward<T>(data)...);
-  if (edges.size() != m_x->size())
-    throw std::logic_error("Histogram::setBinEdgeVariances: size mismatch.");
-  // No sensible self assignment is possible, we do not store variances, so if
-  // anyone tries to set our current data as variances it must be an error.
-  if (selfAssignmentDx(data...))
-    throw std::logic_error("Histogram::setBinEdgeVariances: Attempt to "
-                           "self-assign standard deviations as variance.");
-  // Convert variances to standard deviations before storing it.
-  m_dx = BinEdgeStandardDeviations(std::move(edges)).cowData();
-}
-
-/// Sets the Histogram's bin edge standard deviations.
-template <typename... T>
-void Histogram::setBinEdgeStandardDeviations(T &&... data) & {
-  if (m_xMode != XMode::BinEdges)
-    throw std::logic_error(
-        "Histogram::setBinEdgeStandardDeviations: XMode is "
-        "not BinEdges, cannot set bin-edge standard deviations.");
-  BinEdgeStandardDeviations edges(std::forward<T>(data)...);
-  if (edges.size() != m_x->size())
-    throw std::logic_error(
-        "Histogram::setBinEdgeStandardDeviations: size mismatch.");
-  if (selfAssignmentDx(data...))
-    return;
-  m_dx = edges.cowData();
-}
-
 /** Sets the Histogram's points.
 
  Any arguments that can be used for constructing a Points object are allowed,
@@ -317,19 +283,15 @@ template <typename... T> void Histogram::setPoints(T &&... data) & {
   checkSize(points);
   if (selfAssignmentX(data...))
     return;
-  switchDxToPoints();
   m_xMode = XMode::Points;
   m_x = points.cowData();
 }
 
 /// Sets the Histogram's point variances.
 template <typename... T> void Histogram::setPointVariances(T &&... data) & {
-  if (m_xMode != XMode::Points)
-    throw std::logic_error("Histogram::setPointVariances: XMode is not Points, "
-                           "cannot set bin-edge variances.");
   PointVariances points(std::forward<T>(data)...);
-  if (points.size() != m_x->size())
-    throw std::logic_error("Histogram::setPointVariances: size mismatch.");
+  if (points)
+    checkSize(points);
   // No sensible self assignment is possible, we do not store variances, so if
   // anyone tries to set our current data as variances it must be an error.
   if (selfAssignmentDx(data...))
@@ -342,13 +304,9 @@ template <typename... T> void Histogram::setPointVariances(T &&... data) & {
 /// Sets the Histogram's point standard deviations.
 template <typename... T>
 void Histogram::setPointStandardDeviations(T &&... data) & {
-  if (m_xMode != XMode::Points)
-    throw std::logic_error("Histogram::setPointStandardDeviations: XMode is "
-                           "not Points, cannot set point standard deviations.");
   PointStandardDeviations points(std::forward<T>(data)...);
-  if (points.size() != m_x->size())
-    throw std::logic_error(
-        "Histogram::setPointStandardDeviations: size mismatch.");
+  if (points)
+    checkSize(points);
   if (selfAssignmentDx(data...))
     return;
   m_dx = points.cowData();
diff --git a/Framework/HistogramData/inc/MantidHistogramData/HistogramDx.h b/Framework/HistogramData/inc/MantidHistogramData/HistogramDx.h
index 64b90341f03b25db568f2624bcfa8c6622b49ddd..34029c00323232156f7257b5e474b12bf11f8f66 100644
--- a/Framework/HistogramData/inc/MantidHistogramData/HistogramDx.h
+++ b/Framework/HistogramData/inc/MantidHistogramData/HistogramDx.h
@@ -7,14 +7,10 @@
 namespace Mantid {
 namespace HistogramData {
 class Histogram;
-class BinEdgeVariances;
-class BinEdgeStandardDeviations;
 class PointVariances;
 class PointStandardDeviations;
 class HistogramDx;
 namespace detail {
-template <class BinEdgeVariances, class HistogramDx> class VectorOf;
-template <class BinEdgeStandardDeviations, class HistogramDx> class VectorOf;
 template <class PointVariances, class HistogramDx> class VectorOf;
 template <class PointStandardDeviations, class HistogramDx> class VectorOf;
 }
@@ -57,8 +53,6 @@ public:
 
   // These classes are friends, such that they can modify the length.
   friend class Histogram;
-  friend class detail::VectorOf<BinEdgeVariances, HistogramDx>;
-  friend class detail::VectorOf<BinEdgeStandardDeviations, HistogramDx>;
   friend class detail::VectorOf<PointVariances, HistogramDx>;
   friend class detail::VectorOf<PointStandardDeviations, HistogramDx>;
 };
diff --git a/Framework/HistogramData/inc/MantidHistogramData/PointStandardDeviations.h b/Framework/HistogramData/inc/MantidHistogramData/PointStandardDeviations.h
index f3733e08dd1d46a351288c1438a871b0f4d85ff9..2c7f676479395c6799979bed7366c4a5dfbc85d9 100644
--- a/Framework/HistogramData/inc/MantidHistogramData/PointStandardDeviations.h
+++ b/Framework/HistogramData/inc/MantidHistogramData/PointStandardDeviations.h
@@ -8,7 +8,6 @@
 namespace Mantid {
 namespace HistogramData {
 
-class BinEdgeStandardDeviations;
 class PointVariances;
 
 /** PointStandardDeviations
@@ -64,10 +63,6 @@ public:
   operator=(const PointStandardDeviations &)& = default;
   /// Move assignment.
   PointStandardDeviations &operator=(PointStandardDeviations &&)& = default;
-
-  /// Constructs PointStandardDeviations from BinEdgeStandardDeviations, where
-  /// each point is a bin center.
-  PointStandardDeviations(const BinEdgeStandardDeviations &edges);
 };
 
 } // namespace HistogramData
diff --git a/Framework/HistogramData/inc/MantidHistogramData/PointVariances.h b/Framework/HistogramData/inc/MantidHistogramData/PointVariances.h
index 370bb4f53169534b22e09e6da6d1dffe4ec761ab..e538b93ca579b26342daeb6018991442ec3abbeb 100644
--- a/Framework/HistogramData/inc/MantidHistogramData/PointVariances.h
+++ b/Framework/HistogramData/inc/MantidHistogramData/PointVariances.h
@@ -8,7 +8,6 @@
 namespace Mantid {
 namespace HistogramData {
 
-class BinEdgeVariances;
 class PointStandardDeviations;
 
 /** PointVariances
@@ -62,10 +61,6 @@ public:
   PointVariances &operator=(const PointVariances &)& = default;
   /// Move assignment.
   PointVariances &operator=(PointVariances &&)& = default;
-
-  /// Constructs PointVariances from BinEdgeVariances, where each point is a bin
-  /// center.
-  PointVariances(const BinEdgeVariances &edges);
 };
 
 } // namespace HistogramData
diff --git a/Framework/HistogramData/src/BinEdgeStandardDeviations.cpp b/Framework/HistogramData/src/BinEdgeStandardDeviations.cpp
deleted file mode 100644
index 7641f63e464f5b59c448a1d0af5834b5ed5b5875..0000000000000000000000000000000000000000
--- a/Framework/HistogramData/src/BinEdgeStandardDeviations.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "MantidHistogramData/BinEdgeStandardDeviations.h"
-#include "MantidHistogramData/BinEdgeVariances.h"
-#include "MantidHistogramData/PointStandardDeviations.h"
-#include "MantidHistogramData/PointVariances.h"
-
-namespace Mantid {
-namespace HistogramData {
-
-BinEdgeStandardDeviations::BinEdgeStandardDeviations(
-    const PointStandardDeviations &points) {
-  if (!points)
-    return;
-  const size_t numPoints = points.size();
-  size_t numEdges = numPoints + 1;
-  if (numPoints == 0)
-    numEdges = 0;
-  m_data = Kernel::make_cow<HistogramDx>(numEdges);
-  if (numPoints == 0)
-    return;
-
-  auto &data = m_data.access();
-
-  if (numPoints == 1) {
-    data[0] = points[0] - 0.5;
-    data[numPoints] = points[0] + 0.5;
-    return;
-  }
-
-  // Handle the front and back points outside
-  for (size_t i = 0; i < numPoints - 1; ++i) {
-    data[i + 1] = 0.5 * (points[i + 1] + points[i]);
-  }
-  // Now deal with the end points
-  data[0] = points[0] - (data[1] - points[0]);
-  data[numPoints] =
-      points[numPoints - 1] + (points[numPoints - 1] - data[numEdges - 2]);
-}
-
-} // namespace HistogramData
-} // namespace Mantid
diff --git a/Framework/HistogramData/src/BinEdgeVariances.cpp b/Framework/HistogramData/src/BinEdgeVariances.cpp
deleted file mode 100644
index 57e5adf70360e5484e502bdc2978352dfabc1166..0000000000000000000000000000000000000000
--- a/Framework/HistogramData/src/BinEdgeVariances.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-#include "MantidHistogramData/BinEdgeStandardDeviations.h"
-#include "MantidHistogramData/BinEdgeVariances.h"
-#include "MantidHistogramData/PointStandardDeviations.h"
-#include "MantidHistogramData/PointVariances.h"
-
-namespace Mantid {
-namespace HistogramData {
-
-BinEdgeVariances::BinEdgeVariances(const PointVariances &points) {
-  if (!points)
-    return;
-  const size_t numPoints = points.size();
-  size_t numEdges = numPoints + 1;
-  if (numPoints == 0)
-    numEdges = 0;
-  m_data = Kernel::make_cow<HistogramDx>(numEdges);
-  if (numPoints == 0)
-    return;
-
-  auto &data = m_data.access();
-
-  if (numPoints == 1) {
-    data[0] = points[0] - 0.5;
-    data[numPoints] = points[0] + 0.5;
-    return;
-  }
-
-  // Handle the front and back points outside
-  for (size_t i = 0; i < numPoints - 1; ++i) {
-    data[i + 1] = 0.5 * (points[i + 1] + points[i]);
-  }
-  // Now deal with the end points
-  data[0] = points[0] - (data[1] - points[0]);
-  data[numPoints] =
-      points[numPoints - 1] + (points[numPoints - 1] - data[numEdges - 2]);
-}
-
-} // namespace HistogramData
-} // namespace Mantid
diff --git a/Framework/HistogramData/src/Histogram.cpp b/Framework/HistogramData/src/Histogram.cpp
index 995ede75485882b92f1a520ea4aeafe5da84c564..bbfba1b8c985d51c9dd8591aa9bd6cf1648fbd58 100644
--- a/Framework/HistogramData/src/Histogram.cpp
+++ b/Framework/HistogramData/src/Histogram.cpp
@@ -28,24 +28,6 @@ BinEdges Histogram::binEdges() const {
     return BinEdges(Points(m_x));
 }
 
-/// Returns the variances of the bin edges of the Histogram.
-BinEdgeVariances Histogram::binEdgeVariances() const {
-  // Currently data is always stored as standard deviations, need to convert.
-  // TODO Figure out and define right conversion order.
-  if (xMode() == XMode::BinEdges)
-    return BinEdgeVariances(BinEdgeStandardDeviations(m_dx));
-  else
-    return BinEdgeVariances(PointVariances(PointStandardDeviations(m_dx)));
-}
-
-/// Returns the standard deviations of the bin edges of the Histogram.
-BinEdgeStandardDeviations Histogram::binEdgeStandardDeviations() const {
-  if (xMode() == XMode::BinEdges)
-    return BinEdgeStandardDeviations(m_dx);
-  else
-    return BinEdgeStandardDeviations(PointStandardDeviations(m_dx));
-}
-
 /** Returns the points (or bin centers) of the Histogram.
 
   If the histogram stores bin edges, the points are computed based on them.
@@ -61,20 +43,13 @@ Points Histogram::points() const {
 /// Returns the variances of the points (or bin centers) of the Histogram.
 PointVariances Histogram::pointVariances() const {
   // Currently data is always stored as standard deviations, need to convert.
-  // TODO Figure out and define right conversion order.
-  if (xMode() == XMode::BinEdges)
-    return PointVariances(BinEdgeVariances(BinEdgeStandardDeviations(m_dx)));
-  else
-    return PointVariances(PointStandardDeviations(m_dx));
+  return PointVariances(PointStandardDeviations(m_dx));
 }
 
 /// Returns the standard deviations of the points (or bin centers) of the
 /// Histogram.
 PointStandardDeviations Histogram::pointStandardDeviations() const {
-  if (xMode() == XMode::BinEdges)
-    return PointStandardDeviations(BinEdgeStandardDeviations(m_dx));
-  else
-    return PointStandardDeviations(m_dx);
+  return PointStandardDeviations(m_dx);
 }
 
 /** Returns the counts of the Histogram.
@@ -180,9 +155,10 @@ void Histogram::setSharedE(const Kernel::cow_ptr<HistogramE> &e) & {
 void Histogram::setSharedDx(const Kernel::cow_ptr<HistogramDx> &Dx) & {
   // Setting a NULL Dx is fine, this disables x errors.
   // Note that we compare with m_x -- m_dx might be NULL.
-  if (Dx && m_x->size() != Dx->size())
-    throw std::logic_error("Histogram::setSharedDx: size mismatch\n");
-  m_dx = Dx;
+  PointStandardDeviations points(Dx);
+  if (points)
+    checkSize(points);
+  m_dx = points.cowData();
 }
 
 /// Converts the histogram storage mode into YMode::Counts
@@ -277,19 +253,5 @@ template <> void Histogram::checkSize(const BinEdges &binEdges) const {
     throw std::logic_error("Histogram: size mismatch of BinEdges\n");
 }
 
-/// Switch the Dx storage mode. Must be called *before* changing m_xMode!
-void Histogram::switchDxToBinEdges() {
-  if (xMode() == XMode::BinEdges || !m_dx)
-    return;
-  m_dx = BinEdgeStandardDeviations(PointStandardDeviations(m_dx)).cowData();
-}
-
-/// Switch the Dx storage mode. Must be called *before* changing m_xMode!
-void Histogram::switchDxToPoints() {
-  if (xMode() == XMode::Points || !m_dx)
-    return;
-  m_dx = PointStandardDeviations(BinEdgeStandardDeviations(m_dx)).cowData();
-}
-
 } // namespace HistogramData
 } // namespace Mantid
diff --git a/Framework/HistogramData/src/PointStandardDeviations.cpp b/Framework/HistogramData/src/PointStandardDeviations.cpp
deleted file mode 100644
index 09c61dc848303aefd846573d7c8107c3c93e523f..0000000000000000000000000000000000000000
--- a/Framework/HistogramData/src/PointStandardDeviations.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "MantidHistogramData/PointStandardDeviations.h"
-#include "MantidHistogramData/PointVariances.h"
-#include "MantidHistogramData/BinEdgeStandardDeviations.h"
-#include "MantidHistogramData/BinEdgeVariances.h"
-
-namespace Mantid {
-namespace HistogramData {
-
-PointStandardDeviations::PointStandardDeviations(
-    const BinEdgeStandardDeviations &edges) {
-  if (!edges)
-    return;
-  if (edges.size() == 1)
-    throw std::logic_error("PointStandardDeviations: Cannot construct from "
-                           "BinEdgeStandardDeviations of size 1");
-  if (edges.size() == 0) {
-    m_data = Kernel::make_cow<HistogramDx>(0);
-    return;
-  }
-  m_data = Kernel::make_cow<HistogramDx>(edges.size() - 1);
-  auto &data = m_data.access();
-  for (size_t i = 0; i < data.size(); ++i) {
-    data[i] = (0.5 * (edges[i] + edges[i + 1]));
-  }
-}
-
-} // namespace HistogramData
-} // namespace Mantid
diff --git a/Framework/HistogramData/src/PointVariances.cpp b/Framework/HistogramData/src/PointVariances.cpp
deleted file mode 100644
index e73d907ffe6f014be3d77e378d536972a908cf4a..0000000000000000000000000000000000000000
--- a/Framework/HistogramData/src/PointVariances.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "MantidHistogramData/BinEdgeStandardDeviations.h"
-#include "MantidHistogramData/BinEdgeVariances.h"
-#include "MantidHistogramData/PointStandardDeviations.h"
-#include "MantidHistogramData/PointVariances.h"
-
-#include <algorithm>
-
-namespace Mantid {
-namespace HistogramData {
-
-PointVariances::PointVariances(const BinEdgeVariances &edges) {
-  if (!edges)
-    return;
-  if (edges.size() == 1)
-    throw std::logic_error(
-        "PointVariances: Cannot construct from BinEdgeVariances of size 1");
-  if (edges.size() == 0) {
-    m_data = Kernel::make_cow<HistogramDx>(0);
-    return;
-  }
-  m_data = Kernel::make_cow<HistogramDx>(edges.size() - 1);
-  auto &data = m_data.access();
-  for (size_t i = 0; i < data.size(); ++i) {
-    data[i] = (0.5 * (edges[i] + edges[i + 1]));
-  }
-}
-
-} // namespace HistogramData
-} // namespace Mantid
diff --git a/Framework/HistogramData/test/BinEdgeStandardDeviationsTest.h b/Framework/HistogramData/test/BinEdgeStandardDeviationsTest.h
deleted file mode 100644
index b1f95f0167ff3e4baff463819f0774844e638921..0000000000000000000000000000000000000000
--- a/Framework/HistogramData/test/BinEdgeStandardDeviationsTest.h
+++ /dev/null
@@ -1,74 +0,0 @@
-#ifndef MANTID_HISTOGRAMDATA_BINEDGESTANDARDDEVIATIONSTEST_H_
-#define MANTID_HISTOGRAMDATA_BINEDGESTANDARDDEVIATIONSTEST_H_
-
-#include <cxxtest/TestSuite.h>
-
-#include "MantidHistogramData/BinEdgeStandardDeviations.h"
-#include "MantidHistogramData/PointStandardDeviations.h"
-
-using namespace Mantid;
-using namespace HistogramData;
-
-class BinEdgeStandardDeviationsTest : public CxxTest::TestSuite {
-public:
-  // This pair of boilerplate methods prevent the suite being created statically
-  // This means the constructor isn't called when running other tests
-  static BinEdgeStandardDeviationsTest *createSuite() {
-    return new BinEdgeStandardDeviationsTest();
-  }
-  static void destroySuite(BinEdgeStandardDeviationsTest *suite) {
-    delete suite;
-  }
-
-  void test_has_correct_mixins() {
-    BinEdgeStandardDeviations data;
-// AppleClang gives warning if the result is unused.
-#if __clang__
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wunused-value"
-#endif
-    TS_ASSERT_THROWS_NOTHING((dynamic_cast<detail::StandardDeviationVectorOf<
-        BinEdgeStandardDeviations, HistogramDx, BinEdgeVariances> &>(data)));
-#if __clang__
-#pragma clang diagnostic pop
-#endif
-  }
-
-  void test_default_constructor() {
-    const BinEdgeStandardDeviations edges{};
-    TS_ASSERT(!edges);
-  }
-
-  void test_construct_from_null_PointStandardDeviations() {
-    const PointStandardDeviations points{};
-    const BinEdgeStandardDeviations edges(points);
-    TS_ASSERT(!edges);
-  }
-
-  void test_construct_from_empty_PointStandardDeviations() {
-    PointStandardDeviations points(0);
-    BinEdgeStandardDeviations edges(points);
-    TS_ASSERT_EQUALS(edges.size(), 0);
-  }
-
-  void test_construct_from_length1_PointStandardDeviations() {
-    const PointStandardDeviations points = {1.0};
-    const BinEdgeStandardDeviations edges(points);
-    TS_ASSERT_EQUALS(edges.size(), 2);
-    TS_ASSERT_DELTA(edges[0], 0.5, 1e-14);
-    TS_ASSERT_DELTA(edges[1], 1.5, 1e-14);
-  }
-
-  void test_construct_from_PointStandardDeviations() {
-    PointStandardDeviations points = {1.0, 3.0, 7.0, 15.0};
-    BinEdgeStandardDeviations edges(points);
-    TS_ASSERT_EQUALS(edges.size(), 5);
-    TS_ASSERT_DELTA(edges[0], 0.0, 1e-14);
-    TS_ASSERT_DELTA(edges[1], 2.0, 1e-14);
-    TS_ASSERT_DELTA(edges[2], 5.0, 1e-14);
-    TS_ASSERT_DELTA(edges[3], 11.0, 1e-14);
-    TS_ASSERT_DELTA(edges[4], 19.0, 1e-14);
-  }
-};
-
-#endif /* MANTID_HISTOGRAMDATA_BINEDGESTANDARDDEVIATIONSTEST_H_ */
diff --git a/Framework/HistogramData/test/BinEdgeVariancesTest.h b/Framework/HistogramData/test/BinEdgeVariancesTest.h
deleted file mode 100644
index 80538e58da52a679ca81fe2ab5a2c66852305e0c..0000000000000000000000000000000000000000
--- a/Framework/HistogramData/test/BinEdgeVariancesTest.h
+++ /dev/null
@@ -1,73 +0,0 @@
-#ifndef MANTID_HISTOGRAMDATA_BINEDGEVARIANCESTEST_H_
-#define MANTID_HISTOGRAMDATA_BINEDGEVARIANCESTEST_H_
-
-#include <cxxtest/TestSuite.h>
-
-#include "MantidHistogramData/BinEdgeStandardDeviations.h"
-#include "MantidHistogramData/BinEdgeVariances.h"
-#include "MantidHistogramData/PointVariances.h"
-
-using namespace Mantid;
-using namespace HistogramData;
-
-class BinEdgeVariancesTest : public CxxTest::TestSuite {
-public:
-  // This pair of boilerplate methods prevent the suite being created statically
-  // This means the constructor isn't called when running other tests
-  static BinEdgeVariancesTest *createSuite() {
-    return new BinEdgeVariancesTest();
-  }
-  static void destroySuite(BinEdgeVariancesTest *suite) { delete suite; }
-
-  void test_has_correct_mixins() {
-    BinEdgeVariances data;
-// AppleClang gives warning if the result is unused.
-#if __clang__
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wunused-value"
-#endif
-    TS_ASSERT_THROWS_NOTHING((dynamic_cast<detail::VarianceVectorOf<
-        BinEdgeVariances, HistogramDx, BinEdgeStandardDeviations> &>(data)));
-#if __clang__
-#pragma clang diagnostic pop
-#endif
-  }
-
-  void test_default_constructor() {
-    const BinEdgeVariances edges{};
-    TS_ASSERT(!edges);
-  }
-
-  void test_construct_from_null_PointVariances() {
-    const PointVariances points{};
-    const BinEdgeVariances edges(points);
-    TS_ASSERT(!edges);
-  }
-
-  void test_construct_from_empty_PointVariances() {
-    PointVariances points(0);
-    BinEdgeVariances edges(points);
-    TS_ASSERT_EQUALS(edges.size(), 0);
-  }
-
-  void test_construct_from_length1_PointVariances() {
-    const PointVariances points = {1.0};
-    const BinEdgeVariances edges(points);
-    TS_ASSERT_EQUALS(edges.size(), 2);
-    TS_ASSERT_DELTA(edges[0], 0.5, 1e-14);
-    TS_ASSERT_DELTA(edges[1], 1.5, 1e-14);
-  }
-
-  void test_construct_from_PointVariances() {
-    PointVariances points = {1.0, 3.0, 7.0, 15.0};
-    BinEdgeVariances edges(points);
-    TS_ASSERT_EQUALS(edges.size(), 5);
-    TS_ASSERT_DELTA(edges[0], 0.0, 1e-14);
-    TS_ASSERT_DELTA(edges[1], 2.0, 1e-14);
-    TS_ASSERT_DELTA(edges[2], 5.0, 1e-14);
-    TS_ASSERT_DELTA(edges[3], 11.0, 1e-14);
-    TS_ASSERT_DELTA(edges[4], 19.0, 1e-14);
-  }
-};
-
-#endif /* MANTID_HISTOGRAMDATA_BINEDGEVARIANCESTEST_H_ */
diff --git a/Framework/HistogramData/test/HistogramTest.h b/Framework/HistogramData/test/HistogramTest.h
index 626d43b9448305d61c664bd332cb52d76c26a361..8e5ec3db6c57d988403dbaa557e3c981f882311b 100644
--- a/Framework/HistogramData/test/HistogramTest.h
+++ b/Framework/HistogramData/test/HistogramTest.h
@@ -12,6 +12,7 @@ using Mantid::HistogramData::HistogramY;
 using Mantid::HistogramData::HistogramE;
 using Mantid::HistogramData::getHistogramXMode;
 using Mantid::HistogramData::Points;
+using Mantid::HistogramData::PointStandardDeviations;
 using Mantid::HistogramData::BinEdges;
 using Mantid::HistogramData::Counts;
 using Mantid::HistogramData::CountVariances;
@@ -361,15 +362,14 @@ public:
     TS_ASSERT_THROWS(h.setPoints(x), std::logic_error);
   }
 
-  void test_setPoints_changesDxStorageMode() {
+  void test_setPoints_keepsDxStorageMode() {
     Histogram hist(BinEdges{1.0, 2.0, 3.0});
-    auto dx = {1.0, 2.0, 3.0};
-    hist.setBinEdgeStandardDeviations(dx);
-    TS_ASSERT_EQUALS(hist.dx().size(), 3);
+    auto dx = {1.0, 2.0};
+    hist.setPointStandardDeviations(dx);
     hist.setPoints(Points{1.0, 2.0});
     TS_ASSERT_EQUALS(hist.dx().size(), 2);
-    TS_ASSERT_DELTA(hist.dx()[0], 1.5, 1e-14);
-    TS_ASSERT_DELTA(hist.dx()[1], 2.5, 1e-14);
+    TS_ASSERT_EQUALS(hist.dx()[0], 1.0);
+    TS_ASSERT_EQUALS(hist.dx()[1], 2.0);
   }
 
   void test_edges_from_edges() {
@@ -514,16 +514,14 @@ public:
     TS_ASSERT_THROWS(h.setBinEdges(x), std::logic_error);
   }
 
-  void test_setBinEdges_changesDxStorageMode() {
+  void test_setBinEdges_keepsDxStorageMode() {
     Histogram hist(Points{1.0, 2.0});
     auto dx = {1.0, 2.0};
     hist.setPointStandardDeviations(dx);
-    TS_ASSERT_EQUALS(hist.dx().size(), 2);
     hist.setBinEdges(BinEdges{1.0, 2.0, 3.0});
-    TS_ASSERT_EQUALS(hist.dx().size(), 3);
-    TS_ASSERT_DELTA(hist.dx()[0], 0.5, 1e-14);
-    TS_ASSERT_DELTA(hist.dx()[1], 1.5, 1e-14);
-    TS_ASSERT_DELTA(hist.dx()[2], 2.5, 1e-14);
+    TS_ASSERT_EQUALS(hist.dx().size(), 2);
+    TS_ASSERT_EQUALS(hist.dx()[0], 1.0);
+    TS_ASSERT_EQUALS(hist.dx()[1], 2.0);
   }
 
   void test_setCounts_size_mismatch() {
@@ -888,6 +886,67 @@ public:
     TS_ASSERT_THROWS(hist.setSharedE(data2), std::logic_error);
   }
 
+  void test_setPointStandardDeviations_point_data() {
+    Histogram hist(Points(2));
+    TS_ASSERT_THROWS_NOTHING(
+        hist.setPointStandardDeviations(std::vector<double>{1.0, 2.0}));
+    TS_ASSERT_EQUALS(hist.dx().size(), 2);
+    TS_ASSERT_EQUALS(hist.dx()[0], 1.0);
+    TS_ASSERT_EQUALS(hist.dx()[1], 2.0);
+  }
+
+  void test_setPointStandardDeviations_point_data_size_mismatch() {
+    Histogram hist(Points(2));
+    TS_ASSERT_THROWS(
+        hist.setPointStandardDeviations(PointStandardDeviations(0)),
+        std::logic_error);
+    TS_ASSERT_THROWS(
+        hist.setPointStandardDeviations(PointStandardDeviations(1)),
+        std::logic_error);
+    TS_ASSERT_THROWS(
+        hist.setPointStandardDeviations(PointStandardDeviations(3)),
+        std::logic_error);
+  }
+
+  void test_setPointStandardDeviations_histogram_data() {
+    Histogram hist(BinEdges(3));
+    TS_ASSERT_THROWS_NOTHING(
+        hist.setPointStandardDeviations(std::vector<double>{1.0, 2.0}));
+    TS_ASSERT_EQUALS(hist.dx().size(), 2);
+    TS_ASSERT_EQUALS(hist.dx()[0], 1.0);
+    TS_ASSERT_EQUALS(hist.dx()[1], 2.0);
+  }
+
+  void test_setPointStandardDeviations_histogram_data_size_mismatch() {
+    Histogram hist(BinEdges(3));
+    TS_ASSERT_THROWS(
+        hist.setPointStandardDeviations(PointStandardDeviations(0)),
+        std::logic_error);
+    TS_ASSERT_THROWS(
+        hist.setPointStandardDeviations(PointStandardDeviations(1)),
+        std::logic_error);
+    TS_ASSERT_THROWS(
+        hist.setPointStandardDeviations(PointStandardDeviations(3)),
+        std::logic_error);
+  }
+
+  void test_setPointStandardDeviations_can_set_null() {
+    Histogram hist(Points(2));
+    hist.setPointStandardDeviations(2);
+    PointStandardDeviations null;
+    TS_ASSERT(hist.sharedDx());
+    TS_ASSERT_THROWS_NOTHING(hist.setPointStandardDeviations(null));
+    TS_ASSERT(!hist.sharedDx());
+  }
+
+  void test_setPointStandardDeviations_accepts_default_construction() {
+    Histogram hist(Points(2));
+    hist.setPointStandardDeviations(2);
+    TS_ASSERT(hist.sharedDx());
+    TS_ASSERT_THROWS_NOTHING(hist.setPointStandardDeviations());
+    TS_ASSERT(!hist.sharedDx());
+  }
+
   void test_yMode() {
     Histogram hist1(Histogram::XMode::Points, Histogram::YMode::Counts);
     TS_ASSERT_EQUALS(hist1.yMode(), Histogram::YMode::Counts);
diff --git a/Framework/HistogramData/test/PointStandardDeviationsTest.h b/Framework/HistogramData/test/PointStandardDeviationsTest.h
index ca969993040f9bf3834555c333b240611fb63452..dd8d8e240232bada644e0e41e13d4b50a95a61eb 100644
--- a/Framework/HistogramData/test/PointStandardDeviationsTest.h
+++ b/Framework/HistogramData/test/PointStandardDeviationsTest.h
@@ -3,7 +3,6 @@
 
 #include <cxxtest/TestSuite.h>
 
-#include "MantidHistogramData/BinEdgeStandardDeviations.h"
 #include "MantidHistogramData/PointStandardDeviations.h"
 
 using namespace Mantid;
@@ -36,32 +35,6 @@ public:
     const PointStandardDeviations points{};
     TS_ASSERT(!points);
   }
-
-  void test_construct_from_null_BinEdgeStandardDeviations() {
-    const BinEdgeStandardDeviations edges{};
-    const PointStandardDeviations points(edges);
-    TS_ASSERT(!points);
-  }
-
-  void test_construct_from_empty_BinEdgeStandardDeviations() {
-    const BinEdgeStandardDeviations edges(0);
-    const PointStandardDeviations points(edges);
-    TS_ASSERT_EQUALS(points.size(), 0);
-  }
-
-  void test_construct_from_invalid_BinEdgeStandardDeviations() {
-    const BinEdgeStandardDeviations edges(1);
-    TS_ASSERT_THROWS(PointStandardDeviations points(edges), std::logic_error);
-  }
-
-  void test_construct_from_BinEdgeStandardDeviations() {
-    const BinEdgeStandardDeviations edges{1.0, 3.0, 7.0, 15.0};
-    const PointStandardDeviations points(edges);
-    TS_ASSERT_EQUALS(points.size(), 3);
-    TS_ASSERT_DELTA(points[0], 2.0, 1e-14);
-    TS_ASSERT_DELTA(points[1], 5.0, 1e-14);
-    TS_ASSERT_DELTA(points[2], 11.0, 1e-14);
-  }
 };
 
 #endif /* MANTID_HISTOGRAMDATA_POINTSTANDARDDEVIATIONSTEST_H_ */
diff --git a/Framework/HistogramData/test/PointVariancesTest.h b/Framework/HistogramData/test/PointVariancesTest.h
index b60e6c2c5d077d4f6e99e08265b033477504d976..c265b79fbcde17147e035f837c11668037a0dabc 100644
--- a/Framework/HistogramData/test/PointVariancesTest.h
+++ b/Framework/HistogramData/test/PointVariancesTest.h
@@ -3,7 +3,6 @@
 
 #include <cxxtest/TestSuite.h>
 
-#include "MantidHistogramData/BinEdgeVariances.h"
 #include "MantidHistogramData/PointStandardDeviations.h"
 #include "MantidHistogramData/PointVariances.h"
 
@@ -36,32 +35,6 @@ public:
     TS_ASSERT(!points);
   }
 
-  void test_construct_from_null_BinEdgeVariances() {
-    const BinEdgeVariances edges{};
-    const PointVariances points(edges);
-    TS_ASSERT(!points);
-  }
-
-  void test_construct_from_empty_BinEdgeVariances() {
-    const BinEdgeVariances edges(0);
-    const PointVariances points(edges);
-    TS_ASSERT_EQUALS(points.size(), 0);
-  }
-
-  void test_construct_from_invalid_BinEdgeVariances() {
-    const BinEdgeVariances edges(1);
-    TS_ASSERT_THROWS(PointVariances points(edges), std::logic_error);
-  }
-
-  void test_construct_from_BinEdgeVariances() {
-    const BinEdgeVariances edges{1.0, 3.0, 7.0, 15.0};
-    const PointVariances points(edges);
-    TS_ASSERT_EQUALS(points.size(), 3);
-    TS_ASSERT_DELTA(points[0], 2.0, 1e-14);
-    TS_ASSERT_DELTA(points[1], 5.0, 1e-14);
-    TS_ASSERT_DELTA(points[2], 11.0, 1e-14);
-  }
-
   void test_conversion_identity() {
     const PointVariances variances{1.0, 4.0, 9.0};
     const PointStandardDeviations sigmas(variances);
diff --git a/Framework/Kernel/inc/MantidKernel/MultiFileValidator.h b/Framework/Kernel/inc/MantidKernel/MultiFileValidator.h
index 889bdd23cbbbfff91f5913a10aea300e0106e23d..ed6343d8579e2c4d0d6492721af5f06ad830f9b8 100644
--- a/Framework/Kernel/inc/MantidKernel/MultiFileValidator.h
+++ b/Framework/Kernel/inc/MantidKernel/MultiFileValidator.h
@@ -47,7 +47,8 @@ class MANTID_KERNEL_DLL MultiFileValidator
 public:
   MultiFileValidator();
   MultiFileValidator(const MultiFileValidator &mfv);
-  explicit MultiFileValidator(const std::vector<std::string> &extensions);
+  explicit MultiFileValidator(const std::vector<std::string> &extensions,
+                              bool testFilesExist = true);
 
   IValidator_sptr clone() const override;
 
diff --git a/Framework/Kernel/inc/MantidKernel/TimeSeriesProperty.h b/Framework/Kernel/inc/MantidKernel/TimeSeriesProperty.h
index 3b2317eebe23c505637c7b1d40241261f6b80c63..9ca7d05fdaa6b517ced578d6ac61c1a0dc0e2520 100644
--- a/Framework/Kernel/inc/MantidKernel/TimeSeriesProperty.h
+++ b/Framework/Kernel/inc/MantidKernel/TimeSeriesProperty.h
@@ -170,6 +170,10 @@ public:
       const std::vector<SplittingInterval> &filter) const override;
   /// Calculate the time-weighted average of a property
   double timeAverageValue() const;
+  /// generate constant time-step histogram from the property values
+  void histogramData(const Kernel::DateAndTime &tMin,
+                     const Kernel::DateAndTime &tMax,
+                     std::vector<double> &counts) const;
 
   ///  Return the time series as a correct C++ map<DateAndTime, TYPE>. All
   ///  values
diff --git a/Framework/Kernel/src/Atom.cpp b/Framework/Kernel/src/Atom.cpp
index 84d713deeabed3687e4a222d081a27a88938551f..1267410ae0c324256319ddffb65aa373b149807f 100644
--- a/Framework/Kernel/src/Atom.cpp
+++ b/Framework/Kernel/src/Atom.cpp
@@ -3,7 +3,7 @@
 #include <stdexcept>
 #include "MantidKernel/Atom.h"
 #include "MantidKernel/PhysicalConstants.h"
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 namespace Mantid {
 namespace PhysicalConstants {
@@ -3151,7 +3151,7 @@ static const size_t NUM_ATOMS = 2845;
 bool AtomEqualsWithNaN(const double left, const double right) {
   if (left == right)
     return true;
-  if ((boost::math::isnan)(left) && (boost::math::isnan)(right))
+  if ((std::isnan)(left) && (std::isnan)(right))
     return true;
   return false;
 }
diff --git a/Framework/Kernel/src/InternetHelper.cpp b/Framework/Kernel/src/InternetHelper.cpp
index ac3d579f1f198904a7cae3e6aa42ac7516fde795..4cfb311398193137b1d6e5b9ccd16fcf82271ef7 100644
--- a/Framework/Kernel/src/InternetHelper.cpp
+++ b/Framework/Kernel/src/InternetHelper.cpp
@@ -46,6 +46,33 @@ namespace {
 // anonymous namespace for some utility functions
 /// static Logger object
 Logger g_log("InternetHelper");
+
+/// Flag to protect SSL initialization
+std::once_flag SSL_INIT_FLAG;
+
+/**
+ * Perform initialization of SSL context. Implementation
+ * designed to be called by std::call_once
+ */
+void doSSLInit() {
+  // initialize ssl
+  Poco::SharedPtr<InvalidCertificateHandler> certificateHandler =
+      new AcceptCertificateHandler(true);
+  // Currently do not use any means of authentication. This should be updated
+  // IDS has signed certificate.
+  const Context::Ptr context =
+      new Context(Context::CLIENT_USE, "", "", "", Context::VERIFY_NONE);
+  // Create a singleton for holding the default context.
+  // e.g. any future requests to publish are made to this certificate and
+  // context.
+  SSLManager::instance().initializeClient(nullptr, certificateHandler, context);
+}
+
+/**
+ * Entry function to initialize SSL context for the process. It ensures the
+ * initialization only happens once per process.
+ */
+void initializeSSL() { std::call_once(SSL_INIT_FLAG, doSSLInit); }
 }
 
 //----------------------------------------------------------------------------------------------
@@ -240,18 +267,7 @@ int InternetHelper::sendHTTPSRequest(const std::string &url,
 
   Poco::URI uri(url);
   try {
-    // initialize ssl
-    Poco::SharedPtr<InvalidCertificateHandler> certificateHandler =
-        new AcceptCertificateHandler(true);
-    // Currently do not use any means of authentication. This should be updated
-    // IDS has signed certificate.
-    const Context::Ptr context =
-        new Context(Context::CLIENT_USE, "", "", "", Context::VERIFY_NONE);
-    // Create a singleton for holding the default context.
-    // e.g. any future requests to publish are made to this certificate and
-    // context.
-    SSLManager::instance().initializeClient(nullptr, certificateHandler,
-                                            context);
+    initializeSSL();
     // Create the session
     HTTPSClientSession session(uri.getHost(),
                                static_cast<Poco::UInt16>(uri.getPort()));
diff --git a/Framework/Kernel/src/MultiFileValidator.cpp b/Framework/Kernel/src/MultiFileValidator.cpp
index 9ec875f27a31ef60c42230030032dac19b06ef60..705b87b6e8c6add62cad9c12895e2350db5ca5f1 100644
--- a/Framework/Kernel/src/MultiFileValidator.cpp
+++ b/Framework/Kernel/src/MultiFileValidator.cpp
@@ -21,11 +21,12 @@ MultiFileValidator::MultiFileValidator(const MultiFileValidator &mfv)
 
 /** Constructor
  *  @param extensions :: The permitted file extensions (e.g. .RAW)
+ *  @param testFilesExist :: If to check if files exist
  */
 MultiFileValidator::MultiFileValidator(
-    const std::vector<std::string> &extensions)
+    const std::vector<std::string> &extensions, bool testFilesExist)
     : TypedValidator<std::vector<std::vector<std::string>>>(),
-      m_fileValidator(extensions, true) {}
+      m_fileValidator(extensions, testFilesExist) {}
 
 /// Returns the set of valid values
 std::vector<std::string> MultiFileValidator::allowedValues() const {
diff --git a/Framework/Kernel/src/NeutronAtom.cpp b/Framework/Kernel/src/NeutronAtom.cpp
index feba33aa206848434aa1a0c93cb45b73ffac16db..506e71f1f9d15d9f157ea0cbe27cef74f859959f 100644
--- a/Framework/Kernel/src/NeutronAtom.cpp
+++ b/Framework/Kernel/src/NeutronAtom.cpp
@@ -6,8 +6,7 @@
 #include <algorithm>
 #include <sstream>
 #include <stdexcept>
-#include <boost/math/special_functions/fpclassify.hpp>
-#include <math.h>
+#include <cmath>
 
 namespace Mantid {
 
@@ -589,7 +588,7 @@ static const size_t NUM_ATOMS = 371;
 bool NeutronAtomEqualsWithNaN(const double left, const double right) {
   if (left == right)
     return true;
-  if ((boost::math::isnan)(left) && (boost::math::isnan)(right))
+  if ((std::isnan)(left) && (std::isnan)(right))
     return true;
   return false;
 }
diff --git a/Framework/Kernel/src/TimeSeriesProperty.cpp b/Framework/Kernel/src/TimeSeriesProperty.cpp
index 791dbd219bc69d42c95f71cfc0fd4dbe151cf744..1d09e8985ab6c3965357105a855d5bd82dc1e745 100644
--- a/Framework/Kernel/src/TimeSeriesProperty.cpp
+++ b/Framework/Kernel/src/TimeSeriesProperty.cpp
@@ -2139,6 +2139,52 @@ void TimeSeriesProperty<TYPE>::saveProperty(::NeXus::File *file) {
   saveTimeVector(file);
   file->closeGroup();
 }
+/** Calculate constant step histogram of the time series data.
+* @param tMin    -- minimal time to include in histogram
+* @param tMax    -- maximal time to constrain the histogram data
+* @param counts  -- vector of output histogrammed data.
+*   On input, the size of the vector defines the number of points in the
+*   histogram.
+*   On output, adds all property elements belonging to the time interval
+*  [tMin+n*dT;tMin+(n+1)*dT]
+*  to the initial values of each n-th element of the counts vector,
+*  where dT = (tMax-tMin)/counts.size()  */
+template <typename TYPE>
+void TimeSeriesProperty<TYPE>::histogramData(
+    const Kernel::DateAndTime &tMin, const Kernel::DateAndTime &tMax,
+    std::vector<double> &counts) const {
+
+  size_t nPoints = counts.size();
+  if (nPoints == 0)
+    return; // nothing to do
+
+  double t0 = static_cast<double>(tMin.totalNanoseconds());
+  double t1 = static_cast<double>(tMax.totalNanoseconds());
+  if (t0 > t1)
+    throw std::invalid_argument(
+        "invalid arguments for histogramData; tMax<tMin");
+
+  double dt = (t1 - t0) / static_cast<double>(nPoints);
+
+  for (auto &ev : m_values) {
+    double time = static_cast<double>(ev.time().totalNanoseconds());
+    if (time < t0 || time >= t1)
+      continue;
+    size_t ind = static_cast<size_t>((time - t0) / dt);
+    counts[ind] += static_cast<double>(ev.value());
+  }
+}
+
+template <>
+void TimeSeriesProperty<std::string>::histogramData(
+    const Kernel::DateAndTime &tMin, const Kernel::DateAndTime &tMax,
+    std::vector<double> &counts) const {
+  UNUSED_ARG(tMin);
+  UNUSED_ARG(tMax);
+  UNUSED_ARG(counts);
+  throw std::runtime_error("histogramData is not implememnted for time series "
+                           "properties containing strings");
+}
 
 /// @cond
 // -------------------------- Macro to instantiation concrete types
diff --git a/Framework/Kernel/test/MultiFileValidatorTest.h b/Framework/Kernel/test/MultiFileValidatorTest.h
index bd2e0b3332b955d51d5ecb6bf37259de8fdb36f7..38ceddad9fe0e341601c326b0899bae0254667d4 100644
--- a/Framework/Kernel/test/MultiFileValidatorTest.h
+++ b/Framework/Kernel/test/MultiFileValidatorTest.h
@@ -125,6 +125,20 @@ public:
         file_val.isValid(std::vector<std::vector<std::string>>()).empty(),
         false);
   }
+
+  void testFailsOnNonExistingFiles() {
+    std::vector<std::string> vec{"foo"};
+    MultiFileValidator file_val(vec);
+    std::vector<std::vector<std::string>> file{{"myJunkFile.foo"}};
+    TS_ASSERT(!file_val.isValid(file).empty());
+  }
+
+  void testPassesOnNonExistingFiles() {
+    std::vector<std::string> vec{"foo"};
+    MultiFileValidator file_val(vec, false);
+    std::vector<std::vector<std::string>> file{{"myJunkFile.foo"}};
+    TS_ASSERT(file_val.isValid(file).empty());
+  }
 };
 
 #endif /*MULTIFILEVALIDATORTEST_H_*/
diff --git a/Framework/Kernel/test/StatisticsTest.h b/Framework/Kernel/test/StatisticsTest.h
index 2f6c2d75cde74c672dd72b916c5e30ce7bbc7e6b..fae3ea562c1bde918ae768d6c98b9665d02ab44b 100644
--- a/Framework/Kernel/test/StatisticsTest.h
+++ b/Framework/Kernel/test/StatisticsTest.h
@@ -2,7 +2,6 @@
 #define STATISTICSTEST_H_
 
 #include "MantidKernel/Statistics.h"
-#include <boost/math/special_functions/fpclassify.hpp>
 #include <cxxtest/TestSuite.h>
 #include <algorithm>
 #include <cmath>
@@ -44,10 +43,10 @@ public:
     Statistics stats =
         getStatistics(data, (StatOptions::Median | StatOptions::SortedData));
 
-    TS_ASSERT(boost::math::isnan(stats.mean));
-    TS_ASSERT(boost::math::isnan(stats.standard_deviation));
-    TS_ASSERT(boost::math::isnan(stats.minimum));
-    TS_ASSERT(boost::math::isnan(stats.maximum));
+    TS_ASSERT(std::isnan(stats.mean));
+    TS_ASSERT(std::isnan(stats.standard_deviation));
+    TS_ASSERT(std::isnan(stats.minimum));
+    TS_ASSERT(std::isnan(stats.maximum));
     TS_ASSERT_EQUALS(stats.median, 17.2);
   }
 
@@ -63,10 +62,10 @@ public:
     Statistics stats =
         getStatistics(data, (StatOptions::Median | StatOptions::SortedData));
 
-    TS_ASSERT(boost::math::isnan(stats.mean));
-    TS_ASSERT(boost::math::isnan(stats.standard_deviation));
-    TS_ASSERT(boost::math::isnan(stats.minimum));
-    TS_ASSERT(boost::math::isnan(stats.maximum));
+    TS_ASSERT(std::isnan(stats.mean));
+    TS_ASSERT(std::isnan(stats.standard_deviation));
+    TS_ASSERT(std::isnan(stats.minimum));
+    TS_ASSERT(std::isnan(stats.maximum));
     TS_ASSERT_EQUALS(stats.median, 16.5);
   }
 
@@ -85,7 +84,7 @@ public:
     TS_ASSERT_DELTA(stats.standard_deviation, 2.3179, 0.0001);
     TS_ASSERT_EQUALS(stats.minimum, 12.6);
     TS_ASSERT_EQUALS(stats.maximum, 18.3);
-    TS_ASSERT(boost::math::isnan(stats.median));
+    TS_ASSERT(std::isnan(stats.median));
   }
 
   void test_Types_Can_Be_Disabled_With_Flags() {
@@ -98,10 +97,10 @@ public:
 
     Statistics justMean = getStatistics(data, StatOptions::Mean);
     TS_ASSERT_EQUALS(justMean.mean, 16.54);
-    TS_ASSERT(boost::math::isnan(justMean.standard_deviation));
-    TS_ASSERT(boost::math::isnan(justMean.minimum));
-    TS_ASSERT(boost::math::isnan(justMean.maximum));
-    TS_ASSERT(boost::math::isnan(justMean.median));
+    TS_ASSERT(std::isnan(justMean.standard_deviation));
+    TS_ASSERT(std::isnan(justMean.minimum));
+    TS_ASSERT(std::isnan(justMean.maximum));
+    TS_ASSERT(std::isnan(justMean.median));
   }
 
   void testZscores() {
diff --git a/Framework/Kernel/test/TimeSeriesPropertyTest.h b/Framework/Kernel/test/TimeSeriesPropertyTest.h
index 41b274a966a315ce3bb0f5e3614e63c4426e9e27..90e0693bdb573820429d4ef4ca5782368dacacc9 100644
--- a/Framework/Kernel/test/TimeSeriesPropertyTest.h
+++ b/Framework/Kernel/test/TimeSeriesPropertyTest.h
@@ -7,7 +7,7 @@
 #include "MantidKernel/PropertyWithValue.h"
 #include "MantidKernel/TimeSplitter.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 #include <boost/make_shared.hpp>
 #include <boost/shared_ptr.hpp>
 #include <boost/scoped_ptr.hpp>
@@ -565,7 +565,7 @@ public:
     TS_ASSERT_DELTA(intLog->averageValueInFilter(filter), 1.75, 0.001);
 
     // Check the correct behaviour of empty of single value logs.
-    TS_ASSERT(boost::math::isnan(dProp->averageValueInFilter(filter)));
+    TS_ASSERT(std::isnan(dProp->averageValueInFilter(filter)));
     iProp->addValue(DateAndTime("2010-11-30T16:17:25"), 99);
     TS_ASSERT_EQUALS(iProp->averageValueInFilter(filter), 99.0);
 
@@ -710,12 +710,12 @@ public:
     TimeSeriesProperty<double> *log =
         new TimeSeriesProperty<double>("MydoubleLog");
     TimeSeriesPropertyStatistics stats = log->getStatistics();
-    TS_ASSERT(boost::math::isnan(stats.minimum));
-    TS_ASSERT(boost::math::isnan(stats.maximum));
-    TS_ASSERT(boost::math::isnan(stats.median));
-    TS_ASSERT(boost::math::isnan(stats.mean));
-    TS_ASSERT(boost::math::isnan(stats.standard_deviation));
-    TS_ASSERT(boost::math::isnan(stats.duration));
+    TS_ASSERT(std::isnan(stats.minimum));
+    TS_ASSERT(std::isnan(stats.maximum));
+    TS_ASSERT(std::isnan(stats.median));
+    TS_ASSERT(std::isnan(stats.mean));
+    TS_ASSERT(std::isnan(stats.standard_deviation));
+    TS_ASSERT(std::isnan(stats.duration));
 
     delete log;
   }
diff --git a/Framework/Kernel/test/UnitTest.h b/Framework/Kernel/test/UnitTest.h
index 6fb918270c2ed303e63426600f299ff998fe59af..bb5070d8f739f44934b830575059f9864825de48 100644
--- a/Framework/Kernel/test/UnitTest.h
+++ b/Framework/Kernel/test/UnitTest.h
@@ -63,7 +63,7 @@ std::string convert_units_check_range(const Unit &aUnit,
   const size_t nSteps(100);
 
   double step = (range.second - range.first) / nSteps;
-  if (step == std::numeric_limits<double>::infinity()) {
+  if (std::isinf(step)) {
     step = (DBL_MAX / nSteps) * 2;
   }
 
diff --git a/Framework/LiveData/src/SNSLiveEventDataListener.cpp b/Framework/LiveData/src/SNSLiveEventDataListener.cpp
index ba46605f11c69cbbd2baf2aed246a7d5439f5b18..0a04ae4d5601b3ad42d406c1220b77fcbe2c68b6 100644
--- a/Framework/LiveData/src/SNSLiveEventDataListener.cpp
+++ b/Framework/LiveData/src/SNSLiveEventDataListener.cpp
@@ -1255,6 +1255,10 @@ void SNSLiveEventDataListener::initWorkspacePart2() {
   auto tmp = createWorkspace<DataObjects::EventWorkspace>(
       m_eventBuffer->getInstrument()->getDetectorIDs(true).size(), 2, 1);
   WorkspaceFactory::Instance().initializeFromParent(m_eventBuffer, tmp, true);
+  if (m_eventBuffer->getNumberHistograms() != tmp->getNumberHistograms()) {
+    // need to generate the spectra to detector map
+    tmp->rebuildSpectraMapping();
+  }
   m_eventBuffer = std::move(tmp);
 
   // Set the units
diff --git a/Framework/LiveData/src/TOPAZLiveEventDataListener.cpp b/Framework/LiveData/src/TOPAZLiveEventDataListener.cpp
index ffeeebe8794059c3876a492ae508c1d5250860e3..c4ac046f4f1cc96ce3011386aa45d388b17dfce2 100644
--- a/Framework/LiveData/src/TOPAZLiveEventDataListener.cpp
+++ b/Framework/LiveData/src/TOPAZLiveEventDataListener.cpp
@@ -494,6 +494,10 @@ void TOPAZLiveEventDataListener::initWorkspace() {
   auto tmp = createWorkspace<DataObjects::EventWorkspace>(
       m_eventBuffer->getInstrument()->getDetectorIDs(true).size(), 2, 1);
   WorkspaceFactory::Instance().initializeFromParent(m_eventBuffer, tmp, true);
+  if (m_eventBuffer->getNumberHistograms() != tmp->getNumberHistograms()) {
+    // need to generate the spectra to detector map
+    tmp->rebuildSpectraMapping();
+  }
   m_eventBuffer = std::move(tmp);
 
   // Set the units
diff --git a/Framework/MDAlgorithms/src/FindPeaksMD.cpp b/Framework/MDAlgorithms/src/FindPeaksMD.cpp
index 9ebd3fa6bce6d177d86d6109ad883219cffc318a..974554a5cefe330993d4d92d283dd81687e10f67 100644
--- a/Framework/MDAlgorithms/src/FindPeaksMD.cpp
+++ b/Framework/MDAlgorithms/src/FindPeaksMD.cpp
@@ -5,7 +5,7 @@
 #include "MantidDataObjects/MDHistoWorkspace.h"
 #include "MantidKernel/VMD.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 #include <boost/type_traits/integral_constant.hpp>
 
 #include <map>
@@ -269,9 +269,7 @@ void FindPeaksMD::findPeaks(typename MDEventWorkspace<MDE, nd>::sptr ws) {
     // peak.
     signal_t thresholdDensity = ws->getBox()->getSignalNormalized() *
                                 DensityThresholdFactor * m_densityScaleFactor;
-    if (boost::math::isnan(thresholdDensity) ||
-        (thresholdDensity == std::numeric_limits<double>::infinity()) ||
-        (thresholdDensity == -std::numeric_limits<double>::infinity())) {
+    if (std::isfinite(thresholdDensity)) {
       g_log.warning()
           << "Infinite or NaN overall density found. Your input data "
              "may be invalid. Using a 0 threshold instead.\n";
@@ -467,9 +465,7 @@ void FindPeaksMD::findPeaksHisto(
     double thresholdDensity =
         (totalSignal * ws->getInverseVolume() / double(numBoxes)) *
         DensityThresholdFactor * m_densityScaleFactor;
-    if ((thresholdDensity != thresholdDensity) ||
-        (thresholdDensity == std::numeric_limits<double>::infinity()) ||
-        (thresholdDensity == -std::numeric_limits<double>::infinity())) {
+    if (!std::isfinite(thresholdDensity)) {
       g_log.warning()
           << "Infinite or NaN overall density found. Your input data "
              "may be invalid. Using a 0 threshold instead.\n";
diff --git a/Framework/MDAlgorithms/src/Integrate3DEvents.cpp b/Framework/MDAlgorithms/src/Integrate3DEvents.cpp
index de979199d35b5c99b5de0b691901eff4ead8a7ea..0169c85c26249b18b2e4fc9f1a7e2ef3270b9b70 100644
--- a/Framework/MDAlgorithms/src/Integrate3DEvents.cpp
+++ b/Framework/MDAlgorithms/src/Integrate3DEvents.cpp
@@ -143,7 +143,7 @@ Integrate3DEvents::ellipseIntegrateEvents(
 
   bool invalid_peak = false;
   for (int i = 0; i < 3; i++) {
-    if ((boost::math::isnan)(sigmas[i])) {
+    if ((std::isnan)(sigmas[i])) {
       invalid_peak = true;
     } else if (sigmas[i] <= 0) {
       invalid_peak = true;
diff --git a/Framework/MDAlgorithms/src/IntegratePeaksCWSD.cpp b/Framework/MDAlgorithms/src/IntegratePeaksCWSD.cpp
index ac076fe94f3ff5373a3a17e6258ebbde42eacea6..fc9fefebd4a6d3cc857aa98b151a66ecc4a35c87 100644
--- a/Framework/MDAlgorithms/src/IntegratePeaksCWSD.cpp
+++ b/Framework/MDAlgorithms/src/IntegratePeaksCWSD.cpp
@@ -1,12 +1,12 @@
 #include "MantidMDAlgorithms/IntegratePeaksCWSD.h"
 #include "MantidAPI/IMDEventWorkspace.h"
-#include "MantidDataObjects/PeaksWorkspace.h"
-#include "MantidAPI/WorkspaceProperty.h"
 #include "MantidAPI/IMDIterator.h"
-#include "MantidGeometry/IDetector.h"
+#include "MantidAPI/WorkspaceProperty.h"
 #include "MantidDataObjects/Peak.h"
-#include "MantidKernel/ArrayProperty.h"
+#include "MantidDataObjects/PeaksWorkspace.h"
+#include "MantidGeometry/IDetector.h"
 #include "MantidGeometry/Instrument.h"
+#include "MantidKernel/ArrayProperty.h"
 
 namespace Mantid {
 namespace MDAlgorithms {
@@ -25,7 +25,10 @@ const signal_t THRESHOLD_SIGNAL = 0;
 /** Constructor
  */
 IntegratePeaksCWSD::IntegratePeaksCWSD()
-    : m_useSinglePeakCenterFmUser(false), m_doMergePeak(false) {}
+    : m_haveMultipleRun(false), m_useSinglePeakCenterFmUser(false),
+      m_peakRadius(), m_doMergePeak(false), m_normalizeByMonitor(false),
+      m_normalizeByTime(false), m_scaleFactor(0), m_maskDets(false),
+      m_haveInputPeakWS(false) {}
 
 //----------------------------------------------------------------------------------------------
 /** Initialize the algorithm's properties.
diff --git a/Framework/MDAlgorithms/src/IntegratePeaksMD.cpp b/Framework/MDAlgorithms/src/IntegratePeaksMD.cpp
index d9b8776cbb8111ee1b7a62a9746abb82a3d50517..6ab1da3f0f8025454e3e6fbc358e72ff6c408d7b 100644
--- a/Framework/MDAlgorithms/src/IntegratePeaksMD.cpp
+++ b/Framework/MDAlgorithms/src/IntegratePeaksMD.cpp
@@ -19,7 +19,7 @@
 #include "MantidAPI/FunctionValues.h"
 #include "MantidAPI/FunctionFactory.h"
 #include "MantidAPI/IPeakFunction.h"
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 #include <gsl/gsl_integration.h>
 #include <fstream>
 
@@ -556,7 +556,7 @@ void IntegratePeaksMD::integrate(typename MDEventWorkspace<MDE, nd>::sptr ws) {
         if (integrationOption.compare("Sum") == 0) {
 
           for (size_t j = peakMin; j <= peakMax; j++)
-            if (!boost::math::isnan(yy[j]) && !boost::math::isinf(yy[j]))
+            if (std::isfinite(yy[j]))
               signal += yy[j];
         } else {
           gsl_integration_workspace *w = gsl_integration_workspace_alloc(1000);
diff --git a/Framework/MDAlgorithms/src/IntegratePeaksMD2.cpp b/Framework/MDAlgorithms/src/IntegratePeaksMD2.cpp
index 2f7724a9d32523a48067df4339c6ee41405f8213..efab53b377c43662d137a6d8172944068ae5f568 100644
--- a/Framework/MDAlgorithms/src/IntegratePeaksMD2.cpp
+++ b/Framework/MDAlgorithms/src/IntegratePeaksMD2.cpp
@@ -21,7 +21,7 @@
 #include "MantidAPI/FunctionFactory.h"
 #include "MantidAPI/IPeakFunction.h"
 #include "MantidAPI/Progress.h"
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 #include <gsl/gsl_integration.h>
 #include <fstream>
 
@@ -587,7 +587,7 @@ void IntegratePeaksMD2::integrate(typename MDEventWorkspace<MDE, nd>::sptr ws) {
         signal = 0.0;
         if (integrationOption.compare("Sum") == 0) {
           for (size_t j = peakMin; j <= peakMax; j++)
-            if (!boost::math::isnan(yy[j]) && !boost::math::isinf(yy[j]))
+            if (std::isfinite(yy[j]))
               signal += yy[j];
         } else {
           gsl_integration_workspace *w = gsl_integration_workspace_alloc(1000);
diff --git a/Framework/MDAlgorithms/src/UnitsConversionHelper.cpp b/Framework/MDAlgorithms/src/UnitsConversionHelper.cpp
index 83c36b92367b9109e519303a66cd81d84b33a936..bb0f135209a092850fab48332fcd31a7196b295d 100644
--- a/Framework/MDAlgorithms/src/UnitsConversionHelper.cpp
+++ b/Framework/MDAlgorithms/src/UnitsConversionHelper.cpp
@@ -2,7 +2,7 @@
 #include "MantidAPI/NumericAxis.h"
 #include "MantidKernel/UnitFactory.h"
 #include "MantidKernel/Strings.h"
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 namespace Mantid {
 namespace MDAlgorithms {
@@ -180,7 +180,7 @@ UnitsConversionHelper::getConversionRange(double x1, double x2) const {
     }
     double tof1 = m_SourceWSUnit->singleToTOF(range.first);
     double tof2 = m_SourceWSUnit->singleToTOF(range.second);
-    if (boost::math::isnan(tof1) || boost::math::isnan(tof2)) {
+    if (std::isnan(tof1) || std::isnan(tof2)) {
       if (range.first < source_range.first)
         range.first = source_range.first;
       if (range.second > source_range.second)
diff --git a/Framework/MDAlgorithms/test/BinMDTest.h b/Framework/MDAlgorithms/test/BinMDTest.h
index af31cbabf82c8b56a21d55fc7ee3033322623223..a21293914cd5d14bc6c905cace094b2b361abac2 100644
--- a/Framework/MDAlgorithms/test/BinMDTest.h
+++ b/Framework/MDAlgorithms/test/BinMDTest.h
@@ -20,7 +20,7 @@
 #include "MantidMDAlgorithms/SaveMD2.h"
 #include "MantidTestHelpers/MDEventsTestHelper.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 #include <cxxtest/TestSuite.h>
 
@@ -185,7 +185,7 @@ public:
         TS_ASSERT_DELTA(out->getErrorAt(i), sqrt(expected_signal), 1e-5);
       } else if (functionXML != "NO_FUNCTION") {
         // All NAN cause of implicit function
-        TS_ASSERT(boost::math::isnan(out->getSignalAt(i))); // The implicit
+        TS_ASSERT(std::isnan(out->getSignalAt(i))); // The implicit
         // function should
         // have ensured that
         // no bins were
diff --git a/Framework/MDAlgorithms/test/CentroidPeaksMD2Test.h b/Framework/MDAlgorithms/test/CentroidPeaksMD2Test.h
index e4e7553ca7e9c5b0d3e4568a586bdd6cdabf4159..623734fab3eac39bd5d4f4b252a581abaadec2b1 100644
--- a/Framework/MDAlgorithms/test/CentroidPeaksMD2Test.h
+++ b/Framework/MDAlgorithms/test/CentroidPeaksMD2Test.h
@@ -16,7 +16,6 @@
 #include "MantidKernel/UnitLabelTypes.h"
 
 #include <boost/math/distributions/normal.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
 #include <boost/math/special_functions/pow.hpp>
 #include <boost/random/linear_congruential.hpp>
 #include <boost/random/mersenne_twister.hpp>
diff --git a/Framework/MDAlgorithms/test/CentroidPeaksMDTest.h b/Framework/MDAlgorithms/test/CentroidPeaksMDTest.h
index 1ac26424e397e73c8c6cf5b958d6d5fe9ae3da37..4831cc20df05e15629f62b3af8ae75400432ae69 100644
--- a/Framework/MDAlgorithms/test/CentroidPeaksMDTest.h
+++ b/Framework/MDAlgorithms/test/CentroidPeaksMDTest.h
@@ -16,7 +16,6 @@
 #include "MantidKernel/UnitLabelTypes.h"
 
 #include <boost/math/distributions/normal.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
 #include <boost/math/special_functions/pow.hpp>
 #include <boost/random/linear_congruential.hpp>
 #include <boost/random/mersenne_twister.hpp>
diff --git a/Framework/MDAlgorithms/test/IntegratePeaksMD2Test.h b/Framework/MDAlgorithms/test/IntegratePeaksMD2Test.h
index fd8a909dd3204a1cf350bc79e67fe8d0f5954037..5aff352947ce5f15878a2429c59d7880fc32682c 100644
--- a/Framework/MDAlgorithms/test/IntegratePeaksMD2Test.h
+++ b/Framework/MDAlgorithms/test/IntegratePeaksMD2Test.h
@@ -17,7 +17,6 @@
 #include "MantidKernel/UnitLabelTypes.h"
 
 #include <boost/math/distributions/normal.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
 #include <boost/math/special_functions/pow.hpp>
 #include <boost/random/linear_congruential.hpp>
 #include <boost/random/mersenne_twister.hpp>
diff --git a/Framework/MDAlgorithms/test/IntegratePeaksMDHKLTest.h b/Framework/MDAlgorithms/test/IntegratePeaksMDHKLTest.h
index 13cc818f4c9d55d10e2076f03d838830c8238c9e..b7634a2f41a9b52a5a241446c0e5f1e63b857f3c 100644
--- a/Framework/MDAlgorithms/test/IntegratePeaksMDHKLTest.h
+++ b/Framework/MDAlgorithms/test/IntegratePeaksMDHKLTest.h
@@ -16,7 +16,6 @@
 #include "MantidKernel/UnitLabelTypes.h"
 
 #include <boost/math/distributions/normal.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
 #include <boost/math/special_functions/pow.hpp>
 #include <boost/random/linear_congruential.hpp>
 #include <boost/random/mersenne_twister.hpp>
diff --git a/Framework/MDAlgorithms/test/IntegratePeaksMDTest.h b/Framework/MDAlgorithms/test/IntegratePeaksMDTest.h
index d809cdf727cd14e80226dead519efc15c16b8bdc..e022030f5a180bd78d8aaca0c5183b0982302252 100644
--- a/Framework/MDAlgorithms/test/IntegratePeaksMDTest.h
+++ b/Framework/MDAlgorithms/test/IntegratePeaksMDTest.h
@@ -16,7 +16,6 @@
 #include "MantidKernel/UnitLabelTypes.h"
 
 #include <boost/math/distributions/normal.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
 #include <boost/math/special_functions/pow.hpp>
 #include <boost/random/linear_congruential.hpp>
 #include <boost/random/mersenne_twister.hpp>
diff --git a/Framework/MDAlgorithms/test/SmoothMDTest.h b/Framework/MDAlgorithms/test/SmoothMDTest.h
index f812e32a62636cb7f6b7f017d4101056a41c4998..a2052d8376045c2dfb3ef9161899bc25b42e86cb 100644
--- a/Framework/MDAlgorithms/test/SmoothMDTest.h
+++ b/Framework/MDAlgorithms/test/SmoothMDTest.h
@@ -7,7 +7,7 @@
 #include "MantidTestHelpers/MDEventsTestHelper.h"
 #include "MantidAPI/IMDHistoWorkspace.h"
 #include <vector>
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 using Mantid::MDAlgorithms::SmoothMD;
 using namespace Mantid::API;
@@ -370,7 +370,7 @@ public:
                       out->getSignalAt(8));
 
     TSM_ASSERT("Last index should have a smoothed Value of NaN",
-               boost::math::isnan(out->getSignalAt(9)));
+               std::isnan(out->getSignalAt(9)));
   }
 
   void test_gaussian_kernel_sigma_1() {
diff --git a/Framework/Nexus/src/NexusFileIO.cpp b/Framework/Nexus/src/NexusFileIO.cpp
index 114d7da6bafd7d302cc426fe6cace7c71f2a06f1..ec7622a767a481d7324a5180a0d8919ea140a6d1 100644
--- a/Framework/Nexus/src/NexusFileIO.cpp
+++ b/Framework/Nexus/src/NexusFileIO.cpp
@@ -405,7 +405,7 @@ int NexusFileIO::writeNexusProcessedData2D(
     // Potentially x error
     if (localworkspace->hasDx(0)) {
       dims_array[0] = static_cast<int>(nSpect);
-      dims_array[1] = static_cast<int>(localworkspace->readX(0).size());
+      dims_array[1] = static_cast<int>(localworkspace->dx(0).size());
       std::string dxErrorName = "xerrors";
       NXcompmakedata(fileID, dxErrorName.c_str(), NX_FLOAT64, 2, dims_array,
                      m_nexuscompression, asize);
diff --git a/Framework/PythonInterface/mantid/api/src/Exports/MultipleFileProperty.cpp b/Framework/PythonInterface/mantid/api/src/Exports/MultipleFileProperty.cpp
index 994b1a98c51c1199261424f27d62d2d7eac6c2ae..2ffd86de5fbf9ebdc7be404d06a49bd01c54d620 100644
--- a/Framework/PythonInterface/mantid/api/src/Exports/MultipleFileProperty.cpp
+++ b/Framework/PythonInterface/mantid/api/src/Exports/MultipleFileProperty.cpp
@@ -1,3 +1,4 @@
+#include "MantidAPI/FileProperty.h"
 #include "MantidAPI/MultipleFileProperty.h"
 #include "MantidPythonInterface/kernel/Converters/PySequenceToVector.h"
 #include "MantidPythonInterface/kernel/IsNone.h"
@@ -7,6 +8,7 @@
 #include <boost/python/make_constructor.hpp>
 #include <boost/python/str.hpp>
 
+using Mantid::API::FileProperty;
 using Mantid::API::MultipleFileProperty;
 using Mantid::Kernel::PropertyWithValue;
 using Mantid::PythonInterface::Converters::PySequenceToVector;
@@ -45,8 +47,9 @@ boost::python::object valueAsPyObject(MultipleFileProperty &self) {
 }
 
 MultipleFileProperty *
-createMultipleFileProperty(const std::string &name,
-                           const object &extensions = object()) {
+createMultipleFilePropertyWithAction(const std::string &name,
+                                     unsigned int action,
+                                     const object &extensions = object()) {
   std::vector<std::string> extsAsVector;
   if (!Mantid::PythonInterface::isNone(extensions)) {
     extract<std::string> extractor(extensions);
@@ -56,7 +59,14 @@ createMultipleFileProperty(const std::string &name,
       extsAsVector = PySequenceToVector<std::string>(extensions)();
     }
   }
-  return new MultipleFileProperty(name, extsAsVector);
+  return new MultipleFileProperty(name, action, extsAsVector);
+}
+
+MultipleFileProperty *
+createMultipleFileProperty(const std::string &name,
+                           const object &extensions = object()) {
+  return createMultipleFilePropertyWithAction(
+      name, FileProperty::FileAction::Load, extensions);
 }
 }
 
@@ -70,6 +80,10 @@ void export_MultipleFileProperty() {
       .def("__init__", make_constructor(
                            &createMultipleFileProperty, default_call_policies(),
                            (arg("name"), arg("extensions") = object())))
+      .def("__init__",
+           make_constructor(
+               &createMultipleFilePropertyWithAction, default_call_policies(),
+               (arg("name"), arg("action"), arg("extensions") = object())))
       // Override the base class one to do something more appropriate
       .add_property("value", &valueAsPyObject);
 }
diff --git a/Framework/PythonInterface/plugins/algorithms/MatchPeaks.py b/Framework/PythonInterface/plugins/algorithms/MatchPeaks.py
new file mode 100644
index 0000000000000000000000000000000000000000..25ea3fea064b08c4f18dc3ea26dcfb6c12250402
--- /dev/null
+++ b/Framework/PythonInterface/plugins/algorithms/MatchPeaks.py
@@ -0,0 +1,268 @@
+# pylint: disable=too-many-branches
+from __future__ import (absolute_import, division, print_function)
+from mantid.api import *
+from mantid.simpleapi import *
+from mantid.kernel import Direction
+import numpy as np
+
+
+def mask_reduced_ws(ws_to_mask, xstart, xend):
+    """
+    Calls MaskBins twice, for masking the first and last bins of a workspace
+    Args:
+        red:      reduced workspace
+        xstart:   MaskBins between x[0] and x[xstart]
+        xend:     MaskBins between x[xend] and x[-1]
+
+    """
+    x_values = ws_to_mask.readX(0)
+
+    if xstart > 0:
+        logger.debug('Mask bins smaller than {0}'.format(xstart))
+        MaskBins(InputWorkspace=ws_to_mask, OutputWorkspace=ws_to_mask, XMin=x_values[0], XMax=x_values[xstart])
+    else:
+        logger.debug('No masking due to x bin <= 0!: {0}'.format(xstart))
+    if xend < len(x_values) - 1:
+        logger.debug('Mask bins larger than {0}'.format(xend))
+        MaskBins(InputWorkspace=ws_to_mask, OutputWorkspace=ws_to_mask, XMin=x_values[xend + 1], XMax=x_values[-1])
+    else:
+        logger.debug('No masking due to x bin >= len(x_values) - 1!: {0}'.format(xend))
+
+    if xstart > 0 and xend < len(x_values) - 1:
+        logger.notice('Bins out of range {0} {1} [Unit of X-axis] are masked'.format(x_values[xstart],
+                                                                                     x_values[xend + 1]))
+
+
+class MatchPeaks(PythonAlgorithm):
+    def __init__(self):
+
+        PythonAlgorithm.__init__(self)
+
+        # Mandatory workspaces
+        self._input_ws = None
+
+        # Optional workspace
+        self._input_2_ws = None
+        self._output_bin_range = None
+
+        # Bool flags
+        self._masking = None
+        self._match_option = None
+
+    def category(self):
+        return "Transforms"
+
+    def summary(self):
+        return 'Shift the data of the input workspace to align each spectrum peaks with each other at the centre of ' \
+               'x-axis or, if requested, according to the positions, specified by the second input workspace.'
+
+    def PyInit(self):
+        self.declareProperty(MatrixWorkspaceProperty('InputWorkspace',
+                                                     defaultValue='',
+                                                     direction=Direction.Input),
+                             doc='Input workspace')
+
+        self.declareProperty(MatrixWorkspaceProperty('InputWorkspace2',
+                                                     defaultValue='',
+                                                     direction=Direction.Input,
+                                                     optional=PropertyMode.Optional),
+                             doc='Input workspace as source of the peak positions to align with')
+
+        self.declareProperty(MatrixWorkspaceProperty('OutputWorkspace',
+                                                     defaultValue='',
+                                                     direction=Direction.Output),
+                             doc='Shifted output workspace')
+
+        self.declareProperty('MaskBins',
+                             defaultValue=False,
+                             doc='Whether to mask shifted bins')
+
+        self.declareProperty('MatchInput2ToCenter',
+                             defaultValue=False,
+                             doc='Match peak bins such that InputWorkspace2 would be centered')
+
+        self.declareProperty(ITableWorkspaceProperty('BinRangeTable',
+                                                     defaultValue='',
+                                                     direction=Direction.Output,
+                                                     optional=PropertyMode.Optional),
+                             doc='Table workspace that contains two values defining a range. Bins inside this range '
+                                 'were not circular shifted. Bins outside this range can be masked.')
+
+    def setUp(self):
+        self._input_ws = self.getPropertyValue('InputWorkspace')
+        self._input_2_ws = self.getPropertyValue('InputWorkspace2')
+        self._output_ws = self.getPropertyValue('OutputWorkspace')
+        self._masking = self.getProperty('MaskBins').value
+        self._match_option = self.getProperty('MatchInput2ToCenter').value
+        self._output_bin_range = self.getPropertyValue('BinRangeTable')
+
+    def validateInputs(self):
+        issues = dict()
+        input1 = self.getPropertyValue('InputWorkspace')
+        input2 = self.getPropertyValue('InputWorkspace2')
+        if input2:
+            if mtd[input1].blocksize() != mtd[input2].blocksize():
+                issues['InputWorkspace2'] = 'Incompatible same number of bins'
+            if mtd[input1].getNumberHistograms() != mtd[input2].getNumberHistograms():
+                issues['InputWorkspace2'] = 'Incompatible number of spectra'
+            if np.all(mtd[input1].extractX() - mtd[input2].extractX()):
+                issues['InputWorkspace2'] = 'Incompatible x-values'
+
+            if np.any(np.isnan(mtd[input2].extractY())):
+                issues['InputWorkspace2'] = 'Y-values contain nans'
+            if np.any(np.isnan(mtd[input2].extractE())):
+                issues['InputWorkspace2'] = 'E-values contain nans'
+            if np.any(np.isinf(mtd[input2].extractY())):
+                issues['InputWorkspace2'] = 'Y-values contain infs'
+            if np.any(np.isinf(mtd[input2].extractE())):
+                issues['InputWorkspace2'] = 'E-values contain infs'
+        if input1:
+            if np.any(np.isnan(mtd[input1].extractY())):
+                issues['InputWorkspace'] = 'Y-values contain nans'
+            if np.any(np.isnan(mtd[input1].extractY())):
+                issues['InputWorkspace'] = 'E-values contain nans'
+            if np.any(np.isinf(mtd[input1].extractY())):
+                issues['InputWorkspace'] = 'Y-values contain infs'
+            if np.any(np.isinf(mtd[input1].extractY())):
+                issues['InputWorkspace'] = 'E-values contain infs'
+
+        return issues
+
+    def PyExec(self):
+        self.setUp()
+
+        output_ws = CloneWorkspace(InputWorkspace=mtd[self._input_ws], OutputWorkspace=self._output_ws)
+
+        size = mtd[self._input_ws].blocksize()
+
+        mid_bin = int(size / 2)
+
+        # Find peak positions in input workspace
+        peak_bins1 = self._get_peak_position(output_ws)
+        self.log().notice('Peak bins {0}: {1}'.format(self._input_ws, peak_bins1))
+
+        # Find peak positions in second input workspace
+        if self._input_2_ws:
+            peak_bins2 = self._get_peak_position(mtd[self._input_2_ws])
+            self.log().notice('Peak bins {0}: {1}'.format(self._input_2_ws, peak_bins2))
+
+        # All bins must be positive and larger than zero
+        if not self._input_2_ws:
+            # Input workspace will match center
+            to_shift = peak_bins1 - mid_bin * np.ones(mtd[self._input_ws].getNumberHistograms())
+        elif self._match_option:
+            # Input workspace will be shifted according to centered peak of second input workspace
+            to_shift = peak_bins2 - mid_bin * np.ones(mtd[self._input_ws].getNumberHistograms())
+        else:
+            # Input workspace will be shifted according to peak position of second input workspace
+            to_shift = peak_bins1 - peak_bins2
+
+        for i in range(output_ws.getNumberHistograms()):
+            # Shift Y and E values of spectrum i
+            output_ws.setY(i, np.roll(output_ws.readY(i), int(-to_shift[i])))
+            output_ws.setE(i, np.roll(output_ws.readE(i), int(-to_shift[i])))
+        self.log().debug('Shift array: {0}'.format(-to_shift))
+
+        # Final treatment of bins (masking, produce output)
+        min_bin = 0
+        max_bin = size
+
+        # This is a left shift, bins at the end of the workspace may be masked
+        if np.min(-to_shift) < 0:
+            max_bin = size - 1 - abs(np.min(-to_shift))
+
+        # This is a right shift, bins at the beginning of the workspace may be masked
+        if np.max(-to_shift) > 0:
+            min_bin = np.max(-to_shift)
+
+        if self._masking:
+            mask_reduced_ws(output_ws, min_bin, max_bin)
+
+        if self._output_bin_range != '':
+            # Create table with its columns containing bin range
+            bin_range = CreateEmptyTableWorkspace(OutputWorkspace=self._output_bin_range)
+            bin_range.addColumn(type="double", name='MinBin')
+            bin_range.addColumn(type="double", name='MaxBin')
+
+            bin_range.addRow({'MinBin': min_bin, 'MaxBin': max_bin})
+            self.setProperty('BinRangeTable', bin_range)
+
+        # Set output properties
+        self.setProperty('OutputWorkspace', output_ws)
+
+        DeleteWorkspace(output_ws)
+
+        return
+
+    def _get_peak_position(self, input_ws):
+        """
+        Gives bin of the peak of each spectrum in the input_ws
+        @param input_ws  :: input workspace
+        @return          :: bin numbers of the peak positions
+        """
+
+        if isinstance(input_ws, MatrixWorkspace):
+            fit_table = FindEPP(InputWorkspace=input_ws)
+        elif isinstance(input_ws, ITableWorkspace):
+            fit_table = input_ws
+        else:
+            logger.error('Workspace not defined')
+
+        # Mid bin number
+        mid_bin = int(mtd[self._input_ws].blocksize() / 2)
+
+        # Initialisation
+        peak_bin = np.ones(mtd[self._input_ws].getNumberHistograms()) * mid_bin
+        peak_plus_error = np.zeros(mtd[self._input_ws].getNumberHistograms())
+
+        # Bin range: difference between mid bin and peak bin should be in this range
+        tolerance = int(mid_bin / 2)
+
+        x_values = mtd[self._input_ws].readX(0)
+
+        for i in range(mtd[self._input_ws].getNumberHistograms()):
+            fit = fit_table.row(i)
+
+            # Bin number, where Y has its maximum
+            y_values = mtd[self._input_ws].readY(i)
+
+            peak_pos_error = fit["PeakCentreError"] + fit["PeakCentre"]
+
+            if peak_pos_error >= x_values[0]:
+                if peak_pos_error <= x_values[-1]:
+                    if fit["FitStatus"] == 'success':
+                        peak_plus_error[i] = mtd[self._input_ws].binIndexOf(peak_pos_error)
+                        if abs(peak_plus_error[i] - mid_bin) < tolerance:
+                            peak_bin[i] = mtd[self._input_ws].binIndexOf(fit["PeakCentre"])
+                            logger.debug('Fit success, peak inside tolerance')
+                        else:
+                            logger.debug('Peak outside tolerance, do not shift spectrum')
+                    elif abs(np.argmax(y_values) - mid_bin) < tolerance:
+                        peak_bin[i] = np.argmax(y_values)
+                        logger.debug('Take maximum peak position {0}'.format(peak_bin[i]))
+                    else:
+                        logger.debug('Fit failed and peak outside tolerance, do not shift spectrum')
+                else:
+                    logger.debug('Peak x-value {0} > x-end {1}, do not shift spectrum'.format(peak_pos_error,
+                                                                                              x_values[-1]))
+            else:
+                logger.debug('Peak x-value {0} < x-begin {1}, do not shift spectrum'.format(peak_pos_error,
+                                                                                            x_values[0]))
+
+        # Delete unused TableWorkspaces
+        try:
+            DeleteWorkspace('EPPfit_Parameters')
+        except ValueError:
+            logger.debug('No EPPfit_Parameters table available for deletion')
+
+        try:
+            DeleteWorkspace('EPPfit_NormalisedCovarianceMatrix')
+        except ValueError:
+            logger.debug('No EPPfit_NormalisedCovarianceMatrix table available for deletion')
+
+        DeleteWorkspace(fit_table)
+
+        return peak_bin
+
+
+AlgorithmFactory.subscribe(MatchPeaks)
diff --git a/Framework/PythonInterface/plugins/algorithms/SelectNexusFilesByMetadata.py b/Framework/PythonInterface/plugins/algorithms/SelectNexusFilesByMetadata.py
index 21a69ec3fc1799592d41fb768b374de586051c32..edeb96f7500888f86811f125f92d430641e0756e 100644
--- a/Framework/PythonInterface/plugins/algorithms/SelectNexusFilesByMetadata.py
+++ b/Framework/PythonInterface/plugins/algorithms/SelectNexusFilesByMetadata.py
@@ -58,53 +58,68 @@ class SelectNexusFilesByMetadata(PythonAlgorithm):
         except ImportError:
             raise RuntimeError('This algorithm requires h5py package. See https://pypi.python.org/pypi/h5py')
 
-        outputfiles = []
-        # for the purpose here + is meaningless, so they will be silently replaced with ,
-        for run in self.getPropertyValue('FileList').replace('+', ',').split(','):
-            with h5py.File(run,'r') as nexusfile:
-                toeval = ''
-                item = None # for pylint
-                for i, item in enumerate(self._criteria_splitted):
-                    if i % 2 == 1: # at odd indices will always be the nexus entry names
-                        try:
-                            # try to get the entry from the file
-                            entry = nexusfile.get(item)
-
-                            if len(entry.shape) > 1 or len(entry) > 1:
-                                self.log().warning('Nexus entry %s has more than one dimension or more than one element'
-                                                   'in file %s. Skipping the file.' % (item,run))
-                                toeval = '0'
-                                break
-
-                            # replace entry name by it's value
-                            value = entry[0]
-
-                            if str(value.dtype).startswith('|S'):
-                                # string value, need to quote for eval
-                                toeval += '\"'+ value + '\"'
-                            else:
-                                toeval += str(value)
-
-                        except (TypeError,AttributeError):
-                            self.log().warning('Nexus entry %s does not exist in file %s. Skipping the file.' % (item,run))
-                            toeval = '0'
-                            break
-                    else:
-                        # keep other portions intact
-                        toeval += item
-                self.log().debug('Expression to be evaluated for file %s :\n %s' % (run, toeval))
-                try:
-                    if eval(toeval):
-                        outputfiles.append(run)
-                except (NameError,ValueError,SyntaxError):
-                    # even if syntax is validated, eval can still throw, since
-                    # the nexus entry value itself can be spurious for a given file
-                    self.log().warning('Invalid value for the nexus entry %s in file %s. Skipping the file.' % (item, run))
-
-        if not outputfiles:
+        outputfiles = ''
+        # first split by ,
+        for runs in self.getPropertyValue('FileList').split(','):
+
+            filestosum = ''
+            # then split each by +
+            for run in runs.split('+'):
+
+                with h5py.File(run, 'r') as nexusfile:
+                    if self.checkCriteria(run, nexusfile):
+                        filestosum += run + '+'
+
+            if filestosum:
+                # trim the last +
+                filestosum = filestosum[:-1]
+                outputfiles += filestosum + ','
+
+        # trim the last ,
+        if outputfiles:
+            outputfiles = outputfiles[:-1]
+        else:
             self.log().notice('No files where found to satisfy the criteria, check the FileList and/or NexusCriteria')
 
-        self.setPropertyValue('Result',','.join(outputfiles))
+        self.setPropertyValue('Result',outputfiles)
+
+    def checkCriteria(self, run, nexusfile):
+        toeval = ''
+        item = None  # for pylint
+        for i, item in enumerate(self._criteria_splitted):
+            if i % 2 == 1:  # at odd indices will always be the nexus entry names
+                try:
+                    # try to get the entry from the file
+                    entry = nexusfile.get(item)
+
+                    if len(entry.shape) > 1 or len(entry) > 1:
+                        self.log().warning('Nexus entry %s has more than one dimension or more than one element'
+                                           'in file %s. Skipping the file.' % (item, run))
+                        return False
+
+                    # replace entry name by it's value
+                    value = entry[0]
+
+                    if str(value.dtype).startswith('|S'):
+                        # string value, need to quote for eval
+                        toeval += '\"' + value + '\"'
+                    else:
+                        toeval += str(value)
+
+                except (TypeError, AttributeError):
+                    self.log().warning('Nexus entry %s does not exist in file %s. Skipping the file.' % (item, run))
+                    return False
+            else:
+                # keep other portions intact
+                toeval += item
+        self.log().debug('Expression to be evaluated for file %s :\n %s' % (run, toeval))
+        try:
+            return eval(toeval)
+        except (NameError, ValueError, SyntaxError):
+            # even if syntax is validated, eval can still throw, since
+            # the nexus entry value itself can be spurious for a given file
+            self.log().warning('Invalid value for the nexus entry %s in file %s. Skipping the file.' % (item, run))
+            return False
 
 # Register algorithm with Mantid
 AlgorithmFactory.subscribe(SelectNexusFilesByMetadata)
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSAzimuthalAverage1D.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSAzimuthalAverage1D.py
index 614719bbf00ba95afa3166dd18e6267ebc37bb3b..62c79422c92cc122dffd42b708b6df223bf722c6 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSAzimuthalAverage1D.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSAzimuthalAverage1D.py
@@ -1,4 +1,6 @@
 #pylint: disable=no-init,invalid-name
+from __future__ import (absolute_import, division, print_function)
+
 import math
 from mantid.api import *
 from mantid.kernel import *
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSDirectBeamTransmission.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSDirectBeamTransmission.py
index f55159654113f0cc5c0c82533180b1f44beb2245..e0ca43e331591d5c8a7d996b224c60e7619bf5a5 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSDirectBeamTransmission.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSDirectBeamTransmission.py
@@ -1,4 +1,6 @@
 #pylint: disable=no-init,invalid-name
+from __future__ import (absolute_import, division, print_function)
+
 import os
 from mantid.api import *
 from mantid.kernel import *
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSNormalise.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSNormalise.py
index dc816f465394393f31a3ada4d4f844f868bf99a8..2607a58ab4f1252dba625a9be9164550a398a324 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSNormalise.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/EQSANSNormalise.py
@@ -1,4 +1,6 @@
 #pylint: disable=no-init
+from __future__ import (absolute_import, division, print_function)
+
 import os
 from mantid.api import *
 from mantid.kernel import *
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/FlatPlatePaalmanPingsCorrection.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/FlatPlatePaalmanPingsCorrection.py
index 0991d85cf98383310567e83480792f8c1fa7aea1..3a7baeff46d65a6ab6d370a74484b3d9068d1a49 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/FlatPlatePaalmanPingsCorrection.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/FlatPlatePaalmanPingsCorrection.py
@@ -1,4 +1,8 @@
 #pylint: disable=no-init,invalid-name
+from __future__ import (absolute_import, division, print_function)
+from six import iteritems
+from six import integer_types
+
 import math
 import numpy as np
 from mantid.simpleapi import *
@@ -315,10 +319,10 @@ class FlatPlatePaalmanPingsCorrection(PythonAlgorithm):
         @param sample_logs Dictionary of logs to append to the workspace.
         """
 
-        for key, value in sample_logs.iteritems():
+        for key, value in iteritems(sample_logs):
             if isinstance(value, bool):
                 log_type = 'String'
-            elif isinstance(value, (int, long, float)):
+            elif isinstance(value, (integer_types, float)):
                 log_type = 'Number'
             else:
                 log_type = 'String'
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/HFIRSANSReduction.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/HFIRSANSReduction.py
index 518edb06fb7f49ac5943a568021c579722264953..cb0d7b51c00cc50a320353d02285b909f37dd6f1 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/HFIRSANSReduction.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/HFIRSANSReduction.py
@@ -1,4 +1,6 @@
 #pylint: disable=no-init,invalid-name,too-many-branches
+from __future__ import (absolute_import, division, print_function)
+
 import os
 import mantid.simpleapi as api
 from mantid.api import *
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ILLIN16BCalibration.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ILLIN16BCalibration.py
index 5721324cc0906bd23d34d8dd71b3609018db257e..38c4435421091df6a501c80bc7b41e96694639de 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ILLIN16BCalibration.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ILLIN16BCalibration.py
@@ -1,4 +1,6 @@
 #pylint: disable=no-init
+from __future__ import (absolute_import, division, print_function)
+
 from mantid.kernel import *
 from mantid.api import (WorkspaceProperty, FileProperty, FileAction,
                         DataProcessorAlgorithm, AlgorithmFactory, mtd)
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ISISIndirectDiffractionReduction.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ISISIndirectDiffractionReduction.py
index abac8193894cab3ca505ad7665214013c3234eb9..0e657537bff60bf3df9551864cd1186c61f64e9f 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ISISIndirectDiffractionReduction.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ISISIndirectDiffractionReduction.py
@@ -1,4 +1,6 @@
 #pylint: disable=no-init,too-many-instance-attributes
+from __future__ import (absolute_import, division, print_function)
+
 import os
 
 from IndirectReductionCommon import load_files
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ISISIndirectEnergyTransfer.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ISISIndirectEnergyTransfer.py
index c5c2eb032ffa18a6b2bc1d5551b578623712ba8e..153f33d4a7cf7d4f3a4fa36e834ba7478d450100 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ISISIndirectEnergyTransfer.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ISISIndirectEnergyTransfer.py
@@ -1,4 +1,6 @@
 #pylint: disable=invalid-name,too-many-instance-attributes,too-many-branches,no-init,deprecated-module
+from __future__ import (absolute_import, division, print_function)
+
 from mantid.kernel import *
 from mantid.api import *
 from mantid.simpleapi import *
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectAnnulusAbsorption.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectAnnulusAbsorption.py
index 586b1496773e2b2ec9f7c74e1f0a47b765daacfa..7dc9b71b251008b9d131fae86d1192a0fd388c53 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectAnnulusAbsorption.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectAnnulusAbsorption.py
@@ -1,4 +1,6 @@
 #pylint: disable=no-init
+from __future__ import (absolute_import, division, print_function)
+
 from mantid.simpleapi import *
 from mantid.api import DataProcessorAlgorithm, AlgorithmFactory, MatrixWorkspaceProperty, PropertyMode, Progress, WorkspaceGroupProperty
 from mantid.kernel import StringMandatoryValidator, Direction, logger, IntBoundedValidator, FloatBoundedValidator
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectCalibration.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectCalibration.py
index f2b88755eb176d90e730a6afc5356189c6ce7e4e..12ef5208ae9e88652ef9e2ecc720fecf0a831c4b 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectCalibration.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectCalibration.py
@@ -1,4 +1,6 @@
 #pylint: disable=no-init,too-many-instance-attributes
+from __future__ import (absolute_import, division, print_function)
+
 from mantid.kernel import *
 from mantid.simpleapi import *
 from mantid.api import *
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectCylinderAbsorption.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectCylinderAbsorption.py
index 5647ca218043f1173b16cc592c8f6b26aae1184d..21113999927353752f9d1c071955278cb169ada5 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectCylinderAbsorption.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectCylinderAbsorption.py
@@ -1,4 +1,6 @@
 #pylint: disable=no-init
+from __future__ import (absolute_import, division, print_function)
+
 from mantid.simpleapi import *
 from mantid.api import DataProcessorAlgorithm, AlgorithmFactory, MatrixWorkspaceProperty, WorkspaceGroupProperty, PropertyMode, Progress
 from mantid.kernel import StringMandatoryValidator, Direction, logger, FloatBoundedValidator, IntBoundedValidator
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectFlatPlateAbsorption.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectFlatPlateAbsorption.py
index 8538c311c39673ae24239358703032e361d42667..c1cf5680f00fc2b71b88b946be37c051158f6554 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectFlatPlateAbsorption.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectFlatPlateAbsorption.py
@@ -1,4 +1,6 @@
 #pylint: disable=no-init,too-many-instance-attributes,too-many-branches
+from __future__ import (absolute_import, division, print_function)
+
 from mantid.simpleapi import *
 from mantid.api import DataProcessorAlgorithm, AlgorithmFactory, MatrixWorkspaceProperty, PropertyMode, Progress, WorkspaceGroupProperty
 from mantid.kernel import StringMandatoryValidator, Direction, logger, FloatBoundedValidator
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectILLReduction.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectILLReduction.py
index c16e587ed7884e8809648f9368650333c92634d6..e03107669c8a9ae8c3fe77c6d730f3f1690c3b22 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectILLReduction.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectILLReduction.py
@@ -1,4 +1,6 @@
 #pylint: disable=no-init,invalid-name
+from __future__ import (absolute_import, division, print_function)
+
 from mantid.simpleapi import *
 from mantid.kernel import StringListValidator, Direction
 from mantid.api import DataProcessorAlgorithm, PropertyMode, AlgorithmFactory, \
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectResolution.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectResolution.py
index 4c638174bc40557ca277d25c63043d4f1a8e7869..361aae4fe9004c000c47ed372472099bba0c5dcd 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectResolution.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectResolution.py
@@ -1,4 +1,6 @@
 #pylint: disable=no-init
+from __future__ import (absolute_import, division, print_function)
+
 from mantid.simpleapi import *
 from mantid.api import *
 from mantid.kernel import *
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectTransmissionMonitor.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectTransmissionMonitor.py
index 9ed1558df23cc580b92a1d6a450a4b05ce36d26b..e077ab884f299a4ca1b61ed8cf254979ecb737b9 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectTransmissionMonitor.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IndirectTransmissionMonitor.py
@@ -1,4 +1,6 @@
 #pylint: disable=no-init
+from __future__ import (absolute_import, division, print_function)
+
 from mantid.simpleapi import *
 from mantid.api import *
 from mantid.kernel import *
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IqtFitMultiple.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IqtFitMultiple.py
index e6f5ad95311f1772cd66d48de6d7398024829172..bf13c1e8f6e6fbb715ea71e2d6189b678aa7eca5 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IqtFitMultiple.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IqtFitMultiple.py
@@ -1,4 +1,6 @@
 #pylint: disable=no-init, too-many-instance-attributes
+from __future__ import (absolute_import, division, print_function)
+
 from mantid.api import (PythonAlgorithm, AlgorithmFactory, MatrixWorkspaceProperty,
                         ITableWorkspaceProperty, WorkspaceGroupProperty, Progress)
 from mantid.kernel import Direction, FloatBoundedValidator, IntBoundedValidator, logger
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IqtFitSequential.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IqtFitSequential.py
index 0be514fbc891ca0e5b7c9db3671fad35e54c270d..2f9dcd3694cf16c6cf0e2d3d863af5b59b8ea438 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IqtFitSequential.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/IqtFitSequential.py
@@ -1,4 +1,6 @@
 #pylint: disable=no-init, too-many-instance-attributes
+from __future__ import (absolute_import, division, print_function)
+
 from mantid import logger, AlgorithmFactory
 from mantid.api import *
 from mantid.kernel import *
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MolDyn.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MolDyn.py
index 25934fee21f7819e38a2548d077c3626286da994..f1bcd6a3b180edabbe24a4e6e4384ad9bbf9259d 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MolDyn.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MolDyn.py
@@ -1,4 +1,6 @@
 #pylint: disable=invalid-name,no-init
+from __future__ import (absolute_import, division, print_function)
+
 from mantid.simpleapi import *
 from mantid.kernel import *
 from mantid.api import *
@@ -45,7 +47,7 @@ class MolDyn(PythonAlgorithm):
 
         try:
             self._get_version_and_data_path()
-        except ValueError, vex:
+        except ValueError as vex:
             issues['Data'] = str(vex)
 
         res_ws = self.getPropertyValue('Resolution')
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MuscatData.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MuscatData.py
index 7ccb3b9ba0e9ce18048654f137b063ac69c448cb..edabfb2b848e731a82dd1dbfca748a23cd246823 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MuscatData.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MuscatData.py
@@ -1,5 +1,7 @@
 #pylint: disable=no-init
 # Algorithm to start Bayes programs
+from __future__ import (absolute_import, division, print_function)
+
 from mantid.api import PythonAlgorithm, AlgorithmFactory
 from mantid.kernel import StringListValidator, StringMandatoryValidator
 
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MuscatFunc.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MuscatFunc.py
index 39a0bff029baf616fa64f895d52dbac35f34d8f3..fa239274e423a7bef2f9f2945febbf7c22b7b63f 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MuscatFunc.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/MuscatFunc.py
@@ -1,5 +1,7 @@
 #pylint: disable=no-init,invalid-name
 # Algorithm to start Bayes programs
+from __future__ import (absolute_import, division, print_function)
+
 from mantid.kernel import StringListValidator, StringMandatoryValidator
 from mantid.api import PythonAlgorithm, AlgorithmFactory
 
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/NormaliseByThickness.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/NormaliseByThickness.py
index 9e595dcb0c3b474db2be51e57a05070dbf3fad0d..6c80779f190150dd3ca1780176143d03078fcef6 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/NormaliseByThickness.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/NormaliseByThickness.py
@@ -1,4 +1,6 @@
 #pylint: disable=no-init
+from __future__ import (absolute_import, division, print_function)
+
 import mantid.simpleapi as api
 from mantid.api import *
 from mantid.kernel import *
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ReactorSANSResolution.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ReactorSANSResolution.py
index cd6a5ceddbadf2e5b3741ef7e4edcbd3530ee9db..5c7b0231f183dc2af87642d530870774fea10e08 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ReactorSANSResolution.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/ReactorSANSResolution.py
@@ -69,8 +69,12 @@ class ReactorSANSResolution(PythonAlgorithm):
                                     (source_sample_distance*sample_detector_distance), 2)/4.0)
             res_factor += math.pow(k*pixel_size_x/sample_detector_distance, 2)/12.0
 
-            for i in range(len(input_ws.readX(0))):
-                input_ws.dataDx(0)[i] = math.sqrt(res_factor+math.pow((input_ws.readX(0)[i]*d_wvl), 2)/6.0)
+            for i in range(len(input_ws.readDx(0))):
+                if len(input_ws.readDx(0)) == len(input_ws.readX(0)):
+                    center = input_ws.readX(0)[i]
+                else:
+                    center = 0.5*(input_ws.readX(0)[i] + input_ws.readX(0)[i+1])
+                input_ws.dataDx(0)[i] = math.sqrt(res_factor+math.pow((center*d_wvl), 2)/6.0)
         else:
             raise RuntimeError("ReactorSANSResolution could not find all the run parameters needed to compute the resolution.")
 
diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSStitch.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSStitch.py
index 2b4501660cb12cf262d144a087137a1a79772c5d..c078a803e11a7885a861f82e71424333aef611a5 100644
--- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSStitch.py
+++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSStitch.py
@@ -359,21 +359,13 @@ class QErrorCorrectionForMergedWorkspaces(object):
         super(QErrorCorrectionForMergedWorkspaces, self).__init__()
 
     def _divide_q_resolution_by_counts(self, q_res, counts):
-        # We are dividing DX by Y. Note that len(DX) = len(Y) + 1
-        # Unfortunately, we need some knowlege about the Q1D algorithm here.
-        # The two last entries of DX are duplicate in Q1D and this is how we
-        # treat it here.
-        q_res_buffer = np.divide(q_res[0:-1], counts)
-        q_res_buffer = np.append(q_res_buffer, q_res_buffer[-1])
+        # We are dividing DX by Y.
+        q_res_buffer = np.divide(q_res, counts)
         return q_res_buffer
 
     def _multiply_q_resolution_by_counts(self, q_res, counts):
-        # We are dividing DX by Y. Note that len(DX) = len(Y) + 1
-        # Unfortunately, we need some knowlege about the Q1D algorithm here.
-        # The two last entries of DX are duplicate in Q1D and this is how we
-        # treat it here.
-        q_res_buffer = np.multiply(q_res[0:-1], counts)
-        q_res_buffer = np.append(q_res_buffer, q_res_buffer[-1])
+        # We are dividing DX by Y.
+        q_res_buffer = np.multiply(q_res, counts)
         return q_res_buffer
 
     def correct_q_resolution_for_merged(self, count_ws_front, count_ws_rear,
diff --git a/Framework/PythonInterface/test/python/plugins/algorithms/CMakeLists.txt b/Framework/PythonInterface/test/python/plugins/algorithms/CMakeLists.txt
index 0f5ede5030349dec539cd7efbdc7df351d9631b5..396ad95e277c0df823234518b444023f79060fda 100644
--- a/Framework/PythonInterface/test/python/plugins/algorithms/CMakeLists.txt
+++ b/Framework/PythonInterface/test/python/plugins/algorithms/CMakeLists.txt
@@ -66,6 +66,7 @@ set ( TEST_PY_FILES
   MaskAngleTest.py
   MaskBTPTest.py
   MaskWorkspaceToCalFileTest.py
+  MatchPeaksTest.py
   MeanTest.py
   MergeCalFilesTest.py
   MolDynTest.py
diff --git a/Framework/PythonInterface/test/python/plugins/algorithms/MatchPeaksTest.py b/Framework/PythonInterface/test/python/plugins/algorithms/MatchPeaksTest.py
new file mode 100644
index 0000000000000000000000000000000000000000..9db565271ee5511cd9649b542e76971b03a17b78
--- /dev/null
+++ b/Framework/PythonInterface/test/python/plugins/algorithms/MatchPeaksTest.py
@@ -0,0 +1,326 @@
+from __future__ import (absolute_import, division, print_function)
+
+import unittest
+from mantid.simpleapi import *
+from mantid.api import *
+import numpy as np
+from mantid.simpleapi import *
+from testhelpers import run_algorithm
+import sys
+
+
+class MatchPeaksTest(unittest.TestCase):
+
+    _args = {}
+
+    def setUp(self):
+
+        func0 = "name=Gaussian, PeakCentre=3.2, Height=10, Sigma=0.3"
+        func1 = "name=Gaussian, PeakCentre=6, Height=10, Sigma=0.3"
+        func2 = "name=Gaussian, PeakCentre=4, Height=10000, Sigma=0.01"
+
+        _input_ws_0 = 'spectrum0'  # Gaussian
+        _input_ws_1 = 'spectrum1'  # Gaussian outside tolerance interval
+        _input_ws_2 = 'spectrum2'  # Gaussian, too narrow peak
+        self._input_ws_3 = 'spectrum3'  # Flat background
+
+        self._ws_shift = 'to_be_shifted'
+
+        spectrum_0 = CreateSampleWorkspace(Function='User Defined',
+                                               WorkspaceType='Histogram',
+                                               UserDefinedFunction=func0,
+                                               NumBanks=1, BankPixelWidth=1,
+                                               XUnit='DeltaE', XMin=0, XMax=7, BinWidth=0.099,
+                                               OutputWorkspace=_input_ws_0)
+        spectrum_1 = CreateSampleWorkspace(Function='User Defined',
+                                           WorkspaceType='Histogram',
+                                           UserDefinedFunction=func1,
+                                           NumBanks=1, BankPixelWidth=1,
+                                           XUnit='DeltaE', XMin=0, XMax=7, BinWidth=0.099,
+                                           OutputWorkspace=_input_ws_1)
+        spectrum_2 = CreateSampleWorkspace(Function='User Defined',
+                                           WorkspaceType='Histogram',
+                                           UserDefinedFunction=func2,
+                                           NumBanks=1, BankPixelWidth=1,
+                                           XUnit='DeltaE', XMin=0, XMax=7, BinWidth=0.099,
+                                           OutputWorkspace=_input_ws_2)
+        spectrum_3 = CreateSampleWorkspace(Function='Flat background',
+                                           WorkspaceType='Histogram',
+                                           NumBanks=1, BankPixelWidth=1,
+                                           XUnit='DeltaE', XMin=0, XMax=7, BinWidth=0.099,
+                                           OutputWorkspace=self._input_ws_3)
+
+        AppendSpectra(InputWorkspace1=spectrum_0, InputWorkspace2=spectrum_1, OutputWorkspace=self._ws_shift)
+        AppendSpectra(InputWorkspace1=self._ws_shift, InputWorkspace2=spectrum_2, OutputWorkspace=self._ws_shift)
+        AppendSpectra(InputWorkspace1=self._ws_shift, InputWorkspace2=spectrum_3, OutputWorkspace=self._ws_shift)
+
+        # Input workspace 2
+        self._ws_in_2 = 'in_2'
+        func3 = "name=LinearBackground, A0=0.3; name=Gaussian, PeakCentre=4.2, Height=10, Sigma=0.3"
+        CreateSampleWorkspace(Function='User Defined',
+                              WorkspaceType='Histogram',
+                              UserDefinedFunction=func3,
+                              NumBanks=4, BankPixelWidth=1,
+                              XUnit='DeltaE', XMin=0, XMax=7, BinWidth=0.099,
+                              OutputWorkspace=self._ws_in_2)
+
+        # Input workspaces that are incompatible
+        self._in1 = 'wrong_number_of_histograms'
+        CreateSampleWorkspace(Function='Flat background',
+                              WorkspaceType='Histogram',
+                              NumBanks=1, BankPixelWidth=1,
+                              XUnit='DeltaE', XMin=0, XMax=7, BinWidth=0.1,
+                              OutputWorkspace=self._in1)
+        self._in2 = 'wrong_number_of_bins'
+        CreateSampleWorkspace(Function='Flat background',
+                              WorkspaceType='Histogram',
+                              NumBanks=4, BankPixelWidth=1,
+                              XUnit='DeltaE', XMin=0, XMax=8, BinWidth=0.1,
+                              OutputWorkspace=self._in2)
+
+
+        # mtd[self._ws_shift].blocksize() = 70
+        # mid = 35
+
+        # Details:
+        # workspace has peak positions at : [32 35(mid) 40 35(mid)]
+        # the corresponding Y-values are (rounded)  : [10 0 3.4 1.0]
+        #
+        # -> test shifting to the right and to the left
+        # -> test options to use FindEPP, maximum peak position or no shifting
+
+    def tearDown(self):
+        if AnalysisDataService.doesExist('to_be_shifted'):
+            DeleteWorkspace(self._ws_shift)
+        if AnalysisDataService.doesExist('in_2'):
+            DeleteWorkspace(self._ws_in_2 )
+        if AnalysisDataService.doesExist('output'):
+            DeleteWorkspace(mtd['output'])
+        if AnalysisDataService.doesExist('wrong_number_of_histograms'):
+            DeleteWorkspace(self._in1)
+        if AnalysisDataService.doesExist('wrong_number_of_bins'):
+            DeleteWorkspace(self._in2)
+
+    def testValidatorInput(self):
+        self._args['OutputWorkspace'] = 'output'
+        # Test if incompatible workspaces will fail
+        if sys.version_info >= (2, 7):
+            with self.assertRaises(RuntimeError):
+                self._args['InputWorkspace'] = self._in1
+                run_algorithm('MatchPeaks', **self._args)
+
+                self._args['InputWorkspace'] = self._in2
+                run_algorithm('MatchPeaks', **self._args)
+        else:
+            incompatible = False
+            try:
+                self._args['InputWorkspace'] = self._in1
+                run_algorithm('MatchPeaks', **self._args)
+
+                self._args['InputWorkspace'] = self._in2
+                run_algorithm('MatchPeaks', **self._args)
+            except RuntimeError:
+                incompatible = True
+            self.assertTrue(incompatible, "Workspaces are incompatible")
+
+        # Test if compatible workspaces will be accepted (size, X-values, E-values)
+        self._args['InputWorkspace'] = self._ws_shift
+        alg_test = run_algorithm('MatchPeaks', **self._args)
+        self.assertTrue(alg_test.isExecuted())
+        self._FindEPPtables_deleted
+
+    def testValidatorInput2(self):
+        self._args['InputWorkspace'] = self._ws_shift
+        self._args['OutputWorkspace'] = 'output'
+        # Test if incompatible workspaces will fail
+        if sys.version_info >= (2, 7):
+            with self.assertRaises(RuntimeError):
+                self._args['InputWorkspace2'] = self._in1
+                run_algorithm('MatchPeaks', **self._args)
+
+                self._args['InputWorkspace2'] = self._in2
+                run_algorithm('MatchPeaks', **self._args)
+        else:
+            incompatible = False
+            try:
+                self._args['InputWorkspace2'] = self._in1
+                run_algorithm('MatchPeaks', **self._args)
+
+                self._args['InputWorkspace2'] = self._in2
+                run_algorithm('MatchPeaks', **self._args)
+            except RuntimeError:
+                incompatible = True
+            self.assertTrue(incompatible, "Workspaces are incompatible")
+
+        # Test if compatible workspaces will be accepted (size, X-values, E-values)
+        self._args['InputWorkspace2'] = self._ws_in_2
+        alg_test = run_algorithm('MatchPeaks', **self._args)
+        self.assertTrue(alg_test.isExecuted())
+        self._FindEPPtables_deleted
+
+    def testMatchCenter(self):
+        # Input workspace should match its center
+        # Bin ranges of each spectrum:
+        # spectrum 0 : [(32-35), 70] => [3, 70]      right shift
+        # spectrum 1 : [0, 70]                       no shift
+        # spectrum 2 : [0, 70 - (40-35)] => [0, 65]  left shift
+        # spectrum 3 : [0, 70]                       no shift
+        # Final bin range is [3, 65-1]
+        self._args['InputWorkspace'] = self._ws_shift
+        self._args['OutputWorkspace'] = 'output'
+        alg_test = run_algorithm('MatchPeaks', **self._args)
+        self.assertTrue(alg_test.isExecuted())
+        shifted = AnalysisDataService.retrieve('output')
+        fit_table = FindEPP(shifted)
+        self.assertEqual(35, shifted.binIndexOf(fit_table.row(0)["PeakCentre"]))
+        self.assertEqual(35, np.argmax(shifted.readY(2)))
+        self._workspace_properties(shifted)
+        self._FindEPPtables_deleted
+        DeleteWorkspace(shifted)
+        DeleteWorkspace(fit_table)
+
+    def testBinRangeTable(self):
+        self._args['InputWorkspace'] = self._ws_shift
+        self._args['OutputWorkspace'] = 'output'
+        self._args['BinRangeTable'] = 'bin_range'
+        alg_test = run_algorithm('MatchPeaks', **self._args)
+        self.assertTrue(alg_test.isExecuted())
+        bin_range_table = AnalysisDataService.retrieve('bin_range')
+        # Size of the table and its column names
+        self.assertEqual(1, bin_range_table.rowCount())
+        self.assertEqual(2, bin_range_table.columnCount())
+        columns = ['MinBin', 'MaxBin']
+        self.assertEqual(columns, bin_range_table.getColumnNames())
+        # Bin range
+        self.assertEqual(3, bin_range_table.row(0)["MinBin"])
+        self.assertEqual(64, bin_range_table.row(0)["MaxBin"])
+        DeleteWorkspace(bin_range_table)
+        self._FindEPPtables_deleted
+
+    def testMasking(self):
+        self._args['InputWorkspace'] = self._ws_shift
+        self._args['OutputWorkspace'] = 'output'
+        self._args['MaskBins'] = True
+        alg_test = run_algorithm('MatchPeaks', **self._args)
+        self.assertTrue(alg_test.isExecuted())
+        masked = AnalysisDataService.retrieve('output')
+        for i in range(4):
+            for k in range(3):
+                self.assertEqual(0.0, masked.readY(i)[k], 'Mask spectrum {0} bin {1} failed'.format(i, k))
+            for k in range(65, 70):
+                self.assertEqual(0.0, masked.readY(i)[k], 'Mask spectrum {0} bin {1} failed'.format(i, k))
+        DeleteWorkspace(masked)
+        self._FindEPPtables_deleted
+
+    def testNoMasking(self):
+        self._args['InputWorkspace'] = self._ws_shift
+        self._args['OutputWorkspace'] = 'output'
+        self._args['MaskBins'] = False # this is the default behaviour
+        alg_test = run_algorithm('MatchPeaks', **self._args)
+        self.assertTrue(alg_test.isExecuted())
+        not_masked = AnalysisDataService.retrieve('output')
+        self.assertTrue(1.0, not_masked.readY(2)[0])
+        DeleteWorkspace(not_masked)
+
+    def testMatchInput2(self):
+        # Input workspace should match the peak of input workspace 2:
+        # has its peaks at bin 42
+        # shifts: 32-42 = -10 (right shift)
+        #         35-42 = -7  (right shift)
+        #         40-42 = -2  (right shift)
+        #         35-42 = -7  (right shift)
+        # new bin range [10, 70]
+        self._args['InputWorkspace'] = self._ws_shift
+        self._args['OutputWorkspace'] = 'output'
+        self._args['InputWorkspace2'] = self._ws_in_2
+        self._args['BinRangeTable'] = 'bin_range'
+        alg_test = run_algorithm('MatchPeaks', **self._args)
+        self.assertTrue(alg_test.isExecuted())
+        shifted = AnalysisDataService.retrieve('output')
+        bin_range_table = AnalysisDataService.retrieve('bin_range')
+        fit_table = FindEPP(shifted)
+        self.assertEqual(42, shifted.binIndexOf(fit_table.row(0)["PeakCentre"]))
+        self.assertEqual(42, np.argmax(shifted.readY(2)))
+        # Bin range
+        self.assertEqual(10, bin_range_table.row(0)["MinBin"])
+        self.assertEqual(70, bin_range_table.row(0)["MaxBin"])
+        self._workspace_properties(shifted)
+        self._FindEPPtables_deleted
+        DeleteWorkspace(shifted)
+        DeleteWorkspace(fit_table)
+        DeleteWorkspace(bin_range_table)
+
+    def testMatchInput2MatchOption(self):
+        # match option true:
+        #               left shifts
+        # spectrum 0:   35 - 35 = 0 (no shift)
+        # spectrum 1:   42 - 35 = 7 (left shift)
+        # spectrum 2:   42 - 35 = 7 (left shift)
+        # spectrum 3:   42 - 35 = 7 (left shift)
+        # new bin range [0, 70-7-1]
+        self._args['InputWorkspace'] = self._ws_shift
+        self._args['InputWorkspace2'] = self._ws_in_2
+        self._args['MatchInput2ToCenter'] = True
+        alg_test = run_algorithm('MatchPeaks', **self._args)
+        self.assertTrue(alg_test.isExecuted())
+        shifted = AnalysisDataService.retrieve('output')
+        bin_range_table = AnalysisDataService.retrieve('bin_range')
+        fit_table = FindEPP(shifted)
+        self.assertEqual(32-7, shifted.binIndexOf(fit_table.row(0)["PeakCentre"]))
+        self.assertEqual(40-7, np.argmax(shifted.readY(2)))
+        # Bin range
+        self.assertEqual(0, bin_range_table.row(0)["MinBin"])
+        self.assertEqual(62, bin_range_table.row(0)["MaxBin"])
+        self._workspace_properties(shifted)
+        self._FindEPPtables_deleted
+        DeleteWorkspace(shifted)
+        DeleteWorkspace(fit_table)
+        DeleteWorkspace(bin_range_table)
+
+    def testOverride(self):
+        self._args['InputWorkspace'] = self._ws_shift
+        self._args['OutputWorkspace'] = self._ws_shift
+        alg_test = run_algorithm('MatchPeaks', **self._args)
+        self.assertTrue(alg_test.isExecuted())
+        shifted = AnalysisDataService.retrieve('to_be_shifted')
+        self.assertFalse(np.all(mtd['to_be_shifted'].extractY() - shifted.extractY()))
+        self._FindEPPtables_deleted
+        DeleteWorkspace(shifted)
+
+    def _FindEPPtables_deleted(self):
+        if sys.version_info >= (2, 7):
+            with self.assertRaises(ValueError):
+                run_algorithm('DeleteWorkspace', Workspace='EPPfit_Parameters')
+            with self.assertRaises(ValueError):
+                run_algorithm('DeleteWorkspace', Workspace='EPPfit_NormalisedCovarianceMatrix')
+            with self.assertRaises(ValueError):
+                run_algorithm('DeleteWorkspace', Workspace='fit_table')
+        else:
+            deleted_fit_params = False
+            try:
+                run_algorithm('DeleteWorkspace', Workspace='EPPfit_Parameters')
+            except ValueError:
+                deleted_fit_params = True
+            self.assertTrue(deleted_fit_params, "Should raise a value error")
+
+            deleted_fit_matrix = False
+            try:
+                run_algorithm('DeleteWorkspace', Workspace='EPPfit_NormalisedCovarianceMatrix')
+            except ValueError:
+                deleted_fit_matrix = True
+            self.assertTrue(deleted_fit_matrix, "Should raise a value error")
+
+            deleted_fit_table = False
+            try:
+                run_algorithm('DeleteWorkspace', Workspace='fit_table')
+            except ValueError:
+                deleted_fit_table = True
+            self.assertTrue(deleted_fit_table, "Should raise a value error")
+
+    def _workspace_properties(self, test_ws):
+        self.assertTrue(isinstance(test_ws, MatrixWorkspace), "Should be a matrix workspace")
+        self.assertTrue(test_ws.getRun().getLogData(), "Should have SampleLogs")
+        self.assertTrue(test_ws.getHistory().lastAlgorithm(), "Should have AlgorithmsHistory")
+
+if __name__=="__main__":
+    unittest.main()
diff --git a/Framework/PythonInterface/test/python/plugins/algorithms/SANSStitchTest.py b/Framework/PythonInterface/test/python/plugins/algorithms/SANSStitchTest.py
index 8c7f2250e99bb7ab0aa64cf8d08afb1dd28476bf..19a7b41c6b4259060acde99610d735ff4a4fddfa 100644
--- a/Framework/PythonInterface/test/python/plugins/algorithms/SANSStitchTest.py
+++ b/Framework/PythonInterface/test/python/plugins/algorithms/SANSStitchTest.py
@@ -419,7 +419,7 @@ class SANSStitchTest(unittest.TestCase):
 class TestQErrorCorrectionForMergedWorkspaces(unittest.TestCase):
     def _provide_workspace_with_x_errors(self, workspace_name, use_xerror = True, nspec = 1,
                                          x_in = [1,2,3,4,5,6,7,8,9,10], y_in = [2,2,2,2,2,2,2,2,2],
-                                         e_in = [1,1,1,1,1,1,1,1,1],  x_error = [1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9, 10.1]):
+                                         e_in = [1,1,1,1,1,1,1,1,1],  x_error = [1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9]):
         x = []
         y = []
         e = []
@@ -484,11 +484,11 @@ class TestQErrorCorrectionForMergedWorkspaces(unittest.TestCase):
         x1 = [1,2,3]
         e1 = [1,1]
         y1 = [2,2]
-        dx1 = [1.,2.,3.]
+        dx1 = [1.,2.]
         x2 = [1,2,3,4]
         e2 = [1,1, 1]
         y2 = [2,2, 2]
-        dx2 = [1.,2.,3.,4.]
+        dx2 = [1.,2.,3.]
         front = self._provide_workspace_with_x_errors(front_name, True, 1, x1, y1, e1, dx1)
         rear = self._provide_workspace_with_x_errors(rear_name, True, 1, x2, y2, e2, dx2)
         result = self._provide_workspace_with_x_errors(result_name, False, 1)
@@ -504,9 +504,9 @@ class TestQErrorCorrectionForMergedWorkspaces(unittest.TestCase):
         x = [1,2,3]
         e = [1,1]
         y_front = [2,2]
-        dx_front = [1.,2.,3.]
+        dx_front = [1.,2.]
         y_rear = [1.5,1.5]
-        dx_rear = [3.,2.,1.]
+        dx_rear = [3.,2.]
         front_name = "front"
         rear_name = "rear"
         result_name = "result"
@@ -522,12 +522,10 @@ class TestQErrorCorrectionForMergedWorkspaces(unittest.TestCase):
 
         dx_expected_0 = (dx_front[0]*y_front[0]*scale + dx_rear[0]*y_rear[0])/(y_front[0]*scale + y_rear[0])
         dx_expected_1 = (dx_front[1]*y_front[1]*scale + dx_rear[1]*y_rear[1])/(y_front[1]*scale + y_rear[1])
-        dx_expected_2 = dx_expected_1
         dx_result = result.readDx(0)
-        self.assertTrue(len(dx_result) == 3)
+        self.assertTrue(len(dx_result) == 2)
         self.assertEqual(dx_result[0], dx_expected_0)
         self.assertEqual(dx_result[1], dx_expected_1)
-        self.assertEqual(dx_result[2], dx_expected_2)
 
 
 if __name__ == '__main__':
diff --git a/Framework/PythonInterface/test/python/plugins/algorithms/SelectNexusFilesByMetadataTest.py b/Framework/PythonInterface/test/python/plugins/algorithms/SelectNexusFilesByMetadataTest.py
index fb713deb3810ca306079e168c6bd2e698d13899e..fb86bcc3c0767adff70bdb18546c4e1b46ba288d 100644
--- a/Framework/PythonInterface/test/python/plugins/algorithms/SelectNexusFilesByMetadataTest.py
+++ b/Framework/PythonInterface/test/python/plugins/algorithms/SelectNexusFilesByMetadataTest.py
@@ -7,6 +7,7 @@ from mantid.simpleapi import *
 class SelectNexusFilesByMetadataTest(unittest.TestCase):
 
     _fileslist = 'INTER00013460,13463,13464.nxs'
+    _sumfileslist = 'INTER00013460+13463+13464.nxs'
 
     def test_happy_case(self):
 
@@ -17,6 +18,14 @@ class SelectNexusFilesByMetadataTest(unittest.TestCase):
         self.assertTrue(outfiles[0].endswith('INTER00013460.nxs'),'Should be first file name')
         self.assertTrue(outfiles[1].endswith('INTER00013464.nxs'),'Should be second file name')
 
+    def test_sum(self):
+        criteria = '$raw_data_1/duration$ > 1000 or $raw_data_1/good_frames$ > 10000'
+        res = SelectNexusFilesByMetadata(FileList=self._sumfileslist, NexusCriteria=criteria)
+        outfiles = res.split('+')
+        self.assertEqual(len(outfiles), 2, "Only 1st and 3rd files satisfy.")
+        self.assertTrue(outfiles[0].endswith('INTER00013460.nxs'), 'Should be first file name')
+        self.assertTrue(outfiles[1].endswith('INTER00013464.nxs'), 'Should be second file name')
+
     def test_invalid_syntax(self):
 
         criteria = '$raw_data_1/duration$ += 1000'
diff --git a/Framework/SINQ/inc/MantidSINQ/PoldiUtilities/PoldiSpectrumDomainFunction.h b/Framework/SINQ/inc/MantidSINQ/PoldiUtilities/PoldiSpectrumDomainFunction.h
index d355befc0e84bbc5d439ab40487271b3a1af09e4..2462388f2261513d9c329a430acad0a3f937dac2 100644
--- a/Framework/SINQ/inc/MantidSINQ/PoldiUtilities/PoldiSpectrumDomainFunction.h
+++ b/Framework/SINQ/inc/MantidSINQ/PoldiUtilities/PoldiSpectrumDomainFunction.h
@@ -116,6 +116,8 @@ public:
                                   value * m_factors[m_factorOffset + iY]);
   }
 
+  void zero() override { m_jacobian.zero(); }
+
 protected:
   API::Jacobian &m_jacobian;
   size_t m_offset;
@@ -154,6 +156,9 @@ public:
     return m_jacobian[safeIndex(iY, iP)];
   }
 
+  /// Implements API::Jacobian::zero
+  void zero() override { m_jacobian.assign(m_jacobian.size(), 0.0); }
+
   /// Provides raw pointer access to the underlying std::vector. Required for
   /// adept-interface.
   double *rawValues() { return &m_jacobian[0]; }
diff --git a/Framework/TestHelpers/src/MultiDomainFunctionHelper.cpp b/Framework/TestHelpers/src/MultiDomainFunctionHelper.cpp
index 4c83948e142dfad604a5ecfd45318c11315dc5fe..a9cdf7b934bc074a5500c2824acb2791a501c723 100644
--- a/Framework/TestHelpers/src/MultiDomainFunctionHelper.cpp
+++ b/Framework/TestHelpers/src/MultiDomainFunctionHelper.cpp
@@ -8,6 +8,7 @@ MultiDomainFunctionTest_Function::MultiDomainFunctionTest_Function()
     : Mantid::API::IFunction1D(), Mantid::API::ParamFunction() {
   this->declareParameter("A", 0);
   this->declareParameter("B", 0);
+  this->declareAttribute("Order", Attribute(1));
 }
 
 void MultiDomainFunctionTest_Function::function1D(double *out,
@@ -15,18 +16,46 @@ void MultiDomainFunctionTest_Function::function1D(double *out,
                                                   const size_t nData) const {
   const double A = getParameter(0);
   const double B = getParameter(1);
+  const int order = getAttribute("Order").asInt();
 
   for (size_t i = 0; i < nData; ++i) {
     double x = xValues[i];
-    out[i] = A + B * x;
+    switch (order) {
+    case 1:
+      out[i] = A + B * x;
+      break;
+    case 3:
+      out[i] = (A + B * x) * pow(x, 2);
+      break;
+    case 5:
+      out[i] = (A + B * x) * pow(x, 4);
+      break;
+    default:
+      throw std::runtime_error("Unknown attribute value.");
+    };
   }
 }
 void MultiDomainFunctionTest_Function::functionDeriv1D(
     Mantid::API::Jacobian *out, const double *xValues, const size_t nData) {
+  const int order = getAttribute("Order").asInt();
   for (size_t i = 0; i < nData; ++i) {
     double x = xValues[i];
-    out->set(i, 1, x);
-    out->set(i, 0, 1.0);
+    switch (order) {
+    case 1:
+      out->set(i, 0, 1.0);
+      out->set(i, 1, x);
+      break;
+    case 3:
+      out->set(i, 0, pow(x, 2));
+      out->set(i, 1, pow(x, 3));
+      break;
+    case 5:
+      out->set(i, 0, pow(x, 4));
+      out->set(i, 1, pow(x, 5));
+      break;
+    default:
+      throw std::runtime_error("Unknown attribute value.");
+    };
   }
 }
 
@@ -46,13 +75,8 @@ boost::shared_ptr<Mantid::API::MultiDomainFunction> makeMultiDomainFunction3() {
   multi->getFunction(2)->setParameter("B", 0);
 
   multi->clearDomainIndices();
-  std::vector<size_t> ii(2);
-  ii[0] = 0;
-  ii[1] = 1;
-  multi->setDomainIndices(1, ii);
-  ii[0] = 0;
-  ii[1] = 2;
-  multi->setDomainIndices(2, ii);
+  multi->setDomainIndices(1, {0, 1});
+  multi->setDomainIndices(2, {0, 2});
 
   return multi;
 }
@@ -69,19 +93,23 @@ boost::shared_ptr<Mantid::API::JointDomain> makeMultiDomainDomain3() {
   return domain;
 }
 
-const double A0 = 0, A1 = 1, A2 = 2;
-const double B0 = 1, B1 = 2, B2 = 3;
+const double A0 = 0.5, A1 = -4, A2 = 4;
+const double B0 = 5, B1 = -20, B2 = 16;
+const size_t nbins = 10;
+const double dX = 0.2;
 
 Mantid::API::MatrixWorkspace_sptr makeMultiDomainWorkspace1() {
   Mantid::API::MatrixWorkspace_sptr ws1 = boost::make_shared<WorkspaceTester>();
-  ws1->initialize(1, 10, 10);
+  ws1->initialize(1, nbins, nbins);
   {
     Mantid::MantidVec &x = ws1->dataX(0);
     Mantid::MantidVec &y = ws1->dataY(0);
     // Mantid::MantidVec& e = ws1->dataE(0);
     for (size_t i = 0; i < ws1->blocksize(); ++i) {
-      x[i] = 0.1 * double(i);
-      y[i] = A0 + A1 + A2 + (B0 + B1 + B2) * x[i];
+      x[i] = -1.0 + dX * double(i);
+      const double t = x[i];
+      y[i] =
+          A0 + B0 * t + (A1 + B1 * t) * pow(t, 2) + (A2 + B2 * t) * pow(t, 4);
     }
   }
 
@@ -90,14 +118,15 @@ Mantid::API::MatrixWorkspace_sptr makeMultiDomainWorkspace1() {
 
 Mantid::API::MatrixWorkspace_sptr makeMultiDomainWorkspace2() {
   Mantid::API::MatrixWorkspace_sptr ws2 = boost::make_shared<WorkspaceTester>();
-  ws2->initialize(1, 10, 10);
+  ws2->initialize(1, nbins, nbins);
   {
     Mantid::MantidVec &x = ws2->dataX(0);
     Mantid::MantidVec &y = ws2->dataY(0);
     // Mantid::MantidVec& e = ws2->dataE(0);
     for (size_t i = 0; i < ws2->blocksize(); ++i) {
-      x[i] = 1 + 0.1 * double(i);
-      y[i] = A0 + A1 + (B0 + B1) * x[i];
+      x[i] = -1.0 + dX * double(i);
+      const double t = x[i];
+      y[i] = A0 + B0 * t + (A1 + B1 * t) * pow(t, 2);
     }
   }
 
@@ -106,14 +135,15 @@ Mantid::API::MatrixWorkspace_sptr makeMultiDomainWorkspace2() {
 
 Mantid::API::MatrixWorkspace_sptr makeMultiDomainWorkspace3() {
   Mantid::API::MatrixWorkspace_sptr ws3 = boost::make_shared<WorkspaceTester>();
-  ws3->initialize(1, 10, 10);
+  ws3->initialize(1, nbins, nbins);
   {
     Mantid::MantidVec &x = ws3->dataX(0);
     Mantid::MantidVec &y = ws3->dataY(0);
     // Mantid::MantidVec& e = ws3->dataE(0);
     for (size_t i = 0; i < ws3->blocksize(); ++i) {
-      x[i] = 2 + 0.1 * double(i);
-      y[i] = A0 + A2 + (B0 + B2) * x[i];
+      x[i] = -1.0 + dX * double(i);
+      const double t = x[i];
+      y[i] = A0 + B0 * t + (A2 + B2 * t) * pow(t, 4);
     }
   }
 
diff --git a/Framework/TestHelpers/src/WorkspaceCreationHelper.cpp b/Framework/TestHelpers/src/WorkspaceCreationHelper.cpp
index 4b427d045f710135cd3767c3780c7b3b8a5f06a0..d87e19c542e2cd0211108231f27378f4b72d9b42 100644
--- a/Framework/TestHelpers/src/WorkspaceCreationHelper.cpp
+++ b/Framework/TestHelpers/src/WorkspaceCreationHelper.cpp
@@ -43,13 +43,9 @@ using namespace Mantid::DataObjects;
 using namespace Mantid::Kernel;
 using namespace Mantid::API;
 using namespace Mantid::Geometry;
+using namespace Mantid::HistogramData;
 using Mantid::MantidVec;
 using Mantid::MantidVecPtr;
-using HistogramData::BinEdges;
-using HistogramData::Counts;
-using HistogramData::CountStandardDeviations;
-using HistogramData::HistogramX;
-using HistogramData::LinearGenerator;
 
 MockAlgorithm::MockAlgorithm(size_t nSteps) {
   m_Progress = Mantid::Kernel::make_unique<API::Progress>(this, 0, 1, nSteps);
@@ -181,10 +177,9 @@ Workspace2D_sptr Create2DWorkspaceWithValuesAndXerror(
     const std::set<int64_t> &maskedWorkspaceIndices) {
   auto ws = Create2DWorkspaceWithValues(
       nHist, nBins, isHist, maskedWorkspaceIndices, xVal, yVal, eVal);
-  auto dx1 = Kernel::make_cow<HistogramData::HistogramDx>(
-      isHist ? nBins + 1 : nBins, dxVal);
+  PointStandardDeviations dx1(nBins, dxVal);
   for (int i = 0; i < nHist; i++) {
-    ws->setSharedDx(i, dx1);
+    ws->setPointStandardDeviations(i, dx1);
   }
   return ws;
 }
diff --git a/MantidPlot/src/ApplicationWindow.cpp b/MantidPlot/src/ApplicationWindow.cpp
index 91a5dc873efce2fcd3430601e4cb619502eff26b..bcefa621093fee511301dde50b0c29c15de2fbaf 100644
--- a/MantidPlot/src/ApplicationWindow.cpp
+++ b/MantidPlot/src/ApplicationWindow.cpp
@@ -316,6 +316,19 @@ void ApplicationWindow::handleConfigDir() {
   }
 #endif
 }
+/**
+ * Cache the working directory in the QSettings.
+ *
+ * store the working directory in the settings so it may be accessed
+ * elsewhere in the Qt layer.
+ *
+ */
+void ApplicationWindow::cacheWorkingDirectory() const {
+  QSettings settings;
+  settings.beginGroup("/Project");
+  settings.setValue("/WorkingDirectory", workingDir);
+  settings.endGroup();
+}
 
 /**
  * Calls QCoreApplication::exit(m_exitCode)
@@ -4573,13 +4586,7 @@ void ApplicationWindow::openRecentProject(QAction *action) {
     // Have to change the working directory here because that is used when
     // finding the nexus files to load
     workingDir = QFileInfo(f).absolutePath();
-
-    // store the working directory in the settings so it may be accessed
-    // elsewhere in the Qt layer.
-    QSettings settings;
-    settings.beginGroup("/Project");
-    settings.setValue("/WorkingDirectory", workingDir);
-    settings.endGroup();
+    cacheWorkingDirectory();
 
     ApplicationWindow *a = open(fn, false, false);
     if (a && (fn.endsWith(".qti", Qt::CaseInsensitive) ||
@@ -4615,13 +4622,7 @@ ApplicationWindow *ApplicationWindow::openProject(const QString &filename,
   newProject();
   m_mantidmatrixWindows.clear();
 
-  // store the working directory in the settings so it may be accessed
-  // elsewhere in the Qt layer.
-  QSettings settings;
-  settings.beginGroup("/Project");
-  settings.setValue("/WorkingDirectory", workingDir);
-  settings.endGroup();
-
+  cacheWorkingDirectory();
   projectname = filename;
   setWindowTitle("MantidPlot - " + filename);
 
@@ -6117,6 +6118,7 @@ void ApplicationWindow::saveProjectAs(const QString &fileName, bool compress) {
       }
 
       workingDir = directory.absolutePath();
+      cacheWorkingDirectory();
       QString projectFileName = directory.dirName();
       projectFileName.append(".mantid");
       projectname = directory.absoluteFilePath(projectFileName);
diff --git a/MantidPlot/src/ApplicationWindow.h b/MantidPlot/src/ApplicationWindow.h
index aae10ba6f76d582c5f986cf5a1d6fff38580c8ca..1d12c1fa4580af3c7806fab0800e8152b334d4f3 100644
--- a/MantidPlot/src/ApplicationWindow.h
+++ b/MantidPlot/src/ApplicationWindow.h
@@ -1133,6 +1133,8 @@ private:
   bool shouldExecuteAndQuit(const QString &arg);
   bool isSilentStartup(const QString &arg);
   void handleConfigDir();
+  /// Save the working directory to QSettings
+  void cacheWorkingDirectory() const;
 
 private slots:
   //! \name Initialization
diff --git a/MantidPlot/src/ConfigDialog.cpp b/MantidPlot/src/ConfigDialog.cpp
index 1c1cd93b06dda87c46e14e19b3a1de719909a49e..f4ee8bb25c7ce63bec7cb773f8f50564a1dae39f 100644
--- a/MantidPlot/src/ConfigDialog.cpp
+++ b/MantidPlot/src/ConfigDialog.cpp
@@ -2821,8 +2821,19 @@ void ConfigDialog::updateMantidOptionsTab() {
 
   // invisible workspaces options
   QString showinvisible_ws = m_invisibleWorkspaces->isChecked() ? "1" : "0";
-  cfgSvc.setString("MantidOptions.InvisibleWorkspaces",
-                   showinvisible_ws.toStdString());
+
+  // store it if it has changed
+  if (showinvisible_ws.toStdString() !=
+      cfgSvc.getString("MantidOptions.InvisibleWorkspaces")) {
+    cfgSvc.setString("MantidOptions.InvisibleWorkspaces",
+                     showinvisible_ws.toStdString());
+
+    // update the workspace tree
+    if (ApplicationWindow *app =
+            dynamic_cast<ApplicationWindow *>(this->parentWidget())) {
+      app->mantidUI->updateWorkspaces();
+    }
+  }
 
   // OpenGL option
   QString setting = m_useOpenGL->isChecked() ? "On" : "Off";
diff --git a/MantidPlot/src/Graph.cpp b/MantidPlot/src/Graph.cpp
index 7651e6317f7229a50c2533509ec92473046ecc06..0e1958960ee51a8e86e9654f58111afccf107d46 100644
--- a/MantidPlot/src/Graph.cpp
+++ b/MantidPlot/src/Graph.cpp
@@ -6197,6 +6197,9 @@ void Graph::loadFromProject(const std::string &lines, ApplicationWindow *app,
         * to the graph for us, and then loading the settings into the
         * spectrogram.
         */
+      if (!s)
+        continue;
+
       plotSpectrogram(s, Graph::ColorMap);
       s->loadFromProject(*it);
       curveID++;
diff --git a/MantidPlot/src/Graph3D.cpp b/MantidPlot/src/Graph3D.cpp
index dcd51a3ceb280d7c695177a9ecbe34f71551158c..9c9950f09b4642d366b3453c81ef27f80327c31b 100644
--- a/MantidPlot/src/Graph3D.cpp
+++ b/MantidPlot/src/Graph3D.cpp
@@ -30,32 +30,32 @@
 #include "ApplicationWindow.h"
 #include "Bar.h"
 #include "Cone3D.h"
-#include "MyParser.h"
 #include "Mantid/MantidMatrix.h"
 #include "Mantid/MantidMatrixFunction.h"
-#include "MantidQtAPI/PlotAxis.h"
 #include "MantidAPI/MatrixWorkspace.h"
+#include "MantidQtAPI/PlotAxis.h"
 #include "MatrixModel.h"
+#include "MyParser.h"
 #include "UserFunction.h" //Mantid
 
 #include "MantidQtAPI/TSVSerialiser.h"
 
 #include <QApplication>
-#include <QMessageBox>
-#include <QFileDialog>
-#include <QPrinter>
-#include <QPrintDialog>
-#include <QClipboard>
-#include <QPixmap>
 #include <QBitmap>
+#include <QClipboard>
 #include <QCursor>
+#include <QFileDialog>
 #include <QImageWriter>
+#include <QMessageBox>
+#include <QPixmap>
+#include <QPrintDialog>
+#include <QPrinter>
 
-#include <qwt3d_io_gl2ps.h>
 #include <qwt3d_coordsys.h>
+#include <qwt3d_io_gl2ps.h>
 
-#include <gsl/gsl_vector.h>
 #include <fstream>
+#include <gsl/gsl_vector.h>
 
 // Register the window into the WindowFactory
 DECLARE_WINDOW(Graph3D)
@@ -2869,7 +2869,9 @@ int Graph3D::read3DPlotStyle(MantidQt::API::TSVSerialiser &tsv) {
 
 Graph3D::SurfaceFunctionParams
 Graph3D::readSurfaceFunction(MantidQt::API::TSVSerialiser &tsv) {
-  SurfaceFunctionParams params;
+  // We cant use {0} to zero initialise as GCC incorrectly thinks
+  // the members are still uninitialised
+  SurfaceFunctionParams params = SurfaceFunctionParams();
   tsv >> params.formula;
   params.type = readSurfaceFunctionType(params.formula);
 
diff --git a/MantidPlot/src/Mantid/MantidDock.cpp b/MantidPlot/src/Mantid/MantidDock.cpp
index 1ee005d0854ea7778a288b6fd68f0b94067e7525..94a0c75ff06cf483389b40f68b74c1cd266e4334 100644
--- a/MantidPlot/src/Mantid/MantidDock.cpp
+++ b/MantidPlot/src/Mantid/MantidDock.cpp
@@ -10,6 +10,8 @@
 
 #include <MantidAPI/FileProperty.h>
 #include "MantidAPI/IMDEventWorkspace.h"
+#include "MantidAPI/IMDHistoWorkspace.h"
+
 #include "MantidAPI/IPeaksWorkspace.h"
 #include "MantidAPI/MatrixWorkspace.h"
 #include "MantidAPI/WorkspaceGroup.h"
@@ -136,8 +138,8 @@ MantidDockWidget::MantidDockWidget(MantidUI *mui, ApplicationWindow *parent)
           Qt::DirectConnection);
   // this slot is called when the GUI thread is free. decrement the counter. do
   // nothing until the counter == 0
-  connect(m_mantidUI, SIGNAL(ADS_updated()), this, SLOT(updateTree()),
-          Qt::QueuedConnection);
+  connect(m_mantidUI, SIGNAL(ADS_updated()), this,
+          SLOT(updateTreeOnADSUpdate()), Qt::QueuedConnection);
 
   connect(m_mantidUI, SIGNAL(workspaces_cleared()), m_tree, SLOT(clear()),
           Qt::QueuedConnection);
@@ -398,15 +400,18 @@ void MantidDockWidget::setItemIcon(QTreeWidgetItem *item,
   }
 }
 
+void MantidDockWidget::updateTreeOnADSUpdate() {
+  // do not update until the counter is zero
+  if (m_updateCount.deref())
+    return;
+  updateTree();
+}
+
 /**
 * Update the workspace tree to match the current state of the ADS.
 * It is important that the workspace tree is modified only by this method.
 */
 void MantidDockWidget::updateTree() {
-  // do not update until the counter is zero
-  if (m_updateCount.deref())
-    return;
-
   // find all expanded top-level entries
   QStringList expanded;
   int n = m_tree->topLevelItemCount();
@@ -928,28 +933,43 @@ void MantidDockWidget::saveWorkspacesToFolder(const QString &folder) {
  * most recent version.
  */
 void MantidDockWidget::handleShowSaveAlgorithm() {
-  QAction *sendingAction = dynamic_cast<QAction *>(sender());
+  const QAction *sendingAction = dynamic_cast<QAction *>(sender());
 
   if (sendingAction) {
-    QString wsName = getSelectedWorkspaceName();
-    QVariant data = sendingAction->data();
+    const auto inputWorkspace = getSelectedWorkspace();
+    const QString wsName = QString::fromStdString(inputWorkspace->getName());
+    const QVariant data = sendingAction->data();
 
     if (data.canConvert<QString>()) {
       QString algorithmName;
       int version = -1;
 
-      QStringList splitData = data.toString().split(".");
-      switch (splitData.length()) {
-      case 2:
-        version = splitData[1].toInt();
-      case 1:
-        algorithmName = splitData[0];
-        break;
-      default:
-        m_mantidUI->saveNexusWorkspace();
-        return;
-      }
+      // Check if workspace is MD, this is the same check used in
+      // SaveNexusProcessed.cpp in the doExec()
+      if (bool(boost::dynamic_pointer_cast<const IMDEventWorkspace>(
+              inputWorkspace)) ||
+          bool(boost::dynamic_pointer_cast<const IMDHistoWorkspace>(
+              inputWorkspace))) {
+        // This will also be executed if the user clicks Save to ASCII or ASCII
+        // v1, therefore overwriting their choice and running
+        // SaveMD. SaveASCII doesn't support MD Workspaces, but if an issue,
+        // move the MD check to case 1: below
+        algorithmName = "SaveMD";
 
+      } else {
+        QStringList splitData = data.toString().split(".");
+        switch (splitData.length()) {
+        case 2:
+          version = splitData[1].toInt();
+        // intentional fall through to get algorithm name
+        case 1:
+          algorithmName = splitData[0];
+          break;
+        default:
+          m_mantidUI->saveNexusWorkspace();
+          return;
+        }
+      }
       QHash<QString, QString> presets;
       if (!wsName.isEmpty())
         presets["InputWorkspace"] = wsName;
diff --git a/MantidPlot/src/Mantid/MantidDock.h b/MantidPlot/src/Mantid/MantidDock.h
index cd2feae62b5fcc2af2cc90ab7040d19c3f471570..2a566e46762fdd53ade8f12711b9394f4017dfcc 100644
--- a/MantidPlot/src/Mantid/MantidDock.h
+++ b/MantidPlot/src/Mantid/MantidDock.h
@@ -81,7 +81,7 @@ private slots:
   void showDetectorTable();
   void convertToMatrixWorkspace();
   void convertMDHistoToMatrixWorkspace();
-  void updateTree();
+  void updateTreeOnADSUpdate();
   void incrementUpdateCount();
   void recordWorkspaceRename(QString, QString);
   void clearUB();
@@ -93,6 +93,7 @@ private:
   void addSaveMenuOption(QString algorithmString, QString menuEntryName = "");
   void setTreeUpdating(const bool state);
   inline bool isTreeUpdating() const { return m_treeUpdating; }
+  void updateTree();
   void populateTopLevel(
       const std::map<std::string, Mantid::API::Workspace_sptr> &topLevelItems,
       const QStringList &expanded);
diff --git a/MantidPlot/src/Mantid/MantidMatrix.cpp b/MantidPlot/src/Mantid/MantidMatrix.cpp
index 293abe361ef90ff534f07ae1e0f69b4b9e0cd715..0899f9cc2c45b8a10df82c2ce3baf6afdebef48f 100644
--- a/MantidPlot/src/Mantid/MantidMatrix.cpp
+++ b/MantidPlot/src/Mantid/MantidMatrix.cpp
@@ -25,8 +25,8 @@
 #include <stdlib.h>
 #include <algorithm>
 #include <limits>
+#include <cmath>
 
-#include <boost/math/special_functions/fpclassify.hpp>
 using namespace Mantid;
 using namespace Mantid::API;
 using namespace Mantid::Kernel;
@@ -208,11 +208,6 @@ void MantidMatrix::viewChanged(int index) {
   }
 }
 
-/// Checks if d is not infinity or a NaN
-bool isANumber(volatile const double &d) {
-  return d != std::numeric_limits<double>::infinity() && !boost::math::isnan(d);
-}
-
 void MantidMatrix::setup(Mantid::API::MatrixWorkspace_const_sptr ws, int start,
                          int end) {
   if (!ws) {
@@ -590,7 +585,7 @@ QwtDoubleRect MantidMatrix::boundingRect() {
         x_end = X[m_workspace->blocksize()];
       else
         x_end = X[m_workspace->blocksize() - 1];
-      if (!isANumber(x_start) || !isANumber(x_end)) {
+      if (!std::isfinite(x_start) || !std::isfinite(x_end)) {
         x_start = x_end = 0;
       }
       i0++;
@@ -619,13 +614,13 @@ QwtDoubleRect MantidMatrix::boundingRect() {
           const Mantid::MantidVec &X = m_workspace->readX(i);
           if (X.front() < x_start) {
             double xs = X.front();
-            if (!isANumber(xs))
+            if (!std::isfinite(xs))
               continue;
             x_start = xs;
           }
           if (X.back() > x_end) {
             double xe = X.back();
-            if (!isANumber(xe))
+            if (!std::isfinite(xe))
               continue;
             x_end = xe;
           }
@@ -1151,7 +1146,7 @@ void findYRange(MatrixWorkspace_const_sptr ws, double &miny, double &maxy) {
 
       for (size_t i = 0; i < Y.size(); i++) {
         double aux = Y[i];
-        if (fabs(aux) == std::numeric_limits<double>::infinity() || aux != aux)
+        if (!std::isfinite(aux))
           continue;
         if (aux < local_min)
           local_min = aux;
diff --git a/MantidPlot/src/Mantid/MantidUI.cpp b/MantidPlot/src/Mantid/MantidUI.cpp
index 308b9842f9e71cdda8b5d355f477a3972d58dadf..7c5aeb85a462751f9caa93d39b36fd5a9473f4da 100644
--- a/MantidPlot/src/Mantid/MantidUI.cpp
+++ b/MantidPlot/src/Mantid/MantidUI.cpp
@@ -130,6 +130,42 @@ bool drawXAxisLabel(const int row, const int col, const int nRows,
     return false;
   }
 }
+
+/// Spectra names for a fit results workspace
+const std::vector<std::string> FIT_RESULTS_SPECTRA_NAMES{"Data", "Calc",
+                                                         "Diff"};
+
+/// Decide whether the named workspace is the results from a fit
+/// (will have 3 spectra called "Data", "Calc" and "Diff")
+bool workspaceIsFitResult(const QString &wsName) {
+  bool isFit = false;
+  const auto &ws = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(
+      wsName.toStdString());
+  if (ws) {
+    if (FIT_RESULTS_SPECTRA_NAMES.size() == ws->getNumberHistograms()) {
+      std::vector<std::string> spectraNames;
+      const auto specAxis = ws->getAxis(1); // y
+      for (size_t iSpec = 0; iSpec < FIT_RESULTS_SPECTRA_NAMES.size();
+           ++iSpec) {
+        spectraNames.push_back(specAxis->label(iSpec));
+      }
+      isFit = spectraNames == FIT_RESULTS_SPECTRA_NAMES;
+    }
+  }
+  return isFit;
+}
+
+/// Return curve type for spectrum of a set of fit results
+Graph::CurveType getCurveTypeForFitResult(const size_t spectrum) {
+  switch (spectrum) {
+  case 0:
+    return Graph::CurveType::LineSymbols;
+  case 1:
+    return Graph::CurveType::Line;
+  default:
+    return Graph::CurveType::Unspecified;
+  }
+}
 }
 
 MantidUI::MantidUI(ApplicationWindow *aw)
@@ -296,6 +332,9 @@ void MantidUI::x_range_from_picker(double xmin, double xmax) {
 /// Updates the algorithms tree as this may have changed
 void MantidUI::updateAlgorithms() { m_exploreAlgorithms->update(); }
 
+/// Updates the workspace tree
+void MantidUI::updateWorkspaces() { m_exploreMantid->updateTree(); }
+
 /// Show / hide the AlgorithmDockWidget
 void MantidUI::showAlgWidget(bool on) {
   if (on) {
@@ -429,9 +468,6 @@ void MantidUI::deleteWorkspace(const QString &workspaceName) {
   executeAlgorithmAsync(alg);
 }
 
-/**
-getSelectedWorkspaceName
-*/
 QString MantidUI::getSelectedWorkspaceName() {
   QString str = m_exploreMantid->getSelectedWorkspaceName();
   if (str.isEmpty()) {
@@ -806,6 +842,8 @@ void MantidUI::showVatesSimpleInterface() {
         m_vatesSubWindow->setWidget(vsui);
         m_vatesSubWindow->widget()->show();
         vsui->renderWorkspace(wsName, wsType, instrumentName);
+        // Keep and handle to the window for later serialisation
+        appWindow()->addSerialisableWindow(vsui);
         appWindow()->modifiedProject();
       } else {
         delete m_vatesSubWindow;
@@ -1469,7 +1507,11 @@ QStringList MantidUI::extractPyFiles(const QList<QUrl> &urlList) const {
 }
 
 /**
-executes Save Nexus
+Executes the Save Nexus dialogue from the right click context menu.
+
+The Save > Nexus function from the button in the Dock (with Load, Delete, Group,
+Sort, Save buttons) is in MantidDock in function handleShowSaveAlgorithm()
+
 saveNexus Input Dialog is a generic dialog.Below code is added to remove
 the workspaces except the selected workspace from the InputWorkspace combo
 
@@ -3486,12 +3528,16 @@ void MantidUI::plotLayerOfMultilayer(MultiLayer *multi, const bool plotErrors,
     }
   };
 
+  const bool isFitResult = workspaceIsFitResult(wsName);
+
   const int layerIndex = row * nCols + col + 1; // layers numbered from 1
   auto *layer = multi->layer(layerIndex);
   QString legendText = wsName + '\n';
   int curveIndex(0);
   for (const int spec : spectra) {
-    layer->insertCurve(wsName, spec, plotErrors, Graph::Unspecified, plotDist);
+    const auto plotType =
+        isFitResult ? getCurveTypeForFitResult(spec) : Graph::Unspecified;
+    layer->insertCurve(wsName, spec, plotErrors, plotType, plotDist);
     legendText += "\\l(" + QString::number(++curveIndex) + ")" +
                   getLegendKey(wsName, spec) + "\n";
   }
diff --git a/MantidPlot/src/Mantid/MantidUI.h b/MantidPlot/src/Mantid/MantidUI.h
index 66b272c3f5976195fde32c2e0d3421688dc47efc..bfbbf44ee5d1e438400f06a69c19670e4c555aa9 100644
--- a/MantidPlot/src/Mantid/MantidUI.h
+++ b/MantidPlot/src/Mantid/MantidUI.h
@@ -208,6 +208,8 @@ public:
   AlgorithmMonitor *getAlgMonitor() { return m_algMonitor; }
   /// updates the algorithms tree
   void updateAlgorithms();
+  /// updates the workspaces tree
+  void updateWorkspaces();
   /// Show the algorithm dock widget
   void showAlgWidget(bool on = true);
 
@@ -514,6 +516,8 @@ public slots:
   // Ticket #672
   void saveNexusWorkspace();
 
+  void setVatesSubWindow(QMdiSubWindow *vatesUI) { m_vatesSubWindow = vatesUI; }
+
 #ifdef _WIN32
 public:
   // Shows 2D plot of current memory usage.
diff --git a/MantidPlot/src/ProjectSerialiser.cpp b/MantidPlot/src/ProjectSerialiser.cpp
index ad4c23b17e52fb5c0da9052b810f34fdcc61d6fb..03c50f250f0f24f681b0e05559b51101281931b1 100644
--- a/MantidPlot/src/ProjectSerialiser.cpp
+++ b/MantidPlot/src/ProjectSerialiser.cpp
@@ -9,11 +9,12 @@
 #include "WindowFactory.h"
 
 #include "Mantid/InstrumentWidget/InstrumentWindow.h"
-#include "Mantid/MantidUI.h"
 #include "Mantid/MantidMatrixFunction.h"
+#include "Mantid/MantidUI.h"
 #include "MantidAPI/MatrixWorkspace.h"
 #include "MantidKernel/MantidVersion.h"
 #include "MantidQtAPI/PlotAxis.h"
+#include "MantidQtAPI/VatesViewerInterface.h"
 #include "MantidQtSliceViewer/SliceViewerWindow.h"
 #include "MantidQtSpectrumViewer/SpectrumView.h"
 
@@ -450,6 +451,7 @@ QString ProjectSerialiser::saveAdditionalWindows() {
     auto lines = serialisableWindow->saveToProject(window);
     output += QString::fromStdString(lines);
   }
+
   return output;
 }
 
@@ -697,4 +699,48 @@ void ProjectSerialiser::loadAdditionalWindows(const std::string &lines,
       window->addSerialisableWindow(dynamic_cast<QObject *>(win));
     }
   }
+
+  if (tsv.selectSection("vsi")) {
+    std::string vatesLines;
+    tsv >> vatesLines;
+
+    auto win = dynamic_cast<VatesViewerInterface *>(
+        VatesViewerInterface::loadFromProject(vatesLines, window, fileVersion));
+    auto subWindow = setupQMdiSubWindow();
+    subWindow->setWidget(win);
+
+    window->connect(window, SIGNAL(shutting_down()), win, SLOT(shutdown()));
+    win->connect(win, SIGNAL(requestClose()), subWindow, SLOT(close()));
+    win->setParent(subWindow);
+
+    QRect geometry;
+    TSVSerialiser tsv2(vatesLines);
+    tsv2.selectLine("geometry");
+    tsv2 >> geometry;
+    subWindow->setGeometry(geometry);
+    subWindow->widget()->show();
+
+    window->mantidUI->setVatesSubWindow(subWindow);
+    window->addSerialisableWindow(dynamic_cast<QObject *>(win));
+  }
+}
+
+/**
+ * Create a new QMdiSubWindow which will become the parent of the Vates window.
+ *
+ * @return  a new handle to a QMdiSubWindow instance
+ */
+QMdiSubWindow *ProjectSerialiser::setupQMdiSubWindow() const {
+  auto subWindow = new QMdiSubWindow();
+
+  QIcon icon;
+  auto iconName =
+      QString::fromUtf8(":/VatesSimpleGuiViewWidgets/icons/pvIcon.png");
+  icon.addFile(iconName, QSize(), QIcon::Normal, QIcon::Off);
+
+  subWindow->setAttribute(Qt::WA_DeleteOnClose, false);
+  subWindow->setWindowIcon(icon);
+  subWindow->setWindowTitle("Vates Simple Interface");
+  window->connect(window, SIGNAL(shutting_down()), subWindow, SLOT(close()));
+  return subWindow;
 }
diff --git a/MantidPlot/src/ProjectSerialiser.h b/MantidPlot/src/ProjectSerialiser.h
index 9a8b0c33e374db00530823e4292106f6a210df0f..2ccc1b7336e0bff0f209859b83cf210eb55fb637 100644
--- a/MantidPlot/src/ProjectSerialiser.h
+++ b/MantidPlot/src/ProjectSerialiser.h
@@ -118,6 +118,11 @@ private:
   void loadWsToMantidTree(const std::string &wsName);
   /// Load additional windows (e.g. slice viewer)
   void loadAdditionalWindows(const std::string &lines, const int fileVersion);
+
+  // Misc functions
+
+  /// Create a handle to a new QMdiSubWindow instance
+  QMdiSubWindow *setupQMdiSubWindow() const;
 };
 }
 }
diff --git a/MantidPlot/src/Spectrogram.cpp b/MantidPlot/src/Spectrogram.cpp
index 7ede4fac0a89cc90abaa31d0988c30f361206ed1..8d092ad7a419c2d06c103bcf90947bddc69ca0a5 100644
--- a/MantidPlot/src/Spectrogram.cpp
+++ b/MantidPlot/src/Spectrogram.cpp
@@ -969,8 +969,7 @@ QImage Spectrogram::renderImage(const QwtScaleMap &xMap,
       double xmin, xmax;
       mantidFun->getRowXRange(row, xmin, xmax);
       int jmin = -1;
-      if (xmin != std::numeric_limits<double>::infinity() && xmin == xmin &&
-          xmax != std::numeric_limits<double>::infinity() && xmax == xmax) {
+      if (std::isfinite(xmin) && std::isfinite(xmax)) {
         jmin = xMap.transform(xmin) - rect.left();
       } else {
         continue;
diff --git a/MantidQt/API/inc/MantidQtAPI/MantidQwtIMDWorkspaceData.h b/MantidQt/API/inc/MantidQtAPI/MantidQwtIMDWorkspaceData.h
index 10731f750d655f101f45b04184b6346dd2b3f37a..d3cc3eb1f8f07a452e8036e58399909c446cd269 100644
--- a/MantidQt/API/inc/MantidQtAPI/MantidQwtIMDWorkspaceData.h
+++ b/MantidQt/API/inc/MantidQtAPI/MantidQwtIMDWorkspaceData.h
@@ -56,6 +56,8 @@ protected:
   double getEX(size_t i) const override;
 
 private:
+  void copyData(const MantidQwtIMDWorkspaceData &data);
+
   void cacheLinePlot();
   void calculateMinMax();
   void choosePlotAxis();
diff --git a/MantidQt/API/inc/MantidQtAPI/VatesViewerInterface.h b/MantidQt/API/inc/MantidQtAPI/VatesViewerInterface.h
index cf1be78c837280efade1c28632f9fa4b14b98d94..900937d14358e19d99f5f2e106efe7da02b7fe46 100644
--- a/MantidQt/API/inc/MantidQtAPI/VatesViewerInterface.h
+++ b/MantidQt/API/inc/MantidQtAPI/VatesViewerInterface.h
@@ -2,9 +2,9 @@
 #define MANTIDQT_API_VATESVIEWERINTERFACE_H_
 
 #include "DllOption.h"
+#include "IProjectSerialisable.h"
 
 #include <QWidget>
-
 #include <string>
 
 class QString;
@@ -42,7 +42,9 @@ namespace API {
   File change history is stored at: <https://github.com/mantidproject/mantid>
   Code Documentation is available at: <http://doxygen.mantidproject.org>
  */
-class EXPORT_OPT_MANTIDQT_API VatesViewerInterface : public QWidget {
+class EXPORT_OPT_MANTIDQT_API VatesViewerInterface
+    : public QWidget,
+      public IProjectSerialisable {
   Q_OBJECT
 public:
   /// Default constructor for plugin mode.
@@ -54,6 +56,7 @@ public:
   VatesViewerInterface(QWidget *parent);
   /// Default destructor.
   ~VatesViewerInterface() override;
+
   /**
    * Function to create the source from the given workspace.
    * @param workspaceName the name of the workspace to visualize
@@ -62,12 +65,18 @@ public:
    */
   virtual void renderWorkspace(QString workspaceName, int workspaceType,
                                std::string instrumentName);
-
   /**
    * Special function of correct widget invocation for plugin mode.
    */
   virtual void setupPluginMode();
 
+  /// Static method to create a handle to new window instance
+  static IProjectSerialisable *loadFromProject(const std::string &lines,
+                                               ApplicationWindow *app,
+                                               const int fileVersion);
+  /// Load the VATES gui from a Mantid project string
+  virtual void loadFromProject(const std::string &lines) = 0;
+
   /// Enum to track the workspace type
   enum WorkspaceType { MDEW, PEAKS, MDHW };
 
diff --git a/MantidQt/API/src/MantidColorMap.cpp b/MantidQt/API/src/MantidColorMap.cpp
index fd56d07761f0f64672ebfe31cc195ae49fb539a1..80aef6652dd6fd51c1ddf06dc4306871df230217 100644
--- a/MantidQt/API/src/MantidColorMap.cpp
+++ b/MantidQt/API/src/MantidColorMap.cpp
@@ -13,7 +13,6 @@
 #include <QRgb>
 #include <limits>
 
-#include <boost/math/special_functions/fpclassify.hpp>
 #include "MantidKernel/ConfigService.h"
 #include <qfiledialog.h>
 
@@ -255,7 +254,7 @@ void MantidColorMap::setupDefaultMap() {
 double MantidColorMap::normalize(const QwtDoubleInterval &interval,
                                  double value) const {
   // nan numbers have the property that nan != nan, treat nan as being invalid
-  if (interval.isNull() || m_num_colors == 0 || boost::math::isnan(value))
+  if (interval.isNull() || m_num_colors == 0 || std::isnan(value))
     return m_nan;
 
   const double width = interval.width();
diff --git a/MantidQt/API/src/MantidQwtIMDWorkspaceData.cpp b/MantidQt/API/src/MantidQwtIMDWorkspaceData.cpp
index d005634e27f2c0d4156122ac8fb7abf83779c4df..076e3c3a3ace055eddecc9f4587f117d5206d99c 100644
--- a/MantidQt/API/src/MantidQwtIMDWorkspaceData.cpp
+++ b/MantidQt/API/src/MantidQwtIMDWorkspaceData.cpp
@@ -79,7 +79,7 @@ MantidQwtIMDWorkspaceData::MantidQwtIMDWorkspaceData(
 MantidQwtIMDWorkspaceData::MantidQwtIMDWorkspaceData(
     const MantidQwtIMDWorkspaceData &data)
     : MantidQwtWorkspaceData(data) {
-  this->operator=(data);
+  copyData(data);
 }
 
 //-----------------------------------------------------------------------------
@@ -89,23 +89,7 @@ MantidQwtIMDWorkspaceData::MantidQwtIMDWorkspaceData(
  */
 MantidQwtIMDWorkspaceData &MantidQwtIMDWorkspaceData::
 operator=(const MantidQwtIMDWorkspaceData &data) {
-  if (this != &data) {
-    static_cast<MantidQwtWorkspaceData &>(*this) = data;
-    m_workspace = data.m_workspace;
-    m_preview = data.m_preview;
-    m_start = data.m_start;
-    m_end = data.m_end;
-    m_dir = data.m_dir;
-    m_normalization = data.m_normalization;
-    m_isDistribution = data.m_isDistribution;
-    m_originalWorkspace = data.m_originalWorkspace;
-    m_transform = NULL;
-    m_plotAxis = data.m_plotAxis;
-    m_currentPlotAxis = data.m_currentPlotAxis;
-    if (data.m_transform)
-      m_transform = data.m_transform->clone();
-    this->cacheLinePlot();
-  }
+  copyData(data);
   return *this;
 }
 
@@ -132,6 +116,33 @@ MantidQwtIMDWorkspaceData *MantidQwtIMDWorkspaceData::copy(
   return out;
 }
 
+/**
+  * Handles copying member variables for the copy constructor and
+  * assignment operator
+  *
+  * @param data The pointer to the object to copy from
+  */
+void MantidQwtIMDWorkspaceData::copyData(
+    const MantidQwtIMDWorkspaceData &data) {
+  if (this != &data) {
+    static_cast<MantidQwtWorkspaceData &>(*this) = data;
+    m_workspace = data.m_workspace;
+    m_preview = data.m_preview;
+    m_start = data.m_start;
+    m_end = data.m_end;
+    m_dir = data.m_dir;
+    m_normalization = data.m_normalization;
+    m_isDistribution = data.m_isDistribution;
+    m_originalWorkspace = data.m_originalWorkspace;
+    m_plotAxis = data.m_plotAxis;
+    m_currentPlotAxis = data.m_currentPlotAxis;
+    m_transform = nullptr;
+    if (data.m_transform)
+      m_transform = data.m_transform->clone();
+    this->cacheLinePlot();
+  }
+}
+
 //-----------------------------------------------------------------------------
 /** Cache the X/Y line plot data from this workspace and start/end points */
 void MantidQwtIMDWorkspaceData::cacheLinePlot() {
diff --git a/MantidQt/API/src/MantidQwtWorkspaceData.cpp b/MantidQt/API/src/MantidQwtWorkspaceData.cpp
index f20d6da3fae378a11599ec3f2dd8c75eb207dd39..7e450ded1b99a6fb408bb78a1a5b13fd22d9efe4 100644
--- a/MantidQt/API/src/MantidQwtWorkspaceData.cpp
+++ b/MantidQt/API/src/MantidQwtWorkspaceData.cpp
@@ -1,6 +1,6 @@
 #include "MantidQtAPI/MantidQwtWorkspaceData.h"
 
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 MantidQwtWorkspaceData::MantidQwtWorkspaceData(bool logScaleY)
     : m_logScaleY(logScaleY), m_minY(0), m_minPositive(0), m_maxY(0),
@@ -35,7 +35,7 @@ void MantidQwtWorkspaceData::calculateYMinAndMax() const {
   for (size_t i = 0; i < size(); ++i) {
     auto val = y(i);
     // skip NaNs
-    if ((boost::math::isnan)(val) || (boost::math::isinf)(val))
+    if (!std::isfinite(val))
       continue;
 
     // Update our values as appropriate
diff --git a/MantidQt/API/src/SignalRange.cpp b/MantidQt/API/src/SignalRange.cpp
index 1d0377c9b4a1715a6328546dda979203a677847f..ae2ef0cb663938f86c5c59a0af35dc0874b9aa35 100644
--- a/MantidQt/API/src/SignalRange.cpp
+++ b/MantidQt/API/src/SignalRange.cpp
@@ -1,7 +1,7 @@
 #include "MantidQtAPI/SignalRange.h"
 #include "MantidAPI/IMDIterator.h"
 #include "MantidKernel/MultiThreaded.h"
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 namespace MantidQt {
 namespace API {
 //-------------------------------------------------------------------------
@@ -85,13 +85,13 @@ QwtDoubleInterval SignalRange::getRange(
 
         double signal;
         signal = intervals[i].minValue();
-        if (boost::math::isnan(signal) || boost::math::isinf(signal))
+        if (!std::isfinite(signal))
           continue;
         if (signal < minSignal)
           minSignal = signal;
 
         signal = intervals[i].maxValue();
-        if (boost::math::isnan(signal) || boost::math::isinf(signal))
+        if (!std::isfinite(signal))
           continue;
         if (signal > maxSignal)
           maxSignal = signal;
@@ -131,7 +131,7 @@ QwtDoubleInterval SignalRange::getRange(Mantid::API::IMDIterator *it) {
   do {
     double signal = it->getNormalizedSignal();
     // Skip any 'infs' as it screws up the color scale
-    if (signal != inf) {
+    if (!std::isinf(signal)) {
       if (signal < minSignal)
         minSignal = signal;
       if (signal > maxSignal)
diff --git a/MantidQt/API/src/VatesViewerInterface.cpp b/MantidQt/API/src/VatesViewerInterface.cpp
index 85a04361d8b96ff941607395b16c1e48045f36a5..e4f07009c47d62f250650714b113b303d71b46e1 100644
--- a/MantidQt/API/src/VatesViewerInterface.cpp
+++ b/MantidQt/API/src/VatesViewerInterface.cpp
@@ -1,4 +1,5 @@
 #include "MantidQtAPI/VatesViewerInterface.h"
+#include "MantidQtAPI/InterfaceManager.h"
 
 using namespace MantidQt::API;
 
@@ -18,4 +19,29 @@ void VatesViewerInterface::renderWorkspace(QString workSpaceName,
   UNUSED_ARG(instrumentName);
 }
 
+/** Load a Vates window from a Mantid project file
+ *
+ * This method simple provides a way to instantiate the correct window via
+ * the interface manager.
+ *
+ * @param lines :: the lines containing the state of the window
+ * @param app :: handle to the main application window
+ * @param fileVersion :: version of the Mantid project file.
+ * @return a handle to the newly created Vates window
+ */
+IProjectSerialisable *VatesViewerInterface::loadFromProject(
+    const std::string &lines, ApplicationWindow *app, const int fileVersion) {
+  UNUSED_ARG(app);
+  UNUSED_ARG(fileVersion);
+
+  MantidQt::API::InterfaceManager interfaceManager;
+  auto *vsui = interfaceManager.createVatesSimpleGui();
+
+  if (!vsui)
+    return nullptr;
+
+  vsui->loadFromProject(lines);
+  return vsui;
+}
+
 void VatesViewerInterface::shutdown() {}
diff --git a/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Indirect/ConvFit.h b/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Indirect/ConvFit.h
index dbdd88c2c61cf6b43028b087c5d221a80c83a336..7ae0970216cdd59f86859c1f2bf95ea51db35308 100644
--- a/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Indirect/ConvFit.h
+++ b/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Indirect/ConvFit.h
@@ -1,10 +1,10 @@
 #ifndef MANTIDQTCUSTOMINTERFACESIDA_CONVFIT_H_
 #define MANTIDQTCUSTOMINTERFACESIDA_CONVFIT_H_
 
-#include "ui_ConvFit.h"
 #include "IndirectDataAnalysisTab.h"
-#include "MantidAPI/MatrixWorkspace_fwd.h"
 #include "MantidAPI/CompositeFunction.h"
+#include "MantidAPI/MatrixWorkspace_fwd.h"
+#include "ui_ConvFit.h"
 
 namespace MantidQt {
 namespace CustomInterfaces {
@@ -64,8 +64,12 @@ private:
   QString minimizerString(QString outputName) const;
   QStringList getFunctionParameters(QString);
   void updatePlotOptions();
-  QString convertFuncToShort(const QString &);
-  QString convertBackToShort(const std::string &original);
+  void addParametersToTree(const QStringList &parameters,
+                           const QString &currentFitFunction);
+  void addSampleLogsToWorkspace(const std::string &workspaceName,
+                                const std::string &logName,
+                                const std::string &logText,
+                                const std::string &logType);
 
   Ui::ConvFit m_uiForm;
   QtStringPropertyManager *m_stringManager;
@@ -86,7 +90,12 @@ private:
   QStringList m_fitStrings;
 
   // Used in auto generating defaults for parameters
-  QStringList m_defaultParams;
+  QMap<QString, double> m_defaultParams;
+  QMap<QString, double> createDefaultParamsMap(QMap<QString, double> map);
+  QMap<QString, double>
+  constructFullPropertyMap(const QMap<QString, double> &defaultMap,
+                           const QStringList &parameters,
+                           const QString &fitFunction);
 };
 } // namespace IDA
 } // namespace CustomInterfaces
diff --git a/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysis.h b/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysis.h
index e2181cec707d004eeb9119c67cbe41b3844c1b0f..bc96b20379a755369819e4d60759a0dcd5396a3f 100644
--- a/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysis.h
+++ b/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysis.h
@@ -244,6 +244,9 @@ private slots:
   /// Called when compatibility mode is turned on/off
   void compatibilityModeChanged(int state);
 
+  /// Called when "overwrite" is changed
+  void updateDataPresenterOverwrite(int state);
+
 private:
   /// Initialize local Python environment
   void initLocalPython() override;
diff --git a/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisDataLoader.h b/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisDataLoader.h
index 03cd08b2a933c16ba7d385909461c52d714f2440..a610a841cfb7db3420ecc5cbf15151f3acf3d721 100644
--- a/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisDataLoader.h
+++ b/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisDataLoader.h
@@ -23,8 +23,8 @@ struct LoadResult {
   Mantid::API::Workspace_sptr loadedGrouping;
   Mantid::API::Workspace_sptr loadedDeadTimes;
   std::string mainFieldDirection;
-  double timeZero;
-  double firstGoodData;
+  double timeZero = 0;
+  double firstGoodData = 0;
   std::string label;
 };
 
@@ -32,13 +32,13 @@ struct LoadResult {
 struct AnalysisOptions {
   std::string summedPeriods;            /// Set of periods to sum
   std::string subtractedPeriods;        /// Set of periods to subtract
-  double timeZero;                      /// Value to use for t0 correction
-  double loadedTimeZero;                /// Time zero from data file
+  double timeZero = 0;                  /// Value to use for t0 correction
+  double loadedTimeZero = 0;            /// Time zero from data file
   std::pair<double, double> timeLimits; /// Min, max X values
   std::string rebinArgs;     /// Arguments for rebin (empty to not rebin)
   std::string groupPairName; /// Name of group or pair to use
   const Mantid::API::Grouping grouping; /// Grouping to use
-  PlotType plotType;                    /// Type of analysis to perform
+  PlotType plotType = {};               /// Type of analysis to perform
   explicit AnalysisOptions(const Mantid::API::Grouping &g) : grouping(g){};
 };
 } // namespace Muon
diff --git a/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisFitDataPresenter.h b/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisFitDataPresenter.h
index 759af0e9fea91f993cc779c8cd5f2df1a3fe1a6b..c381cf9e2374de1d5a88b70328739c24c4546f0a 100644
--- a/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisFitDataPresenter.h
+++ b/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/Muon/MuonAnalysisFitDataPresenter.h
@@ -102,6 +102,8 @@ public:
                                const std::string &groupName = "") const;
   /// Set selected workspace
   void setSelectedWorkspace(const QString &wsName);
+  /// Updates "overwrite" setting
+  void setOverwrite(bool enabled) { m_overwrite = enabled; }
 
 public slots:
   /// Transforms fit results when a simultaneous fit finishes
@@ -117,7 +119,9 @@ public slots:
   /// Open sequential fit dialog
   void openSequentialFitDialog();
   /// Updates label to avoid overwriting existing results
-  void checkAndUpdateFitLabel(bool seq);
+  void checkAndUpdateFitLabel(bool sequentialFit);
+  /// Handles "fit raw data" selection/deselection
+  void handleFitRawData(bool enabled, bool updateWorkspaces = true);
 
 private:
   /// Generate names of workspaces to be created
@@ -145,6 +149,8 @@ private:
   void setUpDataSelector(const QString &wsName);
   /// Check if multiple runs are selected
   bool isMultipleRuns() const;
+  /// Update fit label to match run number(s)
+  void updateFitLabelFromRuns();
   /// Fit browser to update (non-owning pointer)
   MantidQt::MantidWidgets::IWorkspaceFitControl *m_fitBrowser;
   /// Data selector to get input from (non-owning pointer)
@@ -161,6 +167,10 @@ private:
   Mantid::API::Grouping m_grouping;
   /// Stored plot type
   Muon::PlotType m_plotType;
+  /// Whether "fit raw data" is selected
+  bool m_fitRawData;
+  /// Whether "overwrite" option is set or not
+  bool m_overwrite;
 };
 } // namespace CustomInterfaces
 } // namespace Mantid
diff --git a/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/SANSRunWindow.h b/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/SANSRunWindow.h
index 309fd8a40381637f8933e53539707450f9816556..6b984b4852a973cf2c3261447c7c6521327c4159 100644
--- a/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/SANSRunWindow.h
+++ b/MantidQt/CustomInterfaces/inc/MantidQtCustomInterfaces/SANSRunWindow.h
@@ -464,8 +464,6 @@ private:
                                  QComboBox *selection, QString type);
   /// Update the beam center fields
   void updateBeamCenterCoordinates();
-  /// LOQ specific settings
-  void applyLOQSettings(bool isNowLOQ);
   /// Set the beam finder details
   void setBeamFinderDetails();
   /// Gets the QResolution settings and shows them in the GUI
diff --git a/MantidQt/CustomInterfaces/src/EnggDiffraction/EnggDiffractionViewQtGUI.cpp b/MantidQt/CustomInterfaces/src/EnggDiffraction/EnggDiffractionViewQtGUI.cpp
index 9736422455820ae6c8d83ef303a4491e28613999..1970d5c8e854f04868eb2f47e45ca96fc605ade6 100644
--- a/MantidQt/CustomInterfaces/src/EnggDiffraction/EnggDiffractionViewQtGUI.cpp
+++ b/MantidQt/CustomInterfaces/src/EnggDiffraction/EnggDiffractionViewQtGUI.cpp
@@ -369,23 +369,28 @@ void EnggDiffractionViewQtGUI::readSettings() {
   // EnggDiffCalibSettings
   m_calibSettings.m_inputDirCalib =
       qs.value("input-dir-calib-files", lastPath).toString().toStdString();
+
   m_calibSettings.m_inputDirRaw =
       qs.value("input-dir-raw-files", lastPath).toString().toStdString();
+
   const std::string fullCalib = guessDefaultFullCalibrationPath();
   m_calibSettings.m_pixelCalibFilename =
       qs.value("pixel-calib-filename", QString::fromStdString(fullCalib))
           .toString()
           .toStdString();
+
   // 'advanced' block
   m_calibSettings.m_forceRecalcOverwrite =
       qs.value("force-recalc-overwrite", false).toBool();
+
   const std::string templ = guessGSASTemplatePath();
   m_calibSettings.m_templateGSAS_PRM =
       qs.value("template-gsas-prm", QString::fromStdString(templ))
           .toString()
           .toStdString();
-  m_calibSettings.m_forceRecalcOverwrite =
-      qs.value("rebin-calib", g_defaultRebinWidth).toBool();
+
+  m_calibSettings.m_rebinCalibrate =
+      qs.value("rebin-calib", g_defaultRebinWidth).toFloat();
 
   // 'focusing' block
   m_focusDir = qs.value("focus-dir").toString().toStdString();
diff --git a/MantidQt/CustomInterfaces/src/Indirect/ConvFit.cpp b/MantidQt/CustomInterfaces/src/Indirect/ConvFit.cpp
index a6595211ee11da597cc5c56c542aabf12f46046e..3c5f31c71e021ce0c99b9884f008c446a8196705 100644
--- a/MantidQt/CustomInterfaces/src/Indirect/ConvFit.cpp
+++ b/MantidQt/CustomInterfaces/src/Indirect/ConvFit.cpp
@@ -43,8 +43,8 @@ void ConvFit::setup() {
   // Initialise fitTypeStrings
   m_fitStrings = {"", "1L", "2L", "IDS", "IDC", "EDS", "EDC", "SFT"};
   // All Parameters in tree that should be defaulting to 1
-  m_defaultParams = {"Amplitude", "Beta",      "Decay",  "Diffusion",
-                     "Height",    "Intensity", "Radius", "Tau"};
+  QMap<QString, double> m_defaultParams;
+  m_defaultParams = createDefaultParamsMap(m_defaultParams);
 
   // Create TreeProperty Widget
   m_cfTree = new QtTreePropertyBrowser();
@@ -226,74 +226,50 @@ void ConvFit::setup() {
 * algorithm
 */
 void ConvFit::run() {
-  if (m_cfInputWS == NULL) {
-    g_log.error("No workspace loaded");
-    return;
-  }
-
-  QString fitType = fitTypeString();
-  QString bgType = backgroundString();
-
-  if (fitType == "") {
-    g_log.error("No fit type defined");
-  }
-
-  bool useTies = m_uiForm.ckTieCentres->isChecked();
-  QString ties = (useTies ? "True" : "False");
-
-  CompositeFunction_sptr func = createFunction(useTies);
-  std::string function = std::string(func->asString());
-  std::string stX = m_properties["StartX"]->valueText().toStdString();
-  std::string enX = m_properties["EndX"]->valueText().toStdString();
+  // Get input from interface
+  const auto func = createFunction(m_uiForm.ckTieCentres->isChecked());
+  const auto function = std::string(func->asString());
   m_runMin = m_uiForm.spSpectraMin->value();
   m_runMax = m_uiForm.spSpectraMax->value();
-  std::string specMin = m_uiForm.spSpectraMin->text().toStdString();
-  std::string specMax = m_uiForm.spSpectraMax->text().toStdString();
-  int maxIterations =
-      static_cast<int>(m_dblManager->value(m_properties["MaxIterations"]));
+  const auto specMin = m_uiForm.spSpectraMin->text().toStdString();
+  const auto specMax = m_uiForm.spSpectraMax->text().toStdString();
 
   // Construct expected name
   m_baseName = QString::fromStdString(m_cfInputWS->getName());
-  int pos = m_baseName.lastIndexOf("_");
-  if (pos != -1) {
-    m_baseName = m_baseName.left(pos + 1);
+  // Remove _red
+  const auto cutIndex = m_baseName.lastIndexOf("_");
+  if (cutIndex != -1) {
+    m_baseName = m_baseName.left(cutIndex + 1);
   }
+  // Add fit specific suffix
+  const auto bgType = backgroundString();
+  const auto fitType = fitTypeString();
   m_baseName += "conv_";
-  if (m_blnManager->value(m_properties["UseDeltaFunc"])) {
-    m_baseName += "Delta";
-  }
-  int fitIndex = m_uiForm.cbFitType->currentIndex();
-  if (fitIndex < 3 && fitIndex != 0) {
-    m_baseName += QString::number(fitIndex);
-    m_baseName += "L";
-  } else {
-    m_baseName += convertFuncToShort(m_uiForm.cbFitType->currentText());
-  }
-  m_baseName +=
-      convertBackToShort(m_uiForm.cbBackground->currentText().toStdString()) +
-      "_s";
+  m_baseName += fitType;
+  m_baseName += bgType;
   m_baseName += QString::fromStdString(specMin);
   m_baseName += "_to_";
   m_baseName += QString::fromStdString(specMax);
 
   // Run ConvolutionFitSequential Algorithm
-  IAlgorithm_sptr cfs =
-      AlgorithmManager::Instance().create("ConvolutionFitSequential");
+  auto cfs = AlgorithmManager::Instance().create("ConvolutionFitSequential");
   cfs->initialize();
-
   cfs->setProperty("InputWorkspace", m_cfInputWS->getName());
   cfs->setProperty("Function", function);
   cfs->setProperty("BackgroundType",
                    m_uiForm.cbBackground->currentText().toStdString());
-  cfs->setProperty("StartX", stX);
-  cfs->setProperty("EndX", enX);
+  cfs->setProperty("StartX", m_properties["StartX"]->valueText().toStdString());
+  cfs->setProperty("EndX", m_properties["EndX"]->valueText().toStdString());
   cfs->setProperty("SpecMin", specMin);
   cfs->setProperty("SpecMax", specMax);
   cfs->setProperty("Convolve", true);
   cfs->setProperty("Minimizer",
                    minimizerString("$outputname_$wsindex").toStdString());
-  cfs->setProperty("MaxIterations", maxIterations);
+  cfs->setProperty("MaxIterations", static_cast<int>(m_dblManager->value(
+                                        m_properties["MaxIterations"])));
   cfs->setProperty("OutputWorkspace", (m_baseName.toStdString() + "_Result"));
+
+  // Add to batch alg runner and execute
   m_batchAlgoRunner->addAlgorithm(cfs);
   connect(m_batchAlgoRunner, SIGNAL(batchComplete(bool)), this,
           SLOT(algorithmComplete(bool)));
@@ -390,69 +366,34 @@ void ConvFit::algorithmComplete(bool error) {
   MatrixWorkspace_sptr resultWs =
       AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(resultName);
 
-  // Obtain WorkspaceGroup from ADS
-  std::string groupName = m_baseName.toStdString() + "_Workspaces";
-  WorkspaceGroup_sptr groupWs =
-      AnalysisDataService::Instance().retrieveWS<WorkspaceGroup>(groupName);
-
-  // Log for Resolution to result Ws
-  auto resLog = AlgorithmManager::Instance().create("AddSampleLog");
-  resLog->setProperty("Workspace", resultWs->getName());
-  resLog->setProperty("LogName", "resolution_filename");
-  resLog->setProperty("LogText",
-                      m_uiForm.dsResInput->getCurrentDataName().toStdString());
-  resLog->setProperty("LogType", "String");
-  m_batchAlgoRunner->addAlgorithm(resLog);
-
-  // Log for resolution to group Ws
-  auto resLogGrp = AlgorithmManager::Instance().create("AddSampleLog");
-  resLogGrp->setProperty("Workspace", groupWs->getName());
-  resLogGrp->setProperty("LogName", "resolution_filename");
-  resLogGrp->setProperty(
-      "LogText", m_uiForm.dsResInput->getCurrentDataName().toStdString());
-  resLogGrp->setProperty("LogType", "String");
-  m_batchAlgoRunner->addAlgorithm(resLogGrp);
-
-  // Handle Temperature logs
+  // Name for GroupWorkspace
+  const auto groupName = m_baseName.toStdString() + "_Workspaces";
+  // Add Sample logs for ResolutionFiles
+  const auto resFile = m_uiForm.dsResInput->getCurrentDataName().toStdString();
+  addSampleLogsToWorkspace(resultName, "resolution_filename", resFile,
+                           "String");
+  addSampleLogsToWorkspace(groupName, "resolution_filename", resFile, "String");
+
+  // Check if temperature is used and is valid
   if (m_uiForm.ckTempCorrection->isChecked()) {
-    QString temperature = m_uiForm.leTempCorrection->text();
+    const QString temperature = m_uiForm.leTempCorrection->text();
     double temp = 0.0;
     if (temperature.toStdString().compare("") != 0) {
       temp = temperature.toDouble();
     }
 
     if (temp != 0.0) {
-      // Log for temp value in result Ws
-      auto valMtx = AlgorithmManager::Instance().create("AddSampleLog");
-      valMtx->setProperty("Workspace", resultWs->getName());
-      valMtx->setProperty("LogName", "temperature_value");
-      valMtx->setProperty("LogText", temperature.toStdString());
-      valMtx->setProperty("LogType", "Number");
-      m_batchAlgoRunner->addAlgorithm(valMtx);
-
-      // Log for temp bool in result Ws
-      auto corrMtx = AlgorithmManager::Instance().create("AddSampleLog");
-      corrMtx->setProperty("Workspace", resultWs->getName());
-      corrMtx->setProperty("LogName", "temperature_correction");
-      corrMtx->setProperty("LogText", "true");
-      corrMtx->setProperty("LogType", "String");
-      m_batchAlgoRunner->addAlgorithm(corrMtx);
-
-      // Log for temp value in group Ws
-      auto valGrp = AlgorithmManager::Instance().create("AddSampleLog");
-      valGrp->setProperty("Workspace", groupWs->getName());
-      valGrp->setProperty("LogName", "temperature_value");
-      valGrp->setProperty("LogText", temperature.toStdString());
-      valGrp->setProperty("LogType", "Number");
-      m_batchAlgoRunner->addAlgorithm(valGrp);
-
-      // Log for temp bool in group Ws
-      auto corrGrp = AlgorithmManager::Instance().create("AddSampleLog");
-      corrGrp->setProperty("Workspace", groupWs->getName());
-      corrGrp->setProperty("LogName", "temperature_correction");
-      corrGrp->setProperty("LogText", "true");
-      corrGrp->setProperty("LogType", "String");
-      m_batchAlgoRunner->addAlgorithm(corrGrp);
+      // Add sample logs for temperature
+      const auto temperatureStr = temperature.toStdString();
+      addSampleLogsToWorkspace(resultName, "temperature_correction", "true",
+                               "String");
+      addSampleLogsToWorkspace(groupName, "temperature_correction", "true",
+                               "String");
+      addSampleLogsToWorkspace(resultName, "temperature_value", temperatureStr,
+                               "Number");
+
+      addSampleLogsToWorkspace(resultName, "temperature_value", temperatureStr,
+                               "Number");
     }
   }
   m_batchAlgoRunner->executeBatchAsync();
@@ -461,6 +402,28 @@ void ConvFit::algorithmComplete(bool error) {
   m_uiForm.pbPlot->setEnabled(true);
 }
 
+/**
+ * Sets up and add an instance of the AddSampleLog algorithm to the batch
+ * algorithm runner
+ * @param workspaceName	:: The name of the workspace to add the log to
+ * @param logName		:: The title of the log input
+ * @param logText		:: The information to match the title
+ * @param logType		:: The type of information (String, Number)
+ */
+void ConvFit::addSampleLogsToWorkspace(const std::string &workspaceName,
+                                       const std::string &logName,
+                                       const std::string &logText,
+                                       const std::string &logType) {
+
+  auto addSampleLog = AlgorithmManager::Instance().create("AddSampleLog");
+  addSampleLog->setLogging(false);
+  addSampleLog->setProperty("Workspace", workspaceName);
+  addSampleLog->setProperty("LogName", logName);
+  addSampleLog->setProperty("LogText", logText);
+  addSampleLog->setProperty("LogType", logType);
+  m_batchAlgoRunner->addAlgorithm(addSampleLog);
+}
+
 /**
 * Validates the user's inputs in the ConvFit tab.
 * @return If the validation was successful
@@ -468,15 +431,20 @@ void ConvFit::algorithmComplete(bool error) {
 bool ConvFit::validate() {
   UserInputValidator uiv;
 
+  const QString fitType = fitTypeString();
+  if (fitType == "") {
+    uiv.addErrorMessage("No fit type defined");
+  }
+
   uiv.checkDataSelectorIsValid("Sample", m_uiForm.dsSampleInput);
   uiv.checkDataSelectorIsValid("Resolution", m_uiForm.dsResInput);
 
-  auto range = std::make_pair(m_dblManager->value(m_properties["StartX"]),
-                              m_dblManager->value(m_properties["EndX"]));
+  const auto range = std::make_pair(m_dblManager->value(m_properties["StartX"]),
+                                    m_dblManager->value(m_properties["EndX"]));
   uiv.checkValidRange("Fitting Range", range);
 
   // Enforce the rule that at least one fit is needed; either a delta function,
-  // one or two lorentzian functions,
+  // one or two Lorentzian functions,
   // or both.  (The resolution function must be convolved with a model.)
   if (m_uiForm.cbFitType->currentIndex() == 0 &&
       !m_blnManager->value(m_properties["UseDeltaFunc"]))
@@ -489,7 +457,7 @@ bool ConvFit::validate() {
     }
   }
 
-  QString error = uiv.generateErrorMessage();
+  const auto error = uiv.generateErrorMessage();
   showMessageBox(error);
 
   return error.isEmpty();
@@ -516,7 +484,8 @@ void ConvFit::newDataLoaded(const QString wsName) {
   m_cfInputWS = AnalysisDataService::Instance().retrieveWS<MatrixWorkspace>(
       m_cfInputWSName.toStdString());
 
-  int maxWsIndex = static_cast<int>(m_cfInputWS->getNumberHistograms()) - 1;
+  const int maxWsIndex =
+      static_cast<int>(m_cfInputWS->getNumberHistograms()) - 1;
 
   m_uiForm.spPlotSpectrum->setMaximum(maxWsIndex);
   m_uiForm.spPlotSpectrum->setMinimum(0);
@@ -550,6 +519,7 @@ void ConvFit::extendResolutionWorkspace() {
     for (size_t i = 0; i < numHist; i++) {
       IAlgorithm_sptr appendAlg =
           AlgorithmManager::Instance().create("AppendSpectra");
+      appendAlg->setLogging(false);
       appendAlg->initialize();
       appendAlg->setProperty("InputWorkspace2", resWsName.toStdString());
       appendAlg->setProperty("OutputWorkspace", "__ConvFit_Resolution");
@@ -724,8 +694,8 @@ CompositeFunction_sptr ConvFit::createFunction(bool tieCentres) {
 
     // Add 1st Lorentzian
 
-    // if temperature not included then product is lorentzian * 1
-    // create product function for temp * lorentzian
+    // if temperature not included then product is Lorentzian * 1
+    // create product function for temp * Lorentzian
 
     std::string functionName = m_uiForm.cbFitType->currentText().toStdString();
 
@@ -741,8 +711,8 @@ CompositeFunction_sptr ConvFit::createFunction(bool tieCentres) {
 
     // Add 2nd Lorentzian
     if (fitTypeIndex == 2) {
-      // if temperature not included then product is lorentzian * 1
-      // create product function for temp * lorentzian
+      // if temperature not included then product is Lorentzian * 1
+      // create product function for temp * Lorentzian
       auto product = boost::dynamic_pointer_cast<CompositeFunction>(
           FunctionFactory::Instance().createFunction("ProductFunction"));
 
@@ -867,9 +837,9 @@ double ConvFit::getInstrumentResolution(std::string workspaceName) {
 }
 
 /**
-* Intialises the property values for any of the fit type
+* Initialises the property values for any of the fit type
 * @param propName The name of the property group
-* @return The popuated property group representing a fit type
+* @return The populated property group representing a fit type
 */
 QtProperty *ConvFit::createFitType(const QString &propName) {
   QtProperty *fitTypeGroup = m_grpManager->addProperty(propName);
@@ -905,7 +875,7 @@ QtProperty *ConvFit::createFitType(const QString &propName) {
 void ConvFit::populateFunction(IFunction_sptr func, IFunction_sptr comp,
                                QtProperty *group, const std::string &pref,
                                bool tie) {
-  // Get subproperties of group and apply them as parameters on the function
+  // Get sub-properties of group and apply them as parameters on the function
   // object
   QList<QtProperty *> props = group->subProperties();
 
@@ -931,7 +901,7 @@ void ConvFit::populateFunction(IFunction_sptr func, IFunction_sptr comp,
 * Generate a string to describe the fit type selected by the user.
 * Used when naming the resultant workspaces.
 *
-* Assertions used to guard against any future changes that dont take
+* Assertions used to guard against any future changes that don't take
 * workspace naming into account.
 *
 * @returns the generated QString.
@@ -951,7 +921,7 @@ QString ConvFit::fitTypeString() const {
 * Generate a string to describe the background selected by the user.
 * Used when naming the resultant workspaces.
 *
-* Assertions used to guard against any future changes that dont take
+* Assertions used to guard against any future changes that don't take
 * workspace naming into account.
 *
 * @returns the generated QString.
@@ -1041,7 +1011,7 @@ void ConvFit::bgTypeSelection(int index) {
 }
 
 /**
-* Updates the plot in the gui window
+* Updates the plot in the GUI window
 */
 void ConvFit::updatePlot() {
   using Mantid::Kernel::Exception::NotFoundError;
@@ -1256,17 +1226,18 @@ void ConvFit::singleFitComplete(bool error) {
   m_uiForm.ppPlot->addSpectrum("Fit", resultName, 1, Qt::red);
   m_uiForm.ppPlot->addSpectrum("Diff", resultName, 2, Qt::blue);
 
-  IFunction_sptr outputFunc = m_singleFitAlg->getProperty("Function");
+  IFunction_const_sptr outputFunc = m_singleFitAlg->getProperty("Function");
 
   QString functionName = m_uiForm.cbFitType->currentText();
 
   // Get params.
   QMap<QString, double> parameters;
-  std::vector<std::string> parNames = outputFunc->getParameterNames();
+  const std::vector<std::string> parNames = outputFunc->getParameterNames();
   std::vector<double> parVals;
 
   QStringList params = getFunctionParameters(functionName);
   params.reserve(static_cast<int>(parNames.size()));
+
   for (size_t i = 0; i < parNames.size(); ++i)
     parVals.push_back(outputFunc->getParameter(parNames[i]));
 
@@ -1278,7 +1249,7 @@ void ConvFit::singleFitComplete(bool error) {
   m_dblManager->setValue(m_properties["BGA0"], parameters["f0.A0"]);
   m_dblManager->setValue(m_properties["BGA1"], parameters["f0.A1"]);
 
-  int fitTypeIndex = m_uiForm.cbFitType->currentIndex();
+  const int fitTypeIndex = m_uiForm.cbFitType->currentIndex();
 
   int funcIndex = 0;
   int subIndex = 0;
@@ -1289,13 +1260,13 @@ void ConvFit::singleFitComplete(bool error) {
     subIndex++;
   }
 
-  bool usingDeltaFunc = m_blnManager->value(m_properties["UseDeltaFunc"]);
+  const bool usingDeltaFunc = m_blnManager->value(m_properties["UseDeltaFunc"]);
 
   // If using a delta function with any fit type or using two Lorentzians
-  bool usingCompositeFunc =
+  const bool usingCompositeFunc =
       ((usingDeltaFunc && fitTypeIndex > 0) || fitTypeIndex == 2);
 
-  QString prefBase = "f1.f1.";
+  const QString prefBase = "f1.f1.";
 
   if (usingDeltaFunc) {
     QString key = prefBase;
@@ -1319,14 +1290,11 @@ void ConvFit::singleFitComplete(bool error) {
     pref += "f" + QString::number(subIndex) + ".";
   }
 
-  if (fitTypeIndex == 1 || fitTypeIndex == 2) {
-    functionName = "Lorentzian 1";
-  }
-
   if (fitTypeIndex == 2) {
+    functionName = "Lorentzian 1";
     for (auto it = params.begin(); it != params.end() - 3; ++it) {
-      QString functionParam = functionName + "." + *it;
-      QString paramValue = pref + *it;
+      const QString functionParam = functionName + "." + *it;
+      const QString paramValue = pref + *it;
       m_dblManager->setValue(m_properties[functionParam],
                              parameters[paramValue]);
     }
@@ -1338,16 +1306,16 @@ void ConvFit::singleFitComplete(bool error) {
     functionName = "Lorentzian 2";
 
     for (auto it = params.begin() + 3; it != params.end(); ++it) {
-      QString functionParam = functionName + "." + *it;
-      QString paramValue = pref + *it;
+      const QString functionParam = functionName + "." + *it;
+      const QString paramValue = pref + *it;
       m_dblManager->setValue(m_properties[functionParam],
                              parameters[paramValue]);
     }
 
   } else {
     for (auto it = params.begin(); it != params.end(); ++it) {
-      QString functionParam = functionName + "." + *it;
-      QString paramValue = pref + *it;
+      const QString functionParam = functionName + "." + *it;
+      const QString paramValue = pref + *it;
       m_dblManager->setValue(m_properties[functionParam],
                              parameters[paramValue]);
     }
@@ -1394,7 +1362,11 @@ void ConvFit::hwhmChanged(double val) {
   // Update the property
   auto hwhmRangeSelector = m_uiForm.ppPlot->getRangeSelector("ConvFitHWHM");
   hwhmRangeSelector->blockSignals(true);
-  m_dblManager->setValue(m_properties["Lorentzian 1.FWHM"], hwhm * 2);
+  QString propName = "Lorentzian 1.FWHM";
+  if (m_uiForm.cbFitType->currentIndex() == 1) {
+    propName = "One Lorentzian";
+  }
+  m_dblManager->setValue(m_properties[propName], hwhm * 2);
   hwhmRangeSelector->blockSignals(false);
 }
 
@@ -1548,35 +1520,34 @@ void ConvFit::showTieCheckbox(QString fitType) {
 
 /**
 * Gets a list of parameters for a given fit function.
-* @return List fo parameters
+* @return List of parameters
 */
 QStringList ConvFit::getFunctionParameters(QString functionName) {
   QStringList parameters;
-  if (functionName.compare("Two Lorentzians") == 0) {
-    functionName = "Lorentzian";
-    IFunction_sptr func =
-        FunctionFactory::Instance().createFunction(functionName.toStdString());
+  auto currentFitFunction = functionName;
+  // Add function parameters to QStringList
+  if (functionName.compare("Zero Lorentzians") != 0) {
+    if (functionName.compare("One Lorentzian") == 0 ||
+        functionName.compare("Two Lorentzians") == 0) {
+      currentFitFunction = "Lorentzian";
+    }
+    IFunction_sptr func = FunctionFactory::Instance().createFunction(
+        currentFitFunction.toStdString());
 
     for (size_t i = 0; i < func->nParams(); i++) {
       parameters << QString::fromStdString(func->parameterName(i));
     }
   }
-
-  if (functionName.compare("One Lorentzian") == 0) {
-    functionName = "Lorentzian";
+  // Add another Lorentzian function parameter for two Lorentzian fit
+  if (functionName.compare("Two Lorentzian") == 0) {
+    currentFitFunction = "Lorentzian";
   }
-
   if (functionName.compare("Zero Lorentzians") == 0) {
     parameters.append("Zero");
   } else {
-    IFunction_sptr func =
-        FunctionFactory::Instance().createFunction(functionName.toStdString());
-
-    for (size_t i = 0; i < func->nParams(); i++) {
-      parameters << QString::fromStdString(func->parameterName(i));
-    }
+    IFunction_sptr func = FunctionFactory::Instance().createFunction(
+        currentFitFunction.toStdString());
   }
-
   return parameters;
 }
 
@@ -1585,18 +1556,25 @@ QStringList ConvFit::getFunctionParameters(QString functionName) {
 * @param functionName Name of new fit function
 */
 void ConvFit::fitFunctionSelected(const QString &functionName) {
-  double oneLValues[3] = {0.0, 0.0,
-                          0.0}; // previous values for one lorentzian fit
-  bool previouslyOneL = false;
+  // If resolution file has been entered update default FWHM to resolution
+  if (m_uiForm.dsResInput->getCurrentDataName().compare("") != 0) {
+    const auto res = getInstrumentResolution(m_cfInputWS->getName());
+    m_defaultParams["FWHM"] = res;
+    m_defaultParams["default_FWHM"] = res;
+  }
   // If the previous fit was One Lorentzian and the new fit is Two Lorentzian
   // preserve the values of One Lorentzian Fit
+  const QString currentFitFunction = m_uiForm.cbFitType->currentText();
   if (m_previousFit.compare("One Lorentzian") == 0 &&
-      m_uiForm.cbFitType->currentText().compare("Two Lorentzians") == 0) {
-    previouslyOneL = true;
-    oneLValues[0] = m_dblManager->value(m_properties["Lorentzian 1.Amplitude"]);
-    oneLValues[1] =
+      currentFitFunction.compare("Two Lorentzians") == 0) {
+    const double amplitude =
+        m_dblManager->value(m_properties["Lorentzian 1.Amplitude"]);
+    const double peakCentre =
         m_dblManager->value(m_properties["Lorentzian 1.PeakCentre"]);
-    oneLValues[2] = m_dblManager->value(m_properties["Lorentzian 1.FWHM"]);
+    const double fwhm = m_dblManager->value(m_properties["Lorentzian 1.FWHM"]);
+    m_defaultParams.insert("PeakCentre", peakCentre);
+    m_defaultParams.insert("FWHM", fwhm);
+    m_defaultParams.insert("Amplitude", amplitude);
   }
 
   // Remove previous parameters from tree
@@ -1606,13 +1584,10 @@ void ConvFit::fitFunctionSelected(const QString &functionName) {
   m_uiForm.ckPlotGuess->setChecked(false);
   m_uiForm.ckTieCentres->setChecked(false);
 
-  // Add new parameter elements
-  int fitFunctionIndex = m_uiForm.cbFitType->currentIndex();
-  QStringList parameters = getFunctionParameters(functionName);
   updatePlotOptions();
 
   // Two Lorentzians Fit
-  if (fitFunctionIndex == 2) {
+  if (currentFitFunction.compare("Two Lorentzians") == 0) {
     m_properties["FitFunction1"] = m_grpManager->addProperty("Lorentzian 1");
     m_cfTree->addProperty(m_properties["FitFunction1"]);
     m_properties["FitFunction2"] = m_grpManager->addProperty("Lorentzian 2");
@@ -1622,97 +1597,46 @@ void ConvFit::fitFunctionSelected(const QString &functionName) {
     m_cfTree->addProperty(m_properties["FitFunction1"]);
   }
 
-  QString propName;
-  // No fit function parameters required for Zero
-  if (parameters[0].compare("Zero") != 0) {
-    // Two Lorentzians Fit
-    if (fitFunctionIndex == 2) {
-      int count = 0;
-      propName = "Lorentzian 1";
-      for (auto it = parameters.begin(); it != parameters.end(); ++it) {
-        if (count == 3) {
-          propName = "Lorentzian 2";
-        }
-        const QString paramName = QString(*it);
-        const QString fullPropName = propName + "." + *it;
-        m_properties[fullPropName] = m_dblManager->addProperty(*it);
-
-        if (paramName.compare("FWHM") == 0) {
-          double resolution = 0.0;
-          if (m_uiForm.dsResInput->getCurrentDataName().compare("") != 0) {
-            resolution = getInstrumentResolution(m_cfInputWS->getName());
-          }
-          if (previouslyOneL && count < 3) {
-            m_dblManager->setValue(m_properties[fullPropName], oneLValues[2]);
-          } else {
-            m_dblManager->setValue(m_properties[fullPropName], resolution);
-          }
-        } else if (paramName.compare("Amplitude") == 0) {
-          if (previouslyOneL && count < 3) {
-            m_dblManager->setValue(m_properties[fullPropName], oneLValues[0]);
-          } else {
-            m_dblManager->setValue(m_properties[fullPropName], 1.0);
-          }
-        } else if (paramName.compare("PeakCentre") == 0) {
-          if (previouslyOneL && count < 3) {
-            m_dblManager->setValue(m_properties[fullPropName], oneLValues[1]);
-          } else {
-            m_dblManager->setValue(m_properties[fullPropName], 0.0);
-          }
-        } else {
-          if (m_defaultParams.contains(paramName, Qt::CaseInsensitive)) {
-            m_dblManager->setValue(m_properties[fullPropName], 1.0);
-          } else {
-            m_dblManager->setValue(m_properties[fullPropName], 0.0);
-          }
-        }
+  // If there are parameters in the list, add them
+  const QStringList parameters = getFunctionParameters(functionName);
+  if (parameters.isEmpty() != true) {
+    addParametersToTree(parameters, currentFitFunction);
+  }
+  m_previousFit = m_uiForm.cbFitType->currentText();
+}
 
-        m_dblManager->setDecimals(m_properties[fullPropName], NUM_DECIMALS);
-        if (count < 3) {
-          m_properties["FitFunction1"]->addSubProperty(
-              m_properties[fullPropName]);
-        } else {
-          m_properties["FitFunction2"]->addSubProperty(
-              m_properties[fullPropName]);
-        }
-        count++;
-      }
+/**
+* Adds all the parameters that are required for the currentFitFunction to the
+* parameter tree
+* @param parameters			:: A QStringList of all the parameters
+* for
+* the current fit function
+* @param currentFitFunction	:: The name of the current fit function
+*/
+void ConvFit::addParametersToTree(const QStringList &parameters,
+                                  const QString &currentFitFunction) {
+  const QMap<QString, double> fullPropertyMap =
+      constructFullPropertyMap(m_defaultParams, parameters, currentFitFunction);
+  const QStringList keys = fullPropertyMap.keys();
+  for (auto i = keys.begin(); i != keys.end(); ++i) {
+    const auto fullPropertyName = QString(*i);
+    const auto paramName = fullPropertyName.right(
+        fullPropertyName.size() - fullPropertyName.lastIndexOf(".") - 1);
+    const auto propName =
+        fullPropertyName.left(fullPropertyName.lastIndexOf("."));
+    m_properties[fullPropertyName] = m_dblManager->addProperty(paramName);
+    m_dblManager->setValue(m_properties[fullPropertyName],
+                           fullPropertyMap[fullPropertyName]);
+    m_dblManager->setDecimals(m_properties[fullPropertyName], NUM_DECIMALS);
+    if (propName.compare("Lorentzian 2") == 0) {
+      m_properties["FitFunction2"]->addSubProperty(
+          m_properties[fullPropertyName]);
     } else {
-      if (fitFunctionIndex == 1) {
-        propName = "Lorentzian 1";
-      } else {
-        propName = functionName;
-      }
-      for (auto it = parameters.begin(); it != parameters.end(); ++it) {
-        const QString paramName = QString(*it);
-        const QString fullPropName = propName + "." + *it;
-        m_properties[fullPropName] = m_dblManager->addProperty(*it);
-        if (paramName.compare("FWHM") == 0) {
-          double resolution = 0.0;
-          if (m_uiForm.dsResInput->getCurrentDataName().compare("") != 0) {
-            resolution = getInstrumentResolution(m_cfInputWS->getName());
-          }
-          m_dblManager->setValue(m_properties[fullPropName], resolution);
-        } else if (QString(*it).compare("Amplitude") == 0 ||
-                   QString(*it).compare("Intensity") == 0) {
-          m_dblManager->setValue(m_properties[fullPropName], 1.0);
-        } else {
-          if (m_defaultParams.contains(paramName, Qt::CaseInsensitive)) {
-            m_dblManager->setValue(m_properties[fullPropName], 1.0);
-          } else {
-            m_dblManager->setValue(m_properties[fullPropName], 0.0);
-          }
-        }
-
-        m_dblManager->setDecimals(m_properties[fullPropName], NUM_DECIMALS);
-        m_properties["FitFunction1"]->addSubProperty(
-            m_properties[fullPropName]);
-      }
+      m_properties["FitFunction1"]->addSubProperty(
+          m_properties[fullPropertyName]);
     }
   }
-  m_previousFit = m_uiForm.cbFitType->currentText();
 }
-
 /**
 * Populates the plot combobox
 */
@@ -1748,44 +1672,88 @@ void ConvFit::updatePlotOptions() {
 }
 
 /**
-* Converts the user input for function into short hand for use in the workspace
-* naming
-* @param original - The original user input to the function
-* @return The short hand of the users input
+* Populates the default parameter map with the initial default values
+* @param map :: The default value QMap to populate
+* @return The QMap populated with default values
 */
-QString ConvFit::convertFuncToShort(const QString &original) {
-  QString result = "";
-  if (m_uiForm.cbFitType->currentIndex() != 0) {
-    if (original.at(0) == 'E') {
-      result += "E";
-    } else if (original.at(0) == 'I') {
-      result += "I";
-    } else {
-      return "SFT";
-    }
-    auto pos = original.indexOf("Circle");
-    if (pos != -1) {
-      result += "DC";
-    } else {
-      result += "DS";
-    }
+QMap<QString, double>
+ConvFit::createDefaultParamsMap(QMap<QString, double> map) {
+  // If the parameters from a One Lorentzian fit are present
+  if (map.contains("PeakCentre")) {
+    map.remove("PeakCentre");
+    map.remove("FWHM");
   }
-  return result;
+  // Reset all parameters to default of 1
+  map.insert("Amplitude", 1.0);
+  map.insert("beta", 1.0);
+  map.insert("Decay", 1.0);
+  map.insert("Diffusion", 1.0);
+  map.insert("height", 1.0); // Lower case in StretchedExp - this can be
+                             // improved with a case insensitive check
+  map.insert("Height", 1.0);
+  map.insert("Intensity", 1.0);
+  map.insert("Radius", 1.0);
+  map.insert("tau", 1.0);
+  map.insert("default_Amplitude", 1.0); // Used in the case of 2L fit
+  return map;
 }
 
 /**
-* Converts the user input for background into short hand for use in the
-* workspace naming
-* @param original - The original user input to the function
-* @return The short hand of the users input
+* Populates a map with ALL parameters names and values for the current fit
+* function
+* @param defaultMap :: A QMap of any parameters that have non zero default
+* values
+* @param parameters	:: A QStringList of all the parameters for the current
+* fit function
+* @param fitFunction :: The name of the current fit function
+* @return a QMap populated with name, value pairs for parameters where name =
+* fitFunction.parametername and value is either from the default map or 0
 */
-QString ConvFit::convertBackToShort(const std::string &original) {
-  QString result = QString::fromStdString(original.substr(0, 3));
-  auto pos = original.find(" ");
-  if (pos != std::string::npos) {
-    result += original.at(pos + 1);
+QMap<QString, double>
+ConvFit::constructFullPropertyMap(const QMap<QString, double> &defaultMap,
+                                  const QStringList &parameters,
+                                  const QString &fitFunction) {
+  QMap<QString, double> fullMap;
+  QString fitFuncName = fitFunction;
+
+  // Special case for Two Lorentzian - as it is comprised of 2 single
+  // Lorentzians
+  if (fitFunction.compare("Two Lorentzians") == 0) {
+    fitFuncName = "Lorentzian 1";
+    for (auto param = parameters.begin(); param != parameters.end(); ++param) {
+      const QString qStrParam = QString(*param);
+      QString fullPropName = fitFuncName + "." + qStrParam;
+      if (fullMap.contains(fullPropName)) {
+        // If current property is already in the Map then it's a 2L property
+        fullPropName = "Lorentzian 2." + qStrParam;
+        double value = 0;
+        // Check for default parameter (used for 2L case)
+        const auto defaultParam = "default_" + qStrParam;
+        if (defaultMap.contains(defaultParam)) {
+          value = defaultMap[defaultParam];
+        }
+        fullMap.insert(fullPropName, value);
+      } else {
+        if (defaultMap.contains(qStrParam)) {
+          fullMap.insert(fullPropName, defaultMap[qStrParam]);
+        } else {
+          // If property not in Map, assumed to default to value of 0
+          fullMap.insert(fullPropName, 0);
+        }
+      }
+    }
+  } else { // All Other fit functions
+    for (auto param = parameters.begin(); param != parameters.end(); ++param) {
+      const QString fullPropName = fitFuncName + "." + QString(*param);
+      if (defaultMap.contains(QString(*param))) {
+        fullMap.insert(fullPropName, defaultMap[*param]);
+      } else {
+        // If property not in Map, assumed to default to value of 0
+        fullMap.insert(fullPropName, 0);
+      }
+    }
   }
-  return result;
+  return fullMap;
 }
 
 } // namespace IDA
diff --git a/MantidQt/CustomInterfaces/src/Indirect/IndirectMoments.cpp b/MantidQt/CustomInterfaces/src/Indirect/IndirectMoments.cpp
index d6d493d8d0014c653d88e1e15563b5bbe263323c..e5f9af1d7495ecd60d026e59c64f302529e38c69 100644
--- a/MantidQt/CustomInterfaces/src/Indirect/IndirectMoments.cpp
+++ b/MantidQt/CustomInterfaces/src/Indirect/IndirectMoments.cpp
@@ -84,7 +84,7 @@ void IndirectMoments::run() {
   // Set the workspace name for Python script export
   m_pythonExportWsName = outputWorkspaceName + "_M0";
 
-  // Execute algorithm on seperate thread
+  // Execute algorithm on separate thread
   runAlgorithm(momentsAlg);
 }
 
@@ -119,11 +119,10 @@ void IndirectMoments::handleSampleInputReady(const QString &filename) {
   QPair<double, double> range = m_uiForm.ppRawPlot->getCurveRange("Raw");
 
   auto xRangeSelector = m_uiForm.ppRawPlot->getRangeSelector("XRange");
-  setRangeSelector(xRangeSelector, m_properties["EMin"], m_properties["EMax"],
-                   range);
   setPlotPropertyRange(xRangeSelector, m_properties["EMin"],
                        m_properties["EMax"], range);
-
+  setRangeSelector(xRangeSelector, m_properties["EMin"], m_properties["EMax"],
+                   range);
   connect(m_dblManager, SIGNAL(valueChanged(QtProperty *, double)), this,
           SLOT(updateProperties(QtProperty *, double)));
 }
@@ -142,7 +141,7 @@ void IndirectMoments::rangeChanged(double min, double max) {
 /**
  * Handles when properties in the property manager are updated.
  *
- * Performs validation and uodated preview plot.
+ * Performs validation and updated preview plot.
  *
  * @param prop :: The property being updated
  * @param val :: The new value for the property
@@ -191,9 +190,9 @@ void IndirectMoments::momentsAlgComplete(bool error) {
   m_uiForm.ppMomentsPreview->addSpectrum(
       "M0", QString::fromStdString(resultWsNames[0]), 0, Qt::green);
   m_uiForm.ppMomentsPreview->addSpectrum(
-      "M1", QString::fromStdString(resultWsNames[2]), 0, Qt::black);
+      "M1", QString::fromStdString(resultWsNames[1]), 0, Qt::black);
   m_uiForm.ppMomentsPreview->addSpectrum(
-      "M2", QString::fromStdString(resultWsNames[3]), 0, Qt::red);
+      "M2", QString::fromStdString(resultWsNames[2]), 0, Qt::red);
   m_uiForm.ppMomentsPreview->resizeX();
 
   // Enable plot and save buttons
@@ -209,7 +208,7 @@ void IndirectMoments::plotClicked() {
       getWorkspaceBasename(m_uiForm.dsInput->getCurrentDataName()) + "_Moments";
   if (checkADSForPlotSaveWorkspace(outputWs.toStdString(), true)) {
     plotSpectrum(outputWs + "_M0");
-    plotSpectrum({outputWs + "_M0", outputWs + "_M2"});
+    plotSpectrum({outputWs + "_M2", outputWs + "_M4"});
   }
 }
 
diff --git a/MantidQt/CustomInterfaces/src/Indirect/Stretch.cpp b/MantidQt/CustomInterfaces/src/Indirect/Stretch.cpp
index b8814800ba3bb2c71f2509eadee296955aa4db92..0d2e50dc7c537d30dc0a49439064db23cdef2799 100644
--- a/MantidQt/CustomInterfaces/src/Indirect/Stretch.cpp
+++ b/MantidQt/CustomInterfaces/src/Indirect/Stretch.cpp
@@ -11,7 +11,7 @@ Mantid::Kernel::Logger g_log("Stretch");
 
 namespace MantidQt {
 namespace CustomInterfaces {
-Stretch::Stretch(QWidget *parent) : IndirectBayesTab(parent) {
+Stretch::Stretch(QWidget *parent) : IndirectBayesTab(parent), m_save(false) {
   m_uiForm.setupUi(parent);
 
   // Create range selector
diff --git a/MantidQt/CustomInterfaces/src/MantidEVWorker.cpp b/MantidQt/CustomInterfaces/src/MantidEVWorker.cpp
index 90ae368360753836c52c12ba8f79b850ab7d53da..87941363ea7a639d4f5263f7e43d95a135a456e5 100644
--- a/MantidQt/CustomInterfaces/src/MantidEVWorker.cpp
+++ b/MantidQt/CustomInterfaces/src/MantidEVWorker.cpp
@@ -161,7 +161,7 @@ bool MantidEVWorker::loadAndConvertToMD(
       alg->setProperty("Filename", file_name);
       alg->setProperty("OutputWorkspace", ev_ws_name);
       if (topaz) {
-        alg->setProperty("FilterByTofMin", 1000.0);
+        alg->setProperty("FilterByTofMin", 500.0);
         alg->setProperty("FilterByTofMax", 16666.0);
       }
       alg->setProperty("LoadMonitors", true);
diff --git a/MantidQt/CustomInterfaces/src/Muon/MuonAnalysis.cpp b/MantidQt/CustomInterfaces/src/Muon/MuonAnalysis.cpp
index 9ae4f195f613a50a834891f2959941866b7f1085..d2939cbe1d3892ddb298e709bdbf0c4eac9a7455 100644
--- a/MantidQt/CustomInterfaces/src/Muon/MuonAnalysis.cpp
+++ b/MantidQt/CustomInterfaces/src/Muon/MuonAnalysis.cpp
@@ -1,14 +1,15 @@
 //----------------------
 // Includes
 //----------------------
+#include "MantidQtCustomInterfaces/Muon/MuonAnalysis.h"
 #include "MantidAPI/AlgorithmManager.h"
 #include "MantidAPI/AnalysisDataService.h"
 #include "MantidAPI/FrameworkManager.h"
 #include "MantidAPI/IAlgorithm.h"
+#include "MantidAPI/ITableWorkspace.h"
 #include "MantidAPI/MatrixWorkspace.h"
 #include "MantidAPI/Run.h"
 #include "MantidAPI/ScopedWorkspace.h"
-#include "MantidAPI/ITableWorkspace.h"
 #include "MantidAPI/TableRow.h"
 #include "MantidAPI/WorkspaceGroup.h"
 #include "MantidGeometry/IComponent.h"
@@ -23,16 +24,15 @@
 #include "MantidQtAPI/FileDialogHandler.h"
 #include "MantidQtAPI/HelpWindow.h"
 #include "MantidQtAPI/ManageUserDirectories.h"
-#include "MantidQtCustomInterfaces/Muon/MuonAnalysis.h"
 #include "MantidQtCustomInterfaces/Muon/MuonAnalysisFitDataPresenter.h"
 #include "MantidQtCustomInterfaces/Muon/MuonAnalysisFitDataTab.h"
 #include "MantidQtCustomInterfaces/Muon/MuonAnalysisFitFunctionPresenter.h"
 #include "MantidQtCustomInterfaces/Muon/MuonAnalysisOptionTab.h"
 #include "MantidQtCustomInterfaces/Muon/MuonAnalysisResultTableTab.h"
 #include "MantidQtCustomInterfaces/Muon/MuonSequentialFitDialog.h"
-#include "MantidQtMantidWidgets/MuonFunctionBrowser.h"
 #include "MantidQtMantidWidgets/MuonFitDataSelector.h"
 #include "MantidQtMantidWidgets/MuonFitPropertyBrowser.h"
+#include "MantidQtMantidWidgets/MuonFunctionBrowser.h"
 
 #include <Poco/File.h>
 #include <Poco/Path.h>
@@ -42,20 +42,20 @@
 
 #include <algorithm>
 
-#include <QLineEdit>
-#include <QVariant>
-#include <QtProperty>
+#include <QApplication>
 #include <QFileDialog>
 #include <QHash>
-#include <QTextStream>
-#include <QTreeWidgetItem>
-#include <QSettings>
-#include <QMessageBox>
+#include <QHeaderView>
 #include <QInputDialog>
+#include <QLineEdit>
+#include <QMessageBox>
+#include <QSettings>
 #include <QSignalMapper>
-#include <QHeaderView>
-#include <QApplication>
 #include <QTemporaryFile>
+#include <QTextStream>
+#include <QTreeWidgetItem>
+#include <QVariant>
+#include <QtProperty>
 
 #include <fstream>
 
@@ -101,7 +101,8 @@ MuonAnalysis::MuonAnalysis(QWidget *parent)
       m_resultTableTab(NULL), // Will be created in initLayout()
       m_dataTimeZero(0.0), m_dataFirstGoodData(0.0),
       m_currentLabel("NoLabelSet"), m_numPeriods(0),
-      m_groupingHelper(this->m_uiForm),
+      m_groupingHelper(this->m_uiForm), m_functionBrowser(nullptr),
+      m_dataSelector(nullptr),
       m_dataLoader(Muon::DeadTimesType::None, // will be replaced by correct
                                               // instruments later
                    {"MUSR", "HIFI", "EMU", "ARGUS", "CHRONUS"}) {}
@@ -2080,6 +2081,9 @@ void MuonAnalysis::loadFittings() {
           SLOT(dataToFitChanged()));
   connect(m_dataSelector, SIGNAL(workspaceChanged()), this,
           SLOT(dataToFitChanged()));
+  connect(m_uiForm.plotCreation, SIGNAL(currentIndexChanged(int)), this,
+          SLOT(updateDataPresenterOverwrite(int)));
+  m_fitDataPresenter->setOverwrite(isOverwriteEnabled());
   // Set compatibility mode on/off as appropriate
   const bool isCompMode = m_optionTab->getCompatibilityMode();
   m_fitFunctionPresenter->setCompatibilityMode(isCompMode);
@@ -2967,5 +2971,16 @@ void MuonAnalysis::compatibilityModeChanged(int state) {
                                                Qt::CheckState::Checked);
 }
 
+/**
+ * Update the fit data presenter with current overwrite setting
+ * @param state :: [input] (not used) Setting of combo box
+ */
+void MuonAnalysis::updateDataPresenterOverwrite(int state) {
+  Q_UNUSED(state);
+  if (m_fitDataPresenter) {
+    m_fitDataPresenter->setOverwrite(isOverwriteEnabled());
+  }
+}
+
 } // namespace MantidQt
 } // namespace CustomInterfaces
diff --git a/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisFitDataPresenter.cpp b/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisFitDataPresenter.cpp
index 3860165ec7885ee045094cbfff2440b3802674fe..31e3949578c4942af3ecc9cabc76ed95901b8e39 100644
--- a/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisFitDataPresenter.cpp
+++ b/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisFitDataPresenter.cpp
@@ -24,6 +24,33 @@ typedef MantidQt::CustomInterfaces::Muon::MuonAnalysisOptionTab::RebinType
 namespace {
 /// static logger
 Mantid::Kernel::Logger g_log("MuonAnalysisFitDataPresenter");
+/// log a warning
+void logWarning(const std::string &message) { g_log.warning(message); }
+
+/// suffix for raw data workspaces
+const std::string RAW_DATA_SUFFIX("_Raw");
+const size_t RAW_SUFFIX_LENGTH(4);
+
+/// Test if workspace contains raw data
+bool isRawData(const std::string &name) {
+  const size_t nameLength = name.length();
+  if (nameLength > RAW_SUFFIX_LENGTH) {
+    return 0 ==
+           name.compare(nameLength - RAW_SUFFIX_LENGTH, RAW_SUFFIX_LENGTH,
+                        RAW_DATA_SUFFIX);
+  } else {
+    return false;
+  }
+}
+
+/// Take off the "_Raw" suffix, if present
+std::string removeRawSuffix(const std::string &name) {
+  if (isRawData(name)) {
+    return name.substr(0, name.length() - RAW_SUFFIX_LENGTH);
+  } else {
+    return name;
+  }
+}
 }
 
 namespace MantidQt {
@@ -81,7 +108,8 @@ MuonAnalysisFitDataPresenter::MuonAnalysisFitDataPresenter(
     const RebinOptions &rebinArgs)
     : m_fitBrowser(fitBrowser), m_dataSelector(dataSelector),
       m_dataLoader(dataLoader), m_timeZero(timeZero), m_rebinArgs(rebinArgs),
-      m_grouping(grouping), m_plotType(plotType) {
+      m_grouping(grouping), m_plotType(plotType),
+      m_fitRawData(fitBrowser->rawData()), m_overwrite(false) {
   // Ensure this is set correctly at the start
   handleSimultaneousFitLabelChanged();
   doConnect();
@@ -102,6 +130,8 @@ void MuonAnalysisFitDataPresenter::doConnect() {
             SLOT(openSequentialFitDialog()));
     connect(fitBrowser, SIGNAL(functionUpdateAndFitRequested(bool)), this,
             SLOT(checkAndUpdateFitLabel(bool)));
+    connect(fitBrowser, SIGNAL(fitRawDataClicked(bool)), this,
+            SLOT(handleFitRawData(bool)));
   }
   if (const QObject *dataSelector = dynamic_cast<QObject *>(m_dataSelector)) {
     connect(dataSelector, SIGNAL(dataPropertiesChanged()), this,
@@ -139,6 +169,7 @@ void MuonAnalysisFitDataPresenter::handleSelectedDataChanged(bool overwrite) {
     createWorkspacesToFit(names);
     updateWorkspaceNames(names);
     m_fitBrowser->allowSequentialFits(!isMultipleRuns());
+    updateFitLabelFromRuns();
   }
 }
 
@@ -244,6 +275,11 @@ MuonAnalysisFitDataPresenter::generateWorkspaceNames(bool overwrite) const {
 std::vector<std::string> MuonAnalysisFitDataPresenter::generateWorkspaceNames(
     const std::string &instrument, const std::string &runString,
     bool overwrite) const {
+  // If no instrument or runs, no workspaces needed
+  if (instrument.empty() || runString.empty()) {
+    return {};
+  }
+
   // From view, get names of all workspaces needed
   std::vector<std::string> workspaceNames;
   const auto groups = m_dataSelector->getChosenGroups();
@@ -301,7 +337,8 @@ std::vector<std::string> MuonAnalysisFitDataPresenter::generateWorkspaceNames(
         const std::string wsName =
             overwrite ? MuonAnalysisHelper::generateWorkspaceName(params)
                       : getUniqueName(params);
-        workspaceNames.push_back(wsName);
+        workspaceNames.push_back(m_fitRawData ? wsName + RAW_DATA_SUFFIX
+                                              : wsName);
       }
     }
   }
@@ -321,7 +358,7 @@ MuonAnalysisFitDataPresenter::createWorkspace(const std::string &name,
   Mantid::API::Workspace_sptr outputWS;
 
   // parse name to get runs, periods, groups etc
-  auto params = MuonAnalysisHelper::parseWorkspaceName(name);
+  auto params = MuonAnalysisHelper::parseWorkspaceName(removeRawSuffix(name));
 
   // load original data - need to get filename(s) of individual run(s)
   QStringList filenames;
@@ -354,8 +391,9 @@ MuonAnalysisFitDataPresenter::createWorkspace(const std::string &name,
       }
     }
 
-    // Rebin params: use the same as MuonAnalysis uses
-    analysisOptions.rebinArgs = getRebinParams(correctedData);
+    // Rebin params: use the same as MuonAnalysis uses, UNLESS this is raw data
+    analysisOptions.rebinArgs =
+        isRawData(name) ? "" : getRebinParams(correctedData);
     analysisOptions.loadedTimeZero = loadedData.timeZero;
     analysisOptions.timeZero = m_timeZero;
     analysisOptions.timeLimits.first = m_dataSelector->getStartTime();
@@ -374,22 +412,34 @@ MuonAnalysisFitDataPresenter::createWorkspace(const std::string &name,
 }
 
 /**
- * Generates rebin parameter string from options passed in by MuonAnalysis
+ * Generates rebin parameter string from options passed in by MuonAnalysis.
+ * On error, returns empty params (no rebinning).
  * @param ws :: [input] Workspace to get bin size from
  * @returns :: parameter string for rebinning
  */
 std::string MuonAnalysisFitDataPresenter::getRebinParams(
     const Mantid::API::Workspace_sptr ws) const {
+  // First check for workspace group. If it is, use first entry
+  if (const auto &group = boost::dynamic_pointer_cast<WorkspaceGroup>(ws)) {
+    if (group->size() > 0) {
+      return getRebinParams(group->getItem(0));
+    } else {
+      logWarning("Could not get rebin params from empty group");
+      return "";
+    }
+  }
+
   std::string params = "";
   if (m_rebinArgs.first == RebinType::FixedRebin) {
     try {
       const double step = std::stod(m_rebinArgs.second);
-      auto mws = boost::dynamic_pointer_cast<MatrixWorkspace>(ws);
+      const auto &mws = boost::dynamic_pointer_cast<MatrixWorkspace>(ws);
       if (mws) {
         const double binSize = mws->dataX(0)[1] - mws->dataX(0)[0];
         params = boost::lexical_cast<std::string>(step * binSize);
       }
-    } catch (const std::exception &) {
+    } catch (const std::exception &err) {
+      logWarning("Could not get rebin params: " + std::string(err.what()));
       params = "";
     }
   } else if (m_rebinArgs.first == RebinType::VariableRebin) {
@@ -615,10 +665,16 @@ void MuonAnalysisFitDataPresenter::openSequentialFitDialog() {
  * If user chooses not to overwrite, increment the label to avoid overwriting
  * the previous fit.
  *
- * @param seq :: [input] Whether fit is sequential (UNUSED)
+ * If fit is sequential, do nothing because we will not use this label. Instead,
+ * user will choose a label in the sequential fit dialog.
+ *
+ * @param sequentialFit :: [input] Whether fit is sequential or not
  */
-void MuonAnalysisFitDataPresenter::checkAndUpdateFitLabel(bool seq) {
-  Q_UNUSED(seq);
+void MuonAnalysisFitDataPresenter::checkAndUpdateFitLabel(bool sequentialFit) {
+  if (sequentialFit) {
+    return; // label not used so no need to check it
+  }
+
   if (isSimultaneousFit()) {
     auto &ads = AnalysisDataService::Instance();
     const auto &label = m_dataSelector->getSimultaneousFitLabel().toStdString();
@@ -694,8 +750,18 @@ void MuonAnalysisFitDataPresenter::setUpDataSelector(const QString &wsName) {
   m_dataSelector->setWorkspaceIndex(0u); // always has only one spectrum
 
   // Set selected groups/pairs and periods here too
-  m_dataSelector->setChosenGroup(QString::fromStdString(wsParams.itemName));
-  m_dataSelector->setChosenPeriod(QString::fromStdString(wsParams.periods));
+  // (unless extra groups/periods are already selected, in which case don't
+  // unselect them)
+  const QString &groupToSet = QString::fromStdString(wsParams.itemName);
+  const QString &periodToSet = QString::fromStdString(wsParams.periods);
+  const auto &groups = m_dataSelector->getChosenGroups();
+  const auto &periods = m_dataSelector->getPeriodSelections();
+  if (!groups.contains(groupToSet)) {
+    m_dataSelector->setChosenGroup(groupToSet);
+  }
+  if (!periodToSet.isEmpty() && !periods.contains(periodToSet)) {
+    m_dataSelector->setChosenPeriod(periodToSet);
+  }
 }
 
 /**
@@ -706,5 +772,42 @@ bool MuonAnalysisFitDataPresenter::isMultipleRuns() const {
   return m_dataSelector->getRuns().contains(QRegExp("-|,"));
 }
 
+/**
+ * Handle "fit raw data" selected/deselected
+ * Update stored value
+ * Create raw workspaces if necessary
+ * @param enabled :: [input] Whether option has been selected or unselected
+ * @param updateWorkspaces :: [input] Whether to create workspaces if they don't
+ * exist
+ */
+void MuonAnalysisFitDataPresenter::handleFitRawData(bool enabled,
+                                                    bool updateWorkspaces) {
+  m_fitRawData = enabled;
+  if (updateWorkspaces) {
+    handleSelectedDataChanged(m_overwrite);
+  }
+}
+
+/**
+ * When run numbers are changed, update the simultaneous fit label.
+ * If it's a user-set label, leave it alone, otherwise set the label to the run
+ * number string.
+ *
+ * Assume labels with digits, '-', ',' are default (e.g. "15189-91") and
+ * anything else is user-set.
+ */
+void MuonAnalysisFitDataPresenter::updateFitLabelFromRuns() {
+  // Don't change the fit label if it's a user-set one
+  const auto &label = m_dataSelector->getSimultaneousFitLabel().toStdString();
+  const bool isDefault =
+      label.find_first_not_of("0123456789-,") == std::string::npos;
+  if (isDefault) {
+    // replace with current run string
+    const auto &runString = m_dataSelector->getRuns();
+    m_dataSelector->setSimultaneousFitLabel(runString);
+    m_fitBrowser->setSimultaneousLabel(runString.toStdString());
+  }
+}
+
 } // namespace CustomInterfaces
 } // namespace MantidQt
diff --git a/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisResultTableCreator.cpp b/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisResultTableCreator.cpp
index 089f9362563b2fb34c1f9ca94011b1e70332ecb4..dfb30a2795edc4b02d449b8883f8853a01b9509d 100644
--- a/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisResultTableCreator.cpp
+++ b/MantidQt/CustomInterfaces/src/Muon/MuonAnalysisResultTableCreator.cpp
@@ -76,7 +76,7 @@ MuonAnalysisResultTableCreator::MuonAnalysisResultTableCreator(
     const QStringList &itemsSelected, const QStringList &logsSelected,
     const LogValuesMap *logValues, bool multipleLabels)
     : m_items(itemsSelected), m_logs(logsSelected), m_logValues(logValues),
-      m_multiple(multipleLabels) {
+      m_multiple(multipleLabels), m_firstStart_ns(0) {
   if (!m_logValues) {
     throw std::invalid_argument(
         "Log values passed in to result table creator are null!");
diff --git a/MantidQt/CustomInterfaces/src/Reflectometry/ReflGenericDataProcessorPresenterFactory.cpp b/MantidQt/CustomInterfaces/src/Reflectometry/ReflGenericDataProcessorPresenterFactory.cpp
index 1df2a9ac99fa6ddaa56269972a46593c4da2289d..0b6d3a2f61b2a7bd463ad39dbe9106a4dea06991 100644
--- a/MantidQt/CustomInterfaces/src/Reflectometry/ReflGenericDataProcessorPresenterFactory.cpp
+++ b/MantidQt/CustomInterfaces/src/Reflectometry/ReflGenericDataProcessorPresenterFactory.cpp
@@ -103,7 +103,7 @@ ReflGenericDataProcessorPresenterFactory::create() {
       std::set<std::string>{"InputWorkspaces", "OutputWorkspace"});
 
   return Mantid::Kernel::make_unique<GenericDataProcessorPresenter>(
-      whitelist, preprocessMap, processor, postprocessor);
+      whitelist, preprocessMap, processor, postprocessor, "LoadISISNexus");
 }
 }
 }
diff --git a/MantidQt/CustomInterfaces/src/SANSRunWindow.cpp b/MantidQt/CustomInterfaces/src/SANSRunWindow.cpp
index fb126b45c09df0991e84baf2263afc08354e3daa..c7ecfb469d8d5a9691de82a1b038bda732fbe5c2 100644
--- a/MantidQt/CustomInterfaces/src/SANSRunWindow.cpp
+++ b/MantidQt/CustomInterfaces/src/SANSRunWindow.cpp
@@ -3153,19 +3153,6 @@ void SANSRunWindow::handleInstrumentChange() {
   m_uiForm.sliceEvent->setHidden(hide_events_gui);
   m_uiForm.l_events_label->setHidden(hide_events_gui);
   m_uiForm.l_events_binning->setHidden(hide_events_gui);
-
-  // Provide LOQ Specific settings
-  const auto isNowLOQ = m_uiForm.inst_opt->currentText() == "LOQ";
-  applyLOQSettings(isNowLOQ);
-}
-
-/**
- * Apply or unapply LOQ-specific settings
- * @param isNowLOQ: if true then apply LOQ settings else unapply
- */
-void SANSRunWindow::applyLOQSettings(bool isNowLOQ) {
-  // M4 Transmission monitor
-  m_uiForm.trans_M4_check_box->setDisabled(isNowLOQ);
 }
 
 /** Record if the user has changed the default filename, because then we don't
@@ -4051,9 +4038,9 @@ bool SANSRunWindow::isValidWsForRemovingZeroErrors(QString &wsName) {
   bool isValid = true;
   if (result != m_constants.getPythonSuccessKeyword()) {
     result.replace(m_constants.getPythonSuccessKeyword(), "");
-    g_log.warning("Not a valid workspace for zero error replacement. Will save "
-                  "original workspace. More info: " +
-                  result.toStdString());
+    g_log.notice("Not a valid workspace for zero error replacement. Will save "
+                 "original workspace. More info: " +
+                 result.toStdString());
     isValid = false;
   }
   return isValid;
diff --git a/MantidQt/CustomInterfaces/test/MuonAnalysisFitDataPresenterTest.h b/MantidQt/CustomInterfaces/test/MuonAnalysisFitDataPresenterTest.h
index edc956aa2bd99e1738843011b15d31d7520fea50..942985b16803d672a2b55a48505d9f1adbec68c6 100644
--- a/MantidQt/CustomInterfaces/test/MuonAnalysisFitDataPresenterTest.h
+++ b/MantidQt/CustomInterfaces/test/MuonAnalysisFitDataPresenterTest.h
@@ -55,9 +55,7 @@ public:
   MOCK_CONST_METHOD0(getFitType, IMuonFitDataSelector::FitType());
   MOCK_CONST_METHOD0(getInstrumentName, QString());
   MOCK_CONST_METHOD0(getRuns, QString());
-  QString getSimultaneousFitLabel() const override {
-    return QString("UserSelectedFitLabel");
-  }
+  MOCK_CONST_METHOD0(getSimultaneousFitLabel, QString());
   MOCK_METHOD1(setSimultaneousFitLabel, void(const QString &));
   MOCK_CONST_METHOD0(getDatasetIndex, int());
   MOCK_METHOD1(setDatasetNames, void(const QStringList &));
@@ -77,6 +75,7 @@ public:
   MOCK_METHOD1(workspacesToFitChanged, void(int));
   MOCK_METHOD1(setSimultaneousLabel, void(const std::string &));
   MOCK_METHOD1(userChangedDataset, void(int));
+  MOCK_CONST_METHOD0(rawData, bool());
 };
 
 class MuonAnalysisFitDataPresenterTest : public CxxTest::TestSuite {
@@ -107,6 +106,8 @@ public:
     grouping.pairAlphas = {1.0};
     m_dataSelector = new NiceMock<MockDataSelector>();
     m_fitBrowser = new NiceMock<MockFitBrowser>();
+    ON_CALL(*m_dataSelector, getSimultaneousFitLabel())
+        .WillByDefault(Return(QString("Label")));
     m_presenter = new MuonAnalysisFitDataPresenter(
         m_fitBrowser, m_dataSelector, m_dataLoader, grouping,
         MantidQt::CustomInterfaces::Muon::PlotType::Asymmetry);
@@ -141,6 +142,26 @@ public:
     doTest_handleSelectedDataChanged(IMuonFitDataSelector::FitType::CoAdd);
   }
 
+  void test_handleSelectedDataChanged_shouldUpdateLabel() {
+    setupForDataChange();
+    ON_CALL(*m_dataSelector, getSimultaneousFitLabel())
+        .WillByDefault(Return(QString("15000-3"))); // the previous run numbers
+    EXPECT_CALL(*m_dataSelector, setSimultaneousFitLabel(QString("15189-91")))
+        .Times(1);
+    EXPECT_CALL(*m_fitBrowser, setSimultaneousLabel("15189-91")).Times(1);
+    m_presenter->handleSelectedDataChanged(false);
+  }
+
+  void
+  test_handleSelectedDataChanged_labelSetToNonDefaultValue_shouldNotUpdateLabel() {
+    setupForDataChange();
+    ON_CALL(*m_dataSelector, getSimultaneousFitLabel())
+        .WillByDefault(Return(QString("UserSelectedFitLabel")));
+    EXPECT_CALL(*m_dataSelector, setSimultaneousFitLabel(_)).Times(0);
+    EXPECT_CALL(*m_fitBrowser, setSimultaneousLabel(_)).Times(0);
+    m_presenter->handleSelectedDataChanged(false);
+  }
+
   void test_handleXRangeChangedGraphically() {
     EXPECT_CALL(*m_dataSelector, setStartTimeQuietly(0.4)).Times(1);
     EXPECT_CALL(*m_dataSelector, setEndTimeQuietly(9.4)).Times(1);
@@ -148,6 +169,7 @@ public:
   }
 
   void test_setAssignedFirstRun_singleWorkspace() {
+    setupGroupPeriodSelections();
     const QString wsName("MUSR00015189; Pair; long; Asym; 1; #1");
     EXPECT_CALL(*m_dataSelector, setWorkspaceDetails(QString("00015189"),
                                                      QString("MUSR"))).Times(1);
@@ -156,6 +178,7 @@ public:
   }
 
   void test_setAssignedFirstRun_contiguousRange() {
+    setupGroupPeriodSelections();
     const QString wsName("MUSR00015189-91; Pair; long; Asym; 1; #1");
     EXPECT_CALL(*m_dataSelector, setWorkspaceDetails(QString("00015189-91"),
                                                      QString("MUSR"))).Times(1);
@@ -166,6 +189,7 @@ public:
   }
 
   void test_setAssignedFirstRun_nonContiguousRange() {
+    setupGroupPeriodSelections();
     const QString wsName("MUSR00015189-91, 15193; Pair; long; Asym; 1; #1");
     EXPECT_CALL(*m_dataSelector,
                 setWorkspaceDetails(QString("00015189-91, 15193"),
@@ -177,6 +201,7 @@ public:
   }
 
   void test_setAssignedFirstRun_alreadySet() {
+    setupGroupPeriodSelections();
     const QString wsName("MUSR00015189; Pair; long; Asym; 1; #1");
     m_presenter->setAssignedFirstRun(wsName);
     EXPECT_CALL(*m_dataSelector, setWorkspaceDetails(_, _)).Times(0);
@@ -188,12 +213,15 @@ public:
   }
 
   void test_getAssignedFirstRun() {
+    setupGroupPeriodSelections();
     const QString wsName("MUSR00015189; Pair; long; Asym; 1; #1");
     m_presenter->setAssignedFirstRun(wsName);
     TS_ASSERT_EQUALS(wsName, m_presenter->getAssignedFirstRun());
   }
 
   void test_handleSimultaneousFitLabelChanged() {
+    ON_CALL(*m_dataSelector, getSimultaneousFitLabel())
+        .WillByDefault(Return("UserSelectedFitLabel"));
     EXPECT_CALL(*m_fitBrowser,
                 setSimultaneousLabel(std::string("UserSelectedFitLabel")))
         .Times(1);
@@ -201,6 +229,8 @@ public:
   }
 
   void test_handleFitFinished_nonSequential() {
+    ON_CALL(*m_dataSelector, getSimultaneousFitLabel())
+        .WillByDefault(Return("UserSelectedFitLabel"));
     EXPECT_CALL(*m_dataSelector, getFitType())
         .Times(1)
         .WillOnce(Return(IMuonFitDataSelector::FitType::Single));
@@ -210,9 +240,8 @@ public:
     EXPECT_CALL(*m_dataSelector, getPeriodSelections())
         .Times(1)
         .WillOnce(Return(QStringList({"1"})));
-    createFittedWorkspacesGroup(
-        m_dataSelector->getSimultaneousFitLabel().toStdString(),
-        {"MUSR00015189; Group; fwd; Asym; 1; #1"});
+    createFittedWorkspacesGroup("UserSelectedFitLabel",
+                                {"MUSR00015189; Group; fwd; Asym; 1; #1"});
     const auto workspacesBefore =
         AnalysisDataService::Instance().getObjectNames();
     m_presenter->handleFitFinished();
@@ -223,6 +252,8 @@ public:
   }
 
   void test_handleFitFinished_oneRunMultiplePeriods() {
+    ON_CALL(*m_dataSelector, getSimultaneousFitLabel())
+        .WillByDefault(Return("UserSelectedFitLabel"));
     EXPECT_CALL(*m_dataSelector, getFitType())
         .Times(1)
         .WillOnce(Return(IMuonFitDataSelector::FitType::Single));
@@ -232,10 +263,9 @@ public:
     EXPECT_CALL(*m_dataSelector, getPeriodSelections())
         .Times(1)
         .WillOnce(Return(QStringList({"1", "2"})));
-    createFittedWorkspacesGroup(
-        m_dataSelector->getSimultaneousFitLabel().toStdString(),
-        {"MUSR00015189; Group; fwd; Asym; 1; #1",
-         "MUSR00015189; Group; fwd; Asym; 2; #1"});
+    createFittedWorkspacesGroup("UserSelectedFitLabel",
+                                {"MUSR00015189; Group; fwd; Asym; 1; #1",
+                                 "MUSR00015189; Group; fwd; Asym; 2; #1"});
     const auto workspacesBefore =
         AnalysisDataService::Instance().getObjectNames();
     m_presenter->handleFitFinished();
@@ -246,6 +276,8 @@ public:
   }
 
   void test_handleFitFinished_oneRunMultipleGroups() {
+    ON_CALL(*m_dataSelector, getSimultaneousFitLabel())
+        .WillByDefault(Return("UserSelectedFitLabel"));
     EXPECT_CALL(*m_dataSelector, getFitType())
         .Times(1)
         .WillOnce(Return(IMuonFitDataSelector::FitType::CoAdd));
@@ -254,10 +286,9 @@ public:
         .WillOnce(Return(QStringList({"fwd", "bwd"})));
     ON_CALL(*m_dataSelector, getPeriodSelections())
         .WillByDefault(Return(QStringList({"1"})));
-    createFittedWorkspacesGroup(
-        m_dataSelector->getSimultaneousFitLabel().toStdString(),
-        {"MUSR00015189-90; Group; fwd; Asym; 1; #1",
-         "MUSR00015189-90; Group; bwd; Asym; 1; #1"});
+    createFittedWorkspacesGroup("UserSelectedFitLabel",
+                                {"MUSR00015189-90; Group; fwd; Asym; 1; #1",
+                                 "MUSR00015189-90; Group; bwd; Asym; 1; #1"});
     const auto workspacesBefore =
         AnalysisDataService::Instance().getObjectNames();
     m_presenter->handleFitFinished();
@@ -268,6 +299,8 @@ public:
   }
 
   void test_handleFitFinished_simultaneous() {
+    ON_CALL(*m_dataSelector, getSimultaneousFitLabel())
+        .WillByDefault(Return("UserSelectedFitLabel"));
     EXPECT_CALL(*m_dataSelector, getFitType())
         .Times(1)
         .WillOnce(Return(IMuonFitDataSelector::FitType::Simultaneous));
@@ -275,7 +308,7 @@ public:
         .WillByDefault(Return(QStringList({"long"})));
     ON_CALL(*m_dataSelector, getPeriodSelections())
         .WillByDefault(Return(QStringList({"1"})));
-    const auto label = m_dataSelector->getSimultaneousFitLabel().toStdString();
+    const std::string label = "UserSelectedFitLabel";
     const std::vector<std::string> inputNames{
         "MUSR00015189; Pair; long; Asym; 1; #1",
         "MUSR00015190; Pair; long; Asym; 1; #1"};
@@ -291,38 +324,41 @@ public:
   }
 
   void test_generateWorkspaceNames_CoAdd() {
-    EXPECT_CALL(*m_dataSelector, getChosenGroups())
-        .Times(1)
-        .WillOnce(Return(QStringList({"long"})));
-    EXPECT_CALL(*m_dataSelector, getPeriodSelections())
-        .Times(1)
-        .WillOnce(Return(QStringList({"1"})));
-    EXPECT_CALL(*m_dataSelector, getFitType())
-        .Times(1)
-        .WillOnce(Return(IMuonFitDataSelector::FitType::CoAdd));
-    auto names = m_presenter->generateWorkspaceNames("MUSR", "15189-91", true);
-    std::vector<std::string> expectedNames{
-        "MUSR00015189-91; Pair; long; Asym; 1; #1"};
-    TS_ASSERT_EQUALS(names, expectedNames)
+    doTest_generateWorkspaceNames(IMuonFitDataSelector::FitType::CoAdd, false,
+                                  {"MUSR00015189-91; Pair; long; Asym; 1; #1"});
+  }
+
+  void test_generateWorkspaceNames_CoAdd_Raw() {
+    doTest_generateWorkspaceNames(
+        IMuonFitDataSelector::FitType::CoAdd, true,
+        {"MUSR00015189-91; Pair; long; Asym; 1; #1_Raw"});
   }
 
   void test_generateWorkspaceNames_Simultaneous() {
-    EXPECT_CALL(*m_dataSelector, getChosenGroups())
-        .Times(1)
-        .WillOnce(Return(QStringList({"long"})));
-    EXPECT_CALL(*m_dataSelector, getPeriodSelections())
-        .Times(1)
-        .WillOnce(Return(QStringList({"1"})));
-    EXPECT_CALL(*m_dataSelector, getFitType())
-        .Times(1)
-        .WillOnce(Return(IMuonFitDataSelector::FitType::Simultaneous));
-    auto names = m_presenter->generateWorkspaceNames("MUSR", "15189-91", true);
-    std::vector<std::string> expectedNames{
-        "MUSR00015189; Pair; long; Asym; 1; #1",
-        "MUSR00015190; Pair; long; Asym; 1; #1",
-        "MUSR00015191; Pair; long; Asym; 1; #1"};
-    std::sort(names.begin(), names.end());
-    TS_ASSERT_EQUALS(names, expectedNames)
+    doTest_generateWorkspaceNames(IMuonFitDataSelector::FitType::Simultaneous,
+                                  false,
+                                  {"MUSR00015189; Pair; long; Asym; 1; #1",
+                                   "MUSR00015190; Pair; long; Asym; 1; #1",
+                                   "MUSR00015191; Pair; long; Asym; 1; #1"});
+  }
+
+  void test_generateWorkspaceNames_Simultaneous_Raw() {
+    doTest_generateWorkspaceNames(
+        IMuonFitDataSelector::FitType::Simultaneous, true,
+        {"MUSR00015189; Pair; long; Asym; 1; #1_Raw",
+         "MUSR00015190; Pair; long; Asym; 1; #1_Raw",
+         "MUSR00015191; Pair; long; Asym; 1; #1_Raw"});
+  }
+
+  void test_generateWorkspaceNames_noInstrument() {
+    const auto &names =
+        m_presenter->generateWorkspaceNames("", "15189-91", false);
+    TS_ASSERT(names.empty());
+  }
+
+  void test_generateWorkspaceNames_noRuns() {
+    const auto &names = m_presenter->generateWorkspaceNames("MUSR", "", false);
+    TS_ASSERT(names.empty());
   }
 
   void test_createWorkspacesToFit_AlreadyExists() {
@@ -356,8 +392,24 @@ public:
     }
   }
 
+  void test_createWorkspacesToFit_RawData() {
+    ON_CALL(*m_dataSelector, getStartTime()).WillByDefault(Return(0.1));
+    ON_CALL(*m_dataSelector, getEndTime()).WillByDefault(Return(9.9));
+    auto &ads = AnalysisDataService::Instance();
+    const std::vector<std::string> names{
+        "MUSR00015189; Pair; long; Asym; 1; #1_Raw",
+        "MUSR00015189; Group; fwd; Asym; 1; #1_Raw"};
+    m_presenter->createWorkspacesToFit(names);
+    // Make sure workspaces have been created and grouped together
+    const auto group = ads.retrieveWS<WorkspaceGroup>("MUSR00015189");
+    TS_ASSERT(group);
+    for (const auto &name : names) {
+      TS_ASSERT(group->contains(name));
+    }
+  }
+
   void test_handleFittedWorkspaces_defaultGroupName() {
-    const auto label = m_dataSelector->getSimultaneousFitLabel().toStdString();
+    const std::string label = "UserSelectedFitLabel";
     const std::vector<std::string> inputNames{
         "MUSR00015189; Pair; long; Asym; 1; #1",
         "MUSR00015190; Pair; long; Asym; 1; #1"};
@@ -369,7 +421,7 @@ public:
   }
 
   void test_handleFittedWorkspaces_otherGroupName() {
-    const auto label = m_dataSelector->getSimultaneousFitLabel().toStdString();
+    const std::string label = "UserSelectedFitLabel";
     const std::vector<std::string> inputNames{
         "MUSR00015189; Pair; long; Asym; 1; #1",
         "MUSR00015189; Group; fwd; Asym; 1; #1"};
@@ -507,7 +559,128 @@ public:
                                   {"1", "2"}, true, true);
   }
 
+  void test_handleFitRawData_NoUpdate() {
+    const bool isRawData = true;
+    const bool updateWorkspaces = false;
+    EXPECT_CALL(*m_dataSelector, getInstrumentName()).Times(0);
+    EXPECT_CALL(*m_dataSelector, getChosenGroups()).Times(0);
+    EXPECT_CALL(*m_dataSelector, getPeriodSelections()).Times(0);
+    EXPECT_CALL(*m_dataSelector, getFitType()).Times(0);
+    m_presenter->handleFitRawData(isRawData, updateWorkspaces);
+    const auto &workspaces = AnalysisDataService::Instance().getObjectNames();
+    TS_ASSERT(workspaces.empty());
+  }
+
+  void test_handleFitRawData_updateWorkspaces() {
+    const bool isRawData = true;
+    const bool updateWorkspaces = true;
+    EXPECT_CALL(*m_dataSelector, getInstrumentName())
+        .Times(1)
+        .WillOnce(Return("MUSR"));
+    EXPECT_CALL(*m_dataSelector, getChosenGroups())
+        .Times(1)
+        .WillOnce(Return(QStringList({"long"})));
+    EXPECT_CALL(*m_dataSelector, getPeriodSelections())
+        .Times(1)
+        .WillOnce(Return(QStringList({"1"})));
+    EXPECT_CALL(*m_dataSelector, getFitType())
+        .Times(1)
+        .WillOnce(Return(IMuonFitDataSelector::FitType::Single));
+    ON_CALL(*m_dataSelector, getRuns()).WillByDefault(Return("15189"));
+    ON_CALL(*m_dataSelector, getStartTime()).WillByDefault(Return(0.55));
+    ON_CALL(*m_dataSelector, getEndTime()).WillByDefault(Return(10.0));
+    const QStringList expectedNames{
+        "MUSR00015189; Pair; long; Asym; 1; #1_Raw"};
+    EXPECT_CALL(*m_fitBrowser, setWorkspaceNames(expectedNames)).Times(1);
+    EXPECT_CALL(*m_dataSelector, setDatasetNames(expectedNames)).Times(1);
+    EXPECT_CALL(*m_fitBrowser, setWorkspaceName(expectedNames[0])).Times(1);
+    EXPECT_CALL(*m_fitBrowser, allowSequentialFits(true));
+    m_presenter->handleFitRawData(isRawData, updateWorkspaces);
+    TS_ASSERT(AnalysisDataService::Instance().doesExist(
+        expectedNames[0].toStdString()));
+  }
+
+  void test_checkAndUpdateFitLabel_SequentialFit_ShouldDoNothing() {
+    EXPECT_CALL(*m_dataSelector, getFitType()).Times(0);
+    EXPECT_CALL(*m_dataSelector, getChosenGroups()).Times(0);
+    EXPECT_CALL(*m_dataSelector, getPeriodSelections()).Times(0);
+    EXPECT_CALL(*m_dataSelector, askUserWhetherToOverwrite()).Times(0);
+    EXPECT_CALL(*m_fitBrowser, setSimultaneousLabel(_)).Times(0);
+    EXPECT_CALL(*m_dataSelector, setSimultaneousFitLabel(_)).Times(0);
+    m_presenter->checkAndUpdateFitLabel(true);
+  }
+
+  void test_setSelectedWorkspace() {
+    setupGroupPeriodSelections();
+    const QString wsName("MUSR00015189-91; Group; fwd; Asym; 1; #6");
+    const QStringList wsNameList{wsName};
+
+    // Expect it will update the workspace names
+    EXPECT_CALL(*m_fitBrowser, setWorkspaceNames(wsNameList)).Times(1);
+    EXPECT_CALL(*m_fitBrowser, setWorkspaceName(wsName)).Times(1);
+    EXPECT_CALL(*m_dataSelector, setDatasetNames(wsNameList)).Times(1);
+
+    // Expect it will update the UI from workspace details
+    EXPECT_CALL(*m_dataSelector, setWorkspaceDetails(QString("00015189-91"),
+                                                     QString("MUSR"))).Times(1);
+    EXPECT_CALL(*m_dataSelector, setWorkspaceIndex(0)).Times(1);
+    EXPECT_CALL(*m_dataSelector, setChosenGroup(QString("fwd"))).Times(1);
+    EXPECT_CALL(*m_dataSelector, setChosenPeriod(QString("1"))).Times(1);
+
+    m_presenter->setSelectedWorkspace(wsName);
+  }
+
+  void test_setSelectedWorkspace_groupsAlreadySelected_shouldNotUnselect() {
+    const QString wsName("MUSR00015189-91; Group; fwd; Asym; 1; #6");
+
+    // Groups "fwd" and "bwd" are already selected
+    ON_CALL(*m_dataSelector, getChosenGroups())
+        .WillByDefault(Return(QStringList{"fwd", "bwd"}));
+    ON_CALL(*m_dataSelector, getPeriodSelections())
+        .WillByDefault(Return(QStringList{}));
+
+    // It should NOT deselect the already selected groups
+    EXPECT_CALL(*m_dataSelector, setChosenGroup(_)).Times(0);
+
+    m_presenter->setSelectedWorkspace(wsName);
+  }
+
+  void test_setSelectedWorkspace_periodsAlreadySelected_shouldNotUnselect() {
+    const QString wsName("MUSR00015189-91; Group; fwd; Asym; 1; #6");
+
+    // Periods 1 and 2 are already selected
+    ON_CALL(*m_dataSelector, getPeriodSelections())
+        .WillByDefault(Return(QStringList{"1", "2"}));
+    ON_CALL(*m_dataSelector, getChosenGroups())
+        .WillByDefault(Return(QStringList{}));
+
+    // It should NOT deselect the already selected periods
+    EXPECT_CALL(*m_dataSelector, setChosenPeriod(_)).Times(0);
+
+    m_presenter->setSelectedWorkspace(wsName);
+  }
+
 private:
+  void
+  doTest_generateWorkspaceNames(const IMuonFitDataSelector::FitType &fitType,
+                                const bool isRawData,
+                                const std::vector<std::string> &expectedNames) {
+    EXPECT_CALL(*m_dataSelector, getChosenGroups())
+        .Times(1)
+        .WillOnce(Return(QStringList({"long"})));
+    EXPECT_CALL(*m_dataSelector, getPeriodSelections())
+        .Times(1)
+        .WillOnce(Return(QStringList({"1"})));
+    EXPECT_CALL(*m_dataSelector, getFitType())
+        .Times(1)
+        .WillOnce(Return(fitType));
+    m_presenter->handleFitRawData(isRawData,
+                                  false); // don't create the workspaces
+    const auto &names =
+        m_presenter->generateWorkspaceNames("MUSR", "15189-91", true);
+    TS_ASSERT_EQUALS(names, expectedNames)
+  }
+
   void doTest_handleSelectedDataChanged(IMuonFitDataSelector::FitType fitType) {
     auto &ads = AnalysisDataService::Instance();
     EXPECT_CALL(*m_dataSelector, getInstrumentName())
@@ -525,6 +698,8 @@ private:
     ON_CALL(*m_dataSelector, getRuns()).WillByDefault(Return("15189-91"));
     ON_CALL(*m_dataSelector, getStartTime()).WillByDefault(Return(0.55));
     ON_CALL(*m_dataSelector, getEndTime()).WillByDefault(Return(10.0));
+    ON_CALL(*m_dataSelector, getSimultaneousFitLabel())
+        .WillByDefault(Return(QString("UserSelectedFitLabel")));
     const std::vector<QString> expectedNames = [&fitType]() {
       if (fitType == IMuonFitDataSelector::FitType::CoAdd) {
         return std::vector<QString>{
@@ -748,9 +923,11 @@ private:
         .WillByDefault(Return(periods));
     ON_CALL(*m_dataSelector, askUserWhetherToOverwrite())
         .WillByDefault(Return(overwrite));
+    ON_CALL(*m_dataSelector, getSimultaneousFitLabel())
+        .WillByDefault(Return("UserSelectedFitLabel"));
 
     if (shouldUpdate) {
-      const auto &label = m_dataSelector->getSimultaneousFitLabel();
+      const QString label = "UserSelectedFitLabel";
       QString groupName = QString("MuonSimulFit_").append(label);
       AnalysisDataService::Instance().add(groupName.toStdString(),
                                           boost::make_shared<WorkspaceGroup>());
@@ -767,6 +944,26 @@ private:
     AnalysisDataService::Instance().clear();
   }
 
+  void setupGroupPeriodSelections() {
+    ON_CALL(*m_dataSelector, getChosenGroups())
+        .WillByDefault(Return(QStringList{}));
+    ON_CALL(*m_dataSelector, getPeriodSelections())
+        .WillByDefault(Return(QStringList{}));
+  }
+
+  void setupForDataChange() {
+    ON_CALL(*m_dataSelector, getChosenGroups())
+        .WillByDefault(Return(QStringList{"fwd"}));
+    ON_CALL(*m_dataSelector, getPeriodSelections())
+        .WillByDefault(Return(QStringList{"1"}));
+    ON_CALL(*m_dataSelector, getFitType())
+        .WillByDefault(Return(IMuonFitDataSelector::FitType::Simultaneous));
+    ON_CALL(*m_dataSelector, getInstrumentName()).WillByDefault(Return("MUSR"));
+    ON_CALL(*m_dataSelector, getRuns()).WillByDefault(Return("15189-91"));
+    ON_CALL(*m_dataSelector, getStartTime()).WillByDefault(Return(0.55));
+    ON_CALL(*m_dataSelector, getEndTime()).WillByDefault(Return(10.0));
+  }
+
   MockDataSelector *m_dataSelector;
   MockFitBrowser *m_fitBrowser;
   MuonAnalysisFitDataPresenter *m_presenter;
diff --git a/MantidQt/CustomInterfaces/test/MuonAnalysisFitFunctionPresenterTest.h b/MantidQt/CustomInterfaces/test/MuonAnalysisFitFunctionPresenterTest.h
index 8a28ec0dce7331c5630a4bb899485f8e13cab372..d24ccc3dde35c59affd7cd1b4b2e6fb3c0909868 100644
--- a/MantidQt/CustomInterfaces/test/MuonAnalysisFitFunctionPresenterTest.h
+++ b/MantidQt/CustomInterfaces/test/MuonAnalysisFitFunctionPresenterTest.h
@@ -60,6 +60,7 @@ public:
   MOCK_CONST_METHOD0(getWorkspaceNamesToFit, std::vector<std::string>());
   MOCK_METHOD1(userChangedDatasetIndex, void(int));
   MOCK_METHOD1(setCompatibilityMode, void(bool));
+  MOCK_METHOD1(fitRawDataClicked, void(bool));
 };
 
 class MuonAnalysisFitFunctionPresenterTest : public CxxTest::TestSuite {
diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/GenericDataProcessorPresenter.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/GenericDataProcessorPresenter.h
index 6522a85026ba563fda869faa8e7876c50fe641bf..d2f1d5843d11b0ac75ff8a3abe0c3b6915bc1f1c 100644
--- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/GenericDataProcessorPresenter.h
+++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/DataProcessorUI/GenericDataProcessorPresenter.h
@@ -59,7 +59,8 @@ public:
       const std::map<std::string, DataProcessorPreprocessingAlgorithm> &
           preprocessMap,
       const DataProcessorProcessingAlgorithm &processor,
-      const DataProcessorPostprocessingAlgorithm &postprocessor);
+      const DataProcessorPostprocessingAlgorithm &postprocessor,
+      const std::string &loader = "Load");
   // Constructor: no pre-processing, post-processing
   GenericDataProcessorPresenter(
       const DataProcessorWhiteList &whitelist,
@@ -123,6 +124,8 @@ private:
   DataProcessorProcessingAlgorithm m_processor;
   // Post-processing algorithm
   DataProcessorPostprocessingAlgorithm m_postprocessor;
+  // Loader
+  std::string m_loader;
   // A boolean indicating whether a post-processing algorithm has been defined
   bool m_postprocess;
   // The number of columns
diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/FitPropertyBrowser.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/FitPropertyBrowser.h
index 0244e4a6bfea26a8dd296231868500d3fd52fe99..d333b85018a54e1ec190425df60636c2e125adc8 100644
--- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/FitPropertyBrowser.h
+++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/FitPropertyBrowser.h
@@ -223,7 +223,7 @@ public:
   bool plotCompositeMembers() const;
 
   /// Returns true if the fit should be done against binned (bunched) data.
-  bool rawData() const;
+  bool rawData() const override;
 
   void setADSObserveEnabled(bool enabled);
 
@@ -294,11 +294,12 @@ signals:
 protected slots:
   /// Get the registered function names
   virtual void populateFunctionNames();
+  /// Called when a bool property is changed
+  virtual void boolChanged(QtProperty *prop);
 
 private slots:
 
   void enumChanged(QtProperty *prop);
-  void boolChanged(QtProperty *prop);
   void intChanged(QtProperty *prop);
   virtual void doubleChanged(QtProperty *prop);
   /// Called when one of the parameter values gets changed
diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/IMuonFitFunctionControl.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/IMuonFitFunctionControl.h
index 64388c59d00c0b1f0ee2a67a62def731b0cfc9c1..eda1b9999214ffb36c1f54785ee9a25d2198a6d7 100644
--- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/IMuonFitFunctionControl.h
+++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/IMuonFitFunctionControl.h
@@ -46,6 +46,7 @@ signals:
   virtual void functionUpdateRequested() = 0;
   virtual void functionUpdateAndFitRequested(bool sequential) = 0;
   virtual void userChangedDatasetIndex(int index) = 0;
+  virtual void fitRawDataClicked(bool enabled) = 0;
 };
 
 } // namespace MantidWidgets
diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/IWorkspaceFitControl.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/IWorkspaceFitControl.h
index a794a0b81f7b435bd38901db9b9ce4f46b912df2..a131bb062f7a72880a0074806cd0e45c38377ade 100644
--- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/IWorkspaceFitControl.h
+++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/IWorkspaceFitControl.h
@@ -49,6 +49,7 @@ public:
     UNUSED_ARG(label)
   }
   virtual void userChangedDataset(int index) { UNUSED_ARG(index) }
+  virtual bool rawData() const = 0;
 };
 
 } // namespace MantidWidgets
diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/MuonFitDataSelector.ui b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/MuonFitDataSelector.ui
index 3395094d533ec924c0a7bea0008ae28bdfa80c13..46d756198fe56e2486f6e69340dabaddbfa5ceba 100644
--- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/MuonFitDataSelector.ui
+++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/MuonFitDataSelector.ui
@@ -303,7 +303,7 @@
            <bool>false</bool>
           </property>
           <property name="text">
-           <string>Label</string>
+           <string>0</string>
           </property>
          </widget>
         </item>
diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/MuonFitPropertyBrowser.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/MuonFitPropertyBrowser.h
index 40feb950e47dfc6851919c31c514f0dd0c625b44..5e68fd4e5fcde93ea4136a8faef4d406f4338091 100644
--- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/MuonFitPropertyBrowser.h
+++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/MuonFitPropertyBrowser.h
@@ -94,12 +94,15 @@ signals:
   void workspacesToFitChanged(int n) override;
   /// Emitted when dataset index to fit is changed
   void userChangedDatasetIndex(int index) override;
+  /// Emitted when "fit to raw data" is changed
+  void fitRawDataClicked(bool enabled) override;
 
 protected:
   void showEvent(QShowEvent *e) override;
 
 private slots:
   void doubleChanged(QtProperty *prop) override;
+  void boolChanged(QtProperty *prop) override;
 
 private:
   /// Get the registered function names
diff --git a/MantidQt/MantidWidgets/src/DataProcessorUI/GenericDataProcessorPresenter.cpp b/MantidQt/MantidWidgets/src/DataProcessorUI/GenericDataProcessorPresenter.cpp
index 7f7d160e42b410f7b0828a266541be545a01effe..b8d52777310c5b8e65b25e05214062fe3d3bccd3 100644
--- a/MantidQt/MantidWidgets/src/DataProcessorUI/GenericDataProcessorPresenter.cpp
+++ b/MantidQt/MantidWidgets/src/DataProcessorUI/GenericDataProcessorPresenter.cpp
@@ -42,16 +42,18 @@ namespace MantidWidgets {
 * @param processor : A DataProcessorProcessingAlgorithm
 * @param postprocessor : A DataProcessorPostprocessingAlgorithm
 * workspaces
+* @param loader : The algorithm responsible for loading data
 */
 GenericDataProcessorPresenter::GenericDataProcessorPresenter(
     const DataProcessorWhiteList &whitelist,
     const std::map<std::string, DataProcessorPreprocessingAlgorithm> &
         preprocessMap,
     const DataProcessorProcessingAlgorithm &processor,
-    const DataProcessorPostprocessingAlgorithm &postprocessor)
+    const DataProcessorPostprocessingAlgorithm &postprocessor,
+    const std::string &loader)
     : WorkspaceObserver(), m_view(nullptr), m_progressView(nullptr),
       m_whitelist(whitelist), m_preprocessMap(preprocessMap),
-      m_processor(processor), m_postprocessor(postprocessor),
+      m_processor(processor), m_postprocessor(postprocessor), m_loader(loader),
       m_postprocess(true), m_mainPresenter(), m_tableDirty(false) {
 
   // Column Options must be added to the whitelist
@@ -526,7 +528,7 @@ GenericDataProcessorPresenter::loadRun(const std::string &run,
   // We'll just have to load it ourselves
   const std::string filename = instrument + run;
   const std::string outputName = prefix + run;
-  IAlgorithm_sptr algLoadRun = AlgorithmManager::Instance().create("Load");
+  IAlgorithm_sptr algLoadRun = AlgorithmManager::Instance().create(m_loader);
   algLoadRun->initialize();
   algLoadRun->setProperty("Filename", filename);
   algLoadRun->setProperty("OutputWorkspace", outputName);
diff --git a/MantidQt/MantidWidgets/src/FitPropertyBrowser.cpp b/MantidQt/MantidWidgets/src/FitPropertyBrowser.cpp
index 747514c3b53c3691d839692e54e5293040425cda..d0176bdcea60c33c8bcdd2ce17c1324ab4071cd0 100644
--- a/MantidQt/MantidWidgets/src/FitPropertyBrowser.cpp
+++ b/MantidQt/MantidWidgets/src/FitPropertyBrowser.cpp
@@ -71,9 +71,9 @@ FitPropertyBrowser::FitPropertyBrowser(QWidget *parent, QObject *mantidui)
       m_logValue(NULL), m_plotDiff(NULL), m_plotCompositeMembers(NULL),
       m_convolveMembers(NULL), m_rawData(NULL), m_xColumn(NULL),
       m_yColumn(NULL), m_errColumn(NULL), m_showParamErrors(NULL),
-      m_compositeFunction(), m_browser(NULL), m_fitActionUndoFit(NULL),
-      m_fitActionSeqFit(NULL), m_fitActionFit(NULL), m_fitActionEvaluate(NULL),
-      m_functionsGroup(NULL), m_settingsGroup(NULL),
+      m_evaluationType(nullptr), m_compositeFunction(), m_browser(NULL),
+      m_fitActionUndoFit(NULL), m_fitActionSeqFit(NULL), m_fitActionFit(NULL),
+      m_fitActionEvaluate(NULL), m_functionsGroup(NULL), m_settingsGroup(NULL),
       m_customSettingsGroup(NULL), m_changeSlotsEnabled(false),
       m_guessOutputName(true),
       m_updateObserver(*this, &FitPropertyBrowser::handleFactoryUpdate),
@@ -169,8 +169,7 @@ void FitPropertyBrowser::init() {
   m_minimizer = m_enumManager->addProperty("Minimizer");
   m_minimizers << "Levenberg-Marquardt"
                << "Levenberg-MarquardtMD"
-               << "More-Sorensen"
-               << "DTRS"
+               << "Trust Region"
                << "Simplex"
                << "FABADA"
                << "Conjugate gradient (Fletcher-Reeves imp.)"
diff --git a/MantidQt/MantidWidgets/src/InstrumentView/InstrumentActor.cpp b/MantidQt/MantidWidgets/src/InstrumentView/InstrumentActor.cpp
index 2d46267da8af43d62a76a908ce9687094c135c04..5341ec549a17d401ffb4a23217cede43ac3b2608 100644
--- a/MantidQt/MantidWidgets/src/InstrumentView/InstrumentActor.cpp
+++ b/MantidQt/MantidWidgets/src/InstrumentView/InstrumentActor.cpp
@@ -29,7 +29,7 @@
 #include "MantidKernel/V3D.h"
 
 #include <boost/algorithm/string.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
+#include <cmath>
 
 #include <QMessageBox>
 #include <QSettings>
@@ -134,8 +134,7 @@ void InstrumentActor::setUpWorkspace(
   for (size_t i = 0; i < nHist; ++i) {
     const Mantid::MantidVec &values = sharedWorkspace->readX(i);
     double xtest = values.front();
-    if (xtest != std::numeric_limits<double>::infinity()) {
-
+    if (!std::isinf(xtest)) {
       if (xtest < m_WkspBinMinValue) {
         m_WkspBinMinValue = xtest;
       } else if (xtest > m_WkspBinMaxValue) {
@@ -145,7 +144,7 @@ void InstrumentActor::setUpWorkspace(
     }
 
     xtest = values.back();
-    if (xtest != std::numeric_limits<double>::infinity()) {
+    if (!std::isinf(xtest)) {
       if (xtest < m_WkspBinMinValue) {
         m_WkspBinMinValue = xtest;
       } else if (xtest > m_WkspBinMaxValue) {
@@ -1152,7 +1151,7 @@ void InstrumentActor::setDataIntegrationRange(const double &xmin,
         continue;
       }
       double sum = m_specIntegrs[i];
-      if (boost::math::isinf(sum) || boost::math::isnan(sum)) {
+      if (!std::isfinite(sum)) {
         throw std::runtime_error(
             "The workspace contains values that cannot be displayed (infinite "
             "or NaN).\n"
diff --git a/MantidQt/MantidWidgets/src/InstrumentView/RotationSurface.cpp b/MantidQt/MantidWidgets/src/InstrumentView/RotationSurface.cpp
index 35246093906ef0c1b275cd5137054a858afa2971..3efd92014dfb5a5a8fabf494fe699b9a3789bec6 100644
--- a/MantidQt/MantidWidgets/src/InstrumentView/RotationSurface.cpp
+++ b/MantidQt/MantidWidgets/src/InstrumentView/RotationSurface.cpp
@@ -160,17 +160,13 @@ void RotationSurface::init() {
                         double dV = fabs(m_v_max - m_v_min);
                         double du = dU * 0.05;
                         double dv = dV * 0.05;
-                        if (m_width_max > du &&
-                            m_width_max !=
-                                std::numeric_limits<double>::infinity()) {
+                        if (m_width_max > du && std::isfinite(m_width_max)) {
                           if (du > 0 && !(dU >= m_width_max)) {
                             m_width_max = dU;
                           }
                           du = m_width_max;
                         }
-                        if (m_height_max > dv &&
-                            m_height_max !=
-                                std::numeric_limits<double>::infinity()) {
+                        if (m_height_max > dv && std::isfinite(m_height_max)) {
                           if (dv > 0 && !(dV >= m_height_max)) {
                             m_height_max = dV;
                           }
diff --git a/MantidQt/MantidWidgets/src/MWView.cpp b/MantidQt/MantidWidgets/src/MWView.cpp
index 68f622faaff6edbb1a93f3b12871e1271175c357..af182a45f5259a3ab73625e88803d313d214e09f 100644
--- a/MantidQt/MantidWidgets/src/MWView.cpp
+++ b/MantidQt/MantidWidgets/src/MWView.cpp
@@ -1,5 +1,4 @@
 #include "MantidQtMantidWidgets/MWView.h"
-#include <boost/math/special_functions/fpclassify.hpp>
 // includes for workspace handling
 #include "MantidAPI/MatrixWorkspace.h"
 #include "MantidGeometry/MDGeometry/MDTypes.h"
@@ -16,6 +15,7 @@
 #include <qwt_color_map.h>
 #include <qwt_double_rect.h>
 // system includes
+#include <cmath>
 
 namespace {
 Mantid::Kernel::Logger g_log("MWView");
@@ -219,8 +219,7 @@ void MWView::checkRangeLimits() {
       max = min;
       min = tmp;
     }
-    if (boost::math::isnan(min) || boost::math::isinf(min) ||
-        boost::math::isnan(max) || boost::math::isinf(max)) {
+    if (!std::isfinite(min) || !std::isfinite(max)) {
       mess << "Dimension " << m_workspace->getDimension(d)->getName()
            << " has a bad range: (";
       mess << min << ", " << max << ")\n";
diff --git a/MantidQt/MantidWidgets/src/MuonFitDataSelector.cpp b/MantidQt/MantidWidgets/src/MuonFitDataSelector.cpp
index 0a904f551eddcb8b069266931113393f0ff0da32..4d709e45a8eeb4219df919e976fe8029b320029f 100644
--- a/MantidQt/MantidWidgets/src/MuonFitDataSelector.cpp
+++ b/MantidQt/MantidWidgets/src/MuonFitDataSelector.cpp
@@ -111,10 +111,21 @@ void MuonFitDataSelector::userChangedRuns() {
 
 /**
  * Sets group names and updates checkboxes on UI
- * By default sets all checked
+ * By default sets all unchecked
  * @param groups :: [input] List of group names
  */
 void MuonFitDataSelector::setAvailableGroups(const QStringList &groups) {
+  // If it's the same list, do nothing
+  if (groups.size() == m_groupBoxes.size()) {
+    auto existingGroups = m_groupBoxes.keys();
+    auto newGroups = groups;
+    qSort(existingGroups);
+    qSort(newGroups);
+    if (existingGroups == newGroups) {
+      return;
+    }
+  }
+
   clearGroupCheckboxes();
   for (const auto group : groups) {
     addGroupCheckbox(group);
@@ -251,8 +262,8 @@ void MuonFitDataSelector::setDefaultValues() {
   this->setStartTime(0.0);
   this->setEndTime(0.0);
   setPeriodCombination(false);
-  m_ui.txtSimFitLabel->setText("Label");
-  emit simulLabelChanged(); // make sure default "Label" is set
+  m_ui.txtSimFitLabel->setText("0");
+  emit simulLabelChanged(); // make sure default "0" is set
 }
 
 /**
@@ -266,13 +277,13 @@ void MuonFitDataSelector::setPeriodVisibility(bool visible) {
 
 /**
  * Add a new checkbox to the list of groups with given name
- * The new checkbox is checked by default
+ * The new checkbox is unchecked by default
  * @param name :: [input] Name of group to add
  */
 void MuonFitDataSelector::addGroupCheckbox(const QString &name) {
   auto checkBox = new QCheckBox(name);
   m_groupBoxes.insert(name, checkBox);
-  checkBox->setChecked(true);
+  checkBox->setChecked(false);
   m_ui.verticalLayoutGroups->addWidget(checkBox);
   connect(checkBox, SIGNAL(clicked(bool)), this,
           SIGNAL(selectedGroupsChanged()));
@@ -392,7 +403,9 @@ QStringList MuonFitDataSelector::getChosenGroups() const {
 void MuonFitDataSelector::setChosenGroup(const QString &group) {
   for (auto iter = m_groupBoxes.constBegin(); iter != m_groupBoxes.constEnd();
        ++iter) {
-    iter.value()->setChecked(iter.key() == group);
+    if (iter.key() == group) {
+      iter.value()->setChecked(true);
+    }
   }
 }
 
diff --git a/MantidQt/MantidWidgets/src/MuonFitPropertyBrowser.cpp b/MantidQt/MantidWidgets/src/MuonFitPropertyBrowser.cpp
index f052822a45f7f5892b6549d9b09398534f2a84ed..c0b173767099c2809f1dd1db518f60e2259aeb4f 100644
--- a/MantidQt/MantidWidgets/src/MuonFitPropertyBrowser.cpp
+++ b/MantidQt/MantidWidgets/src/MuonFitPropertyBrowser.cpp
@@ -61,7 +61,8 @@ const std::string MuonFitPropertyBrowser::SIMULTANEOUS_PREFIX{"MuonSimulFit_"};
 */
 MuonFitPropertyBrowser::MuonFitPropertyBrowser(QWidget *parent,
                                                QObject *mantidui)
-    : FitPropertyBrowser(parent, mantidui) {}
+    : FitPropertyBrowser(parent, mantidui), m_additionalLayout(nullptr),
+      m_widgetSplitter(nullptr) {}
 
 /**
 * Initialise the muon fit property browser.
@@ -230,6 +231,19 @@ void MuonFitPropertyBrowser::doubleChanged(QtProperty *prop) {
   }
 }
 
+/** Called when a bool property changed
+ * @param prop :: A pointer to the property
+ */
+void MuonFitPropertyBrowser::boolChanged(QtProperty *prop) {
+  if (prop == m_rawData) {
+    const bool val = m_boolManager->value(prop);
+    emit fitRawDataClicked(val);
+  } else {
+    // defer to parent class
+    FitPropertyBrowser::boolChanged(prop);
+  }
+}
+
 /**
 *Get the registered function names
 */
diff --git a/MantidQt/MantidWidgets/src/SaveWorkspaces.cpp b/MantidQt/MantidWidgets/src/SaveWorkspaces.cpp
index e4a205e1e667708e2c7e230d5929587ab67ecf3f..c35d5a99eec4b63445c2292ff7ee9f7312edc4b2 100644
--- a/MantidQt/MantidWidgets/src/SaveWorkspaces.cpp
+++ b/MantidQt/MantidWidgets/src/SaveWorkspaces.cpp
@@ -265,20 +265,22 @@ QString SaveWorkspaces::saveList(const QList<QListWidgetItem *> &wspaces,
       MatrixWorkspace_sptr matrix_workspace =
           boost::dynamic_pointer_cast<MatrixWorkspace>(workspace_ptr);
       if (matrix_workspace) {
-        if (matrix_workspace->getInstrument()->getName() == "SANS2D")
+        if (matrix_workspace->getInstrument()->getName() == "SANS2D") {
           saveCommands += "'front-detector, rear-detector'";
-        if (matrix_workspace->getInstrument()->getName() == "LOQ")
+        }
+        if (matrix_workspace->getInstrument()->getName() == "LOQ") {
           saveCommands += "'HAB, main-detector-bank'";
-      } else {
-        // g_log.wa
+        }
+
+        // Add the geometry information
+        emit updateGeometryInformation();
+        // Remove the first three characters, since they are unwanted
+        saveCommands += ", Geometry='" + m_geometryID + "', SampleHeight=" +
+                        m_sampleHeight + ", SampleWidth=" + m_sampleWidth +
+                        ", SampleThickness=" + m_sampleThickness;
       }
     }
-    // Add the geometry information
-    emit updateGeometryInformation();
-    // Remove the first three characters, since they are unwanted
-    saveCommands += ", Geometry='" + m_geometryID + "', SampleHeight=" +
-                    m_sampleHeight + ", SampleWidth=" + m_sampleWidth +
-                    ", SampleThickness=" + m_sampleThickness;
+
     saveCommands += ")\n";
   }
   return saveCommands;
diff --git a/MantidQt/SliceViewer/src/SliceViewer.cpp b/MantidQt/SliceViewer/src/SliceViewer.cpp
index b7686ea1cf8c39e9da968995296ecbf187a3b831..116019d6e974bda748ccc07967c707b31c1c8784 100644
--- a/MantidQt/SliceViewer/src/SliceViewer.cpp
+++ b/MantidQt/SliceViewer/src/SliceViewer.cpp
@@ -3,7 +3,6 @@
 #include <sstream>
 #include <vector>
 #include <boost/make_shared.hpp>
-#include <boost/math/special_functions/fpclassify.hpp>
 
 #include "MantidKernel/UsageService.h"
 #include "MantidAPI/CoordTransform.h"
@@ -728,8 +727,7 @@ void SliceViewer::setWorkspace(Mantid::API::IMDWorkspace_sptr ws) {
       max = min;
       min = tmp;
     }
-    if (boost::math::isnan(min) || boost::math::isinf(min) ||
-        boost::math::isnan(max) || boost::math::isinf(max)) {
+    if (!std::isfinite(min) || !std::isfinite(max)) {
       mess << "Dimension " << m_ws->getDimension(d)->getName()
            << " has a bad range: (";
       mess << min << ", " << max << ")\n";
diff --git a/Testing/SystemTests/tests/analysis/CalibrateRectangularDetector_Test.py b/Testing/SystemTests/tests/analysis/CalibrateRectangularDetector_Test.py
index cacfbacdd14ecd3e9f86f5d6b609d758fb313ec6..d3c6257b37d3d164b9619cf83be774d4614ccac8 100644
--- a/Testing/SystemTests/tests/analysis/CalibrateRectangularDetector_Test.py
+++ b/Testing/SystemTests/tests/analysis/CalibrateRectangularDetector_Test.py
@@ -95,10 +95,14 @@ class PG3CCCalibration(stresstesting.MantidStressTest):
         LoadCalFile(InputWorkspace="PG3_2538_calibrated", CalFileName=self.saved_cal_file,
                     WorkspaceName="PG3_2538", MakeGroupingWorkspace=False)
         MaskDetectors(Workspace="PG3_2538_offsets",MaskedWorkspace="PG3_2538_mask")
+        MaskBTP(Workspace="PG3_2538_offsets", Pixel="0,6")
+        MaskBTP(Workspace="PG3_2538_offsets",Tube="0-24,129-153")
         # load golden cal file
         LoadCalFile(InputWorkspace="PG3_2538_calibrated", CalFileName="PG3_goldenCC.cal",
                     WorkspaceName="PG3_2538_golden", MakeGroupingWorkspace=False)
         MaskDetectors(Workspace="PG3_2538_golden_offsets",MaskedWorkspace="PG3_2538_golden_mask")
+        MaskBTP(Workspace="PG3_2538_golden_offsets",Pixel="0,6")
+        MaskBTP(Workspace="PG3_2538_golden_offsets",Tube="0-24,129-153")
 
     def validateMethod(self):
         return "ValidateWorkspaceToWorkspace"
diff --git a/Testing/SystemTests/tests/analysis/ISISIndirectInelastic.py b/Testing/SystemTests/tests/analysis/ISISIndirectInelastic.py
index c96044328c0c1fdb58f49d9b151f0e7adb662fa3..4966ab4a55e7f9f3565319023c0d1976d5300e90 100644
--- a/Testing/SystemTests/tests/analysis/ISISIndirectInelastic.py
+++ b/Testing/SystemTests/tests/analysis/ISISIndirectInelastic.py
@@ -800,14 +800,16 @@ class OSIRISIqtAndIqtFit(ISISIndirectInelasticIqtAndIqtFit):
         self.num_bins = 4
 
         # Iqt Seq Fit
-        self.func = r'name=LinearBackground,A0=0,A1=0,ties=(A1=0);name=UserFunction,Formula=Intensity*exp(-(x/Tau)),'\
-                     'Intensity=0.304185,Tau=100;ties=(f1.Intensity=1-f0.A0)'
+        self.func = r'composite=CompositeFunction,NumDeriv=1;name=LinearBackground,A0=0,A1=0,ties=(A1=0);'\
+                    'name=UserFunction,Formula=Intensity*exp(-(x/Tau)),'\
+                    'Intensity=0.304185,Tau=100;ties=(f1.Intensity=1-f0.A0)'
         self.ftype = '1E_s'
         self.spec_max = 41
-        self.startx = 0.022861
+        self.startx = 0.0
         self.endx = 0.118877
 
     def get_reference_files(self):
+        self.tolerance = 1e-4
         return ['II.OSIRISFury.nxs',
                 'II.OSIRISFuryFitSeq.nxs']
 
@@ -826,14 +828,16 @@ class IRISIqtAndIqtFit(ISISIndirectInelasticIqtAndIqtFit):
         self.num_bins = 4
 
         # Iqt Seq Fit
-        self.func = r'name=LinearBackground,A0=0,A1=0,ties=(A1=0);name=UserFunction,Formula=Intensity*exp(-(x/Tau)),'\
-                     'Intensity=0.355286,Tau=100;ties=(f1.Intensity=1-f0.A0)'
+        self.func = r'composite=CompositeFunction,NumDeriv=1;name=LinearBackground,A0=0,A1=0,ties=(A1=0);'\
+                    'name=UserFunction,Formula=Intensity*exp(-(x/Tau)),'\
+                    'Intensity=0.355286,Tau=100;ties=(f1.Intensity=1-f0.A0)'
         self.ftype = '1E_s'
         self.spec_max = 50
-        self.startx = 0.013717
+        self.startx = 0.0
         self.endx = 0.169171
 
     def get_reference_files(self):
+        self.tolerance = 1e-4
         return ['II.IRISFury.nxs',
                 'II.IRISFuryFitSeq.nxs']
 
@@ -931,6 +935,7 @@ class OSIRISIqtAndIqtFitMulti(ISISIndirectInelasticIqtAndIqtFitMulti):
         self.spec_max = 41
 
     def get_reference_files(self):
+        self.tolerance = 1e-3
         return ['II.OSIRISIqt.nxs',
                 'II.OSIRISIqtFitMulti.nxs']
 
@@ -952,12 +957,13 @@ class IRISIqtAndIqtFitMulti(ISISIndirectInelasticIqtAndIqtFitMulti):
 
         # Iqt Fit
         self.func = r'name=LinearBackground,A0=0.584488,A1=0,ties=(A1=0);name=UserFunction,Formula=Intensity*exp( -(x/Tau)^Beta),'\
-                     'Intensity=0.415512,Tau=4.848013e-14,Beta=0.022653;ties=(f1.Intensity=1-f0.A0)'
+                     'Intensity=0.415512,Beta=0.022653;ties=(f1.Intensity=1-f0.A0,f1.Tau=0.05)'
         self.ftype = '1S_s'
         self.startx = 0.0
         self.endx = 0.156250
 
     def get_reference_files(self):
+        self.tolerance = 1e-4
         return ['II.IRISFury.nxs',
                 'II.IRISFuryFitMulti.nxs']
 
@@ -1021,7 +1027,8 @@ class OSIRISConvFit(ISISIndirectInelasticConvFit):
         self.resolution = FileFinder.getFullPath('osi97935_graphite002_res.nxs')
         #ConvFit fit function
         self.func = 'name=LinearBackground,A0=0,A1=0;(composite=Convolution,FixResolution=true,NumDeriv=true;'\
-                    'name=Resolution,Workspace=\"%s\";name=Lorentzian,Amplitude=2,PeakCentre=0,FWHM=0.05)' % self.resolution
+                    'name=Resolution,Workspace=\"%s\";name=Lorentzian,Amplitude=2,FWHM=0.002,ties=(PeakCentre=0)'\
+                    ',constraints=(FWHM>0.002))' % self.resolution
         self.startx = -0.2
         self.endx = 0.2
         self.bg = 'Fit Linear'
@@ -1032,6 +1039,7 @@ class OSIRISConvFit(ISISIndirectInelasticConvFit):
         self.result_names = ['osi97935_graphite002_conv_1LFitL_s0_to_41_Result']
 
     def get_reference_files(self):
+        self.tolerance = 0.015
         return ['II.OSIRISConvFitSeq.nxs']
 
 #------------------------- IRIS tests -----------------------------------------
@@ -1043,9 +1051,11 @@ class IRISConvFit(ISISIndirectInelasticConvFit):
         self.sample = 'irs53664_graphite002_red.nxs'
         self.resolution = FileFinder.getFullPath('irs53664_graphite002_res.nxs')
         #ConvFit fit function
-        self.func = 'name=LinearBackground,A0=0.060623,A1=0.001343;(composite=Convolution,FixResolution=true,NumDeriv=true;'\
-                    'name=Resolution,Workspace=\"%s\";name=Lorentzian,Amplitude=1.033150,PeakCentre=-0.000841,FWHM=0.001576)'\
-                    % (self.resolution)
+        self.func = 'name=LinearBackground,A0=0.060623,A1=0.001343;' \
+                    '(composite=Convolution,FixResolution=true,NumDeriv=true;' \
+                    'name=Resolution,Workspace="%s";name=Lorentzian,Amplitude=1.033150,FWHM=0.001576,'\
+                    'ties=(PeakCentre=0.0),constraints=(FWHM>0.001))' % self.resolution
+
         self.startx = -0.2
         self.endx = 0.2
         self.bg = 'Fit Linear'
@@ -1056,6 +1066,7 @@ class IRISConvFit(ISISIndirectInelasticConvFit):
         self.result_names = ['irs53664_graphite002_conv_1LFitL_s0_to_50_Result']
 
     def get_reference_files(self):
+        self.tolerance = 0.13
         return ['II.IRISConvFitSeq.nxs']
 
 #==============================================================================
diff --git a/Testing/SystemTests/tests/analysis/VesuvioFittingTest.py b/Testing/SystemTests/tests/analysis/VesuvioFittingTest.py
index e20643fd648938e5828b83696f1a945a8cbc05a1..0c81c00ab8b09545c386319f857332af4a44526f 100644
--- a/Testing/SystemTests/tests/analysis/VesuvioFittingTest.py
+++ b/Testing/SystemTests/tests/analysis/VesuvioFittingTest.py
@@ -108,6 +108,6 @@ class VesuvioFittingWithQuadraticBackgroundTest(stresstesting.MantidStressTest):
         self.assertTrue(WS_PREFIX + "_NormalisedCovarianceMatrix" in mtd, "Expected covariance workspace in ADS")
 
     def validate(self):
-        self.tolerance = 1.1e-2 # 1.1e-2 for all systems as some Linuxes also require larger tolerance
+        self.tolerance = 1.2e-2 # 1.2e-2 for all systems as some Linuxes also require larger tolerance
         self.disableChecking.append('SpectraMap')
         return "fit_Workspace","VesuvioFittingWithQuadraticBackgroundTest.nxs"
diff --git a/Testing/SystemTests/tests/analysis/WeightedLeastSquaresTest.py b/Testing/SystemTests/tests/analysis/WeightedLeastSquaresTest.py
index a998918e56a6c0ff8b0d6d92350af70ea43c38a5..cad3a0fb1bcef1bbe1998d2a796644de133f0fed 100644
--- a/Testing/SystemTests/tests/analysis/WeightedLeastSquaresTest.py
+++ b/Testing/SystemTests/tests/analysis/WeightedLeastSquaresTest.py
@@ -118,27 +118,6 @@ class TwoGaussPeaksEVSData(unittest.TestCase):
         if not self.__class__.workspace:
             self.__class__.workspace = load_fitting_test_file_ascii(self.filename)
 
-    def test_misses_expected_solution(self):
-        """
-        Use default Mantid Levenberg-Marquardt minimizer, which for this example it does not get to the expected
-        solution (minimum), starting from the below specified initial guess of the fitting parameters
-        """
-        function = self.function_template.format('Height=0.01,PeakCentre=0.00037,Sigma=1e-05',
-                                                 'Height=0.0979798,PeakCentre=0.000167,Sigma=1e-05')
-        expected_params = [-0.02830944965319149, 0.0003966626475232753, 3.2690103473132937e-06, 0.04283560333422615,
-                           -82.49982468272542, 0.13971885301153036, 0.00016591941312628293, 9.132514633819799e-06]
-        expected_errors = [0.007480178355054269, 9.93278345856534e-07, 9.960514853350883e-07, 0.0017945463077016224,
-                           4.9824412855830404, 0.004955791268590802, 3.695975249653185e-07, 3.8197105944596216e-07]
-
-        # osx exception. Big difference in the error estimation for the sigma of the first peak
-        import sys
-        if "darwin" == sys.platform:
-            expected_errors[2] = 1.0077697381037357e-06
-
-        params, errors = run_fit(self.workspace, function, 'Levenberg-Marquardt')
-        compare_relative_errors(params, expected_params, tolerance=2e-5)
-        compare_relative_errors(errors, expected_errors, tolerance=1e-2)
-
     def test_good_initial_guess(self):
         """
         Same as test_misses_expected_solution but starting from a different initial guess of the fitting
@@ -152,18 +131,9 @@ class TwoGaussPeaksEVSData(unittest.TestCase):
         expected_errors = [0.00655660314595665, 3.021546058414827e-07, 3.0766264397350073e-07, 0.0023835827954566415,
                            5.996463420450547, 0.003059328883379551, 6.632752531256318e-07, 7.707070805005832e-07]
 
-        # osx and windows exception
-        import sys
-        if "darwin" == sys.platform:
-            # This is on osx; on win7-release, slightly different, see below
-            expected_errors[2] = 3.027791099421756e-07
-            expected_errors[7] = 7.797742226241165e-07
-        if "win32" == sys.platform:
-            expected_errors[2] = 3.0277910994217546e-07
-
         params, errors = run_fit(self.workspace, function, 'Levenberg-Marquardt')
-        compare_relative_errors(params, expected_params, tolerance=1e-5)
-        compare_relative_errors(errors, expected_errors, tolerance=1e-2)
+        compare_relative_errors(params, expected_params, tolerance=3e-1)
+        compare_relative_errors(errors, expected_errors, tolerance=3e-1)
 
 
 class SineLikeMuonExperimentAsymmetry(unittest.TestCase):
diff --git a/Testing/SystemTests/tests/analysis/reference/II.IRISConvFitSeq.nxs.md5 b/Testing/SystemTests/tests/analysis/reference/II.IRISConvFitSeq.nxs.md5
index e0952eae655bd2eee4e2107535b892b84502bdbb..b1a5801b71cb3b8b157ae8744d9fb6c995e555a9 100644
--- a/Testing/SystemTests/tests/analysis/reference/II.IRISConvFitSeq.nxs.md5
+++ b/Testing/SystemTests/tests/analysis/reference/II.IRISConvFitSeq.nxs.md5
@@ -1 +1 @@
-198c7c3e2acfbca86c321561b25be63f
\ No newline at end of file
+1422d82bb9d0a03af6d6ced4e2b06b6f
diff --git a/Testing/SystemTests/tests/analysis/reference/II.IRISFuryFitMulti.nxs.md5 b/Testing/SystemTests/tests/analysis/reference/II.IRISFuryFitMulti.nxs.md5
index 7ee97fbbcb40cd5c9ce56e82ee344378f412d72a..b55ff31e038093bdd654248b38408417844210d4 100644
--- a/Testing/SystemTests/tests/analysis/reference/II.IRISFuryFitMulti.nxs.md5
+++ b/Testing/SystemTests/tests/analysis/reference/II.IRISFuryFitMulti.nxs.md5
@@ -1 +1 @@
-e03bcfdbe7be536f96af1bcef6ebb108
\ No newline at end of file
+94d5a6a78c9ca59dcc2551df223f47e6
diff --git a/Testing/SystemTests/tests/analysis/reference/II.IRISFuryFitSeq.nxs.md5 b/Testing/SystemTests/tests/analysis/reference/II.IRISFuryFitSeq.nxs.md5
index 568f5c167d64706f38b0deee585840fee72b0d2f..6f05c17b9074d4630fcd794e2f76d7e1d1657155 100644
--- a/Testing/SystemTests/tests/analysis/reference/II.IRISFuryFitSeq.nxs.md5
+++ b/Testing/SystemTests/tests/analysis/reference/II.IRISFuryFitSeq.nxs.md5
@@ -1 +1 @@
-1d2482d4f5fc5540aa2c4a7da7b8f030
\ No newline at end of file
+e78ad9475ae688019959278aabaa93b2
diff --git a/Testing/SystemTests/tests/analysis/reference/II.OSIRISConvFitSeq.nxs.md5 b/Testing/SystemTests/tests/analysis/reference/II.OSIRISConvFitSeq.nxs.md5
index 6cfaeb768dbc03e18989a7b761bd4a4e1035a925..ecf647beed2ace9eb8b23f46528b5b8712c2f9de 100644
--- a/Testing/SystemTests/tests/analysis/reference/II.OSIRISConvFitSeq.nxs.md5
+++ b/Testing/SystemTests/tests/analysis/reference/II.OSIRISConvFitSeq.nxs.md5
@@ -1 +1 @@
-8b7d8c29d94bd766ef494a3cc6079527
\ No newline at end of file
+2df8471d3da39e8a5796888ff5884c4f
diff --git a/Testing/SystemTests/tests/analysis/reference/II.OSIRISFuryFitSeq.nxs.md5 b/Testing/SystemTests/tests/analysis/reference/II.OSIRISFuryFitSeq.nxs.md5
index 53b9426c75209347bb889865ffeed420599f8f86..8b6e9b9433518fea424726921ea3b0a0524cb30b 100644
--- a/Testing/SystemTests/tests/analysis/reference/II.OSIRISFuryFitSeq.nxs.md5
+++ b/Testing/SystemTests/tests/analysis/reference/II.OSIRISFuryFitSeq.nxs.md5
@@ -1 +1 @@
-f24ce578d938ba1f4ab181ece1bf1e97
\ No newline at end of file
+cc9dd7fb5fd6e357cdc8183b08e42b79
diff --git a/Vates/ParaviewPlugins/ParaViewFilters/SplatterPlot/vtkSplatterPlot.cxx b/Vates/ParaviewPlugins/ParaViewFilters/SplatterPlot/vtkSplatterPlot.cxx
index d84a88fa150ef722429285cb4c640bc65db5c31c..a5c0d9010671d79dd82997b90ab62afe69a600c9 100644
--- a/Vates/ParaviewPlugins/ParaViewFilters/SplatterPlot/vtkSplatterPlot.cxx
+++ b/Vates/ParaviewPlugins/ParaViewFilters/SplatterPlot/vtkSplatterPlot.cxx
@@ -81,10 +81,16 @@ double vtkSplatterPlot::getTime() const
   return m_time;
 }
 
-int vtkSplatterPlot::RequestData(vtkInformation *,
+int vtkSplatterPlot::RequestData(vtkInformation * info,
                                  vtkInformationVector **inputVector,
                                  vtkInformationVector *outputVector)
 {
+  if (nullptr == m_presenter) {
+    /// If the presenter is not already setup attempt to set it up now
+    /// this might fail, which is handled by the next selection statement
+    this->RequestInformation(info, inputVector, outputVector);
+  }
+
   if (nullptr != m_presenter) {
     // Get the info objects
     vtkInformation *outInfo = outputVector->GetInformationObject(0);
@@ -132,21 +138,29 @@ int vtkSplatterPlot::RequestInformation(vtkInformation *,
                                         vtkInformationVector *)
 {
   if (nullptr == m_presenter) {
-    std::string scalarName = "signal";
-    m_presenter = Mantid::Kernel::make_unique<vtkSplatterPlotFactory>(
-        boost::make_shared<NoThresholdRange>(), scalarName, m_numberPoints,
-        m_topPercentile);
 
-    // Get the info objects
-    vtkInformation *inInfo = inputVector[0]->GetInformationObject(0);
-    vtkDataSet *input = vtkDataSet::SafeDownCast(
-      inInfo->Get(vtkDataObject::DATA_OBJECT()));
+    try {
+      std::string scalarName = "signal";
+      m_presenter = Mantid::Kernel::make_unique<vtkSplatterPlotFactory>(
+            boost::make_shared<NoThresholdRange>(), scalarName, m_numberPoints,
+            m_topPercentile);
+
+      // Get the info objects
+      vtkInformation *inInfo = inputVector[0]->GetInformationObject(0);
+      vtkDataSet *input = vtkDataSet::SafeDownCast(
+            inInfo->Get(vtkDataObject::DATA_OBJECT()));
+      m_wsName = Mantid::VATES::vtkDataSetToWsName::exec(input);
+      // Get the workspace from the ADS
+      ADSWorkspaceProvider<IMDWorkspace> workspaceProvider;
+      Workspace_sptr result = workspaceProvider.fetchWorkspace(m_wsName);
+      m_presenter->initialize(result);
+    } catch (const std::runtime_error) {
+      // Catch incase something goes wrong. It might be that the splatter
+      // plot source is not yet setup correctly and we'll need to run this
+      // call again later.
+      m_presenter = nullptr;
+    }
 
-    m_wsName = Mantid::VATES::vtkDataSetToWsName::exec(input);
-    // Get the workspace from the ADS
-    ADSWorkspaceProvider<IMDWorkspace> workspaceProvider;
-    Workspace_sptr result = workspaceProvider.fetchWorkspace(m_wsName);
-    m_presenter->initialize(result);
   }
   return 1;
 }
diff --git a/Vates/VatesAPI/src/MetaDataExtractorUtils.cpp b/Vates/VatesAPI/src/MetaDataExtractorUtils.cpp
index c82485a2a3d827c305ecbc4e837dafd27e745538..5d520a305637464ca464502c7f0ed4e533f00b64 100644
--- a/Vates/VatesAPI/src/MetaDataExtractorUtils.cpp
+++ b/Vates/VatesAPI/src/MetaDataExtractorUtils.cpp
@@ -96,17 +96,16 @@ MetaDataExtractorUtils::getMinAndMax(Mantid::API::IMDWorkspace_sptr workspace) {
       double minSignal = DBL_MAX;
       double maxSignal = -DBL_MAX;
 
-      auto inf = std::numeric_limits<double>::infinity();
       for (size_t i = 0; i < iterators.size(); i++) {
         delete iterators[i];
 
         double signal;
         signal = intervals[i].minValue();
-        if (signal != inf && signal < minSignal)
+        if (!std::isinf(signal) && signal < minSignal)
           minSignal = signal;
 
         signal = intervals[i].maxValue();
-        if (signal != inf && signal > maxSignal)
+        if (!std::isinf(signal) && signal > maxSignal)
           maxSignal = signal;
       }
 
@@ -157,7 +156,7 @@ MetaDataExtractorUtils::getRange(Mantid::API::IMDIterator *it) {
     double signal = it->getNormalizedSignal();
 
     // Skip any 'infs' as it screws up the color scale
-    if (signal != inf) {
+    if (!std::isinf(signal)) {
       if (signal == 0.0)
         minSignalZeroCheck = signal;
       if (signal < minSignal && signal > 0.0)
diff --git a/Vates/VatesAPI/src/SaveMDWorkspaceToVTKImpl.cpp b/Vates/VatesAPI/src/SaveMDWorkspaceToVTKImpl.cpp
index 50144a6cd49a43cca6dd2fa3cd152d31f06cfc46..4f33bb074d3d43c19377c75c3b747e241b9783c7 100644
--- a/Vates/VatesAPI/src/SaveMDWorkspaceToVTKImpl.cpp
+++ b/Vates/VatesAPI/src/SaveMDWorkspaceToVTKImpl.cpp
@@ -17,9 +17,12 @@
 #include "MantidGeometry/MDGeometry/IMDDimension.h"
 #include "MantidKernel/make_unique.h"
 
-#include <vtkSmartPointer.h>
-#include <vtkXMLStructuredGridWriter.h>
-#include <vtkXMLUnstructuredGridWriter.h>
+#include "vtkFloatArray.h"
+#include "vtkNew.h"
+#include "vtkSmartPointer.h"
+#include "vtkStructuredGrid.h"
+#include "vtkXMLStructuredGridWriter.h"
+#include "vtkXMLUnstructuredGridWriter.h"
 
 #include <boost/make_shared.hpp>
 #include <memory>
@@ -95,6 +98,25 @@ void SaveMDWorkspaceToVTKImpl::saveMDWorkspace(
   dataSet = getDataSetWithOrthogonalCorrection(dataSet, presenter.get(),
                                                workspace, isHistoWorkspace);
 
+  // ParaView 5.1 checks the range of the entire signal array, including blank
+  // cells.
+  if (isHistoWorkspace) {
+    auto structuredGrid = vtkStructuredGrid::SafeDownCast(dataSet);
+    vtkIdType imageSize = structuredGrid->GetNumberOfCells();
+    vtkNew<vtkFloatArray> signal;
+    signal->SetNumberOfComponents(1);
+    signal->SetNumberOfTuples(imageSize);
+    auto oldSignal = structuredGrid->GetCellData()->GetScalars();
+    for (vtkIdType index = 0; index < imageSize; ++index) {
+      if (structuredGrid->IsCellVisible(index)) {
+        signal->SetComponent(index, 0, oldSignal->GetTuple1(index));
+      } else {
+        signal->SetComponent(index, 0, std::numeric_limits<float>::quiet_NaN());
+      }
+    }
+    structuredGrid->GetCellData()->SetScalars(signal.GetPointer());
+  }
+
   // Write the data to the file
   vtkSmartPointer<vtkXMLWriter> writer = getXMLWriter(isHistoWorkspace);
   auto writeSuccessFlag = writeDataSetToVTKFile(writer, dataSet, fullFilename);
diff --git a/Vates/VatesAPI/src/vtkMDHistoHex4DFactory.cpp b/Vates/VatesAPI/src/vtkMDHistoHex4DFactory.cpp
index 49b10fd7cc5ec202d0121917bdb0377ab39ba1f5..5851197f8bad4117365f35c50e1508c377f93eb8 100644
--- a/Vates/VatesAPI/src/vtkMDHistoHex4DFactory.cpp
+++ b/Vates/VatesAPI/src/vtkMDHistoHex4DFactory.cpp
@@ -5,7 +5,6 @@
 #include "MantidVatesAPI/TimeToTimeStep.h"
 #include "MantidVatesAPI/vtkMDHistoHex4DFactory.h"
 #include "MantidVatesAPI/ProgressAction.h"
-#include <boost/math/special_functions/fpclassify.hpp>
 
 using Mantid::API::IMDWorkspace;
 using Mantid::Kernel::CPUTimer;
diff --git a/Vates/VatesAPI/src/vtkPeakMarkerFactory.cpp b/Vates/VatesAPI/src/vtkPeakMarkerFactory.cpp
index 3003756dacf10cfe75be1f718e01be09fb07c810..3cb9226b654d3aad2a545248596e515d6a94f0f0 100644
--- a/Vates/VatesAPI/src/vtkPeakMarkerFactory.cpp
+++ b/Vates/VatesAPI/src/vtkPeakMarkerFactory.cpp
@@ -1,6 +1,5 @@
 #include "MantidVatesAPI/vtkPeakMarkerFactory.h"
 #include "MantidVatesAPI/ProgressAction.h"
-#include <boost/math/special_functions/fpclassify.hpp>
 #include "MantidAPI/Workspace.h"
 #include "MantidAPI/IPeaksWorkspace.h"
 #include "MantidGeometry/Crystal/PeakShape.h"
diff --git a/Vates/VatesAPI/src/vtkSplatterPlotFactory.cpp b/Vates/VatesAPI/src/vtkSplatterPlotFactory.cpp
index 8c0e86e681f1b0e7aa2aec8baddf2cf90655a468..8a92822e55fdbafc5cf17b28dc38aa5c2902a19d 100644
--- a/Vates/VatesAPI/src/vtkSplatterPlotFactory.cpp
+++ b/Vates/VatesAPI/src/vtkSplatterPlotFactory.cpp
@@ -30,7 +30,6 @@
 #include <vtkVertex.h>
 
 #include <algorithm>
-#include <boost/math/special_functions/fpclassify.hpp>
 #include <iterator>
 #include <qwt_double_interval.h>
 
diff --git a/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/ColorSelectionWidget.h b/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/ColorSelectionWidget.h
index e2b748a67e07d8a173a8a5598cf66122e2ca0f47..d30e3df512d84ea4c3061e111ad3f236ea8fe3fa 100644
--- a/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/ColorSelectionWidget.h
+++ b/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/ColorSelectionWidget.h
@@ -57,13 +57,13 @@ public:
   ~ColorSelectionWidget() override {}
 
   /// Get the auto color scaling state
-  bool getAutoScaleState();
+  bool getAutoScaleState() const;
   /// Get the log scale state
-  bool getLogScaleState();
+  bool getLogScaleState() const;
   /// Get the minimum color range value
-  double getMinRange();
+  double getMinRange() const;
   /// Get the maximum color range value
-  double getMaxRange();
+  double getMaxRange() const;
   /// Load the default color map
   void loadColorMap(bool viewSwitched);
   /// Programmatically enable/disable auto scaling of color range
@@ -82,6 +82,10 @@ public:
   void setColorScaleLock(Mantid::VATES::ColorScaleLock *lock);
   /// Is the color scale locked
   bool isColorScaleLocked() const;
+  /// Save the state of the widget to a Mantid project file
+  std::string saveToProject() const;
+  /// Load the state of the widget from a Mantid project file
+  void loadFromProject(const std::string &lines);
 
 public slots:
   /// Set state for all control widgets.
diff --git a/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/MdViewerWidget.h b/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/MdViewerWidget.h
index d535fc0349d7aea2498abf03c6ce1d2f7857b5a1..9deb82e95360f9dfe061775a8eb2a53b5c632b5d 100644
--- a/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/MdViewerWidget.h
+++ b/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/MdViewerWidget.h
@@ -91,6 +91,10 @@ public:
                        std::string instrumentName) override;
   /// See MantidQt::API::VatesViewerInterface
   void setupPluginMode() override;
+  /// Load the state of the window from a Mantid project file
+  void loadFromProject(const std::string &lines) override;
+  /// Save the state of the window to a Mantid project file
+  std::string saveToProject(ApplicationWindow *app) override;
 
 public slots:
   /// Seet MantidQt::API::VatesViewerInterface
@@ -215,7 +219,8 @@ private:
   void setupUiAndConnections();
   /// Create the requested view.
   ViewBase *createAndSetMainViewWidget(QWidget *container,
-                                       ModeControlWidget::Views v);
+                                       ModeControlWidget::Views v,
+                                       bool createRenderProxy = true);
   /// Helper function to swap current and hidden view pointers.
   void swapViews();
   /// Update the state of application widgets.
@@ -267,6 +272,12 @@ private:
   void restoreViewState(ViewBase *view, ModeControlWidget::Views vtype);
   /// Get the current grid axes setting
   bool areGridAxesOn();
+  /// Load the state of VSI from an XML file
+  bool loadVSIState(const std::string &fileName);
+  /// Setup the view using the last active view and source from a project
+  void setupViewFromProject(ModeControlWidget::Views vtype);
+  /// Set the active objects on the current server
+  void setActiveObjects(pqView *view, pqPipelineSource *source);
 };
 
 } // SimpleGui
diff --git a/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/MultisliceView.h b/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/MultisliceView.h
index d76a9e00bc7382b7f5a6b80ff25113f39d67ec1b..f8e622c278dd425062d81a4b43eda7c489dff8ea 100644
--- a/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/MultisliceView.h
+++ b/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/MultisliceView.h
@@ -53,9 +53,11 @@ public:
    * Default constructor.
    * @param parent the parent widget of the multislice view widget
    * @param rebinnedSourcesManager Pointer to a RebinnedSourcesManager
+   * @param createRenderProxy :: Whether to create a render proxy for this view
    */
   MultiSliceView(QWidget *parent = 0,
-                 RebinnedSourcesManager *rebinnedSourcesManager = 0);
+                 RebinnedSourcesManager *rebinnedSourcesManager = 0,
+                 bool createRenderProxy = true);
   /// Default constructor.
   ~MultiSliceView() override;
 
@@ -84,6 +86,11 @@ public:
    */
   void resetDisplay() override;
 
+  /// @see ViewBase::setView
+  void setView(pqRenderView *view) override;
+  /// @see ViewBase::getViewType
+  ModeControlWidget::Views getViewType() override;
+
 protected slots:
   /// Determine if slice is to be shown in SliceViewer.
   void checkSliceClicked(int axisIndex, double sliceOffsetOnAxis, int button,
diff --git a/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/RebinnedSourcesManager.h b/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/RebinnedSourcesManager.h
index 3e752714bb61976eca16493f982ef02593864aa9..0f06707f15b0312985f6889b128831b0a578dbb6 100644
--- a/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/RebinnedSourcesManager.h
+++ b/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/RebinnedSourcesManager.h
@@ -81,6 +81,11 @@ public:
 
   bool isRebinnedSourceBeingTracked(pqPipelineSource *source);
 
+  /// Save the state of the manager to a Mantid project file
+  std::string saveToProject();
+  /// Load the state of the manager from a Mantid project file
+  void loadFromProject(const std::string &lines);
+
 signals:
   void switchSources(std::string rebinnedWorkspaceName, std::string sourceType);
 
diff --git a/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/SplatterPlotView.h b/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/SplatterPlotView.h
index ec17653d6ae0c155f2617c0e64a480c20f0345ba..b967c71af60debd014981905a41fbbafcc233bad 100644
--- a/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/SplatterPlotView.h
+++ b/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/SplatterPlotView.h
@@ -8,9 +8,10 @@
 #include "MantidVatesSimpleGuiViewWidgets/PeaksTableControllerVsi.h"
 #include <boost/shared_ptr.hpp>
 
-#include <string>
 #include <QList>
 #include <QPointer>
+#include <pqPipelineFilter.h>
+#include <string>
 
 class QWidget;
 class QAction;
@@ -62,9 +63,11 @@ public:
    * Default constructor.
    * @param parent the parent widget for the threeslice view
    * @param rebinnedSourcesManager Pointer to a RebinnedSourcesManager
+   * @param createRenderProxy :: Whether to create a render proxy for this view
    */
   explicit SplatterPlotView(QWidget *parent = 0,
-                            RebinnedSourcesManager *rebinnedSourcesManager = 0);
+                            RebinnedSourcesManager *rebinnedSourcesManager = 0,
+                            bool createRenderProxy = true);
   /// Default destructor
   ~SplatterPlotView() override;
 
@@ -97,6 +100,11 @@ public:
    */
   void destroyAllSourcesInView() override;
 
+  /// @see ViewBase::setView
+  void setView(pqRenderView *view) override;
+  /// @see ViewBase::getViewType
+  ModeControlWidget::Views getViewType() override;
+
 signals:
   /// Reset to the Standard View
   void resetToStandardView();
@@ -150,6 +158,9 @@ private:
   void updatePeaksFilter(pqPipelineSource *filter);
   /// Destroy splatter plot specific sources and filters
   void destroyFiltersForSplatterPlotView();
+  /// Find a filter in the proxy manager
+  pqPipelineFilter *findFilter(const QList<pqPipelineFilter *> &filters,
+                               const QString &name) const;
 
   bool m_noOverlay; ///< Flag to respond to overlay situation correctly
   QList<QPointer<pqPipelineSource>> m_peaksSource; ///< A list of peaks sources
diff --git a/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/StandardView.h b/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/StandardView.h
index 034227f40f562bca27e10d4fa44ff3be2d1baf7f..1c77e4caea592a150f856ce7e2013413fcb1fc01 100644
--- a/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/StandardView.h
+++ b/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/StandardView.h
@@ -54,7 +54,8 @@ class EXPORT_OPT_MANTIDVATES_SIMPLEGUI_VIEWWIDGETS StandardView
 public:
   /// Default constructor.
   StandardView(QWidget *parent = 0,
-               RebinnedSourcesManager *rebinnedSourcesManager = 0);
+               RebinnedSourcesManager *rebinnedSourcesManager = 0,
+               bool createRenderProxy = true);
   /// Default destructor.
   ~StandardView() override;
 
@@ -76,6 +77,10 @@ public:
   void updateView() override;
   /// @see ViewBase::closeSubWindows
   void closeSubWindows() override;
+  /// @see ViewBase::setView
+  void setView(pqRenderView *view) override;
+  /// @see ViewBase::getViewType
+  ModeControlWidget::Views getViewType() override;
 
 public slots:
   /// Listen to a change in the active source.
diff --git a/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/ThreesliceView.h b/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/ThreesliceView.h
index b51d70d6565b74f0e43be527366c2b7247dfbedd..cee050523252aaf149681316281c4f68825fa68e 100644
--- a/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/ThreesliceView.h
+++ b/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/ThreesliceView.h
@@ -54,9 +54,11 @@ public:
    * Default constructor.
    * @param parent the parent widget for the threeslice view
    * @param rebinnedSourcesManager Pointer to a RebinnedSourcesManager
+   * @param createRenderProxy :: Whether to create a render proxy for this view
    */
   ThreeSliceView(QWidget *parent = 0,
-                 RebinnedSourcesManager *rebinnedSourcesManager = 0);
+                 RebinnedSourcesManager *rebinnedSourcesManager = 0,
+                 bool createRenderProxy = true);
   /// Default destructor.
   ~ThreeSliceView() override;
 
@@ -90,6 +92,11 @@ public:
    */
   void resetDisplay() override;
 
+  /// @see ViewBase::setView
+  void setView(pqRenderView *view) override;
+  /// @see ViewBase::getViewType
+  ModeControlWidget::Views getViewType() override;
+
 private:
   Q_DISABLE_COPY(ThreeSliceView)
 
diff --git a/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/ViewBase.h b/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/ViewBase.h
index a1f0f147414827976af7da06f2f5a77bb9af98d2..9b9b5d985a2d6c5ae0443a1ea2572a041144e179 100644
--- a/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/ViewBase.h
+++ b/Vates/VatesSimpleGui/ViewWidgets/inc/MantidVatesSimpleGuiViewWidgets/ViewBase.h
@@ -23,6 +23,7 @@ namespace Mantid {
 namespace Vates {
 namespace SimpleGui {
 
+class ModeControlWidget;
 class ColorSelectionWidget;
 class RebinnedSourcesManager;
 
@@ -147,6 +148,10 @@ public:
       origRep; ///< The original source representation
   /// Has active source
   bool hasActiveSource();
+  /// Set the underlying view directly
+  virtual void setView(pqRenderView *view) = 0;
+  /// Get the view type of the current widget
+  virtual ModeControlWidget::Views getViewType() = 0;
 
 public slots:
   /// Set the color scale back to the original bounds.
@@ -241,6 +246,8 @@ protected:
 
   /// Set the Axes Grid
   void setAxesGrid();
+  /// Clear the render layout completely
+  void clearRenderLayout(QFrame *frame);
 
 private:
   Q_DISABLE_COPY(ViewBase)
diff --git a/Vates/VatesSimpleGui/ViewWidgets/src/ColorSelectionWidget.cpp b/Vates/VatesSimpleGui/ViewWidgets/src/ColorSelectionWidget.cpp
index 84d2b063f3de1635cedeca1f0a71434eac18af20..047138ef80e6422fabb84fa2eedb49ded15e073c 100644
--- a/Vates/VatesSimpleGui/ViewWidgets/src/ColorSelectionWidget.cpp
+++ b/Vates/VatesSimpleGui/ViewWidgets/src/ColorSelectionWidget.cpp
@@ -1,9 +1,10 @@
 #include <cfloat>
 
-#include "MantidVatesSimpleGuiViewWidgets/ColorSelectionWidget.h"
 #include "MantidKernel/ConfigService.h"
 #include "MantidQtAPI/MdConstants.h"
+#include "MantidQtAPI/TSVSerialiser.h"
 #include "MantidVatesAPI/ColorScaleGuard.h"
+#include "MantidVatesSimpleGuiViewWidgets/ColorSelectionWidget.h"
 
 #include "pqPresetDialog.h"
 #include "vtk_jsoncpp.h"
@@ -385,7 +386,7 @@ void ColorSelectionWidget::enableControls(bool state) {
  * to be decremented to cast to a boolean.
  * @return the state of automatic color scaling
  */
-bool ColorSelectionWidget::getAutoScaleState() {
+bool ColorSelectionWidget::getAutoScaleState() const {
   int state = this->m_ui.autoColorScaleCheckBox->isChecked();
   if (Qt::Checked == state) {
     state -= 1;
@@ -399,7 +400,7 @@ bool ColorSelectionWidget::getAutoScaleState() {
  * to be decremented to cast to a boolean.
  * @return the state of logarithmic color scaling
  */
-bool ColorSelectionWidget::getLogScaleState() {
+bool ColorSelectionWidget::getLogScaleState() const {
   int state = this->m_ui.useLogScaleCheckBox->isChecked();
   if (Qt::Checked == state) {
     state -= 1;
@@ -412,7 +413,7 @@ bool ColorSelectionWidget::getLogScaleState() {
  * This function returns the minimum range value for the color scaling.
  * @return current minimum color scaling value
  */
-double ColorSelectionWidget::getMinRange() {
+double ColorSelectionWidget::getMinRange() const {
   return this->m_ui.minValLineEdit->text().toDouble();
 }
 
@@ -420,7 +421,7 @@ double ColorSelectionWidget::getMinRange() {
  * This function returns the maximum range value for the color scaling.
  * @return current maximum color scaling value
  */
-double ColorSelectionWidget::getMaxRange() {
+double ColorSelectionWidget::getMaxRange() const {
   return this->m_ui.maxValLineEdit->text().toDouble();
 }
 
@@ -458,6 +459,39 @@ bool ColorSelectionWidget::isColorScaleLocked() const {
   }
 }
 
+std::string ColorSelectionWidget::saveToProject() const {
+  using namespace MantidQt::API;
+  TSVSerialiser tsv;
+  tsv.writeLine("Min") << getMinRange();
+  tsv.writeLine("Max") << getMaxRange();
+  tsv.writeLine("AutoScale") << getAutoScaleState();
+  tsv.writeLine("LogScale") << getLogScaleState();
+  return tsv.outputLines();
+}
+
+void ColorSelectionWidget::loadFromProject(const std::string &lines) {
+  using namespace MantidQt::API;
+  TSVSerialiser tsv(lines);
+  bool autoScale, logScale;
+  double min, max;
+
+  tsv.selectLine("AutoScale");
+  tsv >> autoScale;
+  tsv.selectLine("LogScale");
+  tsv >> logScale;
+  tsv.selectLine("Min");
+  tsv >> min;
+  tsv.selectLine("Max");
+  tsv >> max;
+
+  reset();
+
+  m_ui.autoColorScaleCheckBox->setChecked(autoScale);
+  m_ui.useLogScaleCheckBox->setChecked(logScale);
+  m_ui.minValLineEdit->setText(QString::number(min));
+  m_ui.maxValLineEdit->setText(QString::number(max));
+}
+
 } // SimpleGui
 } // Vates
 } // Mantid
diff --git a/Vates/VatesSimpleGui/ViewWidgets/src/ColorUpdater.cpp b/Vates/VatesSimpleGui/ViewWidgets/src/ColorUpdater.cpp
index ec1b472a77b6f3139e8b9930e01f38f6452b2fba..4923771f1ceab8783d9beaff37d1864bc8e5f60a 100644
--- a/Vates/VatesSimpleGui/ViewWidgets/src/ColorUpdater.cpp
+++ b/Vates/VatesSimpleGui/ViewWidgets/src/ColorUpdater.cpp
@@ -80,6 +80,9 @@ void ColorUpdater::colorMapChange(pqPipelineRepresentation *repr,
  * @param max The upper end of the color scale.
  */
 void ColorUpdater::colorScaleChange(double min, double max) {
+  if (min >= max)
+    return;
+
   this->m_minScale = min;
   this->m_maxScale = max;
 
diff --git a/Vates/VatesSimpleGui/ViewWidgets/src/MdViewerWidget.cpp b/Vates/VatesSimpleGui/ViewWidgets/src/MdViewerWidget.cpp
index 0822132967c8a7cd10acd1afeb007ba009909553..5e707eeb4572bb56f0ec6d63f0e8bfd438c665cb 100644
--- a/Vates/VatesSimpleGui/ViewWidgets/src/MdViewerWidget.cpp
+++ b/Vates/VatesSimpleGui/ViewWidgets/src/MdViewerWidget.cpp
@@ -1,24 +1,28 @@
-#include <vector>
-#include <set>
-#include <string>
+#include <Poco/File.h>
 #include <boost/regex.hpp>
 #include <boost/shared_ptr.hpp>
+#include <set>
+#include <string>
+#include <vector>
 
+#include "MantidAPI/IMDEventWorkspace.h"
+#include "MantidAPI/IMDHistoWorkspace.h"
 #include "MantidAPI/IPeaksWorkspace.h"
-#include "MantidKernel/DynamicFactory.h"
-#include "MantidKernel/Logger.h"
 #include "MantidKernel/ConfigService.h"
+#include "MantidKernel/DynamicFactory.h"
 #include "MantidKernel/InstrumentInfo.h"
+#include "MantidKernel/Logger.h"
 #include "MantidKernel/UsageService.h"
 #include "MantidQtAPI/InterfaceManager.h"
 #include "MantidQtAPI/MdConstants.h"
 #include "MantidQtAPI/MdSettings.h"
-#include "MantidVatesSimpleGuiViewWidgets/MdViewerWidget.h"
+#include "MantidQtAPI/TSVSerialiser.h"
 #include "MantidVatesSimpleGuiQtWidgets/ModeControlWidget.h"
 #include "MantidVatesSimpleGuiQtWidgets/RotationPointDialog.h"
 #include "MantidVatesSimpleGuiViewWidgets/BackgroundRgbProvider.h"
 #include "MantidVatesSimpleGuiViewWidgets/ColorMapEditorPanel.h"
 #include "MantidVatesSimpleGuiViewWidgets/ColorSelectionWidget.h"
+#include "MantidVatesSimpleGuiViewWidgets/MdViewerWidget.h"
 #include "MantidVatesSimpleGuiViewWidgets/MultisliceView.h"
 #include "MantidVatesSimpleGuiViewWidgets/SaveScreenshotReaction.h"
 #include "MantidVatesSimpleGuiViewWidgets/SplatterPlotView.h"
@@ -58,12 +62,14 @@
 #include <vtkMathTextUtilities.h>
 #include <vtkPVOrthographicSliceView.h>
 #include <vtkPVXMLElement.h>
+#include <vtkPVXMLParser.h>
 #include <vtkSMDoubleVectorProperty.h>
 #include <vtkSMPropertyHelper.h>
 #include <vtkSMProxyManager.h>
 #include <vtkSMProxy.h>
 #include <vtkSMReaderFactory.h>
 #include <vtkSMRenderViewProxy.h>
+#include <vtkSMSessionProxyManager.h>
 #include <vtkSMSourceProxy.h>
 #include <vtkSMViewProxy.h>
 #include <vtksys/SystemTools.hxx>
@@ -248,10 +254,6 @@ void MdViewerWidget::setupUiAndConnections() {
 
   applyBehavior->registerPanel(this->ui.propertiesPanel);
   VatesParaViewApplication::instance()->setupParaViewBehaviors();
-  // this->ui.pipelineBrowser->enableAnnotationFilter(m_widgetName);
-  // this->ui.pipelineBrowser->disableAnnotationFilter();
-  // this->ui.pipelineBrowser->enableAnnotationFilter(m_widgetName);
-  // this->ui.pipelineBrowser->hide();
   g_log.warning("Annotation Name: " + m_widgetName.toStdString());
 
   // Connect the rebinned sources manager
@@ -310,28 +312,34 @@ void MdViewerWidget::connectLoadDataReaction(QAction *action) {
  * registers a usage of the view with the UsageService.
  * @param container the UI widget to associate the view mode with
  * @param v the view mode to set on the main window
+ * @param createRenderProxy :: whether to create a default render proxy for
+ * the view
  * @return the requested view
  */
-ViewBase *
-MdViewerWidget::createAndSetMainViewWidget(QWidget *container,
-                                           ModeControlWidget::Views v) {
+ViewBase *MdViewerWidget::createAndSetMainViewWidget(QWidget *container,
+                                                     ModeControlWidget::Views v,
+                                                     bool createRenderProxy) {
   ViewBase *view;
   std::string featureName("VSI:");
   switch (v) {
   case ModeControlWidget::STANDARD: {
-    view = new StandardView(container, &m_rebinnedSourcesManager);
+    view = new StandardView(container, &m_rebinnedSourcesManager,
+                            createRenderProxy);
     featureName += "StandardView";
   } break;
   case ModeControlWidget::THREESLICE: {
-    view = new ThreeSliceView(container, &m_rebinnedSourcesManager);
+    view = new ThreeSliceView(container, &m_rebinnedSourcesManager,
+                              createRenderProxy);
     featureName += "ThreeSliceView";
   } break;
   case ModeControlWidget::MULTISLICE: {
-    view = new MultiSliceView(container, &m_rebinnedSourcesManager);
+    view = new MultiSliceView(container, &m_rebinnedSourcesManager,
+                              createRenderProxy);
     featureName += "MultiSliceView";
   } break;
   case ModeControlWidget::SPLATTERPLOT: {
-    view = new SplatterPlotView(container, &m_rebinnedSourcesManager);
+    view = new SplatterPlotView(container, &m_rebinnedSourcesManager,
+                                createRenderProxy);
     featureName += "SplatterPlotView";
   } break;
   default:
@@ -363,18 +371,14 @@ void MdViewerWidget::setParaViewComponentsForView() {
                    this->ui.propertiesPanel,
                    SLOT(setOutputPort(pqOutputPort *)));
 
-  // QObject::connect(activeObjects,
-  // SIGNAL(representationChanged(pqRepresentation*)),
-  //                 this->ui.propertiesPanel,
-  //                 SLOT(setRepresentation(pqRepresentation*)));
+  QObject::connect(activeObjects,
+                   SIGNAL(representationChanged(pqDataRepresentation *)),
+                   this->ui.propertiesPanel,
+                   SLOT(setRepresentation(pqDataRepresentation *)));
 
   QObject::connect(activeObjects, SIGNAL(viewChanged(pqView *)),
                    this->ui.propertiesPanel, SLOT(setView(pqView *)));
 
-  // this->ui.propertiesPanel->setOutputPort(activeObjects->activePort());
-  // this->ui.propertiesPanel->setView(this->currentView->getView());
-  // this->ui.propertiesPanel->setRepresentation(activeObjects->activeRepresentation());
-
   QObject::connect(this->currentView, SIGNAL(triggerAccept()),
                    this->ui.propertiesPanel, SLOT(apply()));
   QObject::connect(this->ui.propertiesPanel, SIGNAL(applied()), this,
@@ -747,36 +751,9 @@ void MdViewerWidget::resetCurrentView(int workspaceType,
   // type and the instrument
   ModeControlWidget::Views initialView =
       getInitialView(workspaceType, instrumentName);
+  auto currentViewType = currentView->getViewType();
 
-  bool isSetToCorrectInitialView = false;
-
-  switch (initialView) {
-  case ModeControlWidget::STANDARD: {
-    isSetToCorrectInitialView =
-        dynamic_cast<StandardView *>(this->currentView) != 0;
-  } break;
-
-  case ModeControlWidget::MULTISLICE: {
-    isSetToCorrectInitialView =
-        dynamic_cast<MultiSliceView *>(this->currentView) != 0;
-  } break;
-
-  case ModeControlWidget::THREESLICE: {
-    isSetToCorrectInitialView =
-        dynamic_cast<ThreeSliceView *>(this->currentView) != 0;
-  } break;
-
-  case ModeControlWidget::SPLATTERPLOT: {
-    isSetToCorrectInitialView =
-        dynamic_cast<SplatterPlotView *>(this->currentView) != 0;
-  } break;
-
-  default:
-    isSetToCorrectInitialView = false;
-    break;
-  }
-
-  if (isSetToCorrectInitialView == false) {
+  if (initialView != currentViewType) {
     this->ui.modeControlWidget->setToSelectedView(initialView);
   } else {
     this->currentView->show();
@@ -923,6 +900,219 @@ void MdViewerWidget::setupPluginMode() {
   this->setupMainView();
 }
 
+/**
+ * Load the state of the Vates window from a Mantid project file
+ *
+ * @param lines :: a string representing the state of the Vates window
+ */
+void MdViewerWidget::loadFromProject(const std::string &lines) {
+  this->useCurrentColorSettings = false;
+  this->setupUiAndConnections();
+  this->createMenus();
+
+  TSVSerialiser tsv(lines);
+
+  int viewType;
+  std::string viewName, sourceName, originalSourceName, originalRepName;
+  tsv.selectLine("ViewName");
+  tsv >> viewName;
+  tsv.selectLine("SourceName");
+  tsv >> sourceName;
+  tsv.selectLine("OriginalSourceName");
+  tsv >> originalSourceName;
+  tsv.selectLine("OriginalRepresentationName");
+  tsv >> originalRepName;
+  tsv.selectLine("ViewType");
+  tsv >> viewType;
+
+  auto vtype = static_cast<ModeControlWidget::Views>(viewType);
+
+  // Set the view type on the widget
+  this->ui.modeControlWidget->blockSignals(true);
+  this->ui.modeControlWidget->setToSelectedView(vtype);
+  this->ui.modeControlWidget->blockSignals(false);
+
+  // Load the state of VSI from the XML dump
+  QSettings settings;
+  auto workingDir = settings.value("Project/WorkingDirectory", "").toString();
+  auto fileName = workingDir.toStdString() + "/VSI.xml";
+  Poco::File file(fileName);
+  if (!file.exists())
+    return; // file path invalid.
+
+  auto success = loadVSIState(fileName);
+  if (!success)
+    return; // state could not be loaded. There's nothing left to do!
+
+  auto &activeObjects = pqActiveObjects::instance();
+  auto proxyManager = activeObjects.activeServer()->proxyManager();
+  auto viewProxy = proxyManager->GetProxy("views", viewName.c_str());
+  auto sourceProxy = proxyManager->GetProxy("sources", sourceName.c_str());
+
+  if (!viewProxy || !sourceProxy)
+    return; // could not find the active view/source from last session.
+
+  // Get the active objects from the last session
+  auto model = pqApplicationCore::instance()->getServerManagerModel();
+  auto view = model->findItem<pqRenderView *>(viewProxy);
+  auto source = model->findItem<pqPipelineSource *>(sourceProxy);
+
+  if (!view || !source)
+    return; // could not find the active PV view/source from last session.
+
+  setActiveObjects(view, source);
+  setupViewFromProject(vtype);
+  auto origSrcProxy =
+      proxyManager->GetProxy("sources", originalSourceName.c_str());
+  auto origSrc = model->findItem<pqPipelineSource *>(origSrcProxy);
+  this->currentView->origSrc = qobject_cast<pqPipelineSource *>(origSrc);
+
+  // Work around to force the update of the shader preset.
+  auto rep = pqActiveObjects::instance().activeRepresentation()->getProxy();
+  rep->UpdateProperty("ShaderPreset", 1);
+
+  if (tsv.selectSection("colormap")) {
+    std::string colorMapLines;
+    tsv >> colorMapLines;
+    ui.colorSelectionWidget->loadFromProject(colorMapLines);
+  }
+
+  if (tsv.selectSection("rebinning")) {
+    std::string rebinningLines;
+    tsv >> rebinningLines;
+    m_rebinnedSourcesManager.loadFromProject(rebinningLines);
+  }
+
+  currentView->show();
+
+  // Don't call render on ViewBase here as that will reset the camera.
+  // Instead just directly render the view proxy using render all.
+  this->currentView->renderAll();
+  this->currentView->updateAnimationControls();
+  this->setDestroyedListener();
+  this->currentView->setVisibilityListener();
+}
+
+/**
+ * Load the state of VSI from an XML file.
+ *
+ * @param fileName
+ * @return true if the state was successfully loaded
+ */
+bool MdViewerWidget::loadVSIState(const std::string &fileName) {
+  auto proxyManager =
+      pqActiveObjects::instance().activeServer()->proxyManager();
+
+  try {
+    proxyManager->LoadXMLState(fileName.c_str());
+  } catch (...) {
+    return false;
+  }
+
+  // Update all registered proxies.
+  // Some things may have been incorrectly setup during the loading step
+  // due to the load order.
+  proxyManager->UpdateRegisteredProxiesInOrder(0);
+  return true;
+}
+
+/**
+ * Setup the current view from a project file.
+ *
+ * There's need to create an entirely new view as it already exists in the
+ * loaded project state.
+ *
+ * @param vtype :: the type of view to be created (e.g. Multislice)
+ */
+void MdViewerWidget::setupViewFromProject(ModeControlWidget::Views vtype) {
+  // Initilise the current view to something and setup
+  currentView = createAndSetMainViewWidget(ui.viewWidget, vtype, false);
+  initialView = vtype;
+  currentView->installEventFilter(this);
+  viewLayout = new QHBoxLayout(ui.viewWidget);
+  viewLayout->setMargin(0);
+  viewLayout->setStretch(0, 1);
+  viewLayout->addWidget(currentView);
+
+  auto source = pqActiveObjects::instance().activeSource();
+  auto view = pqActiveObjects::instance().activeView();
+  // Swap out the existing view for the newly loaded source and representation
+  currentView->origSrc = qobject_cast<pqPipelineSource *>(source);
+  currentView->setView(qobject_cast<pqRenderView *>(view));
+  setParaViewComponentsForView();
+}
+
+/**
+ * Set the active objects. This will trigger events to update the properties
+ * panel and the pipeline viewer.
+ *
+ * @param view :: the view to set as currently active
+ * @param source :: the source to set as currently active
+ */
+void MdViewerWidget::setActiveObjects(pqView *view, pqPipelineSource *source) {
+
+  auto &activeObjects = pqActiveObjects::instance();
+  activeObjects.setActiveView(view);
+  activeObjects.setActiveSource(source);
+  activeObjects.setActivePort(source->getOutputPort(0));
+}
+
+/**
+ * Save the state of the Vates window to a Mantid project file
+ *
+ * @param app :: handle to the main application window instance
+ * @return a string representing the current state of the window
+ */
+std::string MdViewerWidget::saveToProject(ApplicationWindow *app) {
+  UNUSED_ARG(app);
+  TSVSerialiser tsv, contents;
+
+  // save window position & size
+  contents.writeLine("geometry") << parentWidget()->geometry();
+
+  QSettings settings;
+  auto workingDir = settings.value("Project/WorkingDirectory", "").toString();
+  auto fileName = workingDir.toStdString() + "/VSI.xml";
+
+  // Dump the state of VSI to a XML file
+  auto session = pqActiveObjects::instance().activeServer()->proxyManager();
+  session->SaveXMLState(fileName.c_str());
+  contents.writeLine("FileName") << fileName;
+
+  // Save the view type. e.g. Splatterplot, Multislice...
+  auto vtype = currentView->getViewType();
+  contents.writeLine("ViewType") << static_cast<int>(vtype);
+
+  auto &activeObjects = pqActiveObjects::instance();
+  auto proxyManager = activeObjects.activeServer()->proxyManager();
+  auto view = activeObjects.activeView()->getProxy();
+  auto source = activeObjects.activeSource()->getProxy();
+
+  auto viewName = proxyManager->GetProxyName("views", view);
+  auto sourceName = proxyManager->GetProxyName("sources", source);
+
+  contents.writeLine("ViewName") << viewName;
+  contents.writeLine("SourceName") << sourceName;
+
+  if (this->currentView->origRep) {
+    auto repName = proxyManager->GetProxyName(
+        "representations", this->currentView->origRep->getProxy());
+    contents.writeLine("OriginalRepresentationName") << repName;
+  }
+
+  if (this->currentView->origSrc) {
+    auto srcName = proxyManager->GetProxyName(
+        "sources", this->currentView->origSrc->getProxy());
+    contents.writeLine("OriginalSourceName") << srcName;
+  }
+
+  contents.writeSection("colormap", ui.colorSelectionWidget->saveToProject());
+  contents.writeSection("rebinning", m_rebinnedSourcesManager.saveToProject());
+  tsv.writeSection("vsi", contents.outputLines());
+
+  return tsv.outputLines();
+}
+
 /**
  * This function tells the current view to render the data, perform any
  * necessary checks on the view given the workspace type and update the
@@ -936,16 +1126,6 @@ void MdViewerWidget::renderAndFinalSetup() {
   this->currentView->setColorsForView(this->ui.colorSelectionWidget);
   this->currentView->checkView(this->initialView);
   this->currentView->updateAnimationControls();
-  pqPipelineSource *source = this->currentView->origSrc;
-  // suppress unused variable;
-  (void)source;
-  pqPipelineRepresentation *repr = this->currentView->origRep;
-  // suppress unused variable;
-  (void)repr;
-  // this->ui.proxiesPanel->clear();
-  // this->ui.proxiesPanel->addProxy(source->getProxy(),"datasource",QStringList(),true);
-  // this->ui.proxiesPanel->addProxy(repr->getProxy(),"display",QStringList("CubeAxesVisibility"),true);
-  // this->ui.proxiesPanel->updateLayout();
   this->setDestroyedListener();
   this->currentView->setVisibilityListener();
   this->currentView->onAutoScale(this->ui.colorSelectionWidget);
@@ -1293,9 +1473,9 @@ void MdViewerWidget::connectDialogs() { this->connectRotationPointDialog(); }
  * like menus, menu items, buttons, views etc.
  */
 void MdViewerWidget::updateAppState() {
-  ThreeSliceView *tsv = dynamic_cast<ThreeSliceView *>(this->currentView);
-  SplatterPlotView *spv = dynamic_cast<SplatterPlotView *>(this->currentView);
-  if (NULL != tsv || NULL != spv) {
+  auto type = currentView->getViewType();
+  if (type == ModeControlWidget::THREESLICE ||
+      type == ModeControlWidget::SPLATTERPLOT) {
     this->currentView->onLodThresholdChange(false, this->lodThreshold);
     this->lodAction->setChecked(false);
   } else {
@@ -1446,7 +1626,7 @@ void MdViewerWidget::handleDragAndDropPeaksWorkspaces(QEvent *e, QString text,
     QString candidate = text.mid(startIndex, endIndex - startIndex);
     // Only append the candidate if SplattorPlotView is selected and an
     // MDWorkspace is loaded.
-    if (dynamic_cast<SplatterPlotView *>(this->currentView) &&
+    if (currentView->getViewType() == ModeControlWidget::Views::SPLATTERPLOT &&
         otherWorkspacePresent()) {
       if (boost::dynamic_pointer_cast<IPeaksWorkspace>(
               AnalysisDataService::Instance().retrieve(
@@ -1496,36 +1676,21 @@ void MdViewerWidget::saveViewState(ViewBase *view) {
   if (!view)
     return;
 
-  ModeControlWidget::Views vtype;
-  if (dynamic_cast<StandardView *>(view))
-    vtype = ModeControlWidget::STANDARD;
-  else if (dynamic_cast<MultiSliceView *>(view))
-    vtype = ModeControlWidget::MULTISLICE;
-  else if (dynamic_cast<ThreeSliceView *>(view))
-    vtype = ModeControlWidget::THREESLICE;
-  else if (dynamic_cast<SplatterPlotView *>(view))
-    vtype = ModeControlWidget::SPLATTERPLOT;
-  else {
-    g_log.warning() << "Trying to save the state of a view of unknown type. "
-                       "This seems to indicate a "
-                       "severe state inconsistency.";
-    return;
-  }
-
+  auto vtype = currentView->getViewType();
   switch (vtype) {
-  case ModeControlWidget::STANDARD: {
+  case ModeControlWidget::Views::STANDARD: {
     m_allViews.stateStandard.TakeReference(
         view->getView()->getRenderViewProxy()->SaveXMLState(NULL));
   } break;
-  case ModeControlWidget::THREESLICE: {
+  case ModeControlWidget::Views::THREESLICE: {
     m_allViews.stateThreeSlice.TakeReference(
         view->getView()->getRenderViewProxy()->SaveXMLState(NULL));
   } break;
-  case ModeControlWidget::MULTISLICE: {
+  case ModeControlWidget::Views::MULTISLICE: {
     m_allViews.stateMulti.TakeReference(
         view->getView()->getRenderViewProxy()->SaveXMLState(NULL));
   } break;
-  case ModeControlWidget::SPLATTERPLOT: {
+  case ModeControlWidget::Views::SPLATTERPLOT: {
     m_allViews.stateSplatter.TakeReference(
         view->getView()->getRenderViewProxy()->SaveXMLState(NULL));
   } break;
diff --git a/Vates/VatesSimpleGui/ViewWidgets/src/MultisliceView.cpp b/Vates/VatesSimpleGui/ViewWidgets/src/MultisliceView.cpp
index 31cf0cb84205ba7b13c884a26cca2a9d3389cfff..2fae62b53d082009d75e396bd2c6892e60dcef0d 100644
--- a/Vates/VatesSimpleGui/ViewWidgets/src/MultisliceView.cpp
+++ b/Vates/VatesSimpleGui/ViewWidgets/src/MultisliceView.cpp
@@ -60,15 +60,19 @@ static void GetOrientations(vtkSMSourceProxy *producer,
 }
 
 MultiSliceView::MultiSliceView(QWidget *parent,
-                               RebinnedSourcesManager *rebinnedSourcesManager)
+                               RebinnedSourcesManager *rebinnedSourcesManager,
+                               bool createRenderProxy)
     : ViewBase(parent, rebinnedSourcesManager) {
   this->m_ui.setupUi(this);
-  pqRenderView *tmp =
-      this->createRenderView(this->m_ui.renderFrame, QString("MultiSlice"));
-  this->m_mainView = qobject_cast<pqMultiSliceView *>(tmp);
-  QObject::connect(this->m_mainView,
-                   SIGNAL(sliceClicked(int, double, int, int)), this,
-                   SLOT(checkSliceClicked(int, double, int, int)));
+  if (createRenderProxy) {
+    pqRenderView *tmp =
+        this->createRenderView(this->m_ui.renderFrame, QString("MultiSlice"));
+
+    this->m_mainView = qobject_cast<pqMultiSliceView *>(tmp);
+    QObject::connect(this->m_mainView,
+                     SIGNAL(sliceClicked(int, double, int, int)), this,
+                     SLOT(checkSliceClicked(int, double, int, int)));
+  }
 }
 
 MultiSliceView::~MultiSliceView() {}
@@ -105,6 +109,21 @@ void MultiSliceView::renderAll() { this->m_mainView->render(); }
 
 void MultiSliceView::resetDisplay() { this->m_mainView->resetDisplay(); }
 
+void MultiSliceView::setView(pqRenderView *view) {
+  clearRenderLayout(this->m_ui.renderFrame);
+  this->m_mainView = qobject_cast<pqMultiSliceView *>(view);
+  QHBoxLayout *hbox = new QHBoxLayout(this->m_ui.renderFrame);
+  hbox->setMargin(0);
+  hbox->addWidget(m_mainView->widget());
+  QObject::connect(this->m_mainView,
+                   SIGNAL(sliceClicked(int, double, int, int)), this,
+                   SLOT(checkSliceClicked(int, double, int, int)));
+}
+
+ModeControlWidget::Views MultiSliceView::getViewType() {
+  return ModeControlWidget::Views::MULTISLICE;
+}
+
 void MultiSliceView::resetCamera() { this->m_mainView->resetCamera(); }
 
 /**
diff --git a/Vates/VatesSimpleGui/ViewWidgets/src/RebinnedSourcesManager.cpp b/Vates/VatesSimpleGui/ViewWidgets/src/RebinnedSourcesManager.cpp
index 0b127e5e0c1d1db956863094cc5ed1ff161bd837..4296350968370a7f9bc7f6111f85109f08c894e4 100644
--- a/Vates/VatesSimpleGui/ViewWidgets/src/RebinnedSourcesManager.cpp
+++ b/Vates/VatesSimpleGui/ViewWidgets/src/RebinnedSourcesManager.cpp
@@ -1,11 +1,12 @@
 #include "MantidVatesSimpleGuiViewWidgets/RebinnedSourcesManager.h"
-#include "MantidVatesAPI/ADSWorkspaceProvider.h"
-#include "MantidQtAPI/WorkspaceObserver.h"
 #include "MantidAPI/AnalysisDataService.h"
-#include "MantidAPI/IMDHistoWorkspace.h"
 #include "MantidAPI/IMDEventWorkspace.h"
+#include "MantidAPI/IMDHistoWorkspace.h"
 #include "MantidAPI/Workspace.h"
 #include "MantidKernel/Logger.h"
+#include "MantidQtAPI/TSVSerialiser.h"
+#include "MantidQtAPI/WorkspaceObserver.h"
+#include "MantidVatesAPI/ADSWorkspaceProvider.h"
 
 // Have to deal with ParaView warnings and Intel compiler the hard way.
 #if defined(__INTEL_COMPILER)
@@ -18,16 +19,17 @@
 #include <pqPipelineSource.h>
 #include <pqServer.h>
 #include <pqServerManagerModel.h>
-#include <vtkSMPropertyHelper.h>
 #include <pqServerManagerModel.h>
 #include <pqUndoStack.h>
-#include <vtkSMSourceProxy.h>
-#include <vtkSMProxy.h>
-#include <vtkSMPropertyIterator.h>
 #include <vtkSMDoubleVectorProperty.h>
 #include <vtkSMInputProperty.h>
-#include <vtkSMProxyProperty.h>
+#include <vtkSMPropertyHelper.h>
+#include <vtkSMPropertyIterator.h>
+#include <vtkSMProxy.h>
 #include <vtkSMProxyListDomain.h>
+#include <vtkSMProxyProperty.h>
+#include <vtkSMSessionProxyManager.h>
+#include <vtkSMSourceProxy.h>
 
 #if defined(__INTEL_COMPILER)
 #pragma warning enable 1170
@@ -686,6 +688,51 @@ bool RebinnedSourcesManager::isRebinnedSourceBeingTracked(
   }
 }
 
+std::string RebinnedSourcesManager::saveToProject() {
+  if (!m_inputSource || !m_rebinnedSource)
+    return "";
+
+  MantidQt::API::TSVSerialiser tsv;
+  auto &activeObjects = pqActiveObjects::instance();
+  auto proxyManager = activeObjects.activeServer()->proxyManager();
+  auto source = activeObjects.activeSource();
+
+  std::string rebinName, origName;
+  getStoredWorkspaceNames(source, origName, rebinName);
+
+  tsv.writeLine("RebinnedWorkspaceName") << rebinName;
+  tsv.writeLine("RebinnedProxyName")
+      << proxyManager->GetProxyName("sources", m_rebinnedSource->getProxy());
+  tsv.writeLine("OriginalWorkspaceName") << origName;
+
+  return tsv.outputLines();
+}
+
+void RebinnedSourcesManager::loadFromProject(const std::string &lines) {
+  MantidQt::API::TSVSerialiser tsv(lines);
+
+  std::string rebinWorkspaceName, originalWorkspaceName, rebinProxyName,
+      originalProxyName;
+  tsv.selectLine("RebinnedWorkspaceName");
+  tsv >> rebinWorkspaceName;
+  tsv.selectLine("OriginalWorkspaceName");
+  tsv >> originalWorkspaceName;
+  tsv.selectLine("RebinnedProxyName");
+  tsv >> rebinProxyName;
+
+  auto proxyManager =
+      pqActiveObjects::instance().activeServer()->proxyManager();
+  auto model = pqApplicationCore::instance()->getServerManagerModel();
+  auto rebinSourceProxy =
+      proxyManager->GetProxy("sources", rebinProxyName.c_str());
+  auto rebinSource = model->findItem<pqPipelineSource *>(rebinSourceProxy);
+
+  m_rebinnedSource = rebinSource;
+  m_newWorkspacePairBuffer.emplace(
+      originalWorkspaceName, std::make_pair(rebinWorkspaceName, rebinSource));
+  registerRebinnedSource(rebinSource);
+}
+
 /**
  * Construct a workspaceName, sourceName key pair for a given source
  * @param source A pointer to a source
diff --git a/Vates/VatesSimpleGui/ViewWidgets/src/SplatterPlotView.cpp b/Vates/VatesSimpleGui/ViewWidgets/src/SplatterPlotView.cpp
index 059e746e881815acfafb2f912e96e08d3e544816..4367004587f984212afe44c9b7c5dadb33dab3f6 100644
--- a/Vates/VatesSimpleGui/ViewWidgets/src/SplatterPlotView.cpp
+++ b/Vates/VatesSimpleGui/ViewWidgets/src/SplatterPlotView.cpp
@@ -22,6 +22,7 @@
 #include <pqObjectBuilder.h>
 #include <pqPipelineRepresentation.h>
 #include <pqPipelineSource.h>
+#include <pqPipelineFilter.h>
 #include <pqRenderView.h>
 #include <pqServerManagerModel.h>
 #include <vtkDataObject.h>
@@ -54,7 +55,8 @@ Mantid::Kernel::Logger g_log("SplatterPlotView");
 }
 
 SplatterPlotView::SplatterPlotView(
-    QWidget *parent, RebinnedSourcesManager *rebinnedSourcesManager)
+    QWidget *parent, RebinnedSourcesManager *rebinnedSourcesManager,
+    bool createRenderProxy)
     : ViewBase(parent, rebinnedSourcesManager),
       m_cameraManager(boost::make_shared<CameraManager>()),
       m_peaksTableController(NULL), m_peaksWorkspaceNameDelimiter(";") {
@@ -83,7 +85,9 @@ SplatterPlotView::SplatterPlotView(
   QObject::connect(this->m_ui.pickModeButton, SIGNAL(toggled(bool)), this,
                    SLOT(onPickModeToggled(bool)));
 
-  this->m_view = this->createRenderView(this->m_ui.renderFrame);
+  if (createRenderProxy)
+    this->m_view = this->createRenderView(this->m_ui.renderFrame);
+
   this->installEventFilter(this);
 
   setupVisiblePeaksButtons();
@@ -633,6 +637,33 @@ void SplatterPlotView::destroyAllSourcesInView() {
   builder->destroySources();
 }
 
+void SplatterPlotView::setView(pqRenderView *view) {
+  clearRenderLayout(this->m_ui.renderFrame);
+
+  auto &activeObjects = pqActiveObjects::instance();
+  this->m_view = view;
+
+  auto server = activeObjects.activeServer();
+  auto model = pqApplicationCore::instance()->getServerManagerModel();
+  auto filters = model->findItems<pqPipelineFilter *>(server);
+  this->m_splatSource = findFilter(
+      filters, MantidQt::API::MdConstants::MantidParaViewSplatterPlot);
+  this->m_peaksFilter = findFilter(
+      filters, MantidQt::API::MdConstants::MantidParaViewPeaksFilter);
+  this->m_threshSource =
+      findFilter(filters, MantidQt::API::MdConstants::Threshold);
+  this->m_probeSource =
+      findFilter(filters, MantidQt::API::MdConstants::ProbePoint);
+
+  QHBoxLayout *hbox = new QHBoxLayout(this->m_ui.renderFrame);
+  hbox->setMargin(0);
+  hbox->addWidget(m_view->widget());
+}
+
+ModeControlWidget::Views SplatterPlotView::getViewType() {
+  return ModeControlWidget::Views::SPLATTERPLOT;
+}
+
 void SplatterPlotView::destroyFiltersForSplatterPlotView() {
   pqObjectBuilder *builder = pqApplicationCore::instance()->getObjectBuilder();
   if (this->m_peaksFilter) {
@@ -653,6 +684,31 @@ void SplatterPlotView::destroyFiltersForSplatterPlotView() {
   }
 }
 
+/* Find a pqPipelineFilter using the XML name of the proxy
+ *
+ * If there is more than one match only the first found is returned. If no items
+ * are matched a nullptr is returned.
+ *
+ * @param filters :: a list of filters to search
+ * @param name :: the XML name of the item to find
+ * @return pointer to the pqPipelineFilter found in filters
+ */
+pqPipelineFilter *
+SplatterPlotView::findFilter(const QList<pqPipelineFilter *> &filters,
+                             const QString &name) const {
+  auto result = std::find_if(filters.begin(), filters.end(),
+                             [&name](const pqPipelineFilter *src) {
+                               return strcmp(src->getProxy()->GetXMLName(),
+                                             name.toStdString().c_str()) == 0;
+                             });
+
+  if (result != filters.end()) {
+    return result[0];
+  } else {
+    return nullptr;
+  }
+}
+
 } // SimpleGui
 } // Vates
 } // Mantid
diff --git a/Vates/VatesSimpleGui/ViewWidgets/src/StandardView.cpp b/Vates/VatesSimpleGui/ViewWidgets/src/StandardView.cpp
index d902724002a02f8f90a3d25fd00389965f97396f..bac8b85d96ff7f75e3f1f5788dc50763598a474d 100644
--- a/Vates/VatesSimpleGui/ViewWidgets/src/StandardView.cpp
+++ b/Vates/VatesSimpleGui/ViewWidgets/src/StandardView.cpp
@@ -88,9 +88,11 @@ QMap<QString, QString> StandardView::g_actionToAlgName;
  * buttons and creates the rendering view.
  * @param parent the parent widget for the standard view
  * @param rebinnedSourcesManager Pointer to a RebinnedSourcesManager
+ * @param createRenderProxy :: whether to create a render proxy for the view
  */
 StandardView::StandardView(QWidget *parent,
-                           RebinnedSourcesManager *rebinnedSourcesManager)
+                           RebinnedSourcesManager *rebinnedSourcesManager,
+                           bool createRenderProxy)
     : ViewBase(parent, rebinnedSourcesManager), m_binMDAction(NULL),
       m_sliceMDAction(NULL), m_cutMDAction(NULL), m_unbinAction(NULL) {
   this->m_ui.setupUi(this);
@@ -119,10 +121,12 @@ StandardView::StandardView(QWidget *parent,
   QObject::connect(this->m_ui.scaleButton, SIGNAL(clicked()), this,
                    SLOT(onScaleButtonClicked()));
 
-  this->m_view = this->createRenderView(this->m_ui.renderFrame);
+  if (createRenderProxy) {
+    this->m_view = this->createRenderView(this->m_ui.renderFrame);
 
-  QObject::connect(this->m_view.data(), SIGNAL(endRender()), this,
-                   SLOT(onRenderDone()));
+    QObject::connect(this->m_view.data(), SIGNAL(endRender()), this,
+                     SLOT(onRenderDone()));
+  }
 }
 
 StandardView::~StandardView() {}
@@ -287,6 +291,23 @@ void StandardView::updateView() { this->m_cameraReset = true; }
 
 void StandardView::closeSubWindows() {}
 
+void StandardView::setView(pqRenderView *view) {
+  clearRenderLayout(this->m_ui.renderFrame);
+
+  this->m_view = view;
+
+  QHBoxLayout *hbox = new QHBoxLayout(this->m_ui.renderFrame);
+  hbox->setMargin(0);
+  hbox->addWidget(m_view->widget());
+
+  QObject::connect(this->m_view.data(), SIGNAL(endRender()), this,
+                   SLOT(onRenderDone()));
+}
+
+ModeControlWidget::Views StandardView::getViewType() {
+  return ModeControlWidget::Views::STANDARD;
+}
+
 /**
  * Check if the rebin and unbin buttons should be visible
  * Note that for a rebin button to be visible there may be no
diff --git a/Vates/VatesSimpleGui/ViewWidgets/src/ThreesliceView.cpp b/Vates/VatesSimpleGui/ViewWidgets/src/ThreesliceView.cpp
index 5a219298c53a67b009164a2f2f4e1fa8569f4b98..15d062155e4fa13ed01a06ff27993d0794ab77c1 100644
--- a/Vates/VatesSimpleGui/ViewWidgets/src/ThreesliceView.cpp
+++ b/Vates/VatesSimpleGui/ViewWidgets/src/ThreesliceView.cpp
@@ -35,12 +35,16 @@ Kernel::Logger g_log("ThreeSliceView");
 }
 
 ThreeSliceView::ThreeSliceView(QWidget *parent,
-                               RebinnedSourcesManager *rebinnedSourcesManager)
+                               RebinnedSourcesManager *rebinnedSourcesManager,
+                               bool createRenderProxy)
     : ViewBase(parent, rebinnedSourcesManager), m_mainView(), m_ui() {
   this->m_ui.setupUi(this);
-  this->m_mainView = this->createRenderView(this->m_ui.mainRenderFrame,
-                                            QString("OrthographicSliceView"));
-  pqActiveObjects::instance().setActiveView(this->m_mainView);
+
+  if (createRenderProxy) {
+    this->m_mainView = this->createRenderView(this->m_ui.mainRenderFrame,
+                                              QString("OrthographicSliceView"));
+    pqActiveObjects::instance().setActiveView(this->m_mainView);
+  }
 }
 
 ThreeSliceView::~ThreeSliceView() {}
@@ -92,12 +96,18 @@ void ThreeSliceView::renderAll() { this->m_mainView->render(); }
 
 void ThreeSliceView::resetDisplay() { this->m_mainView->resetDisplay(); }
 
-/*
-void ThreeSliceView::correctVisibility()
-{
-  //this->correctColorScaleRange();
+void ThreeSliceView::setView(pqRenderView *view) {
+  clearRenderLayout(this->m_ui.mainRenderFrame);
+  this->m_mainView = view;
+  QHBoxLayout *hbox = new QHBoxLayout(this->m_ui.mainRenderFrame);
+  hbox->setMargin(0);
+  hbox->addWidget(m_mainView->widget());
 }
-*/
+
+ModeControlWidget::Views ThreeSliceView::getViewType() {
+  return ModeControlWidget::Views::THREESLICE;
+}
+
 void ThreeSliceView::correctColorScaleRange() {
   QPair<double, double> range =
       this->origRep->getLookupTable()->getScalarRange();
diff --git a/Vates/VatesSimpleGui/ViewWidgets/src/ViewBase.cpp b/Vates/VatesSimpleGui/ViewWidgets/src/ViewBase.cpp
index 6cca85b50e477d60de2092996f07a8b7634fc061..bcc4070cf2b81e9946b68f786955043692f3a77d 100644
--- a/Vates/VatesSimpleGui/ViewWidgets/src/ViewBase.cpp
+++ b/Vates/VatesSimpleGui/ViewWidgets/src/ViewBase.cpp
@@ -147,6 +147,19 @@ void ViewBase::setAutoColorScale() {
   emit this->setLogScale(colorScale.useLogScale);
 }
 
+/**
+ * Clear the render layout completely
+ */
+void ViewBase::clearRenderLayout(QFrame *frame) {
+  QLayout *layout = frame->layout();
+  if (layout) {
+    QLayoutItem *item;
+    while ((item = layout->takeAt(0)) != nullptr)
+      layout->removeItem(item);
+    delete layout;
+  }
+}
+
 /**
  * This function sets the requested color map on the data.
  * @param model the color map to use
diff --git a/buildconfig/CMake/Bootstrap.cmake b/buildconfig/CMake/Bootstrap.cmake
index ddd79d61f3d78345f24d71b3bad944483e39f0ad..2b0b240acb971a22089f6882679733cb2562bb70 100644
--- a/buildconfig/CMake/Bootstrap.cmake
+++ b/buildconfig/CMake/Bootstrap.cmake
@@ -10,7 +10,7 @@ if( MSVC )
   include ( ExternalProject )
   set( EXTERNAL_ROOT ${PROJECT_SOURCE_DIR}/external )
   set( THIRD_PARTY_GIT_URL "https://github.com/mantidproject/thirdparty-msvc2015.git" )
-  set ( THIRD_PARTY_GIT_SHA1 fa3a9b986e97fe21856355ae701deb1868b3df75 )
+  set ( THIRD_PARTY_GIT_SHA1 f73d59f82eaa2ea990c33b76447dcf9dcb670885 )
   set ( THIRD_PARTY_DIR ${EXTERNAL_ROOT}/src/ThirdParty )
   # Generates a script to do the clone/update in tmp
   set ( _project_name ThirdParty )
diff --git a/buildconfig/CMake/CPackCommon.cmake b/buildconfig/CMake/CPackCommon.cmake
index ee3bb1de11dfe7c5522067fb3c8af5ebfe2b91db..ecb8ee635b5d73f9d3cb6c853b8a8e7eae369b1b 100644
--- a/buildconfig/CMake/CPackCommon.cmake
+++ b/buildconfig/CMake/CPackCommon.cmake
@@ -21,5 +21,6 @@ set ( CPACK_RPM_PACKAGE_LICENSE GPLv3+ )
 set ( CPACK_RPM_PACKAGE_RELEASE 1 )
 set ( CPACK_RPM_PACKAGE_GROUP Applications/Engineering )
 
-# DEB information - only used if generating a deb
-set ( CPACK_DEBIAN_PACKAGE_RELEASE 1 )
+# DEB informatin - the package does not have an original
+# in debian archives so the debian release is 0
+set ( CPACK_DEBIAN_PACKAGE_RELEASE 0 )
diff --git a/buildconfig/CMake/CPackLinuxSetup.cmake b/buildconfig/CMake/CPackLinuxSetup.cmake
index a1c4e8e722348f66e2e0247d0da993a47bc35c39..b1cb68fcda6f5b5de45bc60c3402ce7997256f8a 100644
--- a/buildconfig/CMake/CPackLinuxSetup.cmake
+++ b/buildconfig/CMake/CPackLinuxSetup.cmake
@@ -25,9 +25,10 @@ if ( "${UNIX_DIST}" MATCHES "Ubuntu" )
     execute_process( COMMAND ${DPKG_CMD} --print-architecture
       OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE
       OUTPUT_STRIP_TRAILING_WHITESPACE )
-    # according to debian <foo>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
-    set( CPACK_PACKAGE_FILE_NAME
-      "${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_RELEASE}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")
+    # following Ubuntu convention <foo>_<VersionNumber>-<DebianRevisionNumber>ubuntu1~<UbuntuCodeName>1_<DebianArchitecture>.deb
+    set ( UBUNTU_PACKAGE_RELEASE "ubuntu1~${UNIX_CODENAME}1" )
+    set ( CPACK_PACKAGE_FILE_NAME
+          "${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_RELEASE}${UBUNTU_PACKAGE_RELEASE}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")
   endif ( DPKG_CMD )
 endif ( "${UNIX_DIST}" MATCHES "Ubuntu" )
 
diff --git a/buildconfig/CMake/ParaViewSetup.cmake b/buildconfig/CMake/ParaViewSetup.cmake
index c74702f3298e5a88c16b03fe93c7ac6913f8c1be..600dc05669f8cdb77469ec2471808a41392b8f95 100644
--- a/buildconfig/CMake/ParaViewSetup.cmake
+++ b/buildconfig/CMake/ParaViewSetup.cmake
@@ -1,7 +1,7 @@
 # This file will setup some common items that later setups depend on
 
 # Set the version of ParaView that is compatible with the Mantid code base
-set ( COMPATIBLE_PARAVIEW_VERSION "5.1.0" )
+set ( COMPATIBLE_PARAVIEW_VERSION "5.1.2" )
 
 # Set the name of the OSX application as this tends to be different
 set ( OSX_PARAVIEW_APP "paraview.app" )
diff --git a/buildconfig/Jenkins/buildscript b/buildconfig/Jenkins/buildscript
index 6bd49c13a39c12654219e84c84ecf2c615fbcab9..342b1178b3aff95576bcfac462d0cb4383673674 100755
--- a/buildconfig/Jenkins/buildscript
+++ b/buildconfig/Jenkins/buildscript
@@ -14,9 +14,9 @@ SCRIPT_DIR=$(dirname "$0")
 BUILDPKG=true
 
 ###############################################################################
-# All node currently have PARAVIEW_DIR=5.1.0 and PARAVIEW_NEXT_DIR=5.0.0
+# All nodes currently have PARAVIEW_DIR=5.1.0 and PARAVIEW_NEXT_DIR=5.1.2
 ###############################################################################
-#export PARAVIEW_DIR=${PARAVIEW_NEXT_DIR}
+export PARAVIEW_DIR=${PARAVIEW_NEXT_DIR}
 
 ###############################################################################
 # Print out the versions of things we are using
@@ -254,11 +254,11 @@ if [[ "$BUILDPKG" == true ]]; then
   $SCL_ON_RHEL6 "cmake --build . --target docs-qthelp"
   $SCL_ON_RHEL6 "cpack"
 
-  # Source tarball on clean build (arbitrarily choose rhel6)
+  # Source tarball on clean build (arbitrarily choose rhel7)
   # Also, parcel up the documentation into a tar file that is easier to move around
   # and labelled by the commit id it was built with. This assumes the Jenkins git plugin
   # has set the GIT_COMMIT environment variable
-  if [[ "$CLEANBUILD" == true && "$ON_RHEL6" == true ]]; then
+  if [[ "$CLEANBUILD" == true && "$ON_RHEL7" == true ]]; then
     $SCL_ON_RHEL6 "cmake --build . --target docs-html"
     tar -cjf mantiddocs-g${GIT_COMMIT:0:7}.tar.bz2 --exclude='*.buildinfo' --exclude="MantidProject.q*" docs/html
     # The ..._PREFIX argument avoids opt/Mantid directories at the top of the tree
diff --git a/buildconfig/Jenkins/buildscript.bat b/buildconfig/Jenkins/buildscript.bat
index 33cca7c5ff0cffc6d61e9c90a84e2b1e1ac59717..2b39742ce2ce0f8badeb7317b7a0cf9668cfff3b 100755
--- a/buildconfig/Jenkins/buildscript.bat
+++ b/buildconfig/Jenkins/buildscript.bat
@@ -28,7 +28,7 @@ echo %sha1%
 set VS_VERSION=14
 call "%VS140COMNTOOLS%\..\..\VC\vcvarsall.bat" amd64
 set CM_GENERATOR=Visual Studio 14 2015 Win64
-:: set PARAVIEW_DIR=%PARAVIEW_NEXT_DIR%
+set PARAVIEW_DIR=%PARAVIEW_NEXT_DIR%
 
 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 :: Set up the location for local object store outside of the build and source
diff --git a/docs/source/_static/color_ranking_definitions.js b/docs/source/_static/color_ranking_definitions.js
new file mode 100644
index 0000000000000000000000000000000000000000..50f7cb2d8085c509830103e2fdffda9db0f6f4a7
--- /dev/null
+++ b/docs/source/_static/color_ranking_definitions.js
@@ -0,0 +1,8 @@
+
+$(document).ready(function() {
+             $('.ranking-top-1').parent().addClass('ranking-top-1-parent');
+             $('.ranking-top-2').parent().addClass('ranking-top-2-parent');
+             $('.ranking-med-3').parent().addClass('ranking-med-3-parent');
+             $('.ranking-low-4').parent().addClass('ranking-low-4-parent');
+             $('.ranking-low-5').parent().addClass('ranking-low-5-parent');
+});
diff --git a/docs/source/algorithms/CalculateCountRate-v1.rst b/docs/source/algorithms/CalculateCountRate-v1.rst
new file mode 100644
index 0000000000000000000000000000000000000000..aa2594fd123fab05c02be9c22cf98472e142a981
--- /dev/null
+++ b/docs/source/algorithms/CalculateCountRate-v1.rst
@@ -0,0 +1,86 @@
+.. algorithm::
+
+.. summary::
+
+.. alias::
+
+.. properties::
+
+Description
+-----------
+
+The algorithm works with event workspaces produced by instruments operating in event mode and calculates the rate at which an instrument counts
+neutrons as function of the experiment time. 
+Then it adds the time series log containing this rate, with the name, defined by 
+**CountRateLogName** property to the source workspace. 
+
+Additionally it can also calculate 2D matrix workspace, which contains count rate as function of 
+experiment time and neutrons time of flight or energy or other neutron property related to the time of flight in the range **XMin-XMax** 
+in the units defined by **RangeUnits** property. 
+
+In normal circumstances the instrument count rate does not change. Unfortunately, Data Acquisition Electronics sometimes randomly generates spurious signals, 
+appearing randomly at some moments of the experiment time. Such signals distort real physical image, obtained in experiment and should be removed. 
+
+The picture below gives example of counting rate log, calculated by the algorithm together with image of the visualization workspace, 
+which shows the spurious signal as function of experiment time and neutron energy.
+
+.. image:: /images/SpurionReal.png 
+
+The calculated log above can be used as input for :ref:`algm-FilterByLogValue` algorithm to filter events recorded around 200sec of experiment time to
+remove spurious signal at 2.9mEv.
+
+The algorithm can also be used to evaluate changes of sample reflectivity as function of some slow changing experiment's 
+parameter e.g. temperature, magnetic field or pressure.
+
+
+**NOTE:** Normally one wants to divide the count rate by a value, proportional to incident neutron flux to avoid count rate dependency from changing incident beam intensity. 
+Usually algorithm just divides the neutron counts by *proton_charge* log values, normally recorded per frame basis. 
+If this log is not available, other logs can be used to estimate incident beam intensity. 
+Visualization workspace is usually calculated with much more coarse time step than the count_rate log, so the normalization used in visualization workspace 
+is just the sum of all values of the log used for normalization falling within the visualization time step. 
+
+
+
+Usage
+-----
+
+
+**Example - Calculate Count Rate**
+
+.. testcode:: ExCalcCountRate
+
+   if "LogTest" in mtd:
+       DeleteWorkspace("LogTest")
+   # Create sample workspace with events   
+   LogTest=CreateSampleWorkspace(WorkspaceType='Event', Function='Flat background')
+   log_name = 'block_count_rate';
+   
+   # no rate log found:
+   rez = CheckForSampleLogs(LogTest,log_name)
+   print ("Initially, {0}".format(rez))
+   
+   # calculate number of events in the workspace
+   CalculateCountRate(LogTest,CountRateLogName= log_name)
+   
+   rez = CheckForSampleLogs(LogTest,log_name)   
+   if len(rez)==0:
+        print ("The Algorithm produced log: {0}".format(log_name))        
+        log = LogTest.run().getLogData(log_name)
+        print ("log {0} contains {1} entries".format(log_name,log.size()))
+        print ("log starts at {0} and records value: {1}".format(log.firstTime(),log.firstValue()))
+        print ("log ends   at {0} and records value: {1}".format(log.lastTime(),log.lastValue()))        
+   else:
+       print ("{0}".format(rez))        
+
+   
+.. testoutput:: ExCalcCountRate
+
+    Initially, Property block_count_rate not found
+    The Algorithm produced log: block_count_rate
+    log block_count_rate contains 200 entries
+    log starts at 2010-01-01T00:00:09.011891145  and records value: 991.0
+    log ends   at 2010-01-01T00:59:50.996493194  and records value: 1010.0
+ 
+.. categories::
+
+.. sourcelink::
diff --git a/docs/source/algorithms/ExtractMonitors-v1.rst b/docs/source/algorithms/ExtractMonitors-v1.rst
index e1aef59c9d8cf94cf3962b807bb16478493e9ec6..731114c9090ab4f2f0ddc4c92c127d7a4da5defd 100644
--- a/docs/source/algorithms/ExtractMonitors-v1.rst
+++ b/docs/source/algorithms/ExtractMonitors-v1.rst
@@ -33,17 +33,17 @@ Usage
   monitor_ws = mtd['Monitors']
 
   # Detector histograms
-  print("Number of spectra in input workspace: {}").format(ws.getNumberHistograms())
+  print("Number of spectra in input workspace: {0}").format(ws.getNumberHistograms())
   # Detector histograms (spectra missing detectors generate warnings)
-  print("Number of spectra in detector workspace: {}").format(detector_ws.getNumberHistograms())
+  print("Number of spectra in detector workspace: {0}").format(detector_ws.getNumberHistograms())
   # Monitor histograms
-  print("Number of spectra in monitor workspace: {}").format(monitor_ws.getNumberHistograms())
+  print("Number of spectra in monitor workspace: {0}").format(monitor_ws.getNumberHistograms())
   # Check if the first spectrum in the detector workspace is a monitor
-  print("Detector workspace isMonitor for spectrum 0: {}").format(detector_ws.getDetector(0).isMonitor())
+  print("Detector workspace isMonitor for spectrum 0: {0}").format(detector_ws.getDetector(0).isMonitor())
   # Check if the first spectrum in the monitor workspace is a monitor
-  print("Monitor workspace isMonitor for spectrum 0: {}").format(monitor_ws.getDetector(0).isMonitor())
+  print("Monitor workspace isMonitor for spectrum 0: {0}").format(monitor_ws.getDetector(0).isMonitor())
   # See the monitor workspace is set
-  print("Name of monitor workspace: {}").format(detector_ws.getMonitorWorkspace().name())
+  print("Name of monitor workspace: {0}").format(detector_ws.getMonitorWorkspace().name())
 
 Output:
 
diff --git a/docs/source/algorithms/MatchPeaks-v1.rst b/docs/source/algorithms/MatchPeaks-v1.rst
new file mode 100644
index 0000000000000000000000000000000000000000..86bc1356e43bf8ccf2e7c886b7c68f23cd5bde56
--- /dev/null
+++ b/docs/source/algorithms/MatchPeaks-v1.rst
@@ -0,0 +1,48 @@
+.. algorithm::
+
+.. summary::
+
+.. alias::
+
+.. properties::
+
+Description
+-----------
+
+This algorithm circular shifts the Y- and E-values of each spectrum of an input workspace while keeping its X-values.
+Peak positions of the input workspace can be aligned with the centre of the X-axis, its difference to the elastic peak of a second input workspace, or the difference between a second input workspace and the centre of the X-axis (option MatchInput2ToCenter).
+A BinRangeTable contains two values, 'MinBin' and 'MaxBin'. Bins smaller than the 'MinBin' value and larger than the 'MaxBin' value represent bins that can be masked. Those bins were circular shifted.
+Enabling MaskBins performs the masking accordingly.
+
+Restrictions
+############
+
+The input workspaces should have one elastic peak (see :ref:`FindEPP <algm-FindEPP>`).
+Furthermore, input workspaces should have the same number of bins and spectra as well as identical x-values.
+
+Usage
+-----
+
+.. testcode:: MatchPeaks
+
+  # Create a workspace containing some data.
+  ws = CreateSampleWorkspace(Function='User Defined',
+                                WorkspaceType='Histogram',
+                                UserDefinedFunction="name=Gaussian, PeakCentre=3.2, Height=10, Sigma=0.3",
+                                NumBanks=1, BankPixelWidth=1,
+                                XUnit='DeltaE', XMin=0, XMax=7, BinWidth=0.099)
+
+  output_ws = MatchPeaks(InputWorkspace=ws)
+
+  print('Peak height at center: {}').format(output_ws.readY(0)[ws.blocksize() / 2])
+
+Output
+######
+
+.. testoutput:: MatchPeaks
+
+   Peak height at center: 9.94327262198
+
+.. categories::
+
+.. sourcelink::
diff --git a/docs/source/algorithms/RemoveExpDecay-v1.rst b/docs/source/algorithms/RemoveExpDecay-v1.rst
index e00832f996dced70777a745cf196cddc4dac80a6..cd68f2245c6f9cf6c0d7e483983a3f02e4490d40 100644
--- a/docs/source/algorithms/RemoveExpDecay-v1.rst
+++ b/docs/source/algorithms/RemoveExpDecay-v1.rst
@@ -15,7 +15,7 @@ in a workspace will be corrected.
 
 The formula for removing the exponential decay is given by:
 
-.. math:: NewData = (OldData\times{e^\frac{t}{\tau}})/N_0 - 1.0
+.. math:: \textrm{NewData} = (\textrm{OldData}\times{e^\frac{t}{\tau}})/N_0 - 1.0
 
 where :math:`\tau` is the muon lifetime (2.1969811e-6 seconds). :math:`N_0` is a
 fitted normalisation constant.
diff --git a/docs/source/algorithms/SelectNexusFilesByMetadata-v1.rst b/docs/source/algorithms/SelectNexusFilesByMetadata-v1.rst
index 20f4dca80b7c955edfe5de2181a4ef0aba412fc3..c5c2be8732290232efa2cbf3b14334bb1a5359dc 100644
--- a/docs/source/algorithms/SelectNexusFilesByMetadata-v1.rst
+++ b/docs/source/algorithms/SelectNexusFilesByMetadata-v1.rst
@@ -12,11 +12,11 @@ Description
 This algorithm returns the nexus (HDF) files in the given files list that satisfy the specified criteria.
 This is done without actually loading the data, but just the needed metadata.
 Input files need to exist and be specified following the Mantid rules in `MultiFileLoading <http://www.mantidproject.org/MultiFileLoading>`_.
-Note, that the ``+`` and ``-`` rules will act as ``,`` and ``:`` correspondingly, since the summing does not make sense for the given purpose.
 Criteria could be any python logical expression involving the nexus entry names enclosed with ``$`` symbol.
 Arbitrary number of criteria can be combined. The metadata entry should contain only one element.
 Note, that if the entry is of string type, string comparison will be performed.
-As a result, a plain comma separated list of fully resolved file names satisfying the criteria will be returned.
+As a result, a string of the fully resolved file names satisfying the criteria
+(and following the same algebra as in input, i.e. ``+`` or ``,``) will be returned.
 Note, that this algorithm requires `h5py <https://pypi.python.org/pypi/h5py>`_ package installed.
 
 **Example - Running SelectNexusFilesByMetadata**
diff --git a/docs/source/algorithms/WorkflowAlgorithmRunner-v1.rst b/docs/source/algorithms/WorkflowAlgorithmRunner-v1.rst
new file mode 100644
index 0000000000000000000000000000000000000000..b8e98b33c731f2041534d1d7d75720eba3d7ec28
--- /dev/null
+++ b/docs/source/algorithms/WorkflowAlgorithmRunner-v1.rst
@@ -0,0 +1,120 @@
+.. algorithm::
+
+.. summary::
+
+.. alias::
+
+.. properties::
+
+Description
+-----------
+
+This utility algorithm is used to control consecutive executions of another algorithm. After defining a table of desired input and output properties, ``WorkflowAlgorithmRunner`` connects the outputs to input properties, declares the order of execution, and runs the algorithm. It is mainly meant for managing the execution of workflow algorithms for data reduction purposes although it can run all types of algorithms.
+
+The runs are specified in a `TableWorkspace` and given as the *SetupTable* input property to the algorihtm. The first column has to contain unique string identifiers for each row. The rest of the columns have to be named same as the input/output properties of the managed algorithm.
+
+Each row in the *SetupTable* corresponds to a single run of the managed algorithm. Its properties are set without modifications from the corresponding columns of the row except for special input/output columns declare in the *InputOutputMap*. For example, two independent runs of the :ref:`algm-Scale` would be specified as
+
+=======  ==============  ===============  ======  =========
+Id       InputWorkspace  OutputWorkspace  Factor  Operation 
+=======  ==============  ===============  ======  =========
+1st run  ws1             ws1              0.42    Multiply  
+2nd run  ws2             scaled_ws2       100     Multiply  
+=======  ==============  ===============  ======  =========
+
+The *Operation* column could have been omitted in the above to use the default value of the *Operation* property of `Scale`.
+
+*InputOutputMap* connects the outputs of a run to the inputs of another run. It is a `TableWorkspace` where the column names correspond to some or all of the managed algorithm's input properties. The table has only a single row which lists the names of the output properties whose final values will be forwarded to the corresponding input property. To continue the :ref:`algm-Scale` example above, the *InputWorkspace* and *OutputWorkspace* properties would be connected by the following single column table:
+
++-----------------+
+| InputWorkspace  |
++=================+
+| OutputWorkspace |
++-----------------+
+
+.. note::
+    Only workspace properties can be specified in the *InputOutputMap*.
+
+.. note::
+    A single output property can be wired to several input properties. However, an input property cannot have multiple output properties.
+
+If the one wanted to give the workspace scaled by '2nd run' as an input for '1st run', the *InputOutputMap* would look like the following:
+
+=======  ==============  ===============  ======  =========
+Id       InputWorkspace  OutputWorkspace  Factor  Operation
+=======  ==============  ===============  ======  =========
+1st run  2nd run         'ws1'            0.42    Multiply
+2nd run  'ws2'           scaled_ws2       100     Multiply
+=======  ==============  ===============  ======  =========
+
+This would result in '2nd run' to be executed first to produce the 'scaled_ws2' workspace which in turn would be fed to '1st run' as the *InputWorkspace* property. Behind the scenes, ``WorkflowAlgorithmRunner`` will replace the '2nd run' in the InputWorkspace column of '1st run' by scaled_ws2.
+
+In the above, note the quotation marks around the 'ws2' and 'ws1' property names. These are **hard coded input** and **forced output** values, respectively. This tells `WorkspaceAlgorithmRunner` to omit input/output mapping and to keep these values as they are.
+
+.. note::
+    A non-forced output property which is not needed by the other runs will be cleared by ``WorkflowAlgorithmRunner``.
+
+An equivalent python commands to running ``WorkflowAlgorithmRunner`` with the above *InputOutputMap* and *SetupTable* would be
+
+::
+
+    Scale(InputWorkspace='ws2', OutputWorkspace='scaled_ws2', Factor=100, Operation='Multiply')
+    Scale(InputWorkspace='scaled_ws2', OutputWorkspace='ws1', Factor=0.42, Operation='Multiply')
+
+Usage
+-----
+
+**Example: Let's recreate the example in the Description section**
+
+.. testcode:: ScaleExample
+
+    # This is our initial workspace. We want to scale it first by 100
+    # and then by 0.42
+    CreateSingleValuedWorkspace(OutputWorkspace='ws2', DataValue=1.0)
+    
+    # Setup the runs for the Scale algorithm
+    setupTable = WorkspaceFactoryImpl.Instance().createTable()
+    setupTable.addColumn('str', 'Run name') # First column can have arbitrary name.
+    # The rest of the columns can be in arbitrary order
+    setupTable.addColumn('str', 'InputWorkspace')
+    setupTable.addColumn('double', 'Factor') # Scale expects to get a number here.
+    setupTable.addColumn('str', 'OutputWorkspace')
+    row = {
+        'Run name': '1st run',
+        'InputWorkspace': '2nd run',
+        'Factor': 0.42,
+        'OutputWorkspace': '"ws1"' # Forced output either by '' or "".
+    }
+    setupTable.addRow(row)
+    row = {
+        'Run name': '2nd run',
+        'InputWorkspace': "'ws2'",
+        'Factor': 100,
+        'OutputWorkspace': 'scaled_ws2'
+    }
+    setupTable.addRow(row)
+    AnalysisDataServiceImpl.Instance().addOrReplace('setupTable', setupTable)
+    
+    # Map OutputWorkspace to InputWorkspace
+    ioMap = WorkspaceFactoryImpl.Instance().createTable()
+    ioMap.addColumn('str', 'InputWorkspace')
+    ioMap.addRow({'InputWorkspace': 'OutputWorkspace'})
+    AnalysisDataServiceImpl.Instance().addOrReplace('ioMapTable', ioMap)
+    
+    # Execute the algorithm
+    WorkflowAlgorithmRunner('Scale', SetupTable=setupTable, InputOutputMap=ioMap)
+    
+    # Print some results
+    print('Original input value: {0}'.format(mtd['ws2'].dataY(0)[0]))
+    print('After scaling by 100: {0}'.format(mtd['scaled_ws2'].dataY(0)[0]))
+    print('After further scaling by 0.42: {0}'.format(mtd['ws1'].dataY(0)[0]))
+
+.. testoutput:: ScaleExample
+
+    Original input value: 1.0
+    After scaling by 100: 100.0
+    After further scaling by 0.42: 42.0
+
+.. categories::
+
+.. sourcelink::
diff --git a/docs/source/concepts/FittingMinimizers.rst b/docs/source/concepts/FittingMinimizers.rst
index e3394dc9918edb76c26655030ea6195c24ee6214..f84d77dc47f481a14b97f3e955dbc3e2a50be734 100644
--- a/docs/source/concepts/FittingMinimizers.rst
+++ b/docs/source/concepts/FittingMinimizers.rst
@@ -38,12 +38,12 @@ options are available:
 
   A `Gauss-Newton <https://en.wikipedia.org/wiki/Gauss–Newton_algorithm#Improved_versions>`__ algorithm with damping.
 - :ref:`FABADA <FABADA>`
-- `DTRS <https://ccpforge.cse.rl.ac.uk/gf/project/ral_nlls>`__
-
-  A trust region minimizer (not listed in the comparison table)
-- `Mose-Sorensen <https://ccpforge.cse.rl.ac.uk/gf/project/ral_nlls>`__
-  
-  A trust region minimizer (not listed in the comparison table)
+- `Trust region
+  <https://ccpforge.cse.rl.ac.uk/gf/project/ral_nlls>`__: a `trust
+  region algorithm <https://en.wikipedia.org/wiki/Trust_region>`__ that,
+  at each iteration, calculates and returns the step that reduces the
+  model by an acceptable amount by solving (or approximating a
+  solution to) the trust-region subproblem
 
 All these algorithms are `iterative
 <https://en.wikipedia.org/wiki/Iterative_method>`__.  The *Simplex*
@@ -59,8 +59,8 @@ function to drive the iterative process towards a local minimum.
 
 BFGS and the Levenberg-Marquardt algorithms belong to the second-order
 class of algorithms, in the sense that they use second-order
-information of the cost function (second derivatives or the Hessian
-matrix). Some algorithms like BFGS approximate the Hessian by the
+information of the cost function (second-order partial derivatives of 
+a Hessian matrix). Some algorithms like BFGS approximate the Hessian by the
 gradient values of successive iterations. The Levenberg-Marquard
 algorithm is a modified Gauss-Newton that introduces an adaptive term
 to prevent unstability when the approximated Hessian is not positive
@@ -74,7 +74,9 @@ analysis. It is excluded from the comparison described below, as it is
 a substantially different algorithm.
 
 In most cases, the implementation of these algorithms is based on the
-`GNU Scientific Libraty routines for least-squares fitting
+`GSL (GNU Scientific Library) library
+<https://www.gnu.org/software/gsl/>`__, and more specifically on the
+`GSL routines for least-squares fitting
 <https://www.gnu.org/software/gsl/manual/html_node/Least_002dSquares-Fitting.html#Least_002dSquares-Fitting>`__
 
 
@@ -104,8 +106,7 @@ exception of FABADA which belongs to a different class of methods and
 would not be compared in a fair manner. For all the minimizers
 compared here the algorithm :ref:`Fit <algm-Fit>` was run using the
 same initialization or starting points for test every problem, as
-specified in the test problem definitions. No constraints or ties were
-added.
+specified in the test problem definitions.
 
 Accuracy is measured using the sum of squared fitting errors as
 metric, or "ChiSquared" as defined in :ref:`Fit
@@ -113,9 +114,10 @@ metric, or "ChiSquared" as defined in :ref:`Fit
 difference between the expected outputs and the outputs calculated by
 the model fitted: :math:`\chi_{1}^{2} = \sum_{i} (y_i - f_i)^2` (see
 :ref:`CalculateChiSquared <algm-CalculateChiSquared>` for full details
-and different variants).  Run time is measured for the execution of
-the :ref:`Fit <algm-Fit>` algorithm for an equation and dataset
-previously created.
+and different variants).  Run time is measured as the time it takes to
+execute the :ref:`Fit <algm-Fit>` algorithm, i.e. the time it takes to
+fit one model with one set of initial values of the model parameters against 
+one dataset
 
 .. There would be two alternative for the errors:
    1. Without errors, as it is
@@ -131,20 +133,28 @@ Benchmark problems
 Each test problem included in this comparison is defined by the
 following information:
 
-- Input data (:math:`x_i` values)
-- Output data (:math:`y_i` values)
+- Dataset in the form of any number of pairs :math:`x_i`, :math:`y_i` with optional :math:`y_i` error estimates
 - Function to fit, with parameters
-- Starting point or initial values of the function parameters
-- Certified or reference best values for the parameters, with an associated residual of the certified or best model 
-
-The problems have been obtained from the following benchmark:
-
-- `NIST nonlinear regression problems <http://itl.nist.gov/div898/strd/general/dataarchive.html>`__.
-
-As the test problems do not define observational errors this
-comparison does not use the weights of the least squares cost
-function.  An :ref:`alternative comparison using simulated errors is
-also available <Minimizers_weighted_comparison>`, with similar results
+- Initial values (starting point) of the function parameters
+- Optional: reference best values for the parameters (some may refer to these as certified values), i.e. target parameter values for the minimizers   
+
+The current problems have been obtained from the following benchmarks and sources:
+
+- `NIST nonlinear regression problems
+  <http://itl.nist.gov/div898/strd/general/dataarchive.html>`__.
+- `CUTEst Constrained and Unconstrained Testing Environment on
+  steroids <https://ccpforge.cse.rl.ac.uk/gf/project/cutest/wiki/>`__
+- A set of problems extracted from Mantid usage examples and system
+  tests called here *Neutron data*. This is a first attempt at
+  evaluating different minimizers using specific neutron datasets with
+  real spectra and observational errors. Significant improvements are
+  expected for next releases of Mantid
+
+As the NIST and CUTEst test problems do not define observational
+errors the comparison shown below does not use the weights of the
+least squares cost function.  An :ref:`alternative comparison that
+uses observational errors as weights in the cost function is also
+available <Minimizers_weighted_comparison>`, with similar results
 overall.
 
 Comparison in terms of accuracy
@@ -156,7 +166,8 @@ Summary, median ranking
 
 The summary table shows the median ranking across all the test
 problems. See :ref:`detailed results by test problem (accuracy)
-<Minimizers_unweighted_comparison_in_terms_of_accuracy>`.
+<Minimizers_unweighted_comparison_in_terms_of_accuracy>` (also
+accessible by clicking on the cells of the table).
 
 Alternatively, see the :ref:`detailed results when using weighted
 least squares as cost function
@@ -170,7 +181,7 @@ least squares as cost function
 
 .. summary splitting the NIST problems into three blocks as originally done in the NIST pages
 
-.. include:: minimizers_comparison/v3.7.0/comparison_unweighted_v3.7_acc_summary.txt
+.. include:: minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_summary.txt
 
 
 Comparison in terms of run time
@@ -187,8 +198,21 @@ Alternatively, see the :ref:`detailed results when using weighted
 least squares as cost function
 <Minimizers_weighted_comparison_in_terms_of_run_time>`.
 
-.. include:: minimizers_comparison/v3.7.0/comparison_unweighted_v3.7_runtime_summary.txt
+.. include:: minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_summary.txt
+
+
+Technical details for reproducibility
+#####################################
+
+Note that fitting results may be sensitive to the platform and
+versions of the algorithms and underlying libraries used.  All the
+results shown here have been produced using the same version of Mantid
+and on the same system:
+
+- Mantid release 3.8
 
+- Debian 8 GNU/Linux system with an Intel Core i7-4790 processor,
+  using `GSL <https://www.gnu.org/software/gsl/>`__ version 1.16.
 
 References:
              
diff --git a/docs/source/concepts/FittingMinimizersComparisonDetailed.rst b/docs/source/concepts/FittingMinimizersComparisonDetailed.rst
index a37c61d4bc338490b247be9c4cfd2c3d18d8084a..ffa9cf0694aa00c0dd913c5a66f5f58a36523678 100644
--- a/docs/source/concepts/FittingMinimizersComparisonDetailed.rst
+++ b/docs/source/concepts/FittingMinimizersComparisonDetailed.rst
@@ -50,16 +50,25 @@ weighted least squares as cost function
 
 Accuracy for individual NIST problems, "lower" difficulty
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-.. include:: minimizers_comparison/v3.7.0/comparison_unweighted_v3.7_acc_nist_lower.txt
+.. include:: minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_nist_lower.txt
 
 Accuracy for individual NIST problems, "average" difficulty
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-.. include:: minimizers_comparison/v3.7.0/comparison_unweighted_v3.7_acc_nist_average.txt
+.. include:: minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_nist_average.txt
 
 Accuracy for individual NIST problems, "higher" difficulty
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-.. include:: minimizers_comparison/v3.7.0/comparison_unweighted_v3.7_acc_nist_higher.txt
+.. include:: minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_nist_higher.txt
+
+
+Accuracy for individual "CUTEst" problems
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. include:: minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_cutest.txt
+
+Accuracy for individual Neutron Data problems
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. include:: minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_neutron_data.txt
 
 
 .. _Minimizers_unweighted_comparison_in_terms_of_run_time:
@@ -80,14 +89,25 @@ weighted least squares as cost function
 Run time for individual NIST problems, "lower" difficulty
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-.. include:: minimizers_comparison/v3.7.0/comparison_unweighted_v3.7_runtime_nist_lower.txt
+.. include:: minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_nist_lower.txt
 
 Run time for individual NIST problems, "average" difficulty
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-.. include:: minimizers_comparison/v3.7.0/comparison_unweighted_v3.7_runtime_nist_average.txt
+.. include:: minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_nist_average.txt
 
 Run time for individual NIST problems, "higher" difficulty
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-.. include:: minimizers_comparison/v3.7.0/comparison_unweighted_v3.7_runtime_nist_higher.txt
+.. include:: minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_nist_higher.txt
+
+Run time for individual "CUTEst" problems
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. include:: minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_cutest.txt
+
+Run time for individual Neutron Data problems
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. include:: minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_neutron_data.txt
+
diff --git a/docs/source/concepts/FittingMinimizersWeightedComparisonDetailed.rst b/docs/source/concepts/FittingMinimizersWeightedComparisonDetailed.rst
index 3a364bfe5c57de1d39558ac3c75e2f934bd3aa3f..4b28a0e3c55b64f9d2a70d3801759b88fc5f8dc9 100644
--- a/docs/source/concepts/FittingMinimizersWeightedComparisonDetailed.rst
+++ b/docs/source/concepts/FittingMinimizersWeightedComparisonDetailed.rst
@@ -10,7 +10,7 @@ Here we provide a summary and detailed results for a comparison of
 minimizers in Mantid when using weights in the cost function. For an
 explanation of the comparison approach and the results obtained when
 not using weights see the :ref:`General comparison of minimizers
-<FittingMinimizers>`.  In the alternative results presented here the
+<FittingMinimizers>`.  In the results presented here the
 cost function used is least squares and weigths are defined from input
 observational error estimates. See the :ref:`general concept page on
 fitting <Fitting>` for an explanation on how the error estimates are
@@ -19,10 +19,12 @@ in the list of cost functions available in Mantid as "Least
 squares". It is the default cost function in Mantid and the most
 commonly used for neutron data.
 
-As the NIST problems do not include measurement errors, assuming that
-these datasets would represent data from a typical Mantid workspace we
-introduce observational error estimates calculated as the square root
-of the observations.
+For the Neutron data problems true observational errors are used as
+weights, as commonly done in Mantid.  As the NIST and CUTEst problems
+do not include measurement errors, assuming that these datasets would
+represent data from a typical Mantid workspace we introduce
+observational error estimates calculated as the square root of the
+observations.
 
 .. _Minimizers_weighted_comparison_in_terms_of_accuracy:
 
@@ -32,21 +34,27 @@ Comparison in terms of accuracy
 
 Summary, median ranking
 ^^^^^^^^^^^^^^^^^^^^^^^
-.. include:: minimizers_comparison/v3.7.0/comparison_weighted_v3.7_acc_summary.txt
+.. include:: minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_summary.txt
 
 Accuracy for individual NIST problems, "lower" difficulty
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-.. include:: minimizers_comparison/v3.7.0/comparison_weighted_v3.7_acc_nist_lower.txt
+.. include:: minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_nist_lower.txt
 
 Accuracy for individual NIST problems, "average" difficulty
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. include:: minimizers_comparison/v3.7.0/comparison_weighted_v3.7_acc_nist_average.txt
+.. include:: minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_nist_average.txt
 
 Accuracy for individual NIST problems, "higher" difficulty
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-.. include:: minimizers_comparison/v3.7.0/comparison_weighted_v3.7_acc_nist_higher.txt
+.. include:: minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_nist_higher.txt
+
+Accuracy for individual "CUTEst" problems
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. include:: minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_cutest.txt
 
+Accuracy for individual Neutron Data problems
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. include:: minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_neutron_data.txt
 
 .. _Minimizers_weighted_comparison_in_terms_of_run_time:
 
@@ -55,19 +63,26 @@ Comparison in terms of run time
 
 Summary, median ranking
 ^^^^^^^^^^^^^^^^^^^^^^^
-.. include:: minimizers_comparison/v3.7.0/comparison_weighted_v3.7_runtime_summary.txt
+.. include:: minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_summary.txt
 
 Run time for individual NIST problems, "lower" difficulty
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. include:: minimizers_comparison/v3.7.0/comparison_weighted_v3.7_runtime_nist_lower.txt
+.. include:: minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_nist_lower.txt
 
 Run time for individual NIST problems, "average" difficulty
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. include:: minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_nist_average.txt
 
-.. include:: minimizers_comparison/v3.7.0/comparison_weighted_v3.7_runtime_nist_average.txt
 
 Run time for individual NIST problems, "higher" difficulty
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. include:: minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_nist_higher.txt
+
+Run time for individual "CUTEst" problems
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. include:: minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_cutest.txt
+
+Run time for individual Neutron Data problems
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. include:: minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_neutron_data.txt
 
-.. include:: minimizers_comparison/v3.7.0/comparison_weighted_v3.7_runtime_nist_higher.txt
diff --git a/docs/source/concepts/Properties.rst b/docs/source/concepts/Properties.rst
index 34aaf5344ef1e1fdfab914d392ef5facf4eedcea..4c76dbef8607a6a6e8e975e6f9ef602005d19cb2 100644
--- a/docs/source/concepts/Properties.rst
+++ b/docs/source/concepts/Properties.rst
@@ -50,8 +50,9 @@ or, if creating using an already existing vector:
 File Properties
 ~~~~~~~~~~~~~~~
 
-These properties are for capturing and holding the path and filename to
-an external file. File properties have a FileAction property that
+There are two file properties: ``FileProperty`` and ``MultipleFileProperty``.
+These properties are for capturing and holding the path and filenames to
+external file (s). File properties have a FileAction property that
 controls it's purpose and behaviour.
 
 Save :to specify a file to write to, the file may or may not exist
@@ -65,6 +66,8 @@ If the file property is has a FileAction of Load as is given a relative
 path (such as "input.txt" or "\\data\\input.txt" as its value it will
 search for matching files in this order:
 
+Note, that ``MultipleFileProperty`` supports only Load (default) and OptionalLoad actions.
+
 #. The current directory
 #. The entries in order from the datasearch.directories entry in the
    :ref:`Properties File <Properties File>`
@@ -158,6 +161,8 @@ The validators currently included in Mantid are:
    set of values.
 -  FileValidator - ensures that a file (given as a string property)
    exists (used internally by the FileProperty).
+-  MultiFileValidator - ensures that each file in a given list exists
+   (used internally by the MultipleFileProperty).
 
 In addition, there are a number of validators specifically for use with
 Workspace properties:
diff --git a/docs/source/concepts/minimizers_comparison/color_definitions.js b/docs/source/concepts/minimizers_comparison/color_definitions.js
new file mode 100644
index 0000000000000000000000000000000000000000..50f7cb2d8085c509830103e2fdffda9db0f6f4a7
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/color_definitions.js
@@ -0,0 +1,8 @@
+
+$(document).ready(function() {
+             $('.ranking-top-1').parent().addClass('ranking-top-1-parent');
+             $('.ranking-top-2').parent().addClass('ranking-top-2-parent');
+             $('.ranking-med-3').parent().addClass('ranking-med-3-parent');
+             $('.ranking-low-4').parent().addClass('ranking-low-4-parent');
+             $('.ranking-low-5').parent().addClass('ranking-low-5-parent');
+});
diff --git a/docs/source/concepts/minimizers_comparison/color_definitions.txt b/docs/source/concepts/minimizers_comparison/color_definitions.txt
index 857fd66fe6d44431f79c4cd253c08e93ae750945..a0eee2e57e22609857899e28b52f276ad813546b 100644
--- a/docs/source/concepts/minimizers_comparison/color_definitions.txt
+++ b/docs/source/concepts/minimizers_comparison/color_definitions.txt
@@ -6,19 +6,13 @@
 .. role:: ranking-low-5
 
 
-.. .. This is for the ranking/gradient colors in the table cells
+.. .. This is for the ranking/gradient colors in the table cells. The function changes the class
+      of the parents of the text/numbers that go in some table cells (as span elements), so that the cells themselves
+      (parents) are assigned a certain style class (background color)
+
 .. raw:: html
 
-         <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
-         <script>
-           $(document).ready(function() {
-             $('.ranking-top-1').parent().addClass('ranking-top-1-parent');
-             $('.ranking-top-2').parent().addClass('ranking-top-2-parent');
-             $('.ranking-med-3').parent().addClass('ranking-med-3-parent');
-             $('.ranking-low-4').parent().addClass('ranking-low-4-parent');
-             $('.ranking-low-5').parent().addClass('ranking-low-5-parent');
-           });
-         </script>
+         <script type="text/javascript" src="../_static/color_ranking_definitions.js"></script>
          <style>
            .ranking-top-1-parent {background-color:#fef0d9;}
            .ranking-top-2-parent {background-color:#fdcc8a;}
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_cutest.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_cutest.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6a17095a330155ed648ab3738064390c66f1092d
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_cutest.txt
@@ -0,0 +1,19 @@
+
+.. _Minimizers_unweighted_comparison_in_terms_of_accuracy_cutest:
+
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|                                                                        |BFGS                                                                    |Conjugate gradient (Fletcher-Reeves imp.)                               |Conjugate gradient (Polak-Ribiere imp.)                                 |Damping                                                                 |Levenberg-Marquardt                                                     |Levenberg-MarquardtMD                                                   |Simplex                                                                 |SteepestDescent                                                         |Trust Region                                                            |
++========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+
+|PALMER6C                                                                | :ranking-low-5:`372.9`                                                 | :ranking-low-5:`156`                                                   | :ranking-low-5:`179.2`                                                 | :ranking-low-5:`1.367e+06`                                             | :ranking-top-1:`1`                                                     | :ranking-low-5:`1.367e+06`                                             | :ranking-low-5:`373`                                                   | :ranking-low-5:`491.7`                                                 | :ranking-low-5:`nan`                                                   |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|PALMER7C                                                                | :ranking-low-5:`67.84`                                                 | :ranking-low-5:`14.16`                                                 | :ranking-low-5:`16.92`                                                 | :ranking-low-5:`4.478e+05`                                             | :ranking-low-5:`2415`                                                  | :ranking-low-5:`4.478e+05`                                             | :ranking-low-5:`74.4`                                                  | :ranking-low-5:`115.4`                                                 | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|PALMER8C                                                                | :ranking-low-5:`224.5`                                                 | :ranking-low-5:`20.27`                                                 | :ranking-low-5:`20.86`                                                 | :ranking-low-5:`3.601e+05`                                             | :ranking-low-5:`338`                                                   | :ranking-low-5:`3.601e+05`                                             | :ranking-low-5:`118.8`                                                 | :ranking-low-5:`345.2`                                                 | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|YFITU                                                                   | :ranking-low-5:`4.981e+14`                                             | :ranking-low-5:`1.495e+14`                                             | :ranking-low-5:`2.976e+13`                                             | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`4.094e+04`                                             | :ranking-low-5:`3.382e+14`                                             | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|VESUVIOLS                                                               | :ranking-med-3:`1.613`                                                 | :ranking-med-3:`1.611`                                                 | :ranking-med-3:`1.611`                                                 | :ranking-med-3:`1.508`                                                 | :ranking-top-1:`1`                                                     | :ranking-med-3:`1.423`                                                 | :ranking-low-5:`4.669`                                                 | :ranking-med-3:`1.611`                                                 | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|DMN15102LS                                                              | :ranking-low-5:`8.623`                                                 | :ranking-low-5:`4.69`                                                  | :ranking-low-5:`4.412`                                                 | :ranking-low-5:`556.8`                                                 | :ranking-low-5:`4.822`                                                 | :ranking-med-3:`1.336`                                                 | :ranking-low-5:`6.504`                                                 | :ranking-low-5:`4.911`                                                 | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_neutron_data.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_neutron_data.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6b0eda21a62af9315dedb642eee2d03f1ff911c4
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_neutron_data.txt
@@ -0,0 +1,45 @@
+
+.. _Minimizers_unweighted_comparison_in_terms_of_accuracy_neutron_data:
+
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|                                                                        |BFGS                                                                    |Conjugate gradient (Fletcher-Reeves imp.)                               |Conjugate gradient (Polak-Ribiere imp.)                                 |Damping                                                                 |Levenberg-Marquardt                                                     |Levenberg-MarquardtMD                                                   |Simplex                                                                 |SteepestDescent                                                         |Trust Region                                                            |
++========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+
+|ENGINX 193749 calibration, spectrum 651, peak 19                        | :ranking-top-1:`1.047`                                                 | :ranking-top-1:`1.047`                                                 | :ranking-top-1:`1.047`                                                 | :ranking-low-5:`2.532e+09`                                             | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.024`                                                 | :ranking-top-1:`1.045`                                                 | :ranking-med-3:`1.399`                                                 | :ranking-top-1:`1.001`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|ENGINX 193749 calibration, spectrum 651, peak 20                        | :ranking-med-3:`1.478`                                                 | :ranking-med-3:`1.459`                                                 | :ranking-med-3:`1.469`                                                 | :ranking-low-5:`nan`                                                   | :ranking-top-1:`1`                                                     | :ranking-med-3:`1.48`                                                  | :ranking-med-3:`1.457`                                                 | :ranking-low-5:`6.097`                                                 | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|ENGINX 193749 calibration, spectrum 651, peak 23                        | :ranking-top-1:`1.079`                                                 | :ranking-top-1:`1.096`                                                 | :ranking-top-1:`1.064`                                                 | :ranking-low-5:`nan`                                                   | :ranking-top-2:`1.146`                                                 | :ranking-top-1:`1.089`                                                 | :ranking-top-1:`1.055`                                                 | :ranking-low-5:`11.32`                                                 | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|ENGINX 193749 calibration, spectrum 651, peak 5                         | :ranking-top-2:`1.286`                                                 | :ranking-top-2:`1.225`                                                 | :ranking-top-2:`1.224`                                                 | :ranking-low-4:`2.34`                                                  | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.003`                                                 | :ranking-top-2:`1.204`                                                 | :ranking-med-3:`1.454`                                                 | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|ENGINX 193749 calibration, spectrum 651, peak 6                         | :ranking-top-1:`1.047`                                                 | :ranking-top-1:`1.004`                                                 | :ranking-top-1:`1.005`                                                 | :ranking-low-5:`nan`                                                   | :ranking-top-1:`1.094`                                                 | :ranking-top-2:`1.222`                                                 | :ranking-top-1:`1`                                                     | :ranking-med-3:`1.481`                                                 | :ranking-top-1:`1.093`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|ENGINX 236516 vanadium, bank 1, 10 brk                                  | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.138`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.138`                                                 | :ranking-top-1:`1.023`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|ENGINX 236516 vanadium, bank 1, 30 brk                                  | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.138`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.138`                                                 | :ranking-top-2:`1.106`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|EVS14188-90_processed Gaussian peaks 1                                  | :ranking-med-3:`1.634`                                                 | :ranking-med-3:`1.63`                                                  | :ranking-med-3:`1.63`                                                  | :ranking-low-4:`2.261`                                                 | :ranking-med-3:`1.723`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-4:`2.396`                                                 | :ranking-low-4:`2.4`                                                   | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|EVS14188-90_processed Gaussian peaks 1                                  | :ranking-med-3:`1.538`                                                 | :ranking-med-3:`1.538`                                                 | :ranking-med-3:`1.538`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.063`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-4:`2.337`                                                 | :ranking-low-4:`2.344`                                                 | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|GEM 13 IC peaks                                                         | :ranking-low-5:`38.01`                                                 | :ranking-low-5:`5.84`                                                  | :ranking-low-5:`3.141`                                                 | :ranking-low-5:`nan`                                                   | :ranking-top-1:`1.06`                                                  | :ranking-top-1:`1`                                                     | :ranking-low-5:`14.9`                                                  | :ranking-low-5:`37.32`                                                 | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 1                                    | :ranking-top-1:`1.005`                                                 | :ranking-low-5:`5.036`                                                 | :ranking-low-5:`5.081`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-5:`13.44`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-5:`5.281`                                                 | :ranking-low-5:`7.485`                                                 | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 2                                    | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.267`                                                 | :ranking-top-2:`1.189`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-med-3:`1.511`                                                 | :ranking-low-5:`3.546`                                                 | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 3                                    | :ranking-low-4:`2.604`                                                 | :ranking-low-5:`10.96`                                                 | :ranking-low-5:`9.291`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`11.54`                                                 | :ranking-low-5:`21.39`                                                 | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 4                                    | :ranking-low-5:`16.21`                                                 | :ranking-low-5:`16.31`                                                 | :ranking-low-5:`17.19`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`18.63`                                                 | :ranking-low-5:`36.03`                                                 | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 5                                    | :ranking-med-3:`1.667`                                                 | :ranking-low-4:`1.871`                                                 | :ranking-med-3:`1.643`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-4:`2.334`                                                 | :ranking-low-5:`3.402`                                                 | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 6                                    | :ranking-low-5:`3.922`                                                 | :ranking-low-5:`3.822`                                                 | :ranking-low-5:`3.923`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`5.876`                                                 | :ranking-low-5:`16.78`                                                 | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 7                                    | :ranking-low-5:`4.736`                                                 | :ranking-med-3:`1.344`                                                 | :ranking-low-5:`4.82`                                                  | :ranking-low-5:`2.948e+06`                                             | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`5.245`                                                 | :ranking-low-5:`6.1`                                                   | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 8                                    | :ranking-low-4:`2.154`                                                 | :ranking-low-4:`2.198`                                                 | :ranking-low-4:`1.992`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-4:`2.799`                                                 | :ranking-low-5:`3.845`                                                 | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 9                                    | :ranking-top-2:`1.133`                                                 | :ranking-top-2:`1.132`                                                 | :ranking-top-2:`1.28`                                                  | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.283`                                                 | :ranking-med-3:`1.594`                                                 | :ranking-top-1:`1`                                                     |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_nist_average.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_nist_average.txt
new file mode 100644
index 0000000000000000000000000000000000000000..dab029e28976d172f4865cac78609c58b989511c
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_nist_average.txt
@@ -0,0 +1,43 @@
+
+.. _Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_average:
+
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|                                                                            |BFGS                                                                    |Conjugate gradient (Fletcher-Reeves imp.)                               |Conjugate gradient (Polak-Ribiere imp.)                                 |Damping                                                                 |Levenberg-Marquardt                                                     |Levenberg-MarquardtMD                                                   |Simplex                                                                 |SteepestDescent                                                         |Trust Region                                                            |
++============================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+
+|`Kirby2 1 <http://www.itl.nist.gov/div898/strd/nls/data/kirby2.shtml>`__    | :ranking-low-5:`423`                                                   | :ranking-low-5:`25.07`                                                 | :ranking-low-5:`25.37`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`956.3`                                                 | :ranking-low-5:`510.9`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Kirby2 2 <http://www.itl.nist.gov/div898/strd/nls/data/kirby2.shtml>`__    | :ranking-low-4:`2.554`                                                 | :ranking-med-3:`1.717`                                                 | :ranking-med-3:`1.68`                                                  | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-med-3:`1.396`                                                 | :ranking-low-5:`121`                                                   | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Hahn1 1 <http://www.itl.nist.gov/div898/strd/nls/data/hahn1.shtml>`__      | :ranking-low-5:`4.508e+04`                                             | :ranking-low-5:`45.51`                                                 | :ranking-low-5:`217`                                                   | :ranking-low-5:`69.31`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`200.6`                                                 | :ranking-low-5:`4962`                                                  | :ranking-low-5:`17.97`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Hahn1 2 <http://www.itl.nist.gov/div898/strd/nls/data/hahn1.shtml>`__      | :ranking-low-5:`4000`                                                  | :ranking-low-5:`35.48`                                                 | :ranking-low-5:`211.6`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`157.2`                                                 | :ranking-low-5:`4896`                                                  | :ranking-low-5:`226.2`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`MGH17 1 <http://www.itl.nist.gov/div898/strd/nls/data/mgh17.shtml>`__      | :ranking-low-5:`1.419e+04`                                             | :ranking-low-5:`1.42e+04`                                              | :ranking-low-5:`1.42e+04`                                              | :ranking-low-5:`nan`                                                   | :ranking-top-1:`1`                                                     | :ranking-low-5:`754.5`                                                 | :ranking-low-5:`1.421e+04`                                             | :ranking-low-5:`1.413e+04`                                             | :ranking-low-5:`1.421e+04`                                             |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`MGH17 2 <http://www.itl.nist.gov/div898/strd/nls/data/mgh17.shtml>`__      | :ranking-low-5:`2473`                                                  | :ranking-med-3:`1.414`                                                 | :ranking-med-3:`1.422`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`4179`                                                  | :ranking-low-5:`1762`                                                  | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Lanczos1 1 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos1.shtml>`__| :ranking-low-5:`1.561e+18`                                             | :ranking-low-5:`1.107e+16`                                             | :ranking-low-5:`1.01e+16`                                              | :ranking-low-5:`151.7`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-5:`21.29`                                                 | :ranking-low-5:`2.182e+15`                                             | :ranking-low-5:`1.583e+16`                                             | :ranking-low-5:`9.922e+08`                                             |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Lanczos1 2 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos1.shtml>`__| :ranking-low-5:`1.559e+17`                                             | :ranking-low-5:`3.652e+16`                                             | :ranking-low-5:`3.687e+16`                                             | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`28.59`                                                 | :ranking-low-5:`1.064e+16`                                             | :ranking-low-5:`7.518e+16`                                             | :ranking-low-5:`2.033e+06`                                             |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Lanczos2 1 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos2.shtml>`__| :ranking-low-5:`5.553e+09`                                             | :ranking-low-5:`3.939e+07`                                             | :ranking-low-5:`3.591e+07`                                             | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`7.765e+06`                                             | :ranking-low-5:`5.631e+07`                                             | :ranking-low-5:`3.949`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Lanczos2 2 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos2.shtml>`__| :ranking-low-5:`1.917e+08`                                             | :ranking-low-5:`4.491e+07`                                             | :ranking-low-5:`4.533e+07`                                             | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`1.308e+07`                                             | :ranking-low-5:`9.22e+07`                                              | :ranking-top-1:`1.002`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Gauss3 1 <http://www.itl.nist.gov/div898/strd/nls/data/gauss3.shtml>`__    | :ranking-low-5:`15.19`                                                 | :ranking-low-4:`1.815`                                                 | :ranking-med-3:`1.568`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.036`                                                 | :ranking-low-5:`15.19`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Gauss3 2 <http://www.itl.nist.gov/div898/strd/nls/data/gauss3.shtml>`__    | :ranking-low-5:`3.147`                                                 | :ranking-low-4:`2.44`                                                  | :ranking-low-4:`2.763`                                                 | :ranking-low-5:`7.912`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.25`                                                  | :ranking-low-5:`8.944`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Misra1c 1 <http://www.itl.nist.gov/div898/strd/nls/data/misra1c.shtml>`__  | :ranking-low-5:`115`                                                   | :ranking-low-5:`115.8`                                                 | :ranking-low-5:`115.8`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`115.8`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Misra1c 2 <http://www.itl.nist.gov/div898/strd/nls/data/misra1c.shtml>`__  | :ranking-low-5:`6.595`                                                 | :ranking-low-5:`6.702`                                                 | :ranking-low-5:`6.702`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`6.702`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Misra1d 1 <http://www.itl.nist.gov/div898/strd/nls/data/misra1d.shtml>`__  | :ranking-low-5:`12.67`                                                 | :ranking-low-5:`19.62`                                                 | :ranking-low-5:`19.62`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`19.62`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Misra1d 2 <http://www.itl.nist.gov/div898/strd/nls/data/misra1d.shtml>`__  | :ranking-top-1:`1.03`                                                  | :ranking-low-4:`1.939`                                                 | :ranking-low-4:`1.939`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-4:`1.939`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`ENSO 1 <http://www.itl.nist.gov/div898/strd/nls/data/enso.shtml>`__        | :ranking-top-2:`1.264`                                                 | :ranking-top-1:`1.029`                                                 | :ranking-top-1:`1.028`                                                 | :ranking-med-3:`1.529`                                                 | :ranking-top-1:`1.004`                                                 | :ranking-med-3:`1.529`                                                 | :ranking-top-1:`1.018`                                                 | :ranking-top-2:`1.207`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`ENSO 2 <http://www.itl.nist.gov/div898/strd/nls/data/enso.shtml>`__        | :ranking-top-1:`1.033`                                                 | :ranking-top-1:`1.018`                                                 | :ranking-top-1:`1.029`                                                 | :ranking-top-1:`1.087`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.087`                                                 | :ranking-top-1:`1.029`                                                 | :ranking-top-1:`1.052`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_nist_higher.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_nist_higher.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c935dd30cd9f326df4c6faec461248dc142f4f7f
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_nist_higher.txt
@@ -0,0 +1,39 @@
+
+.. _Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_higher:
+
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|                                                                            |BFGS                                                                    |Conjugate gradient (Fletcher-Reeves imp.)                               |Conjugate gradient (Polak-Ribiere imp.)                                 |Damping                                                                 |Levenberg-Marquardt                                                     |Levenberg-MarquardtMD                                                   |Simplex                                                                 |SteepestDescent                                                         |Trust Region                                                            |
++============================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+
+|`MGH09 1 <http://www.itl.nist.gov/div898/strd/nls/data/mgh09.shtml>`__      | :ranking-low-5:`7.705`                                                 | :ranking-low-5:`25.02`                                                 | :ranking-low-5:`25.02`                                                 | :ranking-low-5:`1.817e+04`                                             | :ranking-low-5:`3.342`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-5:`20.62`                                                 | :ranking-low-5:`24.19`                                                 | :ranking-low-5:`3.347`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`MGH09 2 <http://www.itl.nist.gov/div898/strd/nls/data/mgh09.shtml>`__      | :ranking-med-3:`1.62`                                                  | :ranking-med-3:`1.621`                                                 | :ranking-med-3:`1.62`                                                  | :ranking-low-5:`256.6`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.025`                                                 | :ranking-med-3:`1.604`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Thurber 1 <http://www.itl.nist.gov/div898/strd/nls/data/thurber.shtml>`__  | :ranking-low-5:`228.3`                                                 | :ranking-low-5:`175.3`                                                 | :ranking-low-5:`173.2`                                                 | :ranking-low-4:`2.693`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`176.5`                                                 | :ranking-low-5:`177.2`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Thurber 2 <http://www.itl.nist.gov/div898/strd/nls/data/thurber.shtml>`__  | :ranking-low-5:`422.3`                                                 | :ranking-low-5:`20.02`                                                 | :ranking-low-5:`40.38`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`4.43`                                                  | :ranking-low-5:`368.9`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`BoxBOD 1 <http://www.itl.nist.gov/div898/strd/nls/data/boxbod.shtml>`__    | :ranking-low-5:`8.366`                                                 | :ranking-low-5:`8.366`                                                 | :ranking-low-5:`8.366`                                                 | :ranking-low-5:`nan`                                                   | :ranking-low-5:`8.366`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-5:`8.366`                                                 | :ranking-med-3:`1.515`                                                 | :ranking-low-5:`8.366`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`BoxBOD 2 <http://www.itl.nist.gov/div898/strd/nls/data/boxbod.shtml>`__    | :ranking-low-5:`33.46`                                                 | :ranking-low-5:`8.366`                                                 | :ranking-low-5:`8.366`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`8.366`                                                 | :ranking-low-5:`6.177`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Rat42 1 <http://www.itl.nist.gov/div898/strd/nls/data/rat42.shtml>`__      | :ranking-low-5:`13.33`                                                 | :ranking-low-5:`13.27`                                                 | :ranking-low-5:`13.27`                                                 | :ranking-low-5:`4.759e+06`                                             | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`16.48`                                                 | :ranking-low-5:`193.6`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Rat42 2 <http://www.itl.nist.gov/div898/strd/nls/data/rat42.shtml>`__      | :ranking-med-3:`1.331`                                                 | :ranking-top-2:`1.213`                                                 | :ranking-top-2:`1.302`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-med-3:`1.429`                                                 | :ranking-med-3:`1.449`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`MGH10 1 <http://www.itl.nist.gov/div898/strd/nls/data/mgh10.shtml>`__      | :ranking-low-5:`6.367e+05`                                             | :ranking-low-5:`6.362e+05`                                             | :ranking-low-5:`6.344e+05`                                             | :ranking-low-5:`2.984e+47`                                             | :ranking-top-1:`1`                                                     | :ranking-low-5:`5.306e+05`                                             | :ranking-low-5:`6.422e+05`                                             | :ranking-low-5:`6.37e+05`                                              | :ranking-low-5:`6.271e+05`                                             |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`MGH10 2 <http://www.itl.nist.gov/div898/strd/nls/data/mgh10.shtml>`__      | :ranking-low-5:`7.834e+04`                                             | :ranking-low-5:`1275`                                                  | :ranking-low-5:`1275`                                                  | :ranking-low-5:`2.677e+51`                                             | :ranking-low-4:`1.92`                                                  | :ranking-low-5:`79.76`                                                 | :ranking-low-5:`8.385e+04`                                             | :ranking-low-5:`7.934e+04`                                             | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Eckerle4 1 <http://www.itl.nist.gov/div898/strd/nls/data/eckerle4.shtml>`__| :ranking-low-5:`478.1`                                                 | :ranking-low-5:`478.1`                                                 | :ranking-low-5:`478.1`                                                 | :ranking-low-5:`366`                                                   | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`478.1`                                                 | :ranking-low-5:`478.1`                                                 | :ranking-low-5:`340.6`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Eckerle4 2 <http://www.itl.nist.gov/div898/strd/nls/data/eckerle4.shtml>`__| :ranking-low-5:`31.01`                                                 | :ranking-top-1:`1.02`                                                  | :ranking-top-1:`1.026`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.003`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Rat43 1 <http://www.itl.nist.gov/div898/strd/nls/data/rat43.shtml>`__      | :ranking-low-5:`93.81`                                                 | :ranking-low-4:`2.441`                                                 | :ranking-low-4:`2.44`                                                  | :ranking-low-5:`nan`                                                   | :ranking-low-4:`2.717`                                                 | :ranking-low-4:`2.393`                                                 | :ranking-low-5:`122.5`                                                 | :ranking-low-5:`52.15`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Rat43 2 <http://www.itl.nist.gov/div898/strd/nls/data/rat43.shtml>`__      | :ranking-top-1:`1.07`                                                  | :ranking-top-1:`1.001`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.001`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Bennett5 1 <http://www.itl.nist.gov/div898/strd/nls/data/bennett5.shtml>`__| :ranking-low-5:`1294`                                                  | :ranking-low-5:`648.7`                                                 | :ranking-top-1:`1.028`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`1646`                                                  | :ranking-low-5:`1307`                                                  | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Bennett5 2 <http://www.itl.nist.gov/div898/strd/nls/data/bennett5.shtml>`__| :ranking-low-5:`690.3`                                                 | :ranking-low-5:`3.347`                                                 | :ranking-top-2:`1.165`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.065`                                                 | :ranking-low-5:`1572`                                                  | :ranking-low-5:`698.8`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_nist_lower.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_nist_lower.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b86a280d05e7bf66515b76128607ae592c6f83fc
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_nist_lower.txt
@@ -0,0 +1,39 @@
+
+.. _Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_lower:
+
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|                                                                            |BFGS                                                                    |Conjugate gradient (Fletcher-Reeves imp.)                               |Conjugate gradient (Polak-Ribiere imp.)                                 |Damping                                                                 |Levenberg-Marquardt                                                     |Levenberg-MarquardtMD                                                   |Simplex                                                                 |SteepestDescent                                                         |Trust Region                                                            |
++============================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+
+|`Misra1a 1 <http://www.itl.nist.gov/div898/strd/nls/data/misra1a.shtml>`__  | :ranking-low-5:`156.5`                                                 | :ranking-low-5:`156.7`                                                 | :ranking-low-5:`156.7`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`156.7`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Misra1a 2 <http://www.itl.nist.gov/div898/strd/nls/data/misra1a.shtml>`__  | :ranking-low-4:`1.829`                                                 | :ranking-low-4:`2.253`                                                 | :ranking-low-4:`2.253`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-4:`2.253`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Chwirut2 1 <http://www.itl.nist.gov/div898/strd/nls/data/chwirut2.shtml>`__| :ranking-top-1:`1.067`                                                 | :ranking-top-1:`1.013`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.068`                                                 | :ranking-top-1:`1.066`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Chwirut2 2 <http://www.itl.nist.gov/div898/strd/nls/data/chwirut2.shtml>`__| :ranking-top-1:`1.049`                                                 | :ranking-top-1:`1.002`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.197`                                                 | :ranking-top-1:`1.004`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Chwirut1 1 <http://www.itl.nist.gov/div898/strd/nls/data/chwirut1.shtml>`__| :ranking-top-1:`1.097`                                                 | :ranking-top-1:`1.001`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.112`                                                 | :ranking-top-1:`1.097`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Chwirut1 2 <http://www.itl.nist.gov/div898/strd/nls/data/chwirut1.shtml>`__| :ranking-top-1:`1.017`                                                 | :ranking-top-1:`1.007`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.109`                                                 | :ranking-top-1:`1.017`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Lanczos3 1 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos3.shtml>`__| :ranking-low-5:`7.683e+06`                                             | :ranking-low-5:`5.433e+04`                                             | :ranking-low-5:`4.963e+04`                                             | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`973.7`                                                 | :ranking-low-5:`7.797e+04`                                             | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Lanczos3 2 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos3.shtml>`__| :ranking-low-5:`2.652e+05`                                             | :ranking-low-5:`6.206e+04`                                             | :ranking-low-5:`6.264e+04`                                             | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`1.807e+04`                                             | :ranking-low-5:`1.285e+05`                                             | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Gauss1 1 <http://www.itl.nist.gov/div898/strd/nls/data/gauss1.shtml>`__    | :ranking-low-5:`5.6`                                                   | :ranking-med-3:`1.745`                                                 | :ranking-top-1:`1.044`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`5.6`                                                   | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Gauss1 2 <http://www.itl.nist.gov/div898/strd/nls/data/gauss1.shtml>`__    | :ranking-med-3:`1.655`                                                 | :ranking-low-5:`9.182`                                                 | :ranking-low-5:`9.182`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`9.168`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Gauss2 1 <http://www.itl.nist.gov/div898/strd/nls/data/gauss2.shtml>`__    | :ranking-low-5:`7.272`                                                 | :ranking-low-5:`7.341`                                                 | :ranking-low-5:`7.341`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.022`                                                 | :ranking-low-5:`7.272`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Gauss2 2 <http://www.itl.nist.gov/div898/strd/nls/data/gauss2.shtml>`__    | :ranking-low-4:`2.081`                                                 | :ranking-low-5:`3.754`                                                 | :ranking-low-5:`3.754`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`3.393`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`DanWood 1 <http://www.itl.nist.gov/div898/strd/nls/data/danwood.shtml>`__  | :ranking-low-5:`72.41`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.011`                                                 | :ranking-low-5:`55.52`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`DanWood 2 <http://www.itl.nist.gov/div898/strd/nls/data/danwood.shtml>`__  | :ranking-top-2:`1.244`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.031`                                                 | :ranking-low-4:`1.97`                                                  | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Misra1b 1 <http://www.itl.nist.gov/div898/strd/nls/data/misra1b.shtml>`__  | :ranking-low-5:`96.76`                                                 | :ranking-low-5:`96.97`                                                 | :ranking-low-5:`96.97`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`96.97`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Misra1b 2 <http://www.itl.nist.gov/div898/strd/nls/data/misra1b.shtml>`__  | :ranking-low-5:`8.521`                                                 | :ranking-low-5:`16.43`                                                 | :ranking-low-5:`16.43`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-top-1:`1`                                                     | :ranking-low-5:`16.43`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_summary.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_summary.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5f662fff962f9bf953bee3245149c86ccf5d3d24
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_acc_summary.txt
@@ -0,0 +1,14 @@
++--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+
+|                                                                                                  |BFGS                                                                                              |Conjugate gradient (Fletcher-Reeves imp.)                                                         |Conjugate gradient (Polak-Ribiere imp.)                                                           |Damping                                                                                           |Levenberg-Marquardt                                                                               |Levenberg-MarquardtMD                                                                             |Simplex                                                                                           |SteepestDescent                                                                                   |Trust Region                                                                                      |
++==================================================================================================+==================================================================================================+==================================================================================================+==================================================================================================+==================================================================================================+==================================================================================================+==================================================================================================+==================================================================================================+==================================================================================================+==================================================================================================+
+|`NIST, "lower" difficulty <http://www.itl.nist.gov/div898/strd/nls/nls_main.shtml>`__             | :ref:`3.841 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_lower>`                  | :ref:`3.003 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_lower>`                  | :ref:`3.003 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_lower>`                  | :ref:`1 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_lower>`                      | :ref:`1 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_lower>`                      | :ref:`1 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_lower>`                      | :ref:`1.017 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_lower>`                  | :ref:`6.436 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_lower>`                  | :ref:`1 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_lower>`                      |
++--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+
+|`NIST, "average" difficulty <http://www.itl.nist.gov/div898/strd/nls/nls_main.shtml>`__           | :ref:`269 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_average>`                  | :ref:`22.35 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_average>`                | :ref:`22.5 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_average>`                 | :ref:`1 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_average>`                    | :ref:`1 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_average>`                    | :ref:`1 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_average>`                    | :ref:`79.31 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_average>`                | :ref:`315.9 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_average>`                | :ref:`1 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_average>`                    |
++--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+
+|`NIST, "higher" difficulty <http://www.itl.nist.gov/div898/strd/nls/nls_main.shtml>`__            | :ref:`63.63 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_higher>`                 | :ref:`10.82 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_higher>`                 | :ref:`8.366 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_higher>`                 | :ref:`1.847 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_higher>`                 | :ref:`1 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_higher>`                     | :ref:`1 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_higher>`                     | :ref:`18.55 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_higher>`                 | :ref:`114.7 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_higher>`                 | :ref:`1 <Minimizers_unweighted_comparison_in_terms_of_accuracy_nist_higher>`                     |
++--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+
+|CUTEst                                                                                            | :ref:`146.1 <Minimizers_unweighted_comparison_in_terms_of_accuracy_cutest>`                      | :ref:`17.22 <Minimizers_unweighted_comparison_in_terms_of_accuracy_cutest>`                      | :ref:`18.89 <Minimizers_unweighted_comparison_in_terms_of_accuracy_cutest>`                      | :ref:`1.803e+05 <Minimizers_unweighted_comparison_in_terms_of_accuracy_cutest>`                  | :ref:`2.911 <Minimizers_unweighted_comparison_in_terms_of_accuracy_cutest>`                      | :ref:`1.801e+05 <Minimizers_unweighted_comparison_in_terms_of_accuracy_cutest>`                  | :ref:`96.61 <Minimizers_unweighted_comparison_in_terms_of_accuracy_cutest>`                      | :ref:`230.3 <Minimizers_unweighted_comparison_in_terms_of_accuracy_cutest>`                      | :ref:`1 <Minimizers_unweighted_comparison_in_terms_of_accuracy_cutest>`                          |
++--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+
+|Neutron data                                                                                      | :ref:`1.478 <Minimizers_unweighted_comparison_in_terms_of_accuracy_neutron_data>`                | :ref:`1.459 <Minimizers_unweighted_comparison_in_terms_of_accuracy_neutron_data>`                | :ref:`1.538 <Minimizers_unweighted_comparison_in_terms_of_accuracy_neutron_data>`                | :ref:`1 <Minimizers_unweighted_comparison_in_terms_of_accuracy_neutron_data>`                    | :ref:`1 <Minimizers_unweighted_comparison_in_terms_of_accuracy_neutron_data>`                    | :ref:`1 <Minimizers_unweighted_comparison_in_terms_of_accuracy_neutron_data>`                    | :ref:`2.334 <Minimizers_unweighted_comparison_in_terms_of_accuracy_neutron_data>`                | :ref:`3.546 <Minimizers_unweighted_comparison_in_terms_of_accuracy_neutron_data>`                | :ref:`1 <Minimizers_unweighted_comparison_in_terms_of_accuracy_neutron_data>`                    |
++--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_cutest.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_cutest.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2e3f7be50c8f0871e4aa6c8309e0370886a2b4de
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_cutest.txt
@@ -0,0 +1,20 @@
+
+
+.. _Minimizers_unweighted_comparison_in_terms_of_runtime_cutest:
+
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|                                                                        |BFGS                                                                    |Conjugate gradient (Fletcher-Reeves imp.)                               |Conjugate gradient (Polak-Ribiere imp.)                                 |Damping                                                                 |Levenberg-Marquardt                                                     |Levenberg-MarquardtMD                                                   |Simplex                                                                 |SteepestDescent                                                         |Trust Region                                                            |
++========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+
+|PALMER6C                                                                | :ranking-low-5:`5.659`                                                 | :ranking-low-5:`39.11`                                                 | :ranking-low-5:`38.28`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-5:`10.81`                                                 | :ranking-top-1:`1.001`                                                 | :ranking-low-4:`1.971`                                                 | :ranking-low-5:`17.68`                                                 | :ranking-low-4:`2.897`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|PALMER7C                                                                | :ranking-low-5:`3.822`                                                 | :ranking-low-5:`22.58`                                                 | :ranking-low-5:`20.15`                                                 | :ranking-top-2:`1.192`                                                 | :ranking-low-4:`2.506`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-4:`1.899`                                                 | :ranking-low-5:`20.01`                                                 | :ranking-low-5:`30.98`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|PALMER8C                                                                | :ranking-low-5:`3.192`                                                 | :ranking-low-5:`32.92`                                                 | :ranking-low-5:`32.48`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-4:`2.433`                                                 | :ranking-top-1:`1.023`                                                 | :ranking-low-4:`2.76`                                                  | :ranking-low-5:`17.17`                                                 | :ranking-low-5:`28.1`                                                  |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|YFITU                                                                   | :ranking-low-4:`2.88`                                                  | :ranking-low-5:`8.55`                                                  | :ranking-low-5:`7.987`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.032`                                                 | :ranking-top-2:`1.22`                                                  | :ranking-low-4:`1.979`                                                 | :ranking-low-5:`4.444`                                                 | :ranking-top-1:`1.08`                                                  |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|VESUVIOLS                                                               | :ranking-med-3:`1.396`                                                 | :ranking-low-5:`8.362`                                                 | :ranking-low-5:`5.688`                                                 | :ranking-low-5:`38.52`                                                 | :ranking-med-3:`1.602`                                                 | :ranking-top-1:`1.046`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-5:`37.74`                                                 | :ranking-low-5:`45.01`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|DMN15102LS                                                              | :ranking-low-5:`4.42`                                                  | :ranking-low-5:`19.22`                                                 | :ranking-low-5:`15.29`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-5:`7.917`                                                 | :ranking-low-5:`5.026`                                                 | :ranking-low-5:`3.786`                                                 | :ranking-low-5:`22.67`                                                 | :ranking-low-5:`53.85`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_neutron_data.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_neutron_data.txt
new file mode 100644
index 0000000000000000000000000000000000000000..93c49e69633507d84bebceaeda8283b39a042322
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_neutron_data.txt
@@ -0,0 +1,45 @@
+
+.. _Minimizers_unweighted_comparison_in_terms_of_runtime_neutron_data:
+
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|                                                                        |BFGS                                                                    |Conjugate gradient (Fletcher-Reeves imp.)                               |Conjugate gradient (Polak-Ribiere imp.)                                 |Damping                                                                 |Levenberg-Marquardt                                                     |Levenberg-MarquardtMD                                                   |Simplex                                                                 |SteepestDescent                                                         |Trust Region                                                            |
++========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+
+|ENGINX 193749 calibration, spectrum 651, peak 19                        | :ranking-med-3:`1.407`                                                 | :ranking-low-5:`3.497`                                                 | :ranking-low-5:`4.965`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-4:`1.916`                                                 | :ranking-med-3:`1.651`                                                 | :ranking-low-5:`3.105`                                                 | :ranking-low-5:`18.34`                                                 | :ranking-low-5:`22.31`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|ENGINX 193749 calibration, spectrum 651, peak 20                        | :ranking-top-2:`1.26`                                                  | :ranking-low-5:`5.343`                                                 | :ranking-low-5:`5.152`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-4:`1.958`                                                 | :ranking-top-2:`1.267`                                                 | :ranking-med-3:`1.457`                                                 | :ranking-low-5:`15.92`                                                 | :ranking-low-5:`21.66`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|ENGINX 193749 calibration, spectrum 651, peak 23                        | :ranking-top-1:`1.093`                                                 | :ranking-low-4:`2.561`                                                 | :ranking-low-5:`10.11`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.254`                                                 | :ranking-med-3:`1.469`                                                 | :ranking-low-5:`3.082`                                                 | :ranking-low-5:`16.36`                                                 | :ranking-low-5:`21.79`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|ENGINX 193749 calibration, spectrum 651, peak 5                         | :ranking-low-4:`2.439`                                                 | :ranking-low-5:`16.67`                                                 | :ranking-low-5:`7.301`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-4:`2.653`                                                 | :ranking-low-4:`2.675`                                                 | :ranking-low-5:`3.366`                                                 | :ranking-low-5:`25.02`                                                 | :ranking-low-5:`49.29`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|ENGINX 193749 calibration, spectrum 651, peak 6                         | :ranking-top-2:`1.228`                                                 | :ranking-low-5:`26.73`                                                 | :ranking-low-5:`22.33`                                                 | :ranking-top-1:`1.018`                                                 | :ranking-low-5:`7.748`                                                 | :ranking-top-1:`1`                                                     | :ranking-med-3:`1.635`                                                 | :ranking-low-5:`15.47`                                                 | :ranking-med-3:`1.644`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|ENGINX 236516 vanadium, bank 1, 10 brk                                  | :ranking-low-5:`14.89`                                                 | :ranking-low-5:`21.38`                                                 | :ranking-low-5:`21.23`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-5:`7.994`                                                 | :ranking-top-1:`1.017`                                                 | :ranking-low-5:`14.5`                                                  | :ranking-low-5:`180.5`                                                 | :ranking-low-5:`4.503`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|ENGINX 236516 vanadium, bank 1, 30 brk                                  | :ranking-low-5:`21.13`                                                 | :ranking-low-5:`53.58`                                                 | :ranking-low-5:`50.38`                                                 | :ranking-top-1:`1.039`                                                 | :ranking-low-5:`9.629`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-5:`7.574`                                                 | :ranking-low-5:`180.1`                                                 | :ranking-low-5:`4.352`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|EVS14188-90_processed Gaussian peaks 1                                  | :ranking-low-5:`31.98`                                                 | :ranking-low-5:`40.88`                                                 | :ranking-low-5:`38.89`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-4:`1.83`                                                  | :ranking-low-5:`7.479`                                                 | :ranking-top-2:`1.271`                                                 | :ranking-low-5:`24.95`                                                 | :ranking-low-5:`4.362`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|EVS14188-90_processed Gaussian peaks 1                                  | :ranking-low-5:`18.35`                                                 | :ranking-low-5:`33.2`                                                  | :ranking-low-5:`33.08`                                                 | :ranking-med-3:`1.613`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-4:`2.204`                                                 | :ranking-top-1:`1.04`                                                  | :ranking-low-5:`20.61`                                                 | :ranking-low-4:`2.048`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|GEM 13 IC peaks                                                         | :ranking-top-2:`1.189`                                                 | :ranking-low-5:`21.56`                                                 | :ranking-low-5:`101.7`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-5:`9.353`                                                 | :ranking-low-5:`7.766`                                                 | :ranking-low-5:`15.62`                                                 | :ranking-low-5:`26.93`                                                 | :ranking-low-5:`100.2`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 1                                    | :ranking-low-5:`8.515`                                                 | :ranking-low-5:`5.339`                                                 | :ranking-low-5:`5.301`                                                 | :ranking-top-2:`1.107`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.055`                                                 | :ranking-med-3:`1.648`                                                 | :ranking-low-5:`3.757`                                                 | :ranking-top-2:`1.127`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 2                                    | :ranking-low-5:`10.4`                                                  | :ranking-low-5:`5.375`                                                 | :ranking-low-5:`5.607`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.017`                                                 | :ranking-top-2:`1.224`                                                 | :ranking-med-3:`1.576`                                                 | :ranking-low-5:`4.426`                                                 | :ranking-top-2:`1.268`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 3                                    | :ranking-low-5:`7.95`                                                  | :ranking-low-5:`5.367`                                                 | :ranking-low-5:`5.636`                                                 | :ranking-top-2:`1.189`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.007`                                                 | :ranking-med-3:`1.502`                                                 | :ranking-low-5:`3.782`                                                 | :ranking-top-1:`1.052`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 4                                    | :ranking-low-5:`3.437`                                                 | :ranking-low-5:`6.265`                                                 | :ranking-low-5:`6.307`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.094`                                                 | :ranking-top-2:`1.144`                                                 | :ranking-med-3:`1.697`                                                 | :ranking-low-5:`4.308`                                                 | :ranking-top-2:`1.195`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 5                                    | :ranking-low-5:`9.633`                                                 | :ranking-low-5:`5.586`                                                 | :ranking-low-5:`5.461`                                                 | :ranking-top-1:`1.043`                                                 | :ranking-top-1:`1.021`                                                 | :ranking-top-1:`1`                                                     | :ranking-med-3:`1.462`                                                 | :ranking-low-5:`4.114`                                                 | :ranking-top-2:`1.18`                                                  |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 6                                    | :ranking-low-5:`3.342`                                                 | :ranking-low-5:`5.376`                                                 | :ranking-low-5:`5.292`                                                 | :ranking-top-1:`1`                                                     | :ranking-med-3:`1.337`                                                 | :ranking-top-2:`1.192`                                                 | :ranking-med-3:`1.449`                                                 | :ranking-low-5:`3.869`                                                 | :ranking-top-2:`1.11`                                                  |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 7                                    | :ranking-low-5:`4.351`                                                 | :ranking-low-5:`6.014`                                                 | :ranking-low-5:`5.729`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.094`                                                 | :ranking-top-2:`1.113`                                                 | :ranking-med-3:`1.566`                                                 | :ranking-low-5:`4.127`                                                 | :ranking-med-3:`1.669`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 8                                    | :ranking-low-5:`4.847`                                                 | :ranking-low-5:`6.11`                                                  | :ranking-low-5:`5.976`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.047`                                                 | :ranking-top-1:`1.087`                                                 | :ranking-med-3:`1.411`                                                 | :ranking-low-5:`4.306`                                                 | :ranking-top-2:`1.231`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 9                                    | :ranking-low-5:`3.221`                                                 | :ranking-low-5:`5.451`                                                 | :ranking-low-5:`5.535`                                                 | :ranking-top-2:`1.151`                                                 | :ranking-top-1:`1.022`                                                 | :ranking-top-1:`1`                                                     | :ranking-med-3:`1.335`                                                 | :ranking-low-5:`3.888`                                                 | :ranking-top-2:`1.114`                                                 |
++------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_nist_average.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_nist_average.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a96069a3cc5ea569c8a1282a5a61f7bf43405b49
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_nist_average.txt
@@ -0,0 +1,44 @@
+
+
+.. _Minimizers_unweighted_comparison_in_terms_of_runtime_nist_average:
+
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|                                                                            |BFGS                                                                    |Conjugate gradient (Fletcher-Reeves imp.)                               |Conjugate gradient (Polak-Ribiere imp.)                                 |Damping                                                                 |Levenberg-Marquardt                                                     |Levenberg-MarquardtMD                                                   |Simplex                                                                 |SteepestDescent                                                         |Trust Region                                                            |
++============================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+
+|`Kirby2 1 <http://www.itl.nist.gov/div898/strd/nls/data/kirby2.shtml>`__    | :ranking-low-4:`1.904`                                                 | :ranking-low-5:`26.47`                                                 | :ranking-low-5:`26.83`                                                 | :ranking-top-1:`1.01`                                                  | :ranking-top-1:`1.089`                                                 | :ranking-top-1:`1`                                                     | :ranking-med-3:`1.725`                                                 | :ranking-low-5:`15.63`                                                 | :ranking-top-2:`1.106`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Kirby2 2 <http://www.itl.nist.gov/div898/strd/nls/data/kirby2.shtml>`__    | :ranking-med-3:`1.646`                                                 | :ranking-low-5:`27.81`                                                 | :ranking-low-5:`28.82`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.116`                                                 | :ranking-top-1:`1.003`                                                 | :ranking-low-4:`2.125`                                                 | :ranking-low-5:`16.92`                                                 | :ranking-med-3:`1.59`                                                  |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Hahn1 1 <http://www.itl.nist.gov/div898/strd/nls/data/hahn1.shtml>`__      | :ranking-low-4:`2.561`                                                 | :ranking-low-5:`39.16`                                                 | :ranking-low-5:`20.65`                                                 | :ranking-low-4:`2.061`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.242`                                                 | :ranking-med-3:`1.556`                                                 | :ranking-low-5:`21.35`                                                 | :ranking-low-5:`24.92`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Hahn1 2 <http://www.itl.nist.gov/div898/strd/nls/data/hahn1.shtml>`__      | :ranking-med-3:`1.481`                                                 | :ranking-low-5:`45.04`                                                 | :ranking-low-5:`18.88`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.15`                                                  | :ranking-top-2:`1.197`                                                 | :ranking-low-5:`4.776`                                                 | :ranking-low-5:`24.01`                                                 | :ranking-low-5:`27.06`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`MGH17 1 <http://www.itl.nist.gov/div898/strd/nls/data/mgh17.shtml>`__      | :ranking-low-4:`2.589`                                                 | :ranking-top-1:`1.054`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.195`                                                 | :ranking-low-5:`7.081`                                                 | :ranking-low-5:`3.388`                                                 | :ranking-top-2:`1.175`                                                 | :ranking-low-5:`6.162`                                                 | :ranking-low-4:`1.996`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`MGH17 2 <http://www.itl.nist.gov/div898/strd/nls/data/mgh17.shtml>`__      | :ranking-top-2:`1.179`                                                 | :ranking-low-5:`9.803`                                                 | :ranking-low-5:`10.13`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.175`                                                 | :ranking-top-2:`1.301`                                                 | :ranking-top-2:`1.276`                                                 | :ranking-low-5:`8.077`                                                 | :ranking-top-2:`1.2`                                                   |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Lanczos1 1 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos1.shtml>`__| :ranking-low-4:`2.886`                                                 | :ranking-low-4:`2.828`                                                 | :ranking-low-4:`2.975`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-4:`2.054`                                                 | :ranking-low-5:`3.892`                                                 | :ranking-low-5:`3.054`                                                 | :ranking-low-5:`8.937`                                                 | :ranking-low-4:`1.962`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Lanczos1 2 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos1.shtml>`__| :ranking-top-2:`1.275`                                                 | :ranking-low-5:`3.053`                                                 | :ranking-low-4:`2.171`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.045`                                                 | :ranking-top-1:`1.004`                                                 | :ranking-med-3:`1.472`                                                 | :ranking-low-5:`8.765`                                                 | :ranking-top-1:`1.008`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Lanczos2 1 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos2.shtml>`__| :ranking-low-5:`4.376`                                                 | :ranking-low-4:`2.982`                                                 | :ranking-low-4:`2.967`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-4:`2.098`                                                 | :ranking-low-5:`4.038`                                                 | :ranking-low-5:`3.033`                                                 | :ranking-low-5:`8.663`                                                 | :ranking-low-4:`2.11`                                                  |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Lanczos2 2 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos2.shtml>`__| :ranking-top-2:`1.289`                                                 | :ranking-low-5:`3.112`                                                 | :ranking-low-4:`2.005`                                                 | :ranking-top-1:`1.035`                                                 | :ranking-top-1:`1.006`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-4:`1.923`                                                 | :ranking-low-5:`8.702`                                                 | :ranking-top-1:`1.057`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Gauss3 1 <http://www.itl.nist.gov/div898/strd/nls/data/gauss3.shtml>`__    | :ranking-low-4:`1.817`                                                 | :ranking-low-5:`44.7`                                                  | :ranking-low-5:`39.07`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.096`                                                 | :ranking-top-1:`1.007`                                                 | :ranking-low-5:`6.95`                                                  | :ranking-low-5:`40.6`                                                  | :ranking-med-3:`1.479`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Gauss3 2 <http://www.itl.nist.gov/div898/strd/nls/data/gauss3.shtml>`__    | :ranking-med-3:`1.622`                                                 | :ranking-low-5:`38.18`                                                 | :ranking-low-5:`10.42`                                                 | :ranking-low-5:`38.51`                                                 | :ranking-top-2:`1.199`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-5:`6.354`                                                 | :ranking-low-5:`38.78`                                                 | :ranking-low-5:`45.31`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Misra1c 1 <http://www.itl.nist.gov/div898/strd/nls/data/misra1c.shtml>`__  | :ranking-low-5:`3.003`                                                 | :ranking-top-1:`1.054`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.023`                                                 | :ranking-top-1:`1.024`                                                 | :ranking-top-1:`1.029`                                                 | :ranking-med-3:`1.358`                                                 | :ranking-low-4:`2.201`                                                 | :ranking-top-2:`1.15`                                                  |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Misra1c 2 <http://www.itl.nist.gov/div898/strd/nls/data/misra1c.shtml>`__  | :ranking-top-1:`1.066`                                                 | :ranking-med-3:`1.531`                                                 | :ranking-top-1:`1.053`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.065`                                                 | :ranking-top-1:`1.095`                                                 | :ranking-top-2:`1.244`                                                 | :ranking-low-4:`2.17`                                                  | :ranking-top-1:`1.03`                                                  |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Misra1d 1 <http://www.itl.nist.gov/div898/strd/nls/data/misra1d.shtml>`__  | :ranking-low-5:`3.291`                                                 | :ranking-top-2:`1.162`                                                 | :ranking-top-2:`1.215`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.114`                                                 | :ranking-top-2:`1.154`                                                 | :ranking-top-2:`1.308`                                                 | :ranking-low-4:`2.02`                                                  | :ranking-low-5:`7.472`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Misra1d 2 <http://www.itl.nist.gov/div898/strd/nls/data/misra1d.shtml>`__  | :ranking-top-1:`1.067`                                                 | :ranking-top-1:`1.035`                                                 | :ranking-top-1:`1.006`                                                 | :ranking-top-1:`1.01`                                                  | :ranking-top-1:`1`                                                     | :ranking-med-3:`1.501`                                                 | :ranking-top-2:`1.253`                                                 | :ranking-med-3:`1.581`                                                 | :ranking-low-5:`6.866`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`ENSO 1 <http://www.itl.nist.gov/div898/strd/nls/data/enso.shtml>`__        | :ranking-low-5:`3.148`                                                 | :ranking-low-5:`122.2`                                                 | :ranking-low-5:`114.2`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-5:`86.69`                                                 | :ranking-top-2:`1.139`                                                 | :ranking-low-5:`12.49`                                                 | :ranking-low-5:`80.31`                                                 | :ranking-low-5:`111.8`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`ENSO 2 <http://www.itl.nist.gov/div898/strd/nls/data/enso.shtml>`__        | :ranking-low-5:`3.918`                                                 | :ranking-low-5:`123`                                                   | :ranking-low-5:`75.31`                                                 | :ranking-top-1:`1.013`                                                 | :ranking-low-5:`95.06`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-5:`10.85`                                                 | :ranking-low-5:`79.66`                                                 | :ranking-low-5:`117.9`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_nist_higher.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_nist_higher.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c35f4532b304b7fa20f1964a51445175bb4bae6a
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_nist_higher.txt
@@ -0,0 +1,39 @@
+
+.. _Minimizers_unweighted_comparison_in_terms_of_runtime_nist_higher:
+
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|                                                                            |BFGS                                                                    |Conjugate gradient (Fletcher-Reeves imp.)                               |Conjugate gradient (Polak-Ribiere imp.)                                 |Damping                                                                 |Levenberg-Marquardt                                                     |Levenberg-MarquardtMD                                                   |Simplex                                                                 |SteepestDescent                                                         |Trust Region                                                            |
++============================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+
+|`MGH09 1 <http://www.itl.nist.gov/div898/strd/nls/data/mgh09.shtml>`__      | :ranking-low-5:`3.377`                                                 | :ranking-top-1:`1.047`                                                 | :ranking-top-1:`1`                                                     | :ranking-med-3:`1.462`                                                 | :ranking-top-2:`1.306`                                                 | :ranking-low-4:`1.93`                                                  | :ranking-top-2:`1.15`                                                  | :ranking-med-3:`1.363`                                                 | :ranking-med-3:`1.553`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`MGH09 2 <http://www.itl.nist.gov/div898/strd/nls/data/mgh09.shtml>`__      | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.083`                                                 | :ranking-top-1:`1.019`                                                 | :ranking-med-3:`1.553`                                                 | :ranking-top-1:`1.035`                                                 | :ranking-top-2:`1.228`                                                 | :ranking-low-4:`1.885`                                                 | :ranking-low-4:`2.875`                                                 | :ranking-top-2:`1.239`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Thurber 1 <http://www.itl.nist.gov/div898/strd/nls/data/thurber.shtml>`__  | :ranking-low-4:`2.309`                                                 | :ranking-low-5:`4.403`                                                 | :ranking-low-5:`16.13`                                                 | :ranking-top-2:`1.172`                                                 | :ranking-top-1:`1.004`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.045`                                                 | :ranking-low-5:`7.911`                                                 | :ranking-low-4:`1.906`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Thurber 2 <http://www.itl.nist.gov/div898/strd/nls/data/thurber.shtml>`__  | :ranking-top-1:`1.048`                                                 | :ranking-low-5:`10.52`                                                 | :ranking-low-5:`17.23`                                                 | :ranking-top-2:`1.324`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.058`                                                 | :ranking-low-5:`3.317`                                                 | :ranking-low-5:`9.513`                                                 | :ranking-low-4:`1.764`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`BoxBOD 1 <http://www.itl.nist.gov/div898/strd/nls/data/boxbod.shtml>`__    | :ranking-low-4:`2.701`                                                 | :ranking-top-2:`1.186`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.226`                                                 | :ranking-top-1:`1.046`                                                 | :ranking-top-2:`1.199`                                                 | :ranking-top-1:`1.066`                                                 | :ranking-low-4:`2.931`                                                 | :ranking-med-3:`1.4`                                                   |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`BoxBOD 2 <http://www.itl.nist.gov/div898/strd/nls/data/boxbod.shtml>`__    | :ranking-top-2:`1.227`                                                 | :ranking-top-2:`1.158`                                                 | :ranking-top-2:`1.143`                                                 | :ranking-top-1:`1.095`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.1`                                                   | :ranking-low-4:`2.75`                                                  | :ranking-low-5:`3.453`                                                 | :ranking-low-5:`5.641`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Rat42 1 <http://www.itl.nist.gov/div898/strd/nls/data/rat42.shtml>`__      | :ranking-low-5:`3.106`                                                 | :ranking-top-2:`1.28`                                                  | :ranking-top-2:`1.269`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.113`                                                 | :ranking-top-2:`1.119`                                                 | :ranking-top-2:`1.173`                                                 | :ranking-low-5:`3.64`                                                  | :ranking-low-5:`5.789`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Rat42 2 <http://www.itl.nist.gov/div898/strd/nls/data/rat42.shtml>`__      | :ranking-top-1:`1.009`                                                 | :ranking-low-5:`5.551`                                                 | :ranking-med-3:`1.721`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.104`                                                 | :ranking-top-1:`1.006`                                                 | :ranking-top-2:`1.101`                                                 | :ranking-low-5:`3.639`                                                 | :ranking-low-5:`6.701`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`MGH10 1 <http://www.itl.nist.gov/div898/strd/nls/data/mgh10.shtml>`__      | :ranking-low-4:`2.822`                                                 | :ranking-low-4:`2.502`                                                 | :ranking-low-4:`2.186`                                                 | :ranking-top-1:`1.083`                                                 | :ranking-low-5:`4.295`                                                 | :ranking-low-5:`3.219`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-4:`2.871`                                                 | :ranking-low-5:`5.13`                                                  |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`MGH10 2 <http://www.itl.nist.gov/div898/strd/nls/data/mgh10.shtml>`__      | :ranking-top-1:`1`                                                     | :ranking-med-3:`1.364`                                                 | :ranking-med-3:`1.736`                                                 | :ranking-med-3:`1.567`                                                 | :ranking-low-5:`3.9`                                                   | :ranking-low-5:`3.662`                                                 | :ranking-top-1:`1.03`                                                  | :ranking-low-5:`4.135`                                                 | :ranking-low-4:`1.835`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Eckerle4 1 <http://www.itl.nist.gov/div898/strd/nls/data/eckerle4.shtml>`__| :ranking-low-4:`2.676`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.021`                                                 | :ranking-top-1:`1.083`                                                 | :ranking-top-2:`1.114`                                                 | :ranking-low-5:`3.506`                                                 | :ranking-top-1:`1.007`                                                 | :ranking-top-2:`1.157`                                                 | :ranking-med-3:`1.431`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Eckerle4 2 <http://www.itl.nist.gov/div898/strd/nls/data/eckerle4.shtml>`__| :ranking-top-1:`1.087`                                                 | :ranking-med-3:`1.571`                                                 | :ranking-med-3:`1.54`                                                  | :ranking-top-2:`1.15`                                                  | :ranking-top-2:`1.226`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.327`                                                 | :ranking-low-4:`2.771`                                                 | :ranking-top-2:`1.178`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Rat43 1 <http://www.itl.nist.gov/div898/strd/nls/data/rat43.shtml>`__      | :ranking-low-4:`2.515`                                                 | :ranking-low-5:`11.4`                                                  | :ranking-low-5:`3.306`                                                 | :ranking-med-3:`1.477`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.127`                                                 | :ranking-top-2:`1.245`                                                 | :ranking-low-5:`5.629`                                                 | :ranking-top-2:`1.269`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Rat43 2 <http://www.itl.nist.gov/div898/strd/nls/data/rat43.shtml>`__      | :ranking-top-2:`1.292`                                                 | :ranking-med-3:`1.691`                                                 | :ranking-low-5:`3.626`                                                 | :ranking-med-3:`1.392`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.007`                                                 | :ranking-top-1:`1.013`                                                 | :ranking-low-5:`5.831`                                                 | :ranking-low-5:`8.317`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Bennett5 1 <http://www.itl.nist.gov/div898/strd/nls/data/bennett5.shtml>`__| :ranking-low-4:`2.454`                                                 | :ranking-low-5:`29.53`                                                 | :ranking-low-5:`3.52`                                                  | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.004`                                                 | :ranking-low-5:`10.75`                                                 | :ranking-top-1:`1.08`                                                  | :ranking-low-5:`10.47`                                                 | :ranking-top-2:`1.227`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Bennett5 2 <http://www.itl.nist.gov/div898/strd/nls/data/bennett5.shtml>`__| :ranking-top-1:`1.057`                                                 | :ranking-low-5:`26.43`                                                 | :ranking-low-5:`3.493`                                                 | :ranking-top-1:`1`                                                     | :ranking-low-5:`11.13`                                                 | :ranking-low-5:`9.95`                                                  | :ranking-top-2:`1.284`                                                 | :ranking-low-5:`9.243`                                                 | :ranking-med-3:`1.652`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_nist_lower.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_nist_lower.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e5829f961c493e31904f47867322899da6a7209b
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_nist_lower.txt
@@ -0,0 +1,40 @@
+
+
+.. _Minimizers_unweighted_comparison_in_terms_of_runtime_nist_lower:
+
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|                                                                            |BFGS                                                                    |Conjugate gradient (Fletcher-Reeves imp.)                               |Conjugate gradient (Polak-Ribiere imp.)                                 |Damping                                                                 |Levenberg-Marquardt                                                     |Levenberg-MarquardtMD                                                   |Simplex                                                                 |SteepestDescent                                                         |Trust Region                                                            |
++============================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+========================================================================+
+|`Misra1a 1 <http://www.itl.nist.gov/div898/strd/nls/data/misra1a.shtml>`__  | :ranking-low-5:`3.309`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.123`                                                 | :ranking-top-1:`1.037`                                                 | :ranking-top-2:`1.157`                                                 | :ranking-top-1:`1.06`                                                  | :ranking-med-3:`1.552`                                                 | :ranking-med-3:`1.605`                                                 | :ranking-top-2:`1.254`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Misra1a 2 <http://www.itl.nist.gov/div898/strd/nls/data/misra1a.shtml>`__  | :ranking-top-1:`1.037`                                                 | :ranking-top-2:`1.116`                                                 | :ranking-top-2:`1.187`                                                 | :ranking-top-1:`1.01`                                                  | :ranking-top-1:`1.079`                                                 | :ranking-top-1:`1.011`                                                 | :ranking-top-2:`1.182`                                                 | :ranking-med-3:`1.692`                                                 | :ranking-top-1:`1`                                                     |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Chwirut2 1 <http://www.itl.nist.gov/div898/strd/nls/data/chwirut2.shtml>`__| :ranking-low-4:`2.904`                                                 | :ranking-low-5:`12.18`                                                 | :ranking-low-5:`12.32`                                                 | :ranking-top-1:`1.004`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.017`                                                 | :ranking-top-2:`1.226`                                                 | :ranking-low-5:`6.411`                                                 | :ranking-low-5:`10.04`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Chwirut2 2 <http://www.itl.nist.gov/div898/strd/nls/data/chwirut2.shtml>`__| :ranking-top-2:`1.144`                                                 | :ranking-low-5:`14.81`                                                 | :ranking-low-5:`14.24`                                                 | :ranking-top-1:`1.001`                                                 | :ranking-top-1:`1.077`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.132`                                                 | :ranking-low-5:`6.965`                                                 | :ranking-low-5:`10.61`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Chwirut1 1 <http://www.itl.nist.gov/div898/strd/nls/data/chwirut1.shtml>`__| :ranking-low-4:`2.805`                                                 | :ranking-low-5:`35.57`                                                 | :ranking-low-5:`9.038`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.042`                                                 | :ranking-top-2:`1.169`                                                 | :ranking-top-2:`1.185`                                                 | :ranking-low-5:`15.05`                                                 | :ranking-low-5:`20.69`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Chwirut1 2 <http://www.itl.nist.gov/div898/strd/nls/data/chwirut1.shtml>`__| :ranking-med-3:`1.511`                                                 | :ranking-low-5:`6.314`                                                 | :ranking-low-5:`17.72`                                                 | :ranking-top-1:`1.059`                                                 | :ranking-top-2:`1.206`                                                 | :ranking-top-1:`1`                                                     | :ranking-med-3:`1.413`                                                 | :ranking-low-5:`17.15`                                                 | :ranking-low-5:`25.93`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Lanczos3 1 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos3.shtml>`__| :ranking-low-4:`1.997`                                                 | :ranking-low-4:`2.014`                                                 | :ranking-low-4:`2.13`                                                  | :ranking-top-1:`1`                                                     | :ranking-med-3:`1.56`                                                  | :ranking-low-4:`2.577`                                                 | :ranking-low-4:`2.396`                                                 | :ranking-low-5:`5.87`                                                  | :ranking-med-3:`1.522`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Lanczos3 2 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos3.shtml>`__| :ranking-med-3:`1.358`                                                 | :ranking-low-5:`3.221`                                                 | :ranking-low-4:`2.311`                                                 | :ranking-top-1:`1.013`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.04`                                                  | :ranking-med-3:`1.593`                                                 | :ranking-low-5:`9.186`                                                 | :ranking-top-2:`1.126`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Gauss1 1 <http://www.itl.nist.gov/div898/strd/nls/data/gauss1.shtml>`__    | :ranking-low-4:`1.854`                                                 | :ranking-low-5:`6.151`                                                 | :ranking-low-5:`33.63`                                                 | :ranking-top-2:`1.106`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.025`                                                 | :ranking-low-5:`5.618`                                                 | :ranking-low-5:`41.71`                                                 | :ranking-low-4:`2.911`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Gauss1 2 <http://www.itl.nist.gov/div898/strd/nls/data/gauss1.shtml>`__    | :ranking-low-4:`2.692`                                                 | :ranking-top-1:`1.021`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.275`                                                 | :ranking-med-3:`1.471`                                                 | :ranking-top-2:`1.302`                                                 | :ranking-low-5:`7.81`                                                  | :ranking-low-5:`58.05`                                                 | :ranking-low-4:`1.899`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Gauss2 1 <http://www.itl.nist.gov/div898/strd/nls/data/gauss2.shtml>`__    | :ranking-low-4:`2.597`                                                 | :ranking-top-1:`1`                                                     | :ranking-med-3:`1.347`                                                 | :ranking-med-3:`1.336`                                                 | :ranking-med-3:`1.381`                                                 | :ranking-med-3:`1.415`                                                 | :ranking-low-5:`9.748`                                                 | :ranking-low-5:`60.03`                                                 | :ranking-low-5:`72.46`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Gauss2 2 <http://www.itl.nist.gov/div898/strd/nls/data/gauss2.shtml>`__    | :ranking-low-4:`2.251`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.263`                                                 | :ranking-top-2:`1.296`                                                 | :ranking-med-3:`1.399`                                                 | :ranking-med-3:`1.366`                                                 | :ranking-low-5:`9.315`                                                 | :ranking-low-5:`60.99`                                                 | :ranking-low-5:`71.38`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`DanWood 1 <http://www.itl.nist.gov/div898/strd/nls/data/danwood.shtml>`__  | :ranking-low-5:`5.911`                                                 | :ranking-med-3:`1.425`                                                 | :ranking-med-3:`1.422`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.088`                                                 | :ranking-top-1:`1.064`                                                 | :ranking-top-2:`1.145`                                                 | :ranking-low-5:`3.716`                                                 | :ranking-top-1:`1.053`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`DanWood 2 <http://www.itl.nist.gov/div898/strd/nls/data/danwood.shtml>`__  | :ranking-top-1:`1.056`                                                 | :ranking-med-3:`1.44`                                                  | :ranking-med-3:`1.367`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-1:`1.007`                                                 | :ranking-top-1:`1.016`                                                 | :ranking-top-2:`1.126`                                                 | :ranking-low-5:`3.488`                                                 | :ranking-low-5:`6.863`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Misra1b 1 <http://www.itl.nist.gov/div898/strd/nls/data/misra1b.shtml>`__  | :ranking-low-5:`3.567`                                                 | :ranking-top-2:`1.107`                                                 | :ranking-top-2:`1.116`                                                 | :ranking-top-1:`1.004`                                                 | :ranking-top-2:`1.243`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.27`                                                  | :ranking-low-4:`1.79`                                                  | :ranking-top-2:`1.221`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+|`Misra1b 2 <http://www.itl.nist.gov/div898/strd/nls/data/misra1b.shtml>`__  | :ranking-top-1:`1.04`                                                  | :ranking-top-1:`1.023`                                                 | :ranking-top-1:`1.08`                                                  | :ranking-top-1:`1.024`                                                 | :ranking-med-3:`1.475`                                                 | :ranking-top-1:`1`                                                     | :ranking-top-2:`1.242`                                                 | :ranking-low-4:`2.032`                                                 | :ranking-low-5:`7.078`                                                 |
++----------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_summary.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_summary.txt
new file mode 100644
index 0000000000000000000000000000000000000000..eba5419454504d9c43442c77d42ac8aeed9bd72b
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_unweighted_v3.8_runtime_summary.txt
@@ -0,0 +1,14 @@
++-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+
+|                                                                                                 |BFGS                                                                                             |Conjugate gradient (Fletcher-Reeves imp.)                                                        |Conjugate gradient (Polak-Ribiere imp.)                                                          |Damping                                                                                          |Levenberg-Marquardt                                                                              |Levenberg-MarquardtMD                                                                            |Simplex                                                                                          |SteepestDescent                                                                                  |Trust Region                                                                                     |
++=================================================================================================+=================================================================================================+=================================================================================================+=================================================================================================+=================================================================================================+=================================================================================================+=================================================================================================+=================================================================================================+=================================================================================================+=================================================================================================+
+|`NIST, "lower" difficulty <http://www.itl.nist.gov/div898/strd/nls/nls_main.shtml>`__            | :ref:`2.124 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_lower>`                  | :ref:`1.433 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_lower>`                  | :ref:`1.394 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_lower>`                  | :ref:`1.012 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_lower>`                  | :ref:`1.122 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_lower>`                  | :ref:`1.033 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_lower>`                  | :ref:`1.341 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_lower>`                  | :ref:`6.688 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_lower>`                  | :ref:`4.887 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_lower>`                  |
++-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+
+|`NIST, "average" difficulty <http://www.itl.nist.gov/div898/strd/nls/nls_main.shtml>`__          | :ref:`1.86 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_average>`                 | :ref:`6.458 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_average>`                | :ref:`6.555 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_average>`                | :ref:`1 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_average>`                    | :ref:`1.115 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_average>`                | :ref:`1.117 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_average>`                | :ref:`1.824 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_average>`                | :ref:`8.851 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_average>`                | :ref:`1.979 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_average>`                |
++-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+
+|`NIST, "higher" difficulty <http://www.itl.nist.gov/div898/strd/nls/nls_main.shtml>`__           | :ref:`1.801 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_higher>`                 | :ref:`1.631 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_higher>`                 | :ref:`1.728 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_higher>`                 | :ref:`1.161 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_higher>`                 | :ref:`1.075 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_higher>`                 | :ref:`1.163 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_higher>`                 | :ref:`1.125 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_higher>`                 | :ref:`3.639 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_higher>`                 | :ref:`1.708 <Minimizers_unweighted_comparison_in_terms_of_runtime_nist_higher>`                 |
++-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+
+|CUTEst                                                                                           | :ref:`3.507 <Minimizers_unweighted_comparison_in_terms_of_runtime_cutest>`                      | :ref:`20.9 <Minimizers_unweighted_comparison_in_terms_of_runtime_cutest>`                       | :ref:`17.72 <Minimizers_unweighted_comparison_in_terms_of_runtime_cutest>`                      | :ref:`1 <Minimizers_unweighted_comparison_in_terms_of_runtime_cutest>`                          | :ref:`2.47 <Minimizers_unweighted_comparison_in_terms_of_runtime_cutest>`                       | :ref:`1.035 <Minimizers_unweighted_comparison_in_terms_of_runtime_cutest>`                      | :ref:`1.975 <Minimizers_unweighted_comparison_in_terms_of_runtime_cutest>`                      | :ref:`18.84 <Minimizers_unweighted_comparison_in_terms_of_runtime_cutest>`                      | :ref:`29.54 <Minimizers_unweighted_comparison_in_terms_of_runtime_cutest>`                      |
++-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+
+|Neutron data                                                                                     | :ref:`4.351 <Minimizers_unweighted_comparison_in_terms_of_runtime_neutron_data>`                | :ref:`6.014 <Minimizers_unweighted_comparison_in_terms_of_runtime_neutron_data>`                | :ref:`5.976 <Minimizers_unweighted_comparison_in_terms_of_runtime_neutron_data>`                | :ref:`1 <Minimizers_unweighted_comparison_in_terms_of_runtime_neutron_data>`                    | :ref:`1.254 <Minimizers_unweighted_comparison_in_terms_of_runtime_neutron_data>`                | :ref:`1.144 <Minimizers_unweighted_comparison_in_terms_of_runtime_neutron_data>`                | :ref:`1.576 <Minimizers_unweighted_comparison_in_terms_of_runtime_neutron_data>`                | :ref:`15.47 <Minimizers_unweighted_comparison_in_terms_of_runtime_neutron_data>`                | :ref:`1.669 <Minimizers_unweighted_comparison_in_terms_of_runtime_neutron_data>`                |
++-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_cutest.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_cutest.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c47a67aefcf520c1c5d87d26dc8f3a6107f729ad
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_cutest.txt
@@ -0,0 +1,19 @@
+
+.. _Minimizers_weighted_comparison_in_terms_of_accuracy_cutest:
+
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|                                                                                 |BFGS                                                                             |Conjugate gradient (Fletcher-Reeves imp.)                                        |Conjugate gradient (Polak-Ribiere imp.)                                          |Damping                                                                          |Levenberg-Marquardt                                                              |Levenberg-MarquardtMD                                                            |Simplex                                                                          |SteepestDescent                                                                  |Trust Region                                                                     |
++=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+
+|PALMER6C                                                                         | :ranking-low-4:`2.874`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-4:`2.322`                                                          | :ranking-low-5:`1.063e+04`                                                      | :ranking-low-5:`9.331`                                                          | :ranking-low-5:`1.063e+04`                                                      | :ranking-low-4:`2.904`                                                          | :ranking-low-5:`3.739`                                                          | :ranking-low-5:`nan`                                                            |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|PALMER7C                                                                         | :ranking-low-5:`66.85`                                                          | :ranking-low-5:`14.78`                                                          | :ranking-low-5:`14.85`                                                          | :ranking-low-5:`4.319e+05`                                                      | :ranking-low-4:`2.624`                                                          | :ranking-low-5:`4.319e+05`                                                      | :ranking-low-5:`74.53`                                                          | :ranking-low-5:`111.7`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|PALMER8C                                                                         | :ranking-low-5:`196.8`                                                          | :ranking-low-5:`18.62`                                                          | :ranking-low-5:`23.16`                                                          | :ranking-low-5:`3.051e+05`                                                      | :ranking-low-4:`2.304`                                                          | :ranking-low-5:`3.051e+05`                                                      | :ranking-low-5:`23.38`                                                          | :ranking-low-5:`268.5`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|YFITU                                                                            | :ranking-low-5:`4.743e+14`                                                      | :ranking-low-5:`1.18e+14`                                                       | :ranking-low-5:`6.325e+13`                                                      | :ranking-top-1:`1.032`                                                          | :ranking-top-1:`1.032`                                                          | :ranking-top-1:`1.032`                                                          | :ranking-low-5:`2.848e+14`                                                      | :ranking-low-5:`3.346e+14`                                                      | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|VESUVIOLS                                                                        | :ranking-med-3:`1.614`                                                          | :ranking-med-3:`1.608`                                                          | :ranking-med-3:`1.608`                                                          | :ranking-low-5:`5.156e+33`                                                      | :ranking-top-1:`1`                                                              | :ranking-med-3:`1.403`                                                          | :ranking-low-5:`5.241`                                                          | :ranking-med-3:`1.608`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|DMN15102LS                                                                       | :ranking-low-5:`6.216`                                                          | :ranking-low-5:`5.426`                                                          | :ranking-low-5:`3.84`                                                           | :ranking-low-5:`8.583`                                                          | :ranking-low-5:`8.351`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`3.745`                                                          | :ranking-low-5:`4.341`                                                          | :ranking-low-5:`5.634`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_neutron_data.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_neutron_data.txt
new file mode 100644
index 0000000000000000000000000000000000000000..67d2f5cda500dcfee42cffbbd9dc96bd8c4a853f
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_neutron_data.txt
@@ -0,0 +1,45 @@
+
+.. _Minimizers_weighted_comparison_in_terms_of_accuracy_neutron_data:
+
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|                                                                                 |BFGS                                                                             |Conjugate gradient (Fletcher-Reeves imp.)                                        |Conjugate gradient (Polak-Ribiere imp.)                                          |Damping                                                                          |Levenberg-Marquardt                                                              |Levenberg-MarquardtMD                                                            |Simplex                                                                          |SteepestDescent                                                                  |Trust Region                                                                     |
++=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+
+|ENGINX 193749 calibration, spectrum 651, peak 19                                 | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.015`                                                          | :ranking-top-1:`1.058`                                                          | :ranking-low-5:`nan`                                                            | :ranking-top-2:`1.143`                                                          | :ranking-top-1:`1.064`                                                          | :ranking-top-2:`1.168`                                                          | :ranking-med-3:`1.381`                                                          | :ranking-top-2:`1.139`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|ENGINX 193749 calibration, spectrum 651, peak 20                                 | :ranking-low-4:`1.813`                                                          | :ranking-med-3:`1.735`                                                          | :ranking-med-3:`1.725`                                                          | :ranking-low-5:`nan`                                                            | :ranking-top-1:`1`                                                              | :ranking-low-4:`1.808`                                                          | :ranking-top-2:`1.216`                                                          | :ranking-low-5:`6.084`                                                          | :ranking-top-1:`1.001`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|ENGINX 193749 calibration, spectrum 651, peak 23                                 | :ranking-low-5:`3.102`                                                          | :ranking-low-4:`2.989`                                                          | :ranking-low-4:`2.923`                                                          | :ranking-low-5:`nan`                                                            | :ranking-top-1:`1`                                                              | :ranking-low-5:`3.267`                                                          | :ranking-low-4:`2.864`                                                          | :ranking-low-5:`21.55`                                                          | :ranking-low-5:`3.245`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|ENGINX 193749 calibration, spectrum 651, peak 5                                  | :ranking-top-1:`1.057`                                                          | :ranking-top-1:`1.077`                                                          | :ranking-top-1:`1.077`                                                          | :ranking-low-5:`nan`                                                            | :ranking-top-2:`1.137`                                                          | :ranking-top-2:`1.222`                                                          | :ranking-med-3:`1.353`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.145`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|ENGINX 193749 calibration, spectrum 651, peak 6                                  | :ranking-top-2:`1.136`                                                          | :ranking-top-1:`1.021`                                                          | :ranking-top-2:`1.141`                                                          | :ranking-low-5:`nan`                                                            | :ranking-top-1:`1.016`                                                          | :ranking-top-1:`1.051`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.132`                                                          | :ranking-top-1:`1.016`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|ENGINX 236516 vanadium, bank 1, 10 brk                                           | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.138`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.138`                                                          | :ranking-top-1:`1.038`                                                          | :ranking-top-1:`1.02`                                                           | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|ENGINX 236516 vanadium, bank 1, 30 brk                                           | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.138`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.138`                                                          | :ranking-top-2:`1.113`                                                          | :ranking-top-1:`1.03`                                                           | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|EVS14188-90_processed Gaussian peaks 1                                           | :ranking-low-4:`1.914`                                                          | :ranking-med-3:`1.566`                                                          | :ranking-top-2:`1.277`                                                          | :ranking-low-4:`2.228`                                                          | :ranking-med-3:`1.649`                                                          | :ranking-top-1:`1.003`                                                          | :ranking-low-4:`2.301`                                                          | :ranking-low-4:`2.305`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|EVS14188-90_processed Gaussian peaks 1                                           | :ranking-med-3:`1.538`                                                          | :ranking-med-3:`1.538`                                                          | :ranking-med-3:`1.538`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.053`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-4:`2.337`                                                          | :ranking-low-4:`2.344`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|GEM 13 IC peaks                                                                  | :ranking-low-5:`17.09`                                                          | :ranking-low-5:`3.571`                                                          | :ranking-low-5:`14.59`                                                          | :ranking-low-5:`nan`                                                            | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.018`                                                          | :ranking-low-5:`8.178`                                                          | :ranking-low-5:`26.04`                                                          | :ranking-top-1:`1.003`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 1                                             | :ranking-top-1:`1.005`                                                          | :ranking-low-5:`5.036`                                                          | :ranking-low-5:`5.081`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`13.44`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`5.281`                                                          | :ranking-low-5:`7.485`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 2                                             | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.267`                                                          | :ranking-top-2:`1.189`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-med-3:`1.511`                                                          | :ranking-low-5:`3.546`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 3                                             | :ranking-low-4:`2.604`                                                          | :ranking-low-5:`10.96`                                                          | :ranking-low-5:`9.291`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`11.54`                                                          | :ranking-low-5:`21.39`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 4                                             | :ranking-low-5:`16.21`                                                          | :ranking-low-5:`16.31`                                                          | :ranking-low-5:`17.19`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`18.63`                                                          | :ranking-low-5:`36.03`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 5                                             | :ranking-med-3:`1.667`                                                          | :ranking-low-4:`1.871`                                                          | :ranking-med-3:`1.643`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-4:`2.334`                                                          | :ranking-low-5:`3.402`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 6                                             | :ranking-low-5:`3.922`                                                          | :ranking-low-5:`3.822`                                                          | :ranking-low-5:`3.923`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`5.876`                                                          | :ranking-low-5:`16.78`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 7                                             | :ranking-low-5:`4.736`                                                          | :ranking-med-3:`1.344`                                                          | :ranking-low-5:`4.82`                                                           | :ranking-low-5:`2.948e+06`                                                      | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`5.245`                                                          | :ranking-low-5:`6.1`                                                            | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 8                                             | :ranking-low-4:`2.154`                                                          | :ranking-low-4:`2.198`                                                          | :ranking-low-4:`1.992`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-4:`2.799`                                                          | :ranking-low-5:`3.845`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 9                                             | :ranking-top-2:`1.133`                                                          | :ranking-top-2:`1.132`                                                          | :ranking-top-2:`1.28`                                                           | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.283`                                                          | :ranking-med-3:`1.594`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_nist_average.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_nist_average.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5a4127a737c6e5053ddc458636fda05ef83f6c82
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_nist_average.txt
@@ -0,0 +1,43 @@
+
+.. _Minimizers_weighted_comparison_in_terms_of_accuracy_nist_average:
+
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|                                                                                 |BFGS                                                                             |Conjugate gradient (Fletcher-Reeves imp.)                                        |Conjugate gradient (Polak-Ribiere imp.)                                          |Damping                                                                          |Levenberg-Marquardt                                                              |Levenberg-MarquardtMD                                                            |Simplex                                                                          |SteepestDescent                                                                  |Trust Region                                                                     |
++=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+
+|`Kirby2 1 <http://www.itl.nist.gov/div898/strd/nls/data/kirby2.shtml>`__         | :ranking-low-5:`309.1`                                                          | :ranking-low-5:`13.83`                                                          | :ranking-low-5:`13.49`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`210.8`                                                          | :ranking-low-5:`285.4`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Kirby2 2 <http://www.itl.nist.gov/div898/strd/nls/data/kirby2.shtml>`__         | :ranking-top-1:`1.042`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.106`                                                          | :ranking-top-1:`1.042`                                                          | :ranking-top-1:`1.042`                                                          | :ranking-top-1:`1.042`                                                          | :ranking-low-5:`4.37`                                                           | :ranking-low-5:`70.06`                                                          | :ranking-top-1:`1.042`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Hahn1 1 <http://www.itl.nist.gov/div898/strd/nls/data/hahn1.shtml>`__           | :ranking-low-5:`2.788e+04`                                                      | :ranking-low-5:`2.666e+04`                                                      | :ranking-low-5:`74.31`                                                          | :ranking-low-5:`472.2`                                                          | :ranking-low-5:`15.15`                                                          | :ranking-low-5:`19.09`                                                          | :ranking-low-5:`280.6`                                                          | :ranking-low-5:`9883`                                                           | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Hahn1 2 <http://www.itl.nist.gov/div898/strd/nls/data/hahn1.shtml>`__           | :ranking-low-5:`6474`                                                           | :ranking-low-5:`37.17`                                                          | :ranking-low-5:`345.4`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`25.87`                                                          | :ranking-low-5:`1.001e+04`                                                      | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`MGH17 1 <http://www.itl.nist.gov/div898/strd/nls/data/mgh17.shtml>`__           | :ranking-low-5:`1.271e+07`                                                      | :ranking-low-5:`1.271e+07`                                                      | :ranking-low-5:`1.271e+07`                                                      | :ranking-low-5:`nan`                                                            | :ranking-top-1:`1`                                                              | :ranking-low-5:`5.207e+07`                                                      | :ranking-low-5:`1.761e+07`                                                      | :ranking-low-5:`1.271e+07`                                                      | :ranking-low-5:`6.607e+15`                                                      |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`MGH17 2 <http://www.itl.nist.gov/div898/strd/nls/data/mgh17.shtml>`__           | :ranking-low-5:`604`                                                            | :ranking-low-5:`33.64`                                                          | :ranking-low-5:`30.24`                                                          | :ranking-low-5:`3.75e+13`                                                       | :ranking-top-1:`1.016`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`1523`                                                           | :ranking-low-5:`657.6`                                                          | :ranking-top-1:`1.017`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Lanczos1 1 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos1.shtml>`__     | :ranking-low-5:`1.049e+18`                                                      | :ranking-low-5:`5.459e+16`                                                      | :ranking-low-5:`5.507e+16`                                                      | :ranking-low-5:`285.4`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`5.136`                                                          | :ranking-low-5:`1.082e+17`                                                      | :ranking-low-5:`9.626e+17`                                                      | :ranking-low-5:`2.374e+09`                                                      |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Lanczos1 2 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos1.shtml>`__     | :ranking-low-5:`1.818e+17`                                                      | :ranking-low-5:`5.367e+16`                                                      | :ranking-low-5:`5.221e+16`                                                      | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`213.2`                                                          | :ranking-low-5:`5.065e+15`                                                      | :ranking-low-5:`1.625e+17`                                                      | :ranking-low-5:`2.606e+06`                                                      |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Lanczos2 1 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos2.shtml>`__     | :ranking-low-5:`1.364e+09`                                                      | :ranking-low-5:`7.103e+07`                                                      | :ranking-low-5:`7.166e+07`                                                      | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`1.446e+08`                                                      | :ranking-low-5:`1.081e+09`                                                      | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Lanczos2 2 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos2.shtml>`__     | :ranking-low-5:`1.295e+08`                                                      | :ranking-low-5:`3.823e+07`                                                      | :ranking-low-5:`3.719e+07`                                                      | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`3.506e+06`                                                      | :ranking-low-5:`1.155e+08`                                                      | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Gauss3 1 <http://www.itl.nist.gov/div898/strd/nls/data/gauss3.shtml>`__         | :ranking-low-5:`15.22`                                                          | :ranking-low-5:`15.19`                                                          | :ranking-low-5:`15.19`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`15.22`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Gauss3 2 <http://www.itl.nist.gov/div898/strd/nls/data/gauss3.shtml>`__         | :ranking-low-5:`3.172`                                                          | :ranking-low-4:`2.023`                                                          | :ranking-low-4:`2.573`                                                          | :ranking-low-5:`8.2`                                                            | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.001`                                                          | :ranking-low-5:`9.047`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Misra1c 1 <http://www.itl.nist.gov/div898/strd/nls/data/misra1c.shtml>`__       | :ranking-low-5:`121.4`                                                          | :ranking-low-5:`121.1`                                                          | :ranking-low-5:`121.1`                                                          | :ranking-low-5:`nan`                                                            | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`121.1`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Misra1c 2 <http://www.itl.nist.gov/div898/strd/nls/data/misra1c.shtml>`__       | :ranking-low-5:`6.516`                                                          | :ranking-low-5:`6.517`                                                          | :ranking-low-5:`6.517`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`6.518`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Misra1d 1 <http://www.itl.nist.gov/div898/strd/nls/data/misra1d.shtml>`__       | :ranking-low-5:`20.25`                                                          | :ranking-low-5:`20.63`                                                          | :ranking-low-5:`20.63`                                                          | :ranking-top-1:`1.001`                                                          | :ranking-top-1:`1.001`                                                          | :ranking-top-1:`1.001`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`20.63`                                                          | :ranking-top-1:`1.001`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Misra1d 2 <http://www.itl.nist.gov/div898/strd/nls/data/misra1d.shtml>`__       | :ranking-low-4:`2.008`                                                          | :ranking-low-4:`2.002`                                                          | :ranking-low-4:`2.002`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.001`                                                          | :ranking-low-4:`2.001`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`ENSO 1 <http://www.itl.nist.gov/div898/strd/nls/data/enso.shtml>`__             | :ranking-top-2:`1.315`                                                          | :ranking-top-1:`1.026`                                                          | :ranking-top-1:`1.067`                                                          | :ranking-med-3:`1.526`                                                          | :ranking-top-1:`1.003`                                                          | :ranking-med-3:`1.526`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.081`                                                          | :ranking-top-1:`1.001`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`ENSO 2 <http://www.itl.nist.gov/div898/strd/nls/data/enso.shtml>`__             | :ranking-top-1:`1.06`                                                           | :ranking-top-1:`1.025`                                                          | :ranking-top-1:`1.025`                                                          | :ranking-top-1:`1.084`                                                          | :ranking-top-1:`1.002`                                                          | :ranking-top-1:`1.084`                                                          | :ranking-top-1:`1.065`                                                          | :ranking-top-1:`1.061`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_nist_higher.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_nist_higher.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d6e7d72689e088030343f0a38620cf9b3f89705d
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_nist_higher.txt
@@ -0,0 +1,39 @@
+
+.. _Minimizers_weighted_comparison_in_terms_of_accuracy_nist_higher:
+
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|                                                                                 |BFGS                                                                             |Conjugate gradient (Fletcher-Reeves imp.)                                        |Conjugate gradient (Polak-Ribiere imp.)                                          |Damping                                                                          |Levenberg-Marquardt                                                              |Levenberg-MarquardtMD                                                            |Simplex                                                                          |SteepestDescent                                                                  |Trust Region                                                                     |
++=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+
+|`MGH09 1 <http://www.itl.nist.gov/div898/strd/nls/data/mgh09.shtml>`__           | :ranking-low-5:`18.15`                                                          | :ranking-low-5:`52.96`                                                          | :ranking-low-5:`52.96`                                                          | :ranking-low-5:`338.1`                                                          | :ranking-low-5:`3.947`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`7.13`                                                           | :ranking-low-5:`46.53`                                                          | :ranking-low-5:`3.948`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`MGH09 2 <http://www.itl.nist.gov/div898/strd/nls/data/mgh09.shtml>`__           | :ranking-low-4:`1.807`                                                          | :ranking-top-2:`1.181`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`4.196`                                                          | :ranking-top-1:`1.063`                                                          | :ranking-top-1:`1.063`                                                          | :ranking-top-2:`1.182`                                                          | :ranking-med-3:`1.718`                                                          | :ranking-top-1:`1.063`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Thurber 1 <http://www.itl.nist.gov/div898/strd/nls/data/thurber.shtml>`__       | :ranking-med-3:`1.359`                                                          | :ranking-med-3:`1.49`                                                           | :ranking-top-1:`1`                                                              | :ranking-low-5:`18.14`                                                          | :ranking-low-5:`6.775`                                                          | :ranking-low-5:`6.787`                                                          | :ranking-low-5:`5.655`                                                          | :ranking-low-4:`1.946`                                                          | :ranking-low-5:`6.77`                                                           |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Thurber 2 <http://www.itl.nist.gov/div898/strd/nls/data/thurber.shtml>`__       | :ranking-low-4:`2.689`                                                          | :ranking-med-3:`1.419`                                                          | :ranking-med-3:`1.446`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.001`                                                          | :ranking-top-1:`1.003`                                                          | :ranking-low-4:`2.293`                                                          | :ranking-low-4:`2.572`                                                          | :ranking-top-1:`1.001`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`BoxBOD 1 <http://www.itl.nist.gov/div898/strd/nls/data/boxbod.shtml>`__         | :ranking-low-4:`2.968`                                                          | :ranking-low-4:`2.968`                                                          | :ranking-low-4:`2.968`                                                          | :ranking-low-5:`nan`                                                            | :ranking-low-4:`2.968`                                                          | :ranking-low-4:`2.968`                                                          | :ranking-low-4:`2.968`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-4:`2.968`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`BoxBOD 2 <http://www.itl.nist.gov/div898/strd/nls/data/boxbod.shtml>`__         | :ranking-low-5:`22.91`                                                          | :ranking-low-5:`8.641`                                                          | :ranking-low-5:`8.641`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`8.641`                                                          | :ranking-low-5:`8.382`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Rat42 1 <http://www.itl.nist.gov/div898/strd/nls/data/rat42.shtml>`__           | :ranking-low-5:`152.7`                                                          | :ranking-low-5:`15.17`                                                          | :ranking-low-5:`15.24`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`14.83`                                                          | :ranking-low-5:`207.2`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Rat42 2 <http://www.itl.nist.gov/div898/strd/nls/data/rat42.shtml>`__           | :ranking-top-2:`1.301`                                                          | :ranking-top-2:`1.289`                                                          | :ranking-top-1:`1.044`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-med-3:`1.448`                                                          | :ranking-med-3:`1.422`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`MGH10 1 <http://www.itl.nist.gov/div898/strd/nls/data/mgh10.shtml>`__           | :ranking-low-5:`6.234e+05`                                                      | :ranking-low-5:`6.282e+05`                                                      | :ranking-low-5:`6.215e+05`                                                      | :ranking-low-5:`9.056e+49`                                                      | :ranking-top-1:`1`                                                              | :ranking-low-5:`5.269e+05`                                                      | :ranking-low-5:`6.462e+05`                                                      | :ranking-low-5:`6.282e+05`                                                      | :ranking-low-5:`6.097e+05`                                                      |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`MGH10 2 <http://www.itl.nist.gov/div898/strd/nls/data/mgh10.shtml>`__           | :ranking-low-5:`8.218e+04`                                                      | :ranking-low-5:`1338`                                                           | :ranking-low-5:`1335`                                                           | :ranking-low-5:`nan`                                                            | :ranking-low-5:`3.105`                                                          | :ranking-low-5:`147.2`                                                          | :ranking-low-5:`8.409e+04`                                                      | :ranking-low-5:`8.091e+04`                                                      | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Eckerle4 1 <http://www.itl.nist.gov/div898/strd/nls/data/eckerle4.shtml>`__     | :ranking-low-5:`478`                                                            | :ranking-low-5:`490.5`                                                          | :ranking-low-5:`490.5`                                                          | :ranking-low-5:`478`                                                            | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`478`                                                            | :ranking-low-5:`490.5`                                                          | :ranking-low-5:`340.7`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Eckerle4 2 <http://www.itl.nist.gov/div898/strd/nls/data/eckerle4.shtml>`__     | :ranking-low-5:`30.92`                                                          | :ranking-low-5:`33.83`                                                          | :ranking-low-5:`33.83`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.001`                                                          | :ranking-low-5:`33.83`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Rat43 1 <http://www.itl.nist.gov/div898/strd/nls/data/rat43.shtml>`__           | :ranking-low-5:`251.4`                                                          | :ranking-low-5:`178.7`                                                          | :ranking-low-5:`83.69`                                                          | :ranking-low-5:`nan`                                                            | :ranking-top-1:`1`                                                              | :ranking-low-4:`2.938`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`242.9`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Rat43 2 <http://www.itl.nist.gov/div898/strd/nls/data/rat43.shtml>`__           | :ranking-top-1:`1.071`                                                          | :ranking-top-1:`1.006`                                                          | :ranking-top-1:`1.006`                                                          | :ranking-top-1:`1.01`                                                           | :ranking-top-1:`1.01`                                                           | :ranking-top-1:`1.01`                                                           | :ranking-top-1:`1.01`                                                           | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.01`                                                           |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Bennett5 1 <http://www.itl.nist.gov/div898/strd/nls/data/bennett5.shtml>`__     | :ranking-low-5:`1334`                                                           | :ranking-low-5:`566.4`                                                          | :ranking-top-1:`1.028`                                                          | :ranking-low-5:`nan`                                                            | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`1819`                                                           | :ranking-low-5:`1318`                                                           | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Bennett5 2 <http://www.itl.nist.gov/div898/strd/nls/data/bennett5.shtml>`__     | :ranking-low-5:`713.7`                                                          | :ranking-low-5:`6.524`                                                          | :ranking-low-4:`2.247`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.062`                                                          | :ranking-low-5:`1571`                                                           | :ranking-low-5:`705`                                                            | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_nist_lower.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_nist_lower.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c54778171af0bea6017a301825928455b7d3832b
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_nist_lower.txt
@@ -0,0 +1,39 @@
+
+.. _Minimizers_weighted_comparison_in_terms_of_accuracy_nist_lower:
+
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|                                                                                 |BFGS                                                                             |Conjugate gradient (Fletcher-Reeves imp.)                                        |Conjugate gradient (Polak-Ribiere imp.)                                          |Damping                                                                          |Levenberg-Marquardt                                                              |Levenberg-MarquardtMD                                                            |Simplex                                                                          |SteepestDescent                                                                  |Trust Region                                                                     |
++=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+
+|`Misra1a 1 <http://www.itl.nist.gov/div898/strd/nls/data/misra1a.shtml>`__       | :ranking-low-5:`152.6`                                                          | :ranking-low-5:`151.7`                                                          | :ranking-low-5:`151.7`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.001`                                                          | :ranking-low-5:`151.7`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Misra1a 2 <http://www.itl.nist.gov/div898/strd/nls/data/misra1a.shtml>`__       | :ranking-low-4:`2.233`                                                          | :ranking-low-4:`2.266`                                                          | :ranking-low-4:`2.266`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.001`                                                          | :ranking-low-4:`2.265`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Chwirut2 1 <http://www.itl.nist.gov/div898/strd/nls/data/chwirut2.shtml>`__     | :ranking-top-1:`1.08`                                                           | :ranking-top-1:`1.043`                                                          | :ranking-top-1:`1.001`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.049`                                                          | :ranking-top-1:`1.081`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Chwirut2 2 <http://www.itl.nist.gov/div898/strd/nls/data/chwirut2.shtml>`__     | :ranking-top-1:`1.004`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.247`                                                          | :ranking-top-1:`1.005`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Chwirut1 1 <http://www.itl.nist.gov/div898/strd/nls/data/chwirut1.shtml>`__     | :ranking-top-2:`1.134`                                                          | :ranking-top-2:`1.11`                                                           | :ranking-top-1:`1.006`                                                          | :ranking-top-2:`1.285`                                                          | :ranking-top-1:`1.012`                                                          | :ranking-top-1:`1.012`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.132`                                                          | :ranking-top-1:`1.012`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Chwirut1 2 <http://www.itl.nist.gov/div898/strd/nls/data/chwirut1.shtml>`__     | :ranking-top-1:`1.023`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.011`                                                          | :ranking-top-1:`1.012`                                                          | :ranking-top-1:`1.012`                                                          | :ranking-top-1:`1.012`                                                          | :ranking-top-1:`1.087`                                                          | :ranking-top-1:`1.024`                                                          | :ranking-top-1:`1.012`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Lanczos3 1 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos3.shtml>`__     | :ranking-low-5:`1.683e+06`                                                      | :ranking-low-5:`8.746e+04`                                                      | :ranking-low-5:`8.828e+04`                                                      | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`1.833e+05`                                                      | :ranking-low-5:`1.191e+06`                                                      | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Lanczos3 2 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos3.shtml>`__     | :ranking-low-5:`1.982e+05`                                                      | :ranking-low-5:`5.844e+04`                                                      | :ranking-low-5:`5.685e+04`                                                      | :ranking-top-2:`1.241`                                                          | :ranking-top-2:`1.241`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`3540`                                                           | :ranking-low-5:`1.866e+05`                                                      | :ranking-top-2:`1.241`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Gauss1 1 <http://www.itl.nist.gov/div898/strd/nls/data/gauss1.shtml>`__         | :ranking-low-5:`5.637`                                                          | :ranking-low-5:`5.596`                                                          | :ranking-low-5:`5.596`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`5.637`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Gauss1 2 <http://www.itl.nist.gov/div898/strd/nls/data/gauss1.shtml>`__         | :ranking-low-5:`9.281`                                                          | :ranking-top-1:`1.077`                                                          | :ranking-top-1:`1.027`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.032`                                                          | :ranking-low-5:`9.278`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Gauss2 1 <http://www.itl.nist.gov/div898/strd/nls/data/gauss2.shtml>`__         | :ranking-low-4:`2.465`                                                          | :ranking-low-5:`7.338`                                                          | :ranking-low-5:`7.338`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`7.269`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Gauss2 2 <http://www.itl.nist.gov/div898/strd/nls/data/gauss2.shtml>`__         | :ranking-low-4:`2.151`                                                          | :ranking-low-5:`3.752`                                                          | :ranking-low-5:`3.752`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`3.404`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`DanWood 1 <http://www.itl.nist.gov/div898/strd/nls/data/danwood.shtml>`__       | :ranking-low-5:`73.76`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.002`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.012`                                                          | :ranking-low-5:`53.75`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`DanWood 2 <http://www.itl.nist.gov/div898/strd/nls/data/danwood.shtml>`__       | :ranking-top-2:`1.231`                                                          | :ranking-top-1:`1.005`                                                          | :ranking-top-1:`1.005`                                                          | :ranking-top-1:`1.005`                                                          | :ranking-top-1:`1.005`                                                          | :ranking-top-1:`1.005`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-4:`2.04`                                                           | :ranking-top-1:`1.005`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Misra1b 1 <http://www.itl.nist.gov/div898/strd/nls/data/misra1b.shtml>`__       | :ranking-low-5:`101.2`                                                          | :ranking-low-5:`97.62`                                                          | :ranking-low-5:`97.62`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`97.58`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Misra1b 2 <http://www.itl.nist.gov/div898/strd/nls/data/misra1b.shtml>`__       | :ranking-low-5:`15.72`                                                          | :ranking-low-5:`15.44`                                                          | :ranking-low-5:`15.44`                                                          | :ranking-low-5:`4.476e+05`                                                      | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-top-1:`1`                                                              | :ranking-low-5:`15.44`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_summary.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_summary.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b4459d91e35d686bbe7a0fd1a96f0e528092d073
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_acc_summary.txt
@@ -0,0 +1,14 @@
++------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+
+|                                                                                                |BFGS                                                                                            |Conjugate gradient (Fletcher-Reeves imp.)                                                       |Conjugate gradient (Polak-Ribiere imp.)                                                         |Damping                                                                                         |Levenberg-Marquardt                                                                             |Levenberg-MarquardtMD                                                                           |Simplex                                                                                         |SteepestDescent                                                                                 |Trust Region                                                                                    |
++================================================================================================+================================================================================================+================================================================================================+================================================================================================+================================================================================================+================================================================================================+================================================================================================+================================================================================================+================================================================================================+================================================================================================+
+|`NIST, "lower" difficulty <http://www.itl.nist.gov/div898/strd/nls/nls_main.shtml>`__           | :ref:`4.051 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_lower>`                  | :ref:`3.009 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_lower>`                  | :ref:`3.009 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_lower>`                  | :ref:`1 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_lower>`                      | :ref:`1 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_lower>`                      | :ref:`1 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_lower>`                      | :ref:`1.001 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_lower>`                  | :ref:`6.453 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_lower>`                  | :ref:`1 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_lower>`                      |
++------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+
+|`NIST, "average" difficulty <http://www.itl.nist.gov/div898/strd/nls/nls_main.shtml>`__         | :ref:`215.2 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_average>`                | :ref:`27.14 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_average>`                | :ref:`25.43 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_average>`                | :ref:`1.001 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_average>`                | :ref:`1 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_average>`                    | :ref:`1 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_average>`                    | :ref:`15.12 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_average>`                | :ref:`203.2 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_average>`                | :ref:`1 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_average>`                    |
++------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+
+|`NIST, "higher" difficulty <http://www.itl.nist.gov/div898/strd/nls/nls_main.shtml>`__          | :ref:`26.92 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_higher>`                 | :ref:`11.91 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_higher>`                 | :ref:`5.804 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_higher>`                 | :ref:`1.005 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_higher>`                 | :ref:`1 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_higher>`                     | :ref:`1.006 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_higher>`                 | :ref:`6.393 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_higher>`                 | :ref:`40.18 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_higher>`                 | :ref:`1.001 <Minimizers_weighted_comparison_in_terms_of_accuracy_nist_higher>`                 |
++------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+
+|CUTEst                                                                                          | :ref:`36.53 <Minimizers_weighted_comparison_in_terms_of_accuracy_cutest>`                      | :ref:`10.1 <Minimizers_weighted_comparison_in_terms_of_accuracy_cutest>`                       | :ref:`9.345 <Minimizers_weighted_comparison_in_terms_of_accuracy_cutest>`                      | :ref:`1.579e+05 <Minimizers_weighted_comparison_in_terms_of_accuracy_cutest>`                  | :ref:`2.464 <Minimizers_weighted_comparison_in_terms_of_accuracy_cutest>`                      | :ref:`5315 <Minimizers_weighted_comparison_in_terms_of_accuracy_cutest>`                       | :ref:`14.31 <Minimizers_weighted_comparison_in_terms_of_accuracy_cutest>`                      | :ref:`58.03 <Minimizers_weighted_comparison_in_terms_of_accuracy_cutest>`                      | :ref:`1 <Minimizers_weighted_comparison_in_terms_of_accuracy_cutest>`                          |
++------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+
+|Neutron data                                                                                    | :ref:`1.667 <Minimizers_weighted_comparison_in_terms_of_accuracy_neutron_data>`                | :ref:`1.566 <Minimizers_weighted_comparison_in_terms_of_accuracy_neutron_data>`                | :ref:`1.643 <Minimizers_weighted_comparison_in_terms_of_accuracy_neutron_data>`                | :ref:`1 <Minimizers_weighted_comparison_in_terms_of_accuracy_neutron_data>`                    | :ref:`1 <Minimizers_weighted_comparison_in_terms_of_accuracy_neutron_data>`                    | :ref:`1 <Minimizers_weighted_comparison_in_terms_of_accuracy_neutron_data>`                    | :ref:`2.334 <Minimizers_weighted_comparison_in_terms_of_accuracy_neutron_data>`                | :ref:`3.546 <Minimizers_weighted_comparison_in_terms_of_accuracy_neutron_data>`                | :ref:`1 <Minimizers_weighted_comparison_in_terms_of_accuracy_neutron_data>`                    |
++------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_cutest.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_cutest.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7d5cf171d6f56c9b41779c122f4bd46af4967bef
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_cutest.txt
@@ -0,0 +1,20 @@
+
+
+.. _Minimizers_weighted_comparison_in_terms_of_runtime_cutest:
+
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|                                                                                 |BFGS                                                                             |Conjugate gradient (Fletcher-Reeves imp.)                                        |Conjugate gradient (Polak-Ribiere imp.)                                          |Damping                                                                          |Levenberg-Marquardt                                                              |Levenberg-MarquardtMD                                                            |Simplex                                                                          |SteepestDescent                                                                  |Trust Region                                                                     |
++=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+
+|PALMER6C                                                                         | :ranking-low-5:`3.203`                                                          | :ranking-low-5:`37.49`                                                          | :ranking-low-5:`14.98`                                                          | :ranking-top-2:`1.107`                                                          | :ranking-low-4:`2.015`                                                          | :ranking-top-1:`1`                                                              | :ranking-med-3:`1.682`                                                          | :ranking-low-5:`16.59`                                                          | :ranking-low-5:`3.542`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|PALMER7C                                                                         | :ranking-low-5:`3.71`                                                           | :ranking-low-5:`28.69`                                                          | :ranking-low-5:`34.96`                                                          | :ranking-top-1:`1.047`                                                          | :ranking-low-5:`19.52`                                                          | :ranking-top-1:`1`                                                              | :ranking-med-3:`1.708`                                                          | :ranking-low-5:`17.97`                                                          | :ranking-low-5:`27.65`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|PALMER8C                                                                         | :ranking-low-5:`3.308`                                                          | :ranking-low-5:`31.74`                                                          | :ranking-low-5:`34.65`                                                          | :ranking-med-3:`1.529`                                                          | :ranking-low-5:`17.39`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`4.452`                                                          | :ranking-low-5:`16.36`                                                          | :ranking-low-5:`25.99`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|YFITU                                                                            | :ranking-low-5:`3.193`                                                          | :ranking-low-5:`8.638`                                                          | :ranking-low-5:`9.006`                                                          | :ranking-med-3:`1.582`                                                          | :ranking-top-1:`1.049`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.077`                                                          | :ranking-low-5:`4.637`                                                          | :ranking-top-2:`1.186`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|VESUVIOLS                                                                        | :ranking-top-2:`1.209`                                                          | :ranking-low-5:`7.944`                                                          | :ranking-low-5:`11.8`                                                           | :ranking-med-3:`1.612`                                                          | :ranking-med-3:`1.603`                                                          | :ranking-top-2:`1.14`                                                           | :ranking-top-1:`1`                                                              | :ranking-low-5:`41.34`                                                          | :ranking-med-3:`1.609`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|DMN15102LS                                                                       | :ranking-low-5:`5.209`                                                          | :ranking-low-5:`5.145`                                                          | :ranking-low-5:`5.854`                                                          | :ranking-top-1:`1`                                                              | :ranking-med-3:`1.644`                                                          | :ranking-low-5:`3.548`                                                          | :ranking-low-4:`2.691`                                                          | :ranking-low-5:`8.067`                                                          | :ranking-low-5:`21.12`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_neutron_data.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_neutron_data.txt
new file mode 100644
index 0000000000000000000000000000000000000000..af2c6e7c7e7ddd527128c086e8d3f4b8a151ffa5
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_neutron_data.txt
@@ -0,0 +1,46 @@
+
+
+.. _Minimizers_weighted_comparison_in_terms_of_runtime_neutron_data:
+
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|                                                                                 |BFGS                                                                             |Conjugate gradient (Fletcher-Reeves imp.)                                        |Conjugate gradient (Polak-Ribiere imp.)                                          |Damping                                                                          |Levenberg-Marquardt                                                              |Levenberg-MarquardtMD                                                            |Simplex                                                                          |SteepestDescent                                                                  |Trust Region                                                                     |
++=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+
+|ENGINX 193749 calibration, spectrum 651, peak 19                                 | :ranking-top-2:`1.245`                                                          | :ranking-low-5:`3.983`                                                          | :ranking-low-4:`2.818`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-4:`2.72`                                                           | :ranking-top-2:`1.285`                                                          | :ranking-low-5:`3.901`                                                          | :ranking-low-5:`14.78`                                                          | :ranking-low-5:`17.93`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|ENGINX 193749 calibration, spectrum 651, peak 20                                 | :ranking-med-3:`1.674`                                                          | :ranking-low-5:`8.281`                                                          | :ranking-low-5:`4.713`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`4.067`                                                          | :ranking-med-3:`1.361`                                                          | :ranking-low-5:`3.286`                                                          | :ranking-low-5:`17.37`                                                          | :ranking-low-5:`21.73`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|ENGINX 193749 calibration, spectrum 651, peak 23                                 | :ranking-med-3:`1.359`                                                          | :ranking-low-4:`2.566`                                                          | :ranking-low-4:`2.889`                                                          | :ranking-top-1:`1.032`                                                          | :ranking-med-3:`1.542`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.297`                                                          | :ranking-low-5:`14.64`                                                          | :ranking-low-5:`19.83`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|ENGINX 193749 calibration, spectrum 651, peak 5                                  | :ranking-top-2:`1.118`                                                          | :ranking-low-5:`4.324`                                                          | :ranking-med-3:`1.408`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.099`                                                          | :ranking-top-2:`1.175`                                                          | :ranking-low-5:`4.255`                                                          | :ranking-low-5:`6.036`                                                          | :ranking-low-4:`2.991`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|ENGINX 193749 calibration, spectrum 651, peak 6                                  | :ranking-top-1:`1`                                                              | :ranking-low-4:`2.992`                                                          | :ranking-low-4:`1.967`                                                          | :ranking-top-2:`1.108`                                                          | :ranking-low-4:`2.317`                                                          | :ranking-top-2:`1.125`                                                          | :ranking-low-5:`3.347`                                                          | :ranking-low-5:`5.617`                                                          | :ranking-low-5:`30.43`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|ENGINX 236516 vanadium, bank 1, 10 brk                                           | :ranking-low-5:`19.23`                                                          | :ranking-low-5:`24.26`                                                          | :ranking-low-5:`25.23`                                                          | :ranking-top-1:`1.069`                                                          | :ranking-low-5:`5.64`                                                           | :ranking-top-1:`1`                                                              | :ranking-low-5:`17.53`                                                          | :ranking-low-5:`190.6`                                                          | :ranking-low-4:`2.93`                                                           |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|ENGINX 236516 vanadium, bank 1, 30 brk                                           | :ranking-low-5:`32.84`                                                          | :ranking-low-5:`101`                                                            | :ranking-low-5:`135.2`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`6.909`                                                          | :ranking-top-1:`1.004`                                                          | :ranking-low-5:`7.944`                                                          | :ranking-low-5:`175`                                                            | :ranking-low-4:`2.661`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|EVS14188-90_processed Gaussian peaks 1                                           | :ranking-low-5:`83.93`                                                          | :ranking-low-5:`39.91`                                                          | :ranking-low-5:`40.09`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-4:`2.115`                                                          | :ranking-low-5:`3.198`                                                          | :ranking-top-2:`1.162`                                                          | :ranking-low-5:`25.14`                                                          | :ranking-low-5:`3.585`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|EVS14188-90_processed Gaussian peaks 1                                           | :ranking-low-5:`17.25`                                                          | :ranking-low-5:`35.46`                                                          | :ranking-low-5:`36.52`                                                          | :ranking-low-4:`2.102`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-4:`1.913`                                                          | :ranking-top-1:`1.018`                                                          | :ranking-low-5:`21.93`                                                          | :ranking-low-4:`2.495`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|GEM 13 IC peaks                                                                  | :ranking-med-3:`1.354`                                                          | :ranking-low-5:`41.38`                                                          | :ranking-low-5:`44.17`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`4.599`                                                          | :ranking-low-5:`3.344`                                                          | :ranking-low-5:`10.27`                                                          | :ranking-low-5:`3.188`                                                          | :ranking-low-5:`10.59`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 1                                             | :ranking-low-5:`7.068`                                                          | :ranking-low-5:`5.796`                                                          | :ranking-low-5:`5.604`                                                          | :ranking-top-2:`1.103`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.076`                                                          | :ranking-low-4:`1.895`                                                          | :ranking-low-5:`4.189`                                                          | :ranking-top-2:`1.268`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 2                                             | :ranking-low-5:`5.019`                                                          | :ranking-low-5:`5.489`                                                          | :ranking-low-5:`5.62`                                                           | :ranking-top-1:`1.011`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.276`                                                          | :ranking-low-4:`1.767`                                                          | :ranking-low-5:`4.071`                                                          | :ranking-top-2:`1.276`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 3                                             | :ranking-low-5:`9.898`                                                          | :ranking-low-5:`6.215`                                                          | :ranking-low-5:`6.334`                                                          | :ranking-low-4:`1.818`                                                          | :ranking-top-1:`1.096`                                                          | :ranking-top-1:`1`                                                              | :ranking-med-3:`1.715`                                                          | :ranking-low-5:`4.205`                                                          | :ranking-top-2:`1.191`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 4                                             | :ranking-low-5:`3.493`                                                          | :ranking-low-5:`5.53`                                                           | :ranking-low-5:`5.487`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.072`                                                          | :ranking-top-1:`1.01`                                                           | :ranking-med-3:`1.426`                                                          | :ranking-low-5:`3.866`                                                          | :ranking-top-2:`1.154`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 5                                             | :ranking-low-5:`9.501`                                                          | :ranking-low-5:`5.589`                                                          | :ranking-low-5:`6.026`                                                          | :ranking-top-1:`1.063`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.052`                                                          | :ranking-med-3:`1.446`                                                          | :ranking-low-5:`4.002`                                                          | :ranking-top-2:`1.185`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 6                                             | :ranking-low-5:`3.091`                                                          | :ranking-low-5:`5.472`                                                          | :ranking-low-5:`5.569`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.137`                                                          | :ranking-top-1:`1.077`                                                          | :ranking-med-3:`1.391`                                                          | :ranking-low-5:`3.901`                                                          | :ranking-top-2:`1.106`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 7                                             | :ranking-low-5:`3.545`                                                          | :ranking-low-5:`6.025`                                                          | :ranking-low-5:`5.746`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.037`                                                          | :ranking-top-1:`1.092`                                                          | :ranking-med-3:`1.5`                                                            | :ranking-low-5:`4.034`                                                          | :ranking-top-2:`1.274`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 8                                             | :ranking-low-5:`4.326`                                                          | :ranking-low-5:`5.938`                                                          | :ranking-low-5:`5.948`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.014`                                                          | :ranking-top-1:`1.068`                                                          | :ranking-med-3:`1.43`                                                           | :ranking-low-5:`4.077`                                                          | :ranking-top-2:`1.313`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|WISH17701 tube 3 calibration, peak 9                                             | :ranking-low-5:`3.089`                                                          | :ranking-low-5:`5.646`                                                          | :ranking-low-5:`5.913`                                                          | :ranking-top-1:`1.083`                                                          | :ranking-top-1:`1.075`                                                          | :ranking-top-1:`1`                                                              | :ranking-med-3:`1.384`                                                          | :ranking-low-5:`4.042`                                                          | :ranking-top-2:`1.253`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_nist_average.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_nist_average.txt
new file mode 100644
index 0000000000000000000000000000000000000000..68f6b7a1cd4ddf9d64aa8b23b2ce8a9d54bd5bde
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_nist_average.txt
@@ -0,0 +1,44 @@
+
+
+.. _Minimizers_weighted_comparison_in_terms_of_runtime_nist_average:
+
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|                                                                                 |BFGS                                                                             |Conjugate gradient (Fletcher-Reeves imp.)                                        |Conjugate gradient (Polak-Ribiere imp.)                                          |Damping                                                                          |Levenberg-Marquardt                                                              |Levenberg-MarquardtMD                                                            |Simplex                                                                          |SteepestDescent                                                                  |Trust Region                                                                     |
++=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+
+|`Kirby2 1 <http://www.itl.nist.gov/div898/strd/nls/data/kirby2.shtml>`__         | :ranking-low-4:`2.466`                                                          | :ranking-low-5:`27.66`                                                          | :ranking-low-5:`28.18`                                                          | :ranking-top-1:`1.089`                                                          | :ranking-top-1:`1.087`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-4:`2.104`                                                          | :ranking-low-5:`15.74`                                                          | :ranking-low-4:`2.708`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Kirby2 2 <http://www.itl.nist.gov/div898/strd/nls/data/kirby2.shtml>`__         | :ranking-med-3:`1.496`                                                          | :ranking-low-5:`28.78`                                                          | :ranking-low-5:`28.33`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.18`                                                           | :ranking-top-1:`1.092`                                                          | :ranking-low-4:`2.112`                                                          | :ranking-low-5:`18.05`                                                          | :ranking-low-4:`2.242`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Hahn1 1 <http://www.itl.nist.gov/div898/strd/nls/data/hahn1.shtml>`__           | :ranking-low-4:`2.338`                                                          | :ranking-low-4:`1.79`                                                           | :ranking-low-5:`37.52`                                                          | :ranking-low-5:`17.6`                                                           | :ranking-low-5:`23.66`                                                          | :ranking-top-1:`1.1`                                                            | :ranking-med-3:`1.575`                                                          | :ranking-low-5:`20.91`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Hahn1 2 <http://www.itl.nist.gov/div898/strd/nls/data/hahn1.shtml>`__           | :ranking-top-1:`1.074`                                                          | :ranking-low-5:`46.11`                                                          | :ranking-low-5:`25.85`                                                          | :ranking-top-1:`1.015`                                                          | :ranking-top-2:`1.106`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-4:`2.759`                                                          | :ranking-low-5:`24.71`                                                          | :ranking-med-3:`1.352`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`MGH17 1 <http://www.itl.nist.gov/div898/strd/nls/data/mgh17.shtml>`__           | :ranking-low-4:`2.492`                                                          | :ranking-top-1:`1.035`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.31`                                                           | :ranking-low-5:`8.089`                                                          | :ranking-low-4:`2.115`                                                          | :ranking-top-2:`1.125`                                                          | :ranking-low-4:`2.459`                                                          | :ranking-med-3:`1.491`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`MGH17 2 <http://www.itl.nist.gov/div898/strd/nls/data/mgh17.shtml>`__           | :ranking-med-3:`1.427`                                                          | :ranking-low-4:`1.768`                                                          | :ranking-low-4:`2.957`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`7.974`                                                          | :ranking-low-5:`5.232`                                                          | :ranking-top-2:`1.128`                                                          | :ranking-low-5:`7.163`                                                          | :ranking-low-5:`9.131`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Lanczos1 1 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos1.shtml>`__     | :ranking-low-4:`2.841`                                                          | :ranking-low-5:`3.231`                                                          | :ranking-low-4:`2.486`                                                          | :ranking-top-1:`1.006`                                                          | :ranking-low-4:`2.584`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-4:`2.122`                                                          | :ranking-low-5:`8.269`                                                          | :ranking-low-4:`1.944`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Lanczos1 2 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos1.shtml>`__     | :ranking-top-2:`1.234`                                                          | :ranking-low-4:`2.577`                                                          | :ranking-low-5:`3.071`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.024`                                                          | :ranking-low-5:`4.233`                                                          | :ranking-low-4:`2.784`                                                          | :ranking-low-5:`9.353`                                                          | :ranking-top-1:`1.008`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Lanczos2 1 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos2.shtml>`__     | :ranking-low-5:`3.627`                                                          | :ranking-low-5:`3.309`                                                          | :ranking-low-4:`2.695`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-4:`2.763`                                                          | :ranking-top-1:`1.05`                                                           | :ranking-low-4:`2.346`                                                          | :ranking-low-5:`8.758`                                                          | :ranking-low-4:`2.182`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Lanczos2 2 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos2.shtml>`__     | :ranking-top-2:`1.265`                                                          | :ranking-low-4:`2.449`                                                          | :ranking-low-5:`3.131`                                                          | :ranking-top-1:`1.021`                                                          | :ranking-top-1:`1.089`                                                          | :ranking-low-5:`4.293`                                                          | :ranking-low-5:`3.322`                                                          | :ranking-low-5:`9.219`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Gauss3 1 <http://www.itl.nist.gov/div898/strd/nls/data/gauss3.shtml>`__         | :ranking-low-4:`2.414`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.077`                                                          | :ranking-med-3:`1.695`                                                          | :ranking-low-4:`1.785`                                                          | :ranking-low-4:`1.786`                                                          | :ranking-low-5:`10.87`                                                          | :ranking-low-5:`62.85`                                                          | :ranking-low-5:`72.52`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Gauss3 2 <http://www.itl.nist.gov/div898/strd/nls/data/gauss3.shtml>`__         | :ranking-med-3:`1.487`                                                          | :ranking-low-5:`36.57`                                                          | :ranking-low-5:`15.59`                                                          | :ranking-low-5:`4.071`                                                          | :ranking-med-3:`1.331`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`6.78`                                                           | :ranking-low-5:`39.31`                                                          | :ranking-low-5:`45.25`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Misra1c 1 <http://www.itl.nist.gov/div898/strd/nls/data/misra1c.shtml>`__       | :ranking-low-5:`3.008`                                                          | :ranking-top-1:`1.068`                                                          | :ranking-top-1:`1.009`                                                          | :ranking-top-2:`1.279`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.058`                                                          | :ranking-top-2:`1.282`                                                          | :ranking-low-4:`2.089`                                                          | :ranking-top-2:`1.168`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Misra1c 2 <http://www.itl.nist.gov/div898/strd/nls/data/misra1c.shtml>`__       | :ranking-top-1:`1.069`                                                          | :ranking-top-2:`1.157`                                                          | :ranking-top-1:`1.043`                                                          | :ranking-med-3:`1.451`                                                          | :ranking-top-1:`1.036`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.257`                                                          | :ranking-low-4:`2.124`                                                          | :ranking-med-3:`1.378`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Misra1d 1 <http://www.itl.nist.gov/div898/strd/nls/data/misra1d.shtml>`__       | :ranking-low-5:`3.784`                                                          | :ranking-top-2:`1.249`                                                          | :ranking-top-2:`1.146`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.139`                                                          | :ranking-top-1:`1.099`                                                          | :ranking-low-4:`1.761`                                                          | :ranking-low-4:`2.127`                                                          | :ranking-top-2:`1.329`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Misra1d 2 <http://www.itl.nist.gov/div898/strd/nls/data/misra1d.shtml>`__       | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.067`                                                          | :ranking-top-1:`1.088`                                                          | :ranking-top-1:`1.039`                                                          | :ranking-top-1:`1.046`                                                          | :ranking-top-1:`1.017`                                                          | :ranking-top-2:`1.301`                                                          | :ranking-med-3:`1.549`                                                          | :ranking-top-1:`1.091`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`ENSO 1 <http://www.itl.nist.gov/div898/strd/nls/data/enso.shtml>`__             | :ranking-low-5:`3.544`                                                          | :ranking-low-5:`115.8`                                                          | :ranking-low-5:`74.75`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`108`                                                            | :ranking-med-3:`1.386`                                                          | :ranking-low-5:`16.06`                                                          | :ranking-low-5:`87.49`                                                          | :ranking-low-5:`107.7`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`ENSO 2 <http://www.itl.nist.gov/div898/strd/nls/data/enso.shtml>`__             | :ranking-low-5:`3.77`                                                           | :ranking-low-5:`98.17`                                                          | :ranking-low-5:`147.5`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`104.3`                                                          | :ranking-top-1:`1.03`                                                           | :ranking-low-5:`12.13`                                                          | :ranking-low-5:`82.23`                                                          | :ranking-low-5:`106.9`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_nist_higher.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_nist_higher.txt
new file mode 100644
index 0000000000000000000000000000000000000000..99f266a67585a07bb9cbc1409318dec2b10f086e
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_nist_higher.txt
@@ -0,0 +1,39 @@
+
+.. _Minimizers_weighted_comparison_in_terms_of_runtime_nist_higher:
+
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|                                                                                 |BFGS                                                                             |Conjugate gradient (Fletcher-Reeves imp.)                                        |Conjugate gradient (Polak-Ribiere imp.)                                          |Damping                                                                          |Levenberg-Marquardt                                                              |Levenberg-MarquardtMD                                                            |Simplex                                                                          |SteepestDescent                                                                  |Trust Region                                                                     |
++=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+
+|`MGH09 1 <http://www.itl.nist.gov/div898/strd/nls/data/mgh09.shtml>`__           | :ranking-low-5:`5.288`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.078`                                                          | :ranking-med-3:`1.698`                                                          | :ranking-med-3:`1.34`                                                           | :ranking-low-4:`2.401`                                                          | :ranking-low-4:`2.913`                                                          | :ranking-low-4:`1.775`                                                          | :ranking-low-4:`2.08`                                                           |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`MGH09 2 <http://www.itl.nist.gov/div898/strd/nls/data/mgh09.shtml>`__           | :ranking-top-1:`1.03`                                                           | :ranking-med-3:`1.334`                                                          | :ranking-med-3:`1.512`                                                          | :ranking-med-3:`1.47`                                                           | :ranking-top-1:`1.09`                                                           | :ranking-top-1:`1.07`                                                           | :ranking-top-1:`1`                                                              | :ranking-low-5:`3.695`                                                          | :ranking-top-2:`1.1`                                                            |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Thurber 1 <http://www.itl.nist.gov/div898/strd/nls/data/thurber.shtml>`__       | :ranking-top-1:`1.006`                                                          | :ranking-low-5:`7.124`                                                          | :ranking-low-5:`7.251`                                                          | :ranking-low-5:`10.08`                                                          | :ranking-low-5:`3.972`                                                          | :ranking-low-4:`2.645`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`3.85`                                                           | :ranking-low-5:`4.471`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Thurber 2 <http://www.itl.nist.gov/div898/strd/nls/data/thurber.shtml>`__       | :ranking-top-1:`1`                                                              | :ranking-low-5:`6.238`                                                          | :ranking-low-5:`15.17`                                                          | :ranking-low-5:`25.36`                                                          | :ranking-low-5:`9.846`                                                          | :ranking-low-5:`6.471`                                                          | :ranking-med-3:`1.664`                                                          | :ranking-low-5:`9.338`                                                          | :ranking-low-5:`11.1`                                                           |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`BoxBOD 1 <http://www.itl.nist.gov/div898/strd/nls/data/boxbod.shtml>`__         | :ranking-low-4:`2.342`                                                          | :ranking-top-1:`1.056`                                                          | :ranking-top-1:`1.052`                                                          | :ranking-top-2:`1.218`                                                          | :ranking-top-1:`1.008`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.125`                                                          | :ranking-low-5:`3.096`                                                          | :ranking-top-2:`1.161`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`BoxBOD 2 <http://www.itl.nist.gov/div898/strd/nls/data/boxbod.shtml>`__         | :ranking-top-1:`1.045`                                                          | :ranking-top-1:`1.073`                                                          | :ranking-top-1:`1.098`                                                          | :ranking-top-1:`1.063`                                                          | :ranking-med-3:`1.618`                                                          | :ranking-top-1:`1.073`                                                          | :ranking-top-1:`1.056`                                                          | :ranking-low-5:`3.153`                                                          | :ranking-top-1:`1`                                                              |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Rat42 1 <http://www.itl.nist.gov/div898/strd/nls/data/rat42.shtml>`__           | :ranking-low-5:`3.149`                                                          | :ranking-med-3:`1.34`                                                           | :ranking-top-2:`1.245`                                                          | :ranking-top-1:`1.022`                                                          | :ranking-top-1:`1.052`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.265`                                                          | :ranking-low-5:`3.512`                                                          | :ranking-top-1:`1.057`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Rat42 2 <http://www.itl.nist.gov/div898/strd/nls/data/rat42.shtml>`__           | :ranking-top-2:`1.116`                                                          | :ranking-low-5:`4.528`                                                          | :ranking-low-5:`5.022`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.056`                                                          | :ranking-top-1:`1.001`                                                          | :ranking-top-2:`1.166`                                                          | :ranking-low-5:`3.542`                                                          | :ranking-low-5:`6.594`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`MGH10 1 <http://www.itl.nist.gov/div898/strd/nls/data/mgh10.shtml>`__           | :ranking-low-5:`5.74`                                                           | :ranking-top-1:`1`                                                              | :ranking-low-5:`3.761`                                                          | :ranking-top-2:`1.141`                                                          | :ranking-low-5:`4.286`                                                          | :ranking-low-5:`3.409`                                                          | :ranking-top-2:`1.155`                                                          | :ranking-low-4:`2.312`                                                          | :ranking-low-5:`5.005`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`MGH10 2 <http://www.itl.nist.gov/div898/strd/nls/data/mgh10.shtml>`__           | :ranking-top-1:`1`                                                              | :ranking-low-5:`3.895`                                                          | :ranking-low-5:`5.263`                                                          | :ranking-med-3:`1.362`                                                          | :ranking-low-5:`4.603`                                                          | :ranking-low-5:`4.039`                                                          | :ranking-top-1:`1.021`                                                          | :ranking-low-5:`3.807`                                                          | :ranking-low-5:`4.765`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Eckerle4 1 <http://www.itl.nist.gov/div898/strd/nls/data/eckerle4.shtml>`__     | :ranking-low-5:`3.128`                                                          | :ranking-top-1:`1.022`                                                          | :ranking-top-2:`1.18`                                                           | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.156`                                                          | :ranking-low-5:`3.707`                                                          | :ranking-top-1:`1.089`                                                          | :ranking-med-3:`1.467`                                                          | :ranking-top-2:`1.193`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Eckerle4 2 <http://www.itl.nist.gov/div898/strd/nls/data/eckerle4.shtml>`__     | :ranking-top-1:`1.051`                                                          | :ranking-top-1:`1.085`                                                          | :ranking-top-1:`1.08`                                                           | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.206`                                                          | :ranking-top-1:`1.085`                                                          | :ranking-top-2:`1.197`                                                          | :ranking-top-1:`1.078`                                                          | :ranking-top-2:`1.17`                                                           |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Rat43 1 <http://www.itl.nist.gov/div898/strd/nls/data/rat43.shtml>`__           | :ranking-low-4:`2.505`                                                          | :ranking-med-3:`1.566`                                                          | :ranking-med-3:`1.581`                                                          | :ranking-top-2:`1.123`                                                          | :ranking-top-1:`1.046`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-4:`2.815`                                                          | :ranking-low-5:`4.697`                                                          | :ranking-med-3:`1.453`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Rat43 2 <http://www.itl.nist.gov/div898/strd/nls/data/rat43.shtml>`__           | :ranking-top-1:`1`                                                              | :ranking-low-5:`7.314`                                                          | :ranking-low-5:`5.865`                                                          | :ranking-top-1:`1.037`                                                          | :ranking-top-1:`1.022`                                                          | :ranking-top-2:`1.129`                                                          | :ranking-med-3:`1.712`                                                          | :ranking-low-5:`5.968`                                                          | :ranking-top-1:`1.046`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Bennett5 1 <http://www.itl.nist.gov/div898/strd/nls/data/bennett5.shtml>`__     | :ranking-low-4:`2.741`                                                          | :ranking-low-5:`29.52`                                                          | :ranking-low-4:`2.727`                                                          | :ranking-top-1:`1.004`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`10.99`                                                          | :ranking-top-1:`1.072`                                                          | :ranking-low-5:`9.937`                                                          | :ranking-med-3:`1.599`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Bennett5 2 <http://www.itl.nist.gov/div898/strd/nls/data/bennett5.shtml>`__     | :ranking-top-2:`1.27`                                                           | :ranking-low-5:`24.75`                                                          | :ranking-low-4:`2.849`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.139`                                                          | :ranking-low-5:`11.25`                                                          | :ranking-top-2:`1.218`                                                          | :ranking-low-5:`9.038`                                                          | :ranking-top-2:`1.177`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_nist_lower.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_nist_lower.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d8ddfb08e189fa892e0f21b0de8457f67d33b01a
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_nist_lower.txt
@@ -0,0 +1,39 @@
+
+.. _Minimizers_weighted_comparison_in_terms_of_runtime_nist_lower:
+
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|                                                                                 |BFGS                                                                             |Conjugate gradient (Fletcher-Reeves imp.)                                        |Conjugate gradient (Polak-Ribiere imp.)                                          |Damping                                                                          |Levenberg-Marquardt                                                              |Levenberg-MarquardtMD                                                            |Simplex                                                                          |SteepestDescent                                                                  |Trust Region                                                                     |
++=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+=================================================================================+
+|`Misra1a 1 <http://www.itl.nist.gov/div898/strd/nls/data/misra1a.shtml>`__       | :ranking-low-5:`3.628`                                                          | :ranking-top-2:`1.143`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.005`                                                          | :ranking-top-2:`1.146`                                                          | :ranking-top-1:`1.018`                                                          | :ranking-med-3:`1.428`                                                          | :ranking-low-4:`1.924`                                                          | :ranking-top-2:`1.15`                                                           |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Misra1a 2 <http://www.itl.nist.gov/div898/strd/nls/data/misra1a.shtml>`__       | :ranking-top-1:`1`                                                              | :ranking-med-3:`1.525`                                                          | :ranking-top-1:`1.051`                                                          | :ranking-top-1:`1.054`                                                          | :ranking-top-1:`1.049`                                                          | :ranking-top-1:`1.058`                                                          | :ranking-top-2:`1.288`                                                          | :ranking-low-4:`2.419`                                                          | :ranking-top-2:`1.189`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Chwirut2 1 <http://www.itl.nist.gov/div898/strd/nls/data/chwirut2.shtml>`__     | :ranking-low-5:`3.623`                                                          | :ranking-low-5:`13.04`                                                          | :ranking-low-5:`12.65`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-4:`2.051`                                                          | :ranking-top-1:`1.09`                                                           | :ranking-top-2:`1.272`                                                          | :ranking-low-5:`7.138`                                                          | :ranking-low-4:`2.322`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Chwirut2 2 <http://www.itl.nist.gov/div898/strd/nls/data/chwirut2.shtml>`__     | :ranking-top-2:`1.247`                                                          | :ranking-low-5:`4.151`                                                          | :ranking-low-5:`14.19`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.067`                                                          | :ranking-top-1:`1.011`                                                          | :ranking-med-3:`1.405`                                                          | :ranking-low-5:`7.675`                                                          | :ranking-top-2:`1.166`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Chwirut1 1 <http://www.itl.nist.gov/div898/strd/nls/data/chwirut1.shtml>`__     | :ranking-low-4:`2.651`                                                          | :ranking-low-5:`30.15`                                                          | :ranking-low-5:`28.61`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.322`                                                          | :ranking-top-1:`1.045`                                                          | :ranking-top-2:`1.189`                                                          | :ranking-low-5:`13.2`                                                           | :ranking-low-5:`18.16`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Chwirut1 2 <http://www.itl.nist.gov/div898/strd/nls/data/chwirut1.shtml>`__     | :ranking-med-3:`1.413`                                                          | :ranking-low-5:`41.07`                                                          | :ranking-low-5:`36.49`                                                          | :ranking-top-1:`1.029`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.018`                                                          | :ranking-med-3:`1.453`                                                          | :ranking-low-5:`17.24`                                                          | :ranking-top-2:`1.236`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Lanczos3 1 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos3.shtml>`__     | :ranking-low-5:`3.605`                                                          | :ranking-low-5:`3.162`                                                          | :ranking-low-4:`2.54`                                                           | :ranking-top-1:`1.048`                                                          | :ranking-low-4:`2.752`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-4:`2.125`                                                          | :ranking-low-5:`8.493`                                                          | :ranking-low-4:`2.576`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Lanczos3 2 <http://www.itl.nist.gov/div898/strd/nls/data/lanczos3.shtml>`__     | :ranking-med-3:`1.338`                                                          | :ranking-low-4:`2.545`                                                          | :ranking-low-5:`3.203`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.061`                                                          | :ranking-low-5:`5.59`                                                           | :ranking-low-5:`3.318`                                                          | :ranking-low-5:`9.571`                                                          | :ranking-top-2:`1.18`                                                           |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Gauss1 1 <http://www.itl.nist.gov/div898/strd/nls/data/gauss1.shtml>`__         | :ranking-med-3:`1.521`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.15`                                                           | :ranking-top-2:`1.283`                                                          | :ranking-med-3:`1.518`                                                          | :ranking-med-3:`1.517`                                                          | :ranking-low-5:`6.998`                                                          | :ranking-low-5:`61.43`                                                          | :ranking-low-5:`70.51`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Gauss1 2 <http://www.itl.nist.gov/div898/strd/nls/data/gauss1.shtml>`__         | :ranking-top-2:`1.263`                                                          | :ranking-low-5:`19.64`                                                          | :ranking-low-5:`56.44`                                                          | :ranking-top-2:`1.161`                                                          | :ranking-top-1:`1.022`                                                          | :ranking-top-1:`1`                                                              | :ranking-low-5:`5.12`                                                           | :ranking-low-5:`45.89`                                                          | :ranking-low-5:`52.21`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Gauss2 1 <http://www.itl.nist.gov/div898/strd/nls/data/gauss2.shtml>`__         | :ranking-low-5:`3.714`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.018`                                                          | :ranking-top-2:`1.294`                                                          | :ranking-top-2:`1.323`                                                          | :ranking-med-3:`1.548`                                                          | :ranking-low-5:`6.346`                                                          | :ranking-low-5:`57.34`                                                          | :ranking-low-5:`66.04`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Gauss2 2 <http://www.itl.nist.gov/div898/strd/nls/data/gauss2.shtml>`__         | :ranking-low-4:`2.313`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.256`                                                          | :ranking-top-2:`1.225`                                                          | :ranking-med-3:`1.404`                                                          | :ranking-med-3:`1.4`                                                            | :ranking-low-5:`9.05`                                                           | :ranking-low-5:`60.21`                                                          | :ranking-low-5:`69.86`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`DanWood 1 <http://www.itl.nist.gov/div898/strd/nls/data/danwood.shtml>`__       | :ranking-low-5:`3.447`                                                          | :ranking-low-4:`2`                                                              | :ranking-med-3:`1.365`                                                          | :ranking-top-1:`1.041`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.049`                                                          | :ranking-top-2:`1.113`                                                          | :ranking-low-5:`3.466`                                                          | :ranking-top-1:`1.079`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`DanWood 2 <http://www.itl.nist.gov/div898/strd/nls/data/danwood.shtml>`__       | :ranking-top-1:`1`                                                              | :ranking-top-2:`1.18`                                                           | :ranking-top-2:`1.22`                                                           | :ranking-top-1:`1.013`                                                          | :ranking-top-1:`1.015`                                                          | :ranking-top-1:`1.058`                                                          | :ranking-med-3:`1.547`                                                          | :ranking-low-5:`3.745`                                                          | :ranking-top-1:`1.072`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Misra1b 1 <http://www.itl.nist.gov/div898/strd/nls/data/misra1b.shtml>`__       | :ranking-low-5:`3.045`                                                          | :ranking-top-2:`1.101`                                                          | :ranking-top-1:`1.081`                                                          | :ranking-top-1:`1`                                                              | :ranking-top-1:`1.064`                                                          | :ranking-top-1:`1.005`                                                          | :ranking-med-3:`1.48`                                                           | :ranking-med-3:`1.622`                                                          | :ranking-top-2:`1.193`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+|`Misra1b 2 <http://www.itl.nist.gov/div898/strd/nls/data/misra1b.shtml>`__       | :ranking-top-1:`1.038`                                                          | :ranking-top-1:`1.061`                                                          | :ranking-top-2:`1.14`                                                           | :ranking-med-3:`1.616`                                                          | :ranking-top-1:`1.031`                                                          | :ranking-top-1:`1`                                                              | :ranking-med-3:`1.394`                                                          | :ranking-low-4:`2.065`                                                          | :ranking-top-2:`1.119`                                                          |
++---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+---------------------------------------------------------------------------------+
+
diff --git a/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_summary.txt b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_summary.txt
new file mode 100644
index 0000000000000000000000000000000000000000..dd3b5a85680808853d07a00eb7d210abc87a4a59
--- /dev/null
+++ b/docs/source/concepts/minimizers_comparison/v3.8.0/comparison_weighted_v3.8_runtime_summary.txt
@@ -0,0 +1,14 @@
++-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
+|                                                                                               |BFGS                                                                                           |Conjugate gradient (Fletcher-Reeves imp.)                                                      |Conjugate gradient (Polak-Ribiere imp.)                                                        |Damping                                                                                        |Levenberg-Marquardt                                                                            |Levenberg-MarquardtMD                                                                          |Simplex                                                                                        |SteepestDescent                                                                                |Trust Region                                                                                   |
++===============================================================================================+===============================================================================================+===============================================================================================+===============================================================================================+===============================================================================================+===============================================================================================+===============================================================================================+===============================================================================================+===============================================================================================+===============================================================================================+
+|`NIST, "lower" difficulty <http://www.itl.nist.gov/div898/strd/nls/nls_main.shtml>`__          | :ref:`1.917 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_lower>`                  | :ref:`1.763 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_lower>`                  | :ref:`1.31 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_lower>`                   | :ref:`1.035 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_lower>`                  | :ref:`1.065 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_lower>`                  | :ref:`1.047 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_lower>`                  | :ref:`1.466 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_lower>`                  | :ref:`8.084 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_lower>`                  | :ref:`1.214 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_lower>`                  |
++-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
+|`NIST, "average" difficulty <http://www.itl.nist.gov/div898/strd/nls/nls_main.shtml>`__        | :ref:`2.376 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_average>`                | :ref:`2.513 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_average>`                | :ref:`3.014 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_average>`                | :ref:`1.018 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_average>`                | :ref:`1.256 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_average>`                | :ref:`1.075 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_average>`                | :ref:`2.117 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_average>`                | :ref:`9.286 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_average>`                | :ref:`1.718 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_average>`                |
++-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
+|`NIST, "higher" difficulty <http://www.itl.nist.gov/div898/strd/nls/nls_main.shtml>`__         | :ref:`1.193 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_higher>`                 | :ref:`1.453 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_higher>`                 | :ref:`2.154 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_higher>`                 | :ref:`1.093 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_higher>`                 | :ref:`1.148 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_higher>`                 | :ref:`1.765 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_higher>`                 | :ref:`1.16 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_higher>`                  | :ref:`3.619 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_higher>`                 | :ref:`1.323 <Minimizers_weighted_comparison_in_terms_of_runtime_nist_higher>`                 |
++-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
+|CUTEst                                                                                         | :ref:`3.255 <Minimizers_weighted_comparison_in_terms_of_runtime_cutest>`                      | :ref:`18.66 <Minimizers_weighted_comparison_in_terms_of_runtime_cutest>`                      | :ref:`13.39 <Minimizers_weighted_comparison_in_terms_of_runtime_cutest>`                      | :ref:`1.318 <Minimizers_weighted_comparison_in_terms_of_runtime_cutest>`                      | :ref:`1.829 <Minimizers_weighted_comparison_in_terms_of_runtime_cutest>`                      | :ref:`1 <Minimizers_weighted_comparison_in_terms_of_runtime_cutest>`                          | :ref:`1.695 <Minimizers_weighted_comparison_in_terms_of_runtime_cutest>`                      | :ref:`16.48 <Minimizers_weighted_comparison_in_terms_of_runtime_cutest>`                      | :ref:`12.33 <Minimizers_weighted_comparison_in_terms_of_runtime_cutest>`                      |
++-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
+|Neutron data                                                                                   | :ref:`3.545 <Minimizers_weighted_comparison_in_terms_of_runtime_neutron_data>`                | :ref:`5.796 <Minimizers_weighted_comparison_in_terms_of_runtime_neutron_data>`                | :ref:`5.746 <Minimizers_weighted_comparison_in_terms_of_runtime_neutron_data>`                | :ref:`1 <Minimizers_weighted_comparison_in_terms_of_runtime_neutron_data>`                    | :ref:`1.099 <Minimizers_weighted_comparison_in_terms_of_runtime_neutron_data>`                | :ref:`1.077 <Minimizers_weighted_comparison_in_terms_of_runtime_neutron_data>`                | :ref:`1.715 <Minimizers_weighted_comparison_in_terms_of_runtime_neutron_data>`                | :ref:`4.205 <Minimizers_weighted_comparison_in_terms_of_runtime_neutron_data>`                | :ref:`2.495 <Minimizers_weighted_comparison_in_terms_of_runtime_neutron_data>`                |
++-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+
+
diff --git a/docs/source/fitfunctions/CrystalFieldMultiSpectrum.rst b/docs/source/fitfunctions/CrystalFieldMultiSpectrum.rst
index df077667f2d9e2e661765e591f16e7b9975c40e9..07c515a7a165f32ecc9275961bedd8c3b30389cc 100644
--- a/docs/source/fitfunctions/CrystalFieldMultiSpectrum.rst
+++ b/docs/source/fitfunctions/CrystalFieldMultiSpectrum.rst
@@ -13,8 +13,8 @@ This function calculates multiple spectra of a crystal electric field acting upo
 in Mantid and under active development. More documentation will follow as the development progresses.
 
 Here is an example of how to fit function's parameters to a spectrum. All parameters disallowed by symmetry are fixed automatically.
-Any other parameters that need fixing has to be tied explicitly. Peak centres and intensities are also fixed and computed from the
-field parameters with the :ref:`CrystalFieldPeaks <func-CrystalFieldPeaks>` function. Any other peak parameter can be set using
+Any other parameters that need fixing has to be tied explicitly. Peak centres (in meV) and intensitiaes (in mb/sr) are also fixed and computed 
+from the field parameters with the :ref:`CrystalFieldPeaks <func-CrystalFieldPeaks>` function. Any other peak parameter can be set using
 the "f-index-dot-name" syntax (see :ref:`CompositeFunction <func-CompositeFunction>` for more details).
 
 .. code::
@@ -22,7 +22,7 @@ the "f-index-dot-name" syntax (see :ref:`CompositeFunction <func-CompositeFuncti
 	import numpy as np
 
 	# Build a reference data set
-	fun = 'name=CrystalFieldMultiSpectrum,Ion=Ce,Temperatures=(44, 150),ToleranceIntensity=0.001,B20=0.37737,B22=3.9770,B40=-0.031787,B42=-0.11611,B44=-0.12544'
+	fun = 'name=CrystalFieldMultiSpectrum,Ion=Ce,Temperatures=(44, 150),ToleranceIntensity=0.1,B20=0.37737,B22=3.9770,B40=-0.031787,B42=-0.11611,B44=-0.12544'
 	fun += ',f0.f1.FWHM=1.6,f0.f2.FWHM=2.0,f0.f3.FWHM=2.3,f1.f1.FWHM=1.6,f1.f2.FWHM=2.5,f1.f3.FWHM=3,f1.f4.FWHM=1'
 
 	# This creates a (empty) workspace to use with EvaluateFunction
@@ -35,7 +35,7 @@ the "f-index-dot-name" syntax (see :ref:`CompositeFunction <func-CompositeFuncti
 	EvaluateFunction(fun, InputWorkspace=ws, InputWorkspace_1=ws, OutputWorkspace='data')
 	 
 	# Change parameters slightly and fit to the reference data
-	fun = 'name=CrystalFieldMultiSpectrum,Ion=Ce,Temperatures=(44, 150),ToleranceIntensity=0.001,Symmetry=C2v,B20=0.37,B22=3.9,B40=-0.03,B42=-0.11,B44=-0.12'
+	fun = 'name=CrystalFieldMultiSpectrum,Ion=Ce,Temperatures=(44, 150),ToleranceIntensity=0.1,Symmetry=C2v,B20=0.37,B22=3.9,B40=-0.03,B42=-0.11,B44=-0.12'
 	fun += ',f0.f1.FWHM=2,f0.f2.FWHM=2,f0.f3.FWHM=2,f1.f1.FWHM=2,f1.f2.FWHM=2,f1.f3.FWHM=2,f1.f4.FWHM=2'
 	fun += ',ties=(B60=0,B62=0,B64=0,B66=0,BmolX=0,BmolY=0,BmolZ=0,BextX=0,BextY=0,BextZ=0)'
 
@@ -50,7 +50,7 @@ the "f-index-dot-name" syntax (see :ref:`CompositeFunction <func-CompositeFuncti
    Ion;String;Mandatory;An element name for a rare earth ion. Possible values are: Ce, Pr, Nd, Pm, Sm, Eu, Gd, Tb, Dy, Ho, Er, Tm, Yb.
    Symmetry;String;C1;A symbol for a symmetry group. Setting `Symmetry` automatically zeros and fixes all forbidden parameters. Possible values are: C1, Ci, C2, Cs, C2h, C2v, D2, D2h, C4, S4, C4h, D4, C4v, D2d, D4h, C3, S6, D3, C3v, D3d, C6, C3h, C6h, D6, C6v, D3h, D6h, T, Td, Th, O, Oh
    ToleranceEnergy;Double;:math:`10^{-10}`;Tolerance in energy in meV. If difference between two or more energy levels is smaller than this value they are considered degenerate.
-   ToleranceIntensity;Double;:math:`10^{-3}`;Tolerance in intensity. If difference between intensities of two or more transitions is smaller than this value the transitions are considered degenerate.
+   ToleranceIntensity;Double;:math:`10^{-1}`;Tolerance in intensity (in mb/sr). If difference between intensities of two or more transitions is smaller than this value the transitions are considered degenerate.
    Background;String;FlatBackground;A name of a function to describe the background.
    PeakShape;String;Lorentzian;A name of a function (peak type) to describe the shape of each peak. Currently Lorentzian (default) and Gaussian sre supported.
    Temperatures;List of doubles;[1.0];Temperatures of each spectrum in Kelvin.
diff --git a/docs/source/fitfunctions/CrystalFieldPeaks.rst b/docs/source/fitfunctions/CrystalFieldPeaks.rst
index f48a83a5ff6892dc95640e75c3e1ba52af21d6b0..2b0a6bbd151a53d2bc8bb442adccf0fcb987b913 100644
--- a/docs/source/fitfunctions/CrystalFieldPeaks.rst
+++ b/docs/source/fitfunctions/CrystalFieldPeaks.rst
@@ -12,8 +12,8 @@ Description
 This function calculates energies and intensities of transitions between states of a crystal electric field acting upon a rare earth ion. It is a part of crystal field computation
 in Mantid and under active development. More documentation will follow as the development progresses.
 
-Here is an example of how the function can be evaluated from python. The output is a `TableWorkspace` with two columns: the first column with the energies and the second one with the
-intensities. The function doesn't require an input workspace so `None` is passed for `InputWorkspace` property of `EvaluateFunction`.
+Here is an example of how the function can be evaluated from python. The output is a `TableWorkspace` with two columns: the first column with the energies (in meV) and the second one with the intensities (in milibarn per steradian). 
+The function doesn't require an input workspace so `None` is passed for `InputWorkspace` property of `EvaluateFunction`.
 
 .. code::
 
diff --git a/docs/source/fitfunctions/CrystalFieldSpectrum.rst b/docs/source/fitfunctions/CrystalFieldSpectrum.rst
index 5bb125464f8434e9cdc3f71e8f48a77fad4a8c90..f9a2d1b910f322bbe031d7ce7a534509f618de22 100644
--- a/docs/source/fitfunctions/CrystalFieldSpectrum.rst
+++ b/docs/source/fitfunctions/CrystalFieldSpectrum.rst
@@ -17,6 +17,8 @@ Any other parameters that need fixing has to be tied explicitly. Peak centres an
 field parameters with the :ref:`CrystalFieldPeaks <func-CrystalFieldPeaks>` function. Any other peak parameter can be set using
 the "f-index-dot-name" syntax (see :ref:`CompositeFunction <func-CompositeFunction>` for more details).
 
+The `x`-axis is given in meV, and the intensity (`y`-axis) is in milibarn per steradian per meV.
+
 .. code::
 
     import numpy as np
diff --git a/docs/source/fitfunctions/TeixeiraWaterSQE.rst b/docs/source/fitfunctions/TeixeiraWaterSQE.rst
new file mode 100644
index 0000000000000000000000000000000000000000..b7e2cd64041576d9ed15c02e60eb31f4fb8c09c6
--- /dev/null
+++ b/docs/source/fitfunctions/TeixeiraWaterSQE.rst
@@ -0,0 +1,178 @@
+.. _func-TeixeiraWaterSQE:
+
+================
+TeixeiraWaterSQE
+================
+
+.. index:: TeixeiraWaterSQE
+
+Description
+-----------
+
+This fitting function models the dynamic structure factor
+for a particle undergoing jump diffusion [1]_.
+
+.. math::
+
+   S(Q,E) = Height \cdot \frac{1}{\pi} \frac{\Gamma}{\Gamma^2+(E-Centre)^2}
+
+   \Gamma = \frac{\hbar\cdot DiffCoeff\cdot Q^2}{1+DiffCoeff\cdot Q^2\cdot Tau}
+
+where:
+
+-  :math:`Height` - Intensity scaling, a fit parameter
+-  :math:`DiffCoeff` - diffusion coefficient, a fit parameter
+-  :math:`Centre` - Centre of peak, a fit parameter
+-  :math:`Tau` - Residence time, a fit parameter
+-  :math:`Q` - Momentum transfer, an attribute (non-fitting)
+
+At 298K and 1atm, water has :math:`DiffCoeff=2.30 10^{-5} cm^2/s` and :math:`Tau=1.25 ps`.
+
+A jump length :math:`l` can be associated: :math:`l^2=2N\cdot DiffCoeff\cdot Tau`, where :math:`N` is the
+dimensionality of the diffusion problem (:math:`N=3` for diffusion in a volume).
+
+References
+----------
+
+.. [1] J. Teixeira, M.-C. Bellissent-Funel, S. H. Chen, and A. J. Dianoux. `Phys. Rev. A, 31:1913–1917 <http://dx.doi.org/10.1103/PhysRevA.31.1913>`__
+
+.. properties::
+
+.. attributes::
+
+:math:`Q` (double, default=0.3) Momentum transfer
+
+Usage
+-----
+
+**Example - Global fit to a synthetic signal:**
+
+The signal is modeled by the convolution of a resolution function
+with an elastic signal plus this jump-diffusion model.
+The resolution is modeled as a normal distribution.
+We insert a random noise in the jump-diffusion model.
+Finally, we choose a linear background noise.
+The goal is to find out the residence time and the jump length
+with a fit to the following model:
+
+:math:`S(Q,E) = I \cdot R(Q,E) \otimes [EISF\delta(E) + (1-EISF)\cdot TeixeiraWaterSQE(Q,E)] + (a+bE)`
+
+.. testcode:: ExampleTeixeiraWaterSQE
+
+    from __future__ import (absolute_import, division, print_function)
+    import numpy as np
+    """Generate resolution function with the following properties:
+        1. Gaussian in Energy
+        2. Dynamic range = [-0.1, 0.1] meV with spacing 0.0004 meV
+        3. FWHM = 0.005 meV
+    """
+    dE=0.0004;  FWHM=0.005
+    sigma = FWHM/(2*np.sqrt(2*np.log(2)))
+    dataX = np.arange(-0.1,0.1,dE)
+    nE=len(dataX)
+    rdataY = np.exp(-0.5*(dataX/sigma)**2)  # the resolution function
+    Qs = np.array([0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5, 1.9])  # Q-values
+    nQ = len(Qs)
+    resolution=CreateWorkspace(np.tile(dataX,nQ), np.tile(rdataY,nQ), NSpec=nQ, UnitX="deltaE",
+        VerticalAxisUnit="MomentumTransfer", VerticalAxisValues=Qs)
+    """Generate the signal of a particle undergoing jump diffusion.
+        1. diffusion coefficient = 1.0 * 10^(-5) cm^2/s.
+        2. residence time = 50ps  (make it peaky in the selected dynamic range)
+        3. linear background noise, up to 10% of the inelastic intensity
+        4. Up to 10% of noise in the quasi-elastic signal
+        5. Assume <u^2>=0.8 Angstroms^2 for the Debye-Waller factor
+    """
+    diffCoeff=1.0  # Units are Angstroms^2/ps
+    tau=50.0;  u2=0.8;  hbar=0.658211626  # units of hbar are ps*meV
+    qdataY=np.empty(0)  # will hold all Q-values (all spectra)
+    for Q in Qs:
+        centre=2*dE*(0.5-np.random.random())  # some shift along the energy axis
+        EISF = np.exp(-u2*Q**2)  # Debye Waller factor
+        HWHM = hbar * diffCoeff*Q**2 / (1+diffCoeff*Q**2*tau)
+        dataY = (1-EISF)/np.pi * HWHM/(HWHM**2+(dataX-centre)**2)  # inelastic component
+        dataY = dE*np.convolve(rdataY, dataY, mode="same")  # convolve with resolution
+        dataYmax = max(dataY)  # maximum of the inelastic component
+        dataY += EISF*rdataY  # add elastic component
+        noise = dataY*np.random.random(nE)*0.1 # noise is up to 10% of the signal
+        background = np.random.random()+np.random.random()*dataX # linear background
+        background = 0.1*dataYmax*(background/max(np.abs(background))) # up to 10%
+        dataY += background
+        qdataY=np.append(qdataY, dataY)
+    data=CreateWorkspace(np.tile(dataX,nQ), qdataY, NSpec=nQ, UnitX="deltaE",
+        VerticalAxisUnit="MomentumTransfer", VerticalAxisValues=Qs)
+    """Our model is:
+        S(Q,E) = Convolution(resolution, TeixeiraWaterSQE) + LinearBackground
+        We do a global fit (all spectra) to find out the radius and relaxation times.
+    """
+    # This is the template fitting model for each spectrum (each Q-value):
+    # Our initial guesses are diffCoeff=10 and  tau=10
+    single_model_template="""(composite=Convolution,FixResolution=true,NumDeriv=true;
+    name=TabulatedFunction,Workspace=resolution,WorkspaceIndex=_WI_,Scaling=1,Shift=0,XScaling=1;
+    (name=DeltaFunction,Height=0.5,Centre=0,constraints=(0<Height<1);
+    name=TeixeiraWaterSQE,Q=_Q_,Height=0.5,Tau=10,DiffCoeff=10,Centre=0;
+    ties=(f1.Height=1-f0.Height,f1.Centre=f0.Centre)));
+    name=LinearBackground,A0=0,A1=0"""
+    # Now create the string representation of the global model (all spectra, all Q-values):
+    global_model="composite=MultiDomainFunction,NumDeriv=true;"
+    wi=0  # current workspace index
+    for Q in Qs:
+        single_model = single_model_template.replace("_Q_", str(Q))  # insert Q-value
+        single_model = single_model.replace("_WI_", str(wi))  # insert workspace index
+        global_model += "(composite=CompositeFunction,NumDeriv=true,$domains=i;{0});\n".format(single_model)
+        wi+=1
+    # Parameters DiffCoeff and Tau are the same for all spectra, thus tie them:
+    ties=['='.join(["f{0}.f0.f1.f1.DiffCoeff".format(wi) for wi in reversed(range(nQ))]),
+        '='.join(["f{0}.f0.f1.f1.Tau".format(wi) for wi in reversed(range(nQ))]) ]
+    global_model += "ties=("+','.join(ties)+')'  # insert ties in the global model string
+    # Now relate each domain(i.e. spectrum) to each single model
+    domain_model=dict()
+    for wi in range(nQ):
+        if wi == 0:
+            domain_model.update({"InputWorkspace": data.name(), "WorkspaceIndex": str(wi),
+                "StartX": "-0.09", "EndX": "0.09"})
+        else:
+            domain_model.update({"InputWorkspace_"+str(wi): data.name(), "WorkspaceIndex_"+str(wi): str(wi),
+                "StartX_"+str(wi): "-0.09", "EndX_"+str(wi): "0.09"})
+    # Invoke the Fit algorithm using global_model and domain_model:
+    output_workspace = "glofit_"+data.name()
+    Fit(Function=global_model, Output=output_workspace, CreateOutput=True, MaxIterations=500, **domain_model)
+    # Extract DiffCoeff and Tau from workspace glofit_data_Parameters, the output of Fit:
+    nparms=0
+    parameter_ws = mtd[output_workspace+"_Parameters"]
+    for irow in range(parameter_ws.rowCount()):
+        row = parameter_ws.row(irow)
+        if row["Name"]=="f0.f0.f1.f1.DiffCoeff":
+            DiffCoeff=row["Value"]
+            nparms+=1
+        elif row["Name"]=="f0.f0.f1.f1.Tau":
+            Tau=row["Value"]
+            nparms+=1
+        if nparms==2:
+            break  # We got the three parameters we are interested in
+    # Check nominal and optimal values are within error ranges:
+    DiffCoeff = DiffCoeff/10.0  # change units from 10^{-5}cm^2/s to Angstroms^2/ps
+    if abs(diffCoeff-DiffCoeff)/diffCoeff < 0.1:
+        print("Optimal Length within 10% of nominal value")
+    else:
+        print("Error. Obtained DiffCoeff=",DiffCoeff," instead of",diffCoeff)
+    if abs(tau-Tau)/tau < 0.1:
+        print("Optimal Tau within 10% of nominal value")
+    else:
+        print("Error. Obtained Tau=",Tau," instead of",tau)
+
+Output:
+
+.. testoutput:: ExampleTeixeiraWaterSQE
+
+    Optimal Length within 10% of nominal value
+    Optimal Tau within 10% of nominal value
+
+.. categories::
+
+.. sourcelink::
+
+
+
+
+
+
diff --git a/docs/source/images/SpurionReal.png b/docs/source/images/SpurionReal.png
new file mode 100644
index 0000000000000000000000000000000000000000..f7db9d13b0578d4b4abcdf011c646ba584811978
Binary files /dev/null and b/docs/source/images/SpurionReal.png differ
diff --git a/docs/source/images/release38.png b/docs/source/images/release38.png
new file mode 100644
index 0000000000000000000000000000000000000000..433124b8bd2a1a2a6b0aa0588da0fb3cad0c85fd
Binary files /dev/null and b/docs/source/images/release38.png differ
diff --git a/docs/source/interfaces/CrystalFieldPythonInterface.rst b/docs/source/interfaces/CrystalFieldPythonInterface.rst
index 70e2f964b751d5241508c5ddf97231a67eb3e1af..6f97f4a037396a0aba91d6c59fcebbfec399de40 100644
--- a/docs/source/interfaces/CrystalFieldPythonInterface.rst
+++ b/docs/source/interfaces/CrystalFieldPythonInterface.rst
@@ -85,24 +85,24 @@ Knowing the temperature allows us to calculate a peak list: a list of transition
   
 The output is::
 
- [[  0.00000000e+00   2.44006198e+01   4.24977124e+01   1.80970926e+01  -2.44006198e+01]
-  [  2.72327784e+00   1.10973434e+00   6.33885503e-02   2.15078093e-03   1.77951652e-03]]
+ [[  0.00000000e+00   2.44006198e+01   4.24977124e+01   1.80970926e+01 -2.44006198e+01]
+  [  2.16711565e+02   8.83098530e+01   5.04430056e+00   1.71153708e-01  1.41609425e-01]]
 
-The first row are the energies and the second row are the intensities.
+The first row are the energies (in meV) and the second row are the integrated intensities (in milibarn per steradian).
 
 The number of peaks that the function returns is controlled by two tolerance parameters: `ToleranceEnergy` and
 `ToleranceIntensity`. If a peak has an intensity below the value of `ToleranceIntensity` the peak is ignored.
 It two peaks have a difference in the energies smaller than `ToleranceEnergy` they are combined into a single peak.
 
-If we set `ToleranceIntensity` of the above crystal field object to 1e-2 we'll have only three peaks in the list::
+If we set `ToleranceIntensity` of the above crystal field object to 1 mb/sr we'll have only three peaks in the list::
 
-  cf.ToleranceIntensity = 1e-2
+  cf.ToleranceIntensity = 1
   print cf.getPeakList()
   
 The new output::
 
- [[  0.          24.40061976  42.49771237]
-  [  2.72327784   1.10973434   0.06338855]]
+ [[   0.           24.40061976   42.49771237]
+  [ 216.71156467   88.30985303    5.04430056]]
   
 To calcualte a spectrum we need to define a shape of each peak (peak profile function) and its default width (`FWHM`).
 The width can be set either via a keyword argument or a property with name `FWHM`. If the peak shape isn't set the default
diff --git a/docs/source/interfaces/Muon_Analysis.rst b/docs/source/interfaces/Muon_Analysis.rst
index b3d6751d1c86f03f9bca908073889e5dba53cc3a..987621b1d3ef63c2fb79d2461fe4766c6ebc4a06 100644
--- a/docs/source/interfaces/Muon_Analysis.rst
+++ b/docs/source/interfaces/Muon_Analysis.rst
@@ -148,7 +148,7 @@ Run Information etc.
 
 +-------+--------------------------+-----------------------------------------------------------------------------------------+
 | **1** | **Run Information**      | Information about the loaded run.                                                       |
-|       |                          | See `Run <http://docs.mantidproject.org/nightly/concepts/Run.html#ISIS_Muon_data>`_     |
+|       |                          | See `Run <http://docs.mantidproject.org/nightly/concepts/Run.html#isis-muon-data>`_     |
 |       |                          | for the list of parameters which are looked up in the data files.                       |
 +-------+--------------------------+-----------------------------------------------------------------------------------------+
 | **2** | **Connected plot**       | The name of the workspace produced for the last plot, i.e. "connected" to the interface.|
diff --git a/docs/source/interfaces/Tomographic_Reconstruction.rst b/docs/source/interfaces/Tomographic_Reconstruction.rst
index 05e107dedcc10816cea99d3e0136ca3572e62939..409838f2e0a1088262f6004193f2638df5c14ba2 100644
--- a/docs/source/interfaces/Tomographic_Reconstruction.rst
+++ b/docs/source/interfaces/Tomographic_Reconstruction.rst
@@ -86,7 +86,7 @@ SCARF and some ISIS machines:
 * `TomoPy
   <https://www1.aps.anl.gov/Science/Scientific-Software/TomoPy>`_
 
-* `Astra Toolbox <http://visielab.uantwerpen.be/software>`_ found from
+* `Astra Toolbox <http://visielab.uantwerpen.be/astra-toolbox>`_ found from
   `here <http://sourceforge.net/p/astra-toolbox/wiki/Home/>`_.
 
 References for the Astra Toolbox:
diff --git a/docs/source/release/v3.7.1/sans.rst b/docs/source/release/v3.7.1/sans.rst
index dbf75de17035e062363a23778e9de4c873e7d158..c81895ddf1c21e763cb4970bdbe0ff07a5e819f8 100644
--- a/docs/source/release/v3.7.1/sans.rst
+++ b/docs/source/release/v3.7.1/sans.rst
@@ -16,7 +16,6 @@ Bug Fixes
 - :ref:`Q1D <algm-Q1D>`: Fix incorrect extra length for gravity correction to :math:`(L+L_{extra})^2 - L_{extra}^2`
 - Select the IDF based on the workspace which is being loaded. Previously the IDFs were hardcoded. This solves a bug were the wrong IDF was sometimes used.
 
-|
 
 `Full list of changes on github <http://github.com/mantidproject/mantid/pulls?q=is%3Apr+milestone%3A%22Release+3.7%22+is%3Amerged+label%3A%22Component%3A+SANS%22>`__
 
diff --git a/docs/source/release/v3.8.0/direct_inelastic.rst b/docs/source/release/v3.8.0/direct_inelastic.rst
index 76c0eedbf71c413102db43bb3d9f358a3dac3460..ec36ddbafecf62310f78d7ae9a6b07e0ba9556d2 100644
--- a/docs/source/release/v3.8.0/direct_inelastic.rst
+++ b/docs/source/release/v3.8.0/direct_inelastic.rst
@@ -23,7 +23,7 @@ Improvements
 
 - There is a new algorithm :ref:`MagFormFactorCorrection <algm-MagFormFactorCorrection>` which will scale an input workspace by 1/:math:`|F(Q)|^2` where :math:`F(Q)` is the magnetic form factor for a specified magnetic ion. 
 
-`Full list of changes on GitHub <http://github.com/mantidproject/mantid/pulls?q=is%3Apr+milestone%3A%22Release+3.8%22+is%3Amerged+label%3A%22Component%3A+Direct+Inelastic%22>`_
+
 
 PyChop
 ------
@@ -36,3 +36,14 @@ Crystal Field
 
 - A fitting function was added (:ref:`CrystalFieldMultiSpectrum <func-CrystalFieldMultiSpectrum>`) that fits crystal field parameters to multiple spectra simultaneously.
 - A preliminary python interface to the Crystal Field functionality was added. It includes classes for defining a problem, performing a fit and basic plotting facilities.
+
+MLZ & TOFTOF
+------------
+
+- A workflow gui for TOFTOF data reduction (#17075).
+  The gui is accessible through the ``Interfaces / Direct / DGS Reduction`` menu.
+  The first time the user is presented with a choice of facilites and instruments -
+  choose MLZ / TOFTOF. The choice can be changed later from (any) reduction gui by
+  ``Tools / Change instrument ...``.
+
+`Full list of changes on GitHub <http://github.com/mantidproject/mantid/pulls?q=is%3Apr+milestone%3A%22Release+3.8%22+is%3Amerged+label%3A%22Component%3A+Direct+Inelastic%22>`_
diff --git a/docs/source/release/v3.8.0/framework.rst b/docs/source/release/v3.8.0/framework.rst
index f8fccebd4e91e7bf937b25879631da07a3478371..00700320acbd83685b73a2b34e11fa029ce4df49 100644
--- a/docs/source/release/v3.8.0/framework.rst
+++ b/docs/source/release/v3.8.0/framework.rst
@@ -5,17 +5,6 @@ Framework Changes
 .. contents:: Table of Contents
    :local:
 
-- ``Facilities.xml`` was updated for changes to the SNS live data servers.
-
-- A cmake parameter ``ENABLE_MANTIDPLOT`` (default ``True``) was added to facilitate framework only builds.
-
-- The case search in ``DataService`` has been replaced with a case-insensitive comparison function. Behavior
-  is almost identical, but a small number of cases (such as adding the workspaces ``Z`` and ``z``) will work
-  in a more predictable manner.
-
-- A race condition when accessing a singleton from multiple threads was fixed.
-
-- Log file buffers are no longer flushed by default for each newline received, increasing the speed of some system tests on Windows by 4.5x.
 
 HistogramData
 -------------
@@ -34,6 +23,8 @@ Concepts
   undefined and infinite values and errors will be zeroed.
 - ``Lattice`` : Allow setting a UB matrix with negative determinant (improper rotation)
 
+- ``MultipleFileProperty`` : will now support also ``OptionalLoad`` ``FileAction`` (similar to ``FileProperty``).
+
 Algorithms
 ----------
 
@@ -95,7 +86,7 @@ Improved
 
 - :ref:`FindSXPeaks <algm-FindSXPeaks>`: Fixed a bug where peaks with an incorrect TOF would stored for some intrument geometries.
 
-- :ref: `LoadILL <algm-LoadILL>` was renamed to `LoadILLTOF <algm-LoadILLTOF>` to better reflect what it does. The new algorithm can also handle cases where the monitor IDs are greater than the detector IDs.
+- :ref:`LoadILL <algm-LoadILL>` was renamed to `LoadILLTOF <algm-LoadILLTOF>` to better reflect what it does. The new algorithm can also handle cases where the monitor IDs are greater than the detector IDs.
 
 - :ref:`FFT <algm-FFT>` deals correctly with histogram input data. Internally, it converts to point data, and the output is always a point data workspace. (It can be converted to histogram data using :ref:`ConvertToHistogram <algm-ConvertToHistogram>` if required).
 
@@ -105,8 +96,6 @@ Improved
 
 - :ref:`Mergeruns <algm-MergeRuns>` can now also deal with non-time series sample logs when merging. Behaviour can be to create a time series, a list of values and warn or fail if different.
 
-Deprecated
-##########
 
 MD Algorithms (VATES CLI)
 #########################
@@ -153,29 +142,33 @@ Performance
   In some cases, however, follow-up algorithms may run slower (typically this can happen for algorithms that do in-place modification of data).
   However, the total runtime (sum of the runtimes of the improved *and* the degraded algorithm) should be unchanged in the worst case.
 
+- A race condition when accessing a singleton from multiple threads was fixed.
+
+- Log file buffers are no longer flushed by default for each newline received, increasing the speed of some system tests on Windows by 4.5x.
+
 
 CurveFitting
 ------------
 
-- Added two new minimizers belonging to the trust region family of algorithms: DTRS and More-Sorensen.
+- Added a new minimizer belonging to the trust region family of algorithms developped for Mantid by the SCD
+  Numerical Analysis Group at RAL. It has better performance characteristics compared to the existing
+  minimizers especially when applied to the most difficult fitting problems.
 - Added new property `EvaluationType` to Fit algorithm. If set to "Histogram" and the input dataset 
   is a histogram with large bins it can improve accuracy of the fit.
+- The concept page for :ref:`Comparing fit minimizers <FittingMinimizers>` has been updated to include the new
+  minimizer and a comparison against neutron data examples.
 
-Improved
-########
-
-Interfaces
-----------
+Others
+------
 
-New
-###
+- ``Facilities.xml`` was updated for changes to the SNS live data servers.
 
-- A workflow gui for TOFTOF data reduction (#17075).
-  The gui is accessible through the ``Interfaces / Direct / DGS Reduction`` menu.
-  The first time the user is presented with a choice of facilites and instruments -
-  choose MLZ / TOFTOF. The choice can be changed later from (any) reduction gui by
-  ``Tools / Change instrument ...``.
+- A cmake parameter ``ENABLE_MANTIDPLOT`` (default ``True``) was added to facilitate framework only builds.
 
+- The case search in ``DataService`` has been replaced with a case-insensitive comparison function. Behavior
+  is almost identical, but a small number of cases (such as adding the workspaces ``Z`` and ``z``) will work
+  in a more predictable manner.
+  
 
 Python
 ------
diff --git a/docs/source/release/v3.8.0/index.rst b/docs/source/release/v3.8.0/index.rst
index 1a559521de30f663cd904b30f1c3ea303be66fa2..ebb684ae78d3153fc3c45c04b9560b7e551cf438 100644
--- a/docs/source/release/v3.8.0/index.rst
+++ b/docs/source/release/v3.8.0/index.rst
@@ -2,19 +2,17 @@
 Mantid 3.8.0 Release Notes
 ==========================
 
-.. figure:: ../../images/ReleaseUnderConstruction.jpg
+.. figure:: ../../images/release38.png
    :class: screenshot
-   :width: 550px
+   :width: 500px
    :align: right
 
-   Release image
+   Mantid project saving now includes all features of the visualization windows in Mantid.
 
 .. contents:: Table of Contents
    :local:
 
-.. warning:: This release is still under construction. The changes can be found in the nightly builds on the `download page`_.
-
-**TODO: Add paragraph summarizing big changes**
+We are proud to announce version 3.8 of Mantid, this release contains the much requested improvements to project saving, so now all of the state of your graphs, tables, matrices, event the instrument view, sliceviewer and VSI will reload just as you saved it.
 
 This is just one of many improvements in this release, so please take a
 look at the release notes, which are filled with details of the
@@ -37,7 +35,11 @@ Citation
 
 Please cite any usage of Mantid as follows:
 
-- *Mantid 3.8: Manipulation and Analysis Toolkit for Instrument Data.; Mantid Project*. doi: http://dx.doi.org/10.5286/SOFTWARE/MANTID3.8
+- *O. Arnold, et al., Mantid—Data analysis and visualization package for neutron scattering and μSR experiments, Nuclear Instruments and Methods in Physics Research Section A, Volume 764, 11 November 2014, Pages 156-166,* `doi: 10.1016/j.nima.2014.07.029 <http://dx.doi.org/10.1016/j.nima.2014.07.029>`_
+
+If you want to cite current release please use:
+
+- *Mantid 3.8: Manipulation and Analysis Toolkit for Instrument Data.; Mantid Project*. `doi:10.5286/SOFTWARE/MANTID3.8 <http://dx.doi.org/10.5286/SOFTWARE/MANTID3.8>`_
 
 Changes
 -------
diff --git a/docs/source/release/v3.8.0/reflectometry.rst b/docs/source/release/v3.8.0/reflectometry.rst
index 30fbc6aeb531fcf49c64aea18cc1389f160fd587..f9bf6319c7f30197450bd0cfafba786fe8ce34ab 100644
--- a/docs/source/release/v3.8.0/reflectometry.rst
+++ b/docs/source/release/v3.8.0/reflectometry.rst
@@ -10,6 +10,7 @@ Instrument & IDF
 
 - New CRISP filename format, full name + 8 digits, is now recognised
 - POLREF IDF has been updated
+- OFFSPEC IDF has been updated
 
 ReflectometryReductionOne
 -------------------------
@@ -34,8 +35,6 @@ ISIS Reflectometry (Polref)
 - Global settings have been moved to a separate tab ("Settings")
 - Transfer progress bar no longer gives impression of running when clicked if no runs are selected
 - Updated instrument definition files.
-
-ISIS Reflectometry
-##################
+- Files are now loaded into the interface using LoadISISNexus
 
 `Full list of changes on github <http://github.com/mantidproject/mantid/pulls?q=is%3Apr+milestone%3A%22Release+3.8%22+is%3Amerged+label%3A%22Component%3A+Reflectometry%22>`__
diff --git a/docs/source/release/v3.8.0/sans.rst b/docs/source/release/v3.8.0/sans.rst
index c1b39778a5151a2a7cc8b68429dfb58125aba179..147cc4f94aa9b1806fa77a5f04c63532af2bbccd 100644
--- a/docs/source/release/v3.8.0/sans.rst
+++ b/docs/source/release/v3.8.0/sans.rst
@@ -13,6 +13,7 @@ Features
 - Enable the CanSAS1D algorithms to handle geometry inforamtion.
 - Add sort option to :ref:`CropToComponent <algm-CropToComponent>`
 - Provide warning when users try to use a 2D reduction together with a merged reduction selection.
+- Processing of LOQ M4 in the SANS reduction was added
 - :ref:`UnwrapMonitorsInTOF <algm-UnwrapMonitorsInTOF>` handles the data which was collected beyond the end of a frame.
 
 
diff --git a/docs/source/release/v3.8.0/ui.rst b/docs/source/release/v3.8.0/ui.rst
index f92085210bbbc2da2b3ece6031587959d64dda6c..643059796f7dd6b6033df966e6a9d12aae7fdedc 100644
--- a/docs/source/release/v3.8.0/ui.rst
+++ b/docs/source/release/v3.8.0/ui.rst
@@ -13,9 +13,6 @@ Windows
 
 * IPython has been upgraded to version 3.2.1
 
-OS X
-####
-
 User Interface
 --------------
 
@@ -38,9 +35,6 @@ Plotting Improvements
   - When the option is used for a single workspace, each of the specified spectra will have its own subplot.
 * Using the Label Tool on a plot to add Sample Logs as labels now opens up a dialogue for the selected workspace with all the available Sample Logs listed and the ability to import the selected one onto the plot as a label.
 
-Algorithm Toolbox
-#################
-
 Algorithms
 ##########
 
@@ -56,14 +50,12 @@ Scripting Window
 
  - All `matplotlib` examples now work out of the box when run inside the MantidPlot scripting environment.
 
-
 Progress Reporting
 ##################
 
 - The progress reporting for algorithms has been improved, so that the progress is reported correctly when processing workspace groups or multi-period workspaces.
 - The progress reporting for algorithms has been improved, so that the progress is reported correctly when processin workspace groups or multi-period workspaces.
 
-
 Documentation
 #############
 
@@ -87,7 +79,7 @@ SliceViewer Improvements
 
 VSI Improvements
 ----------------
-* ParaView updated to version 5.1.0
+* ParaView updated to version 5.1.2
 
 Multi-dataset fitting interface improvements
 --------------------------------------------
diff --git a/docs/source/release/v3.9.0/direct_inelastic.rst b/docs/source/release/v3.9.0/direct_inelastic.rst
index 066eea7e94b87270b50476458782e669ba4d9673..f27e4bef5f831945ed45d3f6c21b119de6f83a59 100644
--- a/docs/source/release/v3.9.0/direct_inelastic.rst
+++ b/docs/source/release/v3.9.0/direct_inelastic.rst
@@ -5,5 +5,20 @@ Direct Inelastic Changes
 .. contents:: Table of Contents
    :local:
 
+Improvements
+------------
+
+- New algorithm :ref:`CalculateCountRate <algm-CalculateCountRate>` allows to calculate instrument counting rate as function of the experiment 
+  time to be able to filter spurions, which may sometimes appear on ISIS instruments. It can also be used to evaluate changes
+  of sample reflectivity as function of some slow changing experiment's parameter e.g. temperature, magnetic field or pressure.
+
+
 `Full list of changes on GitHub <http://github.com/mantidproject/mantid/pulls?q=is%3Apr+milestone%3A%22Release+3.9%22+is%3Amerged+label%3A%22Component%3A+Direct+Inelastic%22>`_
 
+New features
+------------
+
+Algorithms
+##########
+
+- A utility algorithm :ref:`WorkflowAlgorithmRunner <algm-WorkflowAlgorithmRunner>` has been added to manage the running of certain data reduction workflows at ILL.
diff --git a/docs/source/release/v3.9.0/framework.rst b/docs/source/release/v3.9.0/framework.rst
index 83fa05432a26e8802a2bb40030c5d1cbe741cbfa..dc82e8d1c3c1b3d8d3d36fe2991f78b769a21717 100644
--- a/docs/source/release/v3.9.0/framework.rst
+++ b/docs/source/release/v3.9.0/framework.rst
@@ -37,6 +37,9 @@ Python
 Python Algorithms
 #################
 
+
+MatchPeaks is a new Python algorithm that transforms a MatrixWorkspace: while keeping the x-values, y-values and e-values can be shifted in order to newly align its peak positions of each spectrum. The algorithm cannot take into account multiple peaks present in single spectrum. It's use is to centre each spectrum or to shift spectra according to peak positions of a compatible, second workspace. Workspaces are compatible by means of number of spectra and bins as well as identical x-values. In particular, this algorithm will be used for data reduction workflow algorithms.
+
 |
 
 Full list of
diff --git a/docs/source/release/v3.9.0/indirect_inelastic.rst b/docs/source/release/v3.9.0/indirect_inelastic.rst
index f14c56f7c591bfb0c6717c71f83626d037bbaa64..df19820de26f49b8a114d37bc88cdda67934cbb9 100644
--- a/docs/source/release/v3.9.0/indirect_inelastic.rst
+++ b/docs/source/release/v3.9.0/indirect_inelastic.rst
@@ -14,6 +14,8 @@ Algorithms
 Data Analysis
 #############
 
+- :ref:`TeixeiraWaterSQE <func-TeixeiraWaterSQE>` models translation of water-like molecules (jump diffusion).
+
 Jump Fit
 ~~~~~~~~
 
diff --git a/docs/source/release/v3.9.0/sans.rst b/docs/source/release/v3.9.0/sans.rst
index 9c26c44177eb7b333b110bf9bec2fd7fe2a5d0f1..d74556b258d35cfd877354e416857271d04e6efd 100644
--- a/docs/source/release/v3.9.0/sans.rst
+++ b/docs/source/release/v3.9.0/sans.rst
@@ -10,4 +10,10 @@ Bug Fixes
 
 |
 
+X uncertainties (delta-Q)
+-------------------------
+
+- X uncertainties (Dx) are now always stored as one value per *bin*, i.e., not as one value per *bin edge*.
+- When loading legacy Nexus files (files with Dx data that were stored with previous Mantid versions) the last Dx value is ignored.
+
 `Full list of changes on github <http://github.com/mantidproject/mantid/pulls?q=is%3Apr+milestone%3A%22Release+3.9%22+is%3Amerged+label%3A%22Component%3A+SANS%22>`__
diff --git a/docs/source/release/v3.9.0/ui.rst b/docs/source/release/v3.9.0/ui.rst
index baea590ba61161fc2260e1791ac00102fcc99cd1..8aa0b1fb0fa903b543349fa228c8e1e8bc3202fa 100644
--- a/docs/source/release/v3.9.0/ui.rst
+++ b/docs/source/release/v3.9.0/ui.rst
@@ -35,6 +35,8 @@ Documentation
 Bugs Resolved
 -------------
 
+- Fixed a bug where checking or unchecking "show invisible workspaces" in View->Preferences->Mantid->Options would have no effect on workspaces loaded in the dock.
+
 SliceViewer Improvements
 ------------------------
 
diff --git a/instrument/LOQ_Definition_20151016.xml b/instrument/LOQ_Definition_20151016.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c9aa54a1288bd7969c5c02d5c334ed426abdd8a6
--- /dev/null
+++ b/instrument/LOQ_Definition_20151016.xml
@@ -0,0 +1,552 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- For help on the notation used to specify an Instrument Definition File 
+     see http://www.mantidproject.org/IDF -->
+<instrument xmlns="http://www.mantidproject.org/IDF/1.0" 
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="http://www.mantidproject.org/IDF/1.0 http://schema.mantidproject.org/IDF/1.0/IDFSchema.xsd"
+ name="LOQ" valid-from   ="2015-10-16 00:00:00"
+                       valid-to     ="2100-10-17 09:29:59"
+		       last-modified="2001-10-16 11:40:00">
+
+  <defaults>
+    <length unit="meter"/>
+    <angle unit="degree"/>
+    <reference-frame>
+      <!-- The z-axis is set parallel to and in the direction of the beam. the 
+           y-axis points up and the coordinate system is right handed. -->
+      <along-beam axis="z"/>
+      <pointing-up axis="y"/>
+      <handedness val="right"/>
+    </reference-frame>
+    <default-view axis-view="z-"/>
+  </defaults>
+
+  
+  <!-- BRIEF DESCRIPTION OF CRISP INSTRUMENT: 
+  
+      Data provided by Richard Heenan.
+      
+      17th Oct 2012: Stephen King noted change to the wiring of
+      the HAB's detector bank. New wiring valid from run 73780 (2012-10-16T11:44:00)
+      (note date for run 73779 is 2012-10-16T11:31:29)
+  -->
+  
+  
+  <!-- LIST OF PHYSICAL COMPONENTS (which the instrument consists of) -->
+  
+  <!-- source and sample-position components -->
+
+  <component type="source">
+    <location />
+  </component>
+  <type name="source" is="Source" />
+  
+  <component type="some-sample-holder">
+    <location z="11.0"/>
+  </component>
+  <type name="some-sample-holder" is="SamplePos" />
+  
+  
+  <!-- detector components (including monitors) -->
+  
+  <component type="monitor1" idlist="monitor1">
+    <location z="6.356" />
+  </component>
+  
+  <type name="monitor1" is="monitor">
+    <percent-transparency val="99.9" />
+    <cuboid id="shape">
+      <left-front-bottom-point x="0.0125" y="-0.0125" z="0.0"  />
+      <left-front-top-point  x="0.0125" y="-0.0125" z="0.005"  />
+      <left-back-bottom-point  x="-0.0125" y="-0.0125" z="0.0"  />
+      <right-front-bottom-point  x="0.0125" y="0.0125" z="0.0"  />
+    </cuboid>
+    <algebra val="shape" />
+  </type>  
+  
+  
+  <component type="aperture1">
+    <location z="6.48"/>
+  </component>
+  <type name="aperture1" />
+  
+ 
+  <component type="monitor2" idlist="monitor2">
+    <location z="10.424" />
+  </component>
+  
+  <type name="monitor2" is="monitor">
+    <percent-transparency val="99.9" />
+    <cuboid id="shape">
+      <left-front-bottom-point x="0.0125" y="-0.0125" z="0.0"  />
+      <left-front-top-point  x="0.0125" y="-0.0125" z="0.005"  />
+      <left-back-bottom-point  x="-0.0125" y="-0.0125" z="0.0"  />
+      <right-front-bottom-point  x="0.0125" y="0.0125" z="0.0"  />
+    </cuboid>
+    <algebra val="shape" />
+  </type> 
+
+ 
+  <component type="aperture2">
+    <location z="10.694"/>
+  </component>
+  <type name="aperture2" />
+  
+  
+  <component type="monitor3" idlist="monitor3">
+    <location z="11.497" />
+  </component>
+  
+  <type name="monitor3" is="monitor">
+    <percent-transparency val="99.9" />
+    <cuboid id="shape">
+      <left-front-bottom-point x="0.0125" y="-0.0125" z="0.0"  />
+      <left-front-top-point  x="0.0125" y="-0.0125" z="0.005"  />
+      <left-back-bottom-point  x="-0.0125" y="-0.0125" z="0.0"  />
+      <right-front-bottom-point  x="0.0125" y="0.0125" z="0.0"  />
+    </cuboid>
+    <algebra val="shape" />
+  </type> 
+
+
+  <component type="monitor4" idlist="monitor4">
+    <location z="15.1" />
+  </component>
+  
+  <type name="monitor4" is="monitor">
+    <percent-transparency val="99.9" />
+    <cuboid id="shape">
+      <left-front-bottom-point x="0.0125" y="-0.0125" z="0.0"  />
+      <left-front-top-point  x="0.0125" y="-0.0125" z="0.005"  />
+      <left-back-bottom-point  x="-0.0125" y="-0.0125" z="0.0"  />
+      <right-front-bottom-point  x="0.0125" y="0.0125" z="0.0"  />
+    </cuboid>
+    <algebra val="shape" />
+  </type> 
+  
+  <component type="main-detector-bank" idstart="3" idfillbyfirst="x" idstepbyrow="128">
+    <location z="15.15" name="main-detector-bank"/>
+  </component>
+ 
+  <type name="main-detector-bank" is="rectangular_detector" type="main-detector-pixel" 
+    xpixels="128" xstart="-0.3136009" xstep="+0.005038"
+    ypixels="128" ystart="-0.3124091" ystep="+0.005041" > <!-- 28/02/11 this for X or YCORR.021 -->
+  </type>
+    
+  <type name="main-detector-pixel" is="detector">
+    <cuboid id="shape"> <!-- 28/02/11 this for X or YCORR.021 -->
+      <left-front-bottom-point x="0.002519" y="-0.0025205" z="0.0"  />
+      <left-front-top-point  x="0.002519" y="-0.0025205" z="0.000005"  />
+      <left-back-bottom-point  x="-0.002519" y="-0.0025205" z="0.0"  />
+      <right-front-bottom-point  x="0.002519" y="0.0025205" z="0.0"  />
+    </cuboid>
+    <algebra val="shape" /> 
+  </type>    
+
+  
+  <component type="HAB" idlist="HAB">
+    <location z="11.58" />
+  </component>   
+  
+  
+  <type name="HAB">
+    <component type="HAB-module">
+      <location />  <!-- right module looking from source to sample-->
+      <location ><facing rot="90.0"/> </location> <!-- bottom module looking from source to sample-->
+      <location ><facing rot="-90.0"/> </location> <!-- top module looking from source to sample-->
+      <location ><facing rot="180.0"/> </location> <!-- left module looking from source to sample-->
+    </component>
+  </type>
+  
+  <type name="HAB-module">
+    <component type="HAB-pixel">
+      <location x=" -0.1140" y=" -0.2460" />
+      <location x=" -0.1260" y=" -0.2460" />
+      <location x=" -0.1380" y=" -0.2460" />
+      <location x=" -0.1500" y=" -0.2460" />
+      <location x=" -0.1620" y=" -0.2460" />
+      <location x=" -0.1740" y=" -0.2460" />
+      <location x=" -0.1860" y=" -0.2460" />
+      <location x=" -0.1980" y=" -0.2460" />
+      <location x=" -0.2100" y=" -0.2460" />
+      <location x=" -0.2220" y=" -0.2460" />
+      <location x=" -0.2340" y=" -0.2460" />
+      <location x=" -0.2460" y=" -0.2460" />
+      <location x=" -0.1140" y=" -0.2340" />
+      <location x=" -0.1260" y=" -0.2340" />
+      <location x=" -0.1380" y=" -0.2340" />
+      <location x=" -0.1500" y=" -0.2340" />
+      <location x=" -0.1620" y=" -0.2340" />
+      <location x=" -0.1740" y=" -0.2340" />
+      <location x=" -0.1860" y=" -0.2340" />
+      <location x=" -0.1980" y=" -0.2340" />
+      <location x=" -0.2100" y=" -0.2340" />
+      <location x=" -0.2220" y=" -0.2340" />
+      <location x=" -0.2340" y=" -0.2340" />
+      <location x=" -0.2460" y=" -0.2340" />
+      <location x=" -0.1140" y=" -0.2220" />
+      <location x=" -0.1260" y=" -0.2220" />
+      <location x=" -0.1380" y=" -0.2220" />
+      <location x=" -0.1500" y=" -0.2220" />
+      <location x=" -0.1620" y=" -0.2220" />
+      <location x=" -0.1740" y=" -0.2220" />
+      <location x=" -0.1860" y=" -0.2220" />
+      <location x=" -0.1980" y=" -0.2220" />
+      <location x=" -0.2100" y=" -0.2220" />
+      <location x=" -0.2220" y=" -0.2220" />
+      <location x=" -0.2340" y=" -0.2220" />
+      <location x=" -0.2460" y=" -0.2220" />
+      <location x=" -0.1140" y=" -0.2100" />
+      <location x=" -0.1260" y=" -0.2100" />
+      <location x=" -0.1380" y=" -0.2100" />
+      <location x=" -0.1500" y=" -0.2100" />
+      <location x=" -0.1620" y=" -0.2100" />
+      <location x=" -0.1740" y=" -0.2100" />
+      <location x=" -0.1860" y=" -0.2100" />
+      <location x=" -0.1980" y=" -0.2100" />
+      <location x=" -0.2100" y=" -0.2100" />
+      <location x=" -0.2220" y=" -0.2100" />
+      <location x=" -0.2340" y=" -0.2100" />
+      <location x=" -0.2460" y=" -0.2100" />
+      <location x=" -0.1140" y=" -0.1980" />
+      <location x=" -0.1260" y=" -0.1980" />
+      <location x=" -0.1380" y=" -0.1980" />
+      <location x=" -0.1500" y=" -0.1980" />
+      <location x=" -0.1620" y=" -0.1980" />
+      <location x=" -0.1740" y=" -0.1980" />
+      <location x=" -0.1860" y=" -0.1980" />
+      <location x=" -0.1980" y=" -0.1980" />
+      <location x=" -0.2100" y=" -0.1980" />
+      <location x=" -0.2220" y=" -0.1980" />
+      <location x=" -0.2340" y=" -0.1980" />
+      <location x=" -0.2460" y=" -0.1980" />
+      <location x=" -0.1140" y=" -0.1860" />
+      <location x=" -0.1260" y=" -0.1860" />
+      <location x=" -0.1380" y=" -0.1860" />
+      <location x=" -0.1500" y=" -0.1860" />
+      <location x=" -0.1620" y=" -0.1860" />
+      <location x=" -0.1740" y=" -0.1860" />
+      <location x=" -0.1860" y=" -0.1860" />
+      <location x=" -0.1980" y=" -0.1860" />
+      <location x=" -0.2100" y=" -0.1860" />
+      <location x=" -0.2220" y=" -0.1860" />
+      <location x=" -0.2340" y=" -0.1860" />
+      <location x=" -0.2460" y=" -0.1860" />
+      <location x=" -0.1140" y=" -0.1740" />
+      <location x=" -0.1260" y=" -0.1740" />
+      <location x=" -0.1380" y=" -0.1740" />
+      <location x=" -0.1500" y=" -0.1740" />
+      <location x=" -0.1620" y=" -0.1740" />
+      <location x=" -0.1740" y=" -0.1740" />
+      <location x=" -0.1860" y=" -0.1740" />
+      <location x=" -0.1980" y=" -0.1740" />
+      <location x=" -0.2100" y=" -0.1740" />
+      <location x=" -0.2220" y=" -0.1740" />
+      <location x=" -0.2340" y=" -0.1740" />
+      <location x=" -0.2460" y=" -0.1740" />
+      <location x=" -0.1140" y=" -0.1620" />
+      <location x=" -0.1260" y=" -0.1620" />
+      <location x=" -0.1380" y=" -0.1620" />
+      <location x=" -0.1500" y=" -0.1620" />
+      <location x=" -0.1620" y=" -0.1620" />
+      <location x=" -0.1740" y=" -0.1620" />
+      <location x=" -0.1860" y=" -0.1620" />
+      <location x=" -0.1980" y=" -0.1620" />
+      <location x=" -0.2100" y=" -0.1620" />
+      <location x=" -0.2220" y=" -0.1620" />
+      <location x=" -0.2340" y=" -0.1620" />
+      <location x=" -0.2460" y=" -0.1620" />
+      <location x=" -0.1140" y=" -0.1500" />
+      <location x=" -0.1260" y=" -0.1500" />
+      <location x=" -0.1380" y=" -0.1500" />
+      <location x=" -0.1500" y=" -0.1500" />
+      <location x=" -0.1620" y=" -0.1500" />
+      <location x=" -0.1740" y=" -0.1500" />
+      <location x=" -0.1860" y=" -0.1500" />
+      <location x=" -0.1980" y=" -0.1500" />
+      <location x=" -0.2100" y=" -0.1500" />
+      <location x=" -0.2220" y=" -0.1500" />
+      <location x=" -0.2340" y=" -0.1500" />
+      <location x=" -0.2460" y=" -0.1500" />
+      <location x=" -0.1140" y=" -0.1380" />
+      <location x=" -0.1260" y=" -0.1380" />
+      <location x=" -0.1380" y=" -0.1380" />
+      <location x=" -0.1500" y=" -0.1380" />
+      <location x=" -0.1620" y=" -0.1380" />
+      <location x=" -0.1740" y=" -0.1380" />
+      <location x=" -0.1860" y=" -0.1380" />
+      <location x=" -0.1980" y=" -0.1380" />
+      <location x=" -0.2100" y=" -0.1380" />
+      <location x=" -0.2220" y=" -0.1380" />
+      <location x=" -0.2340" y=" -0.1380" />
+      <location x=" -0.2460" y=" -0.1380" />
+      <location x=" -0.1140" y=" -0.1260" />
+      <location x=" -0.1260" y=" -0.1260" />
+      <location x=" -0.1380" y=" -0.1260" />
+      <location x=" -0.1500" y=" -0.1260" />
+      <location x=" -0.1620" y=" -0.1260" />
+      <location x=" -0.1740" y=" -0.1260" />
+      <location x=" -0.1860" y=" -0.1260" />
+      <location x=" -0.1980" y=" -0.1260" />
+      <location x=" -0.2100" y=" -0.1260" />
+      <location x=" -0.2220" y=" -0.1260" />
+      <location x=" -0.2340" y=" -0.1260" />
+      <location x=" -0.2460" y=" -0.1260" />
+      <location x=" -0.1140" y=" -0.1140" />
+      <location x=" -0.1260" y=" -0.1140" />
+      <location x=" -0.1380" y=" -0.1140" />
+      <location x=" -0.1500" y=" -0.1140" />
+      <location x=" -0.1620" y=" -0.1140" />
+      <location x=" -0.1740" y=" -0.1140" />
+      <location x=" -0.1860" y=" -0.1140" />
+      <location x=" -0.1980" y=" -0.1140" />
+      <location x=" -0.2100" y=" -0.1140" />
+      <location x=" -0.2220" y=" -0.1140" />
+      <location x=" -0.2340" y=" -0.1140" />
+      <location x=" -0.2460" y=" -0.1140" />
+      <location x=" -0.1140" y=" -0.1020" />
+      <location x=" -0.1260" y=" -0.1020" />
+      <location x=" -0.1380" y=" -0.1020" />
+      <location x=" -0.1500" y=" -0.1020" />
+      <location x=" -0.1620" y=" -0.1020" />
+      <location x=" -0.1740" y=" -0.1020" />
+      <location x=" -0.1860" y=" -0.1020" />
+      <location x=" -0.1980" y=" -0.1020" />
+      <location x=" -0.2100" y=" -0.1020" />
+      <location x=" -0.2220" y=" -0.1020" />
+      <location x=" -0.2340" y=" -0.1020" />
+      <location x=" -0.2460" y=" -0.1020" />
+      <location x=" -0.1140" y=" -0.0900" />
+      <location x=" -0.1260" y=" -0.0900" />
+      <location x=" -0.1380" y=" -0.0900" />
+      <location x=" -0.1500" y=" -0.0900" />
+      <location x=" -0.1620" y=" -0.0900" />
+      <location x=" -0.1740" y=" -0.0900" />
+      <location x=" -0.1860" y=" -0.0900" />
+      <location x=" -0.1980" y=" -0.0900" />
+      <location x=" -0.2100" y=" -0.0900" />
+      <location x=" -0.2220" y=" -0.0900" />
+      <location x=" -0.2340" y=" -0.0900" />
+      <location x=" -0.2460" y=" -0.0900" />
+      <location x=" -0.1140" y=" -0.0780" />
+      <location x=" -0.1260" y=" -0.0780" />
+      <location x=" -0.1380" y=" -0.0780" />
+      <location x=" -0.1500" y=" -0.0780" />
+      <location x=" -0.1620" y=" -0.0780" />
+      <location x=" -0.1740" y=" -0.0780" />
+      <location x=" -0.1860" y=" -0.0780" />
+      <location x=" -0.1980" y=" -0.0780" />
+      <location x=" -0.2100" y=" -0.0780" />
+      <location x=" -0.2220" y=" -0.0780" />
+      <location x=" -0.2340" y=" -0.0780" />
+      <location x=" -0.2460" y=" -0.0780" />
+      <location x=" -0.1140" y=" -0.0660" />
+      <location x=" -0.1260" y=" -0.0660" />
+      <location x=" -0.1380" y=" -0.0660" />
+      <location x=" -0.1500" y=" -0.0660" />
+      <location x=" -0.1620" y=" -0.0660" />
+      <location x=" -0.1740" y=" -0.0660" />
+      <location x=" -0.1860" y=" -0.0660" />
+      <location x=" -0.1980" y=" -0.0660" />
+      <location x=" -0.2100" y=" -0.0660" />
+      <location x=" -0.2220" y=" -0.0660" />
+      <location x=" -0.2340" y=" -0.0660" />
+      <location x=" -0.2460" y=" -0.0660" />
+      <location x=" -0.1140" y=" -0.0540" />
+      <location x=" -0.1260" y=" -0.0540" />
+      <location x=" -0.1380" y=" -0.0540" />
+      <location x=" -0.1500" y=" -0.0540" />
+      <location x=" -0.1620" y=" -0.0540" />
+      <location x=" -0.1740" y=" -0.0540" />
+      <location x=" -0.1860" y=" -0.0540" />
+      <location x=" -0.1980" y=" -0.0540" />
+      <location x=" -0.2100" y=" -0.0540" />
+      <location x=" -0.2220" y=" -0.0540" />
+      <location x=" -0.2340" y=" -0.0540" />
+      <location x=" -0.2460" y=" -0.0540" />
+      <location x=" -0.1140" y=" -0.0420" />
+      <location x=" -0.1260" y=" -0.0420" />
+      <location x=" -0.1380" y=" -0.0420" />
+      <location x=" -0.1500" y=" -0.0420" />
+      <location x=" -0.1620" y=" -0.0420" />
+      <location x=" -0.1740" y=" -0.0420" />
+      <location x=" -0.1860" y=" -0.0420" />
+      <location x=" -0.1980" y=" -0.0420" />
+      <location x=" -0.2100" y=" -0.0420" />
+      <location x=" -0.2220" y=" -0.0420" />
+      <location x=" -0.2340" y=" -0.0420" />
+      <location x=" -0.2460" y=" -0.0420" />
+      <location x=" -0.1140" y=" -0.0300" />
+      <location x=" -0.1260" y=" -0.0300" />
+      <location x=" -0.1380" y=" -0.0300" />
+      <location x=" -0.1500" y=" -0.0300" />
+      <location x=" -0.1620" y=" -0.0300" />
+      <location x=" -0.1740" y=" -0.0300" />
+      <location x=" -0.1860" y=" -0.0300" />
+      <location x=" -0.1980" y=" -0.0300" />
+      <location x=" -0.2100" y=" -0.0300" />
+      <location x=" -0.2220" y=" -0.0300" />
+      <location x=" -0.2340" y=" -0.0300" />
+      <location x=" -0.2460" y=" -0.0300" />
+      <location x=" -0.1140" y=" -0.0180" />
+      <location x=" -0.1260" y=" -0.0180" />
+      <location x=" -0.1380" y=" -0.0180" />
+      <location x=" -0.1500" y=" -0.0180" />
+      <location x=" -0.1620" y=" -0.0180" />
+      <location x=" -0.1740" y=" -0.0180" />
+      <location x=" -0.1860" y=" -0.0180" />
+      <location x=" -0.1980" y=" -0.0180" />
+      <location x=" -0.2100" y=" -0.0180" />
+      <location x=" -0.2220" y=" -0.0180" />
+      <location x=" -0.2340" y=" -0.0180" />
+      <location x=" -0.2460" y=" -0.0180" />
+      <location x=" -0.1140" y=" -0.0060" />
+      <location x=" -0.1260" y=" -0.0060" />
+      <location x=" -0.1380" y=" -0.0060" />
+      <location x=" -0.1500" y=" -0.0060" />
+      <location x=" -0.1620" y=" -0.0060" />
+      <location x=" -0.1740" y=" -0.0060" />
+      <location x=" -0.1860" y=" -0.0060" />
+      <location x=" -0.1980" y=" -0.0060" />
+      <location x=" -0.2100" y=" -0.0060" />
+      <location x=" -0.2220" y=" -0.0060" />
+      <location x=" -0.2340" y=" -0.0060" />
+      <location x=" -0.2460" y=" -0.0060" />
+      <location x=" -0.1140" y="  0.0060" />
+      <location x=" -0.1260" y="  0.0060" />
+      <location x=" -0.1380" y="  0.0060" />
+      <location x=" -0.1500" y="  0.0060" />
+      <location x=" -0.1620" y="  0.0060" />
+      <location x=" -0.1740" y="  0.0060" />
+      <location x=" -0.1860" y="  0.0060" />
+      <location x=" -0.1980" y="  0.0060" />
+      <location x=" -0.2100" y="  0.0060" />
+      <location x=" -0.2220" y="  0.0060" />
+      <location x=" -0.2340" y="  0.0060" />
+      <location x=" -0.2460" y="  0.0060" />
+      <location x=" -0.1140" y="  0.0180" />
+      <location x=" -0.1260" y="  0.0180" />
+      <location x=" -0.1380" y="  0.0180" />
+      <location x=" -0.1500" y="  0.0180" />
+      <location x=" -0.1620" y="  0.0180" />
+      <location x=" -0.1740" y="  0.0180" />
+      <location x=" -0.1860" y="  0.0180" />
+      <location x=" -0.1980" y="  0.0180" />
+      <location x=" -0.2100" y="  0.0180" />
+      <location x=" -0.2220" y="  0.0180" />
+      <location x=" -0.2340" y="  0.0180" />
+      <location x=" -0.2460" y="  0.0180" />
+      <location x=" -0.1140" y="  0.0300" />
+      <location x=" -0.1260" y="  0.0300" />
+      <location x=" -0.1380" y="  0.0300" />
+      <location x=" -0.1500" y="  0.0300" />
+      <location x=" -0.1620" y="  0.0300" />
+      <location x=" -0.1740" y="  0.0300" />
+      <location x=" -0.1860" y="  0.0300" />
+      <location x=" -0.1980" y="  0.0300" />
+      <location x=" -0.2100" y="  0.0300" />
+      <location x=" -0.2220" y="  0.0300" />
+      <location x=" -0.2340" y="  0.0300" />
+      <location x=" -0.2460" y="  0.0300" />
+      <location x=" -0.1140" y="  0.0420" />
+      <location x=" -0.1260" y="  0.0420" />
+      <location x=" -0.1380" y="  0.0420" />
+      <location x=" -0.1500" y="  0.0420" />
+      <location x=" -0.1620" y="  0.0420" />
+      <location x=" -0.1740" y="  0.0420" />
+      <location x=" -0.1860" y="  0.0420" />
+      <location x=" -0.1980" y="  0.0420" />
+      <location x=" -0.2100" y="  0.0420" />
+      <location x=" -0.2220" y="  0.0420" />
+      <location x=" -0.2340" y="  0.0420" />
+      <location x=" -0.2460" y="  0.0420" />
+      <location x=" -0.1140" y="  0.0540" />
+      <location x=" -0.1260" y="  0.0540" />
+      <location x=" -0.1380" y="  0.0540" />
+      <location x=" -0.1500" y="  0.0540" />
+      <location x=" -0.1620" y="  0.0540" />
+      <location x=" -0.1740" y="  0.0540" />
+      <location x=" -0.1860" y="  0.0540" />
+      <location x=" -0.1980" y="  0.0540" />
+      <location x=" -0.2100" y="  0.0540" />
+      <location x=" -0.2220" y="  0.0540" />
+      <location x=" -0.2340" y="  0.0540" />
+      <location x=" -0.2460" y="  0.0540" />
+      <location x=" -0.1140" y="  0.0660" />
+      <location x=" -0.1260" y="  0.0660" />
+      <location x=" -0.1380" y="  0.0660" />
+      <location x=" -0.1500" y="  0.0660" />
+      <location x=" -0.1620" y="  0.0660" />
+      <location x=" -0.1740" y="  0.0660" />
+      <location x=" -0.1860" y="  0.0660" />
+      <location x=" -0.1980" y="  0.0660" />
+      <location x=" -0.2100" y="  0.0660" />
+      <location x=" -0.2220" y="  0.0660" />
+      <location x=" -0.2340" y="  0.0660" />
+      <location x=" -0.2460" y="  0.0660" />
+      <location x=" -0.1140" y="  0.0780" />
+      <location x=" -0.1260" y="  0.0780" />
+      <location x=" -0.1380" y="  0.0780" />
+      <location x=" -0.1500" y="  0.0780" />
+      <location x=" -0.1620" y="  0.0780" />
+      <location x=" -0.1740" y="  0.0780" />
+      <location x=" -0.1860" y="  0.0780" />
+      <location x=" -0.1980" y="  0.0780" />
+      <location x=" -0.2100" y="  0.0780" />
+      <location x=" -0.2220" y="  0.0780" />
+      <location x=" -0.2340" y="  0.0780" />
+      <location x=" -0.2460" y="  0.0780" />
+      <location x=" -0.1140" y="  0.0900" />
+      <location x=" -0.1260" y="  0.0900" />
+      <location x=" -0.1380" y="  0.0900" />
+      <location x=" -0.1500" y="  0.0900" />
+      <location x=" -0.1620" y="  0.0900" />
+      <location x=" -0.1740" y="  0.0900" />
+      <location x=" -0.1860" y="  0.0900" />
+      <location x=" -0.1980" y="  0.0900" />
+      <location x=" -0.2100" y="  0.0900" />
+      <location x=" -0.2220" y="  0.0900" />
+      <location x=" -0.2340" y="  0.0900" />
+      <location x=" -0.2460" y="  0.0900" />
+    </component>  
+  </type>
+  
+  
+  <type name="HAB-pixel" is="detector">
+    <cuboid id="shape">
+      <left-front-bottom-point x="0.006" y="-0.006" z="0.0"  />
+      <left-front-top-point  x="0.006" y="-0.006" z="0.00001"  />
+      <left-back-bottom-point  x="-0.006" y="-0.006" z="0.0"  />
+      <right-front-bottom-point  x="0.006" y="0.006" z="0.0"  />
+    </cuboid>
+    <algebra val="shape" /> 
+  </type>    
+  
+  
+  <!-- DETECTOR and MONITOR ID LISTS -->
+
+  <idlist idname="monitor1">
+    <id val="1" />  
+  </idlist>
+  
+  <idlist idname="monitor2">
+    <id val="2" />  
+  </idlist>
+  
+  <idlist idname="monitor3">
+    <id val="17787" />  
+  </idlist>
+
+  <idlist idname="monitor4">
+    <id val="17788" />  
+  </idlist>
+  
+  <idlist idname="HAB">
+    <id start="16387" end="16734" />
+    <id start="17087" end="17434" />    
+    <id start="16737" end="17084" />
+    <id start="17437" end="17784" />
+  </idlist>  
+
+
+</instrument>
diff --git a/instrument/LOQ_Parameters_M4.xml b/instrument/LOQ_Parameters_M4.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bf2e1570034a43f8ba8fb0ce8fca1e2942cf2eea
--- /dev/null
+++ b/instrument/LOQ_Parameters_M4.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<parameter-file instrument = "LOQ" valid-from = "2015-10-16 00:00:00">
+
+<component-link name = "LOQ">
+
+<parameter name="low-angle-detector-name" type="string">
+  <value val="main-detector-bank"/>
+</parameter>
+
+<parameter name="low-angle-detector-short-name" type="string">
+  <value val="main"/>
+</parameter>
+<!-- this is the first spectrum number for an empty instrument (used for instrument view), runs generally have a different first number spectrum number-->
+<parameter name="first-low-angle-spec-number">
+  <value val="3"/>
+</parameter>
+<parameter name="low-angle-detector-num-columns">
+  <value val="128"/>
+</parameter>
+
+<parameter name="low-angle-detector-num-rows">
+  <value val="128"/>
+</parameter>
+
+<parameter name="high-angle-detector-name" type="string">
+  <value val="HAB"/>
+</parameter>
+
+<parameter name="high-angle-detector-short-name" type="string">
+  <value val="HAB"/>
+</parameter>
+
+<parameter name="centre-finder-step-size">
+<!-- this is the initial step for the beam centre finder in metres -->
+  <value val="0.001"/>
+</parameter>
+
+<!-- the following few lines respond to the hole in LOQs front detector -->
+<parameter name="high-angle-detector-non-rectangle-height">
+  <value val="128"/>
+</parameter>
+
+<parameter name="high-angle-detector-non-rectangle-width">
+  <value val="128"/>
+</parameter>
+<parameter name="high-angle-detector-num-pixels">
+  <value val="1406"/>
+</parameter>
+
+<parameter name="default-incident-monitor-spectrum">
+  <value val="2"/>
+</parameter>
+
+<!-- The M4 monitor is the default transmission monitor spectrum-->
+<parameter name="default-transmission-monitor-spectrum">
+  <value val="17788"/>
+</parameter>
+
+<parameter name="collimation-length-correction">
+  <!-- This is a correction length in meter for the L1 value to obtain the default collimation length-->
+  <value val="6.480"/>
+</parameter>
+
+</component-link>
+
+</parameter-file>
diff --git a/instrument/LOQ_trans_Definition_M4.xml b/instrument/LOQ_trans_Definition_M4.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d83e24277e98bfb022d07272a2a7e649004da41b
--- /dev/null
+++ b/instrument/LOQ_trans_Definition_M4.xml
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- For help on the notation used to specify an Instrument Definition File 
+     see http://www.mantidproject.org/IDF -->
+<instrument xmlns="http://www.mantidproject.org/IDF/1.0" 
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="http://www.mantidproject.org/IDF/1.0 http://schema.mantidproject.org/IDF/1.0/IDFSchema.xsd"
+ name="LOQ" valid-from   ="2015-10-16 00:00:00"
+                       valid-to     ="2100-01-31 23:59:59"
+		       last-modified="2009-03-10 00:00:00">
+
+  <defaults>
+    <length unit="meter"/>
+    <angle unit="degree"/>
+    <reference-frame>
+      <!-- The z-axis is set parallel to and in the direction of the beam. the 
+           y-axis points up and the coordinate system is right handed. -->
+      <along-beam axis="z"/>
+      <pointing-up axis="y"/>
+      <handedness val="right"/>
+    </reference-frame>
+  </defaults>
+
+  
+  <!-- BRIEF DESCRIPTION OF CRISP INSTRUMENT: 
+  
+      Data provided by Richard Heenan. This is for the TRANS configuration.
+  -->
+  
+  
+  <!-- LIST OF PHYSICAL COMPONENTS (which the instrument consists of) -->
+  
+  <!-- source and sample-position components -->
+
+  <component type="source">
+    <location />
+  </component>
+  <type name="source" is="Source" />
+  
+  <component type="some-sample-holder">
+    <location z="11.0"/>
+  </component>
+  <type name="some-sample-holder" is="SamplePos" />
+  
+  
+  <!-- detector components (including monitors) -->
+  
+  <component type="monitor1" idlist="monitor1">
+    <location z="6.356" />
+  </component>
+  
+  <type name="monitor1" is="monitor">
+    <percent-transparency val="99.9" />
+    <cuboid id="shape">
+      <left-front-bottom-point x="0.0125" y="-0.0125" z="0.0"  />
+      <left-front-top-point  x="0.0125" y="-0.0125" z="0.005"  />
+      <left-back-bottom-point  x="-0.0125" y="-0.0125" z="0.0"  />
+      <right-front-bottom-point  x="0.0125" y="0.0125" z="0.0"  />
+    </cuboid>
+    <algebra val="shape" />
+  </type>  
+  
+  
+  <component type="aperture1">
+    <location z="6.48"/>
+  </component>
+  <type name="aperture1" />
+  
+ 
+  <component type="monitor2" idlist="monitor2">
+    <location z="10.424" />
+  </component>
+  
+  <type name="monitor2" is="monitor">
+    <percent-transparency val="99.9" />
+    <cuboid id="shape">
+      <left-front-bottom-point x="0.0125" y="-0.0125" z="0.0"  />
+      <left-front-top-point  x="0.0125" y="-0.0125" z="0.005"  />
+      <left-back-bottom-point  x="-0.0125" y="-0.0125" z="0.0"  />
+      <right-front-bottom-point  x="0.0125" y="0.0125" z="0.0"  />
+    </cuboid>
+    <algebra val="shape" />
+  </type> 
+
+  
+  <component type="aperture2">
+    <location z="10.694"/>
+  </component>
+  <type name="aperture2" />
+  
+  
+  <component type="monitor3" idlist="monitor3">
+    <location z="11.497" />
+  </component>
+  
+  <type name="monitor3" is="monitor">
+    <cuboid id="shape">
+      <left-front-bottom-point x="0.015" y="-0.03" z="0.0"  />
+      <left-front-top-point  x="0.015" y="-0.03" z="0.005"  />
+      <left-back-bottom-point  x="-0.015" y="-0.03" z="0.0"  />
+      <right-front-bottom-point  x="0.015" y="0.03" z="0.0"  />
+    </cuboid>
+    <algebra val="shape" />
+  </type>  
+
+  <component type="monitor4" idlist="monitor4">
+    <location z="15.1" />
+  </component>
+  
+  <type name="monitor4" is="monitor">
+    <percent-transparency val="99.9" />
+    <cuboid id="shape">
+      <left-front-bottom-point x="0.0125" y="-0.0125" z="0.0"  />
+      <left-front-top-point  x="0.0125" y="-0.0125" z="0.005"  />
+      <left-back-bottom-point  x="-0.0125" y="-0.0125" z="0.0"  />
+      <right-front-bottom-point  x="0.0125" y="0.0125" z="0.0"  />
+    </cuboid>
+    <algebra val="shape" />
+  </type> 
+
+  <!-- DETECTOR and MONITOR ID LISTS -->
+
+  <idlist idname="monitor1">
+    <id val="1" />  
+  </idlist>
+  
+  <idlist idname="monitor2">
+    <id val="2" />  
+  </idlist>
+
+  <idlist idname="monitor3">
+    <id val="3" />  
+  </idlist>
+
+  <idlist idname="monitor4">
+    <id val="17788" />  
+  </idlist>
+</instrument>
diff --git a/instrument/OFFSPEC_Definition.xml b/instrument/OFFSPEC_Definition.xml
index df38941826ecd1fd0df692234123fcd2bc9c00f2..93c11222f1afc1c68bc060a39a54443cf6fb6acb 100644
--- a/instrument/OFFSPEC_Definition.xml
+++ b/instrument/OFFSPEC_Definition.xml
@@ -5,7 +5,7 @@
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.mantidproject.org/IDF/1.0 http://schema.mantidproject.org/IDF/1.0/IDFSchema.xsd"
  name="OFFSPEC" valid-from   ="2012-01-02 00:00:00"
-                           valid-to     ="2012-01-02 23:59:59"
+                           valid-to     ="2115-01-02 23:59:59"
 		           last-modified="2015-10-10 15:00:00">
 
   <defaults>
@@ -109,7 +109,7 @@
      <location  z=" 3.52 " />
    </component>
    <component type="WLSFDetector">
-     <location  z=" 3.46 " />
+     <location  z=" 3.62 " />
    </component>
   </type>
 
@@ -688,19 +688,20 @@
    <locations y="-0.19975" y-end="0.18425" n-elements="768" />
    <locations y="-0.200" y-end="0.184" n-elements="768" />
    <locations y="-0.19775" y-end="0.18225" n-elements="768" />
+   <locations y="-0.202325" y-end="0.186145" n-elements="768" />
 -->
   <type name="WLSFDetector">
  <component type="wlsfpixel">
-   <locations y="-0.200" y-end="0.184" n-elements="768" />
+   <locations y="-0.2074" y-end="0.190808" n-elements="768" />
  </component>
  </type>
  
   <type name="wlsfpixel" is="detector">
     <cuboid id="shape">
-      <left-front-bottom-point x="-0.025" y="-0.00025" z="0.0"  />
-      <left-front-top-point  x="-0.025" y="0.00025" z="0.0"  />
-      <left-back-bottom-point  x="-0.025" y="-0.00025" z="0.05"  />
-      <right-front-bottom-point  x="0.025" y="-0.00025" z="0.0"  />
+      <left-front-bottom-point x="-0.025" y="-0.00025925" z="0.0"  />
+      <left-front-top-point  x="-0.025" y="0.00025925" z="0.0"  />
+      <left-back-bottom-point  x="-0.025" y="-0.00025925" z="0.05"  />
+      <right-front-bottom-point  x="0.025" y="-0.00025925" z="0.0"  />
     </cuboid>
     <algebra val="shape" />
   </type>    
diff --git a/scripts/Inelastic/CrystalField/fitting.py b/scripts/Inelastic/CrystalField/fitting.py
index 5a2640e0ce94c225ec3daf4a7eb655372218650b..196209b4ffe4abe7b1e5414177eb6364dbe796e4 100644
--- a/scripts/Inelastic/CrystalField/fitting.py
+++ b/scripts/Inelastic/CrystalField/fitting.py
@@ -110,7 +110,7 @@ class CrystalField(object):
         self._ion = Ion
         self._symmetry = Symmetry
         self._toleranceEnergy = 1e-10
-        self._toleranceIntensity = 1e-3
+        self._toleranceIntensity = 1e-1
         self._fieldParameters = {}
         self._fieldTies = {}
         self._fieldConstraints = []
diff --git a/scripts/Inelastic/IndirectCommon.py b/scripts/Inelastic/IndirectCommon.py
index ed75f3d135be77b287f98012d023b4a582d785e7..06fdf6efc724384fd35ec9ed6381d256332926fd 100644
--- a/scripts/Inelastic/IndirectCommon.py
+++ b/scripts/Inelastic/IndirectCommon.py
@@ -1,4 +1,7 @@
-#pylint: disable=invalid-name
+#pylint: disable=invalid-name,redefined-builtin
+from __future__ import (absolute_import, division, print_function)
+from six.moves import range
+
 import mantid.simpleapi as s_api
 from mantid import config, logger
 
@@ -419,7 +422,7 @@ def plotSpectra(ws, y_axis_title, indicies=None):
 
     if len(indicies) == 0:
         num_spectra = s_api.mtd[ws].getNumberHistograms()
-        indicies = range(num_spectra)
+        indicies = list(range(num_spectra))
 
     try:
         mtd_plot = import_mantidplot()
@@ -506,14 +509,14 @@ def transposeFitParametersTable(params_table, output_table=None):
     # Create columns with parameter names for headers
     column_names = ['.'.join(name.split('.')[1:]) for name in param_names[:num_params]]
     column_error_names = [name + '_Err' for name in column_names]
-    column_names = zip(column_names, column_error_names)
+    column_names = list(zip(column_names, column_error_names))
     table_ws.addColumn('double', 'axis-1')
     for name, error_name in column_names:
         table_ws.addColumn('double', name)
         table_ws.addColumn('double', error_name)
 
     # Output parameter values to table row
-    for i in xrange(0, params_table.rowCount() - 1, num_params):
+    for i in range(0, params_table.rowCount() - 1, num_params):
         row_values = param_values[i:i + num_params]
         row_errors = param_errors[i:i + num_params]
         row = [value for pair in zip(row_values, row_errors) for value in pair]
diff --git a/scripts/LargeScaleStructures/data_stitching.py b/scripts/LargeScaleStructures/data_stitching.py
index 613064bc625c9e028eb85a3fc3e35b2d1f25f002..8e67fa3a20fd36fe691ea4dc2653e9f757729f69 100644
--- a/scripts/LargeScaleStructures/data_stitching.py
+++ b/scripts/LargeScaleStructures/data_stitching.py
@@ -524,9 +524,7 @@ class Stitcher(object):
                 _dx = mtd[ws].dataDx(0)
                 if len(_x) == len(_y)+1:
                     xtmp = [(_x[i]+_x[i+1])/2.0 for i in range(len(_y))]
-                    dxtmp = [(_dx[i]+_dx[i+1])/2.0 for i in range(len(_y))]
                     _x = xtmp
-                    _dx = dxtmp
 
                 _x, _y, _e, _dx = self.trim_zeros(_x, _y, _e, _dx)
                 x.extend(_x)
@@ -550,7 +548,7 @@ class Stitcher(object):
         dxtmp = mtd[ws_combined].dataDx(0)
 
         # Fill out dQ
-        npts = len(x)
+        npts = len(dxtmp)
         for i in range(npts):
             dxtmp[i] = dx[i]
 
diff --git a/scripts/SANS/ISISCommandInterface.py b/scripts/SANS/ISISCommandInterface.py
index 07c56746577f2cf43754be8438474c135c655147..519b68aa2050c1df0cf6dde18b165451a3f286a1 100644
--- a/scripts/SANS/ISISCommandInterface.py
+++ b/scripts/SANS/ISISCommandInterface.py
@@ -1316,11 +1316,14 @@ def ConvertFromPythonStringList(to_convert):
 ###################### Accessor functions for Transmission
 def GetTransmissionMonitorSpectrum():
     """
-        Gets the transmission monitor spectrum
+        Gets the transmission monitor spectrum. In the case of 4 or 17788 (for LOQ)
+        the result is 4.
         @return: tranmission monitor spectrum
     """
-    return ReductionSingleton().transmission_calculator.trans_mon
-
+    transmission_monitor = ReductionSingleton().transmission_calculator.trans_mon
+    if ReductionSingleton().instrument._NAME == "LOQ" and transmission_monitor == 17788:
+        transmission_monitor = 4
+    return transmission_monitor
 
 def SetTransmissionMonitorSpectrum(trans_mon):
     """
@@ -1328,11 +1331,13 @@ def SetTransmissionMonitorSpectrum(trans_mon):
         @param trans_mon :: The spectrum to set.
     """
     if su.is_convertible_to_int(trans_mon):
-        ReductionSingleton().transmission_calculator.trans_mon = int(trans_mon)
+        transmission_monitor = int(trans_mon)
+        if transmission_monitor == 4:
+            transmission_monitor = ReductionSingleton().instrument.get_m4_monitor_det_ID()
+        ReductionSingleton().transmission_calculator.trans_mon = transmission_monitor
     else:
         sanslog.warning('Warning: Could not convert the transmission monitor spectrum to int.')
 
-
 def UnsetTransmissionMonitorSpectrum():
     """
         Sets the transmission monitor spectrum to None
diff --git a/scripts/SANS/SANSUtility.py b/scripts/SANS/SANSUtility.py
index d4d7b6b4678666d6d7de3ad0f6478a7383439580..1fa448cc64f8772adda2f001253d18c39b5c2df3 100644
--- a/scripts/SANS/SANSUtility.py
+++ b/scripts/SANS/SANSUtility.py
@@ -1503,21 +1503,13 @@ def correct_q_resolution_for_merged(count_ws_front, count_ws_rear,
     @param output_ws: the output workspace
     '''
     def divide_q_resolution_by_counts(q_res, counts):
-        # We are dividing DX by Y. Note that len(DX) = len(Y) + 1
-        # Unfortunately, we need some knowlege about the Q1D algorithm here.
-        # The two last entries of DX are duplicate in Q1D and this is how we
-        # treat it here.
-        q_res_buffer = np.divide(q_res[0:-1],counts)
-        q_res_buffer = np.append(q_res_buffer, q_res_buffer[-1])
+        # We are dividing DX by Y.
+        q_res_buffer = np.divide(q_res,counts)
         return q_res_buffer
 
     def multiply_q_resolution_by_counts(q_res, counts):
-         # We are dividing DX by Y. Note that len(DX) = len(Y) + 1
-        # Unfortunately, we need some knowlege about the Q1D algorithm here.
-        # The two last entries of DX are duplicate in Q1D and this is how we
-        # treat it here.
-        q_res_buffer = np.multiply(q_res[0:-1],counts)
-        q_res_buffer = np.append(q_res_buffer, q_res_buffer[-1])
+         # We are dividing DX by Y.
+        q_res_buffer = np.multiply(q_res,counts)
         return q_res_buffer
 
     if count_ws_rear.getNumberHistograms() != 1:
diff --git a/scripts/SANS/isis_instrument.py b/scripts/SANS/isis_instrument.py
index cc83dd64cc1502e9eafefa036ce8df5f5010f1ea..cc117b9a4538d1e3637b813cd9aea9a00dc466f1 100644
--- a/scripts/SANS/isis_instrument.py
+++ b/scripts/SANS/isis_instrument.py
@@ -1,4 +1,4 @@
-# pylint: disable=too-many-lines, invalid-name, bare-except
+# pylint: disable=too-many-lines, invalid-name, bare-except, too-many-instance-attributes
 import math
 import os
 import re
@@ -419,7 +419,7 @@ class DetectorBank(object):
 class ISISInstrument(BaseInstrument):
     lowAngDetSet = None
 
-    def __init__(self, filename=None):
+    def __init__(self, filename=None, m4_instrument_component_name = None):
         """
             Reads the instrument definition xml file
             @param filename: the name of the instrument definition file to read
@@ -500,6 +500,9 @@ class ISISInstrument(BaseInstrument):
         # Number of digits in standard file name
         self.run_number_width = isis.instrument(self._NAME).zeroPadding(0)
 
+        # Set a flag if the instrument has an M4 monitor or not
+        self.has_m4_monitor = self._has_m4_monitor_in_idf(m4_instrument_component_name)
+
         # this variable isn't used again and stops the instrument from being deep copied if this instance is deep copied
         self.definition = None
 
@@ -878,6 +881,21 @@ class ISISInstrument(BaseInstrument):
                                ParameterType=type_to_save,
                                Value=str(value[0]))
 
+    def get_m4_monitor_det_ID(self):
+        """
+        Gets the detecor ID assoicated with Monitor 4
+        @returns: teh det ID of Monitor 4
+        """
+        raise RuntimeError("Monitor 4 does not seem to be implemented.")
+
+    def _has_m4_monitor_in_idf(self, m4_name):
+        """
+        Checks if the instrument contains a component with the M4 name
+        @param m4_name: the name of the M4 component
+        @returns true if it has an M4 component, else false
+        """
+        return False if self.definition.getComponentByName(m4_name) is None else True
+
 
 class LOQ(ISISInstrument):
     """
@@ -895,11 +913,19 @@ class LOQ(ISISInstrument):
             @param idf_path: the idf file
             @raise IndexError: if any parameters (e.g. 'default-incident-monitor-spectrum') aren't in the xml definition
         """
-        super(LOQ, self).__init__(idf_path)
+        # The det id for the M4 monitor in LOQ
+        self._m4_det_id = 17788
+        self._m4_monitor_name = "monitor4"
+        super(LOQ, self).__init__(idf_path, self._m4_monitor_name)
         # relates the numbers of the monitors to their names in the instrument definition file
         self.monitor_names = {1: 'monitor1',
                               2: 'monitor2'}
 
+        if self.has_m4_monitor:
+            self.monitor_names.update({self._m4_det_id: self._m4_monitor_name})
+        elif self._m4_det_id in self.monitor_names.keys():
+            del self.monitor_names[self._m4_det_id]
+
     def move_components(self, ws, xbeam, ybeam):
         """
             Move the locations of the sample and detector bank based on the passed beam center
@@ -972,8 +998,15 @@ class LOQ(ISISInstrument):
         """
             Loads information about the setup used for LOQ transmission runs
         """
-        trans_definition_file = os.path.join(config.getString('instrumentDefinition.directory'),
-                                             self._NAME + '_trans_Definition.xml')
+        ws = mtd[ws_trans]
+        instrument = ws.getInstrument()
+        has_m4 = instrument.getComponentByName(self._m4_monitor_name)
+        if has_m4 is None:
+            trans_definition_file = os.path.join(config.getString('instrumentDefinition.directory'),
+                                                 self._NAME + '_trans_Definition.xml')
+        else:
+            trans_definition_file = os.path.join(config.getString('instrumentDefinition.directory'),
+                                                 self._NAME + '_trans_Definition_M4.xml')
         LoadInstrument(Workspace=ws_trans, Filename=trans_definition_file, RewriteSpectraMap=False)
         LoadInstrument(Workspace=ws_direct, Filename=trans_definition_file, RewriteSpectraMap=False)
 
@@ -984,6 +1017,8 @@ class LOQ(ISISInstrument):
         cent_pos = 317.5 / 1000.0
         return [cent_pos - pos.getX(), cent_pos - pos.getY()]
 
+    def get_m4_monitor_det_ID(self):
+        return self._m4_det_id
 
 class SANS2D(ISISInstrument):
     """
@@ -995,7 +1030,10 @@ class SANS2D(ISISInstrument):
     WAV_RANGE_MAX = 14.0
 
     def __init__(self, idf_path=None):
-        super(SANS2D, self).__init__(idf_path)
+        # The detector ID for the M4 monitor
+        self._m4_det_id = 4
+        self._m4_monitor_name = "monitor4"
+        super(SANS2D, self).__init__(idf_path, self._m4_monitor_name)
 
         self._marked_dets = []
         # set to true once the detector positions have been moved to the locations given in the sample logs
@@ -1008,7 +1046,7 @@ class SANS2D(ISISInstrument):
         self.monitor_names = {1: 'monitor1',
                               2: 'monitor2',
                               3: 'monitor3',
-                              4: 'monitor4'}
+                              self._m4_det_id: self._m4_monitor_name}
 
     def set_up_for_run(self, base_runno):
         """
@@ -1388,13 +1426,19 @@ class SANS2D(ISISInstrument):
 
         ISISInstrument.on_load_sample(self, ws_name, beamcentre, isSample)
 
+    def get_m4_monitor_det_ID(self):
+        return self._m4_det_id
+
 
 class LARMOR(ISISInstrument):
     _NAME = 'LARMOR'
     WAV_RANGE_MIN = 0.5
     WAV_RANGE_MAX = 13.5
     def __init__(self, idf_path=None):
-        super(LARMOR,self).__init__(idf_path)
+        # The detector ID for the M4 monitor
+        self._m4_det_id = 4
+        self._m4_monitor_name = "monitor4"
+        super(LARMOR,self).__init__(idf_path, self._m4_monitor_name)
         self._marked_dets = []
         # set to true once the detector positions have been moved to the locations given in the sample logs
         self.corrections_applied = False
@@ -1763,6 +1807,8 @@ class LARMOR(ISISInstrument):
             run_num = ws_ref.getRun().getLogData('run_number').value
         return run_num
 
+    def get_m4_monitor_det_ID(self):
+        return self._m4_det_id
 
 if __name__ == '__main__':
     pass
diff --git a/scripts/SANS/isis_reduction_steps.py b/scripts/SANS/isis_reduction_steps.py
index 8c813d0e210ced03dda178e7087025917edf3ba5..fff821323c29196fb8fed1f5598704f4ba1d240f 100644
--- a/scripts/SANS/isis_reduction_steps.py
+++ b/scripts/SANS/isis_reduction_steps.py
@@ -1053,9 +1053,12 @@ class Mask_ISIS(ReductionStep):
             MaskDetectorsInShape(Workspace=workspace, ShapeXML=self._lim_phi_xml)
 
         if self.arm_width and self.arm_angle:
-            if instrument.name() == "SANS2D":
+            # Currently SANS2D and LOQ are supported
+            instrument_name = instrument.name()
+            if instrument_name == "SANS2D" or instrument_name == "LOQ":
+                component_name = 'rear-detector' if instrument_name == "SANS2D" else 'main-detector-bank'
                 ws = mtd[str(workspace)]
-                det = ws.getInstrument().getComponentByName('rear-detector')
+                det = ws.getInstrument().getComponentByName(component_name)
                 det_Z = det.getPos().getZ()
                 start_point = [self.arm_x, self.arm_y, det_Z]
                 MaskDetectorsInShape(Workspace=workspace, ShapeXML= \
diff --git a/scripts/reduction_workflow/find_data.py b/scripts/reduction_workflow/find_data.py
index 0ecd916bf341b323b4a260f6484d58fdef719300..85b4591eca0a418b547199ce0967c2547e5d25a0 100644
--- a/scripts/reduction_workflow/find_data.py
+++ b/scripts/reduction_workflow/find_data.py
@@ -1,4 +1,6 @@
 #pylint: disable=invalid-name
+from __future__ import (absolute_import, division, print_function)
+
 import os
 from mantid.kernel import ConfigService, Logger
 from mantid.api import FileFinder
@@ -105,4 +107,4 @@ def find_data(file, instrument='', allow_multiple=False):
 
     # If we didn't find anything, raise an exception
     Logger('find_data').error("\n\nCould not find a file for %s: check your reduction parameters\n\n" % str(file))
-    raise RuntimeError, "Could not find a file for %s" % str(file)
+    raise RuntimeError("Could not find a file for %s" % str(file))
diff --git a/scripts/test/CrystalFieldTest.py b/scripts/test/CrystalFieldTest.py
index f3a86caa5a74d2df3e54c5c11352cfda45730132..2eab6cba3e0a3764c2577301f58aaf7bbf876bbe 100644
--- a/scripts/test/CrystalFieldTest.py
+++ b/scripts/test/CrystalFieldTest.py
@@ -9,6 +9,7 @@ from CrystalField.energies import energies
 from mantid.simpleapi import CalculateChiSquared
 from mantid.kernel import ConfigService
 
+c_mbsr = 79.5774715459  # Conversion from barn to mb/sr
 
 class BackgroundTest(unittest.TestCase):
 
@@ -138,11 +139,11 @@ class CrystalFieldTests(unittest.TestCase):
         pl = cf.getPeakList()
         self.assertEquals(pl.shape, (2, 7))
         self.assertAlmostEqual(pl[0, 0], 0.0, 10)
-        self.assertAlmostEqual(pl[1, 0], 1.99118947, 8)
+        self.assertAlmostEqual(pl[1, 0], 1.99118947*c_mbsr, 6)
         self.assertAlmostEqual(pl[0, 1], 3.85696607, 8)
-        self.assertAlmostEqual(pl[1, 1], 0.86130642, 8)
+        self.assertAlmostEqual(pl[1, 1], 0.86130642*c_mbsr, 6)
         self.assertAlmostEqual(pl[0, 2], 2.41303393, 8)
-        self.assertAlmostEqual(pl[1, 2], 0.37963778, 8)
+        self.assertAlmostEqual(pl[1, 2], 0.37963778*c_mbsr, 6)
 
     def test_api_CrystalField_peaks_list_2(self):
         from CrystalField import CrystalField
@@ -151,20 +152,20 @@ class CrystalFieldTests(unittest.TestCase):
         pl1 = cf.getPeakList()
         self.assertEquals(pl1.shape, (2, 7))
         self.assertAlmostEqual(pl1[0, 0], 0.0, 10)
-        self.assertAlmostEqual(pl1[1, 0], 1.99118947, 8)
+        self.assertAlmostEqual(pl1[1, 0], 1.99118947*c_mbsr, 6)
         self.assertAlmostEqual(pl1[0, 1], 3.85696607, 8)
-        self.assertAlmostEqual(pl1[1, 1], 0.86130642, 8)
+        self.assertAlmostEqual(pl1[1, 1], 0.86130642*c_mbsr, 6)
         self.assertAlmostEqual(pl1[0, 2], 2.41303393, 8)
-        self.assertAlmostEqual(pl1[1, 2], 0.37963778, 8)
+        self.assertAlmostEqual(pl1[1, 2], 0.37963778*c_mbsr, 6)
 
         pl2 = cf.getPeakList(1)
         self.assertEquals(pl2.shape, (2, 7))
         self.assertAlmostEqual(pl2[0, 0], 0.0, 10)
-        self.assertAlmostEqual(pl2[1, 0], 1.97812511, 8)
+        self.assertAlmostEqual(pl2[1, 0], 1.97812511*c_mbsr, 6)
         self.assertAlmostEqual(pl2[0, 1], 3.85696607, 8)
-        self.assertAlmostEqual(pl2[1, 1], 0.82930948, 8)
+        self.assertAlmostEqual(pl2[1, 1], 0.82930948*c_mbsr, 6)
         self.assertAlmostEqual(pl2[0, 2], 2.41303393, 8)
-        self.assertAlmostEqual(pl2[1, 2], 0.38262684, 8)
+        self.assertAlmostEqual(pl2[1, 2], 0.38262684*c_mbsr, 6)
 
     def test_PeaksFunction(self):
         from CrystalField import PeaksFunction
@@ -179,14 +180,16 @@ class CrystalFieldTests(unittest.TestCase):
     def test_api_CrystalField_spectrum(self):
         from CrystalField import CrystalField
         cf = CrystalField('Ce', 'C2v', B20=0.035, B40=-0.012, B43=-0.027, B60=-0.00012, B63=0.0025, B66=0.0068,
-                          Temperature=[4.0, 50.0], FWHM=[0.1, 0.2])
+                          Temperature=[4.0, 50.0], FWHM=[0.1, 0.2], ToleranceIntensity=0.001*c_mbsr)
         x, y = cf.getSpectrum(0)
+        y = y / c_mbsr
         self.assertAlmostEqual(y[60], 5.52333486, 8)
         self.assertAlmostEqual(y[61], 10.11673418, 8)
         self.assertAlmostEqual(y[62], 12.1770908, 8)
         self.assertAlmostEqual(y[63], 7.63981716, 8)
         self.assertAlmostEqual(y[64], 4.08015236, 8)
         x, y = cf.getSpectrum(1)
+        y = y / c_mbsr
         self.assertAlmostEqual(y[45], 0.29822612216224065, 8)
         self.assertAlmostEqual(y[46], 0.46181038787922241, 8)
         self.assertAlmostEqual(y[47], 0.66075719314988057, 8)
@@ -200,19 +203,21 @@ class CrystalFieldTests(unittest.TestCase):
 
         r = [0.0, 1.45, 2.4, 3.0, 3.85]
         x, y = cf.getSpectrum(0, r)
+        y = y / c_mbsr
         self.assertEqual(x[0], 0.0)
         self.assertEqual(x[1], 1.45)
         self.assertEqual(x[2], 2.4)
         self.assertEqual(x[3], 3.0)
         self.assertEqual(x[4], 3.85)
 
-        self.assertAlmostEqual(y[0], 12.474954833565066, 8)
-        self.assertAlmostEqual(y[1], 1.1901690051585272, 8)
-        self.assertAlmostEqual(y[2], 0.12278091428521705, 8)
-        self.assertAlmostEqual(y[3], 0.042940202606241519, 8)
-        self.assertAlmostEqual(y[4], 10.837438382097396, 8)
+        self.assertAlmostEqual(y[0], 12.474954833565066, 6)
+        self.assertAlmostEqual(y[1], 1.1901690051585272, 6)
+        self.assertAlmostEqual(y[2], 0.12278091428521705, 6)
+        self.assertAlmostEqual(y[3], 0.042940202606241519, 6)
+        self.assertAlmostEqual(y[4], 10.837438382097396, 6)
 
         x, y = cf.getSpectrum(1, r)
+        y = y / c_mbsr
         self.assertEqual(x[0], 0.0)
         self.assertEqual(x[1], 1.45)
         self.assertEqual(x[2], 2.4)
@@ -228,8 +233,9 @@ class CrystalFieldTests(unittest.TestCase):
     def test_api_CrystalField_spectrum_0(self):
         from CrystalField import CrystalField
         cf = CrystalField('Ce', 'C2v', B20=0.035, B40=-0.012, B43=-0.027, B60=-0.00012, B63=0.0025, B66=0.0068,
-                          Temperature=4.0, FWHM=0.1)
+                          Temperature=4.0, FWHM=0.1, ToleranceIntensity=0.001*c_mbsr)
         x, y = cf.getSpectrum()
+        y = y / c_mbsr
         self.assertAlmostEqual(y[60], 5.52333486, 8)
         self.assertAlmostEqual(y[61], 10.11673418, 8)
         self.assertAlmostEqual(y[62], 12.1770908, 8)
@@ -248,26 +254,30 @@ class CrystalFieldTests(unittest.TestCase):
         workspace = CreateWorkspace(x, y, e)
 
         x, y = cf.getSpectrum(0, workspace)
-        self.assertAlmostEqual(y[0], 12.474954833565066, 8)
-        self.assertAlmostEqual(y[1], 4.3004160689570403, 8)
-        self.assertAlmostEqual(y[2], 1.4523089577890338, 8)
-        self.assertAlmostEqual(y[3], 0.6922657279528992, 8)
-        self.assertAlmostEqual(y[4], 0.40107924259746491, 8)
-        self.assertAlmostEqual(y[15], 0.050129858433581413, 8)
-        self.assertAlmostEqual(y[16], 0.054427788297191478, 8)
+        y = y / c_mbsr
+        self.assertAlmostEqual(y[0], 12.474954833565066, 6)
+        self.assertAlmostEqual(y[1], 4.3004160689570403, 6)
+        self.assertAlmostEqual(y[2], 1.4523089577890338, 6)
+        self.assertAlmostEqual(y[3], 0.6922657279528992, 6)
+        self.assertAlmostEqual(y[4], 0.40107924259746491, 6)
+        self.assertAlmostEqual(y[15], 0.050129858433581413, 6)
+        self.assertAlmostEqual(y[16], 0.054427788297191478, 6)
         x, y = cf.getSpectrum(1, workspace)
-        self.assertAlmostEqual(y[0], 6.3046701386938624, 8)
-        self.assertAlmostEqual(y[1], 4.2753076741531455, 8)
-        self.assertAlmostEqual(y[2], 2.1778230746690772, 8)
-        self.assertAlmostEqual(y[3], 1.2011188019120242, 8)
-        self.assertAlmostEqual(y[4], 0.74036819427919942, 8)
+        y = y / c_mbsr
+        self.assertAlmostEqual(y[0], 6.3046701386938624, 6)
+        self.assertAlmostEqual(y[1], 4.2753076741531455, 6)
+        self.assertAlmostEqual(y[2], 2.1778230746690772, 6)
+        self.assertAlmostEqual(y[3], 1.2011188019120242, 6)
+        self.assertAlmostEqual(y[4], 0.74036819427919942, 6)
         x, y = cf.getSpectrum(workspace)
-        self.assertAlmostEqual(y[0], 12.474954833565066, 8)
-        self.assertAlmostEqual(y[1], 4.3004160689570403, 8)
+        y = y / c_mbsr
+        self.assertAlmostEqual(y[0], 12.474954833565066, 6)
+        self.assertAlmostEqual(y[1], 4.3004160689570403, 6)
         workspace = CreateWorkspace(x, y, e, 2)
         x, y = cf.getSpectrum(workspace, 1)
-        self.assertAlmostEqual(y[0], 0.050129858433581413, 8)
-        self.assertAlmostEqual(y[1], 0.054427788297191478, 8)
+        y = y / c_mbsr
+        self.assertAlmostEqual(y[0], 0.050129858433581413, 6)
+        self.assertAlmostEqual(y[1], 0.054427788297191478, 6)
 
     def test_api_CrystalField_spectrum_peaks(self):
         from CrystalField import CrystalField, PeaksFunction
@@ -279,6 +289,7 @@ class CrystalFieldTests(unittest.TestCase):
         cf.peaks.param[3]['Sigma'] = 0.2
         cf.peaks.param[4]['Sigma'] = 0.3
         x, y = cf.getSpectrum()
+        y = y / c_mbsr
         self.assertAlmostEqual(y[123], 0.067679792127989441, 8)
         self.assertAlmostEqual(y[124], 0.099056455104978708, 8)
 
@@ -292,6 +303,8 @@ class CrystalFieldTests(unittest.TestCase):
         cf.peaks[0].param[3]['Sigma'] = 0.3
         x0, y0 = cf.getSpectrum()
         x1, y1 = cf.getSpectrum(1)
+        y0 = y0 / c_mbsr
+        y1 = y1 / c_mbsr
         self.assertAlmostEqual(y0[139], 0.094692329804360792, 8)
         self.assertAlmostEqual(y0[142], 0.07623409141946233, 8)
         self.assertAlmostEqual(y1[139], 0.16332256923203797, 8)
@@ -305,9 +318,10 @@ class CrystalFieldTests(unittest.TestCase):
         cf.peaks.param[1]['Sigma'] = 0.1
         cf.peaks.param[2]['Sigma'] = 0.2
         cf.peaks.param[3]['Sigma'] = 0.3
-        cf.background = Background(peak=Function('PseudoVoigt', Height=10, FWHM=1, Mixing=0.5),
-                                   background=Function('LinearBackground', A0=1.0, A1=0.1))
+        cf.background = Background(peak=Function('PseudoVoigt', Height=10*c_mbsr, FWHM=1, Mixing=0.5),
+                                   background=Function('LinearBackground', A0=1.0*c_mbsr, A1=0.1*c_mbsr))
         x, y = cf.getSpectrum()
+        y = y / c_mbsr
         self.assertAlmostEqual(y[80], 2.5853135104737239, 8)
         self.assertAlmostEqual(y[90], 6.6726231052015859, 8)
 
@@ -319,14 +333,18 @@ class CrystalFieldTests(unittest.TestCase):
         cf.peaks[0].param[1]['Sigma'] = 0.1
         cf.peaks[0].param[2]['Sigma'] = 0.2
         cf.peaks[0].param[3]['Sigma'] = 0.3
-        cf.background = Background(peak=Function('Gaussian', Height=10, Sigma=1),
-                                   background=Function('FlatBackground', A0=1.0)) * 2
+        cf.background = Background(peak=Function('Gaussian', Height=10*c_mbsr, Sigma=1),
+                                   background=Function('FlatBackground', A0=1.0*c_mbsr)) * 2
         cf.background[0].peak.param['Sigma'] = 0.3
         cf.background[1].peak.param['Sigma'] = 0.4
-        cf.background[1].background.param['A0'] = 2
+        cf.background[1].background.param['A0'] = 2*c_mbsr
 
         x0, y0 = cf.getSpectrum()
         x1, y1 = cf.getSpectrum(1)
+        # Original test was for FOCUS convention - intensity in barn. 
+        # Now use ISIS convention with intensity in milibarn/steradian
+        y0 = y0 / c_mbsr
+        y1 = y1 / c_mbsr
         self.assertAlmostEqual(y0[100], 12.882103856689408, 8)
         self.assertAlmostEqual(y0[120], 1.2731198929218952, 8)
         self.assertAlmostEqual(y0[139], 1.0946924013479913, 8)
@@ -344,23 +362,24 @@ class CrystalFieldFitTest(unittest.TestCase):
         from CrystalField import CrystalField, CrystalFieldFit, Background, Function
         origin = CrystalField('Ce', 'C2v', B20=0.37737, B22=3.9770, B40=-0.031787, B42=-0.11611, B44=-0.12544,
                   Temperature=44.0, FWHM=1.1)
-        origin.background = Background(peak=Function('Gaussian', Height=10, Sigma=1),
+        origin.background = Background(peak=Function('Gaussian', Height=10*c_mbsr, Sigma=1),
                             background=Function('LinearBackground', A0=1.0, A1=0.01))
         x, y = origin.getSpectrum()
         ws = makeWorkspace(x, y)
 
         cf = CrystalField('Ce', 'C2v', B20=0.37, B22=3.97, B40=-0.0317, B42=-0.116, B44=-0.12,
                       Temperature=44.0, FWHM=1.0)
-        cf.background = Background(peak=Function('Gaussian', Height=10, Sigma=1),
+        cf.background = Background(peak=Function('Gaussian', Height=10*c_mbsr, Sigma=1),
                         background=Function('LinearBackground', A0=1.0, A1=0.01))
         cf.ties(B20=0.37737, B60=0, B62=0, B64=0, B66=0, IntensityScaling=1)
+        cf.ToleranceIntensity = 0.001
         fit = CrystalFieldFit(cf, InputWorkspace=ws)
         fit.fit()
         self.assertAlmostEqual(cf.background.peak.param['PeakCentre'], 7.62501442212e-10, 8)
         self.assertAlmostEqual(cf.background.peak.param['Sigma'], 1.00000000277, 8)
-        self.assertAlmostEqual(cf.background.peak.param['Height'], 9.99999983559, 8)
-        self.assertAlmostEqual(cf.background.background.param['A1'], 0.0100000014282, 8)
-        self.assertAlmostEqual(cf.background.background.param['A0'], 0.999999976941, 8)
+        self.assertAlmostEqual(cf.background.peak.param['Height'], 9.99999983559*c_mbsr, 4)
+        self.assertAlmostEqual(cf.background.background.param['A1'], 0.0100000014282, 4)
+        self.assertAlmostEqual(cf.background.background.param['A0'], 0.999999976941, 4)
         self.assertEqual(cf.param['IB63'], 0.0)
         self.assertEqual(cf.param['IB62'], 0.0)
         self.assertEqual(cf.param['IB61'], 0.0)
@@ -389,26 +408,20 @@ class CrystalFieldFitTest(unittest.TestCase):
         self.assertEqual(cf.param['B41'], 0.0)
         self.assertEqual(cf.param['B43'], 0.0)
         self.assertEqual(cf.param['B64'], 0.0)
-        self.assertAlmostEqual(cf.param['B20'], 0.37737, 8)
-        self.assertAlmostEqual(cf.param['B22'], 3.97700087765, 8)
-        self.assertAlmostEqual(cf.param['B40'], -0.0317867635188, 8)
-        self.assertAlmostEqual(cf.param['B42'], -0.116110640723, 8)
-        self.assertAlmostEqual(cf.param['B44'], -0.125439939584, 8)
+        self.assertAlmostEqual(cf.param['B20'], 0.37737, 4)
+        self.assertAlmostEqual(cf.param['B22'], 3.97700087765, 4)
+        self.assertAlmostEqual(cf.param['B40'], -0.0317867635188, 4)
+        self.assertAlmostEqual(cf.param['B42'], -0.116110640723, 4)
+        self.assertAlmostEqual(cf.param['B44'], -0.125439939584, 4)
         self.assertAlmostEqual(cf.peaks.param[0]['PeakCentre'], 0.0, 8)
-        self.assertAlmostEqual(cf.peaks.param[0]['FWHM'], 1.10000009456, 8)
-        self.assertAlmostEqual(cf.peaks.param[0]['Amplitude'], 2.74936658109, 8)
-        self.assertAlmostEqual(cf.peaks.param[1]['PeakCentre'], 29.3261118837, 8)
-        self.assertAlmostEqual(cf.peaks.param[1]['FWHM'], 1.10000293773, 8)
-        self.assertAlmostEqual(cf.peaks.param[1]['Amplitude'], 0.720400223007, 8)
-        self.assertAlmostEqual(cf.peaks.param[2]['PeakCentre'], 44.341248146, 8)
-        self.assertAlmostEqual(cf.peaks.param[2]['FWHM'], 1.10000812804, 8)
-        self.assertAlmostEqual(cf.peaks.param[2]['Amplitude'], 0.429808829601, 8)
-        self.assertAlmostEqual(cf.peaks.param[3]['PeakCentre'], 0.0, 8)
-        self.assertAlmostEqual(cf.peaks.param[3]['FWHM'], 1.0, 8)
-        self.assertAlmostEqual(cf.peaks.param[3]['Amplitude'], 0.0, 8)
-        self.assertAlmostEqual(cf.peaks.param[4]['PeakCentre'], 0.0, 8)
-        self.assertAlmostEqual(cf.peaks.param[4]['FWHM'], 1.0, 8)
-        self.assertAlmostEqual(cf.peaks.param[4]['Amplitude'], 0.0, 8)
+        self.assertAlmostEqual(cf.peaks.param[0]['FWHM'], 1.10000009456, 4)
+        self.assertAlmostEqual(cf.peaks.param[0]['Amplitude'], 2.74936658109*c_mbsr, 2)
+        self.assertAlmostEqual(cf.peaks.param[1]['PeakCentre'], 29.3261118837, 4)
+        self.assertAlmostEqual(cf.peaks.param[1]['FWHM'], 1.10000293773, 4)
+        self.assertAlmostEqual(cf.peaks.param[1]['Amplitude'], 0.720400223007*c_mbsr, 2)
+        self.assertAlmostEqual(cf.peaks.param[2]['PeakCentre'], 44.341248146, 4)
+        self.assertAlmostEqual(cf.peaks.param[2]['FWHM'], 1.10000812804, 4)
+        self.assertAlmostEqual(cf.peaks.param[2]['Amplitude'], 0.429808829601*c_mbsr, 2)
 
 
     def test_CrystalFieldFit_multi_spectrum(self):
@@ -448,6 +461,7 @@ class CrystalFieldFitTest(unittest.TestCase):
         cf.setBackground(peak=Function('Gaussian', Height=10, Sigma=0.3),
                          background=Function('FlatBackground', A0=1.0))
         cf.ties(IntensityScaling0 = 1.0, IntensityScaling1 = 1.0)
+        cf.ToleranceIntensity = 0.001
 
         ws0 = makeWorkspace(*origin.getSpectrum(0))
         ws1 = makeWorkspace(*origin.getSpectrum(1))
@@ -482,7 +496,7 @@ class CrystalFieldFitTest(unittest.TestCase):
 
         self.assertNotEqual(cf.peaks[0].param[3]['PeakCentre'], 0.0)
         self.assertNotEqual(cf.peaks[0].param[3]['FWHM'], 0.0)
-        self.assertEqual(cf.peaks[0].param[3]['Amplitude'], 0.0)
+        self.assertNotEqual(cf.peaks[0].param[3]['Amplitude'], 0.0)
 
         self.assertNotEqual(cf.peaks[1].param[1]['PeakCentre'], 0.0)
         self.assertNotEqual(cf.peaks[1].param[1]['FWHM'], 0.0)
diff --git a/scripts/test/SANSUtilityTest.py b/scripts/test/SANSUtilityTest.py
index aae4acba49500336ee0e04de7386f043951ceec0..aca613d0689b815de01eed95270fc8280373fa75 100644
--- a/scripts/test/SANSUtilityTest.py
+++ b/scripts/test/SANSUtilityTest.py
@@ -85,7 +85,7 @@ def provide_workspace_with_x_errors(workspace_name,use_xerror = True, nspec = 1,
                                     x_in = [1,2,3,4,5,6,7,8,9,10],
                                     y_in = [2,2,2,2,2,2,2,2,2],
                                     e_in = [1,1,1,1,1,1,1,1,1],
-                                    x_error = [1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9, 10.1]):
+                                    x_error = [1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9]):
     x = []
     y = []
     e = []
@@ -1140,11 +1140,11 @@ class TestGetQResolutionForMergedWorkspaces(unittest.TestCase):
         x1 = [1,2,3]
         e1 = [1,1]
         y1 = [2,2]
-        dx1 = [1.,2.,3.]
+        dx1 = [1.,2.]
         x2 = [1,2,3,4]
         e2 = [1,1, 1]
         y2 = [2,2, 2]
-        dx2 = [1.,2.,3.,4.]
+        dx2 = [1.,2.,3.]
         provide_workspace_with_x_errors(front_name, True, 1, x1, y1, e1, dx1)
         provide_workspace_with_x_errors(rear_name, True, 1, x2, y2, e2, dx2)
         provide_workspace_with_x_errors(result_name, False, 1)
@@ -1166,9 +1166,9 @@ class TestGetQResolutionForMergedWorkspaces(unittest.TestCase):
         x = [1,2,3]
         e = [1,1]
         y_front = [2,2]
-        dx_front = [1.,2.,3.]
+        dx_front = [1.,2.]
         y_rear = [1.5,1.5]
-        dx_rear = [3.,2.,1.]
+        dx_rear = [3.,2.]
         front_name = "front"
         rear_name = "rear"
         result_name = "result"
@@ -1186,12 +1186,10 @@ class TestGetQResolutionForMergedWorkspaces(unittest.TestCase):
 
         dx_expected_0 = (dx_front[0]*y_front[0]*scale + dx_rear[0]*y_rear[0])/(y_front[0]*scale + y_rear[0])
         dx_expected_1 = (dx_front[1]*y_front[1]*scale + dx_rear[1]*y_rear[1])/(y_front[1]*scale + y_rear[1])
-        dx_expected_2 = dx_expected_1
         dx_result = result.readDx(0)
-        self.assertTrue(len(dx_result) == 3)
+        self.assertTrue(len(dx_result) == 2)
         self.assertEqual(dx_result[0], dx_expected_0)
         self.assertEqual(dx_result[1], dx_expected_1)
-        self.assertEqual(dx_result[2], dx_expected_2)
 
         # Clean up
         DeleteWorkspace(front)