Index: branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/MultiObjectiveProgrammableProblem.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/MultiObjectiveProgrammableProblem.cs	(revision 13389)
+++ branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/MultiObjectiveProgrammableProblem.cs	(revision 13390)
@@ -34,5 +34,5 @@
   [Creatable(CreatableAttribute.Categories.Problems, Priority = 120)]
   [StorableClass]
-  public class MultiObjectiveProgrammableProblem<TEncoding, TSolution> : MultiObjectiveProblem<TEncoding, TSolution>, IProgrammableItem, IProgrammableProblem
+  public abstract class MultiObjectiveProgrammableProblem<TEncoding, TSolution> : MultiObjectiveProblem<TEncoding, TSolution>, IProgrammableItem, IProgrammableProblem
     where TEncoding : class, IEncoding<TSolution>
     where TSolution : class, ISolution {
@@ -60,12 +60,10 @@
     }
 
+    [StorableConstructor]
+    protected MultiObjectiveProgrammableProblem(bool deserializing) : base(deserializing) { }
     protected MultiObjectiveProgrammableProblem(MultiObjectiveProgrammableProblem<TEncoding, TSolution> original, Cloner cloner)
       : base(original, cloner) {
       RegisterEvents();
     }
-    public override IDeepCloneable Clone(Cloner cloner) { return new MultiObjectiveProgrammableProblem<TEncoding, TSolution>(this, cloner); }
-
-    [StorableConstructor]
-    protected MultiObjectiveProgrammableProblem(bool deserializing) : base(deserializing) { }
     public MultiObjectiveProgrammableProblem()
       : base() {
@@ -88,6 +86,4 @@
       Parameters.Remove("Maximization");
       Parameters.Add(new ValueParameter<BoolArray>("Maximization", "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(Maximization).AsReadOnly()) { Hidden = true });
-      var multiEnc = ProblemScript.Encoding as CombinedEncoding;
-      if (multiEnc != null) multiEnc.Clear();
       Encoding = (TEncoding)ProblemScript.Encoding.Clone();
 
Index: branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs	(revision 13389)
+++ branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs	(revision 13390)
@@ -35,5 +35,5 @@
   [Item("Programmable Problem (single-objective)", "Represents a single-objective problem that can be programmed with a script.")]
   [StorableClass]
-  public class SingleObjectiveProgrammableProblem<TEncoding, TSolution> : SingleObjectiveProblem<TEncoding, TSolution>, IProgrammableItem, IProgrammableProblem
+  public abstract class SingleObjectiveProgrammableProblem<TEncoding, TSolution> : SingleObjectiveProblem<TEncoding, TSolution>, IProgrammableItem, IProgrammableProblem
     where TEncoding : class, IEncoding<TSolution>
     where TSolution : class, ISolution {
@@ -50,5 +50,4 @@
     }
 
-
     Script IProgrammableProblem.ProblemScript {
       get { return ProblemScript; }
@@ -62,12 +61,10 @@
     }
 
+    [StorableConstructor]
+    protected SingleObjectiveProgrammableProblem(bool deserializing) : base(deserializing) { }
     protected SingleObjectiveProgrammableProblem(SingleObjectiveProgrammableProblem<TEncoding, TSolution> original, Cloner cloner)
       : base(original, cloner) {
       RegisterEvents();
     }
-    public override IDeepCloneable Clone(Cloner cloner) { return new SingleObjectiveProgrammableProblem<TEncoding, TSolution>(this, cloner); }
-
-    [StorableConstructor]
-    protected SingleObjectiveProgrammableProblem(bool deserializing) : base(deserializing) { }
     public SingleObjectiveProgrammableProblem()
       : base() {
@@ -91,6 +88,4 @@
       Parameters.Remove("Maximization");
       Parameters.Add(new FixedValueParameter<BoolValue>("Maximization", "Set to false if the problem should be minimized.", (BoolValue)new BoolValue(Maximization).AsReadOnly()) { Hidden = true });
-      var multiEnc = ProblemScript.Encoding as CombinedEncoding;
-      if (multiEnc != null) multiEnc.Clear();
       Encoding = (TEncoding)ProblemScript.Encoding.Clone();
 
Index: branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/Templates/MultiObjectiveCombinedEncodingProblem_Template.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/Templates/MultiObjectiveCombinedEncodingProblem_Template.cs	(revision 13389)
+++ branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/Templates/MultiObjectiveCombinedEncodingProblem_Template.cs	(revision 13390)
@@ -22,7 +22,7 @@
       // Add additional initialization code e.g. private variables that you need for evaluating
       //Encoding.Add(new BinaryVectorEncoding("b") { Length = 10 });
-      //Encoding.Add(new IntegerVectorEncoding("i") { Length = 10, Bounds = new int[,] { { -100, 100 } } });
-      //Encoding.Add(new RealVectorEncoding("r") { Length = 10, Bounds = new double[,] { { -100, 100 } } });
-      //Encoding.Add(new PermutationEncoding("p") { Length = 20, PermutationType = PermutationTypes.Absolute });
+      //Encoding.Add(new IntegerVectorEncoding("i") { Length = 10, Bounds = new IntMatrix(new int[,] { { -100, 100 } }) });
+      //Encoding.Add(new RealVectorEncoding("r") { Length = 10, Bounds = new DoubleMatrix(new double[,] { { -100, 100 } }) });
+      //Encoding.Add(new PermutationEncoding("p") { Length = 20, Type = PermutationTypes.Absolute });
       //Encoding.Add(new LinearLinkageEncoding("lle") { Length = 30 });
     }
@@ -31,8 +31,8 @@
       // Use vars.yourVariable to access variables in the variable store i.e. yourVariable
       var quality = new[] { 0.0, 0.0 };
-      // var b = solution.GetSolution<BinaryVector>("b");
-      // quality[0] = b.Count(x => x); // one max!
-      // var r = solution.GetSolution<RealVector>("r");
-      // quality[1] = r.Select((i, v) => new { Idx = i, Val = v }).Sum(x => b[x.Idx] ? x.Val * x.Val : 0.0); // sphere
+      //var b = solution.GetSolution<BinaryVector>("b");
+      //quality[0] = b.Count(x => x); // one max!
+      //var r = solution.GetSolution<RealVector>("r");
+      //quality[1] = r.Select((i, v) => new { Idx = i, Val = v }).Sum(x => b[x.Idx] ? x.Val * x.Val : 0.0); // sphere
 
       // NOTE: Check the Maximization property above (true or false)!
Index: branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/Templates/SingleObjectiveCombinedEncodingProblem_Template.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/Templates/SingleObjectiveCombinedEncodingProblem_Template.cs	(revision 13389)
+++ branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/Templates/SingleObjectiveCombinedEncodingProblem_Template.cs	(revision 13390)
@@ -22,7 +22,7 @@
       // Add additional initialization code e.g. private variables that you need for evaluating
       //Encoding.Add(new BinaryVectorEncoding("b") { Length = 10 });
-      //Encoding.Add(new IntegerVectorEncoding("i") { Length = 10, Bounds = new int[,] { { -100, 100 } } });
-      //Encoding.Add(new RealVectorEncoding("r") { Length = 10, Bounds = new double[,] { { -100, 100 } } });
-      //Encoding.Add(new PermutationEncoding("p") { Length = 20, PermutationType = PermutationTypes.Absolute });
+      //Encoding.Add(new IntegerVectorEncoding("i") { Length = 10, Bounds = new IntMatrix(new int[,] { { -100, 100 } }) });
+      //Encoding.Add(new RealVectorEncoding("r") { Length = 10, Bounds = new DoubleMatrix(new double[,] { { -100, 100 } }) });
+      //Encoding.Add(new PermutationEncoding("p") { Length = 20, Type = PermutationTypes.Absolute });
       //Encoding.Add(new LinearLinkageEncoding("lle") { Length = 30 });
     }
@@ -31,8 +31,8 @@
       // Use vars.yourVariable to access variables in the variable store i.e. yourVariable
       var quality = 0.0;
-      // var b = solution.GetSolution<BinaryVector>("b");
-      // quality = b.Count(x => x); // one max!
-      // var r = solution.GetSolution<RealVector>("r");
-      // quality += r.Sum(x => -x * x); // sphere
+      //var b = solution.GetSolution<BinaryVector>("b");
+      //quality = b.Count(x => x); // one max!
+      //var r = solution.GetSolution<RealVector>("r");
+      //quality += r.Sum(x => -x * x); // sphere
 
       // NOTE: Check the Maximization property above (true or false)!
