Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IEncoding.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IEncoding.cs	(revision 16805)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IEncoding.cs	(revision 16806)
@@ -40,6 +40,7 @@
   }
 
+  [StorableType("DB23907F-BE6E-44E4-9596-3D3BF1532631")]
   public interface IEncoding<TEncodedSolution> : IEncoding
-    where TEncodedSolution : class, IEncodedSolution {
+      where TEncodedSolution : class, IEncodedSolution {
     //new ISolutionCreator<TEncodedSolution> SolutionCreator { get; }
   }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiObjectiveProblemDefinition.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiObjectiveProblemDefinition.cs	(revision 16805)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiObjectiveProblemDefinition.cs	(revision 16806)
@@ -28,7 +28,9 @@
     where TEncoding : class, IEncoding<TEncodedSolution>
     where TEncodedSolution : class, IEncodedSolution {
+
+    int Objectives { get; }
     bool[] Maximization { get; }
-    double[] Evaluate(TEncodedSolution individual, IRandom random);
-    void Analyze(TEncodedSolution[] individuals, double[][] qualities, ResultCollection results, IRandom random);
+    double[] Evaluate(TEncodedSolution solution, IRandom random);
+    void Analyze(TEncodedSolution[] solutions, double[][] qualities, ResultCollection results, IRandom random);
   }
 }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveProblem.cs	(revision 16805)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveProblem.cs	(revision 16806)
@@ -36,4 +36,8 @@
     where TEncodedSolution : class, IEncodedSolution {
 
+    protected IValueParameter<BoolArray> MaximizationParameter {
+      get { return (IValueParameter<BoolArray>)Parameters["Maximization"]; }
+    }
+
     [StorableConstructor]
     protected MultiObjectiveProblem(StorableConstructorFlag _) : base(_) { }
@@ -44,6 +48,14 @@
     }
 
-    protected MultiObjectiveProblem()
-      : base() {
+    protected MultiObjectiveProblem() : base() {
+      Parameters.Add(new ValueParameter<BoolArray>("Maximization", "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(Maximization).AsReadOnly()));
+
+      Operators.Add(Evaluator);
+      Operators.Add(new MultiObjectiveAnalyzer<TEncodedSolution>());
+
+      ParameterizeOperators();
+    }
+
+    protected MultiObjectiveProblem(TEncoding encoding) : base(encoding) {
       Parameters.Add(new ValueParameter<BoolArray>("Maximization", "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(Maximization).AsReadOnly()));
 
@@ -59,7 +71,8 @@
     }
 
+    public int Objectives => Maximization.Length;
     public abstract bool[] Maximization { get; }
-    public abstract double[] Evaluate(TEncodedSolution individual, IRandom random);
-    public virtual void Analyze(TEncodedSolution[] individuals, double[][] qualities, ResultCollection results, IRandom random) { }
+    public abstract double[] Evaluate(TEncodedSolution solution, IRandom random);
+    public virtual void Analyze(TEncodedSolution[] solutions, double[][] qualities, ResultCollection results, IRandom random) { }
 
     protected override void OnOperatorsChanged() {
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveProblem.cs	(revision 16805)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveProblem.cs	(revision 16806)
@@ -69,6 +69,5 @@
     }
 
-    protected SingleObjectiveProblem()
-      : base() {
+    protected SingleObjectiveProblem() : base() {
       Parameters.Add(new FixedValueParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.", (BoolValue)new BoolValue(Maximization).AsReadOnly()) { Hidden = true });
       Parameters.Add(new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this problem."));
@@ -84,6 +83,5 @@
     }
 
-    protected SingleObjectiveProblem(TEncoding encoding)
-      : base(encoding) {
+    protected SingleObjectiveProblem(TEncoding encoding) : base(encoding) {
       Parameters.Add(new FixedValueParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.", (BoolValue)new BoolValue(Maximization).AsReadOnly()) { Hidden = true });
       Parameters.Add(new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this problem."));
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Interfaces/ISolutionCreator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Interfaces/ISolutionCreator.cs	(revision 16805)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Interfaces/ISolutionCreator.cs	(revision 16806)
@@ -30,4 +30,5 @@
   public interface ISolutionCreator : IOperator { }
 
+  [StorableType("76F17DA0-A81C-4E16-B591-38541D73C370")]
   public interface ISolutionCreator<TEncodedSolution> : ISolutionCreator where TEncodedSolution : class, IEncodedSolution {
     //ILookupParameter<TEncodedSolution> SolutionParameter { get; } // TODO: unify encoding specific parameters by defining ISolutionOperator and ISolutionsOperator
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/CompiledProblemDefinition.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/CompiledProblemDefinition.cs	(revision 16805)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/CompiledProblemDefinition.cs	(revision 16806)
@@ -79,4 +79,6 @@
 
     #region ISingleObjectiveProblemDefinition<TEncoding,TEncodedSolution> Members
+
+    public int Objectives => Maximization.Length;
     public abstract bool[] Maximization { get; }
     public abstract double[] Evaluate(TEncodedSolution individual, IRandom random);
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/MultiObjectiveProblemDefinitionScript.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/MultiObjectiveProblemDefinitionScript.cs	(revision 16805)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/MultiObjectiveProblemDefinitionScript.cs	(revision 16806)
@@ -47,4 +47,6 @@
     }
 
+    int IMultiObjectiveProblemDefinition<TEncoding, TEncodedSolution>.Objectives => CompiledProblemDefinition.Objectives;
+
     bool[] IMultiObjectiveProblemDefinition<TEncoding, TEncodedSolution>.Maximization {
       get { return CompiledProblemDefinition.Maximization; }
