diff --git a/Fit/Adapter/MinimizerAdapter.cpp b/Fit/Adapter/MinimizerAdapter.cpp
index 85ba581a05dc7dd8bdfbad196f0043ecd1d6d7be..0351277cae6363b956559dfcce43aa5903292003 100644
--- a/Fit/Adapter/MinimizerAdapter.cpp
+++ b/Fit/Adapter/MinimizerAdapter.cpp
@@ -15,8 +15,8 @@
 #include "Fit/Adapter/MinimizerAdapter.h"
 #include "Fit/Adapter/ObjectiveFunctionAdapter.h"
 #include "Fit/Adapter/Report.h"
-#include "Fit/Adapter/RootResidualFunction.h"
-#include "Fit/Adapter/RootScalarFunction.h"
+#include "Fit/Residual/RootResidualFunction.h"
+#include "Fit/Residual/RootScalarFunction.h"
 #include "Fit/Tools/StringUtil.h"
 #include <Math/Minimizer.h>
 
diff --git a/Fit/Adapter/MinimizerAdapter.h b/Fit/Adapter/MinimizerAdapter.h
index 89a71b225bb17d4637985eaafa4a7d895b5e5844..5f5fd74db886800d83616dbbc4052f1fcdf91c90 100644
--- a/Fit/Adapter/MinimizerAdapter.h
+++ b/Fit/Adapter/MinimizerAdapter.h
@@ -20,7 +20,7 @@
 
 #include "Fit/Minimizer/IMinimizer.h"
 #include "Fit/Minimizer/MinimizerInfo.h"
-#include "Fit/Minimizer/MinimizerOptions.h"
+#include "Fit/Option/MinimizerOptions.h"
 #include <memory>
 #include <string>
 
diff --git a/Fit/Adapter/ObjectiveFunctionAdapter.cpp b/Fit/Adapter/ObjectiveFunctionAdapter.cpp
index 34a13b8c1297d32a96b9c0bd745df7817c06097f..d7e7b7f9d33152d193a688263f90041ea963b64f 100644
--- a/Fit/Adapter/ObjectiveFunctionAdapter.cpp
+++ b/Fit/Adapter/ObjectiveFunctionAdapter.cpp
@@ -13,10 +13,10 @@
 //  ************************************************************************************************
 
 #include "Fit/Adapter/ObjectiveFunctionAdapter.h"
-#include "Fit/Adapter/ResidualFunctionAdapter.h"
-#include "Fit/Adapter/RootResidualFunction.h"
-#include "Fit/Adapter/RootScalarFunction.h"
-#include "Fit/Adapter/ScalarFunctionAdapter.h"
+#include "Fit/Residual/ResidualFunctionAdapter.h"
+#include "Fit/Residual/RootResidualFunction.h"
+#include "Fit/Residual/RootScalarFunction.h"
+#include "Fit/Residual/ScalarFunctionAdapter.h"
 
 using namespace mumufit;
 
diff --git a/Fit/Kernel/MinimizerFactory.cpp b/Fit/Kernel/MinimizerFactory.cpp
index 564187c2225ee205df9841d0545013246e0b46c1..37a19626a8dfd677780fb0906f0cf79401ab09f9 100644
--- a/Fit/Kernel/MinimizerFactory.cpp
+++ b/Fit/Kernel/MinimizerFactory.cpp
@@ -13,11 +13,11 @@
 //  ************************************************************************************************
 
 #include "Fit/Kernel/MinimizerFactory.h"
-#include "Fit/Adapter/GSLLevenbergMarquardtMinimizer.h"
-#include "Fit/Adapter/GSLMultiMinimizer.h"
-#include "Fit/Adapter/GeneticMinimizer.h"
-#include "Fit/Adapter/Minuit2Minimizer.h"
-#include "Fit/Adapter/SimAnMinimizer.h"
+#include "Fit/Suite/GSLLevenbergMarquardtMinimizer.h"
+#include "Fit/Suite/GSLMultiMinimizer.h"
+#include "Fit/Suite/GeneticMinimizer.h"
+#include "Fit/Suite/Minuit2Minimizer.h"
+#include "Fit/Suite/SimAnMinimizer.h"
 #include <boost/format.hpp>
 #include <iomanip>
 #include <iostream>
diff --git a/Fit/Minimizer/MinimizerOptions.cpp b/Fit/Option/MinimizerOptions.cpp
similarity index 95%
rename from Fit/Minimizer/MinimizerOptions.cpp
rename to Fit/Option/MinimizerOptions.cpp
index d9cec8d94662cb0c99d61a49a907dcdf9a333f0e..028f292f0fd4e5c07b2a42a16650f95d45f6fe93 100644
--- a/Fit/Minimizer/MinimizerOptions.cpp
+++ b/Fit/Option/MinimizerOptions.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Minimizer/MinimizerOptions.cpp
+//! @file      Fit/Option/MinimizerOptions.cpp
 //! @brief     Implements class MinimizerOptions.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -12,7 +12,7 @@
 //
 //  ************************************************************************************************
 
-#include "Fit/Minimizer/MinimizerOptions.h"
+#include "Fit/Option/MinimizerOptions.h"
 #include "Fit/Tools/StringUtil.h"
 #include <iostream>
 #include <sstream>
diff --git a/Fit/Minimizer/MinimizerOptions.h b/Fit/Option/MinimizerOptions.h
similarity index 81%
rename from Fit/Minimizer/MinimizerOptions.h
rename to Fit/Option/MinimizerOptions.h
index 8839f47db13b9d508b8548ad48aa35d13a1e862b..4476cc4e7c76d71356709281050ebfb1a88be43d 100644
--- a/Fit/Minimizer/MinimizerOptions.h
+++ b/Fit/Option/MinimizerOptions.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Minimizer/MinimizerOptions.h
+//! @file      Fit/Option/MinimizerOptions.h
 //! @brief     Declares class MinimizerOptions.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -15,10 +15,10 @@
 #ifdef SWIG
 #error no need to expose this header to Swig
 #endif // SWIG
-#ifndef BORNAGAIN_FIT_MINIMIZER_MINIMIZEROPTIONS_H
-#define BORNAGAIN_FIT_MINIMIZER_MINIMIZEROPTIONS_H
+#ifndef BORNAGAIN_FIT_OPTION_MINIMIZEROPTIONS_H
+#define BORNAGAIN_FIT_OPTION_MINIMIZEROPTIONS_H
 
-#include "Fit/Tools/OptionContainer.h"
+#include "Fit/Option/OptionContainer.h"
 
 //! Collection of internal minimizer settings.
 
@@ -34,4 +34,4 @@ private:
     void processCommand(const std::string& command);
 };
 
-#endif // BORNAGAIN_FIT_MINIMIZER_MINIMIZEROPTIONS_H
+#endif // BORNAGAIN_FIT_OPTION_MINIMIZEROPTIONS_H
diff --git a/Fit/Tools/MultiOption.cpp b/Fit/Option/MultiOption.cpp
similarity index 95%
rename from Fit/Tools/MultiOption.cpp
rename to Fit/Option/MultiOption.cpp
index 3a807ecffbf00163e00578badacbce826397dbe1..3734a4dc9425344ff46934f49ecec8b2bdb53ff9 100644
--- a/Fit/Tools/MultiOption.cpp
+++ b/Fit/Option/MultiOption.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Tools/MultiOption.cpp
+//! @file      Fit/Option/MultiOption.cpp
 //! @brief     Implements class MultiOption
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -12,7 +12,7 @@
 //
 //  ************************************************************************************************
 
-#include "Fit/Tools/MultiOption.h"
+#include "Fit/Option/MultiOption.h"
 #include <string>
 #include <utility>
 
diff --git a/Fit/Tools/MultiOption.h b/Fit/Option/MultiOption.h
similarity index 92%
rename from Fit/Tools/MultiOption.h
rename to Fit/Option/MultiOption.h
index 4709f57c8aca256722966b3004f4ec4fe2ae15c9..9a682d77afe488248a3fb043b7f734475ed4dc38 100644
--- a/Fit/Tools/MultiOption.h
+++ b/Fit/Option/MultiOption.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Tools/MultiOption.h
+//! @file      Fit/Option/MultiOption.h
 //! @brief     Declares class MultiOption
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -15,8 +15,8 @@
 #ifdef SWIG
 #error no need to expose this header to Swig
 #endif // SWIG
-#ifndef BORNAGAIN_FIT_TOOLS_MULTIOPTION_H
-#define BORNAGAIN_FIT_TOOLS_MULTIOPTION_H
+#ifndef BORNAGAIN_FIT_OPTION_MULTIOPTION_H
+#define BORNAGAIN_FIT_OPTION_MULTIOPTION_H
 
 #include <string>
 #include <variant>
@@ -81,4 +81,4 @@ T MultiOption::getDefault() const
     return std::get<T>(m_default_value);
 }
 
-#endif // BORNAGAIN_FIT_TOOLS_MULTIOPTION_H
+#endif // BORNAGAIN_FIT_OPTION_MULTIOPTION_H
diff --git a/Fit/Tools/OptionContainer.cpp b/Fit/Option/OptionContainer.cpp
similarity index 95%
rename from Fit/Tools/OptionContainer.cpp
rename to Fit/Option/OptionContainer.cpp
index 5bb9f0607198beaf52ed17274a8a02fcad979531..4895e76b23aeb61a407d18c97bfeb79fbc9d1b5d 100644
--- a/Fit/Tools/OptionContainer.cpp
+++ b/Fit/Option/OptionContainer.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Tools/OptionContainer.cpp
+//! @file      Fit/Option/OptionContainer.cpp
 //! @brief     Implements class OptionContainer.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -12,7 +12,7 @@
 //
 //  ************************************************************************************************
 
-#include "Fit/Tools/OptionContainer.h"
+#include "Fit/Option/OptionContainer.h"
 #include <sstream>
 
 //! Returns true if option with such name already exists.
diff --git a/Fit/Tools/OptionContainer.h b/Fit/Option/OptionContainer.h
similarity index 93%
rename from Fit/Tools/OptionContainer.h
rename to Fit/Option/OptionContainer.h
index 4e300b795ecc8a3f2eb9fb169e57bf3478b3bc9e..6ed264fe10d53ace05cfff2778bed60805329708 100644
--- a/Fit/Tools/OptionContainer.h
+++ b/Fit/Option/OptionContainer.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Tools/OptionContainer.h
+//! @file      Fit/Option/OptionContainer.h
 //! @brief     Declares class OptionContainer.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -15,10 +15,10 @@
 #ifdef SWIG
 #error no need to expose this header to Swig
 #endif // SWIG
-#ifndef BORNAGAIN_FIT_TOOLS_OPTIONCONTAINER_H
-#define BORNAGAIN_FIT_TOOLS_OPTIONCONTAINER_H
+#ifndef BORNAGAIN_FIT_OPTION_OPTIONCONTAINER_H
+#define BORNAGAIN_FIT_OPTION_OPTIONCONTAINER_H
 
-#include "Fit/Tools/MultiOption.h"
+#include "Fit/Option/MultiOption.h"
 #include <map>
 #include <memory>
 #include <stdexcept>
@@ -95,4 +95,4 @@ void OptionContainer::setOptionValue(const std::string& optionName, T value)
             + optionName + "'");
 }
 
-#endif // BORNAGAIN_FIT_TOOLS_OPTIONCONTAINER_H
+#endif // BORNAGAIN_FIT_OPTION_OPTIONCONTAINER_H
diff --git a/Fit/Adapter/IFunctionAdapter.cpp b/Fit/Residual/IFunctionAdapter.cpp
similarity index 90%
rename from Fit/Adapter/IFunctionAdapter.cpp
rename to Fit/Residual/IFunctionAdapter.cpp
index 9283126edbcb8bb5ca11f0c0b72a03d04577a52f..425ed12d73ac59e02fe395a981a3b83ccdc043e1 100644
--- a/Fit/Adapter/IFunctionAdapter.cpp
+++ b/Fit/Residual/IFunctionAdapter.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/IFunctionAdapter.cpp
+//! @file      Fit/Residual/IFunctionAdapter.cpp
 //! @brief     Implements interface IFunctionAdapter.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -12,7 +12,7 @@
 //
 //  ************************************************************************************************
 
-#include "Fit/Adapter/IFunctionAdapter.h"
+#include "Fit/Residual/IFunctionAdapter.h"
 
 using namespace mumufit;
 
diff --git a/Fit/Adapter/IFunctionAdapter.h b/Fit/Residual/IFunctionAdapter.h
similarity index 84%
rename from Fit/Adapter/IFunctionAdapter.h
rename to Fit/Residual/IFunctionAdapter.h
index db9dd0289cf6f980e47f25618df73fde168f8ad9..017fbc3ab7723a43c9d4b770ca0543c6e151e3f7 100644
--- a/Fit/Adapter/IFunctionAdapter.h
+++ b/Fit/Residual/IFunctionAdapter.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/IFunctionAdapter.h
+//! @file      Fit/Residual/IFunctionAdapter.h
 //! @brief     Defines interface IFunctionAdapter.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -15,8 +15,8 @@
 #ifdef SWIG
 #error no need to expose this header to Swig
 #endif // SWIG
-#ifndef BORNAGAIN_FIT_ADAPTER_IFUNCTIONADAPTER_H
-#define BORNAGAIN_FIT_ADAPTER_IFUNCTIONADAPTER_H
+#ifndef BORNAGAIN_FIT_RESIDUAL_IFUNCTIONADAPTER_H
+#define BORNAGAIN_FIT_RESIDUAL_IFUNCTIONADAPTER_H
 
 namespace mumufit {
 
@@ -38,4 +38,4 @@ protected:
 
 } // namespace mumufit
 
-#endif // BORNAGAIN_FIT_ADAPTER_IFUNCTIONADAPTER_H
+#endif // BORNAGAIN_FIT_RESIDUAL_IFUNCTIONADAPTER_H
diff --git a/Fit/Adapter/ResidualFunctionAdapter.cpp b/Fit/Residual/ResidualFunctionAdapter.cpp
similarity index 96%
rename from Fit/Adapter/ResidualFunctionAdapter.cpp
rename to Fit/Residual/ResidualFunctionAdapter.cpp
index 2b30e761c2669ee4a6168897bac8a9c334c68c15..461b6644f6f838dad9bdca26ed7a9c67b72315c5 100644
--- a/Fit/Adapter/ResidualFunctionAdapter.cpp
+++ b/Fit/Residual/ResidualFunctionAdapter.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/ResidualFunctionAdapter.cpp
+//! @file      Fit/Residual/ResidualFunctionAdapter.cpp
 //! @brief     Implements class ResidualFunctionAdapter.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -12,8 +12,8 @@
 //
 //  ************************************************************************************************
 
-#include "Fit/Adapter/ResidualFunctionAdapter.h"
-#include "Fit/Adapter/RootResidualFunction.h"
+#include "Fit/Residual/ResidualFunctionAdapter.h"
+#include "Fit/Residual/RootResidualFunction.h"
 #include <cassert>
 #include <memory>
 #include <sstream>
diff --git a/Fit/Adapter/ResidualFunctionAdapter.h b/Fit/Residual/ResidualFunctionAdapter.h
similarity index 88%
rename from Fit/Adapter/ResidualFunctionAdapter.h
rename to Fit/Residual/ResidualFunctionAdapter.h
index d47a8bec4b63ffb88ab946f75ffb6402d92f356e..f62b764b6cadd0175c391363cb4ecda2389fdfd2 100644
--- a/Fit/Adapter/ResidualFunctionAdapter.h
+++ b/Fit/Residual/ResidualFunctionAdapter.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/ResidualFunctionAdapter.h
+//! @file      Fit/Residual/ResidualFunctionAdapter.h
 //! @brief     Defines class ResidualFunctionAdapter.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -15,12 +15,12 @@
 #ifdef SWIG
 #error no need to expose this header to Swig
 #endif // SWIG
-#ifndef BORNAGAIN_FIT_ADAPTER_RESIDUALFUNCTIONADAPTER_H
-#define BORNAGAIN_FIT_ADAPTER_RESIDUALFUNCTIONADAPTER_H
+#ifndef BORNAGAIN_FIT_RESIDUAL_RESIDUALFUNCTIONADAPTER_H
+#define BORNAGAIN_FIT_RESIDUAL_RESIDUALFUNCTIONADAPTER_H
 
-#include "Fit/Adapter/IFunctionAdapter.h"
 #include "Fit/Minimizer/Types.h"
 #include "Fit/Param/Parameters.h"
+#include "Fit/Residual/IFunctionAdapter.h"
 #include <functional>
 #include <memory>
 #include <vector>
@@ -59,4 +59,4 @@ private:
 
 } // namespace mumufit
 
-#endif // BORNAGAIN_FIT_ADAPTER_RESIDUALFUNCTIONADAPTER_H
+#endif // BORNAGAIN_FIT_RESIDUAL_RESIDUALFUNCTIONADAPTER_H
diff --git a/Fit/Adapter/RootResidualFunction.cpp b/Fit/Residual/RootResidualFunction.cpp
similarity index 96%
rename from Fit/Adapter/RootResidualFunction.cpp
rename to Fit/Residual/RootResidualFunction.cpp
index 054f30b3ac416bd352b4d6f3a7401c7ae2f1aa54..4c849c737ac13e52a9494a365aa390cb988a3f52 100644
--- a/Fit/Adapter/RootResidualFunction.cpp
+++ b/Fit/Residual/RootResidualFunction.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/RootResidualFunction.cpp
+//! @file      Fit/Residual/RootResidualFunction.cpp
 //! @brief     Implements class RootResidualFunction.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -12,7 +12,7 @@
 //
 //  ************************************************************************************************
 
-#include "Fit/Adapter/RootResidualFunction.h"
+#include "Fit/Residual/RootResidualFunction.h"
 
 #include <utility>
 
diff --git a/Fit/Adapter/RootResidualFunction.h b/Fit/Residual/RootResidualFunction.h
similarity index 90%
rename from Fit/Adapter/RootResidualFunction.h
rename to Fit/Residual/RootResidualFunction.h
index 65af33fdbf49a4c5a778cb54f8956a34a17697b1..9496b65d1cacdb0564850c24fe5d6673ea7e0c49 100644
--- a/Fit/Adapter/RootResidualFunction.h
+++ b/Fit/Residual/RootResidualFunction.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/RootResidualFunction.h
+//! @file      Fit/Residual/RootResidualFunction.h
 //! @brief     Declares class RootResidualFunction.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -15,8 +15,8 @@
 #ifdef SWIG
 #error no need to expose this header to Swig
 #endif // SWIG
-#ifndef BORNAGAIN_FIT_ADAPTER_ROOTRESIDUALFUNCTION_H
-#define BORNAGAIN_FIT_ADAPTER_ROOTRESIDUALFUNCTION_H
+#ifndef BORNAGAIN_FIT_RESIDUAL_ROOTRESIDUALFUNCTION_H
+#define BORNAGAIN_FIT_RESIDUAL_ROOTRESIDUALFUNCTION_H
 
 #include "Fit/Minimizer/Types.h"
 
@@ -58,4 +58,4 @@ private:
     size_t m_datasize;
 };
 
-#endif // BORNAGAIN_FIT_ADAPTER_ROOTRESIDUALFUNCTION_H
+#endif // BORNAGAIN_FIT_RESIDUAL_ROOTRESIDUALFUNCTION_H
diff --git a/Fit/Adapter/RootScalarFunction.cpp b/Fit/Residual/RootScalarFunction.cpp
similarity index 88%
rename from Fit/Adapter/RootScalarFunction.cpp
rename to Fit/Residual/RootScalarFunction.cpp
index a9c3ed8cc14aca790e4e35b4fda84a0569149d81..02719293b6a22a443d05ca88a35c37dc437393fa 100644
--- a/Fit/Adapter/RootScalarFunction.cpp
+++ b/Fit/Residual/RootScalarFunction.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/RootScalarFunction.cpp
+//! @file      Fit/Residual/RootScalarFunction.cpp
 //! @brief     Implements class RootScalarFunction
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -12,7 +12,7 @@
 //
 //  ************************************************************************************************
 
-#include "Fit/Adapter/RootScalarFunction.h"
+#include "Fit/Residual/RootScalarFunction.h"
 
 RootScalarFunction::RootScalarFunction(root_scalar_t fcn, int ndims)
     : ROOT::Math::Functor(fcn, static_cast<unsigned int>(ndims))
diff --git a/Fit/Adapter/RootScalarFunction.h b/Fit/Residual/RootScalarFunction.h
similarity index 83%
rename from Fit/Adapter/RootScalarFunction.h
rename to Fit/Residual/RootScalarFunction.h
index 4399bd8d8ade1e5fb2ace8b16ffee92f040ad1b0..9bd1fe0ced74db23f8bde584af95ced921a2695b 100644
--- a/Fit/Adapter/RootScalarFunction.h
+++ b/Fit/Residual/RootScalarFunction.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/RootScalarFunction.h
+//! @file      Fit/Residual/RootScalarFunction.h
 //! @brief     Defines classes RootScalarFunction
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -15,8 +15,8 @@
 #ifdef SWIG
 #error no need to expose this header to Swig
 #endif // SWIG
-#ifndef BORNAGAIN_FIT_ADAPTER_ROOTSCALARFUNCTION_H
-#define BORNAGAIN_FIT_ADAPTER_ROOTSCALARFUNCTION_H
+#ifndef BORNAGAIN_FIT_RESIDUAL_ROOTSCALARFUNCTION_H
+#define BORNAGAIN_FIT_RESIDUAL_ROOTSCALARFUNCTION_H
 
 #include "Fit/Minimizer/Types.h"
 
@@ -36,4 +36,4 @@ public:
     RootScalarFunction(root_scalar_t fcn, int ndims);
 };
 
-#endif // BORNAGAIN_FIT_ADAPTER_ROOTSCALARFUNCTION_H
+#endif // BORNAGAIN_FIT_RESIDUAL_ROOTSCALARFUNCTION_H
diff --git a/Fit/Adapter/ScalarFunctionAdapter.cpp b/Fit/Residual/ScalarFunctionAdapter.cpp
similarity index 89%
rename from Fit/Adapter/ScalarFunctionAdapter.cpp
rename to Fit/Residual/ScalarFunctionAdapter.cpp
index a5b030cec202a953036cf0f2f4c52146f2b95169..fa88a7cea19ec8d40bb24529bae09ed3e2815e1d 100644
--- a/Fit/Adapter/ScalarFunctionAdapter.cpp
+++ b/Fit/Residual/ScalarFunctionAdapter.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/ScalarFunctionAdapter.cpp
+//! @file      Fit/Residual/ScalarFunctionAdapter.cpp
 //! @brief     Defines class ScalarFunctionAdapter.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -12,9 +12,9 @@
 //
 //  ************************************************************************************************
 
-#include "Fit/Adapter/ScalarFunctionAdapter.h"
+#include "Fit/Residual/ScalarFunctionAdapter.h"
 
-#include "Fit/Adapter/RootScalarFunction.h"
+#include "Fit/Residual/RootScalarFunction.h"
 #include <utility>
 
 using namespace mumufit;
diff --git a/Fit/Adapter/ScalarFunctionAdapter.h b/Fit/Residual/ScalarFunctionAdapter.h
similarity index 85%
rename from Fit/Adapter/ScalarFunctionAdapter.h
rename to Fit/Residual/ScalarFunctionAdapter.h
index 0894995ec5d1bec8ed793ede2105168d6696644a..779c2fa6babec3b599528816eb3d80ded28b110e 100644
--- a/Fit/Adapter/ScalarFunctionAdapter.h
+++ b/Fit/Residual/ScalarFunctionAdapter.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/ScalarFunctionAdapter.h
+//! @file      Fit/Residual/ScalarFunctionAdapter.h
 //! @brief     Defines class ScalarFunctionAdapter.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -15,12 +15,12 @@
 #ifdef SWIG
 #error no need to expose this header to Swig
 #endif // SWIG
-#ifndef BORNAGAIN_FIT_ADAPTER_SCALARFUNCTIONADAPTER_H
-#define BORNAGAIN_FIT_ADAPTER_SCALARFUNCTIONADAPTER_H
+#ifndef BORNAGAIN_FIT_RESIDUAL_SCALARFUNCTIONADAPTER_H
+#define BORNAGAIN_FIT_RESIDUAL_SCALARFUNCTIONADAPTER_H
 
-#include "Fit/Adapter/IFunctionAdapter.h"
 #include "Fit/Minimizer/Types.h"
 #include "Fit/Param/Parameters.h"
+#include "Fit/Residual/IFunctionAdapter.h"
 #include <functional>
 #include <memory>
 #include <vector>
@@ -49,4 +49,4 @@ private:
 
 } // namespace mumufit
 
-#endif // BORNAGAIN_FIT_ADAPTER_SCALARFUNCTIONADAPTER_H
+#endif // BORNAGAIN_FIT_RESIDUAL_SCALARFUNCTIONADAPTER_H
diff --git a/Fit/Adapter/GSLLevenbergMarquardtMinimizer.cpp b/Fit/Suite/GSLLevenbergMarquardtMinimizer.cpp
similarity index 95%
rename from Fit/Adapter/GSLLevenbergMarquardtMinimizer.cpp
rename to Fit/Suite/GSLLevenbergMarquardtMinimizer.cpp
index b5528434723cf21c124f89f8a2c38d48f558cfd0..5fb21a1226b996ccaf635cb55fed0440a40030d2 100644
--- a/Fit/Adapter/GSLLevenbergMarquardtMinimizer.cpp
+++ b/Fit/Suite/GSLLevenbergMarquardtMinimizer.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/GSLLevenbergMarquardtMinimizer.cpp
+//! @file      Fit/Suite/GSLLevenbergMarquardtMinimizer.cpp
 //! @brief     Implements class GSLLevenbergMarquardtMinimizer.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -12,8 +12,8 @@
 //
 //  ************************************************************************************************
 
-#include "Fit/Adapter/GSLLevenbergMarquardtMinimizer.h"
-#include "Fit/Adapter/GSLMultiMinimizer.h"
+#include "Fit/Suite/GSLLevenbergMarquardtMinimizer.h"
+#include "Fit/Suite/GSLMultiMinimizer.h"
 #include "Fit/Tools/MinimizerUtil.h"
 #include "Fit/Tools/StringUtil.h"
 #include <stdexcept>
diff --git a/Fit/Adapter/GSLLevenbergMarquardtMinimizer.h b/Fit/Suite/GSLLevenbergMarquardtMinimizer.h
similarity index 89%
rename from Fit/Adapter/GSLLevenbergMarquardtMinimizer.h
rename to Fit/Suite/GSLLevenbergMarquardtMinimizer.h
index 2092e52305b0533b7c7b3bcdcb9f905f71ffb21e..80cca3613cfc2988e23b424aeb543ee7067281ea 100644
--- a/Fit/Adapter/GSLLevenbergMarquardtMinimizer.h
+++ b/Fit/Suite/GSLLevenbergMarquardtMinimizer.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/GSLLevenbergMarquardtMinimizer.h
+//! @file      Fit/Suite/GSLLevenbergMarquardtMinimizer.h
 //! @brief     Declares class GSLLevenbergMarquardtMinimizer.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -15,8 +15,8 @@
 #ifdef SWIG
 #error no need to expose this header to Swig
 #endif // SWIG
-#ifndef BORNAGAIN_FIT_ADAPTER_GSLLEVENBERGMARQUARDTMINIMIZER_H
-#define BORNAGAIN_FIT_ADAPTER_GSLLEVENBERGMARQUARDTMINIMIZER_H
+#ifndef BORNAGAIN_FIT_SUITE_GSLLEVENBERGMARQUARDTMINIMIZER_H
+#define BORNAGAIN_FIT_SUITE_GSLLEVENBERGMARQUARDTMINIMIZER_H
 
 #include "Fit/Adapter/MinimizerAdapter.h"
 
@@ -62,4 +62,4 @@ private:
     std::unique_ptr<ROOT::Math::GSLNLSMinimizer> m_gsl_minimizer;
 };
 
-#endif // BORNAGAIN_FIT_ADAPTER_GSLLEVENBERGMARQUARDTMINIMIZER_H
+#endif // BORNAGAIN_FIT_SUITE_GSLLEVENBERGMARQUARDTMINIMIZER_H
diff --git a/Fit/Adapter/GSLMultiMinimizer.cpp b/Fit/Suite/GSLMultiMinimizer.cpp
similarity index 95%
rename from Fit/Adapter/GSLMultiMinimizer.cpp
rename to Fit/Suite/GSLMultiMinimizer.cpp
index 1eb0680cffabf929615a244e8b4797c565d8da86..42e89c6e8b959ee4557180f07cc57c40b9d02693 100644
--- a/Fit/Adapter/GSLMultiMinimizer.cpp
+++ b/Fit/Suite/GSLMultiMinimizer.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/GSLMultiMinimizer.cpp
+//! @file      Fit/Suite/GSLMultiMinimizer.cpp
 //! @brief     Implements class GSLMultiMinimizer.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -12,7 +12,7 @@
 //
 //  ************************************************************************************************
 
-#include "Fit/Adapter/GSLMultiMinimizer.h"
+#include "Fit/Suite/GSLMultiMinimizer.h"
 #include "Fit/Tools/MinimizerUtil.h"
 #include <string>
 
diff --git a/Fit/Adapter/GSLMultiMinimizer.h b/Fit/Suite/GSLMultiMinimizer.h
similarity index 89%
rename from Fit/Adapter/GSLMultiMinimizer.h
rename to Fit/Suite/GSLMultiMinimizer.h
index 3dd78265ec74efaa24a25d3ea9f59ec2067d9a3a..6b3fbd717ccc8a90208b34b1339681c0a381a48c 100644
--- a/Fit/Adapter/GSLMultiMinimizer.h
+++ b/Fit/Suite/GSLMultiMinimizer.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/GSLMultiMinimizer.h
+//! @file      Fit/Suite/GSLMultiMinimizer.h
 //! @brief     Declares class GSLMultiMinimizer.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -15,8 +15,8 @@
 #ifdef SWIG
 #error no need to expose this header to Swig
 #endif // SWIG
-#ifndef BORNAGAIN_FIT_ADAPTER_GSLMULTIMINIMIZER_H
-#define BORNAGAIN_FIT_ADAPTER_GSLMULTIMINIMIZER_H
+#ifndef BORNAGAIN_FIT_SUITE_GSLMULTIMINIMIZER_H
+#define BORNAGAIN_FIT_SUITE_GSLMULTIMINIMIZER_H
 
 #include "Fit/Adapter/MinimizerAdapter.h"
 
@@ -52,4 +52,4 @@ private:
     std::unique_ptr<ROOT::Math::GSLMinimizer> m_gsl_minimizer;
 };
 
-#endif // BORNAGAIN_FIT_ADAPTER_GSLMULTIMINIMIZER_H
+#endif // BORNAGAIN_FIT_SUITE_GSLMULTIMINIMIZER_H
diff --git a/Fit/Adapter/GeneticMinimizer.cpp b/Fit/Suite/GeneticMinimizer.cpp
similarity index 97%
rename from Fit/Adapter/GeneticMinimizer.cpp
rename to Fit/Suite/GeneticMinimizer.cpp
index a97733e081a3a78c845a6e44ee8eb03928c2fba9..beba0a7e3e8da0287d82fcf8f8278dcc90d61f0f 100644
--- a/Fit/Adapter/GeneticMinimizer.cpp
+++ b/Fit/Suite/GeneticMinimizer.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/GeneticMinimizer.cpp
+//! @file      Fit/Suite/GeneticMinimizer.cpp
 //! @brief     Implements class GeneticMinimizer.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -12,7 +12,7 @@
 //
 //  ************************************************************************************************
 
-#include "Fit/Adapter/GeneticMinimizer.h"
+#include "Fit/Suite/GeneticMinimizer.h"
 #include <Math/GeneticMinimizer.h>
 
 namespace {
diff --git a/Fit/Adapter/GeneticMinimizer.h b/Fit/Suite/GeneticMinimizer.h
similarity index 91%
rename from Fit/Adapter/GeneticMinimizer.h
rename to Fit/Suite/GeneticMinimizer.h
index b4b9390a70fe9d0180c916cf5264cef3d8a75f1c..a488cb587127d05ed8c8fbd9074445a7aa0fcaab 100644
--- a/Fit/Adapter/GeneticMinimizer.h
+++ b/Fit/Suite/GeneticMinimizer.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/GeneticMinimizer.h
+//! @file      Fit/Suite/GeneticMinimizer.h
 //! @brief     Declares class GeneticMinimizer.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -15,8 +15,8 @@
 #ifdef SWIG
 #error no need to expose this header to Swig
 #endif // SWIG
-#ifndef BORNAGAIN_FIT_ADAPTER_GENETICMINIMIZER_H
-#define BORNAGAIN_FIT_ADAPTER_GENETICMINIMIZER_H
+#ifndef BORNAGAIN_FIT_SUITE_GENETICMINIMIZER_H
+#define BORNAGAIN_FIT_SUITE_GENETICMINIMIZER_H
 
 #include "Fit/Adapter/MinimizerAdapter.h"
 
@@ -69,4 +69,4 @@ private:
     std::unique_ptr<ROOT::Math::GeneticMinimizer> m_genetic_minimizer;
 };
 
-#endif // BORNAGAIN_FIT_ADAPTER_GENETICMINIMIZER_H
+#endif // BORNAGAIN_FIT_SUITE_GENETICMINIMIZER_H
diff --git a/Fit/Adapter/Minuit2Minimizer.cpp b/Fit/Suite/Minuit2Minimizer.cpp
similarity index 98%
rename from Fit/Adapter/Minuit2Minimizer.cpp
rename to Fit/Suite/Minuit2Minimizer.cpp
index dc7047c8519823af059088bed9796a0d04aa9c3b..1500c8253c6756e6eed4d9763a98de4651990c98 100644
--- a/Fit/Adapter/Minuit2Minimizer.cpp
+++ b/Fit/Suite/Minuit2Minimizer.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/Minuit2Minimizer.cpp
+//! @file      Fit/Suite/Minuit2Minimizer.cpp
 //! @brief     Declares class Minuit2Minimizer.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -12,7 +12,7 @@
 //
 //  ************************************************************************************************
 
-#include "Fit/Adapter/Minuit2Minimizer.h"
+#include "Fit/Suite/Minuit2Minimizer.h"
 #include "Fit/Tools/StringUtil.h"
 #include <Minuit2/Minuit2Minimizer.h>
 
diff --git a/Fit/Adapter/Minuit2Minimizer.h b/Fit/Suite/Minuit2Minimizer.h
similarity index 94%
rename from Fit/Adapter/Minuit2Minimizer.h
rename to Fit/Suite/Minuit2Minimizer.h
index 16cea376be5365c0b74cf43eea0247c9630fea1d..a2457cbd2371b74750f6e76f1637915317ee0c8a 100644
--- a/Fit/Adapter/Minuit2Minimizer.h
+++ b/Fit/Suite/Minuit2Minimizer.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/Minuit2Minimizer.h
+//! @file      Fit/Suite/Minuit2Minimizer.h
 //! @brief     Declares class Minuit2Minimizer.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -15,8 +15,8 @@
 #ifdef SWIG
 #error no need to expose this header to Swig
 #endif // SWIG
-#ifndef BORNAGAIN_FIT_ADAPTER_MINUIT2MINIMIZER_H
-#define BORNAGAIN_FIT_ADAPTER_MINUIT2MINIMIZER_H
+#ifndef BORNAGAIN_FIT_SUITE_MINUIT2MINIMIZER_H
+#define BORNAGAIN_FIT_SUITE_MINUIT2MINIMIZER_H
 
 #include "Fit/Adapter/MinimizerAdapter.h"
 #include <memory>
@@ -82,4 +82,4 @@ private:
     std::unique_ptr<ROOT::Minuit2::Minuit2Minimizer> m_minuit2_minimizer;
 };
 
-#endif // BORNAGAIN_FIT_ADAPTER_MINUIT2MINIMIZER_H
+#endif // BORNAGAIN_FIT_SUITE_MINUIT2MINIMIZER_H
diff --git a/Fit/Adapter/SimAnMinimizer.cpp b/Fit/Suite/SimAnMinimizer.cpp
similarity index 96%
rename from Fit/Adapter/SimAnMinimizer.cpp
rename to Fit/Suite/SimAnMinimizer.cpp
index d33c259a1a795e2db3f445ea1821bbb716b5ff42..b7c1ed616f116c47c95572d96cfd17dd57dd4672 100644
--- a/Fit/Adapter/SimAnMinimizer.cpp
+++ b/Fit/Suite/SimAnMinimizer.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/SimAnMinimizer.cpp
+//! @file      Fit/Suite/SimAnMinimizer.cpp
 //! @brief     Implements class SimAnMinimizer.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -12,8 +12,8 @@
 //
 //  ************************************************************************************************
 
-#include "Fit/Adapter/SimAnMinimizer.h"
-#include "Fit/Adapter/GSLMultiMinimizer.h"
+#include "Fit/Suite/SimAnMinimizer.h"
+#include "Fit/Suite/GSLMultiMinimizer.h"
 
 #ifdef _WIN32
 #pragma warning(push)
diff --git a/Fit/Adapter/SimAnMinimizer.h b/Fit/Suite/SimAnMinimizer.h
similarity index 92%
rename from Fit/Adapter/SimAnMinimizer.h
rename to Fit/Suite/SimAnMinimizer.h
index 0cd96315eddf7954aa64a13aae2f6f527dbac788..51dba37a7825f74534c15fe45ca13ebc1612f850 100644
--- a/Fit/Adapter/SimAnMinimizer.h
+++ b/Fit/Suite/SimAnMinimizer.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Fit/Adapter/SimAnMinimizer.h
+//! @file      Fit/Suite/SimAnMinimizer.h
 //! @brief     Declares class SimAnMinimizer.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -15,8 +15,8 @@
 #ifdef SWIG
 #error no need to expose this header to Swig
 #endif // SWIG
-#ifndef BORNAGAIN_FIT_ADAPTER_SIMANMINIMIZER_H
-#define BORNAGAIN_FIT_ADAPTER_SIMANMINIMIZER_H
+#ifndef BORNAGAIN_FIT_SUITE_SIMANMINIMIZER_H
+#define BORNAGAIN_FIT_SUITE_SIMANMINIMIZER_H
 
 #include "Fit/Adapter/MinimizerAdapter.h"
 
@@ -75,4 +75,4 @@ private:
     std::unique_ptr<ROOT::Math::GSLSimAnMinimizer> m_siman_minimizer;
 };
 
-#endif // BORNAGAIN_FIT_ADAPTER_SIMANMINIMIZER_H
+#endif // BORNAGAIN_FIT_SUITE_SIMANMINIMIZER_H
diff --git a/GUI/Model/Job/MinimizerItem.cpp b/GUI/Model/Job/MinimizerItem.cpp
index 83e5444bc99c8cd6df54f5e2b02253b6c5c1b2ac..28e506f69af08e53c7c03268072485a441379edd 100644
--- a/GUI/Model/Job/MinimizerItem.cpp
+++ b/GUI/Model/Job/MinimizerItem.cpp
@@ -14,11 +14,11 @@
 
 #include "GUI/Model/Job/MinimizerItem.h"
 #include "Base/Util/Assert.h"
-#include "Fit/Adapter/GSLLevenbergMarquardtMinimizer.h"
-#include "Fit/Adapter/GSLMultiMinimizer.h"
-#include "Fit/Adapter/GeneticMinimizer.h"
-#include "Fit/Adapter/Minuit2Minimizer.h"
-#include "Fit/Adapter/SimAnMinimizer.h"
+#include "Fit/Suite/GSLLevenbergMarquardtMinimizer.h"
+#include "Fit/Suite/GSLMultiMinimizer.h"
+#include "Fit/Suite/GeneticMinimizer.h"
+#include "Fit/Suite/Minuit2Minimizer.h"
+#include "Fit/Suite/SimAnMinimizer.h"
 #include "GUI/Model/Job/MinimizerItemCatalog.h"
 #include "GUI/Support/XML/UtilXML.h"
 #include "Sim/Fitting/ObjectiveMetric.h"
diff --git a/Sim/Fitting/FitObjective.cpp b/Sim/Fitting/FitObjective.cpp
index 48c5761ff84241953c2672c35fc14263b151cebd..8de498271eec2448d86dadc8b99a3cf0c3c1460a 100644
--- a/Sim/Fitting/FitObjective.cpp
+++ b/Sim/Fitting/FitObjective.cpp
@@ -373,12 +373,6 @@ bool FitObjective::allPairsHaveUncertainties() const
     return result;
 }
 
-//! Returns available metrics and norms
-std::string FitObjective::availableMetricOptions()
-{
-    return ObjectiveMetricUtil::availableMetricOptions();
-}
-
 std::vector<double> FitObjective::composeArray(DataPairAccessor getter) const
 {
     const size_t n_objs = m_fit_objects.size();
diff --git a/Sim/Fitting/FitObjective.h b/Sim/Fitting/FitObjective.h
index ec148ef86bcab5853514f15265a6fe702336c4fa..274bb6e44384d4cc468e12b411774f2fda47e965 100644
--- a/Sim/Fitting/FitObjective.h
+++ b/Sim/Fitting/FitObjective.h
@@ -27,11 +27,10 @@ class PyBuilderCallback;
 class PyObserverCallback;
 class SimDataPair;
 class SimulationResult;
-namespace mumufit {
 
+namespace mumufit {
 class MinimizerResult;
 class Parameters;
-
 } // namespace mumufit
 
 //! Holds vector of SimDataPair%s (experimental data and simulation results) for use in fitting.
@@ -112,8 +111,6 @@ public:
     bool containsUncertainties(size_t i_item) const;
     bool allPairsHaveUncertainties() const;
 
-    static std::string availableMetricOptions();
-
 #ifndef SWIG
     //! Returns a reference to i-th SimDataPair.
     const SimDataPair& dataPair(size_t i_item = 0) const;
diff --git a/Sim/Fitting/FitPrintService.cpp b/Sim/Fitting/FitPrintService.cpp
index 3b68dd508f85b99e04c85e61f4f0a45aec4d0246..bd04f4c5554439fd43462e9dd3f75ac748b4d988 100644
--- a/Sim/Fitting/FitPrintService.cpp
+++ b/Sim/Fitting/FitPrintService.cpp
@@ -21,22 +21,6 @@
 #include <iostream>
 #include <sstream>
 
-namespace {
-
-size_t length_of_longest_name(const mumufit::Parameters& params)
-{
-    size_t result(0);
-    for (const auto& par : params) {
-        if (par.name().size() > result)
-            result = par.name().size();
-    }
-    return result;
-}
-
-} // namespace
-
-FitPrintService::FitPrintService() = default;
-
 void FitPrintService::print(const FitObjective& objective)
 {
     std::ostringstream ostr;
@@ -47,7 +31,6 @@ void FitPrintService::print(const FitObjective& objective)
     }
 
     ostr << iterationHeaderString(objective);
-    ostr << wallTimeString();
     ostr << parameterString(objective);
 
     if (objective.isCompleted())
@@ -60,19 +43,9 @@ std::string FitPrintService::iterationHeaderString(const FitObjective& objective
 {
     std::ostringstream result;
 
-    result << "FitPrintService::update -> Info."
-           << " NCall:" << objective.iterationInfo().iterationCount() << " Chi2:" << std::scientific
-           << std::setprecision(8) << objective.iterationInfo().chi2() << "\n";
-
-    return result.str();
-}
-
-std::string FitPrintService::wallTimeString()
-{
-    std::ostringstream result;
-
     m_last_call_time.stop();
-    result << "Wall time since last call:" << std::fixed << std::setprecision(2)
+    result << "Fit iteration " << objective.iterationInfo().iterationCount() << " Chi2 "
+           << std::scientific << std::setprecision(8) << objective.iterationInfo().chi2() << " dt "
            << m_last_call_time.runTime() << "\n";
     m_last_call_time.start();
 
@@ -83,14 +56,10 @@ std::string FitPrintService::parameterString(const FitObjective& objective)
 {
     std::ostringstream result;
 
-    const auto params = objective.iterationInfo().parameters();
-    const auto length = length_of_longest_name(params);
-
-    for (const auto& par : params) {
-        result << Base::String::padRight(par.name(), length) << std::scientific
-               << std::setprecision(6) << "  " << par.startValue() << " " << par.limits().toString()
-               << "  " << par.value() << "\n";
-    }
+    result << "P";
+    for (const auto& par : objective.iterationInfo().parameters())
+        result << " " << std::scientific << std::setprecision(6) << par.value();
+    result << "\n";
 
     return result.str();
 }
diff --git a/Sim/Fitting/FitPrintService.h b/Sim/Fitting/FitPrintService.h
index c8493e9503cd0031f8a2181bf8e2f1106600c193..7555a6b80da542b7968159197fc40e21853aec0e 100644
--- a/Sim/Fitting/FitPrintService.h
+++ b/Sim/Fitting/FitPrintService.h
@@ -27,13 +27,10 @@ class FitObjective;
 
 class FitPrintService {
 public:
-    FitPrintService();
-
     void print(const FitObjective& objective);
 
 private:
     std::string iterationHeaderString(const FitObjective& objective);
-    std::string wallTimeString();
     std::string parameterString(const FitObjective& objective);
     std::string fitResultString(const FitObjective& objective);
 
diff --git a/Sim/Fitting/FitStatus.h b/Sim/Fitting/FitStatus.h
index a726b4bd2ed2ef09f351a832e2c14cdc88f6cf52..88efcc979db99bd5f7bab02e84f816e05c85930d 100644
--- a/Sim/Fitting/FitStatus.h
+++ b/Sim/Fitting/FitStatus.h
@@ -23,12 +23,11 @@
 #include <functional>
 #include <vector>
 
+class FitObjective;
+class FitPrintService;
 namespace mumufit {
-
 class MinimizerResult;
 }
-class FitObjective;
-class FitPrintService;
 
 //! Contains status of the fitting (running, interupted etc) and all intermediate
 //! information which has to be collected during the fit.
diff --git a/Sim/Fitting/FitTypes.h b/Sim/Fitting/FitTypes.h
index 9d252fc9974373b0a33636f5c7deac20a7ad4e0c..21ca33557dfc4ff58dbd80f97ad58640c0f17370 100644
--- a/Sim/Fitting/FitTypes.h
+++ b/Sim/Fitting/FitTypes.h
@@ -22,11 +22,11 @@
 #include <memory>
 
 class ISimulation;
-namespace mumufit {
+class FitObjective;
 
+namespace mumufit {
 class Parameters;
 }
-class FitObjective;
 
 using simulation_builder_t =
     std::function<std::unique_ptr<ISimulation>(const mumufit::Parameters&)>;
diff --git a/Tests/Examples/CMakeLists.txt b/Tests/Examples/CMakeLists.txt
index 0e7ce06bf7ba7f61ce9aaf5bafff0ce2813bd1bd..695b7ec09f9883c452f487e6a524b7ccde8508b9 100644
--- a/Tests/Examples/CMakeLists.txt
+++ b/Tests/Examples/CMakeLists.txt
@@ -201,7 +201,7 @@ run_example(varia/MaterialProfileWithParticles)
 run_plotless(fit/algo/fit_rosenbrock)
 run_plotless(fit/scatter2d/fit2d)
 run_plotless(fit/scatter2d/custom_objective_function)
-run_example(fit/specular/FitSpecularBasics)
+run_example(fit/specular/Specular1Par)
 run_manually(fit/specular/Pt_layer_fit)
 run_manually(fit/specular/Honeycomb_fit)
 # TODO restore (needs ParameterDistribution) # run_plotless(fit/scatter2d/expfit_galaxi)
diff --git a/Tests/Unit/Fit/MinimizerOptionsTest.cpp b/Tests/Unit/Fit/MinimizerOptionsTest.cpp
index 65c8db931ea84b3e32a325d73148b1cd1422b166..175d0499d2351e2cc7fd4c10a1c0fab7ba1b1a3c 100644
--- a/Tests/Unit/Fit/MinimizerOptionsTest.cpp
+++ b/Tests/Unit/Fit/MinimizerOptionsTest.cpp
@@ -1,4 +1,4 @@
-#include "Fit/Minimizer/MinimizerOptions.h"
+#include "Fit/Option/MinimizerOptions.h"
 #include "Tests/GTestWrapper/google_test.h"
 #include <exception>
 
diff --git a/Tests/Unit/Fit/MultiOptionTest.cpp b/Tests/Unit/Fit/MultiOptionTest.cpp
index b8fcf9d4f20885b6bc04f2ab762b6b737350cabf..35c670cb5e02242493d8aeb78bf65e588aa88460 100644
--- a/Tests/Unit/Fit/MultiOptionTest.cpp
+++ b/Tests/Unit/Fit/MultiOptionTest.cpp
@@ -1,4 +1,4 @@
-#include "Fit/Tools/MultiOption.h"
+#include "Fit/Option/MultiOption.h"
 #include "Tests/GTestWrapper/google_test.h"
 #include <string>
 
diff --git a/Tests/Unit/Fit/OptionContainerTest.cpp b/Tests/Unit/Fit/OptionContainerTest.cpp
index b8f630567936a87dcb39b8314c654af6bbab2823..878a6ba8b5fcb47eef06e4b004e8881f0000b645 100644
--- a/Tests/Unit/Fit/OptionContainerTest.cpp
+++ b/Tests/Unit/Fit/OptionContainerTest.cpp
@@ -1,4 +1,4 @@
-#include "Fit/Tools/OptionContainer.h"
+#include "Fit/Option/OptionContainer.h"
 #include "Tests/GTestWrapper/google_test.h"
 #include <exception>
 
diff --git a/Wrap/Python/ba_fitmonitor.py b/Wrap/Python/ba_fitmonitor.py
index e479b4d66faadbb7969a10e3dc39710e9fefb647..2c2c92fd053d42f432f8451b649962063eb341aa 100644
--- a/Wrap/Python/ba_fitmonitor.py
+++ b/Wrap/Python/ba_fitmonitor.py
@@ -145,8 +145,9 @@ class PlotterSpecular:
     Draws fit progress, for specular simulation.
     """
 
-    def __init__(self, units=ba.Coords_UNDEFINED):
+    def __init__(self, units=ba.Coords_UNDEFINED, pause=0.0):
         self.units = units
+        self.pause = pause
         self._fig = plt.figure(figsize=(10, 7))
         self._fig.canvas.draw()
 
@@ -191,4 +192,8 @@ class PlotterSpecular:
         plt.xlabel(xlabel, fontdict=font)
         plt.ylabel("Intensity", fontdict=font)
         if bp.do_show:
-            plt.pause(0.3)
+            plt.pause(self.pause)
+
+    def show(self):
+        if bp.do_show:
+            plt.show()
diff --git a/auto/Examples/fit/specular/FitSpecularBasics.py b/auto/Examples/fit/specular/Specular1Par.py
similarity index 77%
rename from auto/Examples/fit/specular/FitSpecularBasics.py
rename to auto/Examples/fit/specular/Specular1Par.py
index 92077530a8e5651e71d5fa740dce1b5f6a8aabc7..a9347c473d1299f95601b31402a96f43c4afbaba 100755
--- a/auto/Examples/fit/specular/FitSpecularBasics.py
+++ b/auto/Examples/fit/specular/Specular1Par.py
@@ -14,22 +14,33 @@ import bornagain as ba
 from bornagain import angstrom, ba_fitmonitor
 
 
+def load_data():
+    datadir = os.getenv('BA_DATA_DIR', '')
+    data_fname = os.path.join(datadir, "genx_alternating_layers.dat.gz")
+
+    expdata = np.loadtxt(data_fname, usecols=(0, 1), skiprows=3)
+    # convert double incident angle (degs) to incident angle (radians)
+    expdata[:, 0] *= np.pi/360
+
+    return (expdata[:, 0], expdata[:, 1])
+
+
 def get_sample(P):
     # Materials
     vacuum = ba.MaterialBySLD()
-    material_Ni = ba.MaterialBySLD("Ni", 9.4245e-06, 0)
     material_Ti = ba.MaterialBySLD("Ti", -1.9493e-06, 0)
-    material_Si = ba.MaterialBySLD("SiSubstrate", 2.0704e-06, 0)
+    material_Ni = ba.MaterialBySLD("Ni", 9.4245e-06, 0)
+    material_Si = ba.MaterialBySLD("Si", 2.0704e-06, 0)
 
     # Multilayer
-    ni_layer = ba.Layer(material_Ni, 70*angstrom)
-    ti_layer = ba.Layer(material_Ti, P["ti_thickness"])
+    layer_Ti = ba.Layer(material_Ti, P["thickness_Ti"])
+    layer_Ni = ba.Layer(material_Ni, 70*angstrom)
 
     sample = ba.MultiLayer()
     sample.addLayer(ba.Layer(vacuum))
     for _ in range(10):
-        sample.addLayer(ti_layer)
-        sample.addLayer(ni_layer)
+        sample.addLayer(layer_Ti)
+        sample.addLayer(layer_Ni)
     sample.addLayer(ba.Layer(material_Si))
 
     return sample
@@ -44,31 +55,22 @@ def get_simulation(P):
 
 
 if __name__ == '__main__':
-    datadir = os.getenv('BA_DATA_DIR', '')
-    data_fname = os.path.join(datadir, "genx_alternating_layers.dat.gz")
-
-    expdata = np.loadtxt(data_fname, usecols=(0, 1), skiprows=3)
-    # convert double incident angle (degs) to incident angle (radians)
-    expdata[:, 0] *= np.pi/360
-
     global exp_x
-    exp_x = expdata[:, 0]
-    exp_y = expdata[:, 1]
+    exp_x, exp_y = load_data()
 
     fit_objective = ba.FitObjective()
     fit_objective.addSimulationAndData(get_simulation, exp_y, 1)
 
-    plot_observer = ba_fitmonitor.PlotterSpecular()
+    plot_observer = ba_fitmonitor.PlotterSpecular(pause=0.5)
     fit_objective.initPrint(10)
     fit_objective.initPlot(10, plot_observer)
 
     P = ba.Parameters()
-    P.add("ti_thickness", 50*angstrom, min=10*angstrom, max=60*angstrom)
+    P.add("thickness_Ti", 50*angstrom, min=10*angstrom, max=60*angstrom)
 
     minimizer = ba.Minimizer()
     result = minimizer.minimize(fit_objective.evaluate, P)
 
     fit_objective.finalize(result)
 
-    if ba.ba_plot.do_show:
-        plt.show()
+    plot_observer.show()
diff --git a/auto/MiniExamples/fit/specular/FitSpecularBasics.py b/auto/MiniExamples/fit/specular/Specular1Par.py
similarity index 77%
rename from auto/MiniExamples/fit/specular/FitSpecularBasics.py
rename to auto/MiniExamples/fit/specular/Specular1Par.py
index 92077530a8e5651e71d5fa740dce1b5f6a8aabc7..a9347c473d1299f95601b31402a96f43c4afbaba 100755
--- a/auto/MiniExamples/fit/specular/FitSpecularBasics.py
+++ b/auto/MiniExamples/fit/specular/Specular1Par.py
@@ -14,22 +14,33 @@ import bornagain as ba
 from bornagain import angstrom, ba_fitmonitor
 
 
+def load_data():
+    datadir = os.getenv('BA_DATA_DIR', '')
+    data_fname = os.path.join(datadir, "genx_alternating_layers.dat.gz")
+
+    expdata = np.loadtxt(data_fname, usecols=(0, 1), skiprows=3)
+    # convert double incident angle (degs) to incident angle (radians)
+    expdata[:, 0] *= np.pi/360
+
+    return (expdata[:, 0], expdata[:, 1])
+
+
 def get_sample(P):
     # Materials
     vacuum = ba.MaterialBySLD()
-    material_Ni = ba.MaterialBySLD("Ni", 9.4245e-06, 0)
     material_Ti = ba.MaterialBySLD("Ti", -1.9493e-06, 0)
-    material_Si = ba.MaterialBySLD("SiSubstrate", 2.0704e-06, 0)
+    material_Ni = ba.MaterialBySLD("Ni", 9.4245e-06, 0)
+    material_Si = ba.MaterialBySLD("Si", 2.0704e-06, 0)
 
     # Multilayer
-    ni_layer = ba.Layer(material_Ni, 70*angstrom)
-    ti_layer = ba.Layer(material_Ti, P["ti_thickness"])
+    layer_Ti = ba.Layer(material_Ti, P["thickness_Ti"])
+    layer_Ni = ba.Layer(material_Ni, 70*angstrom)
 
     sample = ba.MultiLayer()
     sample.addLayer(ba.Layer(vacuum))
     for _ in range(10):
-        sample.addLayer(ti_layer)
-        sample.addLayer(ni_layer)
+        sample.addLayer(layer_Ti)
+        sample.addLayer(layer_Ni)
     sample.addLayer(ba.Layer(material_Si))
 
     return sample
@@ -44,31 +55,22 @@ def get_simulation(P):
 
 
 if __name__ == '__main__':
-    datadir = os.getenv('BA_DATA_DIR', '')
-    data_fname = os.path.join(datadir, "genx_alternating_layers.dat.gz")
-
-    expdata = np.loadtxt(data_fname, usecols=(0, 1), skiprows=3)
-    # convert double incident angle (degs) to incident angle (radians)
-    expdata[:, 0] *= np.pi/360
-
     global exp_x
-    exp_x = expdata[:, 0]
-    exp_y = expdata[:, 1]
+    exp_x, exp_y = load_data()
 
     fit_objective = ba.FitObjective()
     fit_objective.addSimulationAndData(get_simulation, exp_y, 1)
 
-    plot_observer = ba_fitmonitor.PlotterSpecular()
+    plot_observer = ba_fitmonitor.PlotterSpecular(pause=0.5)
     fit_objective.initPrint(10)
     fit_objective.initPlot(10, plot_observer)
 
     P = ba.Parameters()
-    P.add("ti_thickness", 50*angstrom, min=10*angstrom, max=60*angstrom)
+    P.add("thickness_Ti", 50*angstrom, min=10*angstrom, max=60*angstrom)
 
     minimizer = ba.Minimizer()
     result = minimizer.minimize(fit_objective.evaluate, P)
 
     fit_objective.finalize(result)
 
-    if ba.ba_plot.do_show:
-        plt.show()
+    plot_observer.show()
diff --git a/auto/Wrap/libBornAgainSim.py b/auto/Wrap/libBornAgainSim.py
index 13bd329ffdc6584268e18a696a39b5f92c12b793..0ed39a6320fb8947cc0463446fa154abdde7ec7f 100644
--- a/auto/Wrap/libBornAgainSim.py
+++ b/auto/Wrap/libBornAgainSim.py
@@ -2434,11 +2434,6 @@ class FitObjective(object):
         r"""allPairsHaveUncertainties_cpp(FitObjective self) -> bool"""
         return _libBornAgainSim.FitObjective_allPairsHaveUncertainties_cpp(self)
 
-    @staticmethod
-    def availableMetricOptions():
-        r"""availableMetricOptions() -> std::string"""
-        return _libBornAgainSim.FitObjective_availableMetricOptions()
-
     def addSimulationAndData(self, callback, data, *args, **kwargs):
         """
         Sets simulation and experimental data to the fit objective.
diff --git a/auto/Wrap/libBornAgainSim_wrap.cpp b/auto/Wrap/libBornAgainSim_wrap.cpp
index 1c66c8dbf1ac7ea7e0b8e10be7223c413d03536a..3bc782622b103b6733f0819bb2471920f16d233d 100644
--- a/auto/Wrap/libBornAgainSim_wrap.cpp
+++ b/auto/Wrap/libBornAgainSim_wrap.cpp
@@ -31856,19 +31856,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_FitObjective_availableMetricOptions(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  std::string result;
-  
-  if (!SWIG_Python_UnpackTuple(args, "FitObjective_availableMetricOptions", 0, 0, 0)) SWIG_fail;
-  result = FitObjective::availableMetricOptions();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_disown_FitObjective(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   FitObjective *arg1 = (FitObjective *) 0 ;
@@ -36295,7 +36282,6 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FitObjective_containsUncertainties_cpp", _wrap_FitObjective_containsUncertainties_cpp, METH_VARARGS, "FitObjective_containsUncertainties_cpp(FitObjective self, size_t i_item) -> bool"},
 	 { "FitObjective_allPairsHaveUncertainties_cpp", _wrap_FitObjective_allPairsHaveUncertainties_cpp, METH_O, "FitObjective_allPairsHaveUncertainties_cpp(FitObjective self) -> bool"},
-	 { "FitObjective_availableMetricOptions", _wrap_FitObjective_availableMetricOptions, METH_NOARGS, "FitObjective_availableMetricOptions() -> std::string"},
 	 { "disown_FitObjective", _wrap_disown_FitObjective, METH_O, NULL},
 	 { "FitObjective_swigregister", FitObjective_swigregister, METH_O, NULL},
 	 { "FitObjective_swiginit", FitObjective_swiginit, METH_VARARGS, NULL},
diff --git a/hugo/content/py/fit/extended/fit-specular-data/index.md b/hugo/content/py/fit/extended/fit-specular-data/index.md
index dc153925aa7e7f1ada2f566f42c95009c62f3380..85010d2b63a58c94198c1a072f14faceb0113725 100644
--- a/hugo/content/py/fit/extended/fit-specular-data/index.md
+++ b/hugo/content/py/fit/extended/fit-specular-data/index.md
@@ -14,7 +14,7 @@ layers. The reference data was obtained under the following assumptions:
 * Thickness value was $3 \, nm$
 
 {{< galleryscg >}}
-{{< figscg src="/files/fitted/FitSpecularBasics.png" width="600px" caption="Fit window">}}
+{{< figscg src="/files/fitted/Specular1Par.png" width="600px" caption="Fit window">}}
 {{< /galleryscg >}}
 
 The fit view produced by running the fitting script is shown in the picture.
@@ -44,6 +44,6 @@ in the BornAgain directory.
 
 ### Complete script and data
 
-{{< show-ex file="fit/specular/FitSpecularBasics.py" >}}
+{{< show-ex file="fit/specular/Specular1Par.py" >}}
 
 Data to be fitted: {{% ref-ex "data/genx_interchanging_layers.dat.gz" %}}
diff --git a/rawEx/fit/specular/FitSpecularBasics.py b/rawEx/fit/specular/Specular1Par.py
similarity index 77%
rename from rawEx/fit/specular/FitSpecularBasics.py
rename to rawEx/fit/specular/Specular1Par.py
index 92077530a8e5651e71d5fa740dce1b5f6a8aabc7..a9347c473d1299f95601b31402a96f43c4afbaba 100755
--- a/rawEx/fit/specular/FitSpecularBasics.py
+++ b/rawEx/fit/specular/Specular1Par.py
@@ -14,22 +14,33 @@ import bornagain as ba
 from bornagain import angstrom, ba_fitmonitor
 
 
+def load_data():
+    datadir = os.getenv('BA_DATA_DIR', '')
+    data_fname = os.path.join(datadir, "genx_alternating_layers.dat.gz")
+
+    expdata = np.loadtxt(data_fname, usecols=(0, 1), skiprows=3)
+    # convert double incident angle (degs) to incident angle (radians)
+    expdata[:, 0] *= np.pi/360
+
+    return (expdata[:, 0], expdata[:, 1])
+
+
 def get_sample(P):
     # Materials
     vacuum = ba.MaterialBySLD()
-    material_Ni = ba.MaterialBySLD("Ni", 9.4245e-06, 0)
     material_Ti = ba.MaterialBySLD("Ti", -1.9493e-06, 0)
-    material_Si = ba.MaterialBySLD("SiSubstrate", 2.0704e-06, 0)
+    material_Ni = ba.MaterialBySLD("Ni", 9.4245e-06, 0)
+    material_Si = ba.MaterialBySLD("Si", 2.0704e-06, 0)
 
     # Multilayer
-    ni_layer = ba.Layer(material_Ni, 70*angstrom)
-    ti_layer = ba.Layer(material_Ti, P["ti_thickness"])
+    layer_Ti = ba.Layer(material_Ti, P["thickness_Ti"])
+    layer_Ni = ba.Layer(material_Ni, 70*angstrom)
 
     sample = ba.MultiLayer()
     sample.addLayer(ba.Layer(vacuum))
     for _ in range(10):
-        sample.addLayer(ti_layer)
-        sample.addLayer(ni_layer)
+        sample.addLayer(layer_Ti)
+        sample.addLayer(layer_Ni)
     sample.addLayer(ba.Layer(material_Si))
 
     return sample
@@ -44,31 +55,22 @@ def get_simulation(P):
 
 
 if __name__ == '__main__':
-    datadir = os.getenv('BA_DATA_DIR', '')
-    data_fname = os.path.join(datadir, "genx_alternating_layers.dat.gz")
-
-    expdata = np.loadtxt(data_fname, usecols=(0, 1), skiprows=3)
-    # convert double incident angle (degs) to incident angle (radians)
-    expdata[:, 0] *= np.pi/360
-
     global exp_x
-    exp_x = expdata[:, 0]
-    exp_y = expdata[:, 1]
+    exp_x, exp_y = load_data()
 
     fit_objective = ba.FitObjective()
     fit_objective.addSimulationAndData(get_simulation, exp_y, 1)
 
-    plot_observer = ba_fitmonitor.PlotterSpecular()
+    plot_observer = ba_fitmonitor.PlotterSpecular(pause=0.5)
     fit_objective.initPrint(10)
     fit_objective.initPlot(10, plot_observer)
 
     P = ba.Parameters()
-    P.add("ti_thickness", 50*angstrom, min=10*angstrom, max=60*angstrom)
+    P.add("thickness_Ti", 50*angstrom, min=10*angstrom, max=60*angstrom)
 
     minimizer = ba.Minimizer()
     result = minimizer.minimize(fit_objective.evaluate, P)
 
     fit_objective.finalize(result)
 
-    if ba.ba_plot.do_show:
-        plt.show()
+    plot_observer.show()