Index: branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/BinaryEncoding.cs
===================================================================
--- branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/BinaryEncoding.cs	(revision 11580)
+++ branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/BinaryEncoding.cs	(revision 11582)
@@ -27,5 +27,4 @@
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.BinaryVectorEncoding;
-using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -74,4 +73,7 @@
       : base(name) {
       lengthParameter = new FixedValueParameter<IntValue>(Name + "Length", new IntValue(length));
+      RegisterParameterEvents();
+      DiscoverOperators();
+      SolutionCreator = Operators.OfType<RandomBinaryVectorCreator>().Single();
     }
 
Index: branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/Encoding.cs
===================================================================
--- branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/Encoding.cs	(revision 11580)
+++ branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/Encoding.cs	(revision 11582)
@@ -49,10 +49,4 @@
 
 
-    ISolutionCreator IEncoding.DefaultSolutionCreator { get { return DefaultSolutionCreator; } }
-    public virtual T DefaultSolutionCreator {
-      get { return null; }
-    }
-
-
     ISolutionCreator IEncoding.SolutionCreator {
       get { return SolutionCreator; }
@@ -65,5 +59,4 @@
     public T SolutionCreator {
       get {
-        if (solutionCreator == null) return DefaultSolutionCreator;
         return solutionCreator;
       }
Index: branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/IntegerEncoding.cs
===================================================================
--- branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/IntegerEncoding.cs	(revision 11580)
+++ branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/IntegerEncoding.cs	(revision 11582)
@@ -87,5 +87,4 @@
       boundsParameter = cloner.Clone(original.boundsParameter);
       RegisterParameterEvents();
-      DiscoverOperators();
     }
     public override IDeepCloneable Clone(Cloner cloner) { return new IntegerEncoding(this, cloner); }
@@ -102,4 +101,5 @@
       RegisterParameterEvents();
       DiscoverOperators();
+      SolutionCreator = Operators.OfType<UniformRandomIntegerVectorCreator>().Single();
     }
     public IntegerEncoding(string name, int length, IList<int> min, IList<int> max, IList<int> step = null)
@@ -118,4 +118,5 @@
       RegisterParameterEvents();
       DiscoverOperators();
+      SolutionCreator = Operators.OfType<UniformRandomIntegerVectorCreator>().Single();
     }
 
Index: branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/PermutationEncoding.cs
===================================================================
--- branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/PermutationEncoding.cs	(revision 11580)
+++ branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/PermutationEncoding.cs	(revision 11582)
@@ -27,5 +27,4 @@
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.PermutationEncoding;
-using HeuristicLab.Encodings.RealVectorEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.PluginInfrastructure;
@@ -96,4 +95,5 @@
       RegisterParameterEvents();
       DiscoverOperators();
+      SolutionCreator = Operators.OfType<RandomPermutationCreator>().Single();
     }
 
Index: branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/RealEncoding.cs
===================================================================
--- branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/RealEncoding.cs	(revision 11580)
+++ branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Encodings/RealEncoding.cs	(revision 11582)
@@ -103,4 +103,5 @@
       RegisterParameterEvents();
       DiscoverOperators();
+      SolutionCreator = Operators.OfType<UniformRandomRealVectorCreator>().Single();
     }
 
@@ -120,4 +121,5 @@
       RegisterParameterEvents();
       DiscoverOperators();
+      SolutionCreator = Operators.OfType<UniformRandomRealVectorCreator>().Single();
     }
 
Index: branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Interfaces/IEncoding.cs
===================================================================
--- branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Interfaces/IEncoding.cs	(revision 11580)
+++ branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Interfaces/IEncoding.cs	(revision 11582)
@@ -20,19 +20,11 @@
 #endregion
 
-using System;
 using System.Collections.Generic;
-using System.Dynamic;
-using System.Linq;
-using System.Text;
 using HeuristicLab.Core;
 using HeuristicLab.Optimization;
 
 namespace HeuristicLab.Problems.Programmable {
-  public interface IEncoding : INamedItem
-  {
-    
-    ISolutionCreator DefaultSolutionCreator { get; }
+  public interface IEncoding : INamedItem {
     ISolutionCreator SolutionCreator { get; set; }
-
 
     IEnumerable<IValueParameter> Parameters { get; }
@@ -41,5 +33,5 @@
 
     void ConfigureOperator(IOperator @operator);
-    void ConfigureOperators(IEnumerable<IOperator> operators);    
+    void ConfigureOperators(IEnumerable<IOperator> operators);
   }
 }
Index: branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/MultiObjectiveProgrammableProblem.cs
===================================================================
--- branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/MultiObjectiveProgrammableProblem.cs	(revision 11580)
+++ branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/MultiObjectiveProgrammableProblem.cs	(revision 11582)
@@ -176,25 +176,4 @@
 
     protected virtual ISolutionCreator ConfigureCreator(IEncoding encoding) {
-      #region Configure RealVector Creator
-      var realEnc = encoding as RealEncoding;
-      if (realEnc != null) {
-        DynamicEncodingParameters.AddRange(realEnc.Parameters);
-        return realEnc.DefaultSolutionCreator;
-      }
-      #endregion
-      #region Configure BinaryVector Creator
-      var binEnc = encoding as BinaryEncoding;
-      if (binEnc != null) {
-        DynamicEncodingParameters.AddRange(binEnc.Parameters);
-        return binEnc.DefaultSolutionCreator;
-      }
-      #endregion
-      #region Configure IntegerVector Creator
-      var intEnc = encoding as IntegerEncoding;
-      if (intEnc != null) {
-        DynamicEncodingParameters.AddRange(intEnc.Parameters);
-        return intEnc.DefaultSolutionCreator;
-      }
-      #endregion
       #region Configure MultiEncoding Creator
       var multiEncoding = encoding as MultiEncoding;
@@ -208,17 +187,34 @@
       }
       #endregion
+      #region Configure RealVector Creator
+      var realEnc = encoding as RealEncoding;
+      if (realEnc != null) {
+        DynamicEncodingParameters.AddRange(realEnc.Parameters);
+        return realEnc.SolutionCreator;
+      }
+      #endregion
+      #region Configure BinaryVector Creator
+      var binEnc = encoding as BinaryEncoding;
+      if (binEnc != null) {
+        DynamicEncodingParameters.AddRange(binEnc.Parameters);
+        return binEnc.SolutionCreator;
+      }
+      #endregion
+      #region Configure IntegerVector Creator
+      var intEnc = encoding as IntegerEncoding;
+      if (intEnc != null) {
+        DynamicEncodingParameters.AddRange(intEnc.Parameters);
+        return intEnc.SolutionCreator;
+      }
+      #endregion
       #region Configure Permutation Creator
       var permEnc = encoding as PermutationEncoding;
       if (permEnc != null) {
-        var l = new ValueParameter<IntValue>(permEnc.Name + "Length", new IntValue(permEnc.Length));
-        DynamicEncodingParameters.Add(l);
-
-        var creator = new RandomPermutationCreator();
-        creator.PermutationParameter.ActualName = permEnc.Name;
-        creator.LengthParameter.ActualName = l.Name;
-        creator.PermutationTypeParameter.Value = new PermutationType(permEnc.Type);
-        return creator;
+        DynamicEncodingParameters.AddRange(permEnc.Parameters);
+        return permEnc.SolutionCreator;
       }
       #endregion
+
+
       throw new ArgumentException(string.Format("Encoding {0} is unknown.", encoding != null ? encoding.GetType().FullName : "(null)"));
     }
Index: branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs
===================================================================
--- branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs	(revision 11580)
+++ branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs	(revision 11582)
@@ -35,5 +35,4 @@
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.PluginInfrastructure;
 
 namespace HeuristicLab.Problems.Programmable {
@@ -187,32 +186,4 @@
 
     protected virtual ISolutionCreator ConfigureCreator(IEncoding encoding) {
-      #region Configure RealVector Creator
-      var realEnc = encoding as RealEncoding;
-      if (realEnc != null) {
-        DynamicEncodingParameters.AddRange(realEnc.Parameters);
-        return realEnc.DefaultSolutionCreator;
-      }
-      #endregion
-      #region Configure BinaryVector Creator
-      var binEnc = encoding as BinaryEncoding;
-      if (binEnc != null) {
-        DynamicEncodingParameters.AddRange(binEnc.Parameters);
-        return binEnc.DefaultSolutionCreator;
-      }
-      #endregion
-      #region Configure IntegerVector Creator
-      var intEnc = encoding as IntegerEncoding;
-      if (intEnc != null) {
-        DynamicEncodingParameters.AddRange(intEnc.Parameters);
-        return intEnc.SolutionCreator;
-      }
-      #endregion
-      #region Configure Permutation Creator
-      var permEnc = encoding as PermutationEncoding;
-      if (permEnc != null) {
-        DynamicEncodingParameters.AddRange(permEnc.Parameters);
-        return permEnc.SolutionCreator;
-      }
-      #endregion
       #region Configure MultiEncoding Creator
       var multiEncoding = encoding as MultiEncoding;
@@ -224,4 +195,33 @@
         }
         return creator;
+      }
+      #endregion
+
+      #region Configure RealVector Creator
+      var realEnc = encoding as RealEncoding;
+      if (realEnc != null) {
+        DynamicEncodingParameters.AddRange(realEnc.Parameters);
+        return realEnc.SolutionCreator;
+      }
+      #endregion
+      #region Configure BinaryVector Creator
+      var binEnc = encoding as BinaryEncoding;
+      if (binEnc != null) {
+        DynamicEncodingParameters.AddRange(binEnc.Parameters);
+        return binEnc.SolutionCreator;
+      }
+      #endregion
+      #region Configure IntegerVector Creator
+      var intEnc = encoding as IntegerEncoding;
+      if (intEnc != null) {
+        DynamicEncodingParameters.AddRange(intEnc.Parameters);
+        return intEnc.SolutionCreator;
+      }
+      #endregion
+      #region Configure Permutation Creator
+      var permEnc = encoding as PermutationEncoding;
+      if (permEnc != null) {
+        DynamicEncodingParameters.AddRange(permEnc.Parameters);
+        return permEnc.SolutionCreator;
       }
       #endregion
