Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/JobView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/JobView.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/JobView.cs	(revision 8887)
@@ -31,5 +31,5 @@
   public partial class JobView : ItemView {
     private ItemListView<Task> tasksView;
-    private bool SuppressEvents = false;
+    protected bool SuppressEvents = false;
 
     public new Job Content {
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/TaskView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/TaskView.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/TaskView.cs	(revision 8887)
@@ -30,5 +30,5 @@
   [Content(typeof(Task))]
   public partial class TaskView : ItemView {
-    private bool SuppressEvents = false;
+    protected bool SuppressEvents = false;
 
     public new Task Content {
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj	(revision 8887)
@@ -110,5 +110,4 @@
   <ItemGroup>
     <Compile Include="Interfaces\IDirectScheduleOperator.cs" />
-    <Compile Include="Interfaces\IScheduleEvaluationAlgorithm.cs" />
     <Compile Include="Interfaces\IJSMOperator.cs" />
     <Compile Include="Interfaces\IPRVOperator.cs" />
@@ -116,7 +115,5 @@
     <Compile Include="Interfaces\IScheduleCreator.cs" />
     <Compile Include="Interfaces\IScheduleCrossover.cs" />
-    <Compile Include="Interfaces\IScheduleDecoder.cs" />
     <Compile Include="Interfaces\IScheduleEncoding.cs" />
-    <Compile Include="Interfaces\IScheduleEvaluator.cs" />
     <Compile Include="Interfaces\IScheduleManipulator.cs" />
     <Compile Include="Interfaces\IScheduleOperator.cs" />
@@ -151,5 +148,4 @@
     <Compile Include="ScheduleEncoding\Job.cs" />
     <Compile Include="ScheduleEncoding\Manipulators\DirectScheduleManipulator.cs" />
-    <Compile Include="ScheduleEncoding\Manipulators\ConcreteScheduleManipulator.cs" />
     <Compile Include="ScheduleEncoding\DirectScheduleRandomCreator.cs" />
     <Compile Include="ScheduleEncoding\Resource.cs" />
@@ -158,5 +154,4 @@
     <Compile Include="ScheduleCreator.cs" />
     <Compile Include="ScheduleCrossover.cs" />
-    <Compile Include="ScheduleDecoder.cs" />
     <Compile Include="ScheduleEncoding\Task.cs" />
     <Compile Include="ScheduleManipulator.cs" />
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IDirectScheduleOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IDirectScheduleOperator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IDirectScheduleOperator.cs	(revision 8887)
@@ -21,4 +21,5 @@
 
 using HeuristicLab.Core;
+
 namespace HeuristicLab.Encodings.ScheduleEncoding {
   public interface IDirectScheduleOperator : IOperator {
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IJSMOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IJSMOperator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IJSMOperator.cs	(revision 8887)
@@ -1,3 +1,24 @@
-﻿using HeuristicLab.Core;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
 
 namespace HeuristicLab.Encodings.ScheduleEncoding {
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IPRVOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IPRVOperator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IPRVOperator.cs	(revision 8887)
@@ -1,3 +1,24 @@
-﻿using HeuristicLab.Core;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
 
 namespace HeuristicLab.Encodings.ScheduleEncoding {
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IPWROperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IPWROperator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IPWROperator.cs	(revision 8887)
@@ -1,3 +1,24 @@
-﻿using HeuristicLab.Core;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
 
 namespace HeuristicLab.Encodings.ScheduleEncoding {
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCreator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCreator.cs	(revision 8887)
@@ -1,6 +1,29 @@
-﻿using HeuristicLab.Optimization;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
 
 namespace HeuristicLab.Encodings.ScheduleEncoding {
   public interface IScheduleCreator : ISolutionCreator, IScheduleOperator {
+    ILookupParameter<IScheduleEncoding> ScheduleEncodingParameter { get; }
   }
 }
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCrossover.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCrossover.cs	(revision 8887)
@@ -1,6 +1,30 @@
-﻿using HeuristicLab.Optimization;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
 
 namespace HeuristicLab.Encodings.ScheduleEncoding {
   public interface IScheduleCrossover : ICrossover, IScheduleOperator {
+    ILookupParameter<IScheduleEncoding> ChildParameter { get; }
+    IScopeTreeLookupParameter<IScheduleEncoding> ParentsParameter { get; }
   }
 }
Index: unk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleDecoder.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleDecoder.cs	(revision 8886)
+++ 	(revision )
@@ -1,27 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-
-namespace HeuristicLab.Encodings.ScheduleEncoding {
-  public interface IScheduleDecoder : IScheduleOperator {
-
-  }
-}
Index: unk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleEvaluationAlgorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleEvaluationAlgorithm.cs	(revision 8886)
+++ 	(revision )
@@ -1,6 +1,0 @@
-﻿using HeuristicLab.Optimization;
-
-namespace HeuristicLab.Encodings.ScheduleEncoding {
-  public interface IScheduleEvaluationAlgorithm : ISingleObjectiveEvaluator {
-  }
-}
Index: unk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleEvaluator.cs	(revision 8886)
+++ 	(revision )
@@ -1,6 +1,0 @@
-﻿using HeuristicLab.Optimization;
-
-namespace HeuristicLab.Encodings.ScheduleEncoding {
-  public interface IScheduleEvaluator : ISingleObjectiveEvaluator, IScheduleOperator {
-  }
-}
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleManipulator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleManipulator.cs	(revision 8887)
@@ -20,8 +20,10 @@
 #endregion
 
+using HeuristicLab.Core;
 using HeuristicLab.Optimization;
 
 namespace HeuristicLab.Encodings.ScheduleEncoding {
   public interface IScheduleManipulator : IManipulator, IScheduleOperator {
+    ILookupParameter<IScheduleEncoding> ScheduleEncodingParameter { get; }
   }
 }
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleOperator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleOperator.cs	(revision 8887)
@@ -1,3 +1,24 @@
-﻿using HeuristicLab.Core;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
 
 namespace HeuristicLab.Encodings.ScheduleEncoding {
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMCrossover.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMCrossover.cs	(revision 8887)
@@ -27,5 +27,5 @@
   [Item("JSMCrossover", "An operator which crosses two JSM representations.")]
   [StorableClass]
-  public abstract class JSMCrossover : ScheduleCrossover<JSMEncoding>, IJSMOperator {
+  public abstract class JSMCrossover : ScheduleCrossover, IJSMOperator {
 
     [StorableConstructor]
@@ -41,5 +41,5 @@
 
     public override IOperation Apply() {
-      ItemArray<JSMEncoding> parents = ParentsParameter.ActualValue;
+      var parents = ParentsParameter.ActualValue;
 
       ChildParameter.ActualValue =
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMJOXCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMJOXCrossover.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMJOXCrossover.cs	(revision 8887)
@@ -30,17 +30,16 @@
   [StorableClass]
   public class JSMJOXCrossover : JSMCrossover {
+
     [StorableConstructor]
     protected JSMJOXCrossover(bool deserializing) : base(deserializing) { }
-    protected JSMJOXCrossover(JSMJOXCrossover original, Cloner cloner)
-      : base(original, cloner) {
-    }
+    protected JSMJOXCrossover(JSMJOXCrossover original, Cloner cloner) : base(original, cloner) { }
+    public JSMJOXCrossover() : base() { }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new JSMJOXCrossover(this, cloner);
     }
-    public JSMJOXCrossover() : base() { }
-
 
     public static JSMEncoding Apply(IRandom random, JSMEncoding p1, JSMEncoding p2) {
-      JSMEncoding result = new JSMEncoding();
+      var result = new JSMEncoding();
 
       int nrOfResources = p1.JobSequenceMatrix.Count;
@@ -48,5 +47,5 @@
 
       //Determine randomly which jobindexes persist
-      BoolArray persist = new BoolArray(nrOfJobs);
+      var persist = new BoolArray(nrOfJobs);
       for (int i = 0; i < persist.Length; i++) {
         persist[i] = random.Next(2) == 1;
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMOXCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMOXCrossover.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMOXCrossover.cs	(revision 8887)
@@ -28,17 +28,16 @@
   [StorableClass]
   public class JSMOXCrossover : JSMCrossover {
+
     [StorableConstructor]
     protected JSMOXCrossover(bool deserializing) : base(deserializing) { }
-    protected JSMOXCrossover(JSMOXCrossover original, Cloner cloner)
-      : base(original, cloner) {
-    }
+    protected JSMOXCrossover(JSMOXCrossover original, Cloner cloner) : base(original, cloner) { }
+    public JSMOXCrossover() : base() { }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new JSMOXCrossover(this, cloner);
     }
-    public JSMOXCrossover() : base() { }
-
 
     public static JSMEncoding Apply(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
-      JSMEncoding result = new JSMEncoding();
+      var result = new JSMEncoding();
 
       for (int i = 0; i < parent1.JobSequenceMatrix.Count; i++) {
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMSXXCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMSXXCrossover.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMSXXCrossover.cs	(revision 8887)
@@ -29,21 +29,20 @@
   [StorableClass]
   public class JSMSXXCrossover : JSMCrossover {
+
     [StorableConstructor]
     protected JSMSXXCrossover(bool deserializing) : base(deserializing) { }
-    protected JSMSXXCrossover(JSMSXXCrossover original, Cloner cloner)
-      : base(original, cloner) {
-    }
+    protected JSMSXXCrossover(JSMSXXCrossover original, Cloner cloner) : base(original, cloner) { }
+    public JSMSXXCrossover() : base() { }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new JSMSXXCrossover(this, cloner);
     }
-    public JSMSXXCrossover() : base() { }
-
 
     public static JSMEncoding Apply(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
-      JSMEncoding result = new JSMEncoding();
+      var result = new JSMEncoding();
       int subSequenceLength = random.Next(parent1.JobSequenceMatrix[0].Length);
       for (int i = 0; i < parent1.JobSequenceMatrix.Count; i++) {
-        Permutation p1 = (Permutation)parent1.JobSequenceMatrix[i].Clone();
-        Permutation p2 = (Permutation)parent2.JobSequenceMatrix[i].Clone();
+        var p1 = (Permutation)parent1.JobSequenceMatrix[i].Clone();
+        var p2 = (Permutation)parent2.JobSequenceMatrix[i].Clone();
         FindAndExchangeSubsequences(p1, p2, subSequenceLength);
         result.JobSequenceMatrix.Add(p1);
@@ -51,4 +50,5 @@
       return result;
     }
+
     private static void FindAndExchangeSubsequences(Permutation p1, Permutation p2, int subSequenceLength) {
       for (int i = 0; i <= p1.Length - subSequenceLength; i++) {
@@ -63,6 +63,7 @@
       }
     }
+
     private static void ExchangeSubsequences(Permutation p1, int index1, Permutation p2, int index2, int subSequenceLength) {
-      Permutation aux = (Permutation)p1.Clone();
+      var aux = (Permutation)p1.Clone();
       for (int i = 0; i < subSequenceLength; i++) {
         p1[i + index1] = p2[i + index2];
@@ -70,4 +71,5 @@
       }
     }
+
     private static bool AreEqualSubsequences(int[] ss1, int[] ss2) {
       int counter = 0;
@@ -80,6 +82,7 @@
       return counter == ss1.Length;
     }
+
     private static int[] GetSubSequenceAtPosition(Permutation p1, int index, int subSequenceLength) {
-      int[] result = new int[subSequenceLength];
+      var result = new int[subSequenceLength];
       for (int i = 0; i < subSequenceLength; i++)
         result[i] = p1[i + index];
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMEncoding.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMEncoding.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMEncoding.cs	(revision 8887)
@@ -30,4 +30,5 @@
   [StorableClass]
   public class JSMEncoding : Item, IScheduleEncoding {
+
     [Storable]
     public ItemList<Permutation> JobSequenceMatrix { get; set; }
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMRandomCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMRandomCreator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMRandomCreator.cs	(revision 8887)
@@ -28,10 +28,9 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
-
 namespace HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix {
   [Item("JobSequenceMatrixCreator", "Creator class used to create Job Sequence Matrix solutions for standard JobShop scheduling problems.")]
   [StorableClass]
-  public class JSMRandomCreator : ScheduleCreator<JSMEncoding>, IStochasticOperator {
-    #region Parameter Properties
+  public class JSMRandomCreator : ScheduleCreator, IStochasticOperator {
+
     public ILookupParameter<IRandom> RandomParameter {
       get { return (LookupParameter<IRandom>)Parameters["Random"]; }
@@ -43,15 +42,8 @@
       get { return (IValueLookupParameter<IntValue>)Parameters["Resources"]; }
     }
-    #endregion
-
 
     [StorableConstructor]
     protected JSMRandomCreator(bool deserializing) : base(deserializing) { }
-    protected JSMRandomCreator(JSMRandomCreator original, Cloner cloner)
-      : base(original, cloner) {
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new JSMRandomCreator(this, cloner);
-    }
+    protected JSMRandomCreator(JSMRandomCreator original, Cloner cloner) : base(original, cloner) { }
     public JSMRandomCreator()
       : base() {
@@ -63,17 +55,17 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JSMRandomCreator(this, cloner);
+    }
 
     public static JSMEncoding Apply(int jobs, int resources, IRandom random) {
-      JSMEncoding solution = new JSMEncoding();
-
+      var solution = new JSMEncoding();
       for (int i = 0; i < resources; i++) {
         solution.JobSequenceMatrix.Add(new Permutation(PermutationTypes.Absolute, jobs, random));
       }
-
       return solution;
     }
 
-
-    protected override JSMEncoding CreateSolution() {
+    protected override IScheduleEncoding CreateSolution() {
       return Apply(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value, RandomParameter.ActualValue);
     }
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMManipulator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMManipulator.cs	(revision 8887)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -27,5 +28,5 @@
   [Item("JSMManipulator", "An operator which manipulates a JSM representation.")]
   [StorableClass]
-  public abstract class JSMManipulator : ScheduleManipulator<JSMEncoding>, IJSMOperator {
+  public abstract class JSMManipulator : ScheduleManipulator, IJSMOperator {
     [StorableConstructor]
     protected JSMManipulator(bool deserializing) : base(deserializing) { }
@@ -36,9 +37,9 @@
     }
 
-    protected abstract void Manipulate(IRandom random, JSMEncoding individual);
-
+    protected abstract void Manipulate(IRandom random, IScheduleEncoding individual);
 
     public override IOperation Apply() {
-      JSMEncoding solution = ScheduleEncodingParameter.ActualValue;
+      var solution = ScheduleEncodingParameter.ActualValue as JSMEncoding;
+      if (solution == null) throw new InvalidOperationException("ScheduleEncoding was not found or is not of type JSMEncoding.");
       Manipulate(RandomParameter.ActualValue, solution);
       return base.Apply();
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMShiftChangeManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMShiftChangeManipulator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMShiftChangeManipulator.cs	(revision 8887)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -28,19 +29,16 @@
 
 namespace HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix {
-
   [Item("JSMShiftChangeManipulator", "Represents a manipulation operation where the operations of a randomly determined job are shifted in one direction for all resources.")]
   [StorableClass]
   public class JSMShiftChangeManipulator : JSMManipulator {
+
     [StorableConstructor]
     protected JSMShiftChangeManipulator(bool deserializing) : base(deserializing) { }
-    protected JSMShiftChangeManipulator(JSMShiftChangeManipulator original, Cloner cloner)
-      : base(original, cloner) {
-    }
+    protected JSMShiftChangeManipulator(JSMShiftChangeManipulator original, Cloner cloner) : base(original, cloner) { }
+    public JSMShiftChangeManipulator() : base() { }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new JSMShiftChangeManipulator(this, cloner);
     }
-
-    public JSMShiftChangeManipulator() : base() { }
-
 
     public static void Apply(IRandom random, JSMEncoding individual) {
@@ -65,6 +63,8 @@
     }
 
-    protected override void Manipulate(IRandom random, JSMEncoding individual) {
-      Apply(random, individual);
+    protected override void Manipulate(IRandom random, IScheduleEncoding encoding) {
+      var solution = encoding as JSMEncoding;
+      if (solution == null) throw new InvalidOperationException("Encoding is not of type JSMEncoding");
+      Apply(random, solution);
     }
   }
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMSwapManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMSwapManipulator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMSwapManipulator.cs	(revision 8887)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -26,19 +27,16 @@
 
 namespace HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix {
-
   [Item("JSMSwapManipulator", "Represents a manipulation operation swapping parts of the individual.")]
   [StorableClass]
   public class JSMSwapManipulator : JSMManipulator {
+
     [StorableConstructor]
     protected JSMSwapManipulator(bool deserializing) : base(deserializing) { }
-    protected JSMSwapManipulator(JSMSwapManipulator original, Cloner cloner)
-      : base(original, cloner) {
-    }
+    protected JSMSwapManipulator(JSMSwapManipulator original, Cloner cloner) : base(original, cloner) { }
+    public JSMSwapManipulator() : base() { }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new JSMSwapManipulator(this, cloner);
     }
-
-    public JSMSwapManipulator() : base() { }
-
 
     public static void Apply(IRandom random, JSMEncoding individual) {
@@ -52,6 +50,8 @@
     }
 
-    protected override void Manipulate(IRandom random, JSMEncoding individual) {
-      Apply(random, individual);
+    protected override void Manipulate(IRandom random, IScheduleEncoding individual) {
+      var solution = individual as JSMEncoding;
+      if (solution == null) throw new InvalidOperationException("Encoding is not of type JSMEncoding");
+      Apply(random, solution);
     }
   }
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRCrossover.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRCrossover.cs	(revision 8887)
@@ -27,5 +27,5 @@
   [Item("PWRCrossover", "An operator which crosses two JSM representations.")]
   [StorableClass]
-  public abstract class PWRCrossover : ScheduleCrossover<PWREncoding>, IPWROperator {
+  public abstract class PWRCrossover : ScheduleCrossover, IPWROperator {
 
     [StorableConstructor]
@@ -41,5 +41,5 @@
 
     public override IOperation Apply() {
-      ItemArray<PWREncoding> parents = ParentsParameter.ActualValue;
+      var parents = ParentsParameter.ActualValue;
 
       ChildParameter.ActualValue =
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRGOXCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRGOXCrossover.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRGOXCrossover.cs	(revision 8887)
@@ -31,17 +31,17 @@
   [StorableClass]
   public class PWRGOXCrossover : PWRCrossover {
+
     [StorableConstructor]
     protected PWRGOXCrossover(bool deserializing) : base(deserializing) { }
-    protected PWRGOXCrossover(PWRGOXCrossover original, Cloner cloner)
-      : base(original, cloner) {
-    }
+    protected PWRGOXCrossover(PWRGOXCrossover original, Cloner cloner) : base(original, cloner) { }
+    public PWRGOXCrossover() : base() { }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new PWRGOXCrossover(this, cloner);
     }
-    public PWRGOXCrossover() : base() { }
 
     private static int[] GetLookUpForIndividual(List<int> p) {
-      int[] result = new int[p.Count];
-      Dictionary<int, int> lookUpTable = new Dictionary<int, int>();
+      var result = new int[p.Count];
+      var lookUpTable = new Dictionary<int, int>();
 
       for (int i = 0; i < p.Count; i++) {
@@ -54,10 +54,11 @@
       return result;
     }
+
     public static PWREncoding Apply(IRandom random, PWREncoding parent1, PWREncoding parent2) {
-      PWREncoding result = new PWREncoding();
+      var result = new PWREncoding();
 
-      List<int> p1 = ((IntegerVector)(parent1.PermutationWithRepetition.Clone())).ToList<int>();
-      List<int> p2 = ((IntegerVector)(parent2.PermutationWithRepetition.Clone())).ToList<int>();
-      List<int> child = new List<int>();
+      var p1 = ((IntegerVector)(parent1.PermutationWithRepetition.Clone())).ToList();
+      var p2 = ((IntegerVector)(parent2.PermutationWithRepetition.Clone())).ToList();
+      var child = new List<int>();
 
       int[] lookUpArrayP1 = GetLookUpForIndividual(p1);
@@ -90,7 +91,4 @@
     }
 
-
-
-
   }
 }
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRPPXCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRPPXCrossover.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRPPXCrossover.cs	(revision 8887)
@@ -31,21 +31,21 @@
   [StorableClass]
   public class PWRPPXCrossover : PWRCrossover {
+
     [StorableConstructor]
     protected PWRPPXCrossover(bool deserializing) : base(deserializing) { }
-    protected PWRPPXCrossover(PWRPPXCrossover original, Cloner cloner)
-      : base(original, cloner) {
-    }
+    protected PWRPPXCrossover(PWRPPXCrossover original, Cloner cloner) : base(original, cloner) { }
+    public PWRPPXCrossover() : base() { }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new PWRPPXCrossover(this, cloner);
     }
-    public PWRPPXCrossover() : base() { }
 
     public static PWREncoding Apply(IRandom random, PWREncoding parent1, PWREncoding parent2) {
-      PWREncoding result = new PWREncoding();
-      List<int> p1 = ((IntegerVector)(parent1.PermutationWithRepetition.Clone())).ToList<int>();
-      List<int> p2 = ((IntegerVector)(parent2.PermutationWithRepetition.Clone())).ToList<int>();
-      List<int> child = new List<int>();
+      var result = new PWREncoding();
+      var p1 = ((IntegerVector)(parent1.PermutationWithRepetition.Clone())).ToList();
+      var p2 = ((IntegerVector)(parent2.PermutationWithRepetition.Clone())).ToList();
+      var child = new List<int>();
 
-      bool[] lookUpTable = new bool[parent1.PermutationWithRepetition.Length];
+      var lookUpTable = new bool[parent1.PermutationWithRepetition.Length];
       for (int i = 0; i < lookUpTable.Length; i++) {
         lookUpTable[i] = random.Next(2) == 1;
@@ -73,5 +73,4 @@
     }
 
-
   }
 }
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Manipulators/PWRInsertionManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Manipulators/PWRInsertionManipulator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Manipulators/PWRInsertionManipulator.cs	(revision 8887)
@@ -28,5 +28,4 @@
 
 namespace HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition {
-
   [Item("PWRInsertionManipulator", "Represents a manipulation operation inserting parts of the individual at another position.")]
   [StorableClass]
@@ -34,11 +33,10 @@
     [StorableConstructor]
     protected PWRInsertionManipulator(bool deserializing) : base(deserializing) { }
-    protected PWRInsertionManipulator(PWRInsertionManipulator original, Cloner cloner)
-      : base(original, cloner) {
-    }
+    protected PWRInsertionManipulator(PWRInsertionManipulator original, Cloner cloner) : base(original, cloner) { }
+    public PWRInsertionManipulator() : base() { }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new PWRInsertionManipulator(this, cloner);
     }
-    public PWRInsertionManipulator() : base() { }
 
     public static void Apply(IRandom random, PWREncoding individual) {
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Manipulators/PWRManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Manipulators/PWRManipulator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Manipulators/PWRManipulator.cs	(revision 8887)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -27,5 +28,6 @@
   [Item("PWRManipulator", "An operator which manipulates a PWR representation.")]
   [StorableClass]
-  public abstract class PWRManipulator : ScheduleManipulator<PWREncoding>, IPWROperator {
+  public abstract class PWRManipulator : ScheduleManipulator, IPWROperator {
+
     [StorableConstructor]
     protected PWRManipulator(bool deserializing) : base(deserializing) { }
@@ -38,7 +40,7 @@
     protected abstract void Manipulate(IRandom random, PWREncoding individual);
 
-
     public override IOperation Apply() {
-      PWREncoding solution = ScheduleEncodingParameter.ActualValue;
+      var solution = ScheduleEncodingParameter.ActualValue as PWREncoding;
+      if (solution == null) throw new InvalidOperationException("ScheduleEncoding was not found or is not of type PWREncoding.");
       Manipulate(RandomParameter.ActualValue, solution);
       return base.Apply();
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWREncoding.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWREncoding.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWREncoding.cs	(revision 8887)
@@ -30,7 +30,7 @@
   [StorableClass]
   public class PWREncoding : Item, IScheduleEncoding {
+
     [Storable]
     public IntegerVector PermutationWithRepetition { get; set; }
-
 
     [StorableConstructor]
@@ -40,10 +40,11 @@
       this.PermutationWithRepetition = cloner.Clone(original.PermutationWithRepetition);
     }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new PWREncoding(this, cloner);
-    }
     public PWREncoding()
       : base() {
       PermutationWithRepetition = new IntegerVector();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PWREncoding(this, cloner);
     }
 
@@ -81,4 +82,5 @@
         return base.Equals(obj);
     }
+
     public override int GetHashCode() {
       if (PermutationWithRepetition.Length == 1)
@@ -88,4 +90,5 @@
       return 0;
     }
+
     private bool AreEqual(PWREncoding pWREncoding1, PWREncoding pWREncoding2) {
       if (pWREncoding1.PermutationWithRepetition.Length != pWREncoding2.PermutationWithRepetition.Length)
@@ -97,6 +100,4 @@
       return true;
     }
-
-
   }
 }
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWRRandomCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWRRandomCreator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWRRandomCreator.cs	(revision 8887)
@@ -30,8 +30,5 @@
   [Item("PermutationWithRepetitionRandomCreator", "Creates PWR-individuals at random.")]
   [StorableClass]
-  public class PWRRandomCreator : ScheduleCreator<PWREncoding>, IStochasticOperator {
-    public IRandom Random {
-      get { return RandomParameter.ActualValue; }
-    }
+  public class PWRRandomCreator : ScheduleCreator, IStochasticOperator {
 
     public ILookupParameter<IRandom> RandomParameter {
@@ -47,11 +44,5 @@
     [StorableConstructor]
     protected PWRRandomCreator(bool deserializing) : base(deserializing) { }
-    protected PWRRandomCreator(PWRRandomCreator original, Cloner cloner)
-      : base(original, cloner) {
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new PWRRandomCreator(this, cloner);
-    }
-
+    protected PWRRandomCreator(PWRRandomCreator original, Cloner cloner) : base(original, cloner) { }
     public PWRRandomCreator()
       : base() {
@@ -63,11 +54,14 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PWRRandomCreator(this, cloner);
+    }
+
     public static PWREncoding Apply(int jobs, int resources, IRandom random) {
       return new PWREncoding(jobs, resources, random);
     }
 
-
-    protected override PWREncoding CreateSolution() {
-      return Apply(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value, Random);
+    protected override IScheduleEncoding CreateSolution() {
+      return Apply(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value, RandomParameter.ActualValue);
     }
   }
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Plugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Plugin.cs.frame	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Plugin.cs.frame	(revision 8887)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Encodings.ScheduleEncoding {
-  [Plugin("HeuristicLab.Encodings.ScheduleEncoding", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Encodings.ScheduleEncoding", "3.3.7.$WCREV$")]
   [PluginFile("HeuristicLab.Encodings.ScheduleEncoding-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVCrossover.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVCrossover.cs	(revision 8887)
@@ -27,5 +27,6 @@
   [Item("PRVCrossover", "An operator which crosses two PRV representations.")]
   [StorableClass]
-  public abstract class PRVCrossover : ScheduleCrossover<PRVEncoding>, IPRVOperator {
+  public abstract class PRVCrossover : ScheduleCrossover, IPRVOperator {
+
     [StorableConstructor]
     protected PRVCrossover(bool deserializing) : base(deserializing) { }
@@ -37,9 +38,8 @@
     }
 
-
     public abstract PRVEncoding Cross(IRandom random, PRVEncoding parent1, PRVEncoding parent2);
 
     public override IOperation Apply() {
-      ItemArray<PRVEncoding> parents = ParentsParameter.ActualValue;
+      var parents = ParentsParameter.ActualValue;
       ChildParameter.ActualValue =
         Cross(RandomParameter.ActualValue, parents[0] as PRVEncoding, parents[1] as PRVEncoding);
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVDiscreteCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVDiscreteCrossover.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVDiscreteCrossover.cs	(revision 8887)
@@ -29,18 +29,18 @@
   [StorableClass]
   public class PRVDiscreteCrossover : PRVCrossover {
+
     [StorableConstructor]
     protected PRVDiscreteCrossover(bool deserializing) : base(deserializing) { }
-    protected PRVDiscreteCrossover(PRVDiscreteCrossover original, Cloner cloner)
-      : base(original, cloner) {
-    }
+    protected PRVDiscreteCrossover(PRVDiscreteCrossover original, Cloner cloner) : base(original, cloner) { }
+    public PRVDiscreteCrossover() : base() { }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new PRVDiscreteCrossover(this, cloner);
     }
-    public PRVDiscreteCrossover() : base() { }
-
 
     public static PRVEncoding Apply(IRandom random, PRVEncoding parent1, PRVEncoding parent2) {
       return new PRVEncoding(DiscreteCrossover.Apply(random, new ItemArray<IntegerVector>(new IntegerVector[] { parent1.PriorityRulesVector, parent2.PriorityRulesVector })), parent1.NrOfRules);
     }
+
     public override PRVEncoding Cross(IRandom random, PRVEncoding parent1, PRVEncoding parent2) {
       return Apply(random, parent1, parent2);
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVSinglePointCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVSinglePointCrossover.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVSinglePointCrossover.cs	(revision 8887)
@@ -29,13 +29,13 @@
   [StorableClass]
   public class PRVSinglePointCrossover : PRVCrossover {
+
     [StorableConstructor]
     protected PRVSinglePointCrossover(bool deserializing) : base(deserializing) { }
-    protected PRVSinglePointCrossover(PRVSinglePointCrossover original, Cloner cloner)
-      : base(original, cloner) {
-    }
+    protected PRVSinglePointCrossover(PRVSinglePointCrossover original, Cloner cloner) : base(original, cloner) { }
+    public PRVSinglePointCrossover() : base() { }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new PRVSinglePointCrossover(this, cloner);
     }
-    public PRVSinglePointCrossover() : base() { }
 
     public static PRVEncoding Apply(IRandom random, PRVEncoding parent1, PRVEncoding parent2) {
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Manipulators/PRVManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Manipulators/PRVManipulator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Manipulators/PRVManipulator.cs	(revision 8887)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -27,5 +28,5 @@
   [Item("PRVManipulator", "An operator which manipulates a PRV representation.")]
   [StorableClass]
-  public abstract class PRVManipulator : ScheduleManipulator<PRVEncoding>, IPRVOperator {
+  public abstract class PRVManipulator : ScheduleManipulator, IPRVOperator {
     [StorableConstructor]
     protected PRVManipulator(bool deserializing) : base(deserializing) { }
@@ -36,8 +37,9 @@
     }
 
+    protected abstract void Manipulate(IRandom random, PRVEncoding individual);
 
-    protected abstract void Manipulate(IRandom random, PRVEncoding individual);
     public override IOperation Apply() {
-      PRVEncoding solution = ScheduleEncodingParameter.ActualValue;
+      var solution = ScheduleEncodingParameter.ActualValue as PRVEncoding;
+      if (solution == null) throw new InvalidOperationException("ScheduleEncoding was not found or is not of type PRVEncoding.");
       Manipulate(RandomParameter.ActualValue, solution);
       return base.Apply();
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Manipulators/PRVUniformOnePositionManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Manipulators/PRVUniformOnePositionManipulator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Manipulators/PRVUniformOnePositionManipulator.cs	(revision 8887)
@@ -27,18 +27,16 @@
 
 namespace HeuristicLab.Encodings.ScheduleEncoding.PriorityRulesVector {
-
   [Item("PRVUniformOnePositionManipulator", "Represents a manipulation operation inserting parts of the individual at another position.")]
   [StorableClass]
   public class PRVUniformOnePositionManipulator : PRVManipulator {
+
     [StorableConstructor]
     protected PRVUniformOnePositionManipulator(bool deserializing) : base(deserializing) { }
-    protected PRVUniformOnePositionManipulator(PRVUniformOnePositionManipulator original, Cloner cloner)
-      : base(original, cloner) {
-    }
+    protected PRVUniformOnePositionManipulator(PRVUniformOnePositionManipulator original, Cloner cloner) : base(original, cloner) { }
+    public PRVUniformOnePositionManipulator() : base() { }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new PRVUniformOnePositionManipulator(this, cloner);
     }
-    public PRVUniformOnePositionManipulator() : base() { }
-
 
     public static void Apply(IRandom random, PRVEncoding individual) {
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVEncoding.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVEncoding.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVEncoding.cs	(revision 8887)
@@ -42,5 +42,4 @@
     }
 
-
     [StorableConstructor]
     protected PRVEncoding(bool deserializing) : base(deserializing) { }
@@ -49,7 +48,4 @@
       this.nrOfRules = cloner.Clone(original.NrOfRules);
       this.PriorityRulesVector = cloner.Clone(original.PriorityRulesVector);
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new PRVEncoding(this, cloner);
     }
     public PRVEncoding(int nrOfRules)
@@ -69,4 +65,7 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PRVEncoding(this, cloner);
+    }
 
     public override string ToString() {
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVRandomCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVRandomCreator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVRandomCreator.cs	(revision 8887)
@@ -27,9 +27,9 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
-
 namespace HeuristicLab.Encodings.ScheduleEncoding.PriorityRulesVector {
   [Item("PriorityRulesRandomCreator", "Creator class used to create PRV encoding objects for scheduling problems.")]
   [StorableClass]
-  public class PRVRandomCreator : ScheduleCreator<PRVEncoding>, IStochasticOperator {
+  public class PRVRandomCreator : ScheduleCreator, IStochasticOperator {
+
     [Storable]
     public IntValue NrOfRules { get; set; }
@@ -45,5 +45,4 @@
     }
 
-
     [StorableConstructor]
     protected PRVRandomCreator(bool deserializing) : base(deserializing) { }
@@ -51,7 +50,4 @@
       : base(original, cloner) {
       this.NrOfRules = cloner.Clone(original.NrOfRules);
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new PRVRandomCreator(this, cloner);
     }
     public PRVRandomCreator()
@@ -64,9 +60,13 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PRVRandomCreator(this, cloner);
+    }
+
     public static PRVEncoding Apply(int jobs, int resources, IRandom random, IntValue nrOfRules) {
       return new PRVEncoding(jobs * resources, random, 0, nrOfRules.Value, nrOfRules);
     }
 
-    protected override PRVEncoding CreateSolution() {
+    protected override IScheduleEncoding CreateSolution() {
       return Apply(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value, RandomParameter.ActualValue, NrOfRules);
     }
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Properties/AssemblyInfo.cs.frame	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/Properties/AssemblyInfo.cs.frame	(revision 8887)
@@ -1,5 +1,5 @@
 #region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -55,3 +55,3 @@
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.7.$WCREV$")]
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCreator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCreator.cs	(revision 8887)
@@ -29,20 +29,17 @@
   [Item("ScheduleCreator", "Represents the generalized form of creators for Scheduling Problems.")]
   [StorableClass]
-  public abstract class ScheduleCreator<T> : SingleSuccessorOperator, IScheduleCreator where T : Item {
-    public ILookupParameter<T> ScheduleEncodingParameter {
-      get { return (ILookupParameter<T>)Parameters["ScheduleEncoding"]; }
+  public abstract class ScheduleCreator : SingleSuccessorOperator, IScheduleCreator {
+
+    public ILookupParameter<IScheduleEncoding> ScheduleEncodingParameter {
+      get { return (ILookupParameter<IScheduleEncoding>)Parameters["ScheduleEncoding"]; }
     }
-
 
     [StorableConstructor]
     protected ScheduleCreator(bool deserializing) : base(deserializing) { }
-    protected ScheduleCreator(ScheduleCreator<T> original, Cloner cloner)
-      : base(original, cloner) {
-    }
+    protected ScheduleCreator(ScheduleCreator original, Cloner cloner) : base(original, cloner) { }
     public ScheduleCreator()
       : base() {
-      Parameters.Add(new LookupParameter<T>("ScheduleEncoding", "The new scheduling solutioncandidate."));
+      Parameters.Add(new LookupParameter<IScheduleEncoding>("ScheduleEncoding", "The new scheduling solutioncandidate."));
     }
-
 
     public override IOperation Apply() {
@@ -50,5 +47,6 @@
       return base.Apply();
     }
-    protected abstract T CreateSolution();
+
+    protected abstract IScheduleEncoding CreateSolution();
   }
 }
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCrossover.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCrossover.cs	(revision 8887)
@@ -30,15 +30,12 @@
   [Item("ScheduleCrossover", "A scheduling crossover operation.")]
   [StorableClass]
-  public abstract class ScheduleCrossover<T> : SingleSuccessorOperator, IScheduleCrossover, IStochasticOperator where T : Item {
-    #region IScheduleCrossover Members
-    public ILookupParameter<ItemArray<T>> ParentsParameter {
-      get { return (ScopeTreeLookupParameter<T>)Parameters["Parents"]; }
+  public abstract class ScheduleCrossover : SingleSuccessorOperator, IScheduleCrossover, IStochasticOperator {
+
+    public ILookupParameter<IScheduleEncoding> ChildParameter {
+      get { return (ILookupParameter<IScheduleEncoding>)Parameters["Child"]; }
     }
-
-    public ILookupParameter<T> ChildParameter {
-      get { return (ILookupParameter<T>)Parameters["Child"]; }
+    public IScopeTreeLookupParameter<IScheduleEncoding> ParentsParameter {
+      get { return (IScopeTreeLookupParameter<IScheduleEncoding>)Parameters["Parents"]; }
     }
-    #endregion
-
     public ILookupParameter<IRandom> RandomParameter {
       get { return (LookupParameter<IRandom>)Parameters["Random"]; }
@@ -47,14 +44,12 @@
     [StorableConstructor]
     protected ScheduleCrossover(bool deserializing) : base(deserializing) { }
-    protected ScheduleCrossover(ScheduleCrossover<T> original, Cloner cloner)
-      : base(original, cloner) {
-    }
+    protected ScheduleCrossover(ScheduleCrossover original, Cloner cloner) : base(original, cloner) { }
     public ScheduleCrossover()
       : base() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
-      Parameters.Add(new ScopeTreeLookupParameter<T>("Parents", "The parent solution which should be crossed."));
+      Parameters.Add(new LookupParameter<IScheduleEncoding>("Child", "The child solution resulting from the crossover."));
+      ChildParameter.ActualName = "SchedulingSolution";
+      Parameters.Add(new ScopeTreeLookupParameter<IScheduleEncoding>("Parents", "The parent solution which should be crossed."));
       ParentsParameter.ActualName = "SchedulingSolution";
-      Parameters.Add(new LookupParameter<T>("Child", "The child solution resulting from the crossover."));
-      ChildParameter.ActualName = "SchedulingSolution";
     }
   }
Index: unk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleDecoder.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleDecoder.cs	(revision 8886)
+++ 	(revision )
@@ -1,59 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Operators;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Encodings.ScheduleEncoding {
-  [Item("ScheduleDecoder", "A scheduling decoder operator.")]
-  [StorableClass]
-  public abstract class ScheduleDecoder<T> : SingleSuccessorOperator, IScheduleDecoder where T : Item {
-    [StorableConstructor]
-    protected ScheduleDecoder(bool deserializing) : base(deserializing) { }
-    protected ScheduleDecoder(ScheduleDecoder<T> original, Cloner cloner)
-      : base(original, cloner) {
-    }
-
-    public ILookupParameter<T> ScheduleEncodingParameter {
-      get { return (ILookupParameter<T>)Parameters["ScheduleEncoding"]; }
-    }
-    public ILookupParameter<Schedule> ScheduleParameter {
-      get { return (ILookupParameter<Schedule>)Parameters["Schedule"]; }
-    }
-
-    public ScheduleDecoder()
-      : base() {
-      Parameters.Add(new LookupParameter<T>("ScheduleEncoding", "The new scheduling solution represented as encoding."));
-      Parameters.Add(new LookupParameter<Schedule>("Schedule", "The decoded scheduling solution represented as generalized schedule."));
-    }
-
-    public abstract Schedule CreateScheduleFromEncoding(T solution);
-
-    public override IOperation Apply() {
-      Schedule result = CreateScheduleFromEncoding(ScheduleEncodingParameter.ActualValue);
-      ScheduleParameter.ActualValue = result;
-      return base.Apply();
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Crossovers/DirectScheduleCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Crossovers/DirectScheduleCrossover.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Crossovers/DirectScheduleCrossover.cs	(revision 8887)
@@ -28,5 +28,5 @@
   [Item("DirectScheduleCrossover", "An operator which crosses two schedule representations.")]
   [StorableClass]
-  public abstract class DirectScheduleCrossover : ScheduleCrossover<Schedule>, IDirectScheduleOperator {
+  public abstract class DirectScheduleCrossover : ScheduleCrossover, IDirectScheduleOperator {
     [StorableConstructor]
     protected DirectScheduleCrossover(bool deserializing) : base(deserializing) { }
@@ -39,5 +39,4 @@
     }
 
-
     public ILookupParameter<ItemList<Job>> JobDataParameter {
       get { return (LookupParameter<ItemList<Job>>)Parameters["JobData"]; }
@@ -47,5 +46,5 @@
 
     public override IOperation Apply() {
-      ItemArray<Schedule> parents = ParentsParameter.ActualValue;
+      var parents = ParentsParameter.ActualValue;
       ChildParameter.ActualValue =
         Cross(RandomParameter.ActualValue, parents[0] as Schedule, parents[1] as Schedule);
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Crossovers/DirectScheduleGTCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Crossovers/DirectScheduleGTCrossover.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Crossovers/DirectScheduleGTCrossover.cs	(revision 8887)
@@ -30,26 +30,23 @@
   [StorableClass]
   public class DirectScheduleGTCrossover : DirectScheduleCrossover {
+
+    public IValueLookupParameter<DoubleValue> MutationProbabilityParameter {
+      get { return (IValueLookupParameter<DoubleValue>)Parameters["MutationProbability"]; }
+    }
+
     [StorableConstructor]
     protected DirectScheduleGTCrossover(bool deserializing) : base(deserializing) { }
-    protected DirectScheduleGTCrossover(DirectScheduleGTCrossover original, Cloner cloner)
-      : base(original, cloner) {
+    protected DirectScheduleGTCrossover(DirectScheduleGTCrossover original, Cloner cloner) : base(original, cloner) { }
+    public DirectScheduleGTCrossover()
+      : base() {
+      Parameters.Add(new ValueLookupParameter<DoubleValue>("MutationProbability", "The probability that a task from the conflict set is chosen randomly instead of from one of the parents."));
     }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new DirectScheduleGTCrossover(this, cloner);
     }
-    public DirectScheduleGTCrossover()
-      : base() {
-      Parameters.Add(new LookupParameter<PercentValue>("MutationProbability", "The probability that the mutation operator is applied on a solution."));
-    }
-
-
-    private LookupParameter<PercentValue> MutationProbabilityParameter {
-      get { return (LookupParameter<PercentValue>)Parameters["MutationProbability"]; }
-    }
-
 
     public static Schedule Apply(IRandom random, Schedule parent1, Schedule parent2, ItemList<Job> jobData, double mutProp) {
-      Schedule child = new Schedule(parent1.Resources.Count);
-
+      var child = new Schedule(parent1.Resources.Count);
 
       //Reset scheduled tasks in result
@@ -75,5 +72,5 @@
         int progressOnResource = conflictedResource.Tasks.Count;
         Task selectedTask = null;
-        if (random.Next(100) < mutProp) {
+        if (random.NextDouble() < mutProp) {
           //Mutation
           selectedTask = conflictSet[random.Next(conflictSet.Count)];
@@ -95,5 +92,4 @@
     }
 
-
     private static Task SelectTaskFromConflictSet(ItemList<Task> conflictSet, Schedule usedParent, int conflictedResourceNr, int progressOnResource) {
       //Apply Crossover
@@ -109,6 +105,6 @@
 
     public override Schedule Cross(IRandom random, Schedule parent1, Schedule parent2) {
-      ItemList<Job> jobData = (ItemList<Job>)JobDataParameter.ActualValue.Clone();
-      PercentValue mutProp = MutationProbabilityParameter.ActualValue;
+      var jobData = (ItemList<Job>)JobDataParameter.ActualValue.Clone();
+      var mutProp = MutationProbabilityParameter.ActualValue;
       return Apply(random, parent1, parent2, jobData, mutProp.Value);
     }
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/DirectScheduleRandomCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/DirectScheduleRandomCreator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/DirectScheduleRandomCreator.cs	(revision 8887)
@@ -33,5 +33,5 @@
   [Item("DirectScheduleRandomCreator", "Creator class used to create schedule encoding objects.")]
   [StorableClass]
-  public class DirectScheduleRandomCreator : ScheduleCreator<Schedule>, IStochasticOperator {
+  public class DirectScheduleRandomCreator : ScheduleCreator, IStochasticOperator {
 
     public ILookupParameter<IRandom> RandomParameter {
@@ -68,5 +68,5 @@
 
     public static Schedule Apply(int jobs, int resources, PWREncoding pwr, ItemList<Job> jobData) {
-      Schedule resultingSchedule = new Schedule(jobData[0].Tasks.Count);
+      var resultingSchedule = new Schedule(jobData[0].Tasks.Count);
       foreach (int jobNr in pwr.PermutationWithRepetition) {
         int i = 0;
@@ -82,13 +82,12 @@
 
 
-    protected override Schedule CreateSolution() {
+    protected override IScheduleEncoding CreateSolution() {
       try {
-        ItemList<Job> jobData = (ItemList<Job>)JobDataParameter.ActualValue.Clone();
+        var jobData = (ItemList<Job>)JobDataParameter.ActualValue.Clone();
         return Apply(JobsParameter.ActualValue.Value,
           ResourcesParameter.ActualValue.Value,
           new PWREncoding(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value, RandomParameter.ActualValue),
           jobData);
-      }
-      catch {
+      } catch {
         throw new Exception("ScheduleRandomCreator needs JobData parameter from a JSSP-Instance to create Schedule-Instances!");
       }
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Job.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Job.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Job.cs	(revision 8887)
@@ -30,5 +30,7 @@
   [StorableClass]
   public class Job : Item, INotifyPropertyChanged {
-    [Storable(Name = "DueDate")] private double dueDate;
+
+    [Storable(Name = "DueDate")]
+    private double dueDate;
     public double DueDate {
       get { return dueDate; }
@@ -52,5 +54,5 @@
 
     [Storable(Name = "Tasks")]
-    private ItemList<Task> tasks; 
+    private ItemList<Task> tasks;
     public ItemList<Task> Tasks {
       get { return tasks; }
@@ -70,7 +72,5 @@
       this.Tasks = cloner.Clone(original.Tasks);
     }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new Job(this, cloner);
-    }
+    public Job() : this(-1, double.MaxValue) { }
     public Job(int index, double dueDate)
       : base() {
@@ -78,4 +78,8 @@
       Index = index;
       Tasks = new ItemList<Task>();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Job(this, cloner);
     }
 
Index: unk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Manipulators/ConcreteScheduleManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Manipulators/ConcreteScheduleManipulator.cs	(revision 8886)
+++ 	(revision )
@@ -1,50 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Encodings.ScheduleEncoding.ScheduleEncoding {
-
-  [Item("ConcreteScheduleManipulator", "Represents an operator somehow mutating a schedule instance.")]
-  [StorableClass]
-  public class ConcreteScheduleManipulator : DirectScheduleManipulator {
-    [StorableConstructor]
-    protected ConcreteScheduleManipulator(bool deserializing) : base(deserializing) { }
-    protected ConcreteScheduleManipulator(ConcreteScheduleManipulator original, Cloner cloner)
-      : base(original, cloner) {
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new ConcreteScheduleManipulator(this, cloner);
-    }
-    public ConcreteScheduleManipulator() : base() { }
-
-
-    public static void Apply(IRandom random, Schedule individual) {
-      //somehow manipulate individual
-    }
-
-    protected override void Manipulate(IRandom random, Schedule individual) {
-      Apply(random, individual);
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Manipulators/DirectScheduleManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Manipulators/DirectScheduleManipulator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Manipulators/DirectScheduleManipulator.cs	(revision 8887)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -27,5 +28,6 @@
   [Item("DirectScheduleManipulator", "An operator which manipulates a direct schedule representation.")]
   [StorableClass]
-  public abstract class DirectScheduleManipulator : ScheduleManipulator<Schedule>, IDirectScheduleOperator {
+  public abstract class DirectScheduleManipulator : ScheduleManipulator, IDirectScheduleOperator {
+
     [StorableConstructor]
     protected DirectScheduleManipulator(bool deserializing) : base(deserializing) { }
@@ -36,9 +38,10 @@
     }
 
+    protected abstract void Manipulate(IRandom random, Schedule individual);
 
-    protected abstract void Manipulate(IRandom random, Schedule individual);
     public override IOperation Apply() {
-      Schedule solution = ScheduleEncodingParameter.ActualValue;
-      Manipulate(RandomParameter.ActualValue, solution);
+      var schedule = ScheduleEncodingParameter.ActualValue as Schedule;
+      if (schedule == null) throw new InvalidOperationException("ScheduleEncoding was not found or is not of type Schedule.");
+      Manipulate(RandomParameter.ActualValue, schedule);
       return base.Apply();
     }
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Resource.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Resource.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Resource.cs	(revision 8887)
@@ -29,9 +29,5 @@
   [StorableClass]
   public class Resource : Item {
-    public Resource(int index)
-      : base() {
-      Index = index;
-      Tasks = new ItemList<ScheduledTask>();
-    }
+
     [Storable]
     public int Index {
@@ -44,4 +40,22 @@
       set;
     }
+
+    [StorableConstructor]
+    protected Resource(bool deserializing) : base(deserializing) { }
+    protected Resource(Resource original, Cloner cloner)
+      : base(original, cloner) {
+      this.Index = original.Index;
+      this.Tasks = cloner.Clone(original.Tasks);
+    }
+    public Resource(int index)
+      : base() {
+      Index = index;
+      Tasks = new ItemList<ScheduledTask>();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Resource(this, cloner);
+    }
+
     public double TotalDuration {
       get {
@@ -53,15 +67,4 @@
         return result;
       }
-    }
-
-    [StorableConstructor]
-    protected Resource(bool deserializing) : base(deserializing) { }
-    protected Resource(Resource original, Cloner cloner)
-      : base(original, cloner) {
-      this.Index = original.Index;
-      this.Tasks = cloner.Clone(original.Tasks);
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new Resource(this, cloner);
     }
 
@@ -83,4 +86,5 @@
         return false;
     }
+
     public override int GetHashCode() {
       if (Tasks.Count == 1)
@@ -90,4 +94,5 @@
       return 0;
     }
+
     private static bool AreEqual(Resource res1, Resource res2) {
       if (res1.Tasks.Count != res2.Tasks.Count)
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Schedule.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Schedule.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Schedule.cs	(revision 8887)
@@ -32,4 +32,5 @@
   [StorableClass]
   public class Schedule : NamedItem, IScheduleEncoding {
+
     #region Properties
     [Storable]
@@ -69,7 +70,4 @@
       this.lastScheduledTaskOfJob = new Dictionary<int, ScheduledTask>(original.lastScheduledTaskOfJob);
     }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new Schedule(this, cloner);
-    }
     public Schedule(int nrOfResources) {
       Resources = new ItemList<Resource>();
@@ -80,5 +78,7 @@
     }
 
-
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Schedule(this, cloner);
+    }
 
     #region Events
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/ScheduledTask.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/ScheduledTask.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/ScheduledTask.cs	(revision 8887)
@@ -29,4 +29,5 @@
   [StorableClass]
   public class ScheduledTask : Item {
+
     #region Properties
     [Storable]
@@ -57,8 +58,4 @@
       this.JobNr = original.JobNr;
     }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new ScheduledTask(this, cloner);
-    }
-
     public ScheduledTask(int resNr, double startTime, double duration, int jobNr)
       : base() {
@@ -69,4 +66,8 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ScheduledTask(this, cloner);
+    }
+
     public override string ToString() {
       StringBuilder sb = new StringBuilder();
@@ -74,5 +75,4 @@
       return sb.ToString();
     }
-
 
     public override bool Equals(object obj) {
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Task.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Task.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Task.cs	(revision 8887)
@@ -30,4 +30,5 @@
   [StorableClass]
   public class Task : Item, INotifyPropertyChanged {
+
     [Storable(Name = "TaskNr")]
     private int taskNr;
@@ -94,9 +95,5 @@
       this.IsScheduled = original.IsScheduled;
     }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new Task(this, cloner);
-    }
-
-
+    public Task() : this(-1, -1, -1, 0) { }
     public Task(int taskNr, int resNr, int jobNr, double duration)
       : base() {
@@ -106,4 +103,8 @@
       TaskNr = taskNr;
       IsScheduled = false;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Task(this, cloner);
     }
 
@@ -120,7 +121,9 @@
         return false;
     }
+
     public override int GetHashCode() {
       return TaskNr ^ JobNr;
     }
+
     public static bool AreEqual(Task task1, Task task2) {
       return (task1.Duration == task2.Duration &&
Index: /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleManipulator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleManipulator.cs	(revision 8887)
@@ -30,12 +30,9 @@
   [Item("ScheduleManipulator", "A scheduling manipulation operation.")]
   [StorableClass]
-  public abstract class ScheduleManipulator<T> : SingleSuccessorOperator, IScheduleManipulator, IStochasticOperator where T : Item {
-    #region IScheduleManipulator Members
+  public abstract class ScheduleManipulator : SingleSuccessorOperator, IScheduleManipulator, IStochasticOperator {
 
-    public ILookupParameter<T> ScheduleEncodingParameter {
-      get { return (ILookupParameter<T>)Parameters["ScheduleEncoding"]; }
+    public ILookupParameter<IScheduleEncoding> ScheduleEncodingParameter {
+      get { return (ILookupParameter<IScheduleEncoding>)Parameters["ScheduleEncoding"]; }
     }
-
-    #endregion
 
     public ILookupParameter<IRandom> RandomParameter {
@@ -45,10 +42,8 @@
     [StorableConstructor]
     protected ScheduleManipulator(bool deserializing) : base(deserializing) { }
-    protected ScheduleManipulator(ScheduleManipulator<T> original, Cloner cloner)
-      : base(original, cloner) {
-    }
+    protected ScheduleManipulator(ScheduleManipulator original, Cloner cloner) : base(original, cloner) { }
     public ScheduleManipulator()
       : base() {
-      Parameters.Add(new LookupParameter<T>("ScheduleEncoding", "The scheduling solution to be manipulated."));
+      Parameters.Add(new LookupParameter<IScheduleEncoding>("ScheduleEncoding", "The scheduling solution to be manipulated."));
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
     }
Index: /trunk/sources/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj	(revision 8886)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj	(revision 8887)
@@ -109,4 +109,10 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="JSMForcingStrategyView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="JSMForcingStrategyView.Designer.cs">
+      <DependentUpon>JSMForcingStrategyView.cs</DependentUpon>
+    </Compile>
     <Compile Include="JobShopSchedulingProblemView.cs">
       <SubType>UserControl</SubType>
@@ -114,4 +120,10 @@
     <Compile Include="JobShopSchedulingProblemView.Designer.cs">
       <DependentUpon>JobShopSchedulingProblemView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="JSMDecodingErrorPolicyView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="JSMDecodingErrorPolicyView.Designer.cs">
+      <DependentUpon>JSMDecodingErrorPolicyView.cs</DependentUpon>
     </Compile>
     <Compile Include="Plugin.cs" />
@@ -143,4 +155,8 @@
       <Name>HeuristicLab.Core-3.3</Name>
       <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
+      <Project>{bbab9df5-5ef3-4ba8-ade9-b36e82114937}</Project>
+      <Name>HeuristicLab.Data-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Encodings.ScheduleEncoding.Views\3.3\HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj">
Index: /trunk/sources/HeuristicLab.Problems.Scheduling.Views/3.3/JSMDecodingErrorPolicyView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling.Views/3.3/JSMDecodingErrorPolicyView.Designer.cs	(revision 8887)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling.Views/3.3/JSMDecodingErrorPolicyView.Designer.cs	(revision 8887)
@@ -0,0 +1,92 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Problems.Scheduling.Views {
+  partial class JSMDecodingErrorPolicyView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.valueLabel = new System.Windows.Forms.Label();
+      this.valueComboBox = new System.Windows.Forms.ComboBox();
+      this.SuspendLayout();
+      // 
+      // valueLabel
+      // 
+      this.valueLabel.AutoSize = true;
+      this.valueLabel.Location = new System.Drawing.Point(3, 3);
+      this.valueLabel.Name = "valueLabel";
+      this.valueLabel.Size = new System.Drawing.Size(34, 13);
+      this.valueLabel.TabIndex = 0;
+      this.valueLabel.Text = "&Type:";
+      // 
+      // valueComboBox
+      // 
+      this.valueComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.valueComboBox.Enabled = false;
+      this.valueComboBox.FormattingEnabled = true;
+      this.valueComboBox.Location = new System.Drawing.Point(46, 0);
+      this.valueComboBox.Name = "valueComboBox";
+      this.valueComboBox.Size = new System.Drawing.Size(219, 21);
+      this.valueComboBox.TabIndex = 1;
+      this.valueComboBox.SelectedIndexChanged += new System.EventHandler(this.valueComboBox_SelectedIndexChanged);
+      // 
+      // PermutationTypeView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.valueComboBox);
+      this.Controls.Add(this.valueLabel);
+      this.Name = "PermutationTypeView";
+      this.Size = new System.Drawing.Size(265, 29);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label valueLabel;
+    private System.Windows.Forms.ComboBox valueComboBox;
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.Scheduling.Views/3.3/JSMDecodingErrorPolicyView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling.Views/3.3/JSMDecodingErrorPolicyView.cs	(revision 8887)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling.Views/3.3/JSMDecodingErrorPolicyView.cs	(revision 8887)
@@ -0,0 +1,89 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Problems.Scheduling.Views {
+  [View("JSMDecodingErrorPolicy View")]
+  [Content(typeof(JSMDecodingErrorPolicy), true)]
+  public partial class JSMDecodingErrorPolicyView : ItemView {
+
+    public new JSMDecodingErrorPolicy Content {
+      get { return (JSMDecodingErrorPolicy)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public override bool ReadOnly {
+      get {
+        if ((Content != null) && Content.ReadOnly) return true;
+        return base.ReadOnly;
+      }
+      set { base.ReadOnly = value; }
+    }
+
+    public JSMDecodingErrorPolicyView() {
+      InitializeComponent();
+      valueComboBox.DataSource = Enum.GetValues(typeof(JSMDecodingErrorPolicyTypes));
+    }
+    public JSMDecodingErrorPolicyView(JSMDecodingErrorPolicy content)
+      : this() {
+      Content = content;
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.ValueChanged -= Content_ValueChanged;
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ValueChanged += Content_ValueChanged;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null)
+        valueComboBox.Enabled = false;
+      else
+        valueComboBox.SelectedItem = Content.Value;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      if (Content == null) valueComboBox.Enabled = false;
+      else valueComboBox.Enabled = !ReadOnly;
+    }
+
+    private void Content_ValueChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ValueChanged), sender, e);
+      else
+        valueComboBox.SelectedItem = Content.Value;
+    }
+
+    private void valueComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      if ((Content != null) && !Content.ReadOnly) Content.Value = (JSMDecodingErrorPolicyTypes)valueComboBox.SelectedItem;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.Scheduling.Views/3.3/JSMForcingStrategyView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling.Views/3.3/JSMForcingStrategyView.Designer.cs	(revision 8887)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling.Views/3.3/JSMForcingStrategyView.Designer.cs	(revision 8887)
@@ -0,0 +1,92 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Problems.Scheduling.Views {
+  partial class JSMForcingStrategyView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.valueLabel = new System.Windows.Forms.Label();
+      this.valueComboBox = new System.Windows.Forms.ComboBox();
+      this.SuspendLayout();
+      // 
+      // valueLabel
+      // 
+      this.valueLabel.AutoSize = true;
+      this.valueLabel.Location = new System.Drawing.Point(3, 3);
+      this.valueLabel.Name = "valueLabel";
+      this.valueLabel.Size = new System.Drawing.Size(34, 13);
+      this.valueLabel.TabIndex = 0;
+      this.valueLabel.Text = "&Type:";
+      // 
+      // valueComboBox
+      // 
+      this.valueComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.valueComboBox.Enabled = false;
+      this.valueComboBox.FormattingEnabled = true;
+      this.valueComboBox.Location = new System.Drawing.Point(46, 0);
+      this.valueComboBox.Name = "valueComboBox";
+      this.valueComboBox.Size = new System.Drawing.Size(219, 21);
+      this.valueComboBox.TabIndex = 1;
+      this.valueComboBox.SelectedIndexChanged += new System.EventHandler(this.valueComboBox_SelectedIndexChanged);
+      // 
+      // PermutationTypeView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.valueComboBox);
+      this.Controls.Add(this.valueLabel);
+      this.Name = "PermutationTypeView";
+      this.Size = new System.Drawing.Size(265, 29);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label valueLabel;
+    private System.Windows.Forms.ComboBox valueComboBox;
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.Scheduling.Views/3.3/JSMForcingStrategyView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling.Views/3.3/JSMForcingStrategyView.cs	(revision 8887)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling.Views/3.3/JSMForcingStrategyView.cs	(revision 8887)
@@ -0,0 +1,89 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Problems.Scheduling.Views {
+  [View("JSMForcingStrategy View")]
+  [Content(typeof(JSMForcingStrategy), true)]
+  public partial class JSMForcingStrategyView : ItemView {
+
+    public new JSMForcingStrategy Content {
+      get { return (JSMForcingStrategy)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public override bool ReadOnly {
+      get {
+        if ((Content != null) && Content.ReadOnly) return true;
+        return base.ReadOnly;
+      }
+      set { base.ReadOnly = value; }
+    }
+
+    public JSMForcingStrategyView() {
+      InitializeComponent();
+      valueComboBox.DataSource = Enum.GetValues(typeof(JSMForcingStrategyTypes));
+    }
+    public JSMForcingStrategyView(JSMForcingStrategy content)
+      : this() {
+      Content = content;
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.ValueChanged -= Content_ValueChanged;
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ValueChanged += Content_ValueChanged;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null)
+        valueComboBox.Enabled = false;
+      else
+        valueComboBox.SelectedItem = Content.Value;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      if (Content == null) valueComboBox.Enabled = false;
+      else valueComboBox.Enabled = !ReadOnly;
+    }
+
+    private void Content_ValueChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ValueChanged), sender, e);
+      else
+        valueComboBox.SelectedItem = Content.Value;
+    }
+
+    private void valueComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      if ((Content != null) && !Content.ReadOnly) Content.Value = (JSMForcingStrategyTypes)valueComboBox.SelectedItem;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.Scheduling.Views/3.3/Plugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling.Views/3.3/Plugin.cs.frame	(revision 8886)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling.Views/3.3/Plugin.cs.frame	(revision 8887)
@@ -28,4 +28,5 @@
   [PluginDependency("HeuristicLab.Core", "3.3")]
   [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
   [PluginDependency("HeuristicLab.Encodings.ScheduleEncoding", "3.3")]
   [PluginDependency("HeuristicLab.Encodings.ScheduleEncoding.Views", "3.3")]
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMDecoder.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMDecoder.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMDecoder.cs	(revision 8887)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -34,5 +35,6 @@
   [Item("JobSequenceMatrixDecoder", "Applies the GifflerThompson algorithm to create an active schedule from a JobSequence Matrix.")]
   [StorableClass]
-  public class JSMDecoder : ScheduleDecoder<JSMEncoding>, IStochasticOperator, IJSSPOperator {
+  public class JSMDecoder : ScheduleDecoder, IStochasticOperator, IJSSPOperator {
+
     public ILookupParameter<IRandom> RandomParameter {
       get { return (LookupParameter<IRandom>)Parameters["Random"]; }
@@ -41,28 +43,22 @@
       get { return (LookupParameter<ItemList<Job>>)Parameters["JobData"]; }
     }
+    public IValueParameter<JSMDecodingErrorPolicy> DecodingErrorPolicyParameter {
+      get { return (IValueParameter<JSMDecodingErrorPolicy>)Parameters["DecodingErrorPolicy"]; }
+    }
+    public IValueParameter<JSMForcingStrategy> ForcingStrategyParameter {
+      get { return (IValueParameter<JSMForcingStrategy>)Parameters["ForcingStrategy"]; }
+    }
 
-    #region Private Members
-    [Storable]
-    private Schedule resultingSchedule;
+    private JSMDecodingErrorPolicyTypes DecodingErrorPolicy {
+      get { return DecodingErrorPolicyParameter.Value.Value; }
+    }
 
-    [Storable]
-    private ItemList<Job> jobs;
-
-    [Storable]
-    private JSMDecodingErrorPolicyTypes decodingErrorPolicy = JSMDecodingErrorPolicyTypes.GuidedPolicy;
-
-    [Storable]
-    private JSMForcingStrategyTypes forcingStrategy = JSMForcingStrategyTypes.ShiftForcing;
-    #endregion
+    private JSMForcingStrategyTypes ForcingStrategy {
+      get { return ForcingStrategyParameter.Value.Value; }
+    }
 
     [StorableConstructor]
     protected JSMDecoder(bool deserializing) : base(deserializing) { }
-    protected JSMDecoder(JSMDecoder original, Cloner cloner)
-      : base(original, cloner) {
-      this.resultingSchedule = cloner.Clone(original.resultingSchedule);
-      this.jobs = cloner.Clone(original.jobs);
-      this.decodingErrorPolicy = original.decodingErrorPolicy;
-      this.forcingStrategy = original.forcingStrategy;
-    }
+    protected JSMDecoder(JSMDecoder original, Cloner cloner) : base(original, cloner) { }
     public override IDeepCloneable Clone(Cloner cloner) {
       return new JSMDecoder(this, cloner);
@@ -73,7 +69,9 @@
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
       Parameters.Add(new LookupParameter<ItemList<Job>>("JobData", "Job data taken from the Schedulingproblem - Instance."));
+      Parameters.Add(new ValueParameter<JSMDecodingErrorPolicy>("DecodingErrorPolicy", "Specify the policy that should be used to handle decoding errors.", new JSMDecodingErrorPolicy(JSMDecodingErrorPolicyTypes.RandomPolicy)));
+      Parameters.Add(new ValueParameter<JSMForcingStrategy>("ForcingStrategy", "Specifies a forcing strategy.", new JSMForcingStrategy(JSMForcingStrategyTypes.SwapForcing)));
+
       ScheduleEncodingParameter.ActualName = "JobSequenceMatrix";
     }
-
 
     private Task SelectTaskFromConflictSet(int conflictedResourceNr, int progressOnConflictedResource, ItemList<Task> conflictSet, ItemList<Permutation> jsm) {
@@ -100,6 +98,7 @@
       return result;
     }
+
     private Task ApplyDecodingErrorPolicy(ItemList<Task> conflictSet, Permutation resource, int progress) {
-      if (decodingErrorPolicy == JSMDecodingErrorPolicyTypes.RandomPolicy) {
+      if (DecodingErrorPolicy == JSMDecodingErrorPolicyTypes.RandomPolicy) {
         //Random
         return conflictSet[RandomParameter.ActualValue.Next(conflictSet.Count - 1)];
@@ -117,6 +116,7 @@
       }
     }
+
     private void ApplyForcingStrategy(ItemList<Permutation> jsm, int conflictedResource, int newResolutionIndex, int progressOnResource, int newResolution) {
-      if (forcingStrategy == JSMForcingStrategyTypes.SwapForcing) {
+      if (ForcingStrategy == JSMForcingStrategyTypes.SwapForcing) {
         //SwapForcing
         jsm[conflictedResource][newResolutionIndex] = jsm[conflictedResource][progressOnResource];
@@ -139,6 +139,6 @@
       ItemList<Permutation> jobSequenceMatrix = solution.JobSequenceMatrix;
 
-      jobs = (ItemList<Job>)jobData.Clone();
-      resultingSchedule = new Schedule(jobs[0].Tasks.Count);
+      var jobs = (ItemList<Job>)jobData.Clone();
+      var resultingSchedule = new Schedule(jobs[0].Tasks.Count);
 
       //Reset scheduled tasks in result
@@ -177,10 +177,8 @@
     }
 
-    public override Schedule CreateScheduleFromEncoding(JSMEncoding solution) {
+    public override Schedule CreateScheduleFromEncoding(IScheduleEncoding encoding) {
+      var solution = encoding as JSMEncoding;
+      if (solution == null) throw new InvalidOperationException("Encoding is not of type JSMEncoding");
       return CreateScheduleFromEncoding(solution, JobDataParameter.ActualValue);
-    }
-
-    public override IOperation Apply() {
-      return base.Apply();
     }
   }
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMDecodingErrorPolicy.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMDecodingErrorPolicy.cs	(revision 8887)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMDecodingErrorPolicy.cs	(revision 8887)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Drawing;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.Scheduling {
+  [Item("JSMDecodingErrorPolicy", "Represents a policy for handling decoding errors.")]
+  [StorableClass]
+  public sealed class JSMDecodingErrorPolicy : ValueTypeValue<JSMDecodingErrorPolicyTypes> {
+
+    public static new Image StaticItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Enum; }
+    }
+
+    [StorableConstructor]
+    private JSMDecodingErrorPolicy(bool deserializing) : base(deserializing) { }
+    private JSMDecodingErrorPolicy(JSMDecodingErrorPolicy original, Cloner cloner) : base(original, cloner) { }
+    public JSMDecodingErrorPolicy() : base() { }
+    public JSMDecodingErrorPolicy(JSMDecodingErrorPolicyTypes types) : base(types) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JSMDecodingErrorPolicy(this, cloner);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMDecodingErrorPolicyTypes.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMDecodingErrorPolicyTypes.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMDecodingErrorPolicyTypes.cs	(revision 8887)
@@ -19,4 +19,5 @@
  */
 #endregion
+
 namespace HeuristicLab.Problems.Scheduling {
   public enum JSMDecodingErrorPolicyTypes {
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMForcingStrategy.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMForcingStrategy.cs	(revision 8887)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMForcingStrategy.cs	(revision 8887)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Drawing;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.Scheduling {
+  [Item("JSMForcingStrategy", "Represents a forcing strategy.")]
+  [StorableClass]
+  public sealed class JSMForcingStrategy : ValueTypeValue<JSMForcingStrategyTypes> {
+
+    public static new Image StaticItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Enum; }
+    }
+
+    [StorableConstructor]
+    private JSMForcingStrategy(bool deserializing) : base(deserializing) { }
+    private JSMForcingStrategy(JSMForcingStrategy original, Cloner cloner) : base(original, cloner) { }
+    public JSMForcingStrategy() { }
+    public JSMForcingStrategy(JSMForcingStrategyTypes types) : base(types) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JSMForcingStrategy(this, cloner);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/PRVDecoder.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/PRVDecoder.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/PRVDecoder.cs	(revision 8887)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -31,5 +32,6 @@
   [Item("JobSequencingMatrixDecoder", "Applies the GifflerThompson algorithm to create an active schedule from a JobSequencing Matrix.")]
   [StorableClass]
-  public class PRVDecoder : ScheduleDecoder<PRVEncoding>, IStochasticOperator, IJSSPOperator {
+  public class PRVDecoder : ScheduleDecoder, IStochasticOperator, IJSSPOperator {
+
     public ILookupParameter<IRandom> RandomParameter {
       get { return (LookupParameter<IRandom>)Parameters["Random"]; }
@@ -38,12 +40,4 @@
       get { return (LookupParameter<ItemList<Job>>)Parameters["JobData"]; }
     }
-
-    #region Private Members
-    [Storable]
-    private Schedule resultingSchedule;
-
-    [Storable]
-    private ItemList<Job> jobs;
-    #endregion
 
     #region Priority Rules
@@ -55,9 +49,9 @@
 
     //earliest start time
-    private Task ESTRule(ItemList<Task> tasks) {
+    private Task ESTRule(ItemList<Task> tasks, Schedule schedule) {
       Task currentResult = RandomRule(tasks);
       double currentEST = double.MaxValue;
       foreach (Task t in tasks) {
-        double est = GTAlgorithmUtils.ComputeEarliestStartTime(t, resultingSchedule);
+        double est = GTAlgorithmUtils.ComputeEarliestStartTime(t, schedule);
         if (est < currentEST) {
           currentEST = est;
@@ -89,5 +83,5 @@
 
     //most work remaining
-    private Task MWRRule(ItemList<Task> tasks) {
+    private Task MWRRule(ItemList<Task> tasks, ItemList<Job> jobs) {
       Task currentResult = RandomRule(tasks);
       double currentLargestRemainingProcessingTime = 0;
@@ -107,5 +101,5 @@
 
     //least work remaining
-    private Task LWRRule(ItemList<Task> tasks) {
+    private Task LWRRule(ItemList<Task> tasks, ItemList<Job> jobs) {
       Task currentResult = RandomRule(tasks);
       double currentSmallestRemainingProcessingTime = double.MaxValue;
@@ -125,5 +119,5 @@
 
     //most operations remaining
-    private Task MORRule(ItemList<Task> tasks) {
+    private Task MORRule(ItemList<Task> tasks, ItemList<Job> jobs) {
       Task currentResult = RandomRule(tasks);
       int currentLargestNrOfRemainingTasks = 0;
@@ -143,5 +137,5 @@
 
     //least operationsremaining
-    private Task LORRule(ItemList<Task> tasks) {
+    private Task LORRule(ItemList<Task> tasks, ItemList<Job> jobs) {
       Task currentResult = RandomRule(tasks);
       int currentSmallestNrOfRemainingTasks = int.MaxValue;
@@ -176,12 +170,5 @@
     [StorableConstructor]
     protected PRVDecoder(bool deserializing) : base(deserializing) { }
-    protected PRVDecoder(PRVDecoder original, Cloner cloner)
-      : base(original, cloner) {
-      this.resultingSchedule = cloner.Clone(original.resultingSchedule);
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new PRVDecoder(this, cloner);
-    }
-
+    protected PRVDecoder(PRVDecoder original, Cloner cloner) : base(original, cloner) { }
     public PRVDecoder()
       : base() {
@@ -191,5 +178,9 @@
     }
 
-    private Task SelectTaskFromConflictSet(ItemList<Task> conflictSet, int ruleIndex, int nrOfRules) {
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PRVDecoder(this, cloner);
+    }
+
+    private Task SelectTaskFromConflictSet(ItemList<Task> conflictSet, int ruleIndex, int nrOfRules, Schedule schedule, ItemList<Job> jobs) {
       if (conflictSet.Count == 1)
         return conflictSet[0];
@@ -198,11 +189,11 @@
       switch (ruleIndex) {
         case 0: return FILORule(conflictSet);
-        case 1: return ESTRule(conflictSet);
+        case 1: return ESTRule(conflictSet, schedule);
         case 2: return SPTRule(conflictSet);
         case 3: return LPTRule(conflictSet);
-        case 4: return MWRRule(conflictSet);
-        case 5: return LWRRule(conflictSet);
-        case 6: return MORRule(conflictSet);
-        case 7: return LORRule(conflictSet);
+        case 4: return MWRRule(conflictSet, jobs);
+        case 5: return LWRRule(conflictSet, jobs);
+        case 6: return MORRule(conflictSet, jobs);
+        case 7: return LORRule(conflictSet, jobs);
         case 8: return FIFORule(conflictSet);
         case 9: return RandomRule(conflictSet);
@@ -211,7 +202,10 @@
     }
 
-    public override Schedule CreateScheduleFromEncoding(PRVEncoding solution) {
-      jobs = (ItemList<Job>)JobDataParameter.ActualValue.Clone();
-      resultingSchedule = new Schedule(jobs[0].Tasks.Count);
+    public override Schedule CreateScheduleFromEncoding(IScheduleEncoding encoding) {
+      var solution = encoding as PRVEncoding;
+      if (solution == null) throw new InvalidOperationException("Encoding is not of type PWREncoding");
+
+      var jobs = (ItemList<Job>)JobDataParameter.ActualValue.Clone();
+      var resultingSchedule = new Schedule(jobs[0].Tasks.Count);
 
       //Reset scheduled tasks in result
@@ -235,5 +229,5 @@
         //STEP 3 - Select an operation from the conflict set (various methods depending on how the algorithm should work..)
         //Task selectedTask = SelectTaskFromConflictSet(conflictSet, solution.PriorityRulesVector [currentDecisionIndex++], solution.NrOfRules.Value);
-        Task selectedTask = SelectTaskFromConflictSet(conflictSet, solution.PriorityRulesVector[minimal.JobNr], solution.NrOfRules.Value);
+        Task selectedTask = SelectTaskFromConflictSet(conflictSet, solution.PriorityRulesVector[minimal.JobNr], solution.NrOfRules.Value, resultingSchedule, jobs);
 
         //STEP 4 - Adding the selected operation to the current schedule
@@ -248,8 +242,4 @@
       return resultingSchedule;
     }
-
-    public override IOperation Apply() {
-      return base.Apply();
-    }
   }
 }
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/PWRDecoder.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/PWRDecoder.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/PWRDecoder.cs	(revision 8887)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -31,5 +32,6 @@
   [Item("PWRDecoder", "An item used to convert a PWR-individual into a generalized schedule.")]
   [StorableClass]
-  public class PWRDecoder : ScheduleDecoder<PWREncoding>, IStochasticOperator, IJSSPOperator {
+  public class PWRDecoder : ScheduleDecoder, IStochasticOperator, IJSSPOperator {
+
     public ILookupParameter<IRandom> RandomParameter {
       get { return (LookupParameter<IRandom>)Parameters["Random"]; }
@@ -41,11 +43,5 @@
     [StorableConstructor]
     protected PWRDecoder(bool deserializing) : base(deserializing) { }
-    protected PWRDecoder(PWRDecoder original, Cloner cloner)
-      : base(original, cloner) {
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new PWRDecoder(this, cloner);
-    }
-
+    protected PWRDecoder(PWRDecoder original, Cloner cloner) : base(original, cloner) { }
     public PWRDecoder()
       : base() {
@@ -55,7 +51,14 @@
     }
 
-    public override Schedule CreateScheduleFromEncoding(PWREncoding solution) {
-      ItemList<Job> jobs = (ItemList<Job>)JobDataParameter.ActualValue.Clone();
-      Schedule resultingSchedule = new Schedule(jobs[0].Tasks.Count);
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PWRDecoder(this, cloner);
+    }
+
+    public override Schedule CreateScheduleFromEncoding(IScheduleEncoding encoding) {
+      var solution = encoding as PWREncoding;
+      if (solution == null) throw new InvalidOperationException("Encoding is not of type PWREncoding");
+
+      var jobs = (ItemList<Job>)JobDataParameter.ActualValue.Clone();
+      var resultingSchedule = new Schedule(jobs[0].Tasks.Count);
       foreach (int jobNr in solution.PermutationWithRepetition) {
         int i = 0;
@@ -68,8 +71,4 @@
       return resultingSchedule;
     }
-
-    public override IOperation Apply() {
-      return base.Apply();
-    }
   }
 }
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/ScheduleDecoder.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/ScheduleDecoder.cs	(revision 8887)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Decoders/ScheduleDecoder.cs	(revision 8887)
@@ -0,0 +1,58 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.ScheduleEncoding;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.Scheduling {
+  [Item("ScheduleDecoder", "A schedule decoder translates a respresentation into an actual schedule.")]
+  [StorableClass]
+  public abstract class ScheduleDecoder : SingleSuccessorOperator, IScheduleDecoder {
+
+    public ILookupParameter<IScheduleEncoding> ScheduleEncodingParameter {
+      get { return (ILookupParameter<IScheduleEncoding>)Parameters["ScheduleEncoding"]; }
+    }
+    public ILookupParameter<Schedule> ScheduleParameter {
+      get { return (ILookupParameter<Schedule>)Parameters["Schedule"]; }
+    }
+
+    [StorableConstructor]
+    protected ScheduleDecoder(bool deserializing) : base(deserializing) { }
+    protected ScheduleDecoder(ScheduleDecoder original, Cloner cloner) : base(original, cloner) { }
+    public ScheduleDecoder()
+      : base() {
+      Parameters.Add(new LookupParameter<IScheduleEncoding>("ScheduleEncoding", "The new scheduling solution represented as encoding."));
+      Parameters.Add(new LookupParameter<Schedule>("Schedule", "The decoded scheduling solution represented as generalized schedule."));
+    }
+
+    public abstract Schedule CreateScheduleFromEncoding(IScheduleEncoding solution);
+
+    public override IOperation Apply() {
+      Schedule result = CreateScheduleFromEncoding(ScheduleEncodingParameter.ActualValue);
+      ScheduleParameter.ActualValue = result;
+      return base.Apply();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MakespanEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MakespanEvaluator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MakespanEvaluator.cs	(revision 8887)
@@ -30,15 +30,17 @@
   [Item("Makespan Evaluator", "Represents an evaluator using the maximum makespan of a schedule.")]
   [StorableClass]
-  public class MakespanEvaluator : SchedulingEvaluator {
+  public class MakespanEvaluator : ScheduleEvaluator {
+
     [StorableConstructor]
     protected MakespanEvaluator(bool deserializing) : base(deserializing) { }
-    protected MakespanEvaluator(MakespanEvaluator original, Cloner cloner)
-      : base(original, cloner) {
+    protected MakespanEvaluator(MakespanEvaluator original, Cloner cloner) : base(original, cloner) {}
+    public MakespanEvaluator()
+      : base() {
+      QualityParameter.ActualName = "Makespan";
     }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new MakespanEvaluator(this, cloner);
     }
-
-    public MakespanEvaluator() : base() { }
 
     public static double GetMakespan(Schedule schedule) {
@@ -46,10 +48,6 @@
     }
 
-    protected override DoubleValue Evaluate(Schedule schedule) {
-      return new DoubleValue(GetMakespan(schedule));
-    }
-
-    public override IOperation Apply() {
-      return base.Apply();
+    protected override double Evaluate(Schedule schedule) {
+      return GetMakespan(schedule);
     }
   }
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MeanTardinessEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MeanTardinessEvaluator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MeanTardinessEvaluator.cs	(revision 8887)
@@ -32,5 +32,5 @@
   [Item("Mean tardiness Evaluator", "Represents an evaluator using the mean tardiness of a schedule.")]
   [StorableClass]
-  public class MeanTardinessEvaluator : SchedulingEvaluator, IJSSPOperator {
+  public class MeanTardinessEvaluator : ScheduleEvaluator, IJSSPOperator {
 
     [StorableConstructor]
@@ -50,4 +50,5 @@
       : base() {
       Parameters.Add(new LookupParameter<ItemList<Job>>("JobData", "Jobdata defining the precedence relationships and the duration of the tasks in this JSSP-Instance."));
+      QualityParameter.ActualName = "MeanTardiness";
     }
 
@@ -58,6 +59,6 @@
     }
 
-    protected override DoubleValue Evaluate(Schedule schedule) {
-      return new DoubleValue(GetMeanTardiness(schedule, JobDataParameter.ActualValue));
+    protected override double Evaluate(Schedule schedule) {
+      return GetMeanTardiness(schedule, JobDataParameter.ActualValue);
     }
   }
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Evaluators/ScheduleEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Evaluators/ScheduleEvaluator.cs	(revision 8887)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Evaluators/ScheduleEvaluator.cs	(revision 8887)
@@ -0,0 +1,58 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.ScheduleEncoding;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.Scheduling {
+  [Item("Schedule Evaluator", "Represents a base class for schedule evaluators.")]
+  [StorableClass]
+  public abstract class ScheduleEvaluator : SingleSuccessorOperator, IScheduleEvaluator {
+
+    public ILookupParameter<DoubleValue> QualityParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters["Quality"]; }
+    }
+    public ILookupParameter<Schedule> ScheduleParameter {
+      get { return (ILookupParameter<Schedule>)Parameters["Schedule"]; }
+    }
+
+    [StorableConstructor]
+    protected ScheduleEvaluator(bool deserializing) : base(deserializing) { }
+    protected ScheduleEvaluator(ScheduleEvaluator original, Cloner cloner) : base(original, cloner) { }
+    protected ScheduleEvaluator()
+      : base() {
+      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality value aka fitness value of the solution."));
+      Parameters.Add(new LookupParameter<Schedule>("Schedule", "The decoded scheduling solution represented as generalized schedule."));
+    }
+
+    protected abstract double Evaluate(Schedule schedule);
+
+    public override IOperation Apply() {
+      QualityParameter.ActualValue = new DoubleValue(Evaluate(ScheduleParameter.ActualValue));
+      return base.Apply();
+    }
+  }
+}
Index: unk/sources/HeuristicLab.Problems.Scheduling/3.3/Evaluators/SchedulingEvaluationAlgorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Evaluators/SchedulingEvaluationAlgorithm.cs	(revision 8886)
+++ 	(revision )
@@ -1,79 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Encodings.ScheduleEncoding;
-using HeuristicLab.Operators;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Problems.Scheduling {
-  [Item("Scheduling Evaluation Algorithm", "Represents a composition of a decoder and an evaluator for scheduling problems.")]
-  [StorableClass]
-  public class SchedulingEvaluationAlgorithm : AlgorithmOperator, IScheduleEvaluationAlgorithm {
-    [StorableConstructor]
-    protected SchedulingEvaluationAlgorithm(bool deserializing) : base(deserializing) { }
-    protected SchedulingEvaluationAlgorithm(SchedulingEvaluationAlgorithm original, Cloner cloner)
-      : base(original, cloner) {
-      this.evaluator = cloner.Clone(original.evaluator);
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new SchedulingEvaluationAlgorithm(this, cloner);
-    }
-
-    [Storable]
-    private Placeholder evaluator;
-
-    public ILookupParameter<DoubleValue> QualityParameter {
-      get {
-        if (Parameters.ContainsKey("Quality"))
-          return (ILookupParameter<DoubleValue>)Parameters["Quality"];
-        else
-          return null;
-      }
-    }
-
-    public void InitializeOperatorGraph<T>() where T : Item, IScheduleEncoding {
-      OperatorGraph.Operators.Clear();
-      OperatorGraph.InitialOperator = evaluator;
-    }
-
-    public void InitializeOperatorGraph<T>(ScheduleDecoder<T> decoder) where T : Item, IScheduleEncoding {
-      OperatorGraph.Operators.Clear();
-      OperatorGraph.InitialOperator = decoder;
-      decoder.Successor = evaluator;
-    }
-
-    public SchedulingEvaluationAlgorithm()
-      : base() {
-      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality value aka fitness value of the solution."));
-      evaluator = new Placeholder();
-      evaluator.OperatorParameter.ActualName = "SolutionEvaluator";
-    }
-
-    public override IOperation Apply() {
-      return base.Apply();
-    }
-
-  }
-}
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Evaluators/SchedulingEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Evaluators/SchedulingEvaluator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Evaluators/SchedulingEvaluator.cs	(revision 8887)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -28,43 +29,50 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
+namespace HeuristicLab.Problems.Scheduling {
+  [Item("SchedulingEvaluator", "First applies the decoder operator to obtain a schedule from an encoding and then applies the evaluator to obtain a quality.")]
+  [StorableClass]
+  public class SchedulingEvaluator : SingleSuccessorOperator, ISchedulingEvaluator {
 
-namespace HeuristicLab.Problems.Scheduling {
-  [Item("Scheduling Evaluator", "Represents a evaluator class for standard scheduling problems.")]
-  [StorableClass]
-  public abstract class SchedulingEvaluator : SingleSuccessorOperator, IScheduleEvaluator {
+    public IValueLookupParameter<IScheduleDecoder> ScheduleDecoderParameter {
+      get { return (IValueLookupParameter<IScheduleDecoder>) Parameters["ScheduleDecoder"]; }
+    }
+    ILookupParameter<IScheduleDecoder> ISchedulingEvaluator.ScheduleDecoderParameter {
+      get { return ScheduleDecoderParameter; }
+    }
+    public IValueLookupParameter<IScheduleEvaluator> ScheduleEvaluatorParameter {
+      get { return (IValueLookupParameter<IScheduleEvaluator>) Parameters["ScheduleEvaluator"]; }
+    }
+    ILookupParameter<IScheduleEvaluator> ISchedulingEvaluator.ScheduleEvaluatorParameter {
+      get { return ScheduleEvaluatorParameter; }
+    }
+    public ILookupParameter<DoubleValue> QualityParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters["Quality"]; }
+    }
+
     [StorableConstructor]
     protected SchedulingEvaluator(bool deserializing) : base(deserializing) { }
-    protected SchedulingEvaluator(SchedulingEvaluator original, Cloner cloner)
-      : base(original, cloner) {
+    protected SchedulingEvaluator(SchedulingEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public SchedulingEvaluator()
+      : base() {
+      Parameters.Add(new ValueLookupParameter<IScheduleDecoder>("ScheduleDecoder", "The decoding operator that is used to calculate a schedule from the used representation."));
+      Parameters.Add(new ValueLookupParameter<IScheduleEvaluator>("ScheduleEvaluator", "The actual schedule evaluation operator."));
+      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality value aka fitness value of the solution."));
+      QualityParameter.Hidden = true;
     }
 
-    public ILookupParameter<IRandom> RandomParameter {
-      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
-    }
-    public ILookupParameter<DoubleValue> QualityParameter {
-      get {
-        if (Parameters.ContainsKey("Quality"))
-          return (ILookupParameter<DoubleValue>)Parameters["Quality"];
-        else
-          return null;
-      }
-    }
-    public ILookupParameter<Schedule> ScheduleParameter {
-      get { return (ILookupParameter<Schedule>)Parameters["Schedule"]; }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SchedulingEvaluator(this, cloner);
     }
 
-    public SchedulingEvaluator()
-      : base() {
-      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality value aka fitness value of the solution."));
-      Parameters.Add(new LookupParameter<Schedule>("Schedule", "The decoded scheduling solution represented as generalized schedule."));
-      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator."));
-    }
+    public override IOperation Apply() {
+      var decoder = ScheduleDecoderParameter.ActualValue;
+      var evaluator = ScheduleEvaluatorParameter.ActualValue;
+      if (evaluator == null) throw new InvalidOperationException("A ScheduleEvaluator could not be found.");
 
-    protected abstract DoubleValue Evaluate(Schedule schedule);
-
-    public override IOperation Apply() {
-      Schedule schedule = ScheduleParameter.ActualValue;
-      QualityParameter.ActualValue = Evaluate(schedule);
-      return base.Apply();
+      var operations = new OperationCollection(base.Apply());
+      operations.Insert(0, ExecutionContext.CreateChildOperation(evaluator));
+      if (decoder != null) // decode before evaluating
+        operations.Insert(0, ExecutionContext.CreateChildOperation(decoder));
+      return operations;
     }
   }
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj	(revision 8886)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj	(revision 8887)
@@ -107,15 +107,21 @@
     <Compile Include="Analyzers\BestSchedulingSolutionAnalyzer.cs" />
     <Compile Include="Analyzers\SchedulingAnalyzer.cs" />
+    <Compile Include="Decoders\JSMForcingStrategy.cs" />
     <Compile Include="Decoders\JSMDecoder.cs" />
+    <Compile Include="Decoders\JSMDecodingErrorPolicy.cs" />
     <Compile Include="Decoders\JSMDecodingErrorPolicyTypes.cs" />
     <Compile Include="Decoders\JSMForcingStrategyTypes.cs" />
     <Compile Include="Decoders\PRVDecoder.cs" />
     <Compile Include="Decoders\PWRDecoder.cs" />
+    <Compile Include="Decoders\ScheduleDecoder.cs" />
     <Compile Include="Evaluators\MeanTardinessEvaluator.cs" />
     <Compile Include="Evaluators\MakespanEvaluator.cs" />
+    <Compile Include="Evaluators\ScheduleEvaluator.cs" />
+    <Compile Include="Interfaces\IJSSPOperator.cs" />
+    <Compile Include="Interfaces\IScheduleDecoder.cs" />
+    <Compile Include="Interfaces\ISchedulingEvaluator.cs" />
+    <Compile Include="Interfaces\IScheduleEvaluator.cs" />
+    <Compile Include="JobShopSchedulingProblem.cs" />
     <Compile Include="Evaluators\SchedulingEvaluator.cs" />
-    <Compile Include="Interfaces\IJSSPOperator.cs" />
-    <Compile Include="JobShopSchedulingProblem.cs" />
-    <Compile Include="Evaluators\SchedulingEvaluationAlgorithm.cs" />
     <Compile Include="SchedulingProblem.cs" />
     <Compile Include="Plugin.cs" />
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPOperator.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPOperator.cs	(revision 8887)
@@ -1,3 +1,24 @@
-﻿using HeuristicLab.Core;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
 using HeuristicLab.Encodings.ScheduleEncoding;
 
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IScheduleDecoder.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IScheduleDecoder.cs	(revision 8887)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IScheduleDecoder.cs	(revision 8887)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  public interface IScheduleDecoder : IOperator {
+    ILookupParameter<IScheduleEncoding> ScheduleEncodingParameter { get; }
+    ILookupParameter<Schedule> ScheduleParameter { get; }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IScheduleEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IScheduleEvaluator.cs	(revision 8887)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IScheduleEvaluator.cs	(revision 8887)
@@ -0,0 +1,33 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.ScheduleEncoding;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Problems.Scheduling {
+  /// <summary>
+  /// An evaluator for a Schedule
+  /// </summary>
+  public interface IScheduleEvaluator : ISingleObjectiveEvaluator {
+    ILookupParameter<Schedule> ScheduleParameter { get; }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Interfaces/ISchedulingEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Interfaces/ISchedulingEvaluator.cs	(revision 8887)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Interfaces/ISchedulingEvaluator.cs	(revision 8887)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.ScheduleEncoding;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Problems.Scheduling {
+  /// <summary>
+  /// An evaluator for a scheduling problem representation
+  /// </summary>
+  public interface ISchedulingEvaluator : ISingleObjectiveEvaluator {
+    ILookupParameter<IScheduleDecoder> ScheduleDecoderParameter { get; }
+    ILookupParameter<IScheduleEvaluator> ScheduleEvaluatorParameter { get; }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs	(revision 8887)
@@ -20,5 +20,7 @@
 #endregion
 
+using System;
 using System.Drawing;
+using System.Linq;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -71,7 +73,12 @@
     #endregion
 
+    public string Filename { get; set; }
+    public override Image ItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Type; }
+    }
+
     #region Parameter Properties
-    public ValueParameter<ItemList<Job>> JobDataParameter {
-      get { return (ValueParameter<ItemList<Job>>)Parameters["JobData"]; }
+    public IValueParameter<ItemList<Job>> JobDataParameter {
+      get { return (IValueParameter<ItemList<Job>>)Parameters["JobData"]; }
     }
     public OptionalValueParameter<Schedule> BestKnownSolutionParameter {
@@ -85,6 +92,9 @@
       get { return (IFixedValueParameter<IntValue>)Parameters["Resources"]; }
     }
-    public ValueParameter<SchedulingEvaluator> SolutionEvaluatorParameter {
-      get { return (ValueParameter<SchedulingEvaluator>)Parameters["SolutionEvaluator"]; }
+    public IValueParameter<IScheduleEvaluator> ScheduleEvaluatorParameter {
+      get { return (IValueParameter<IScheduleEvaluator>)Parameters["ScheduleEvaluator"]; }
+    }
+    public OptionalValueParameter<IScheduleDecoder> ScheduleDecoderParameter {
+      get { return (OptionalValueParameter<IScheduleDecoder>)Parameters["ScheduleDecoder"]; }
     }
     #endregion
@@ -107,26 +117,13 @@
       set { ResourcesParameter.Value.Value = value; }
     }
-    public SchedulingEvaluator SolutionEvaluator {
-      get { return SolutionEvaluatorParameter.Value; }
-      set { SolutionEvaluatorParameter.Value = value; }
-    }
-    public override Image ItemImage {
-      get { return HeuristicLab.Common.Resources.VSImageLibrary.Type; }
-    }
-    public string Filename { get; set; }
-    #endregion
-
-    public JobShopSchedulingProblem()
-      : base(new SchedulingEvaluationAlgorithm(), new JSMRandomCreator()) {
-      Parameters.Add(new ValueParameter<ItemList<Job>>("JobData", "Jobdata defining the precedence relationships and the duration of the tasks in this JSSP-Instance.", new ItemList<Job>()));
-      Parameters.Add(new OptionalValueParameter<Schedule>("BestKnownSolution", "The best known solution of this JSSP instance."));
-
-      Parameters.Add(new FixedValueParameter<IntValue>("Jobs", "The number of jobs used in this JSSP instance.", new IntValue()));
-      Parameters.Add(new FixedValueParameter<IntValue>("Resources", "The number of resources used in this JSSP instance.", new IntValue()));
-      Parameters.Add(new ValueParameter<SchedulingEvaluator>("SolutionEvaluator", "The evaluator used to determine the quality of a solution.", new MakespanEvaluator()));
-
-      InitializeOperators();
-      Load(DefaultInstance);
-    }
+    public IScheduleEvaluator ScheduleEvaluator {
+      get { return ScheduleEvaluatorParameter.Value; }
+      set { ScheduleEvaluatorParameter.Value = value; }
+    }
+    public IScheduleDecoder ScheduleDecoder {
+      get { return ScheduleDecoderParameter.Value; }
+      set { ScheduleDecoderParameter.Value = value; }
+    }
+    #endregion
 
     [StorableConstructor]
@@ -134,7 +131,41 @@
     private JobShopSchedulingProblem(JobShopSchedulingProblem original, Cloner cloner)
       : base(original, cloner) {
-    }
+      RegisterEventHandlers();
+    }
+    public JobShopSchedulingProblem()
+      : base(new SchedulingEvaluator(), new JSMRandomCreator()) {
+      Parameters.Add(new ValueParameter<ItemList<Job>>("JobData", "Jobdata defining the precedence relationships and the duration of the tasks in this JSSP-Instance.", new ItemList<Job>()));
+      Parameters.Add(new OptionalValueParameter<Schedule>("BestKnownSolution", "The best known solution of this JSSP instance."));
+
+      Parameters.Add(new FixedValueParameter<IntValue>("Jobs", "The number of jobs used in this JSSP instance.", new IntValue()));
+      Parameters.Add(new FixedValueParameter<IntValue>("Resources", "The number of resources used in this JSSP instance.", new IntValue()));
+      Parameters.Add(new ValueParameter<IScheduleEvaluator>("ScheduleEvaluator", "The evaluator used to determine the quality of a solution.", new MakespanEvaluator()));
+      Parameters.Add(new OptionalValueParameter<IScheduleDecoder>("ScheduleDecoder", "The operator that decodes the representation and creates a schedule.", new JSMDecoder()));
+
+      EvaluatorParameter.GetsCollected = false;
+      EvaluatorParameter.Hidden = true;
+      ScheduleDecoderParameter.Hidden = true;
+
+      InitializeOperators();
+      Load(DefaultInstance);
+      RegisterEventHandlers();
+    }
+
     public override IDeepCloneable Clone(Cloner cloner) {
       return new JobShopSchedulingProblem(this, cloner);
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterEventHandlers();
+    }
+
+    private void RegisterEventHandlers() {
+      ScheduleEvaluatorParameter.ValueChanged += ScheduleEvaluatorParameter_ValueChanged;
+      ScheduleEvaluator.QualityParameter.ActualNameChanged += ScheduleEvaluator_QualityParameter_ActualNameChanged;
+      SolutionCreatorParameter.ValueChanged += SolutionCreatorParameter_ValueChanged;
+      SolutionCreator.ScheduleEncodingParameter.ActualNameChanged += SolutionCreator_SchedulingEncodingParameter_ActualNameChanged;
+      ScheduleDecoderParameter.ValueChanged += ScheduleDecoderParameter_ValueChanged;
+      if (ScheduleDecoder != null) ScheduleDecoder.ScheduleParameter.ActualNameChanged += ScheduleDecoder_ScheduleParameter_ActualNameChanged;
     }
 
@@ -142,4 +173,29 @@
     protected override void OnSolutionCreatorChanged() {
       InitializeOperators();
+    }
+    protected override void OnEvaluatorChanged() {
+      base.OnEvaluatorChanged();
+      ParameterizeOperators();
+    }
+    private void ScheduleEvaluatorParameter_ValueChanged(object sender, EventArgs eventArgs) {
+      ScheduleEvaluator.QualityParameter.ActualNameChanged += ScheduleEvaluator_QualityParameter_ActualNameChanged;
+      ParameterizeOperators();
+    }
+    private void ScheduleEvaluator_QualityParameter_ActualNameChanged(object sender, EventArgs eventArgs) {
+      ParameterizeOperators();
+    }
+    private void SolutionCreatorParameter_ValueChanged(object sender, EventArgs eventArgs) {
+      SolutionCreator.ScheduleEncodingParameter.ActualNameChanged += SolutionCreator_SchedulingEncodingParameter_ActualNameChanged;
+      ParameterizeOperators();
+    }
+    private void SolutionCreator_SchedulingEncodingParameter_ActualNameChanged(object sender, EventArgs eventArgs) {
+      ParameterizeOperators();
+    }
+    private void ScheduleDecoderParameter_ValueChanged(object sender, EventArgs eventArgs) {
+      if (ScheduleDecoder != null) ScheduleDecoder.ScheduleParameter.ActualNameChanged += ScheduleDecoder_ScheduleParameter_ActualNameChanged;
+      ParameterizeOperators();
+    }
+    private void ScheduleDecoder_ScheduleParameter_ActualNameChanged(object sender, EventArgs eventArgs) {
+      ParameterizeOperators();
     }
     #endregion
@@ -156,6 +212,5 @@
       }
 
-      if (data.BestKnownQuality.HasValue) BestKnownQuality = new DoubleValue(data.BestKnownQuality.Value);
-      else BestKnownQuality = null;
+      BestKnownQuality = data.BestKnownQuality.HasValue ? new DoubleValue(data.BestKnownQuality.Value) : null;
       if (data.BestKnownSchedule != null) {
         var enc = new JSMEncoding();
@@ -168,7 +223,7 @@
         }
         BestKnownSolution = new JSMDecoder().CreateScheduleFromEncoding(enc, jobData);
-        if (SolutionEvaluator is MeanTardinessEvaluator)
+        if (ScheduleEvaluator is MeanTardinessEvaluator)
           BestKnownQuality = new DoubleValue(MeanTardinessEvaluator.GetMeanTardiness(BestKnownSolution, jobData));
-        else if (SolutionEvaluator is MakespanEvaluator)
+        else if (ScheduleEvaluator is MakespanEvaluator)
           BestKnownQuality = new DoubleValue(MakespanEvaluator.GetMakespan(BestKnownSolution));
       }
@@ -208,4 +263,5 @@
       ApplyEncoding();
       Operators.Add(new BestSchedulingSolutionAnalyzer());
+      ParameterizeOperators();
     }
 
@@ -213,17 +269,64 @@
       if (SolutionCreator.GetType() == typeof(JSMRandomCreator)) {
         Operators.AddRange(ApplicationManager.Manager.GetInstances<IJSMOperator>());
-        var decoder = new JSMDecoder();
-        ((SchedulingEvaluationAlgorithm)EvaluatorParameter.ActualValue).InitializeOperatorGraph(decoder);
+        ScheduleDecoder = new JSMDecoder();
       } else if (SolutionCreator.GetType() == typeof(PRVRandomCreator)) {
         Operators.AddRange(ApplicationManager.Manager.GetInstances<IPRVOperator>());
-        var decoder = new PRVDecoder();
-        ((SchedulingEvaluationAlgorithm)EvaluatorParameter.ActualValue).InitializeOperatorGraph(decoder);
+        ScheduleDecoder = new PRVDecoder();
       } else if (SolutionCreator.GetType() == typeof(PWRRandomCreator)) {
         Operators.AddRange(ApplicationManager.Manager.GetInstances<IPWROperator>());
-        var decoder = new PWRDecoder();
-        ((SchedulingEvaluationAlgorithm)EvaluatorParameter.ActualValue).InitializeOperatorGraph(decoder);
+        ScheduleDecoder = new PWRDecoder();
       } else if (SolutionCreator.GetType() == typeof(DirectScheduleRandomCreator)) {
         Operators.AddRange(ApplicationManager.Manager.GetInstances<IDirectScheduleOperator>());
-        ((SchedulingEvaluationAlgorithm)EvaluatorParameter.ActualValue).InitializeOperatorGraph<Schedule>();
+        ScheduleDecoder = null;
+      }
+    }
+
+    private void ParameterizeOperators() {
+      Evaluator.ScheduleDecoderParameter.ActualName = ScheduleDecoderParameter.Name;
+      Evaluator.ScheduleDecoderParameter.Hidden = true;
+      Evaluator.ScheduleEvaluatorParameter.ActualName = ScheduleEvaluatorParameter.Name;
+      Evaluator.ScheduleEvaluatorParameter.Hidden = true;
+      Evaluator.QualityParameter.ActualName = ScheduleEvaluator.QualityParameter.ActualName;
+      Evaluator.QualityParameter.Hidden = true;
+
+      if (ScheduleDecoder != null)
+        ScheduleDecoder.ScheduleEncodingParameter.ActualName = SolutionCreator.ScheduleEncodingParameter.ActualName;
+
+      if (ScheduleDecoder != null) {
+        ScheduleEvaluator.ScheduleParameter.ActualName = ScheduleDecoder.ScheduleParameter.ActualName;
+        ScheduleEvaluator.ScheduleParameter.Hidden = true;
+      } else if (SolutionCreator is DirectScheduleRandomCreator) {
+        var directEvaluator = (DirectScheduleRandomCreator)SolutionCreator;
+        ScheduleEvaluator.ScheduleParameter.ActualName = directEvaluator.ScheduleEncodingParameter.ActualName;
+        ScheduleEvaluator.ScheduleParameter.Hidden = true;
+      } else {
+        ScheduleEvaluator.ScheduleParameter.ActualName = ScheduleEvaluator.ScheduleParameter.Name;
+        ScheduleEvaluator.ScheduleParameter.Hidden = false;
+      }
+
+      foreach (var op in Operators.OfType<IScheduleManipulator>()) {
+        op.ScheduleEncodingParameter.ActualName = SolutionCreator.ScheduleEncodingParameter.ActualName;
+        op.ScheduleEncodingParameter.Hidden = true;
+      }
+
+      foreach (var op in Operators.OfType<IScheduleCrossover>()) {
+        op.ChildParameter.ActualName = SolutionCreator.ScheduleEncodingParameter.ActualName;
+        op.ChildParameter.Hidden = true;
+        op.ParentsParameter.ActualName = SolutionCreator.ScheduleEncodingParameter.ActualName;
+        op.ParentsParameter.Hidden = true;
+      }
+
+      foreach (var op in Operators.OfType<BestSchedulingSolutionAnalyzer>()) {
+        op.QualityParameter.ActualName = ScheduleEvaluator.QualityParameter.ActualName;
+        if (ScheduleDecoder != null) {
+          op.ScheduleParameter.ActualName = ScheduleDecoder.ScheduleParameter.ActualName;
+          op.ScheduleParameter.Hidden = true;
+        } else if (SolutionCreator is DirectScheduleRandomCreator) {
+          op.ScheduleParameter.ActualName = ((DirectScheduleRandomCreator)SolutionCreator).ScheduleEncodingParameter.ActualName;
+          op.ScheduleParameter.Hidden = true;
+        } else {
+          op.ScheduleParameter.ActualName = op.ScheduleParameter.Name;
+          op.ScheduleParameter.Hidden = false;
+        }
       }
     }
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Plugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Plugin.cs.frame	(revision 8886)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Plugin.cs.frame	(revision 8887)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Problems.Scheduling {
-  [Plugin("HeuristicLab.Problems.Scheduling", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.Scheduling", "3.3.7.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.Scheduling-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Properties/AssemblyInfo.cs.frame	(revision 8886)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/Properties/AssemblyInfo.cs.frame	(revision 8887)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.7.$WCREV$")]
Index: /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/SchedulingProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/SchedulingProblem.cs	(revision 8886)
+++ /trunk/sources/HeuristicLab.Problems.Scheduling/3.3/SchedulingProblem.cs	(revision 8887)
@@ -29,13 +29,9 @@
   [Item("SchedulingProblem", "Abstract class that represents a Scheduling Problem")]
   [StorableClass]
-  public abstract class SchedulingProblem : SingleObjectiveHeuristicOptimizationProblem<IScheduleEvaluationAlgorithm, IScheduleCreator> {
+  public abstract class SchedulingProblem : SingleObjectiveHeuristicOptimizationProblem<ISchedulingEvaluator, IScheduleCreator> {
     [StorableConstructor]
     protected SchedulingProblem(bool deserializing) : base(deserializing) { }
-    protected SchedulingProblem(SchedulingProblem original, Cloner cloner)
-      : base(original, cloner) {
-    }
-
-    protected SchedulingProblem(IScheduleEvaluationAlgorithm se, IScheduleCreator sc) : base(se, sc) { }
-
+    protected SchedulingProblem(SchedulingProblem original, Cloner cloner) : base(original, cloner) { }
+    protected SchedulingProblem(ISchedulingEvaluator evaluator, IScheduleCreator creator) : base(evaluator, creator) { }
   }
 }
