Index: /stable/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessBase.cs
===================================================================
--- /stable/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessBase.cs	(revision 13052)
+++ /stable/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessBase.cs	(revision 13053)
@@ -108,4 +108,8 @@
       Parameters[ApproximateGradientsParameterName].Hidden = true; // should not be changed
 
+      // necessary for BFGS
+      Parameters.Add(new ValueParameter<BoolValue>("Maximization", new BoolValue(false)));
+      Parameters["Maximization"].Hidden = true;
+
       var randomCreator = new HeuristicLab.Random.RandomCreator();
       var gpInitializer = new GaussianProcessHyperparameterInitializer();
@@ -181,4 +185,11 @@
     [StorableHook(HookType.AfterDeserialization)]
     private void AfterDeserialization() {
+      // BackwardsCompatibility3.4
+      #region Backwards compatible code, remove with 3.5
+      if (!Parameters.ContainsKey("Maximization")) {
+        Parameters.Add(new ValueParameter<BoolValue>("Maximization", new BoolValue(false)));
+        Parameters["Maximization"].Hidden = true;
+      }
+      #endregion
     }
   }
Index: /stable/HeuristicLab.Algorithms.GradientDescent/3.3/Lbfgs.cs
===================================================================
--- /stable/HeuristicLab.Algorithms.GradientDescent/3.3/Lbfgs.cs	(revision 13052)
+++ /stable/HeuristicLab.Algorithms.GradientDescent/3.3/Lbfgs.cs	(revision 13053)
@@ -200,5 +200,7 @@
         RegisterEvents();
         solutionCreator.OperatorParameter.ActualName = Problem.SolutionCreatorParameter.Name;
+        solutionCreator.OperatorParameter.Hidden = true;
         evaluator.OperatorParameter.ActualName = Problem.EvaluatorParameter.Name;
+        evaluator.OperatorParameter.Hidden = true;
         UpdateAnalyzers();
         ParameterizeOperators();
@@ -220,5 +222,11 @@
     protected override void Problem_OperatorsChanged(object sender, EventArgs e) {
       base.Problem_OperatorsChanged(sender, e);
+      RegisterEvents();
+      solutionCreator.OperatorParameter.ActualName = Problem.SolutionCreatorParameter.Name;
+      solutionCreator.OperatorParameter.Hidden = true;
+      evaluator.OperatorParameter.ActualName = Problem.EvaluatorParameter.Name;
+      evaluator.OperatorParameter.Hidden = true;
       UpdateAnalyzers();
+      ParameterizeOperators();
     }
 
@@ -266,11 +274,16 @@
         var realVectorParameterName = realVectorCreator.RealVectorParameter.ActualName;
         initializer.PointParameter.ActualName = realVectorParameterName;
+        initializer.PointParameter.Hidden = true;
         makeStep.PointParameter.ActualName = realVectorParameterName;
+        makeStep.PointParameter.Hidden = true;
         analyzer.PointParameter.ActualName = realVectorParameterName;
+        analyzer.PointParameter.Hidden = true;
       }
 
       var qualityParameterName = Problem.Evaluator.QualityParameter.ActualName;
       updateResults.QualityParameter.ActualName = qualityParameterName;
+      updateResults.QualityParameter.Hidden = true;
       analyzer.QualityParameter.ActualName = qualityParameterName;
+      analyzer.QualityParameter.Hidden = true;
     }
   }
Index: /stable/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsUpdateResults.cs
===================================================================
--- /stable/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsUpdateResults.cs	(revision 13052)
+++ /stable/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsUpdateResults.cs	(revision 13053)
@@ -37,4 +37,5 @@
     private const string StateParameterName = "State";
     private const string ApproximateGradientsParameterName = "ApproximateGradients";
+    private const string MaximizationParameterName = "Maximization";
 
     #region Parameter Properties
@@ -51,4 +52,7 @@
       get { return (ILookupParameter<LbfgsState>)Parameters[StateParameterName]; }
     }
+    public ILookupParameter<BoolValue> MaximizationParameter {
+      get { return (ILookupParameter<BoolValue>)Parameters[MaximizationParameterName]; }
+    }
     #endregion
 
@@ -58,4 +62,16 @@
     private DoubleValue Quality { get { return QualityParameter.ActualValue; } }
     private LbfgsState State { get { return StateParameter.ActualValue; } }
+
+    private BoolValue Maximization {
+      get {
+        // BackwardsCompatibility3.3
+        #region Backwards compatible code, remove with 3.4
+        // the parameter is new, previously we assumed minimization problems
+        if (MaximizationParameter.ActualValue == null) return new BoolValue(false);
+        #endregion
+        return MaximizationParameter.ActualValue;
+      }
+    }
+
     #endregion
 
@@ -70,6 +86,19 @@
       Parameters.Add(new LookupParameter<BoolValue>(ApproximateGradientsParameterName,
                                                     "Flag that indicates if gradients should be approximated."));
+      Parameters.Add(new LookupParameter<BoolValue>(MaximizationParameterName, "Flag that indicates if we solve a maximization problem."));
       // in & out
       Parameters.Add(new LookupParameter<LbfgsState>(StateParameterName, "The state of the LM-BFGS algorithm."));
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      // BackwardsCompatibility3.3
+
+      #region Backwards compatible code, remove with 3.4
+      if (!Parameters.ContainsKey(MaximizationParameterName)) {
+        // previous behaviour defaulted to minimization
+        Parameters.Add(new LookupParameter<BoolValue>(MaximizationParameterName, "Flag that indicates if we solve a maximization problem."));
+      }
+      #endregion
     }
 
@@ -80,8 +109,9 @@
     public override IOperation Apply() {
       var state = State;
-      var f = Quality.Value;
+      var sign = Maximization.Value ? -1.0 : 1.0;
+      var f = sign * Quality.Value;
       state.State.f = f;
       if (!ApproximateGradients.Value) {
-        var g = QualityGradients.ToArray();
+        var g = QualityGradients.Select(gi => sign * gi).ToArray();
         state.State.g = g;
       }
