diff --git a/Fit/NewKernel/Kernel.cpp b/Fit/NewKernel/Kernel.cpp
index 1fafa52ac1bd7a10bd2c0bda34cd6f2b78b9b63c..cd8539f7d03f449fb7bec91e82edcd27d600c554 100644
--- a/Fit/NewKernel/Kernel.cpp
+++ b/Fit/NewKernel/Kernel.cpp
@@ -30,9 +30,10 @@ Kernel::Kernel()
 
 Kernel::~Kernel() = default;
 
-void Kernel::setMinimizer(const std::string& minimizerName, const std::string& algorithmName)
+void Kernel::setMinimizer(const std::string& minimizerName, const std::string& algorithmName,
+                          const std::string& options)
 {
-    m_minimizer.reset(MinimizerFactory::createMinimizer(minimizerName, algorithmName));
+    m_minimizer.reset(MinimizerFactory::createMinimizer(minimizerName, algorithmName, options));
 }
 
 MinimizerResult Kernel::minimize(fcn_scalar_t fcn, const Parameters& parameters)
diff --git a/Fit/NewKernel/Kernel.h b/Fit/NewKernel/Kernel.h
index d79df2b2c076cf4ac3d3bf3a711f7c990399fd72..c2bc1c8419eb635301dd07b44547744a7179d056 100644
--- a/Fit/NewKernel/Kernel.h
+++ b/Fit/NewKernel/Kernel.h
@@ -36,7 +36,8 @@ public:
     Kernel();
     ~Kernel();
 
-    void setMinimizer(const std::string& minimizerName, const std::string& algorithmName = "");
+    void setMinimizer(const std::string& minimizerName, const std::string& algorithmName = "",
+                      const std::string& options = "");
 
     MinimizerResult minimize(fcn_scalar_t fcn, const Parameters& parameters);
 
diff --git a/Fit/NewKernel/Minimizer.cpp b/Fit/NewKernel/Minimizer.cpp
index 6b2b915f7c993e300868e143e20300fb2380a8ea..38fa70e19dbc67a65b4687b1282382256668fc3a 100644
--- a/Fit/NewKernel/Minimizer.cpp
+++ b/Fit/NewKernel/Minimizer.cpp
@@ -23,6 +23,12 @@ Minimizer::Minimizer()
 
 }
 
+void Minimizer::setMinimizer(const std::string& minimizerName, const std::string& algorithmName,
+                             const std::string& options)
+{
+    m_kernel->setMinimizer(minimizerName, algorithmName, options);
+}
+
 Minimizer::~Minimizer() = default;
 
 MinimizerResult Minimizer::minimize(fcn_scalar_t fcn,
diff --git a/Fit/NewKernel/Minimizer.h b/Fit/NewKernel/Minimizer.h
index 86b2b0fe586ac43e6fb58bfde14acc8c3b333542..38cd64233f1e751a62287ad82d1b7ad808393c54 100644
--- a/Fit/NewKernel/Minimizer.h
+++ b/Fit/NewKernel/Minimizer.h
@@ -21,6 +21,7 @@
 #include "MinimizerResult.h"
 #include <functional>
 #include <vector>
+#include <string>
 #include <memory>
 
 namespace Fit {
@@ -36,6 +37,9 @@ public:
     Minimizer();
     ~Minimizer();
 
+    void setMinimizer(const std::string& minimizerName, const std::string& algorithmName = "",
+                      const std::string& options = "");
+
     MinimizerResult minimize(fcn_scalar_t fcn, const Parameters& parameters);
 
 private:
diff --git a/Tests/Functional/Fit/Minimizer/MinimizerTest.cpp b/Tests/Functional/Fit/Minimizer/MinimizerTest.cpp
index de429293bbd862c44e67b35e43cd638379e6998c..1afcffa91e14a07653e38ff4d69325d4dde16d1d 100644
--- a/Tests/Functional/Fit/Minimizer/MinimizerTest.cpp
+++ b/Tests/Functional/Fit/Minimizer/MinimizerTest.cpp
@@ -46,6 +46,7 @@ bool MinimizerTest::runTest()
     auto plan = plan_factory.create(m_fit_plan_name);
 
     Minimizer minimizer;
+    minimizer.setMinimizer(m_minimizer_name, m_algorithm_name);
     auto result = minimizer.minimize(plan->objectiveFunction(), plan->parameters());
 
     std::cout << result.toString() << std::endl;
@@ -60,7 +61,7 @@ namespace {
 bool checkResult(const Fit::MinimizerResult& result, const FunctionTestPlan& plan)
 {
     bool success(true);
-    std::cout << "MinimizerTest::checkResult()" << std::endl;
+    std::cout << "MinimizerTest::checkResult() -> " << plan.name() << std::endl;
 
     success &= plan.valuesAsExpected(result.parameters().values());
     success &= plan.minimumAsExpected(result.minValue());
diff --git a/Tests/Functional/Fit/Minimizer/MinimizerTestCases.cpp b/Tests/Functional/Fit/Minimizer/MinimizerTestCases.cpp
index 4ff544fbcd52e796170311ed1f927fa84bfdf384..66337bb055570ad2ce9c413a8ace93b251c3d176 100644
--- a/Tests/Functional/Fit/Minimizer/MinimizerTestCases.cpp
+++ b/Tests/Functional/Fit/Minimizer/MinimizerTestCases.cpp
@@ -14,6 +14,38 @@
 
 #include "MinimizerTestCases.h"
 
-MinuitTestV1::MinuitTestV1() : MinimizerTest("Minuit2", "Migrad", "RosenbrockPlan") {}
+MinuitTestV1::MinuitTestV1()
+    : MinimizerTest("Minuit2", "Migrad", "RosenbrockPlan") {}
 
-MinuitTestV2::MinuitTestV2() : MinimizerTest("Minuit2", "Migrad", "WoodFourPlan") {}
+MinuitTestV2::MinuitTestV2()
+    : MinimizerTest("Minuit2", "Migrad", "WoodFourPlan") {}
+
+SteepestDescentTestV1::SteepestDescentTestV1()
+    : MinimizerTest("GSLMultiMin", "SteepestDescent", "RosenbrockPlan") {}
+
+SteepestDescentTestV2::SteepestDescentTestV2()
+    : MinimizerTest("GSLMultiMin", "SteepestDescent", "WoodFourPlan") {}
+
+ConjugateFRTestV1::ConjugateFRTestV1()
+    : MinimizerTest("GSLMultiMin", "ConjugateFR", "RosenbrockPlan") {}
+
+ConjugateFRTestV2::ConjugateFRTestV2()
+    : MinimizerTest("GSLMultiMin", "ConjugateFR", "WoodFourPlan") {}
+
+ConjugatePRTestV1::ConjugatePRTestV1()
+    : MinimizerTest("GSLMultiMin", "ConjugatePR", "RosenbrockPlan") {}
+
+ConjugatePRTestV2::ConjugatePRTestV2()
+    : MinimizerTest("GSLMultiMin", "ConjugatePR", "WoodFourPlan") {}
+
+BfgsTestV1::BfgsTestV1()
+    : MinimizerTest("GSLMultiMin", "BFGS", "RosenbrockPlan") {}
+
+BfgsTestV2::BfgsTestV2()
+    : MinimizerTest("GSLMultiMin", "BFGS", "WoodFourPlan") {}
+
+Bfgs2TestV1::Bfgs2TestV1()
+    : MinimizerTest("GSLMultiMin", "BFGS2", "RosenbrockPlan") {}
+
+Bfgs2TestV2::Bfgs2TestV2()
+    : MinimizerTest("GSLMultiMin", "BFGS2", "WoodFourPlan") {}
diff --git a/Tests/Functional/Fit/Minimizer/MinimizerTestCases.h b/Tests/Functional/Fit/Minimizer/MinimizerTestCases.h
index 75c1c6648a3b5b4a189f3d640fa7f1bfdfa143b2..c3f2af8a85a8900b022d1503d0cde380ae50215d 100644
--- a/Tests/Functional/Fit/Minimizer/MinimizerTestCases.h
+++ b/Tests/Functional/Fit/Minimizer/MinimizerTestCases.h
@@ -31,4 +31,64 @@ public:
     MinuitTestV2();
 };
 
+class SteepestDescentTestV1 : public MinimizerTest
+{
+public:
+    SteepestDescentTestV1();
+};
+
+class SteepestDescentTestV2 : public MinimizerTest
+{
+public:
+    SteepestDescentTestV2();
+};
+
+class ConjugateFRTestV1 : public MinimizerTest
+{
+public:
+    ConjugateFRTestV1();
+};
+
+class ConjugateFRTestV2 : public MinimizerTest
+{
+public:
+    ConjugateFRTestV2();
+};
+
+class ConjugatePRTestV1 : public MinimizerTest
+{
+public:
+    ConjugatePRTestV1();
+};
+
+class ConjugatePRTestV2 : public MinimizerTest
+{
+public:
+    ConjugatePRTestV2();
+};
+
+class BfgsTestV1 : public MinimizerTest
+{
+public:
+    BfgsTestV1();
+};
+
+class BfgsTestV2 : public MinimizerTest
+{
+public:
+    BfgsTestV2();
+};
+
+class Bfgs2TestV1 : public MinimizerTest
+{
+public:
+    Bfgs2TestV1();
+};
+
+class Bfgs2TestV2 : public MinimizerTest
+{
+public:
+    Bfgs2TestV2();
+};
+
 #endif //   MINIMIZERTESTCASES_H
diff --git a/Tests/Functional/Fit/Minimizer/MinimizerTestFactory.cpp b/Tests/Functional/Fit/Minimizer/MinimizerTestFactory.cpp
index 61377e33af23e76e75be2284bfeb93b9ef00f59d..180374442dc54eb7a84e0c3339d03c8b08150a22 100644
--- a/Tests/Functional/Fit/Minimizer/MinimizerTestFactory.cpp
+++ b/Tests/Functional/Fit/Minimizer/MinimizerTestFactory.cpp
@@ -17,6 +17,34 @@
 
 MinimizerTestFactory::MinimizerTestFactory()
 {
-    registerItem("MinuitTestV1", create_new<MinuitTestV1>, "Minuit + Migrad + Rosenbrock");
-    registerItem("MinuitTestV2", create_new<MinuitTestV2>, "Minuit + Migrad + WoodFour");
+    registerItem("MinuitTestV1", create_new<MinuitTestV1>,
+                 "Minuit + Migrad + Rosenbrock");
+    registerItem("MinuitTestV2", create_new<MinuitTestV2>,
+                 "Minuit + Migrad + WoodFour");
+
+    registerItem("SteepestDescentTestV1", create_new<SteepestDescentTestV1>,
+                 "GSLMultiMin + SteepestDescent + Rosenbrock");
+    registerItem("SteepestDescentTestV2", create_new<SteepestDescentTestV2>,
+                 "GSLMultiMin + SteepestDescent + WoodFour");
+
+    registerItem("ConjugateFRTestV1", create_new<ConjugateFRTestV1>,
+                 "GSLMultiMin + ConjugateFR + Rosenbrock");
+    registerItem("ConjugateFRTestV2", create_new<ConjugateFRTestV2>,
+                 "GSLMultiMin + ConjugateFR + WoodFour");
+
+    registerItem("ConjugatePRTestV1", create_new<ConjugatePRTestV1>,
+                 "GSLMultiMin + ConjugatePR + Rosenbrock");
+    registerItem("ConjugatePRTestV2", create_new<ConjugatePRTestV2>,
+                 "GSLMultiMin + ConjugatePR + WoodFour");
+
+    registerItem("BfgsTestV1", create_new<BfgsTestV1>,
+                 "GSLMultiMin + BFGS + Rosenbrock");
+    registerItem("BfgsTestV2", create_new<BfgsTestV2>,
+                 "GSLMultiMin + BFGS + WoodFour");
+
+    registerItem("Bfgs2TestV1", create_new<Bfgs2TestV1>,
+                 "GSLMultiMin + BFGS2 + Rosenbrock");
+    registerItem("Bfgs2TestV2", create_new<Bfgs2TestV2>,
+                 "GSLMultiMin + BFGS2 + WoodFour");
+
 }