diff --git a/GUI/Model/Fit/MinimizerItem.cpp b/GUI/Model/Fit/MinimizerItem.cpp
index 284db396da020a405821a10a8e74fbbaf006a523..2a531e4b71a1e5489995e5204310e270e0354831 100644
--- a/GUI/Model/Fit/MinimizerItem.cpp
+++ b/GUI/Model/Fit/MinimizerItem.cpp
@@ -68,6 +68,21 @@ MinimizerContainerItem::MinimizerContainerItem() : MinimizerItem(M_TYPE)
                      "experimental data.");
 }
 
+SelectionDescriptor<MinimizerItem*> MinimizerContainerItem::minimizers() const
+{
+    return SelectionDescriptor<MinimizerItem*>(item<GroupItem>(P_MINIMIZERS));
+}
+
+SelectionDescriptor<QString> MinimizerContainerItem::normFunction() const
+{
+    return SelectionDescriptor<QString>(getItem(P_NORM));
+}
+
+SelectionDescriptor<QString> MinimizerContainerItem::objectiveMetric() const
+{
+    return SelectionDescriptor<QString>(getItem(P_METRIC));
+}
+
 std::unique_ptr<IMinimizer> MinimizerContainerItem::createMinimizer() const
 {
     return groupItem<MinimizerItem>(P_MINIMIZERS).createMinimizer();
@@ -116,6 +131,18 @@ std::unique_ptr<IMinimizer> MinuitMinimizerItem::createMinimizer() const
     return std::unique_ptr<IMinimizer>(domainMinimizer);
 }
 
+ValueDescriptors MinuitMinimizerItem::valueDescriptorsForUI() const
+{
+    return {
+        SelectionDescriptor<QString>(getItem(P_ALGORITHMS)),
+        UIntDescriptor(getItem(P_STRATEGY), Unit::unitless),
+        DoubleDescriptor(getItem(P_ERRORDEF), Unit::unitless),
+        DoubleDescriptor(getItem(P_TOLERANCE), Unit::unitless),
+        DoubleDescriptor(getItem(P_PRECISION), Unit::unitless),
+        UIntDescriptor(getItem(P_MAXFUNCTIONCALLS), Unit::unitless),
+    };
+}
+
 // ----------------------------------------------------------------------------
 
 GSLMultiMinimizerItem::GSLMultiMinimizerItem() : MinimizerItem(M_TYPE)
@@ -133,6 +160,14 @@ std::unique_ptr<IMinimizer> GSLMultiMinimizerItem::createMinimizer() const
     return std::unique_ptr<IMinimizer>(domainMinimizer);
 }
 
+ValueDescriptors GSLMultiMinimizerItem::valueDescriptorsForUI() const
+{
+    return {
+        SelectionDescriptor<QString>(getItem(P_ALGORITHMS)),
+        UIntDescriptor(getItem(P_MAXITERATIONS), Unit::unitless),
+    };
+}
+
 // ----------------------------------------------------------------------------
 
 GeneticMinimizerItem::GeneticMinimizerItem() : MinimizerItem(M_TYPE)
@@ -153,6 +188,16 @@ std::unique_ptr<IMinimizer> GeneticMinimizerItem::createMinimizer() const
     return std::unique_ptr<IMinimizer>(domainMinimizer);
 }
 
+ValueDescriptors GeneticMinimizerItem::valueDescriptorsForUI() const
+{
+    return {
+        DoubleDescriptor(getItem(P_TOLERANCE), Unit::unitless),
+        UIntDescriptor(getItem(P_MAXITERATIONS), Unit::unitless),
+        UIntDescriptor(getItem(P_POPULATIONSIZE), Unit::unitless),
+        UIntDescriptor(getItem(P_RANDOMSEED), Unit::unitless),
+    };
+}
+
 // ----------------------------------------------------------------------------
 
 SimAnMinimizerItem::SimAnMinimizerItem() : MinimizerItem(M_TYPE)
@@ -179,6 +224,19 @@ std::unique_ptr<IMinimizer> SimAnMinimizerItem::createMinimizer() const
     return std::unique_ptr<IMinimizer>(domainMinimizer);
 }
 
+ValueDescriptors SimAnMinimizerItem::valueDescriptorsForUI() const
+{
+    return {
+        UIntDescriptor(getItem(P_MAXITERATIONS), Unit::unitless),
+        UIntDescriptor(getItem(P_ITERATIONSTEMP), Unit::unitless),
+        DoubleDescriptor(getItem(P_STEPSIZE), Unit::unitless),
+        DoubleDescriptor(getItem(P_BOLTZMANN_K), Unit::unitless),
+        DoubleDescriptor(getItem(P_BOLTZMANN_TINIT), Unit::unitless),
+        DoubleDescriptor(getItem(P_BOLTZMANN_MU), Unit::unitless),
+        DoubleDescriptor(getItem(P_BOLTZMANN_TMIN), Unit::unitless),
+    };
+}
+
 // ----------------------------------------------------------------------------
 
 GSLLMAMinimizerItem::GSLLMAMinimizerItem() : MinimizerItem(M_TYPE)
@@ -195,6 +253,14 @@ std::unique_ptr<IMinimizer> GSLLMAMinimizerItem::createMinimizer() const
     return std::unique_ptr<IMinimizer>(domainMinimizer);
 }
 
+ValueDescriptors GSLLMAMinimizerItem::valueDescriptorsForUI() const
+{
+    return {
+        DoubleDescriptor(getItem(P_TOLERANCE), Unit::unitless),
+        UIntDescriptor(getItem(P_MAXITERATIONS), Unit::unitless),
+    };
+}
+
 // ----------------------------------------------------------------------------
 
 TestMinimizerItem::TestMinimizerItem() : MinimizerItem(M_TYPE) {}
diff --git a/GUI/Model/Fit/MinimizerItem.h b/GUI/Model/Fit/MinimizerItem.h
index 2eb74b3af68ab8d7333fd1d3707a93058485cc82..e808027564785af09ed3c6f35121daf517bc1707 100644
--- a/GUI/Model/Fit/MinimizerItem.h
+++ b/GUI/Model/Fit/MinimizerItem.h
@@ -15,17 +15,26 @@
 #ifndef BORNAGAIN_GUI_MODEL_FIT_MINIMIZERITEM_H
 #define BORNAGAIN_GUI_MODEL_FIT_MINIMIZERITEM_H
 
+#include "GUI/Model/Group/SelectionDescriptor.h"
 #include "GUI/Model/Session/SessionItem.h"
+#include "GUI/Model/Types/DoubleDescriptor.h"
+#include "GUI/Model/Types/UIntDescriptor.h"
+#include <variant>
 
 class IMinimizer;
 class ObjectiveMetric;
 
+using ValueDescriptors =
+    QList<std::variant<DoubleDescriptor, UIntDescriptor, SelectionDescriptor<QString>>>;
+
 //! The MinimizerItem class is the base item to hold minimizer settings.
 
 class BA_CORE_API_ MinimizerItem : public SessionItem {
 public:
     virtual std::unique_ptr<IMinimizer> createMinimizer() const = 0;
 
+    virtual ValueDescriptors valueDescriptorsForUI() const { return {}; }
+
 protected:
     explicit MinimizerItem(const QString& model_type);
 };
@@ -43,6 +52,10 @@ public:
 
     MinimizerContainerItem();
 
+    SelectionDescriptor<MinimizerItem*> minimizers() const;
+    SelectionDescriptor<QString> normFunction() const;
+    SelectionDescriptor<QString> objectiveMetric() const;
+
     std::unique_ptr<IMinimizer> createMinimizer() const override;
     std::unique_ptr<ObjectiveMetric> createMetric() const;
 };
@@ -63,6 +76,7 @@ public:
 
     MinuitMinimizerItem();
     std::unique_ptr<IMinimizer> createMinimizer() const override;
+    ValueDescriptors valueDescriptorsForUI() const override;
 };
 
 //! The GSLMinimizerItem class represents settings for GSL MultiMin minimizer family.
@@ -77,6 +91,7 @@ public:
 
     GSLMultiMinimizerItem();
     std::unique_ptr<IMinimizer> createMinimizer() const override;
+    ValueDescriptors valueDescriptorsForUI() const override;
 };
 
 //! The GeneticMinimizerItem class represents settings for TMVA/Genetic minimizer.
@@ -93,6 +108,7 @@ public:
 
     GeneticMinimizerItem();
     std::unique_ptr<IMinimizer> createMinimizer() const override;
+    ValueDescriptors valueDescriptorsForUI() const override;
 };
 
 //! The SimAnMinimizerItem class represents settings for GSL's simulated annealing minimizer.
@@ -113,6 +129,7 @@ public:
     SimAnMinimizerItem();
 
     std::unique_ptr<IMinimizer> createMinimizer() const override;
+    ValueDescriptors valueDescriptorsForUI() const override;
 };
 
 //! The GSLLMAMinimizerItem class represents settings for GSL's version of Levenberg-Marquardt.
@@ -127,6 +144,7 @@ public:
 
     GSLLMAMinimizerItem();
     std::unique_ptr<IMinimizer> createMinimizer() const override;
+    ValueDescriptors valueDescriptorsForUI() const override;
 };
 
 //! The TestMinimizerItem class represents domain's TestMinimizer to test whole chain