Index: /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCreator.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCreator.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCreator.cs	(revision 13469)
@@ -25,6 +25,7 @@
 
 namespace HeuristicLab.Encodings.ScheduleEncoding {
-  public interface IScheduleCreator : ISolutionCreator<ISchedule>, IScheduleOperator {
-    ILookupParameter<ISchedule> ScheduleParameter { get; }
+  public interface IScheduleCreator<TSchedule> : ISolutionCreator<TSchedule>, IScheduleOperator
+  where TSchedule : class,ISchedule {
+    ILookupParameter<TSchedule> ScheduleParameter { get; }
     IValueLookupParameter<IntValue> JobsParameter { get; }
     IValueLookupParameter<IntValue> ResourcesParameter { get; }
Index: /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleDecoder.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleDecoder.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleDecoder.cs	(revision 13469)
@@ -30,3 +30,8 @@
     Schedule DecodeSchedule(ISchedule solution, ItemList<Job> jobData);
   }
+
+  public interface IScheduleDecoder<TSchedule> : IScheduleDecoder
+    where TSchedule : class, ISchedule {
+    Schedule DecodeSchedule(TSchedule solution, ItemList<Job> jobData);
+  }
 }
Index: /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Decoder/JSMDecoder.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Decoder/JSMDecoder.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Decoder/JSMDecoder.cs	(revision 13469)
@@ -34,5 +34,5 @@
   [Item("JobSequenceMatrixDecoder", "Applies the GifflerThompson algorithm to create an active schedule from a JobSequence Matrix.")]
   [StorableClass]
-  public class JSMDecoder : ScheduleDecoder {
+  public class JSMDecoder : ScheduleDecoder<JSMEncoding> {
 
     public IFixedValueParameter<EnumValue<JSMDecodingErrorPolicy>> DecodingErrorPolicyParameter {
@@ -130,11 +130,9 @@
     }
 
-    public override Schedule DecodeSchedule(ISchedule encoding, ItemList<Job> jobData) {
-      var solution = encoding as JSMEncoding;
-      if (solution == null) throw new InvalidOperationException("Encoding is not of type JSMEncoding");
-      return DecodeSchedule(solution, jobData, DecodingErrorPolicy, ForcingStrategy);
+    public override Schedule DecodeSchedule(JSMEncoding encoding, ItemList<Job> jobData) {
+      return Decode(encoding, jobData, DecodingErrorPolicy, ForcingStrategy);
     }
 
-    public static Schedule DecodeSchedule(JSMEncoding solution, ItemList<Job> jobData, JSMDecodingErrorPolicy decodingErrorPolicy, JSMForcingStrategy forcingStrategy) {
+    public static Schedule Decode(JSMEncoding solution, ItemList<Job> jobData, JSMDecodingErrorPolicy decodingErrorPolicy, JSMForcingStrategy forcingStrategy) {
       var random = new FastRandom(solution.RandomSeed);
       var jobs = (ItemList<Job>)jobData.Clone();
Index: /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMRandomCreator.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMRandomCreator.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMRandomCreator.cs	(revision 13469)
@@ -30,5 +30,5 @@
   [Item("JobSequenceMatrixCreator", "Creator class used to create Job Sequence Matrix solutions for standard JobShop scheduling problems.")]
   [StorableClass]
-  public class JSMRandomCreator : ScheduleCreator, IStochasticOperator {
+  public class JSMRandomCreator : ScheduleCreator<JSMEncoding>, IStochasticOperator {
 
     public ILookupParameter<IRandom> RandomParameter {
@@ -56,5 +56,5 @@
     }
 
-    protected override ISchedule CreateSolution() {
+    protected override JSMEncoding CreateSolution() {
       return Apply(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value, RandomParameter.ActualValue);
     }
Index: /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Decoder/PWRDecoder.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Decoder/PWRDecoder.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Decoder/PWRDecoder.cs	(revision 13469)
@@ -28,5 +28,5 @@
   [Item("PWRDecoder", "An item used to convert a PWR-individual into a generalized schedule.")]
   [StorableClass]
-  public class PWRDecoder : ScheduleDecoder {
+  public class PWRDecoder : ScheduleDecoder<PWREncoding> {
     [StorableConstructor]
     protected PWRDecoder(bool deserializing) : base(deserializing) { }
@@ -38,11 +38,9 @@
     }
 
-    public override Schedule DecodeSchedule(ISchedule solution, ItemList<Job> jobData) {
-      var pwr = solution as PWREncoding;
-      if (pwr == null) throw new InvalidOperationException("Encoding is not of type PWREncoding");
-      return DecodeSchedule(pwr, jobData);
+    public override Schedule DecodeSchedule(PWREncoding solution, ItemList<Job> jobData) {
+      return Decode(solution, jobData);
     }
 
-    public static Schedule DecodeSchedule(PWREncoding solution, ItemList<Job> jobData) {
+    public static Schedule Decode(PWREncoding solution, ItemList<Job> jobData) {
       var jobs = (ItemList<Job>)jobData.Clone();
       var resultingSchedule = new Schedule(jobs[0].Tasks.Count);
Index: /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWRRandomCreator.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWRRandomCreator.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWRRandomCreator.cs	(revision 13469)
@@ -29,5 +29,5 @@
   [Item("PermutationWithRepetitionRandomCreator", "Creates PWR-individuals at random.")]
   [StorableClass]
-  public class PWRRandomCreator : ScheduleCreator, IStochasticOperator {
+  public class PWRRandomCreator : ScheduleCreator<PWREncoding>, IStochasticOperator {
 
     public ILookupParameter<IRandom> RandomParameter {
@@ -51,5 +51,5 @@
     }
 
-    protected override ISchedule CreateSolution() {
+    protected override PWREncoding CreateSolution() {
       return Apply(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value, RandomParameter.ActualValue);
     }
Index: /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Plugin.cs.frame
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Plugin.cs.frame	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Plugin.cs.frame	(revision 13469)
@@ -35,4 +35,5 @@
   [PluginDependency("HeuristicLab.Parameters", "3.3")]
   [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.Random", "3.3")]
   public class HeuristicLabEncodingsScheduleEncodingPlugin : PluginBase {
   }
Index: /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Decoder/PRVDecoder.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Decoder/PRVDecoder.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Decoder/PRVDecoder.cs	(revision 13469)
@@ -20,9 +20,7 @@
 #endregion
 
-using System;
 using System.Linq;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Encodings.ScheduleEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Random;
@@ -31,5 +29,5 @@
   [Item("JobSequencingMatrixDecoder", "Applies the GifflerThompson algorithm to create an active schedule from a JobSequencing Matrix.")]
   [StorableClass]
-  public class PRVDecoder : ScheduleDecoder {
+  public class PRVDecoder : ScheduleDecoder<PRVEncoding> {
     #region Priority Rules
     //smallest number of remaining tasks
@@ -189,11 +187,9 @@
     }
 
-    public override Schedule DecodeSchedule(ISchedule encoding, ItemList<Job> jobData) {
-      var solution = encoding as PRVEncoding;
-      if (solution == null) throw new InvalidOperationException("Encoding is not of type PRVEncoding");
-      return DecodeSchedule(solution, jobData);
-    }
-
-    public static Schedule DecodeSchedule(PRVEncoding solution, ItemList<Job> jobData) {
+    public override Schedule DecodeSchedule(PRVEncoding encoding, ItemList<Job> jobData) {
+      return Decode(encoding, jobData);
+    }
+
+    public static Schedule Decode(PRVEncoding solution, ItemList<Job> jobData) {
       var random = new FastRandom(solution.RandomSeed);
       var jobs = (ItemList<Job>)jobData.Clone();
Index: /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVRandomCreator.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVRandomCreator.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVRandomCreator.cs	(revision 13469)
@@ -29,5 +29,5 @@
   [Item("PriorityRulesRandomCreator", "Creator class used to create PRV encoding objects for scheduling problems.")]
   [StorableClass]
-  public class PRVRandomCreator : ScheduleCreator, IStochasticOperator {
+  public class PRVRandomCreator : ScheduleCreator<PRVEncoding>, IStochasticOperator {
 
     [Storable]
@@ -58,5 +58,5 @@
     }
 
-    protected override ISchedule CreateSolution() {
+    protected override PRVEncoding CreateSolution() {
       return Apply(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value, RandomParameter.ActualValue, NrOfRules);
     }
Index: /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCreator.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCreator.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCreator.cs	(revision 13469)
@@ -30,8 +30,9 @@
   [Item("ScheduleCreator", "Represents the generalized form of creators for Scheduling Problems.")]
   [StorableClass]
-  public abstract class ScheduleCreator : InstrumentedOperator, IScheduleCreator {
+  public abstract class ScheduleCreator<TSchedule> : InstrumentedOperator, IScheduleCreator<TSchedule>
+  where TSchedule : class,ISchedule {
 
-    public ILookupParameter<ISchedule> ScheduleParameter {
-      get { return (ILookupParameter<ISchedule>)Parameters["Schedule"]; }
+    public ILookupParameter<TSchedule> ScheduleParameter {
+      get { return (ILookupParameter<TSchedule>)Parameters["Schedule"]; }
     }
     public IValueLookupParameter<IntValue> JobsParameter {
@@ -44,8 +45,8 @@
     [StorableConstructor]
     protected ScheduleCreator(bool deserializing) : base(deserializing) { }
-    protected ScheduleCreator(ScheduleCreator original, Cloner cloner) : base(original, cloner) { }
+    protected ScheduleCreator(ScheduleCreator<TSchedule> original, Cloner cloner) : base(original, cloner) { }
     public ScheduleCreator()
       : base() {
-      Parameters.Add(new LookupParameter<ISchedule>("Schedule", "The new scheduling solution candidate."));
+      Parameters.Add(new LookupParameter<TSchedule>("Schedule", "The new scheduling solution candidate."));
       Parameters.Add(new ValueLookupParameter<IntValue>("Jobs", "The number of jobs handled in this problem instance."));
       Parameters.Add(new ValueLookupParameter<IntValue>("Resources", "The number of resources used in this problem instance."));
@@ -57,5 +58,5 @@
     }
 
-    protected abstract ISchedule CreateSolution();
+    protected abstract TSchedule CreateSolution();
   }
 }
Index: /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleDecoder.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleDecoder.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleDecoder.cs	(revision 13469)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -29,5 +30,6 @@
   [Item("ScheduleDecoder", "A schedule decoder translates a respresentation into an actual schedule.")]
   [StorableClass]
-  public abstract class ScheduleDecoder : SingleSuccessorOperator, IScheduleDecoder {
+  public abstract class ScheduleDecoder<TSchedule> : SingleSuccessorOperator, IScheduleDecoder<TSchedule>
+  where TSchedule : class, ISchedule {
 
     public ILookupParameter<ISchedule> ScheduleEncodingParameter {
@@ -43,5 +45,5 @@
     [StorableConstructor]
     protected ScheduleDecoder(bool deserializing) : base(deserializing) { }
-    protected ScheduleDecoder(ScheduleDecoder original, Cloner cloner) : base(original, cloner) { }
+    protected ScheduleDecoder(ScheduleDecoder<TSchedule> original, Cloner cloner) : base(original, cloner) { }
     public ScheduleDecoder()
       : base() {
@@ -51,5 +53,10 @@
     }
 
-    public abstract Schedule DecodeSchedule(ISchedule solution, ItemList<Job> jobData);
+    public Schedule DecodeSchedule(ISchedule schedule, ItemList<Job> jobData) {
+      TSchedule solution = schedule as TSchedule;
+      if (solution == null) throw new InvalidOperationException("Encoding is not of type " + typeof(TSchedule).GetPrettyName());
+      return DecodeSchedule(solution, jobData);
+    }
+    public abstract Schedule DecodeSchedule(TSchedule schedule, ItemList<Job> jobData);
 
     public override IOperation Apply() {
Index: /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding.cs	(revision 13469)
@@ -34,5 +34,5 @@
 namespace HeuristicLab.Encodings.ScheduleEncoding {
   [StorableClass]
-  public abstract class ScheduleEncoding<TSchedule> : Encoding<ISchedule>, IScheduleEncoding
+  public abstract class ScheduleEncoding<TSchedule> : Encoding<TSchedule>, IScheduleEncoding
   where TSchedule : class, ISchedule {
     #region Encoding Parameters
@@ -85,7 +85,6 @@
 
     [Storable]
-    private IValueParameter<IScheduleDecoder> decoderParameter;
-
-    public IValueParameter<IScheduleDecoder> DecoderParameter {
+    private IValueParameter<IScheduleDecoder<TSchedule>> decoderParameter;
+    public IValueParameter<IScheduleDecoder<TSchedule>> DecoderParameter {
       get { return decoderParameter; }
       set {
@@ -114,5 +113,5 @@
     }
 
-    public IScheduleDecoder Decoder {
+    public IScheduleDecoder<TSchedule> Decoder {
       get { return DecoderParameter.Value; }
       set { DecoderParameter.Value = value; }
@@ -123,4 +122,8 @@
     protected ScheduleEncoding(ScheduleEncoding<TSchedule> original, Cloner cloner)
       : base(original, cloner) {
+      jobDataParameter = cloner.Clone(original.JobDataParameter);
+      jobsParameter = cloner.Clone(original.JobsParameter);
+      resourcesParameter = cloner.Clone(original.ResourcesParameter);
+      decoderParameter = cloner.Clone(original.DecoderParameter);
     }
 
@@ -135,5 +138,5 @@
       jobsParameter = new FixedValueParameter<IntValue>(Name + ".Jobs", new IntValue(jobs));
       resourcesParameter = new FixedValueParameter<IntValue>(Name + ".Resources", new IntValue(resources));
-      decoderParameter = new ValueParameter<IScheduleDecoder>(Name + ".Decoder");
+      decoderParameter = new ValueParameter<IScheduleDecoder<TSchedule>>(Name + ".Decoder");
 
       Parameters.Add(jobDataParameter);
@@ -163,10 +166,10 @@
 
     public override void ConfigureOperators(IEnumerable<IItem> operators) {
-      ConfigureCreators(operators.OfType<IScheduleCreator>());
+      ConfigureCreators(operators.OfType<IScheduleCreator<TSchedule>>());
       ConfigureCrossovers(operators.OfType<IScheduleCrossover>());
       ConfigureManipulators(operators.OfType<IScheduleManipulator>());
     }
 
-    private void ConfigureCreators(IEnumerable<IScheduleCreator> creators) {
+    private void ConfigureCreators(IEnumerable<IScheduleCreator<TSchedule>> creators) {
       foreach (var creator in creators) {
         creator.ScheduleParameter.ActualName = Name;
Index: /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Decoder/DirectScheduleDecoder.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Decoder/DirectScheduleDecoder.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Decoder/DirectScheduleDecoder.cs	(revision 13469)
@@ -20,5 +20,4 @@
 #endregion
 
-using System;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -28,5 +27,5 @@
   [Item("DirectScheduleDecoder", "An item used to convert a direct schedule into a generalized schedule.")]
   [StorableClass]
-  public class DirectScheduleDecoder : ScheduleDecoder {
+  public class DirectScheduleDecoder : ScheduleDecoder<Schedule> {
     [StorableConstructor]
     protected DirectScheduleDecoder(bool deserializing) : base(deserializing) { }
@@ -38,11 +37,9 @@
     }
 
-    public override Schedule DecodeSchedule(ISchedule solution, ItemList<Job> jobData) {
-      var schedule = solution as Schedule;
-      if (schedule == null) throw new InvalidOperationException("Encoding is not of type PWREncoding");
-      return DecodeSchedule(schedule, jobData);
+    public override Schedule DecodeSchedule(Schedule solution, ItemList<Job> jobData) {
+      return Decode(solution, jobData);
     }
 
-    public static Schedule DecodeSchedule(Schedule solution, ItemList<Job> jobData) {
+    public static Schedule Decode(Schedule solution, ItemList<Job> jobData) {
       return solution;
     }
Index: /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/DirectScheduleRandomCreator.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/DirectScheduleRandomCreator.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/DirectScheduleRandomCreator.cs	(revision 13469)
@@ -30,5 +30,5 @@
   [Item("DirectScheduleRandomCreator", "Creator class used to create schedule encoding objects.")]
   [StorableClass]
-  public class DirectScheduleRandomCreator : ScheduleCreator, IStochasticOperator, IDirectScheduleOperator {
+  public class DirectScheduleRandomCreator : ScheduleCreator<Schedule>, IStochasticOperator, IDirectScheduleOperator {
 
     public ILookupParameter<IRandom> RandomParameter {
@@ -68,6 +68,5 @@
 
 
-
-    protected override ISchedule CreateSolution() {
+    protected override Schedule CreateSolution() {
       var jobData = (ItemList<Job>)JobDataParameter.ActualValue.Clone();
       var pwrEncoding = new PWREncoding(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value,
Index: /branches/ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Encoding.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Encoding.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Encoding.cs	(revision 13469)
@@ -53,5 +53,5 @@
         foreach (var op in value) encodingOperators.Add(op);
 
-        ISolutionCreator<TSolution> newSolutionCreator = (ISolutionCreator<TSolution>)encodingOperators.FirstOrDefault(o => o.GetType() == solutionCreator.GetType()) ??
+        ISolutionCreator<TSolution> newSolutionCreator = (ISolutionCreator<TSolution>)encodingOperators.FirstOrDefault(o => o.GetType() == SolutionCreator.GetType()) ??
                                encodingOperators.OfType<ISolutionCreator<TSolution>>().First();
         SolutionCreator = newSolutionCreator;
@@ -60,34 +60,47 @@
     }
 
-    ISolutionCreator IEncoding.SolutionCreator {
-      get { return solutionCreator; }
+    public IValueParameter SolutionCreatorParameter {
+      get { return (IValueParameter)Parameters[Name + ".SolutionCreator"]; }
     }
 
-    [Storable]
-    private ISolutionCreator<TSolution> solutionCreator;
+    ISolutionCreator IEncoding.SolutionCreator {
+      get { return SolutionCreator; }
+    }
     public ISolutionCreator<TSolution> SolutionCreator {
-      get {
-        return solutionCreator;
-      }
+      get { return (ISolutionCreator<TSolution>)SolutionCreatorParameter.Value; }
       set {
         if (value == null) throw new ArgumentNullException("SolutionCreator must not be null.");
-        if (solutionCreator == value) return;
-        encodingOperators.Remove(solutionCreator);
+        encodingOperators.Remove(SolutionCreator);
         encodingOperators.Add(value);
-        solutionCreator = value;
+        SolutionCreatorParameter.Value = value;
         OnSolutionCreatorChanged();
       }
     }
 
+
     [StorableConstructor]
     protected Encoding(bool deserializing) : base(deserializing) { }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterEventHandlers();
+    }
+
     protected Encoding(Encoding<TSolution> original, Cloner cloner)
       : base(original, cloner) {
       encodingOperators = cloner.Clone(original.encodingOperators);
-      solutionCreator = cloner.Clone(original.solutionCreator);
+
+      RegisterEventHandlers();
     }
+
     protected Encoding(string name)
       : base(name) {
+      Parameters.Add(new ValueParameter<ISolutionCreator<TSolution>>(name + ".SolutionCreator", "The operator to create a solution."));
       Parameters.Add(new FixedValueParameter<ReadOnlyItemSet<IOperator>>(name + ".Operators", "The operators that the encoding specifies.", encodingOperators.AsReadOnly()));
+
+      RegisterEventHandlers();
+    }
+
+    private void RegisterEventHandlers() {
+      SolutionCreatorParameter.ValueChanged += (o, e) => OnSolutionCreatorChanged();
     }
 
Index: /branches/ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IEncoding.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IEncoding.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IEncoding.cs	(revision 13469)
@@ -26,5 +26,7 @@
 namespace HeuristicLab.Optimization {
   public interface IEncoding : IParameterizedNamedItem {
+    IValueParameter SolutionCreatorParameter { get; }
     ISolutionCreator SolutionCreator { get; }
+
     IEnumerable<IOperator> Operators { get; set; }
 
@@ -32,11 +34,11 @@
     void ConfigureOperators(IEnumerable<IItem> operators);
 
+    event EventHandler OperatorsChanged;
     event EventHandler SolutionCreatorChanged;
-    event EventHandler OperatorsChanged;
   }
 
   public interface IEncoding<TSolution> : IEncoding
     where TSolution : class, ISolution {
-    new ISolutionCreator<TSolution> SolutionCreator { get; set; }
+    //new ISolutionCreator<TSolution> SolutionCreator { get; }
   }
 }
Index: /branches/ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Problem.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Problem.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Problem.cs	(revision 13469)
@@ -30,18 +30,18 @@
 namespace HeuristicLab.Optimization {
   [StorableClass]
-  public abstract class Problem<TEncoding, TSolution, TEvaluator> : HeuristicOptimizationProblem<TEvaluator, ISolutionCreator<TSolution>>, IProblemDefinition<TEncoding, TSolution>, IStorableContent
+  public abstract class Problem<TEncoding, TSolution, TEvaluator> : Problem,
+    IHeuristicOptimizationProblem, IProblemDefinition<TEncoding, TSolution>, IStorableContent
     where TEncoding : class, IEncoding<TSolution>
     where TSolution : class, ISolution
     where TEvaluator : class, IEvaluator {
 
-    public string Filename { get; set; } // TODO: Really okay here?
+    public string Filename { get; set; } // TODO: Really okay here? should be in Problem (non-generic)
 
+    //TODO remove parametr for encoding?
     protected IValueParameter<TEncoding> EncodingParameter {
       get { return (IValueParameter<TEncoding>)Parameters["Encoding"]; }
     }
-
     //mkommend necessary for reuse of operators if the encoding changes
     private TEncoding oldEncoding;
-
     public TEncoding Encoding {
       get { return EncodingParameter.Value; }
@@ -51,4 +51,34 @@
       }
     }
+
+    ISolutionCreator IHeuristicOptimizationProblem.SolutionCreator {
+      get { return Encoding.SolutionCreator; }
+    }
+    IParameter IHeuristicOptimizationProblem.SolutionCreatorParameter {
+      get { return Encoding.SolutionCreatorParameter; }
+    }
+    event EventHandler IHeuristicOptimizationProblem.SolutionCreatorChanged {
+      add { Encoding.SolutionCreatorChanged += value; }
+      remove { Encoding.SolutionCreatorChanged -= value; }
+    }
+
+    //TODO is a parameter for the evaluator really necessary, only single-objective or multi-objective evulators calling the func are possible
+    public ValueParameter<TEvaluator> EvaluatorParameter {
+      get { return (ValueParameter<TEvaluator>)Parameters["Evaluator"]; }
+    }
+    public TEvaluator Evaluator {
+      get { return EvaluatorParameter.Value; }
+      protected set { EvaluatorParameter.Value = value; }
+    }
+    IEvaluator IHeuristicOptimizationProblem.Evaluator { get { return Evaluator; } }
+    IParameter IHeuristicOptimizationProblem.EvaluatorParameter { get { return EvaluatorParameter; } }
+
+    public event EventHandler EvaluatorChanged;
+    protected virtual void OnEvaluatorChanged() {
+      EventHandler handler = EvaluatorChanged;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }
+
 
     protected override IEnumerable<IItem> GetOperators() {
@@ -66,7 +96,8 @@
       : base() {
       Parameters.Add(new ValueParameter<TEncoding>("Encoding", "Describes the configuration of the encoding, what the variables are called, what type they are and their bounds if any."));
+      Parameters.Add(new ValueParameter<TEvaluator>("Evaluator", "The operator used to evaluate a solution."));
+
       if (Encoding != null) {
         oldEncoding = Encoding;
-        SolutionCreator = Encoding.SolutionCreator;
         Parameterize();
       }
@@ -76,6 +107,7 @@
       if (encoding == null) throw new ArgumentNullException("encoding");
       Parameters.Add(new ValueParameter<TEncoding>("Encoding", "Describes the configuration of the encoding, what the variables are called, what type they are and their bounds if any.", encoding));
+      Parameters.Add(new ValueParameter<TEvaluator>("Evaluator", "The operator used to evaluate a solution."));
+
       oldEncoding = Encoding;
-      SolutionCreator = Encoding.SolutionCreator;
       Parameterize();
 
@@ -99,4 +131,5 @@
     private void RegisterEvents() {
       EncodingParameter.ValueChanged += (o, e) => OnEncodingChanged();
+      EvaluatorParameter.ValueChanged += (o, e) => OnEvaluatorChanged();
       //var multiEncoding = Encoding as MultiEncoding;
       //if (multiEncoding != null) multiEncoding.EncodingsChanged += MultiEncodingOnEncodingsChanged;
@@ -122,19 +155,17 @@
         op.EncodingParameter.ActualName = EncodingParameter.Name;
 
-      SolutionCreator = Encoding.SolutionCreator;
-
       //var multiEncoding = Encoding as MultiEncoding;
       //if (multiEncoding != null) multiEncoding.EncodingsChanged += MultiEncodingOnEncodingsChanged;
     }
 
-    protected override void OnSolutionCreatorChanged() {
-      base.OnSolutionCreatorChanged();
-      Encoding.SolutionCreator = SolutionCreator;
-    }
+    //protected override void OnSolutionCreatorChanged() {
+    //  base.OnSolutionCreatorChanged();
+    //  Encoding.SolutionCreator = SolutionCreator;
+    //}
 
     private static void AdaptEncodingOperators(IEncoding oldEncoding, IEncoding newEncoding) {
       if (oldEncoding.GetType() != newEncoding.GetType()) return;
 
-      if (oldEncoding.GetType() == typeof(CombinedEncoding)) {
+      if (oldEncoding is CombinedEncoding) {
         var oldMultiEncoding = (CombinedEncoding)oldEncoding;
         var newMultiEncoding = (CombinedEncoding)newEncoding;
Index: /branches/ProblemRefactoring/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs	(revision 13469)
@@ -132,8 +132,9 @@
       Parameterize();
     }
-    protected override void OnSolutionCreatorChanged() {
-      base.OnSolutionCreatorChanged();
-      Parameterize();
-    }
+    //TODO check with abeham if this is really necessary
+    //protected override void OnSolutionCreatorChanged() {
+    //  base.OnSolutionCreatorChanged();
+    //  Parameterize();
+    //}
     protected override void OnEvaluatorChanged() {
       base.OnEvaluatorChanged();
Index: /branches/ProblemRefactoring/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSearch.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSearch.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSearch.cs	(revision 13469)
@@ -395,5 +395,5 @@
     private void ParameterizeOperators() {
       if (Problem != null) {
-        solutionsCreator.SolutionCreatorParameter.ActualName = Problem.SolutionCreatorParameter.Name;
+        solutionsCreator.SolutionCreatorParameter.ActualName = base.Problem.SolutionCreatorParameter.Name;
         solutionsCreator.EvaluatorParameter.ActualName = Problem.EvaluatorParameter.Name;
 
Index: /branches/ProblemRefactoring/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs	(revision 13469)
@@ -169,8 +169,9 @@
 
     #region Events
-    protected override void OnSolutionCreatorChanged() {
-      Parameterize();
-      base.OnSolutionCreatorChanged();
-    }
+    //TODO check with abhem if this is necessary
+    //protected override void OnSolutionCreatorChanged() {
+    //  Parameterize();
+    //  base.OnSolutionCreatorChanged();
+    //}
     protected override void OnEvaluatorChanged() {
       Evaluator.QualityParameter.ActualNameChanged += Evaluator_QualityParameter_ActualNameChanged;
Index: /branches/ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj	(revision 13469)
@@ -158,9 +158,4 @@
       <Private>False</Private>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Encodings.IntegerVectorEncoding\3.3\HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj">
-      <Project>{DDFB14DD-2A85-493C-A52D-E69729BBAEB0}</Project>
-      <Name>HeuristicLab.Encodings.IntegerVectorEncoding-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Encodings.PermutationEncoding\3.3\HeuristicLab.Encodings.PermutationEncoding-3.3.csproj">
       <Project>{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}</Project>
@@ -201,9 +196,4 @@
       <Project>{3540E29E-4793-49E7-8EE2-FEA7F61C3994}</Project>
       <Name>HeuristicLab.Problems.Instances-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Random\3.3\HeuristicLab.Random-3.3.csproj">
-      <Project>{f4539fb6-4708-40c9-be64-0a1390aea197}</Project>
-      <Name>HeuristicLab.Random-3.3</Name>
       <Private>False</Private>
     </ProjectReference>
Index: /branches/ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem new.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem new.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem new.cs	(revision 13469)
@@ -96,4 +96,5 @@
 
     #region Properties
+
     public ItemList<Job> JobData {
       get { return JobDataParameter.Value; }
@@ -166,8 +167,8 @@
 
     #region Events
-    protected override void OnSolutionCreatorChanged() {
-      //SolutionCreator.ScheduleParameter.ActualNameChanged += SolutionCreator_SchedulingEncodingParameter_ActualNameChanged;
-      //InitializeOperators();
-    }
+    //protected override void OnSolutionCreatorChanged() {
+    //SolutionCreator.ScheduleParameter.ActualNameChanged += SolutionCreator_SchedulingEncodingParameter_ActualNameChanged;
+    //InitializeOperators();
+    //}
     protected override void OnEvaluatorChanged() {
       base.OnEvaluatorChanged();
@@ -196,6 +197,5 @@
     #region Helpers
     private void InitializeOperators() {
-      Operators.Clear();
-      ApplyEncoding();
+      //ApplyEncoding();
       Operators.Add(new BestSchedulingSolutionAnalyzer());
       ParameterizeOperators();
@@ -289,5 +289,5 @@
           }
         }
-        BestKnownSolution = JSMDecoder.DecodeSchedule(enc, jobData, JSMDecodingErrorPolicy.RandomPolicy, JSMForcingStrategy.SwapForcing);
+        BestKnownSolution = JSMDecoder.Decode(enc, jobData, JSMDecodingErrorPolicy.RandomPolicy, JSMForcingStrategy.SwapForcing);
         //if (ScheduleEvaluator is MeanTardinessEvaluator)
         //  BestKnownQuality = MeanTardinessEvaluator.GetMeanTardiness(BestKnownSolution, jobData);
Index: /branches/ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Plugin.cs.frame
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Plugin.cs.frame	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Plugin.cs.frame	(revision 13469)
@@ -30,5 +30,4 @@
   [PluginDependency("HeuristicLab.Core", "3.3")]
   [PluginDependency("HeuristicLab.Data", "3.3")]
-  [PluginDependency("HeuristicLab.Encodings.IntegerVectorEncoding", "3.3")]
   [PluginDependency("HeuristicLab.Encodings.PermutationEncoding", "3.3")]
   [PluginDependency("HeuristicLab.Encodings.ScheduleEncoding", "3.3")]
Index: /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/EsGriewankSampleTest.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/EsGriewankSampleTest.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/EsGriewankSampleTest.cs	(revision 13469)
@@ -64,5 +64,5 @@
       problem.ProblemSize = 10;
       problem.TestFunction = new Griewank();
-      problem.SolutionCreatorParameter.Value = new UniformRandomRealVectorCreator();
+      problem.Encoding.SolutionCreator = new UniformRandomRealVectorCreator();
       problem.Bounds = new DoubleMatrix(new double[,] { { -600, 600 } });
       problem.BestKnownQuality = 0;
Index: /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/LocalSearchKnapsackSampleTest.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/LocalSearchKnapsackSampleTest.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/LocalSearchKnapsackSampleTest.cs	(revision 13469)
@@ -62,5 +62,5 @@
       problem.BestKnownSolution = new HeuristicLab.Encodings.BinaryVectorEncoding.BinaryVector(new bool[] { 
        true , false, false, true , true , true , true , true , false, true , true , true , true , true , true , false, true , false, true , true , false, true , true , false, true , false, true , true , true , false, true , true , false, true , true , false, true , false, true , true , true , true , true , true , true , true , true , true , true , true , true , false, true , false, false, true , true , false, true , true , true , true , true , true , true , true , false, true , false, true , true , true , true , false, true , true , true , true , true , true , true , true});
-      problem.SolutionCreatorParameter.Value = new RandomBinaryVectorCreator();
+      problem.Encoding.SolutionCreator = new RandomBinaryVectorCreator();
       problem.KnapsackCapacity = 297;
       problem.Values = new IntArray(new int[] { 
Index: /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/OSESGriewankSampleTest.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/OSESGriewankSampleTest.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/OSESGriewankSampleTest.cs	(revision 13469)
@@ -64,5 +64,5 @@
       problem.ProblemSize = 10;
       problem.TestFunction = new Griewank();
-      problem.SolutionCreatorParameter.Value = new UniformRandomRealVectorCreator();
+      problem.Encoding.SolutionCreator = new UniformRandomRealVectorCreator();
       problem.Bounds = new DoubleMatrix(new double[,] { { -600, 600 } });
       problem.BestKnownQuality = 0;
Index: /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/PsoSchwefelSampleTest.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/PsoSchwefelSampleTest.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/PsoSchwefelSampleTest.cs	(revision 13469)
@@ -73,5 +73,5 @@
       problem.TestFunction = new Schwefel();
       problem.ProblemSize = 2;
-      problem.SolutionCreatorParameter.Value = new UniformRandomRealVectorCreator();
+      problem.Encoding.SolutionCreator = new UniformRandomRealVectorCreator();
       #endregion
       #region Algorithm Configuration
Index: /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/RAPGASchedulingSampleTest.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/RAPGASchedulingSampleTest.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/RAPGASchedulingSampleTest.cs	(revision 13469)
@@ -23,5 +23,5 @@
 using System.Linq;
 using HeuristicLab.Algorithms.RAPGA;
-using HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix;
+using HeuristicLab.Encodings.ScheduleEncoding;
 using HeuristicLab.Persistence.Default.Xml;
 using HeuristicLab.Problems.Scheduling;
@@ -57,5 +57,5 @@
     private RAPGA CreateRAPGASchedulingSample() {
       #region Problem Configuration
-      JobShopSchedulingProblem problem = new JobShopSchedulingProblem();
+      var problem = new JobShopSchedulingProblemNew();
       #endregion
 
Index: /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/SimulatedAnnealingRastriginSampleTest.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/SimulatedAnnealingRastriginSampleTest.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/SimulatedAnnealingRastriginSampleTest.cs	(revision 13469)
@@ -62,5 +62,5 @@
       problem.TestFunction= new Rastrigin();
       problem.ProblemSize = 2;
-      problem.SolutionCreatorParameter.Value = new UniformRandomRealVectorCreator();
+      problem.Encoding.SolutionCreator = new UniformRandomRealVectorCreator();
       #endregion
       #region Algorithm Configuration
Index: /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/DirectScheduleGTCrossoverTest.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/DirectScheduleGTCrossoverTest.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/DirectScheduleGTCrossoverTest.cs	(revision 13469)
@@ -22,6 +22,5 @@
 using System.Linq;
 using HeuristicLab.Core;
-using HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition;
-using HeuristicLab.Encodings.ScheduleEncoding.ScheduleEncoding;
+using HeuristicLab.Encodings.ScheduleEncoding;
 using HeuristicLab.Tests;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
@@ -48,5 +47,5 @@
       Schedule actual;
       actual = DirectScheduleGTCrossover.Apply(random, parent1, parent2, jobData, mutProp);
-      Schedule expected = DirectScheduleRandomCreator.Apply(3, 3, new PWREncoding(3, 3, new TestRandom(new int[] { 0, 2, 1, 1, 0, 2, 1, 2, 0 }, null)), TestUtils.CreateJobData());
+      Schedule expected = DirectScheduleRandomCreator.Apply(new PWREncoding(3, 3, new TestRandom(new int[] { 0, 2, 1, 1, 0, 2, 1, 2, 0 }, null)), TestUtils.CreateJobData());
       Assert.IsTrue(TestUtils.ScheduleEquals(actual, expected));
     }
Index: /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/JSMJOXCrossoverTest.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/JSMJOXCrossoverTest.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/JSMJOXCrossoverTest.cs	(revision 13469)
@@ -22,5 +22,4 @@
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.PermutationEncoding;
-using HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix;
 using HeuristicLab.Tests;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
@@ -40,13 +39,13 @@
     [TestProperty("Time", "short")]
     public void ApplyTest() {
-      IRandom random = new TestRandom(new int[] { 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1 }, null);
+      IRandom random = new TestRandom(new int[] { 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1 }, null);
       JSMEncoding p1 = TestUtils.CreateTestJSM1();
       JSMEncoding p2 = TestUtils.CreateTestJSM2();
-      JSMEncoding expected = new JSMEncoding();
-      ItemList<Permutation> jsm = new ItemList<Permutation>();
+      JSMEncoding expected = new JSMEncoding(0);
+      ItemList<Permutation> jsm = expected.JobSequenceMatrix;
       for (int i = 0; i < 6; i++) {
         jsm.Add(new Permutation(PermutationTypes.Absolute, new int[] { 5, 4, 3, 0, 1, 2 }));
       }
-      expected.JobSequenceMatrix = jsm;
+
 
       JSMEncoding actual;
Index: /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/JSMSXXCrossoverTest.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/JSMSXXCrossoverTest.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/JSMSXXCrossoverTest.cs	(revision 13469)
@@ -22,5 +22,4 @@
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.PermutationEncoding;
-using HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix;
 using HeuristicLab.Tests;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
@@ -40,13 +39,12 @@
     [TestProperty("Time", "short")]
     public void ApplyTest() {
-      IRandom random = new TestRandom(new int[] { 3 }, null);
+      IRandom random = new TestRandom(new int[] { 0, 3 }, null);
       JSMEncoding p1 = TestUtils.CreateTestJSM1();
       JSMEncoding p2 = TestUtils.CreateTestJSM2();
-      JSMEncoding expected = new JSMEncoding();
-      ItemList<Permutation> jsm = new ItemList<Permutation>();
+      JSMEncoding expected = new JSMEncoding(0);
+      ItemList<Permutation> jsm = expected.JobSequenceMatrix;
       for (int i = 0; i < 6; i++) {
         jsm.Add(new Permutation(PermutationTypes.Absolute, new int[] { 2, 1, 0, 3, 4, 5 }));
       }
-      expected.JobSequenceMatrix = jsm;
 
       JSMEncoding actual;
Index: /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/JSMShiftChangeManipulatorTest.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/JSMShiftChangeManipulatorTest.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/JSMShiftChangeManipulatorTest.cs	(revision 13469)
@@ -22,5 +22,4 @@
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.PermutationEncoding;
-using HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix;
 using HeuristicLab.Tests;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
@@ -43,11 +42,10 @@
       JSMEncoding individual = TestUtils.CreateTestJSM1();
       JSMShiftChangeManipulator.Apply(random, individual);
-      JSMEncoding expected = new JSMEncoding();
-      ItemList<Permutation> jsm = new ItemList<Permutation>();
+      JSMEncoding expected = new JSMEncoding(0);
+      ItemList<Permutation> jsm = expected.JobSequenceMatrix;
       for (int i = 0; i < 3; i++) {
         jsm.Add(new Permutation(PermutationTypes.Absolute, new int[] { 0, 1, 3, 2, 4, 5 }));
         jsm.Add(new Permutation(PermutationTypes.Absolute, new int[] { 0, 1, 3, 4, 2, 5 }));
       }
-      expected.JobSequenceMatrix = jsm;
 
       Assert.IsTrue(TestUtils.JSMEncodingEquals(expected, individual));
Index: /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/PWRGOXCrossoverTest.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/PWRGOXCrossoverTest.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/PWRGOXCrossoverTest.cs	(revision 13469)
@@ -22,5 +22,4 @@
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.IntegerVectorEncoding;
-using HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition;
 using HeuristicLab.Tests;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
Index: /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/PWRPPXCrossoverTest.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/PWRPPXCrossoverTest.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/PWRPPXCrossoverTest.cs	(revision 13469)
@@ -22,5 +22,4 @@
 using HeuristicLab.Core;
 using HeuristicLab.Encodings.IntegerVectorEncoding;
-using HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition;
 using HeuristicLab.Tests;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
Index: /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/TestUtils.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/TestUtils.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3/TestUtils.cs	(revision 13469)
@@ -24,6 +24,5 @@
 using HeuristicLab.Encodings.IntegerVectorEncoding;
 using HeuristicLab.Encodings.PermutationEncoding;
-using HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix;
-using HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition;
+
 using HeuristicLab.Tests;
 
@@ -31,18 +30,16 @@
   public class TestUtils {
     public static JSMEncoding CreateTestJSM1() {
-      JSMEncoding result = new JSMEncoding();
-      ItemList<Permutation> jsm = new ItemList<Permutation>();
+      JSMEncoding result = new JSMEncoding(0);
+      ItemList<Permutation> jsm = result.JobSequenceMatrix;
       for (int i = 0; i < 6; i++)
         jsm.Add(new Permutation(PermutationTypes.Absolute, new int[] { 0, 1, 2, 3, 4, 5 }));
-      result.JobSequenceMatrix = jsm;
       return result;
     }
 
     public static JSMEncoding CreateTestJSM2() {
-      JSMEncoding result = new JSMEncoding();
-      ItemList<Permutation> jsm = new ItemList<Permutation>();
+      JSMEncoding result = new JSMEncoding(0);
+      ItemList<Permutation> jsm = result.JobSequenceMatrix;
       for (int i = 0; i < 6; i++)
         jsm.Add(new Permutation(PermutationTypes.Absolute, new int[] { 5, 4, 3, 2, 1, 0 }));
-      result.JobSequenceMatrix = jsm;
       return result;
     }
@@ -66,23 +63,23 @@
     public static ItemList<Job> CreateJobData() {
       Job j1 = new Job(0, 0);
-      j1.Tasks = new ItemList<Task> { 
+      j1.Tasks.AddRange(new[]{  
         new Task (0, 0, j1.Index, 1),
         new Task (1, 1, j1.Index, 2),
         new Task (2, 2, j1.Index, 1)
-      };
+      });
 
       Job j2 = new Job(1, 0);
-      j2.Tasks = new ItemList<Task> { 
+      j2.Tasks.AddRange(new[]{ 
         new Task (3, 2, j2.Index, 2),
         new Task (4, 1, j2.Index, 1),
         new Task (5, 0, j2.Index, 2)
-      };
+      });
 
       Job j3 = new Job(2, 0);
-      j3.Tasks = new ItemList<Task> { 
+      j3.Tasks.AddRange(new[]{ 
         new Task (6, 0, j3.Index, 1),
         new Task (7, 2, j3.Index, 2),
         new Task (8, 1, j3.Index, 1)
-      };
+      });
 
       return new ItemList<Job> { j1, j2, j3 };
@@ -90,10 +87,10 @@
 
     public static Schedule CreateTestSchedule1() {
-      Schedule result = DirectScheduleRandomCreator.Apply(3, 3, new PWREncoding(3, 3, new TestRandom(new int[] { 1, 0, 1, 1, 2, 0, 2, 2, 0 }, null)), CreateJobData());
+      Schedule result = DirectScheduleRandomCreator.Apply(new PWREncoding(3, 3, new TestRandom(new int[] { 1, 0, 1, 1, 2, 0, 2, 2, 0 }, null)), CreateJobData());
       return result;
     }
 
     public static Schedule CreateTestSchedule2() {
-      Schedule result = DirectScheduleRandomCreator.Apply(3, 3, new PWREncoding(3, 3, new TestRandom(new int[] { 0, 1, 1, 0, 2, 0, 1, 2, 2 }, null)), CreateJobData());
+      Schedule result = DirectScheduleRandomCreator.Apply(new PWREncoding(3, 3, new TestRandom(new int[] { 0, 1, 1, 0, 2, 0, 1, 2, 2 }, null)), CreateJobData());
       return result;
     }
Index: /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.QuadraticAssignment-3.3/QAPLIBInstancesTest.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.QuadraticAssignment-3.3/QAPLIBInstancesTest.cs	(revision 13468)
+++ /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab.Problems.QuadraticAssignment-3.3/QAPLIBInstancesTest.cs	(revision 13469)
@@ -202,5 +202,6 @@
         try {
           qap.Load(provider.LoadData(instance));
-        } catch (Exception ex) {
+        }
+        catch (Exception ex) {
           failedInstances.AppendLine(instance + ": " + ex.Message);
         }
@@ -223,5 +224,5 @@
         qap.Load(provider.LoadData(instance));
         if (qaplibInstances.ContainsKey(instance.Name)
-          && qap.BestKnownQuality != null && qap.BestKnownQuality != qaplibInstances[instance.Name])
+          && qap.BestKnownQuality != qaplibInstances[instance.Name])
           failedInstances.AppendLine(instance.Name + ": " + qap.BestKnownQuality.ToString() + " vs " + qaplibInstances[instance.Name]);
       }
