Index: /branches/2521_ProblemRefactoring/HeuristicLab 3.3.sln
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab 3.3.sln	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab 3.3.sln	(revision 17461)
@@ -458,4 +458,8 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.PTSP.Views-3.3", "HeuristicLab.Problems.PTSP.Views\3.3\HeuristicLab.Problems.PTSP.Views-3.3.csproj", "{90B6CA12-9791-4430-B2D7-CD3ED7F75E2B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.Scheduling-3.3", "HeuristicLab.Problems.Scheduling\3.3\HeuristicLab.Problems.Scheduling-3.3.csproj", "{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.Scheduling.Views-3.3", "HeuristicLab.Problems.Scheduling.Views\3.3\HeuristicLab.Problems.Scheduling.Views-3.3.csproj", "{78763A4E-E163-48C2-98EB-709760D06F25}"
 EndProject
 Global
@@ -2229,4 +2233,28 @@
 		{90B6CA12-9791-4430-B2D7-CD3ED7F75E2B}.Release|x86.ActiveCfg = Release|x86
 		{90B6CA12-9791-4430-B2D7-CD3ED7F75E2B}.Release|x86.Build.0 = Release|x86
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Debug|x64.ActiveCfg = Debug|x64
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Debug|x64.Build.0 = Debug|x64
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Debug|x86.ActiveCfg = Debug|x86
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Debug|x86.Build.0 = Debug|x86
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Release|x64.ActiveCfg = Release|x64
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Release|x64.Build.0 = Release|x64
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Release|x86.ActiveCfg = Release|x86
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Release|x86.Build.0 = Release|x86
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Debug|x64.ActiveCfg = Debug|x64
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Debug|x64.Build.0 = Debug|x64
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Debug|x86.ActiveCfg = Debug|x86
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Debug|x86.Build.0 = Debug|x86
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Release|Any CPU.Build.0 = Release|Any CPU
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Release|x64.ActiveCfg = Release|x64
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Release|x64.Build.0 = Release|x64
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Release|x86.ActiveCfg = Release|x86
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Collections/3.3/IObservableCollection.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Collections/3.3/IObservableCollection.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Collections/3.3/IObservableCollection.cs	(revision 17461)
@@ -26,4 +26,5 @@
 namespace HeuristicLab.Collections {
   [StorableType("289d81e9-a167-416c-aaa8-c40aa1ea96f9")]
-  public interface IObservableCollection<T> : ICollection<T>, INotifyObservableCollectionItemsChanged<T>, INotifyPropertyChanged { }
+  public interface IObservableCollection<T> : ICollection<T>, INotifyObservableCollectionItemsChanged<T>, INotifyPropertyChanged {
+  }
 }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Collections/3.3/ObservableCollection.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Collections/3.3/ObservableCollection.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Collections/3.3/ObservableCollection.cs	(revision 17461)
@@ -20,5 +20,4 @@
 #endregion
 
-using HEAL.Attic;
 using System;
 using System.Collections;
@@ -26,4 +25,5 @@
 using System.ComponentModel;
 using System.Linq;
+using HEAL.Attic;
 
 namespace HeuristicLab.Collections {
@@ -97,11 +97,12 @@
     public void AddRange(IEnumerable<T> collection) {
       int capacity = list.Capacity;
-      ICollection<T> items = collection as ICollection<T> ?? collection.ToList();
+      var items = collection as ICollection<T> ?? collection.ToList();
       list.AddRange(items);
       if (items.Count > 0) {
+        OnItemsAdded(items);
         if (list.Capacity != capacity)
           OnPropertyChanged("Capacity");
-        OnPropertyChanged("Count");
-        OnItemsAdded(items);
+        OnPropertyChanged("Item[]");
+        OnPropertyChanged("Count");
       }
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Interfaces/IConstrainedValueParameter.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Interfaces/IConstrainedValueParameter.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Interfaces/IConstrainedValueParameter.cs	(revision 17461)
@@ -1,2 +1,3 @@
+using System.Collections.Generic;
 using HEAL.Attic;
 #region License Information
@@ -26,4 +27,6 @@
   public interface IConstrainedValueParameter<T> : IValueParameter<T> where T : class, IItem {
     IItemSet<T> ValidValues { get; }
+
+    void Populate(IEnumerable<IItem> items);
   }
 }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj	(revision 17461)
@@ -128,5 +128,5 @@
     <Compile Include="Interfaces\IScheduleCreator.cs" />
     <Compile Include="Interfaces\IScheduleCrossover.cs" />
-    <Compile Include="Interfaces\ISchedule.cs" />
+    <Compile Include="Interfaces\IScheduleSolution.cs" />
     <Compile Include="Interfaces\IScheduleDecoder.cs" />
     <Compile Include="Interfaces\IScheduleEncoding.cs" />
@@ -138,5 +138,5 @@
     <Compile Include="JobSequenceMatrix\Crossovers\JSMSXXCrossover.cs" />
     <Compile Include="JobSequenceMatrix\JobSequenceMatrixEncoding.cs" />
-    <Compile Include="JobSequenceMatrix\JSMEncoding.cs" />
+    <Compile Include="JobSequenceMatrix\JSM.cs" />
     <Compile Include="JobSequenceMatrix\JSMRandomCreator.cs" />
     <Compile Include="JobSequenceMatrix\Manipulators\JSMManipulator.cs" />
@@ -149,5 +149,5 @@
     <Compile Include="PermutationWithRepetition\Manipulators\PWRInsertionManipulator.cs" />
     <Compile Include="PermutationWithRepetition\PermutationWithRepetitionEncoding.cs" />
-    <Compile Include="PermutationWithRepetition\PWREncoding.cs" />
+    <Compile Include="PermutationWithRepetition\PWR.cs" />
     <Compile Include="PermutationWithRepetition\PWRRandomCreator.cs" />
     <Compile Include="Plugin.cs" />
@@ -158,5 +158,5 @@
     <Compile Include="PriorityRulesVector\Manipulators\PRVUniformOnePositionManipulator.cs" />
     <Compile Include="PriorityRulesVector\PriorityRulesVectorEncoding.cs" />
-    <Compile Include="PriorityRulesVector\PRVEncoding.cs" />
+    <Compile Include="PriorityRulesVector\PRV.cs" />
     <Compile Include="PriorityRulesVector\PRVRandomCreator.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
Index: anches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/ISchedule.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/ISchedule.cs	(revision 17460)
+++ 	(revision )
@@ -1,27 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2015 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.Optimization;
-
-namespace HeuristicLab.Encodings.ScheduleEncoding {
-  public interface ISchedule : IEncodedSolution {
-  }
-}
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCreator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCreator.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCreator.cs	(revision 17461)
@@ -28,5 +28,5 @@
   [StorableType("d6738639-c5fc-46af-8997-7527ea718759")]
   public interface IScheduleCreator<TSchedule> : ISolutionCreator<TSchedule>, IScheduleOperator
-  where TSchedule : class,ISchedule {
+  where TSchedule : class, IScheduleSolution {
     ILookupParameter<TSchedule> ScheduleParameter { get; }
     IValueLookupParameter<IntValue> JobsParameter { get; }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCrossover.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCrossover.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCrossover.cs	(revision 17461)
@@ -27,6 +27,6 @@
   [StorableType("809a6136-3a7a-4389-9119-2bb48f6d650a")]
   public interface IScheduleCrossover : ICrossover, IScheduleOperator {
-    ILookupParameter<ISchedule> ChildParameter { get; }
-    IScopeTreeLookupParameter<ISchedule> ParentsParameter { get; }
+    ILookupParameter<IScheduleSolution> ChildParameter { get; }
+    IScopeTreeLookupParameter<IScheduleSolution> ParentsParameter { get; }
   }
 }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleDecoder.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleDecoder.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleDecoder.cs	(revision 17461)
@@ -26,13 +26,13 @@
   [StorableType("010C752F-0F5E-4B93-8695-8DD74903DBE7")]
   public interface IScheduleDecoder : IScheduleOperator {
-    ILookupParameter<ISchedule> ScheduleEncodingParameter { get; }
+    ILookupParameter<IScheduleSolution> ScheduleEncodingParameter { get; }
     ILookupParameter<Schedule> ScheduleParameter { get; }
     ILookupParameter<ItemList<Job>> JobDataParameter { get; }
 
-    Schedule DecodeSchedule(ISchedule solution, ItemList<Job> jobData);
+    Schedule DecodeSchedule(IScheduleSolution solution, ItemList<Job> jobData);
   }
 
   public interface IScheduleDecoder<TSchedule> : IScheduleDecoder
-    where TSchedule : class, ISchedule {
+    where TSchedule : class, IScheduleSolution {
     Schedule DecodeSchedule(TSchedule solution, ItemList<Job> jobData);
   }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleEncoding.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleEncoding.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleEncoding.cs	(revision 17461)
@@ -22,13 +22,13 @@
 #endregion
 
+using HEAL.Attic;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Optimization;
-using HEAL.Attic;
 
 namespace HeuristicLab.Encodings.ScheduleEncoding {
   [StorableType("09b9d24c-2576-495a-b06c-338d095cba0d")]
-  public interface IScheduleEncoding : IEncoding<ISchedule> {
-    IFixedValueParameter<ItemList<Job>> JobDataParameter { get; set; }
+  public interface IScheduleEncoding : IEncoding<IScheduleSolution> {
+    IValueParameter<ItemList<Job>> JobDataParameter { get; set; }
     IFixedValueParameter<IntValue> JobsParameter { get; set; }
     IFixedValueParameter<IntValue> ResourcesParameter { get; set; }
@@ -39,9 +39,9 @@
 
 
-    Schedule Decode(ISchedule schedule, ItemList<Job> jobData);
+    Schedule Decode(IScheduleSolution schedule, ItemList<Job> jobData);
   }
 
   public interface IScheduleEncoding<TSchedule> : IEncoding<TSchedule>
-    where TSchedule : class, ISchedule {
+    where TSchedule : class, IScheduleSolution {
 
   }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleManipulator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleManipulator.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleManipulator.cs	(revision 17461)
@@ -27,5 +27,5 @@
   [StorableType("aa89fd6f-db49-457d-abc9-5600aa8f24e5")]
   public interface IScheduleManipulator : IManipulator, IScheduleOperator {
-    ILookupParameter<ISchedule> ScheduleParameter { get; }
+    ILookupParameter<IScheduleSolution> ScheduleParameter { get; }
   }
 }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleSolution.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleSolution.cs	(revision 17461)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleSolution.cs	(revision 17461)
@@ -0,0 +1,26 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Optimization;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  public interface IScheduleSolution : IEncodedSolution { }
+}
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMCrossover.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMCrossover.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMCrossover.cs	(revision 17461)
@@ -35,5 +35,5 @@
     public JSMCrossover() : base() { }
 
-    public abstract JSMEncoding Cross(IRandom random, JSMEncoding parent1, JSMEncoding parent2);
+    public abstract JSM Cross(IRandom random, JSM parent1, JSM parent2);
 
     public override IOperation InstrumentedApply() {
@@ -41,5 +41,5 @@
 
       ChildParameter.ActualValue =
-        Cross(RandomParameter.ActualValue, parents[0] as JSMEncoding, parents[1] as JSMEncoding);
+        Cross(RandomParameter.ActualValue, parents[0] as JSM, parents[1] as JSM);
 
       return base.InstrumentedApply();
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMJOXCrossover.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMJOXCrossover.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMJOXCrossover.cs	(revision 17461)
@@ -40,6 +40,6 @@
     }
 
-    public static JSMEncoding Apply(IRandom random, JSMEncoding p1, JSMEncoding p2) {
-      var result = new JSMEncoding(random.Next());
+    public static JSM Apply(IRandom random, JSM p1, JSM p2) {
+      var result = new JSM(random.Next());
 
       int nrOfResources = p1.JobSequenceMatrix.Count;
@@ -53,6 +53,6 @@
 
       bool dominantParent = random.Next(2) == 1;
-      JSMEncoding parent1 = dominantParent ? p1 : p2;
-      JSMEncoding parent2 = dominantParent ? p2 : p1;
+      JSM parent1 = dominantParent ? p1 : p2;
+      JSM parent2 = dominantParent ? p2 : p1;
 
       //Fill childmatrix with values
@@ -75,5 +75,5 @@
     }
 
-    public override JSMEncoding Cross(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
+    public override JSM Cross(IRandom random, JSM parent1, JSM parent2) {
       return Apply(random, parent1, parent2);
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMOXCrossover.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMOXCrossover.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMOXCrossover.cs	(revision 17461)
@@ -38,6 +38,6 @@
     }
 
-    public static JSMEncoding Apply(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
-      var result = new JSMEncoding(random.Next());
+    public static JSM Apply(IRandom random, JSM parent1, JSM parent2) {
+      var result = new JSM(random.Next());
 
       for (int i = 0; i < parent1.JobSequenceMatrix.Count; i++) {
@@ -50,5 +50,5 @@
     }
 
-    public override JSMEncoding Cross(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
+    public override JSM Cross(IRandom random, JSM parent1, JSM parent2) {
       return Apply(random, parent1, parent2);
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMSXXCrossover.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMSXXCrossover.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMSXXCrossover.cs	(revision 17461)
@@ -39,6 +39,6 @@
     }
 
-    public static JSMEncoding Apply(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
-      var result = new JSMEncoding(random.Next());
+    public static JSM Apply(IRandom random, JSM parent1, JSM parent2) {
+      var result = new JSM(random.Next());
       int subSequenceLength = random.Next(parent1.JobSequenceMatrix[0].Length);
       for (int i = 0; i < parent1.JobSequenceMatrix.Count; i++) {
@@ -91,5 +91,5 @@
     }
 
-    public override JSMEncoding Cross(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
+    public override JSM Cross(IRandom random, JSM parent1, JSM parent2) {
       return Apply(random, parent1, parent2);
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Decoder/JSMDecoder.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Decoder/JSMDecoder.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Decoder/JSMDecoder.cs	(revision 17461)
@@ -34,5 +34,5 @@
   [Item("JobSequenceMatrixDecoder", "Applies the GifflerThompson algorithm to create an active schedule from a JobSequence Matrix.")]
   [StorableType("BBE354C2-7599-43CC-ACDC-F8F0F65BE3F5")]
-  public class JSMDecoder : ScheduleDecoder<JSMEncoding> {
+  public class JSMDecoder : ScheduleDecoder<JSM>, IJSMOperator {
 
     public IFixedValueParameter<EnumValue<JSMDecodingErrorPolicy>> DecodingErrorPolicyParameter {
@@ -64,5 +64,5 @@
     }
 
-    private static Task SelectTaskFromConflictSet(JSMEncoding solution, JSMDecodingErrorPolicy decodingErrorPolicy, JSMForcingStrategy forcingStrategy, int conflictedResourceNr, int progressOnConflictedResource, ItemList<Task> conflictSet, IRandom random) {
+    private static Task SelectTaskFromConflictSet(JSM solution, JSMDecodingErrorPolicy decodingErrorPolicy, JSMForcingStrategy forcingStrategy, int conflictedResourceNr, int progressOnConflictedResource, ItemList<Task> conflictSet, IRandom random) {
       if (conflictSet.Count == 1)
         return conflictSet[0];
@@ -108,5 +108,5 @@
     }
 
-    private static void ApplyForcingStrategy(JSMForcingStrategy forcingStrategy, JSMEncoding solution, int conflictedResource, int newResolutionIndex, int progressOnResource, int newResolution) {
+    private static void ApplyForcingStrategy(JSMForcingStrategy forcingStrategy, JSM solution, int conflictedResource, int newResolutionIndex, int progressOnResource, int newResolution) {
       var jsm = solution.JobSequenceMatrix;
       if (forcingStrategy == JSMForcingStrategy.SwapForcing) {
@@ -130,9 +130,9 @@
     }
 
-    public override Schedule DecodeSchedule(JSMEncoding encoding, ItemList<Job> jobData) {
+    public override Schedule DecodeSchedule(JSM encoding, ItemList<Job> jobData) {
       return Decode(encoding, jobData, DecodingErrorPolicy, ForcingStrategy);
     }
 
-    public static Schedule Decode(JSMEncoding solution, ItemList<Job> jobData, JSMDecodingErrorPolicy decodingErrorPolicy, JSMForcingStrategy forcingStrategy) {
+    public static Schedule Decode(JSM solution, ItemList<Job> jobData, JSMDecodingErrorPolicy decodingErrorPolicy, JSMForcingStrategy forcingStrategy) {
       var random = new FastRandom(solution.RandomSeed);
       var jobs = (ItemList<Job>)jobData.Clone();
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSM.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSM.cs	(revision 17461)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSM.cs	(revision 17461)
@@ -0,0 +1,66 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 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.Text;
+using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.PermutationEncoding;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  [Item("Job Sequence Matrix", "Represents the job sequence matrix solution.")]
+  [StorableType("8F19A51A-45F1-4C1D-BCD4-A9F57E40DDC5")]
+  public class JSM : Item, IScheduleSolution {
+
+    [Storable]
+    public ItemList<Permutation> JobSequenceMatrix { get; private set; }
+    [Storable]
+    public int RandomSeed { get; private set; }
+
+    [StorableConstructor]
+    protected JSM(StorableConstructorFlag _) : base(_) { }
+    protected JSM(JSM original, Cloner cloner)
+      : base(original, cloner) {
+      this.JobSequenceMatrix = cloner.Clone(original.JobSequenceMatrix);
+      this.RandomSeed = original.RandomSeed;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JSM(this, cloner);
+    }
+    public JSM(int randomSeed)
+      : base() {
+      RandomSeed = randomSeed;
+      JobSequenceMatrix = new ItemList<Permutation>();
+    }
+
+    public override string ToString() {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("[ ");
+
+      foreach (Permutation p in JobSequenceMatrix) {
+        sb.AppendLine(p.ToString());
+      }
+
+      sb.Append("]");
+      return sb.ToString();
+    }
+  }
+}
Index: anches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMEncoding.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMEncoding.cs	(revision 17460)
+++ 	(revision )
@@ -1,66 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 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.Text;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Encodings.PermutationEncoding;
-using HEAL.Attic;
-
-namespace HeuristicLab.Encodings.ScheduleEncoding {
-  [Item("JobSequenceMatrixEncoding", "Represents an encoding for a scheduling Problem using a list of job sequences to deliver scheduleinformation.")]
-  [StorableType("8F19A51A-45F1-4C1D-BCD4-A9F57E40DDC5")]
-  public class JSMEncoding : Item, ISchedule {
-
-    [Storable]
-    public ItemList<Permutation> JobSequenceMatrix { get; private set; }
-    [Storable]
-    public int RandomSeed { get; private set; }
-
-    [StorableConstructor]
-    protected JSMEncoding(StorableConstructorFlag _) : base(_) { }
-    protected JSMEncoding(JSMEncoding original, Cloner cloner)
-      : base(original, cloner) {
-      this.JobSequenceMatrix = cloner.Clone(original.JobSequenceMatrix);
-      this.RandomSeed = original.RandomSeed;
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new JSMEncoding(this, cloner);
-    }
-    public JSMEncoding(int randomSeed)
-      : base() {
-      RandomSeed = randomSeed;
-      JobSequenceMatrix = new ItemList<Permutation>();
-    }
-
-    public override string ToString() {
-      StringBuilder sb = new StringBuilder();
-      sb.Append("[ ");
-
-      foreach (Permutation p in JobSequenceMatrix) {
-        sb.AppendLine(p.ToString());
-      }
-
-      sb.Append("]");
-      return sb.ToString();
-    }
-  }
-}
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMRandomCreator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMRandomCreator.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMRandomCreator.cs	(revision 17461)
@@ -30,5 +30,5 @@
   [Item("JobSequenceMatrixCreator", "Creator class used to create Job Sequence Matrix solutions for standard JobShop scheduling problems.")]
   [StorableType("F8053C69-31C2-4E05-8FA0-5AED15FAF804")]
-  public class JSMRandomCreator : ScheduleCreator<JSMEncoding>, IStochasticOperator {
+  public class JSMRandomCreator : ScheduleCreator<JSM>, IStochasticOperator {
 
     public ILookupParameter<IRandom> RandomParameter {
@@ -48,6 +48,6 @@
     }
 
-    public static JSMEncoding Apply(int jobs, int resources, IRandom random) {
-      var solution = new JSMEncoding(random.Next());
+    public static JSM Apply(int jobs, int resources, IRandom random) {
+      var solution = new JSM(random.Next());
       for (int i = 0; i < resources; i++) {
         solution.JobSequenceMatrix.Add(new Permutation(PermutationTypes.Absolute, jobs, random));
@@ -56,5 +56,5 @@
     }
 
-    protected override JSMEncoding CreateSolution() {
+    protected override JSM CreateSolution() {
       return Apply(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value, RandomParameter.ActualValue);
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JobSequenceMatrixEncoding.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JobSequenceMatrixEncoding.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JobSequenceMatrixEncoding.cs	(revision 17461)
@@ -31,6 +31,7 @@
 
 namespace HeuristicLab.Encodings.ScheduleEncoding {
+  [Item("Job Sequence Matrix Encoding", "Represents an encoding of schedules in form of a job sequence per resource.")]
   [StorableType("9C090369-0214-42E6-8C3E-369751F5A9E1")]
-  public sealed class JobSequenceMatrixEncoding : ScheduleEncoding<JSMEncoding> {
+  public sealed class JobSequenceMatrixEncoding : ScheduleEncoding<JSM> {
     [StorableConstructor]
     private JobSequenceMatrixEncoding(StorableConstructorFlag _) : base(_) { }
@@ -41,5 +42,5 @@
 
     public JobSequenceMatrixEncoding()
-      : base() {
+      : base("JSM") {
       SolutionCreator = new JSMRandomCreator();
       Decoder = new JSMDecoder();
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMManipulator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMManipulator.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMManipulator.cs	(revision 17461)
@@ -34,8 +34,8 @@
     public JSMManipulator() : base() { }
 
-    protected abstract void Manipulate(IRandom random, ISchedule individual);
+    protected abstract void Manipulate(IRandom random, IScheduleSolution individual);
 
     public override IOperation InstrumentedApply() {
-      var solution = ScheduleParameter.ActualValue as JSMEncoding;
+      var solution = ScheduleParameter.ActualValue as JSM;
       if (solution == null) throw new InvalidOperationException("ScheduleEncoding was not found or is not of type JSMEncoding.");
       Manipulate(RandomParameter.ActualValue, solution);
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMShiftChangeManipulator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMShiftChangeManipulator.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMShiftChangeManipulator.cs	(revision 17461)
@@ -42,5 +42,5 @@
     }
 
-    public static void Apply(IRandom random, JSMEncoding individual) {
+    public static void Apply(IRandom random, JSM individual) {
       int nrOfJobs = individual.JobSequenceMatrix[0].Length;
       int jobIndex = random.Next(nrOfJobs);
@@ -63,6 +63,6 @@
     }
 
-    protected override void Manipulate(IRandom random, ISchedule encoding) {
-      var solution = encoding as JSMEncoding;
+    protected override void Manipulate(IRandom random, IScheduleSolution encoding) {
+      var solution = encoding as JSM;
       if (solution == null) throw new InvalidOperationException("Encoding is not of type JSMEncoding");
       Apply(random, solution);
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMSwapManipulator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMSwapManipulator.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMSwapManipulator.cs	(revision 17461)
@@ -40,5 +40,5 @@
     }
 
-    public static void Apply(IRandom random, JSMEncoding individual) {
+    public static void Apply(IRandom random, JSM individual) {
       int resourceIndex = random.Next(individual.JobSequenceMatrix.Count);
       Permutation p = individual.JobSequenceMatrix[resourceIndex];
@@ -50,6 +50,6 @@
     }
 
-    protected override void Manipulate(IRandom random, ISchedule individual) {
-      var solution = individual as JSMEncoding;
+    protected override void Manipulate(IRandom random, IScheduleSolution individual) {
+      var solution = individual as JSM;
       if (solution == null) throw new InvalidOperationException("Encoding is not of type JSMEncoding");
       Apply(random, solution);
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRCrossover.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRCrossover.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRCrossover.cs	(revision 17461)
@@ -38,5 +38,5 @@
     }
 
-    public abstract PWREncoding Cross(IRandom random, PWREncoding parent1, PWREncoding parent2);
+    public abstract PWR Cross(IRandom random, PWR parent1, PWR parent2);
 
     public override IOperation InstrumentedApply() {
@@ -44,5 +44,5 @@
 
       ChildParameter.ActualValue =
-        Cross(RandomParameter.ActualValue, parents[0] as PWREncoding, parents[1] as PWREncoding);
+        Cross(RandomParameter.ActualValue, parents[0] as PWR, parents[1] as PWR);
 
       return base.InstrumentedApply();
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRGOXCrossover.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRGOXCrossover.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRGOXCrossover.cs	(revision 17461)
@@ -55,6 +55,6 @@
     }
 
-    public static PWREncoding Apply(IRandom random, PWREncoding parent1, PWREncoding parent2) {
-      var result = new PWREncoding();
+    public static PWR Apply(IRandom random, PWR parent1, PWR parent2) {
+      var result = new PWR();
 
       var p1 = ((IntegerVector)(parent1.PermutationWithRepetition.Clone())).ToList();
@@ -87,5 +87,5 @@
     }
 
-    public override PWREncoding Cross(IRandom random, PWREncoding parent1, PWREncoding parent2) {
+    public override PWR Cross(IRandom random, PWR parent1, PWR parent2) {
       return Apply(random, parent1, parent2);
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRPPXCrossover.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRPPXCrossover.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRPPXCrossover.cs	(revision 17461)
@@ -41,6 +41,6 @@
     }
 
-    public static PWREncoding Apply(IRandom random, PWREncoding parent1, PWREncoding parent2) {
-      var result = new PWREncoding();
+    public static PWR Apply(IRandom random, PWR parent1, PWR parent2) {
+      var result = new PWR();
       var p1 = ((IntegerVector)(parent1.PermutationWithRepetition.Clone())).ToList();
       var p2 = ((IntegerVector)(parent2.PermutationWithRepetition.Clone())).ToList();
@@ -69,5 +69,5 @@
     }
 
-    public override PWREncoding Cross(IRandom random, PWREncoding parent1, PWREncoding parent2) {
+    public override PWR Cross(IRandom random, PWR parent1, PWR parent2) {
       return Apply(random, parent1, parent2);
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Decoder/PWRDecoder.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Decoder/PWRDecoder.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Decoder/PWRDecoder.cs	(revision 17461)
@@ -27,5 +27,5 @@
   [Item("PWRDecoder", "An item used to convert a PWR-individual into a generalized schedule.")]
   [StorableType("60D171BE-9704-40E1-9C63-0E56D95403CD")]
-  public class PWRDecoder : ScheduleDecoder<PWREncoding> {
+  public class PWRDecoder : ScheduleDecoder<PWR>, IPWROperator {
     [StorableConstructor]
     protected PWRDecoder(StorableConstructorFlag _) : base(_) { }
@@ -37,9 +37,9 @@
     }
 
-    public override Schedule DecodeSchedule(PWREncoding solution, ItemList<Job> jobData) {
+    public override Schedule DecodeSchedule(PWR solution, ItemList<Job> jobData) {
       return Decode(solution, jobData);
     }
 
-    public static Schedule Decode(PWREncoding solution, ItemList<Job> jobData) {
+    public static Schedule Decode(PWR solution, ItemList<Job> jobData) {
       var jobs = (ItemList<Job>)jobData.Clone();
       var resultingSchedule = new Schedule(jobs[0].Tasks.Count);
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Manipulators/PWRInsertionManipulator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Manipulators/PWRInsertionManipulator.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Manipulators/PWRInsertionManipulator.cs	(revision 17461)
@@ -40,5 +40,5 @@
     }
 
-    public static void Apply(IRandom random, PWREncoding individual) {
+    public static void Apply(IRandom random, PWR individual) {
       int cutIndex = random.Next(individual.PermutationWithRepetition.Length);
       int insertIndex = random.Next(individual.PermutationWithRepetition.Length);
@@ -55,5 +55,5 @@
     }
 
-    protected override void Manipulate(IRandom random, PWREncoding individual) {
+    protected override void Manipulate(IRandom random, PWR individual) {
       Apply(random, individual);
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Manipulators/PWRManipulator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Manipulators/PWRManipulator.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Manipulators/PWRManipulator.cs	(revision 17461)
@@ -35,8 +35,8 @@
     public PWRManipulator() : base() { }
 
-    protected abstract void Manipulate(IRandom random, PWREncoding individual);
+    protected abstract void Manipulate(IRandom random, PWR individual);
 
     public override IOperation InstrumentedApply() {
-      var solution = ScheduleParameter.ActualValue as PWREncoding;
+      var solution = ScheduleParameter.ActualValue as PWR;
       if (solution == null) throw new InvalidOperationException("ScheduleEncoding was not found or is not of type PWREncoding.");
       Manipulate(RandomParameter.ActualValue, solution);
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWR.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWR.cs	(revision 17461)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWR.cs	(revision 17461)
@@ -0,0 +1,78 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 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.Text;
+using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  [Item("Permutation With Repetition", "Represents a encoding for a standard JobShop Scheduling Problem.")]
+  [StorableType("31A66AC4-897D-4986-A6FC-DC301DC06278")]
+  public class PWR : Item, IScheduleSolution {
+
+    [Storable]
+    public IntegerVector PermutationWithRepetition { get; set; }
+
+    [StorableConstructor]
+    protected PWR(StorableConstructorFlag _) : base(_) { }
+    protected PWR(PWR original, Cloner cloner)
+      : base(original, cloner) {
+      this.PermutationWithRepetition = cloner.Clone(original.PermutationWithRepetition);
+    }
+    public PWR()
+      : base() {
+      PermutationWithRepetition = new IntegerVector();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PWR(this, cloner);
+    }
+
+    public PWR(int nrOfJobs, int nrOfResources, IRandom random)
+      : base() {
+      PermutationWithRepetition = new IntegerVector(nrOfJobs * nrOfResources);
+      int[] lookUpTable = new int[nrOfJobs];
+
+      for (int i = 0; i < PermutationWithRepetition.Length; i++) {
+        int newValue = random.Next(nrOfJobs);
+        while (lookUpTable[newValue] >= nrOfResources)
+          newValue = random.Next(nrOfJobs);
+
+        PermutationWithRepetition[i] = newValue;
+
+        lookUpTable[newValue]++;
+      }
+    }
+
+    public override string ToString() {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("[ ");
+      foreach (int i in PermutationWithRepetition) {
+        sb.Append(i + " ");
+      }
+      sb.Append("]");
+
+      return sb.ToString();
+    }
+  }
+}
Index: anches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWREncoding.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWREncoding.cs	(revision 17460)
+++ 	(revision )
@@ -1,78 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 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.Text;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Encodings.IntegerVectorEncoding;
-using HEAL.Attic;
-
-namespace HeuristicLab.Encodings.ScheduleEncoding {
-  [Item("PermutationWithRepetitionEncoding", "Represents a encoding for a standard JobShop Scheduling Problem.")]
-  [StorableType("31A66AC4-897D-4986-A6FC-DC301DC06278")]
-  public class PWREncoding : Item, ISchedule {
-
-    [Storable]
-    public IntegerVector PermutationWithRepetition { get; set; }
-
-    [StorableConstructor]
-    protected PWREncoding(StorableConstructorFlag _) : base(_) { }
-    protected PWREncoding(PWREncoding original, Cloner cloner)
-      : base(original, cloner) {
-      this.PermutationWithRepetition = cloner.Clone(original.PermutationWithRepetition);
-    }
-    public PWREncoding()
-      : base() {
-      PermutationWithRepetition = new IntegerVector();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new PWREncoding(this, cloner);
-    }
-
-    public PWREncoding(int nrOfJobs, int nrOfResources, IRandom random)
-      : base() {
-      PermutationWithRepetition = new IntegerVector(nrOfJobs * nrOfResources);
-      int[] lookUpTable = new int[nrOfJobs];
-
-      for (int i = 0; i < PermutationWithRepetition.Length; i++) {
-        int newValue = random.Next(nrOfJobs);
-        while (lookUpTable[newValue] >= nrOfResources)
-          newValue = random.Next(nrOfJobs);
-
-        PermutationWithRepetition[i] = newValue;
-
-        lookUpTable[newValue]++;
-      }
-    }
-
-    public override string ToString() {
-      StringBuilder sb = new StringBuilder();
-      sb.Append("[ ");
-      foreach (int i in PermutationWithRepetition) {
-        sb.Append(i + " ");
-      }
-      sb.Append("]");
-
-      return sb.ToString();
-    }
-  }
-}
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWRRandomCreator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWRRandomCreator.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWRRandomCreator.cs	(revision 17461)
@@ -29,5 +29,5 @@
   [Item("PermutationWithRepetitionRandomCreator", "Creates PWR-individuals at random.")]
   [StorableType("6E753916-C0FD-4585-B6A6-47FD66ED098F")]
-  public class PWRRandomCreator : ScheduleCreator<PWREncoding>, IStochasticOperator {
+  public class PWRRandomCreator : ScheduleCreator<PWR>, IStochasticOperator {
 
     public ILookupParameter<IRandom> RandomParameter {
@@ -47,9 +47,9 @@
     }
 
-    public static PWREncoding Apply(int jobs, int resources, IRandom random) {
-      return new PWREncoding(jobs, resources, random);
+    public static PWR Apply(int jobs, int resources, IRandom random) {
+      return new PWR(jobs, resources, random);
     }
 
-    protected override PWREncoding CreateSolution() {
+    protected override PWR CreateSolution() {
       return Apply(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value, RandomParameter.ActualValue);
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PermutationWithRepetitionEncoding.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PermutationWithRepetitionEncoding.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PermutationWithRepetitionEncoding.cs	(revision 17461)
@@ -32,5 +32,5 @@
 namespace HeuristicLab.Encodings.ScheduleEncoding {
   [StorableType("468EF506-0749-469B-B9B9-36655AA0178D")]
-  public sealed class PermutationWithRepetitionEncoding : ScheduleEncoding<PWREncoding> {
+  public sealed class PermutationWithRepetitionEncoding : ScheduleEncoding<PWR> {
     [StorableConstructor]
     private PermutationWithRepetitionEncoding(StorableConstructorFlag _) : base(_) { }
@@ -41,5 +41,5 @@
 
     public PermutationWithRepetitionEncoding()
-      : base() {
+      : base("PWR") {
       SolutionCreator = new PWRRandomCreator();
       Decoder = new PWRDecoder();
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVCrossover.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVCrossover.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVCrossover.cs	(revision 17461)
@@ -34,10 +34,10 @@
     public PRVCrossover() : base() { }
 
-    public abstract PRVEncoding Cross(IRandom random, PRVEncoding parent1, PRVEncoding parent2);
+    public abstract PRV Cross(IRandom random, PRV parent1, PRV parent2);
 
     public override IOperation InstrumentedApply() {
       var parents = ParentsParameter.ActualValue;
       ChildParameter.ActualValue =
-        Cross(RandomParameter.ActualValue, parents[0] as PRVEncoding, parents[1] as PRVEncoding);
+        Cross(RandomParameter.ActualValue, parents[0] as PRV, parents[1] as PRV);
       return base.InstrumentedApply();
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVDiscreteCrossover.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVDiscreteCrossover.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVDiscreteCrossover.cs	(revision 17461)
@@ -39,11 +39,11 @@
     }
 
-    public static PRVEncoding Apply(IRandom random, PRVEncoding parent1, PRVEncoding parent2) {
+    public static PRV Apply(IRandom random, PRV parent1, PRV parent2) {
       var randomSeed = random.Next();
       var integerVector = DiscreteCrossover.Apply(random, new ItemArray<IntegerVector>(new[] { parent1.PriorityRulesVector, parent2.PriorityRulesVector }));
-      return new PRVEncoding(integerVector, randomSeed);
+      return new PRV(integerVector, randomSeed);
     }
 
-    public override PRVEncoding Cross(IRandom random, PRVEncoding parent1, PRVEncoding parent2) {
+    public override PRV Cross(IRandom random, PRV parent1, PRV parent2) {
       return Apply(random, parent1, parent2);
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVSinglePointCrossover.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVSinglePointCrossover.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVSinglePointCrossover.cs	(revision 17461)
@@ -39,11 +39,11 @@
     }
 
-    public static PRVEncoding Apply(IRandom random, PRVEncoding parent1, PRVEncoding parent2) {
+    public static PRV Apply(IRandom random, PRV parent1, PRV parent2) {
       var randomSeed = random.Next();
       var integerVector = SinglePointCrossover.Apply(random, parent1.PriorityRulesVector, parent2.PriorityRulesVector);
-      return new PRVEncoding(integerVector, randomSeed);
+      return new PRV(integerVector, randomSeed);
     }
 
-    public override PRVEncoding Cross(IRandom random, PRVEncoding parent1, PRVEncoding parent2) {
+    public override PRV Cross(IRandom random, PRV parent1, PRV parent2) {
       return Apply(random, parent1, parent2);
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Decoder/PRVDecoder.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Decoder/PRVDecoder.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Decoder/PRVDecoder.cs	(revision 17461)
@@ -29,5 +29,5 @@
   [Item("JobSequencingMatrixDecoder", "Applies the GifflerThompson algorithm to create an active schedule from a JobSequencing Matrix.")]
   [StorableType("2D059957-AC7C-4B33-BADE-96706AEBAF29")]
-  public class PRVDecoder : ScheduleDecoder<PRVEncoding> {
+  public class PRVDecoder : ScheduleDecoder<PRV>, IPRVOperator {
     #region Priority Rules
     //smallest number of remaining tasks
@@ -187,9 +187,9 @@
     }
 
-    public override Schedule DecodeSchedule(PRVEncoding encoding, ItemList<Job> jobData) {
+    public override Schedule DecodeSchedule(PRV encoding, ItemList<Job> jobData) {
       return Decode(encoding, jobData);
     }
 
-    public static Schedule Decode(PRVEncoding solution, ItemList<Job> jobData) {
+    public static Schedule Decode(PRV solution, ItemList<Job> jobData) {
       var random = new FastRandom(solution.RandomSeed);
       var jobs = (ItemList<Job>)jobData.Clone();
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Manipulators/PRVManipulator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Manipulators/PRVManipulator.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Manipulators/PRVManipulator.cs	(revision 17461)
@@ -46,8 +46,8 @@
     }
 
-    protected abstract void Manipulate(IRandom random, PRVEncoding individual, int numberOfRules);
+    protected abstract void Manipulate(IRandom random, PRV individual, int numberOfRules);
 
     public override IOperation InstrumentedApply() {
-      var solution = ScheduleParameter.ActualValue as PRVEncoding;
+      var solution = ScheduleParameter.ActualValue as PRV;
       if (solution == null) throw new InvalidOperationException("ScheduleEncoding was not found or is not of type PRVEncoding.");
       Manipulate(RandomParameter.ActualValue, solution, NumberOfRulesParameter.ActualValue.Value);
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Manipulators/PRVUniformOnePositionManipulator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Manipulators/PRVUniformOnePositionManipulator.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Manipulators/PRVUniformOnePositionManipulator.cs	(revision 17461)
@@ -40,9 +40,9 @@
     }
 
-    public static void Apply(IRandom random, PRVEncoding individual, int numberOfRules) {
+    public static void Apply(IRandom random, PRV individual, int numberOfRules) {
       UniformOnePositionManipulator.Apply(random, individual.PriorityRulesVector, new IntMatrix(new int[,] { { 0, numberOfRules } }));
     }
 
-    protected override void Manipulate(IRandom random, PRVEncoding individual, int numberOfRules) {
+    protected override void Manipulate(IRandom random, PRV individual, int numberOfRules) {
       Apply(random, individual, numberOfRules);
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRV.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRV.cs	(revision 17461)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRV.cs	(revision 17461)
@@ -0,0 +1,72 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 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.Text;
+using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  [Item("Priority Rules Vector", "Represents an encoding for a Scheduling Problem.")]
+  [StorableType("D42AC200-1F87-451E-A953-803EF33BE953")]
+  public class PRV : Item, IScheduleSolution {
+    [Storable]
+    public IntegerVector PriorityRulesVector { get; private set; }
+    [Storable]
+    public int RandomSeed { get; private set; }
+
+    [StorableConstructor]
+    protected PRV(StorableConstructorFlag _) : base(_) { }
+    protected PRV(PRV original, Cloner cloner)
+      : base(original, cloner) {
+      this.PriorityRulesVector = cloner.Clone(original.PriorityRulesVector);
+      this.RandomSeed = original.RandomSeed;
+    }
+
+    public PRV(IntegerVector iv, int randomSeed)
+      : base() {
+      this.RandomSeed = randomSeed;
+      this.PriorityRulesVector = (IntegerVector)iv.Clone();
+    }
+    public PRV(int length, IRandom random, int min, int max)
+      : base() {
+      this.RandomSeed = random.Next();
+      this.PriorityRulesVector = new IntegerVector(length, random, min, max);
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PRV(this, cloner);
+    }
+
+    public override string ToString() {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("[ ");
+
+      foreach (int i in PriorityRulesVector) {
+        sb.Append(i + " ");
+      }
+
+      sb.Append("]");
+      return sb.ToString();
+    }
+  }
+}
Index: anches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVEncoding.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVEncoding.cs	(revision 17460)
+++ 	(revision )
@@ -1,72 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 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.Text;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Encodings.IntegerVectorEncoding;
-using HEAL.Attic;
-
-namespace HeuristicLab.Encodings.ScheduleEncoding {
-  [Item("PriorityRulesVectorEncoding", "Represents an encoding for a Scheduling Problem.")]
-  [StorableType("D42AC200-1F87-451E-A953-803EF33BE953")]
-  public class PRVEncoding : Item, ISchedule {
-    [Storable]
-    public IntegerVector PriorityRulesVector { get; private set; }
-    [Storable]
-    public int RandomSeed { get; private set; }
-
-    [StorableConstructor]
-    protected PRVEncoding(StorableConstructorFlag _) : base(_) { }
-    protected PRVEncoding(PRVEncoding original, Cloner cloner)
-      : base(original, cloner) {
-      this.PriorityRulesVector = cloner.Clone(original.PriorityRulesVector);
-      this.RandomSeed = original.RandomSeed;
-    }
-
-    public PRVEncoding(IntegerVector iv, int randomSeed)
-      : base() {
-      this.RandomSeed = randomSeed;
-      this.PriorityRulesVector = (IntegerVector)iv.Clone();
-    }
-    public PRVEncoding(int length, IRandom random, int min, int max)
-      : base() {
-      this.RandomSeed = random.Next();
-      this.PriorityRulesVector = new IntegerVector(length, random, min, max);
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new PRVEncoding(this, cloner);
-    }
-
-    public override string ToString() {
-      StringBuilder sb = new StringBuilder();
-      sb.Append("[ ");
-
-      foreach (int i in PriorityRulesVector) {
-        sb.Append(i + " ");
-      }
-
-      sb.Append("]");
-      return sb.ToString();
-    }
-  }
-}
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVRandomCreator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVRandomCreator.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVRandomCreator.cs	(revision 17461)
@@ -29,5 +29,5 @@
   [Item("PriorityRulesRandomCreator", "Creator class used to create PRV encoding objects for scheduling problems.")]
   [StorableType("5FF2A11E-86F9-4A8B-8E1C-713D6801506C")]
-  public class PRVRandomCreator : ScheduleCreator<PRVEncoding>, IStochasticOperator {
+  public class PRVRandomCreator : ScheduleCreator<PRV>, IStochasticOperator {
 
     [Storable]
@@ -54,9 +54,9 @@
     }
 
-    public static PRVEncoding Apply(int jobs, int resources, IRandom random, int nrOfRules) {
-      return new PRVEncoding(jobs * resources, random, 0, nrOfRules);
+    public static PRV Apply(int jobs, int resources, IRandom random, int nrOfRules) {
+      return new PRV(jobs * resources, random, 0, nrOfRules);
     }
 
-    protected override PRVEncoding CreateSolution() {
+    protected override PRV CreateSolution() {
       return Apply(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value, RandomParameter.ActualValue, NrOfRules);
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PriorityRulesVectorEncoding.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PriorityRulesVectorEncoding.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PriorityRulesVectorEncoding.cs	(revision 17461)
@@ -34,5 +34,5 @@
 namespace HeuristicLab.Encodings.ScheduleEncoding {
   [StorableType("9C419EE5-F3A8-4F06-8263-7D37D3AE1C72")]
-  public sealed class PriorityRulesVectorEncoding : ScheduleEncoding<PRVEncoding> {
+  public sealed class PriorityRulesVectorEncoding : ScheduleEncoding<PRV> {
 
     private IFixedValueParameter<IntValue> numberOfRulesParameter;
@@ -60,5 +60,5 @@
 
     public PriorityRulesVectorEncoding()
-      : base() {
+      : base("PRV") {
       //TODO change to meaningful value
       numberOfRulesParameter = new FixedValueParameter<IntValue>(Name + ".NumberOfRules", new IntValue(10));
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCreator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCreator.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCreator.cs	(revision 17461)
@@ -31,5 +31,5 @@
   [StorableType("3DDA1485-4518-4F1D-A475-795FFE63C98E")]
   public abstract class ScheduleCreator<TSchedule> : InstrumentedOperator, IScheduleCreator<TSchedule>
-  where TSchedule : class,ISchedule {
+  where TSchedule : class,IScheduleSolution {
 
     public ILookupParameter<TSchedule> ScheduleParameter {
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCrossover.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCrossover.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCrossover.cs	(revision 17461)
@@ -32,9 +32,9 @@
   public abstract class ScheduleCrossover : InstrumentedOperator, IScheduleCrossover, IStochasticOperator {
 
-    public ILookupParameter<ISchedule> ChildParameter {
-      get { return (ILookupParameter<ISchedule>)Parameters["Child"]; }
+    public ILookupParameter<IScheduleSolution> ChildParameter {
+      get { return (ILookupParameter<IScheduleSolution>)Parameters["Child"]; }
     }
-    public IScopeTreeLookupParameter<ISchedule> ParentsParameter {
-      get { return (IScopeTreeLookupParameter<ISchedule>)Parameters["Parents"]; }
+    public IScopeTreeLookupParameter<IScheduleSolution> ParentsParameter {
+      get { return (IScopeTreeLookupParameter<IScheduleSolution>)Parameters["Parents"]; }
     }
     public ILookupParameter<IRandom> RandomParameter {
@@ -48,7 +48,7 @@
       : base() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
-      Parameters.Add(new LookupParameter<ISchedule>("Child", "The child solution resulting from the crossover."));
+      Parameters.Add(new LookupParameter<IScheduleSolution>("Child", "The child solution resulting from the crossover."));
       ChildParameter.ActualName = "Schedule";
-      Parameters.Add(new ScopeTreeLookupParameter<ISchedule>("Parents", "The parent solution which should be crossed."));
+      Parameters.Add(new ScopeTreeLookupParameter<IScheduleSolution>("Parents", "The parent solution which should be crossed."));
       ParentsParameter.ActualName = "Schedule";
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleDecoder.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleDecoder.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleDecoder.cs	(revision 17461)
@@ -31,8 +31,8 @@
   [StorableType("57A68F4B-4B35-4DB4-9B5E-D5154DD46E45")]
   public abstract class ScheduleDecoder<TSchedule> : SingleSuccessorOperator, IScheduleDecoder<TSchedule>
-  where TSchedule : class, ISchedule {
+  where TSchedule : class, IScheduleSolution {
 
-    public ILookupParameter<ISchedule> ScheduleEncodingParameter {
-      get { return (ILookupParameter<ISchedule>)Parameters["EncodedSchedule"]; }
+    public ILookupParameter<IScheduleSolution> ScheduleEncodingParameter {
+      get { return (ILookupParameter<IScheduleSolution>)Parameters["EncodedSchedule"]; }
     }
     public ILookupParameter<Schedule> ScheduleParameter {
@@ -48,10 +48,10 @@
     public ScheduleDecoder()
       : base() {
-      Parameters.Add(new LookupParameter<ISchedule>("EncodedSchedule", "The new scheduling solution represented as encoding."));
+      Parameters.Add(new LookupParameter<IScheduleSolution>("EncodedSchedule", "The new scheduling solution represented as encoding."));
       Parameters.Add(new LookupParameter<Schedule>("Schedule", "The decoded scheduling solution represented as generalized schedule."));
       Parameters.Add(new LookupParameter<ItemList<Job>>("JobData", "Job data taken from the JSSP - Instance."));
     }
 
-    public Schedule DecodeSchedule(ISchedule schedule, ItemList<Job> jobData) {
+    public Schedule DecodeSchedule(IScheduleSolution schedule, ItemList<Job> jobData) {
       TSchedule solution = schedule as TSchedule;
       if (solution == null) throw new InvalidOperationException("Encoding is not of type " + typeof(TSchedule).GetPrettyName());
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding.cs	(revision 17461)
@@ -33,9 +33,9 @@
   [StorableType("D2FB1AF9-EF13-4ED2-B3E9-D5BE4E5772EA")]
   public abstract class ScheduleEncoding<TSchedule> : Encoding<TSchedule>, IScheduleEncoding
-  where TSchedule : class, ISchedule {
+  where TSchedule : class, IScheduleSolution {
     #region Encoding Parameters
     [Storable]
-    private IFixedValueParameter<ItemList<Job>> jobDataParameter;
-    public IFixedValueParameter<ItemList<Job>> JobDataParameter {
+    private IValueParameter<ItemList<Job>> jobDataParameter;
+    public IValueParameter<ItemList<Job>> JobDataParameter {
       get { return jobDataParameter; }
       set {
@@ -126,5 +126,4 @@
     }
 
-    protected ScheduleEncoding() : this("Schedule") { }
     protected ScheduleEncoding(string name) : this(name, Enumerable.Empty<Job>()) { }
     protected ScheduleEncoding(string name, IEnumerable<Job> jobData)
@@ -133,5 +132,5 @@
       int resources = jobData.SelectMany(j => j.Tasks).Select(t => t.ResourceNr).Distinct().Count();
 
-      jobDataParameter = new FixedValueParameter<ItemList<Job>>(Name + ".JobData", new ItemList<Job>(jobData));
+      jobDataParameter = new ValueParameter<ItemList<Job>>(Name + ".JobData", new ItemList<Job>(jobData));
       jobsParameter = new FixedValueParameter<IntValue>(Name + ".Jobs", new IntValue(jobs));
       resourcesParameter = new FixedValueParameter<IntValue>(Name + ".Resources", new IntValue(resources));
@@ -144,5 +143,5 @@
     }
 
-    public Schedule Decode(ISchedule schedule, ItemList<Job> jobData) {
+    public Schedule Decode(IScheduleSolution schedule, ItemList<Job> jobData) {
       return Decoder.DecodeSchedule(schedule, jobData);
     }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Decoder/DirectScheduleDecoder.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Decoder/DirectScheduleDecoder.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Decoder/DirectScheduleDecoder.cs	(revision 17461)
@@ -27,5 +27,5 @@
   [Item("DirectScheduleDecoder", "An item used to convert a direct schedule into a generalized schedule.")]
   [StorableType("151C772B-6E6C-40D9-B171-F5626C676A5F")]
-  public class DirectScheduleDecoder : ScheduleDecoder<Schedule> {
+  public class DirectScheduleDecoder : ScheduleDecoder<Schedule>, IDirectScheduleOperator {
     [StorableConstructor]
     protected DirectScheduleDecoder(StorableConstructorFlag _) : base(_) { }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/DirectScheduleEncoding.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/DirectScheduleEncoding.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/DirectScheduleEncoding.cs	(revision 17461)
@@ -31,4 +31,5 @@
 
 namespace HeuristicLab.Encodings.ScheduleEncoding {
+  [Item("Direct Schedule Encoding", "Encodes a solution by directly assigning start and end types to the tasks.")]
   [StorableType("BB1BD851-3E77-4357-942C-EAF5BE6760B4")]
   public sealed class DirectScheduleEncoding : ScheduleEncoding<Schedule> {
@@ -41,5 +42,5 @@
 
     public DirectScheduleEncoding()
-      : base() {
+      : base("Schedule") {
       SolutionCreator = new DirectScheduleRandomCreator();
       Decoder = new DirectScheduleDecoder();
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/DirectScheduleRandomCreator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/DirectScheduleRandomCreator.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/DirectScheduleRandomCreator.cs	(revision 17461)
@@ -54,5 +54,5 @@
 
 
-    public static Schedule Apply(PWREncoding pwr, ItemList<Job> jobData) {
+    public static Schedule Apply(PWR pwr, ItemList<Job> jobData) {
       var resultingSchedule = new Schedule(jobData[0].Tasks.Count);
       foreach (int jobNr in pwr.PermutationWithRepetition) {
@@ -70,5 +70,5 @@
     protected override Schedule CreateSolution() {
       var jobData = (ItemList<Job>)JobDataParameter.ActualValue.Clone();
-      var pwrEncoding = new PWREncoding(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value,
+      var pwrEncoding = new PWR(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value,
         RandomParameter.ActualValue);
       return Apply(pwrEncoding, jobData);
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Schedule.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Schedule.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Schedule.cs	(revision 17461)
@@ -31,5 +31,5 @@
   [Item("Schedule", "Represents the general solution for scheduling problems.")]
   [StorableType("EA6D14A3-7FA6-4B4B-B7F6-40B42657D398")]
-  public class Schedule : NamedItem, ISchedule {
+  public class Schedule : NamedItem, IScheduleSolution {
 
     #region Properties
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleManipulator.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleManipulator.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleManipulator.cs	(revision 17461)
@@ -32,6 +32,6 @@
   public abstract class ScheduleManipulator : InstrumentedOperator, IScheduleManipulator, IStochasticOperator {
 
-    public ILookupParameter<ISchedule> ScheduleParameter {
-      get { return (ILookupParameter<ISchedule>)Parameters["Schedule"]; }
+    public ILookupParameter<IScheduleSolution> ScheduleParameter {
+      get { return (ILookupParameter<IScheduleSolution>)Parameters["Schedule"]; }
     }
 
@@ -45,5 +45,5 @@
     public ScheduleManipulator()
       : base() {
-      Parameters.Add(new LookupParameter<ISchedule>("Schedule", "The scheduling solution to be manipulated."));
+      Parameters.Add(new LookupParameter<IScheduleSolution>("Schedule", "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: /branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/OptionalConstrainedValueParameter.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/OptionalConstrainedValueParameter.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/OptionalConstrainedValueParameter.cs	(revision 17461)
@@ -21,5 +21,7 @@
 
 using System;
+using System.Collections.Generic;
 using System.Drawing;
+using System.Linq;
 using HEAL.Attic;
 using HeuristicLab.Collections;
@@ -168,4 +170,9 @@
     #endregion
 
+    public void Populate(IEnumerable<IItem> items) {
+      ValidValues.Clear();
+      ValidValues.UnionWith(items.OfType<T>());
+    }
+
     [StorableHook(HookType.AfterDeserialization)]
     private void AfterDeserialization() {
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj	(revision 17461)
@@ -116,5 +116,7 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="JobShopSchedulingProblemView.cs" />
+    <Compile Include="JobShopSchedulingProblemView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Include="JobShopSchedulingProblemView.Designer.cs">
       <DependentUpon>JobShopSchedulingProblemView.cs</DependentUpon>
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.cs	(revision 17461)
@@ -20,105 +20,105 @@
 #endregion
 
-//using System;
-//using System.Windows.Forms;
-//using HeuristicLab.Collections;
-//using HeuristicLab.Encodings.ScheduleEncoding;
-//using HeuristicLab.MainForm;
-//using HeuristicLab.Optimization.Views;
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Collections;
+using HeuristicLab.Encodings.ScheduleEncoding;
+using HeuristicLab.MainForm;
+using HeuristicLab.Optimization.Views;
 
-//namespace HeuristicLab.Problems.Scheduling.Views {
-//  [View("JobShop Scheduling Problem View")]
-//  [Content(typeof(JobShopSchedulingProblem), true)]
-//  public partial class JobShopSchedulingProblemView : ProblemView {
+namespace HeuristicLab.Problems.Scheduling.Views {
+  [View("JobShop Scheduling Problem View")]
+  [Content(typeof(JobShopSchedulingProblem), true)]
+  public partial class JobShopSchedulingProblemView : ProblemView {
 
-//    public new JobShopSchedulingProblem Content {
-//      get { return (JobShopSchedulingProblem)base.Content; }
-//      set { base.Content = value; }
-//    }
+    public new JobShopSchedulingProblem Content {
+      get { return (JobShopSchedulingProblem)base.Content; }
+      set { base.Content = value; }
+    }
 
-//    public JobShopSchedulingProblemView() {
-//      InitializeComponent();
-//      Controls.Remove(parameterCollectionView);
-//      parameterCollectionView.Dock = DockStyle.Fill;
-//      problemTabPage.Controls.Add(parameterCollectionView);
-//    }
+    public JobShopSchedulingProblemView() {
+      InitializeComponent();
+      Controls.Remove(parameterCollectionView);
+      parameterCollectionView.Dock = DockStyle.Fill;
+      problemTabPage.Controls.Add(parameterCollectionView);
+    }
 
-//    protected override void OnContentChanged() {
-//      base.OnContentChanged();
-//      FillGanttChart();
-//    }
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      FillGanttChart();
+    }
 
-//    protected override void DeregisterContentEvents() {
-//      Content.JobDataParameter.ValueChanged -= JobDataParameterOnValueChanged;
-//      Content.JobData.ItemsAdded -= JobsOnChanged;
-//      Content.JobData.ItemsRemoved -= JobsOnRemoved;
-//      Content.JobData.ItemsReplaced -= JobsOnChanged;
-//      Content.JobData.CollectionReset -= JobsOnChanged;
-//      foreach (var job in Content.JobData) {
-//        job.TasksChanged -= JobOnTasksChanged;
-//      }
-//      base.DeregisterContentEvents();
-//    }
-//    protected override void RegisterContentEvents() {
-//      base.RegisterContentEvents();
-//      Content.JobDataParameter.ValueChanged += JobDataParameterOnValueChanged;
-//      Content.JobData.ItemsAdded += JobsOnChanged;
-//      Content.JobData.ItemsRemoved += JobsOnRemoved;
-//      Content.JobData.ItemsReplaced += JobsOnChanged;
-//      Content.JobData.CollectionReset += JobsOnChanged;
-//      foreach (var job in Content.JobData) {
-//        job.TasksChanged += JobOnTasksChanged;
-//      }
-//    }
+    protected override void DeregisterContentEvents() {
+      Content.JobDataParameter.ValueChanged -= JobDataParameterOnValueChanged;
+      Content.JobData.ItemsAdded -= JobsOnChanged;
+      Content.JobData.ItemsRemoved -= JobsOnRemoved;
+      Content.JobData.ItemsReplaced -= JobsOnChanged;
+      Content.JobData.CollectionReset -= JobsOnChanged;
+      foreach (var job in Content.JobData) {
+        job.TasksChanged -= JobOnTasksChanged;
+      }
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.JobDataParameter.ValueChanged += JobDataParameterOnValueChanged;
+      Content.JobData.ItemsAdded += JobsOnChanged;
+      Content.JobData.ItemsRemoved += JobsOnRemoved;
+      Content.JobData.ItemsReplaced += JobsOnChanged;
+      Content.JobData.CollectionReset += JobsOnChanged;
+      foreach (var job in Content.JobData) {
+        job.TasksChanged += JobOnTasksChanged;
+      }
+    }
 
-//    private void JobsOnChanged(object sender, CollectionItemsChangedEventArgs<IndexedItem<Job>> e) {
-//      foreach (var job in e.OldItems)
-//        job.Value.TasksChanged -= JobOnTasksChanged;
-//      foreach (var job in e.Items)
-//        job.Value.TasksChanged += JobOnTasksChanged;
-//      FillGanttChart();
-//    }
+    private void JobsOnChanged(object sender, CollectionItemsChangedEventArgs<IndexedItem<Job>> e) {
+      foreach (var job in e.OldItems)
+        job.Value.TasksChanged -= JobOnTasksChanged;
+      foreach (var job in e.Items)
+        job.Value.TasksChanged += JobOnTasksChanged;
+      FillGanttChart();
+    }
 
-//    private void JobsOnRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<Job>> e) {
-//      foreach (var job in e.Items)
-//        job.Value.TasksChanged -= JobOnTasksChanged;
-//      FillGanttChart();
-//    }
+    private void JobsOnRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<Job>> e) {
+      foreach (var job in e.Items)
+        job.Value.TasksChanged -= JobOnTasksChanged;
+      FillGanttChart();
+    }
 
-//    private void JobDataParameterOnValueChanged(object sender, EventArgs e) {
-//      Content.JobData.ItemsAdded += JobsOnChanged;
-//      Content.JobData.ItemsRemoved += JobsOnRemoved;
-//      Content.JobData.ItemsReplaced += JobsOnChanged;
-//      Content.JobData.CollectionReset += JobsOnChanged;
-//      foreach (var job in Content.JobData) {
-//        job.TasksChanged += JobOnTasksChanged;
-//      }
-//      FillGanttChart();
-//    }
+    private void JobDataParameterOnValueChanged(object sender, EventArgs e) {
+      Content.JobData.ItemsAdded += JobsOnChanged;
+      Content.JobData.ItemsRemoved += JobsOnRemoved;
+      Content.JobData.ItemsReplaced += JobsOnChanged;
+      Content.JobData.CollectionReset += JobsOnChanged;
+      foreach (var job in Content.JobData) {
+        job.TasksChanged += JobOnTasksChanged;
+      }
+      FillGanttChart();
+    }
 
-//    private void JobOnTasksChanged(object sender, EventArgs e) {
-//      FillGanttChart();
-//    }
+    private void JobOnTasksChanged(object sender, EventArgs e) {
+      FillGanttChart();
+    }
 
-//    private void FillGanttChart() {
-//      ganttChart.Reset();
-//      if (Content == null) return;
-//      int jobCount = 0;
-//      foreach (var j in Content.JobData) {
-//        double lastEndTime = 0;
-//        foreach (var t in Content.JobData[jobCount].Tasks) {
-//          int categoryNr = t.JobNr;
-//          string categoryName = "Job" + categoryNr;
-//          ganttChart.AddData(categoryName,
-//            categoryNr,
-//            t.TaskNr,
-//            lastEndTime + 1,
-//            lastEndTime + t.Duration,
-//            "Job" + t.JobNr + " - " + "Task#" + t.TaskNr);
-//          lastEndTime += t.Duration;
-//        }
-//        jobCount++;
-//      }
-//    }
-//  }
-//}
+    private void FillGanttChart() {
+      ganttChart.Reset();
+      if (Content == null) return;
+      int jobCount = 0;
+      foreach (var j in Content.JobData) {
+        double lastEndTime = 0;
+        foreach (var t in Content.JobData[jobCount].Tasks) {
+          int categoryNr = t.JobNr;
+          string categoryName = "Job" + categoryNr;
+          ganttChart.AddData(categoryName,
+            categoryNr,
+            t.TaskNr,
+            lastEndTime + 1,
+            lastEndTime + t.Duration,
+            "Job" + t.JobNr + " - " + "Task#" + t.TaskNr);
+          lastEndTime += t.Duration;
+        }
+        jobCount++;
+      }
+    }
+  }
+}
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj	(revision 17461)
@@ -112,18 +112,9 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="Analyzers\BestSchedulingSolutionAnalyzer.cs" />
-    <Compile Include="Analyzers\SchedulingAnalyzer.cs" />
-    <Compile Include="Evaluators\MeanTardinessEvaluator.cs" />
-    <Compile Include="Evaluators\MakespanEvaluator.cs" />
-    <Compile Include="Evaluators\ScheduleEvaluator.cs" />
-    <Compile Include="Interfaces\IJSSPOperator.cs" />
-    <Compile Include="Interfaces\IScheduleEvaluator.cs" />
-    <Compile Include="Interfaces\ISchedulingEvaluator.cs" />
-    <Compile Include="JobShopSchedulingProblem new.cs" />
+    <Compile Include="Objectives\MeanTardiness.cs" />
+    <Compile Include="Objectives\Makespan.cs" />
     <Compile Include="JobShopSchedulingProblem.cs" />
-    <Compile Include="Evaluators\SchedulingEvaluator.cs" />
     <Compile Include="Plugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="SchedulingProblem.cs" />
   </ItemGroup>
   <ItemGroup>
Index: anches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem new.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem new.cs	(revision 17460)
+++ 	(revision )
@@ -1,329 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2015 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.Drawing;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Encodings.PermutationEncoding;
-using HeuristicLab.Encodings.ScheduleEncoding;
-using HeuristicLab.Optimization;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.Instances;
-
-namespace HeuristicLab.Problems.Scheduling {
-  [Item("Job Shop Scheduling Problem (JSSP) New", "Represents a standard Job Shop Scheduling Problem")]
-  [Creatable(CreatableAttribute.Categories.CombinatorialProblems, Priority = 120)]
-  [StorableClass]
-  public sealed class JobShopSchedulingProblemNew : SingleObjectiveProblem<IScheduleEncoding, ISchedule>, IProblemInstanceConsumer<JSSPData>, IProblemInstanceExporter<JSSPData>, IStorableContent {
-    #region Default Instance
-    private static readonly JSSPData DefaultInstance = new JSSPData() {
-      Jobs = 10,
-      Resources = 10,
-      BestKnownQuality = 930,
-      ProcessingTimes = new double[,] {
-          { 29, 78,  9, 36, 49, 11, 62, 56, 44, 21 },
-          { 43, 90, 75, 11, 69, 28, 46, 46, 72, 30 },
-          { 91, 85, 39, 74, 90, 10, 12, 89, 45, 33 },
-          { 81, 95, 71, 99,  9, 52, 85, 98, 22, 43 },
-          { 14,  6, 22, 61, 26, 69, 21, 49, 72, 53 },
-          { 84,  2, 52, 95, 48, 72, 47, 65,  6, 25 },
-          { 46, 37, 61, 13, 32, 21, 32, 89, 30, 55 },
-          { 31, 86, 46, 74, 32, 88, 19, 48, 36, 79 },
-          { 76, 69, 76, 51, 85, 11, 40, 89, 26, 74 },
-          { 85, 13, 61,  7, 64, 76, 47, 52, 90, 45 }
-        },
-      Demands = new int[,] {
-          { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 },
-          { 0, 2, 4, 9, 3, 1, 6, 5, 7, 8 },
-          { 1, 0, 3, 2, 8, 5, 7, 6, 9, 4 },
-          { 1, 2, 0, 4, 6, 8, 7, 3, 9, 5 },
-          { 2, 0, 1, 5, 3, 4, 8, 7, 9, 6 },
-          { 2, 1, 5, 3, 8, 9, 0, 6, 4, 7 },
-          { 1, 0, 3, 2, 6, 5, 9, 8, 7, 4 },
-          { 2, 0, 1, 5, 4, 6, 8, 9, 7, 3 },
-          { 0, 1, 3, 5, 2, 9, 6, 7, 4, 8 },
-          { 1, 0, 2, 6, 8, 9, 5, 3, 4, 7 }
-        }
-    };
-    #endregion
-
-    public override Image ItemImage {
-      get { return HeuristicLab.Common.Resources.VSImageLibrary.Type; }
-    }
-
-    //TODO change to property of evaluator
-    public override bool Maximization {
-      get { return false; }
-    }
-
-
-    #region Parameter Properties
-    public IFixedValueParameter<ItemList<Job>> JobDataParameter {
-      get { return (IFixedValueParameter<ItemList<Job>>)Parameters["JobData"]; }
-    }
-    public OptionalValueParameter<Schedule> BestKnownSolutionParameter {
-      get { return (OptionalValueParameter<Schedule>)Parameters["BestKnownSolution"]; }
-    }
-
-    public IFixedValueParameter<IntValue> JobsParameter {
-      get { return (IFixedValueParameter<IntValue>)Parameters["Jobs"]; }
-    }
-    public IFixedValueParameter<IntValue> ResourcesParameter {
-      get { return (IFixedValueParameter<IntValue>)Parameters["Resources"]; }
-    }
-    #endregion
-
-    #region Properties
-
-    public ItemList<Job> JobData {
-      get { return JobDataParameter.Value; }
-    }
-    public Schedule BestKnownSolution {
-      get { return BestKnownSolutionParameter.Value; }
-      set { BestKnownSolutionParameter.Value = value; }
-    }
-    public int Jobs {
-      get { return JobsParameter.Value.Value; }
-      set { JobsParameter.Value.Value = value; }
-    }
-    public int Resources {
-      get { return ResourcesParameter.Value.Value; }
-      set { ResourcesParameter.Value.Value = value; }
-    }
-    #endregion
-
-    [StorableConstructor]
-    private JobShopSchedulingProblemNew(bool deserializing) : base(deserializing) { }
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      RegisterEventHandlers();
-    }
-
-    private JobShopSchedulingProblemNew(JobShopSchedulingProblemNew original, Cloner cloner)
-      : base(original, cloner) {
-      RegisterEventHandlers();
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new JobShopSchedulingProblemNew(this, cloner);
-    }
-
-    public JobShopSchedulingProblemNew()
-      : base() {
-      Parameters.Add(new FixedValueParameter<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()));
-
-      Encoding = new DirectScheduleEncoding();
-
-      InitializeOperators();
-      Load(DefaultInstance);
-      RegisterEventHandlers();
-    }
-
-    public override double Evaluate(ISchedule solution, IRandom random) {
-      var schedule = Encoding.Decode(solution, JobData);
-      return MakespanEvaluator.GetMakespan(schedule);
-    }
-
-    protected override void OnEncodingChanged() {
-      base.OnEncodingChanged();
-
-      Encoding.ResourcesParameter = ResourcesParameter;
-      Encoding.JobsParameter = JobsParameter;
-      Encoding.JobDataParameter = JobDataParameter;
-    }
-
-
-    private void RegisterEventHandlers() {
-      //ScheduleEvaluatorParameter.ValueChanged += ScheduleEvaluatorParameter_ValueChanged;
-      //ScheduleEvaluator.QualityParameter.ActualNameChanged += ScheduleEvaluator_QualityParameter_ActualNameChanged;
-      //SolutionCreator.ScheduleParameter.ActualNameChanged += SolutionCreator_SchedulingEncodingParameter_ActualNameChanged;
-      //ScheduleDecoderParameter.ValueChanged += ScheduleDecoderParameter_ValueChanged;
-      //if (ScheduleDecoder != null) ScheduleDecoder.ScheduleParameter.ActualNameChanged += ScheduleDecoder_ScheduleParameter_ActualNameChanged;
-    }
-
-    #region Events
-    //protected override void OnSolutionCreatorChanged() {
-    //SolutionCreator.ScheduleParameter.ActualNameChanged += SolutionCreator_SchedulingEncodingParameter_ActualNameChanged;
-    //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 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
-
-    #region Helpers
-    private void InitializeOperators() {
-      //ApplyEncoding();
-      Operators.Add(new BestSchedulingSolutionAnalyzer());
-      ParameterizeOperators();
-    }
-
-    private void ApplyEncoding() {
-      //if (SolutionCreator.GetType() == typeof(JSMRandomCreator)) {
-      //  Operators.AddRange(ApplicationManager.Manager.GetInstances<IJSMOperator>());
-      //  ScheduleDecoder = new JSMDecoder();
-      //} else if (SolutionCreator.GetType() == typeof(PRVRandomCreator)) {
-      //  Operators.AddRange(ApplicationManager.Manager.GetInstances<IPRVOperator>());
-      //  ScheduleDecoder = new PRVDecoder();
-      //} else if (SolutionCreator.GetType() == typeof(PWRRandomCreator)) {
-      //  Operators.AddRange(ApplicationManager.Manager.GetInstances<IPWROperator>());
-      //  ScheduleDecoder = new PWRDecoder();
-      //} else if (SolutionCreator.GetType() == typeof(DirectScheduleRandomCreator)) {
-      //  Operators.AddRange(ApplicationManager.Manager.GetInstances<IDirectScheduleOperator>());
-      //  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.ScheduleParameter.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.ScheduleParameter.ActualName;
-      //  ScheduleEvaluator.ScheduleParameter.Hidden = true;
-      //} else {
-      //  ScheduleEvaluator.ScheduleParameter.ActualName = ScheduleEvaluator.ScheduleParameter.Name;
-      //  ScheduleEvaluator.ScheduleParameter.Hidden = false;
-      //}
-
-      //foreach (var op in Operators.OfType<IScheduleManipulator>()) {
-      //  op.ScheduleParameter.ActualName = SolutionCreator.ScheduleParameter.ActualName;
-      //  op.ScheduleParameter.Hidden = true;
-      //}
-
-      //foreach (var op in Operators.OfType<IScheduleCrossover>()) {
-      //  op.ChildParameter.ActualName = SolutionCreator.ScheduleParameter.ActualName;
-      //  op.ChildParameter.Hidden = true;
-      //  op.ParentsParameter.ActualName = SolutionCreator.ScheduleParameter.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).ScheduleParameter.ActualName;
-      //    op.ScheduleParameter.Hidden = true;
-      //  } else {
-      //    op.ScheduleParameter.ActualName = op.ScheduleParameter.Name;
-      //    op.ScheduleParameter.Hidden = false;
-      //  }
-      //}
-    }
-    #endregion
-
-    #region Problem Instance Handling
-    public void Load(JSSPData data) {
-      var jobData = new ItemList<Job>(data.Jobs);
-      for (int j = 0; j < data.Jobs; j++) {
-        var job = new Job(j, data.DueDates != null ? data.DueDates[j] : double.MaxValue);
-        for (int t = 0; t < data.Resources; t++) {
-          job.Tasks.Add(new Task(t, data.Demands[j, t], j, data.ProcessingTimes[j, t]));
-        }
-        jobData.Add(job);
-      }
-
-      BestKnownQuality = data.BestKnownQuality ?? double.NaN;
-      if (data.BestKnownSchedule != null) {
-        var enc = new JSMEncoding(0);
-        for (int i = 0; i < data.Resources; i++) {
-          enc.JobSequenceMatrix.Add(new Permutation(PermutationTypes.Absolute, new int[data.Jobs]));
-          for (int j = 0; j < data.Jobs; j++) {
-            enc.JobSequenceMatrix[i][j] = data.BestKnownSchedule[i, j];
-          }
-        }
-        BestKnownSolution = JSMDecoder.Decode(enc, jobData, JSMDecodingErrorPolicy.RandomPolicy, JSMForcingStrategy.SwapForcing);
-        //if (ScheduleEvaluator is MeanTardinessEvaluator)
-        //  BestKnownQuality = MeanTardinessEvaluator.GetMeanTardiness(BestKnownSolution, jobData);
-        //else if (ScheduleEvaluator is MakespanEvaluator)
-        //  BestKnownQuality = MakespanEvaluator.GetMakespan(BestKnownSolution);
-      }
-
-      JobData.Clear();
-      JobData.AddRange(jobData);
-      Jobs = data.Jobs;
-      Resources = data.Resources;
-    }
-
-    public JSSPData Export() {
-      var result = new JSSPData {
-        Name = Name,
-        Description = Description,
-        Jobs = Jobs,
-        Resources = Resources,
-        ProcessingTimes = new double[Jobs, Resources],
-        Demands = new int[Jobs, Resources],
-        DueDates = new double[Jobs]
-      };
-
-      foreach (var job in JobData) {
-        var counter = 0;
-        result.DueDates[job.Index] = job.DueDate;
-        foreach (var task in job.Tasks) {
-          result.ProcessingTimes[task.JobNr, counter] = task.Duration;
-          result.Demands[task.JobNr, counter] = task.ResourceNr;
-          counter++;
-        }
-      }
-      return result;
-    }
-    #endregion
-
-  }
-}
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs	(revision 17460)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs	(revision 17461)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -21,6 +21,9 @@
 
 using System;
+using System.ComponentModel;
 using System.Drawing;
 using System.Linq;
+using System.Threading;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -28,21 +31,17 @@
 using HeuristicLab.Encodings.PermutationEncoding;
 using HeuristicLab.Encodings.ScheduleEncoding;
-using HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix;
-using HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition;
-using HeuristicLab.Encodings.ScheduleEncoding.PriorityRulesVector;
+using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
-using HEAL.Attic;
-using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.Problems.Instances;
 
 namespace HeuristicLab.Problems.Scheduling {
+  public enum JSSPObjective { Makespan, Tardiness }
+
   [Item("Job Shop Scheduling Problem (JSSP)", "Represents a standard Job Shop Scheduling Problem")]
   [Creatable(CreatableAttribute.Categories.CombinatorialProblems, Priority = 120)]
-  [StorableType("BB12CCEC-A109-4A26-A1C7-5A0703AB7687")]
-  public sealed class JobShopSchedulingProblem : SchedulingProblem, IProblemInstanceConsumer<JSSPData>, IProblemInstanceExporter<JSSPData>, IStorableContent {
+  [StorableType("d6c72bd1-c6cc-4efb-9cc5-b73bb3845799")]
+  public sealed class JobShopSchedulingProblem : SingleObjectiveProblem<IScheduleEncoding, IScheduleSolution>, IProblemInstanceConsumer<JSSPData>, IProblemInstanceExporter<JSSPData>, IStorableContent {
     #region Default Instance
     private static readonly JSSPData DefaultInstance = new JSSPData() {
-      Name = "Job Shop Scheduling Problem (JSSP)",
-      Description = "The default instance of the JSSP problem in HeuristicLab",
       Jobs = 10,
       Resources = 10,
@@ -75,29 +74,14 @@
     #endregion
 
-    public string Filename { get; set; }
     public override Image ItemImage {
       get { return HeuristicLab.Common.Resources.VSImageLibrary.Type; }
     }
-
+    
     #region Parameter Properties
-    public IValueParameter<ItemList<Job>> JobDataParameter {
-      get { return (IValueParameter<ItemList<Job>>)Parameters["JobData"]; }
-    }
-    public OptionalValueParameter<Schedule> BestKnownSolutionParameter {
-      get { return (OptionalValueParameter<Schedule>)Parameters["BestKnownSolution"]; }
-    }
-
-    public IFixedValueParameter<IntValue> JobsParameter {
-      get { return (IFixedValueParameter<IntValue>)Parameters["Jobs"]; }
-    }
-    public IFixedValueParameter<IntValue> ResourcesParameter {
-      get { return (IFixedValueParameter<IntValue>)Parameters["Resources"]; }
-    }
-    public IValueParameter<IScheduleEvaluator> ScheduleEvaluatorParameter {
-      get { return (IValueParameter<IScheduleEvaluator>)Parameters["ScheduleEvaluator"]; }
-    }
-    public OptionalValueParameter<IScheduleDecoder> ScheduleDecoderParameter {
-      get { return (OptionalValueParameter<IScheduleDecoder>)Parameters["ScheduleDecoder"]; }
-    }
+    [Storable] public IValueParameter<ItemList<Job>> JobDataParameter { get; private set; }
+    [Storable] public OptionalValueParameter<Schedule> BestKnownSolutionParameter { get; private set; }
+    [Storable] public IFixedValueParameter<IntValue> JobsParameter { get; private set; }
+    [Storable] public IFixedValueParameter<IntValue> ResourcesParameter { get; private set; }
+    [Storable] public IFixedValueParameter<EnumValue<JSSPObjective>> ObjectiveParameter { get; private set; }
     #endregion
 
@@ -119,11 +103,7 @@
       set { ResourcesParameter.Value.Value = value; }
     }
-    public IScheduleEvaluator ScheduleEvaluator {
-      get { return ScheduleEvaluatorParameter.Value; }
-      set { ScheduleEvaluatorParameter.Value = value; }
-    }
-    public IScheduleDecoder ScheduleDecoder {
-      get { return ScheduleDecoderParameter.Value; }
-      set { ScheduleDecoderParameter.Value = value; }
+    public JSSPObjective Objective {
+      get { return ObjectiveParameter.Value.Value; }
+      set { ObjectiveParameter.Value.Value = value; }
     }
     #endregion
@@ -131,31 +111,4 @@
     [StorableConstructor]
     private JobShopSchedulingProblem(StorableConstructorFlag _) : base(_) { }
-    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() {
@@ -163,41 +116,95 @@
     }
 
+    private JobShopSchedulingProblem(JobShopSchedulingProblem original, Cloner cloner)
+      : base(original, cloner) {
+      JobDataParameter = cloner.Clone(original.JobDataParameter);
+      BestKnownSolutionParameter = cloner.Clone(original.BestKnownSolutionParameter);
+      JobsParameter = cloner.Clone(original.JobsParameter);
+      ResourcesParameter = cloner.Clone(original.ResourcesParameter);
+      ObjectiveParameter = cloner.Clone(original.ObjectiveParameter);
+
+      RegisterEventHandlers();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JobShopSchedulingProblem(this, cloner);
+    }
+
+    public JobShopSchedulingProblem()
+      : base(new JobSequenceMatrixEncoding()) {
+      Parameters.Add(JobDataParameter = 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(BestKnownSolutionParameter = new OptionalValueParameter<Schedule>("BestKnownSolution", "The best known solution of this JSSP instance."));
+      Parameters.Add(JobsParameter = new FixedValueParameter<IntValue>("Jobs", "The number of jobs used in this JSSP instance.", new IntValue()));
+      Parameters.Add(ResourcesParameter = new FixedValueParameter<IntValue>("Resources", "The number of resources used in this JSSP instance.", new IntValue()));
+      Parameters.Add(ObjectiveParameter = new FixedValueParameter<EnumValue<JSSPObjective>>("Objective", "The objective to use in the evaluation of a schedule.", new EnumValue<JSSPObjective>(JSSPObjective.Makespan)));
+      EncodingParameter.Hidden = false;
+
+      Encoding.ResourcesParameter = ResourcesParameter;
+      Encoding.JobsParameter = JobsParameter;
+      Encoding.JobDataParameter = JobDataParameter;
+
+      Load(DefaultInstance);
+      RegisterEventHandlers();
+    }
+
+    public override ISingleObjectiveEvaluationResult Evaluate(IScheduleSolution solution, IRandom random, CancellationToken cancellationToken) {
+      var schedule = Encoding.Decode(solution, JobData);
+      switch (Objective) {
+        case JSSPObjective.Makespan:
+          return new SingleObjectiveEvaluationResult(Makespan.Calculate(schedule));
+        case JSSPObjective.Tardiness:
+          return new SingleObjectiveEvaluationResult(MeanTardiness.Calculate(schedule, JobData));
+        default:
+          throw new InvalidOperationException("Objective " + Objective + " unknown");
+      }
+    }
+
+    public override void Analyze(IScheduleSolution[] solutions, double[] qualities, ResultCollection results, IRandom random) {
+      base.Analyze(solutions, qualities, results, random);
+
+      bool max = Maximization;
+
+      int i = -1;
+      if (!max)
+        i = qualities.Select((x, index) => new { index, x }).OrderBy(x => x.x).First().index;
+      else i = qualities.Select((x, index) => new { index, x }).OrderByDescending(x => x.x).First().index;
+
+      if (double.IsNaN(BestKnownQuality) ||
+          max && qualities[i] > BestKnownQuality ||
+          !max && qualities[i] < BestKnownQuality) {
+        BestKnownQuality = qualities[i];
+        BestKnownSolution = Encoding.Decode(solutions[i], JobData);
+      }
+      Schedule bestSolution;
+      if (results.TryGetValue("Best Scheduling Solution", out var result)) {
+        bestSolution = result.Value as Schedule;
+      } else bestSolution = null;
+
+      if (bestSolution == null || IsBetter(bestSolution.Quality, qualities[i]))
+        results.AddOrUpdateResult("Best Scheduling Solution", Encoding.Decode(solutions[i], JobData));
+    }
+
+    protected override void OnEncodingChanged() {
+      base.OnEncodingChanged();
+      Encoding.ResourcesParameter = ResourcesParameter;
+      Encoding.JobsParameter = JobsParameter;
+      Encoding.JobDataParameter = JobDataParameter;
+    }
+
+
     private void RegisterEventHandlers() {
-      ScheduleEvaluatorParameter.ValueChanged += ScheduleEvaluatorParameter_ValueChanged;
-      ScheduleEvaluator.QualityParameter.ActualNameChanged += ScheduleEvaluator_QualityParameter_ActualNameChanged;
-      SolutionCreator.ScheduleEncodingParameter.ActualNameChanged += SolutionCreator_SchedulingEncodingParameter_ActualNameChanged;
-      ScheduleDecoderParameter.ValueChanged += ScheduleDecoderParameter_ValueChanged;
-      if (ScheduleDecoder != null) ScheduleDecoder.ScheduleParameter.ActualNameChanged += ScheduleDecoder_ScheduleParameter_ActualNameChanged;
-    }
-
-    #region Events
-    protected override void OnSolutionCreatorChanged() {
-      base.OnSolutionCreatorChanged();
-      SolutionCreator.ScheduleEncodingParameter.ActualNameChanged += SolutionCreator_SchedulingEncodingParameter_ActualNameChanged;
-      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 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
+      JobDataParameter.ValueChanged += JobDataParameterOnValueChanged;
+      JobData.PropertyChanged += JobDataOnPropertyChanged;
+    }
+
+    private void JobDataParameterOnValueChanged(object sender, EventArgs e) {
+      JobData.PropertyChanged += JobDataOnPropertyChanged;
+      Jobs = JobData.Count;
+    }
+
+    private void JobDataOnPropertyChanged(object sender, PropertyChangedEventArgs e) {
+      if (e.PropertyName == nameof(JobData.Count)) {
+        Jobs = JobData.Count;
+      }
+    }
 
     #region Problem Instance Handling
@@ -212,24 +219,25 @@
       }
 
-      BestKnownQuality = data.BestKnownQuality.HasValue ? new DoubleValue(data.BestKnownQuality.Value) : null;
+      BestKnownQuality = data.BestKnownQuality ?? double.NaN;
       if (data.BestKnownSchedule != null) {
-        var enc = new JSMEncoding();
-        enc.JobSequenceMatrix = new ItemList<Permutation>(data.Resources);
+        var enc = new JSM(0);
         for (int i = 0; i < data.Resources; i++) {
-          enc.JobSequenceMatrix[i] = new Permutation(PermutationTypes.Absolute, new int[data.Jobs]);
+          enc.JobSequenceMatrix.Add(new Permutation(PermutationTypes.Absolute, new int[data.Jobs]));
           for (int j = 0; j < data.Jobs; j++) {
             enc.JobSequenceMatrix[i][j] = data.BestKnownSchedule[i, j];
           }
         }
-        BestKnownSolution = new JSMDecoder().CreateScheduleFromEncoding(enc, jobData);
-        if (ScheduleEvaluator is MeanTardinessEvaluator)
-          BestKnownQuality = new DoubleValue(MeanTardinessEvaluator.GetMeanTardiness(BestKnownSolution, jobData));
-        else if (ScheduleEvaluator is MakespanEvaluator)
-          BestKnownQuality = new DoubleValue(MakespanEvaluator.GetMakespan(BestKnownSolution));
-      }
-      Name = data.Name;
-      Description = data.Description;
+        BestKnownSolution = JSMDecoder.Decode(enc, jobData, JSMDecodingErrorPolicy.RandomPolicy, JSMForcingStrategy.SwapForcing);
+        switch (Objective) {
+          case JSSPObjective.Makespan:
+            BestKnownQuality = Makespan.Calculate(BestKnownSolution);
+            break;
+          case JSSPObjective.Tardiness:
+            BestKnownQuality = MeanTardiness.Calculate(BestKnownSolution, jobData);
+            break;
+        }
+      }
+
       JobData = jobData;
-      Jobs = data.Jobs;
       Resources = data.Resources;
     }
@@ -259,79 +267,4 @@
     #endregion
 
-    #region Helpers
-    private void InitializeOperators() {
-      Operators.Clear();
-      ApplyEncoding();
-      Operators.Add(new BestSchedulingSolutionAnalyzer());
-      ParameterizeOperators();
-    }
-
-    private void ApplyEncoding() {
-      if (SolutionCreator.GetType() == typeof(JSMRandomCreator)) {
-        Operators.AddRange(ApplicationManager.Manager.GetInstances<IJSMOperator>());
-        ScheduleDecoder = new JSMDecoder();
-      } else if (SolutionCreator.GetType() == typeof(PRVRandomCreator)) {
-        Operators.AddRange(ApplicationManager.Manager.GetInstances<IPRVOperator>());
-        ScheduleDecoder = new PRVDecoder();
-      } else if (SolutionCreator.GetType() == typeof(PWRRandomCreator)) {
-        Operators.AddRange(ApplicationManager.Manager.GetInstances<IPWROperator>());
-        ScheduleDecoder = new PWRDecoder();
-      } else if (SolutionCreator.GetType() == typeof(DirectScheduleRandomCreator)) {
-        Operators.AddRange(ApplicationManager.Manager.GetInstances<IDirectScheduleOperator>());
-        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;
-        }
-      }
-    }
-    #endregion
-
   }
 }
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Objectives/Makespan.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Objectives/Makespan.cs	(revision 17461)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Objectives/Makespan.cs	(revision 17461)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 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.Linq;
+using HeuristicLab.Encodings.ScheduleEncoding;
+
+namespace HeuristicLab.Problems.Scheduling {
+  public static class Makespan {
+    public static double Calculate(Schedule schedule) {
+      return schedule.Resources.Select(r => r.TotalDuration).Max();
+    }
+  }
+}
Index: /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Objectives/MeanTardiness.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Objectives/MeanTardiness.cs	(revision 17461)
+++ /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Objectives/MeanTardiness.cs	(revision 17461)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 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.Linq;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.ScheduleEncoding;
+
+namespace HeuristicLab.Problems.Scheduling {
+  public static class MeanTardiness {
+    public static double Calculate(Schedule schedule, ItemList<Job> jobData) {
+      return schedule.Resources
+        .Select(r => Math.Max(0, r.Tasks.Last().EndTime - jobData[r.Tasks.Last().JobNr].DueDate))
+        .Average();
+    }
+  }
+}
Index: anches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/SchedulingProblem.cs
===================================================================
--- /branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/SchedulingProblem.cs	(revision 17460)
+++ 	(revision )
@@ -1,37 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 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.Optimization;
-using HEAL.Attic;
-
-namespace HeuristicLab.Problems.Scheduling {
-  [Item("SchedulingProblem", "Abstract class that represents a Scheduling Problem")]
-  [StorableType("D3EFE88B-7725-40DF-861F-37B17314D3F5")]
-  public abstract class SchedulingProblem : SingleObjectiveHeuristicOptimizationProblem<ISchedulingEvaluator, IScheduleCreator> {
-    [StorableConstructor]
-    protected SchedulingProblem(StorableConstructorFlag _) : base(_) { }
-    protected SchedulingProblem(SchedulingProblem original, Cloner cloner) : base(original, cloner) { }
-    protected SchedulingProblem(ISchedulingEvaluator evaluator, IScheduleCreator creator) : base(evaluator, creator) { }
-  }
-}
