Index: /branches/Scheduling/HeuristicLab 3.3.sln
===================================================================
--- /branches/Scheduling/HeuristicLab 3.3.sln	(revision 6405)
+++ /branches/Scheduling/HeuristicLab 3.3.sln	(revision 6406)
@@ -401,7 +401,9 @@
 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
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Encodings.SchedulingEncoding-3.3", "HeuristicLab.Encodings.SchedulingEncoding\3.3\HeuristicLab.Encodings.SchedulingEncoding-3.3.csproj", "{17F3EF80-B2C3-4B8D-A4D5-BE9CE3BA2606}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Encodings.SchedulingEncoding.Views-3.3", "HeuristicLab.Encodings.SchedulingEncoding.Views\3.3\HeuristicLab.Encodings.SchedulingEncoding.Views-3.3.csproj", "{0C378762-D5DB-488A-8931-2BA42B1B7CBF}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Encodings.ScheduleEncoding-3.3", "HeuristicLab.Encodings.ScheduleEncoding\3.3\HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj", "{17F3EF80-B2C3-4B8D-A4D5-BE9CE3BA2606}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Encodings.ScheduleEncoding.Views-3.3", "HeuristicLab.Encodings.ScheduleEncoding.Views\3.3\HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj", "{0C378762-D5DB-488A-8931-2BA42B1B7CBF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Encodings.ScheduleEncoding-3.3.Tests", "HeuristicLab.Encodings.ScheduleEncoding.Tests\HeuristicLab.Encodings.ScheduleEncoding-3.3.Tests.csproj", "{E4B03572-6794-4AA9-9364-666973248191}"
 EndProject
 Global
@@ -1890,4 +1892,12 @@
 		{0C378762-D5DB-488A-8931-2BA42B1B7CBF}.Release|x64.ActiveCfg = Release|Any CPU
 		{0C378762-D5DB-488A-8931-2BA42B1B7CBF}.Release|x86.ActiveCfg = Release|Any CPU
+		{E4B03572-6794-4AA9-9364-666973248191}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E4B03572-6794-4AA9-9364-666973248191}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E4B03572-6794-4AA9-9364-666973248191}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{E4B03572-6794-4AA9-9364-666973248191}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{E4B03572-6794-4AA9-9364-666973248191}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E4B03572-6794-4AA9-9364-666973248191}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E4B03572-6794-4AA9-9364-666973248191}.Release|x64.ActiveCfg = Release|Any CPU
+		{E4B03572-6794-4AA9-9364-666973248191}.Release|x86.ActiveCfg = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: /branches/Scheduling/HeuristicLab.Analysis/3.3/Tests/HeuristicLab.Analysis.Tests-3.3.csproj
===================================================================
--- /branches/Scheduling/HeuristicLab.Analysis/3.3/Tests/HeuristicLab.Analysis.Tests-3.3.csproj	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Analysis/3.3/Tests/HeuristicLab.Analysis.Tests-3.3.csproj	(revision 6406)
@@ -99,4 +99,12 @@
   </PropertyGroup>
   <ItemGroup>
+    <ProjectReference Include="..\..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
       <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
@@ -111,4 +119,5 @@
       <Name>HeuristicLab.Data-3.3</Name>
     </ProjectReference>
+    <Reference Include="Microsoft.CSharp" />
     <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
     <Reference Include="System" />
@@ -116,4 +125,8 @@
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
     </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Xml" />
+    <Reference Include="System.Xml.Linq" />
   </ItemGroup>
   <ItemGroup>
@@ -127,4 +140,36 @@
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\..\..\HeuristicLab.Encodings.IntegerVectorEncoding\3.3\HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj">
+      <Project>{DDFB14DD-2A85-493C-A52D-E69729BBAEB0}</Project>
+      <Name>HeuristicLab.Encodings.IntegerVectorEncoding-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.Encodings.PermutationEncoding\3.3\HeuristicLab.Encodings.PermutationEncoding-3.3.csproj">
+      <Project>{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}</Project>
+      <Name>HeuristicLab.Encodings.PermutationEncoding-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.Encodings.ScheduleEncoding\3.3\HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj">
+      <Project>{17F3EF80-B2C3-4B8D-A4D5-BE9CE3BA2606}</Project>
+      <Name>HeuristicLab.Encodings.ScheduleEncoding-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
+      <Project>{23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE}</Project>
+      <Name>HeuristicLab.Operators-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
+      <Project>{56F9106A-079F-4C61-92F6-86A84C2D84B7}</Project>
+      <Name>HeuristicLab.Parameters-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.Analysis-3.3.csproj">
       <Project>{887425B4-4348-49ED-A457-B7D2C26DDBF9}</Project>
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3.Tests.csproj
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3.Tests.csproj	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/HeuristicLab.Encodings.ScheduleEncoding-3.3.Tests.csproj	(revision 6406)
@@ -0,0 +1,125 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>
+    </ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{E4B03572-6794-4AA9-9364-666973248191}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Encodings.ScheduleEncoding.Tests</RootNamespace>
+    <AssemblyName>HeuristicLab.Encodings.ScheduleEncoding-3.3.Tests</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Xml" />
+    <Reference Include="System.Xml.Linq" />
+  </ItemGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="JSMJOXCrossoverTest.cs" />
+    <Compile Include="JSMShiftChangeManipulatorTest.cs" />
+    <Compile Include="JSMSXXCrossoverTest.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="PWRGOXCrossoverTest.cs" />
+    <Compile Include="PWRPPXCrossoverTest.cs" />
+    <Compile Include="TestRandom.cs" />
+    <Compile Include="TestUtils.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
+      <Project>{BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937}</Project>
+      <Name>HeuristicLab.Data-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Encodings.IntegerVectorEncoding\3.3\HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj">
+      <Project>{DDFB14DD-2A85-493C-A52D-E69729BBAEB0}</Project>
+      <Name>HeuristicLab.Encodings.IntegerVectorEncoding-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Encodings.PermutationEncoding\3.3\HeuristicLab.Encodings.PermutationEncoding-3.3.csproj">
+      <Project>{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}</Project>
+      <Name>HeuristicLab.Encodings.PermutationEncoding-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Encodings.ScheduleEncoding\3.3\HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj">
+      <Project>{17F3EF80-B2C3-4B8D-A4D5-BE9CE3BA2606}</Project>
+      <Name>HeuristicLab.Encodings.ScheduleEncoding-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
+      <Project>{23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE}</Project>
+      <Name>HeuristicLab.Operators-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
+      <Project>{56F9106A-079F-4C61-92F6-86A84C2D84B7}</Project>
+      <Name>HeuristicLab.Parameters-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/JSMJOXCrossoverTest.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/JSMJOXCrossoverTest.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/JSMJOXCrossoverTest.cs	(revision 6406)
@@ -0,0 +1,84 @@
+﻿using HeuristicLab.Core;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.Tests {
+
+
+  /// <summary>
+  ///This is a test class for JSMJOXCrossoverTest and is intended
+  ///to contain all JSMJOXCrossoverTest Unit Tests
+  ///</summary>
+  [TestClass()]
+  public class JSMJOXCrossoverTest {
+
+
+    private TestContext testContextInstance;
+
+    /// <summary>
+    ///Gets or sets the test context which provides
+    ///information about and functionality for the current test run.
+    ///</summary>
+    public TestContext TestContext {
+      get {
+        return testContextInstance;
+      }
+      set {
+        testContextInstance = value;
+      }
+    }
+
+    #region Additional test attributes
+    // 
+    //You can use the following additional attributes as you write your tests:
+    //
+    //Use ClassInitialize to run code before running the first test in the class
+    //[ClassInitialize()]
+    //public static void MyClassInitialize(TestContext testContext)
+    //{
+    //}
+    //
+    //Use ClassCleanup to run code after all tests in a class have run
+    //[ClassCleanup()]
+    //public static void MyClassCleanup()
+    //{
+    //}
+    //
+    //Use TestInitialize to run code before running each test
+    //[TestInitialize()]
+    //public void MyTestInitialize()
+    //{
+    //}
+    //
+    //Use TestCleanup to run code after each test has run
+    //[TestCleanup()]
+    //public void MyTestCleanup()
+    //{
+    //}
+    //
+    #endregion
+
+
+    /// <summary>
+    ///A test for Apply
+    ///</summary>
+    [TestMethod()]
+    public void ApplyTest() {
+      IRandom random = new TestRandom(new int[] { 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1 }, null);
+      JSMEncoding p1 = TestUtils.CreateTestJSM1();
+      JSMEncoding p2 = TestUtils.CreateTestJSM2();
+      JSMEncoding expected = new JSMEncoding();
+      ItemList<Permutation> jsm = new ItemList<Permutation>();
+      for (int i = 0; i < 6; i++) {
+        jsm.Add(new Permutation(PermutationTypes.Absolute, new int[] { 5, 4, 3, 0, 1, 2 }));
+      }
+      expected.JobSequenceMatrix = jsm;
+
+      JSMEncoding actual;
+      actual = JSMJOXCrossover.Apply(random, p1, p2);
+
+      Assert.IsTrue(expected.Equals(actual));
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/JSMSXXCrossoverTest.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/JSMSXXCrossoverTest.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/JSMSXXCrossoverTest.cs	(revision 6406)
@@ -0,0 +1,84 @@
+﻿using HeuristicLab.Core;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.Tests {
+
+
+  /// <summary>
+  ///This is a test class for JSMSXXCrossoverTest and is intended
+  ///to contain all JSMSXXCrossoverTest Unit Tests
+  ///</summary>
+  [TestClass()]
+  public class JSMSXXCrossoverTest {
+
+
+    private TestContext testContextInstance;
+
+    /// <summary>
+    ///Gets or sets the test context which provides
+    ///information about and functionality for the current test run.
+    ///</summary>
+    public TestContext TestContext {
+      get {
+        return testContextInstance;
+      }
+      set {
+        testContextInstance = value;
+      }
+    }
+
+    #region Additional test attributes
+    // 
+    //You can use the following additional attributes as you write your tests:
+    //
+    //Use ClassInitialize to run code before running the first test in the class
+    //[ClassInitialize()]
+    //public static void MyClassInitialize(TestContext testContext)
+    //{
+    //}
+    //
+    //Use ClassCleanup to run code after all tests in a class have run
+    //[ClassCleanup()]
+    //public static void MyClassCleanup()
+    //{
+    //}
+    //
+    //Use TestInitialize to run code before running each test
+    //[TestInitialize()]
+    //public void MyTestInitialize()
+    //{
+    //}
+    //
+    //Use TestCleanup to run code after each test has run
+    //[TestCleanup()]
+    //public void MyTestCleanup()
+    //{
+    //}
+    //
+    #endregion
+
+
+    /// <summary>
+    ///A test for Apply
+    ///</summary>
+    [TestMethod()]
+    public void ApplyTest() {
+      IRandom random = new TestRandom(new int[] { 3 }, null);
+      JSMEncoding p1 = TestUtils.CreateTestJSM1();
+      JSMEncoding p2 = TestUtils.CreateTestJSM2();
+      JSMEncoding expected = new JSMEncoding();
+      ItemList<Permutation> jsm = new ItemList<Permutation>();
+      for (int i = 0; i < 6; i++) {
+        jsm.Add(new Permutation(PermutationTypes.Absolute, new int[] { 2, 1, 0, 3, 4, 5 }));
+      }
+      expected.JobSequenceMatrix = jsm;
+
+      JSMEncoding actual;
+      actual = JSMSXXCrossover.Apply(random, p1, p2);
+
+      Assert.IsTrue(expected.Equals(actual));
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/JSMShiftChangeManipulatorTest.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/JSMShiftChangeManipulatorTest.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/JSMShiftChangeManipulatorTest.cs	(revision 6406)
@@ -0,0 +1,82 @@
+﻿using HeuristicLab.Core;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.Tests {
+
+
+  /// <summary>
+  ///This is a test class for JSMShiftChangeManipulatorTest and is intended
+  ///to contain all JSMShiftChangeManipulatorTest Unit Tests
+  ///</summary>
+  [TestClass()]
+  public class JSMShiftChangeManipulatorTest {
+
+
+    private TestContext testContextInstance;
+
+    /// <summary>
+    ///Gets or sets the test context which provides
+    ///information about and functionality for the current test run.
+    ///</summary>
+    public TestContext TestContext {
+      get {
+        return testContextInstance;
+      }
+      set {
+        testContextInstance = value;
+      }
+    }
+
+    #region Additional test attributes
+    // 
+    //You can use the following additional attributes as you write your tests:
+    //
+    //Use ClassInitialize to run code before running the first test in the class
+    //[ClassInitialize()]
+    //public static void MyClassInitialize(TestContext testContext)
+    //{
+    //}
+    //
+    //Use ClassCleanup to run code after all tests in a class have run
+    //[ClassCleanup()]
+    //public static void MyClassCleanup()
+    //{
+    //}
+    //
+    //Use TestInitialize to run code before running each test
+    //[TestInitialize()]
+    //public void MyTestInitialize()
+    //{
+    //}
+    //
+    //Use TestCleanup to run code after each test has run
+    //[TestCleanup()]
+    //public void MyTestCleanup()
+    //{
+    //}
+    //
+    #endregion
+
+
+    /// <summary>
+    ///A test for Apply
+    ///</summary>
+    [TestMethod()]
+    public void ApplyTest() {
+      IRandom random = new TestRandom(new int[] { 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 }, null);
+      JSMEncoding individual = TestUtils.CreateTestJSM1();
+      JSMShiftChangeManipulator.Apply(random, individual);
+      JSMEncoding expected = new JSMEncoding();
+      ItemList<Permutation> jsm = new ItemList<Permutation>();
+      for (int i = 0; i < 3; i++) {
+        jsm.Add(new Permutation(PermutationTypes.Absolute, new int[] { 0, 1, 3, 2, 4, 5 }));
+        jsm.Add(new Permutation(PermutationTypes.Absolute, new int[] { 0, 1, 3, 4, 2, 5 }));
+      }
+      expected.JobSequenceMatrix = jsm;
+
+      Assert.IsTrue(individual.Equals(expected));
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/PWRGOXCrossoverTest.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/PWRGOXCrossoverTest.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/PWRGOXCrossoverTest.cs	(revision 6406)
@@ -0,0 +1,78 @@
+﻿using HeuristicLab.Core;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
+using HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.Tests {
+
+
+  /// <summary>
+  ///This is a test class for PWRGOXCrossoverTest and is intended
+  ///to contain all PWRGOXCrossoverTest Unit Tests
+  ///</summary>
+  [TestClass()]
+  public class PWRGOXCrossoverTest {
+
+
+    private TestContext testContextInstance;
+
+    /// <summary>
+    ///Gets or sets the test context which provides
+    ///information about and functionality for the current test run.
+    ///</summary>
+    public TestContext TestContext {
+      get {
+        return testContextInstance;
+      }
+      set {
+        testContextInstance = value;
+      }
+    }
+
+    #region Additional test attributes
+    // 
+    //You can use the following additional attributes as you write your tests:
+    //
+    //Use ClassInitialize to run code before running the first test in the class
+    //[ClassInitialize()]
+    //public static void MyClassInitialize(TestContext testContext)
+    //{
+    //}
+    //
+    //Use ClassCleanup to run code after all tests in a class have run
+    //[ClassCleanup()]
+    //public static void MyClassCleanup()
+    //{
+    //}
+    //
+    //Use TestInitialize to run code before running each test
+    //[TestInitialize()]
+    //public void MyTestInitialize()
+    //{
+    //}
+    //
+    //Use TestCleanup to run code after each test has run
+    //[TestCleanup()]
+    //public void MyTestCleanup()
+    //{
+    //}
+    //
+    #endregion
+
+
+    /// <summary>
+    ///A test for Apply
+    ///</summary>
+    [TestMethod()]
+    public void ApplyTest() {
+      IRandom random = new TestRandom(new int[] { 3 }, null);
+      PWREncoding parent1 = TestUtils.CreateTestPWR1();
+      PWREncoding parent2 = TestUtils.CreateTestPWR2();
+      PWREncoding expected = new PWREncoding();
+      expected.PermutationWithRepetition = new IntegerVector(new int[] { 1, 0, 1, 0, 2, 0, 1, 2, 2 });
+      PWREncoding actual;
+      actual = PWRGOXCrossover.Apply(random, parent1, parent2);
+      Assert.IsTrue(actual.Equals(expected));
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/PWRPPXCrossoverTest.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/PWRPPXCrossoverTest.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/PWRPPXCrossoverTest.cs	(revision 6406)
@@ -0,0 +1,78 @@
+﻿using HeuristicLab.Core;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
+using HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.Tests {
+
+
+  /// <summary>
+  ///This is a test class for PWRPPXCrossoverTest and is intended
+  ///to contain all PWRPPXCrossoverTest Unit Tests
+  ///</summary>
+  [TestClass()]
+  public class PWRPPXCrossoverTest {
+
+
+    private TestContext testContextInstance;
+
+    /// <summary>
+    ///Gets or sets the test context which provides
+    ///information about and functionality for the current test run.
+    ///</summary>
+    public TestContext TestContext {
+      get {
+        return testContextInstance;
+      }
+      set {
+        testContextInstance = value;
+      }
+    }
+
+    #region Additional test attributes
+    // 
+    //You can use the following additional attributes as you write your tests:
+    //
+    //Use ClassInitialize to run code before running the first test in the class
+    //[ClassInitialize()]
+    //public static void MyClassInitialize(TestContext testContext)
+    //{
+    //}
+    //
+    //Use ClassCleanup to run code after all tests in a class have run
+    //[ClassCleanup()]
+    //public static void MyClassCleanup()
+    //{
+    //}
+    //
+    //Use TestInitialize to run code before running each test
+    //[TestInitialize()]
+    //public void MyTestInitialize()
+    //{
+    //}
+    //
+    //Use TestCleanup to run code after each test has run
+    //[TestCleanup()]
+    //public void MyTestCleanup()
+    //{
+    //}
+    //
+    #endregion
+
+
+    /// <summary>
+    ///A test for Apply
+    ///</summary>
+    [TestMethod()]
+    public void ApplyTest() {
+      IRandom random = new TestRandom(new int[] { 1, 1, 0, 0, 1, 1, 0, 0, 1 }, null);
+      PWREncoding parent1 = TestUtils.CreateTestPWR1();
+      PWREncoding parent2 = TestUtils.CreateTestPWR2();
+      PWREncoding expected = new PWREncoding();
+      expected.PermutationWithRepetition = new IntegerVector(new int[] { 1, 0, 1, 0, 1, 2, 0, 2, 2 });
+      PWREncoding actual;
+      actual = PWRPPXCrossover.Apply(random, parent1, parent2);
+      Assert.IsTrue(actual.Equals(expected));
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/Properties/AssemblyInfo.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/Properties/AssemblyInfo.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/Properties/AssemblyInfo.cs	(revision 6406)
@@ -0,0 +1,35 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Encodings.ScheduleEncoding.Tests")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("FH-Hagenberg")]
+[assembly: AssemblyProduct("HeuristicLab.Encodings.ScheduleEncoding.Tests")]
+[assembly: AssemblyCopyright("Copyright © FH-Hagenberg 2011")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("ad838a3c-c883-46ca-b7de-9af91413e240")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/TestRandom.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/TestRandom.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/TestRandom.cs	(revision 6406)
@@ -0,0 +1,141 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.Tests {
+  public class TestRandom : IRandom {
+    #region Variables and Properties
+    private int[] intNumbers;
+    public int[] IntNumbers {
+      get { return intNumbers; }
+      set {
+        if (value == null) intNumbers = new int[0];
+        else intNumbers = value;
+      }
+    }
+    private int nextIntIndex;
+    private double[] doubleNumbers;
+    public double[] DoubleNumbers {
+      get { return doubleNumbers; }
+      set {
+        if (value == null) doubleNumbers = new double[0];
+        else doubleNumbers = value;
+      }
+    }
+    private int nextDoubleIndex;
+    #endregion
+
+    public TestRandom() {
+      intNumbers = new int[0];
+      doubleNumbers = new double[0];
+      nextIntIndex = 0;
+      nextDoubleIndex = 0;
+    }
+
+    public TestRandom(int[] intNumbers, double[] doubleNumbers) {
+      if (intNumbers == null) intNumbers = new int[0];
+      else this.intNumbers = intNumbers;
+      if (doubleNumbers == null) doubleNumbers = new double[0];
+      else this.doubleNumbers = doubleNumbers;
+      nextIntIndex = 0;
+      nextDoubleIndex = 0;
+    }
+
+    #region IRandom Members
+
+    public void Reset() {
+      nextIntIndex = 0;
+      nextDoubleIndex = 0;
+    }
+
+    public void Reset(int seed) {
+      throw new NotImplementedException();
+    }
+
+    public int Next() {
+      if (nextIntIndex >= intNumbers.Length) throw new InvalidOperationException("Random: No more integer random numbers available");
+      return intNumbers[nextIntIndex++];
+    }
+
+    public int Next(int maxVal) {
+      if (nextIntIndex >= intNumbers.Length) throw new InvalidOperationException("Random: No more integer random numbers available");
+      if (IntNumbers[nextIntIndex] >= maxVal) throw new InvalidOperationException("Random: Next integer random number (" + IntNumbers[nextIntIndex] + ") is >= " + maxVal);
+      return intNumbers[nextIntIndex++];
+    }
+
+    public int Next(int minVal, int maxVal) {
+      if (nextIntIndex >= intNumbers.Length) throw new InvalidOperationException("Random: No more integer random numbers available");
+      if (IntNumbers[nextIntIndex] < minVal || IntNumbers[nextIntIndex] >= maxVal) throw new InvalidOperationException("Random: Next integer random number (" + IntNumbers[nextIntIndex] + ") is not in the range [" + minVal + ";" + maxVal + ")");
+      return intNumbers[nextIntIndex++];
+    }
+
+    public double NextDouble() {
+      if (nextDoubleIndex >= doubleNumbers.Length) throw new InvalidOperationException("Random: No more double random numbers available");
+      if (doubleNumbers[nextDoubleIndex] < 0.0 || doubleNumbers[nextDoubleIndex] >= 1.0) throw new InvalidOperationException("Random: Next double ranomd number (" + DoubleNumbers[nextDoubleIndex] + ") is not in the range [0;1)");
+      return doubleNumbers[nextDoubleIndex++];
+    }
+
+    #endregion
+
+    #region IItem Members
+
+    public string ItemName {
+      get { throw new NotImplementedException(); }
+    }
+
+    public string ItemDescription {
+      get { throw new NotImplementedException(); }
+    }
+
+    public Version ItemVersion {
+      get { throw new NotImplementedException(); }
+    }
+
+    public System.Drawing.Image ItemImage {
+      get { throw new NotImplementedException(); }
+    }
+
+#pragma warning disable 67
+    public event EventHandler ItemImageChanged;
+    public event EventHandler ToStringChanged;
+#pragma warning restore 67
+    #endregion
+
+    #region IDeepCloneable Members
+
+    public IDeepCloneable Clone(Cloner cloner) {
+      throw new NotImplementedException();
+    }
+
+    #endregion
+
+    #region ICloneable Members
+
+    public object Clone() {
+      throw new NotImplementedException();
+    }
+
+    #endregion
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/TestUtils.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/TestUtils.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Tests/TestUtils.cs	(revision 6406)
@@ -0,0 +1,42 @@
+﻿using HeuristicLab.Core;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix;
+using HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.Tests {
+  public class TestUtils {
+    public static JSMEncoding CreateTestJSM1() {
+      JSMEncoding result = new JSMEncoding();
+      ItemList<Permutation> jsm = new ItemList<Permutation>();
+      for (int i = 0; i < 6; i++)
+        jsm.Add(new Permutation(PermutationTypes.Absolute, new int[] { 0, 1, 2, 3, 4, 5 }));
+      result.JobSequenceMatrix = jsm;
+      return result;
+    }
+
+    public static JSMEncoding CreateTestJSM2() {
+      JSMEncoding result = new JSMEncoding();
+      ItemList<Permutation> jsm = new ItemList<Permutation>();
+      for (int i = 0; i < 6; i++)
+        jsm.Add(new Permutation(PermutationTypes.Absolute, new int[] { 5, 4, 3, 2, 1, 0 }));
+      result.JobSequenceMatrix = jsm;
+      return result;
+    }
+
+
+    public static PWREncoding CreateTestPWR1() {
+      PWREncoding result = new PWREncoding();
+      IntegerVector pwr = new IntegerVector(new int[] { 1, 0, 1, 1, 2, 0, 2, 2, 0 });
+      result.PermutationWithRepetition = pwr;
+      return result;
+    }
+
+    public static PWREncoding CreateTestPWR2() {
+      PWREncoding result = new PWREncoding();
+      IntegerVector pwr = new IntegerVector(new int[] { 0, 1, 1, 0, 2, 0, 1, 2, 2 });
+      result.PermutationWithRepetition = pwr;
+      return result;
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/GanttChart.Designer.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/GanttChart.Designer.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/GanttChart.Designer.cs	(revision 6406)
@@ -0,0 +1,95 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.Views {
+  partial class GanttChart {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+      System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+      System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      this.chart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
+      ((System.ComponentModel.ISupportInitialize)(this.chart)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // chart
+      // 
+      this.chart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      chartArea1.Name = "ChartArea1";
+      this.chart.ChartAreas.Add(chartArea1);
+      legend1.Name = "Legend";
+      this.chart.Legends.Add(legend1);
+      this.chart.Location = new System.Drawing.Point(0, 0);
+      this.chart.Name = "chart";
+      series1.ChartArea = "ChartArea1";
+      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.RangeBar;
+      series1.CustomProperties = "DrawingStyle=Cylinder";
+      series1.IsVisibleInLegend = false;
+      series1.Legend = "Legend";
+      series1.Name = "Series1";
+      series1.YValuesPerPoint = 2;
+      series1.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Time;
+      this.chart.Series.Add(series1);
+      this.chart.Size = new System.Drawing.Size(687, 347);
+      this.chart.TabIndex = 0;
+      this.chart.Text = "chart";
+      this.chart.MouseClick += new System.Windows.Forms.MouseEventHandler(this.chart_MouseClick);
+      // 
+      // GanttChart
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.chart);
+      this.Name = "GanttChart";
+      this.Size = new System.Drawing.Size(687, 347);
+      ((System.ComponentModel.ISupportInitialize)(this.chart)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private Visualization.ChartControlsExtensions.EnhancedChart chart;
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/GanttChart.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/GanttChart.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/GanttChart.cs	(revision 6406)
@@ -0,0 +1,77 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+using System.Windows.Forms.DataVisualization.Charting;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.Views {
+  public partial class GanttChart : UserControl {
+
+    private IDictionary<int, Color> jobColors = new SortedDictionary<int, Color>();
+    private IDictionary<string, int> rowNames = new Dictionary<string, int>();
+    
+
+    public GanttChart() {
+      InitializeComponent();
+      chart.Series[0].YValueType = ChartValueType.Double;
+    }
+
+    public void AddJobColor(int jobNr) {
+      if (!jobColors.ContainsKey(jobNr)) {
+        Random r = new Random(jobNr + 1);
+        jobColors[jobNr] = Color.FromArgb (r.Next(256),r.Next(256),r.Next(256));
+        chart.Legends[0].CustomItems.Clear();
+        if (jobColors.Count > 1) {
+          int i = 0;
+          foreach (Color c in jobColors.Values) {
+            chart.Legends[0].CustomItems.Add(c, "Job#" + (i++));
+          }
+        }   
+      }
+    }
+
+    private void AddRowName(string rowName) {
+      if (!rowNames.ContainsKey(rowName)) {
+        int nextId = rowNames.Count == 0 ? 1 : rowNames.Values.Max() + 1;
+        rowNames.Add(rowName, nextId);
+      }
+    }
+
+    public void AddData(string rowName, int jobNr, double start, double end, string tooltip, bool showLabel = true) {
+      AddRowName(rowName);
+      var point = new DataPoint(rowNames[rowName], new double[] { start, end });
+      point.Color = jobColors[jobNr];
+      point.AxisLabel = rowName;
+      point.ToolTip = tooltip;
+      chart.Series[0].Points.Add(point);
+    }
+
+    public void Reset() {
+      chart.Series[0].Points.Clear();
+      jobColors.Clear();
+      chart.Legends[0].CustomItems.Clear();
+      rowNames.Clear();
+    }
+
+    void chart_MouseClick(object sender, MouseEventArgs e) {
+      var pos = e.Location;
+      var results = chart.HitTest(pos.X, pos.Y, false, ChartElementType.DataPoint);
+      foreach (DataPoint dp in chart.Series[0].Points) {
+        Color newColor = Color.FromArgb(255, dp.Color);
+        dp.Color = newColor;
+      }
+      foreach (var result in results) {
+        if (result.ChartElementType == ChartElementType.DataPoint) {
+          Color currentColor = chart.Series[0].Points[result.PointIndex].Color;
+          foreach (DataPoint dp in result.Series.Points) {
+            if (dp.Color != currentColor) {
+              Color newColor = Color.FromArgb(0, dp.Color);
+              dp.Color = newColor;
+            }
+          }
+        }
+      }
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/GanttChart.resx
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/GanttChart.resx	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/GanttChart.resx	(revision 6406)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj	(revision 6406)
@@ -0,0 +1,211 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{0C378762-D5DB-488A-8931-2BA42B1B7CBF}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Encodings.ScheduleEncoding.Views</RootNamespace>
+    <AssemblyName>HeuristicLab.Encodings.ScheduleEncoding.Views-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Windows.Forms.DataVisualization" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="GanttChart.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="GanttChart.Designer.cs">
+      <DependentUpon>GanttChart.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ScheduleView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ScheduleView.Designer.cs">
+      <DependentUpon>ScheduleView.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Plugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core.Views\3.3\HeuristicLab.Core.Views-3.3.csproj">
+      <Project>{E226881D-315F-423D-B419-A766FE0D8685}</Project>
+      <Name>HeuristicLab.Core.Views-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data.Views\3.3\HeuristicLab.Data.Views-3.3.csproj">
+      <Project>{72104A0B-90E7-42F3-9ABE-9BBBADD4B943}</Project>
+      <Name>HeuristicLab.Data.Views-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
+      <Project>{BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937}</Project>
+      <Name>HeuristicLab.Data-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Encodings.IntegerVectorEncoding\3.3\HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj">
+      <Project>{DDFB14DD-2A85-493C-A52D-E69729BBAEB0}</Project>
+      <Name>HeuristicLab.Encodings.IntegerVectorEncoding-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Encodings.PermutationEncoding\3.3\HeuristicLab.Encodings.PermutationEncoding-3.3.csproj">
+      <Project>{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}</Project>
+      <Name>HeuristicLab.Encodings.PermutationEncoding-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Encodings.ScheduleEncoding\3.3\HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj">
+      <Project>{17F3EF80-B2C3-4B8D-A4D5-BE9CE3BA2606}</Project>
+      <Name>HeuristicLab.Encodings.ScheduleEncoding-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding\3.4\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj">
+      <Project>{06D4A186-9319-48A0-BADE-A2058D462EEA}</Project>
+      <Name>HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj">
+      <Project>{AB687BBE-1BFE-476B-906D-44237135431D}</Project>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
+      <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
+      <Name>HeuristicLab.MainForm-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
+      <Project>{23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE}</Project>
+      <Name>HeuristicLab.Operators-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization.Views\3.3\HeuristicLab.Optimization.Views-3.3.csproj">
+      <Project>{662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2}</Project>
+      <Name>HeuristicLab.Optimization.Views-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
+      <Project>{56F9106A-079F-4C61-92F6-86A84C2D84B7}</Project>
+      <Name>HeuristicLab.Parameters-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views\3.4\HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj">
+      <Project>{20831A74-D18F-42D9-A667-1CE3AF53DF93}</Project>
+      <Name>HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis.Symbolic.Regression\3.4\HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj">
+      <Project>{5AC82412-911B-4FA2-A013-EDC5E3F3FCC2}</Project>
+      <Name>HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis.Symbolic.Views\3.4\HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj">
+      <Project>{7A2531CE-3F7C-4F13-BCCA-ED6DC27A7086}</Project>
+      <Name>HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis.Symbolic\3.4\HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj">
+      <Project>{3D28463F-EC96-4D82-AFEE-38BE91A0CA00}</Project>
+      <Name>HeuristicLab.Problems.DataAnalysis.Symbolic-3.4</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis.Views\3.4\HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj">
+      <Project>{3E9E8944-44FF-40BB-A622-3A4A7DD0F198}</Project>
+      <Name>HeuristicLab.Problems.DataAnalysis.Views-3.4</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis\3.4\HeuristicLab.Problems.DataAnalysis-3.4.csproj">
+      <Project>{DF87C13E-A889-46FF-8153-66DCAA8C5674}</Project>
+      <Name>HeuristicLab.Problems.DataAnalysis-3.4</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.Scheduling\3.3\HeuristicLab.Problems.Scheduling-3.3.csproj">
+      <Project>{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}</Project>
+      <Name>HeuristicLab.Problems.Scheduling-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.VehicleRouting\3.3\HeuristicLab.Problems.VehicleRouting-3.3.csproj">
+      <Project>{6410BDA6-3641-42B2-BABA-AA626E2F6F71}</Project>
+      <Name>HeuristicLab.Problems.VehicleRouting-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Visualization.ChartControlsExtensions\3.3\HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj">
+      <Project>{315BDA09-3F4F-49B3-9790-B37CFC1C5750}</Project>
+      <Name>HeuristicLab.Visualization.ChartControlsExtensions-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="GanttChart.resx">
+      <DependentUpon>GanttChart.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ScheduleView.resx">
+      <DependentUpon>ScheduleView.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\Plugin.cs.frame" "%25ProjectDir%25\Plugin.cs"</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/Plugin.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/Plugin.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/Plugin.cs	(revision 6406)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.PluginInfrastructure;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.Views {
+  [Plugin("HeuristicLab.Encodings.ScheduleEncoding.Views", "3.3.3.0")]
+  [PluginFile("HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.dll", PluginFileType.Assembly)]
+  public class HeuristicLabEncodingsScheduleEncodingViewsPlugin : PluginBase {
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/Plugin.cs.frame
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/Plugin.cs.frame	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/Plugin.cs.frame	(revision 6406)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.PluginInfrastructure;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.Views {
+  [Plugin("HeuristicLab.Encodings.ScheduleEncoding.Views", "3.3.3.$WCREV$")]
+  [PluginFile("HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.dll", PluginFileType.Assembly)]
+  public class HeuristicLabEncodingsScheduleEncodingViewsPlugin : PluginBase {
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/Properties/AssemblyInfo.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/Properties/AssemblyInfo.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/Properties/AssemblyInfo.cs	(revision 6406)
@@ -0,0 +1,57 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Encodings.ScheduleEncoding.Views")]
+[assembly: AssemblyDescription("Provides Views for ScheduleEncodings")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("4da6c9ad-b15d-4960-b010-d12318948e2d")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.3.0")]
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/Properties/AssemblyInfo.frame	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/Properties/AssemblyInfo.frame	(revision 6406)
@@ -0,0 +1,57 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Encodings.ScheduleEncoding.Views")]
+[assembly: AssemblyDescription("Provides Views for ScheduleEncodings")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("4da6c9ad-b15d-4960-b010-d12318948e2d")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/ScheduleView.Designer.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/ScheduleView.Designer.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/ScheduleView.Designer.cs	(revision 6406)
@@ -0,0 +1,93 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.Views {
+  partial class ScheduleView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.ganttChart = new GanttChart();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Size = new System.Drawing.Size(446, 20);
+      // 
+      // infoLabel
+      // 
+      this.infoLabel.Location = new System.Drawing.Point(510, 3);
+      // 
+      // ganttChart
+      // 
+      this.ganttChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.ganttChart.Location = new System.Drawing.Point(6, 22);
+      this.ganttChart.Name = "ganttChart";
+      this.ganttChart.Size = new System.Drawing.Size(520, 320);
+      this.ganttChart.TabIndex = 3;
+      // 
+      // ScheduleView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.ganttChart);
+      this.Name = "ScheduleView";
+      this.Size = new System.Drawing.Size(529, 345);
+      this.Controls.SetChildIndex(this.ganttChart, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private GanttChart ganttChart;
+
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/ScheduleView.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/ScheduleView.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/ScheduleView.cs	(revision 6406)
@@ -0,0 +1,122 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.Views {
+  [View("Schedule View")]
+  [Content(typeof(Schedule), true)]
+  public partial class ScheduleView : NamedItemView {
+    public ScheduleView() {
+      InitializeComponent();
+    }
+
+
+    protected override void DeregisterContentEvents() {
+      Content.QualityChanged -= new EventHandler(Content_QualityChanged);
+      Content.ResourcesChanged -= new EventHandler(Content_ResourcesChanged);
+
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.QualityChanged += new EventHandler(Content_QualityChanged);
+      Content.ResourcesChanged += new EventHandler(Content_ResourcesChanged);
+    }
+
+
+    public new Schedule Content {
+      get { return (Schedule)base.Content; }
+      set { base.Content = value; }
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        ResetGanttChart();
+      } else {
+        RedrawGanttChart(Content);
+      }
+    }
+
+    private void ResetGanttChart() {
+      ganttChart.Reset();
+    }
+
+    private void RedrawGanttChart(Schedule content) {
+      ResetGanttChart();
+      int resCount = 0;
+      Random random = new Random(1);
+      foreach (Resource r in content.Resources) {
+        foreach (ScheduledTask t in content.Resources[resCount].Tasks) {
+          int categoryNr = 0;
+          string toolTip = "Task#";// +t.TaskNr;
+          string categoryName = "ScheduleTasks";
+          if (t is ScheduledTask) {
+            categoryNr = ((ScheduledTask)t).JobNr.Value;
+            categoryName = "Job" + categoryNr;
+            toolTip = categoryName + " - " + toolTip;
+          }
+          ganttChart.AddJobColor(categoryNr);
+          ganttChart.AddData("Resource" + r.Index,
+            categoryNr,
+            t.StartTime.Value,
+            t.EndTime.Value,
+            toolTip);
+        }
+        resCount++;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      ganttChart.Enabled = Content != null;
+    }
+
+
+    private void Content_QualityChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_QualityChanged), sender, e);
+      else {
+        if (Content == null) {
+          ResetGanttChart();
+        } else {
+          RedrawGanttChart(Content);
+        }
+      }
+    }
+
+    private void Content_ResourcesChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ResourcesChanged), sender, e);
+      else {
+        if (Content == null) {
+          ResetGanttChart();
+        } else {
+          RedrawGanttChart(Content);
+        }
+      }
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/ScheduleView.resx
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/ScheduleView.resx	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/ScheduleView.resx	(revision 6406)
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>107, 17</value>
+  </metadata>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj	(revision 6406)
@@ -0,0 +1,166 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{17F3EF80-B2C3-4B8D-A4D5-BE9CE3BA2606}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Encodings.ScheduleEncoding</RootNamespace>
+    <AssemblyName>HeuristicLab.Encodings.ScheduleEncoding-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Interfaces\IScheduleEvaluationAlgorithm.cs" />
+    <Compile Include="Interfaces\IJSMOperator.cs" />
+    <Compile Include="Interfaces\IPRVOperator.cs" />
+    <Compile Include="Interfaces\IPWROperator.cs" />
+    <Compile Include="Interfaces\IScheduleCreator.cs" />
+    <Compile Include="Interfaces\IScheduleCrossover.cs" />
+    <Compile Include="Interfaces\IScheduleDecoder.cs" />
+    <Compile Include="Interfaces\IScheduleEncoding.cs" />
+    <Compile Include="Interfaces\IScheduleEvaluator.cs" />
+    <Compile Include="Interfaces\IScheduleManipulator.cs" />
+    <Compile Include="Interfaces\IScheduleOperator.cs" />
+    <Compile Include="JobSequenceMatrix\Crossovers\JSMCrossover.cs" />
+    <Compile Include="JobSequenceMatrix\Crossovers\JSMJOXCrossover.cs" />
+    <Compile Include="JobSequenceMatrix\Crossovers\JSMOXCrossover.cs" />
+    <Compile Include="JobSequenceMatrix\Crossovers\JSMSXXCrossover.cs" />
+    <Compile Include="JobSequenceMatrix\JSMEncoding.cs" />
+    <Compile Include="JobSequenceMatrix\JSMRandomCreator.cs" />
+    <Compile Include="JobSequenceMatrix\Manipulators\JSMManipulator.cs" />
+    <Compile Include="JobSequenceMatrix\Manipulators\JSMShiftChangeManipulator.cs" />
+    <Compile Include="JobSequenceMatrix\Manipulators\JSMSwapManipulator.cs" />
+    <Compile Include="PermutationWithRepetition\Crossovers\PWRCrossover.cs" />
+    <Compile Include="PermutationWithRepetition\Crossovers\PWRGOXCrossover.cs" />
+    <Compile Include="PermutationWithRepetition\Crossovers\PWRPPXCrossover.cs" />
+    <Compile Include="PermutationWithRepetition\Manipulators\PWRManipulator.cs" />
+    <Compile Include="PermutationWithRepetition\Manipulators\PWRUniformOnePositionManipulator.cs" />
+    <Compile Include="PermutationWithRepetition\PWREncoding.cs" />
+    <Compile Include="PermutationWithRepetition\PWRRandomCreator.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="PriorityRulesVector\Crossovers\PRVCrossover.cs" />
+    <Compile Include="PriorityRulesVector\Crossovers\PRVDiscreteCrossover.cs" />
+    <Compile Include="PriorityRulesVector\Crossovers\PRVSinglePointCrossover.cs" />
+    <Compile Include="PriorityRulesVector\Manipulators\PRVManipulator.cs" />
+    <Compile Include="PriorityRulesVector\Manipulators\PRVUniformOnePositionManipulator.cs" />
+    <Compile Include="PriorityRulesVector\PRVEncoding.cs" />
+    <Compile Include="PriorityRulesVector\PRVRandomCreator.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ScheduleEncoding\Resource.cs" />
+    <Compile Include="ScheduleEncoding\Schedule.cs" />
+    <Compile Include="ScheduleEncoding\ScheduledTask.cs" />
+    <Compile Include="ScheduleCreator.cs" />
+    <Compile Include="ScheduleCrossover.cs" />
+    <Compile Include="ScheduleDecoder.cs" />
+    <Compile Include="ScheduleManipulator.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Plugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
+      <Project>{BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937}</Project>
+      <Name>HeuristicLab.Data-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Encodings.IntegerVectorEncoding\3.3\HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj">
+      <Project>{DDFB14DD-2A85-493C-A52D-E69729BBAEB0}</Project>
+      <Name>HeuristicLab.Encodings.IntegerVectorEncoding-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Encodings.PermutationEncoding\3.3\HeuristicLab.Encodings.PermutationEncoding-3.3.csproj">
+      <Project>{DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA}</Project>
+      <Name>HeuristicLab.Encodings.PermutationEncoding-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
+      <Project>{23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE}</Project>
+      <Name>HeuristicLab.Operators-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14AB8D24-25BC-400C-A846-4627AA945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
+      <Project>{56F9106A-079F-4C61-92F6-86A84C2D84B7}</Project>
+      <Name>HeuristicLab.Parameters-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup />
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\Plugin.cs.frame" "%25ProjectDir%25\Plugin.cs"</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IJSMOperator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IJSMOperator.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IJSMOperator.cs	(revision 6406)
@@ -0,0 +1,6 @@
+﻿using HeuristicLab.Core;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  public interface IJSMOperator : IOperator {
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IPRVOperator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IPRVOperator.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IPRVOperator.cs	(revision 6406)
@@ -0,0 +1,6 @@
+﻿using HeuristicLab.Core;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  public interface IPRVOperator : IOperator {
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IPWROperator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IPWROperator.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IPWROperator.cs	(revision 6406)
@@ -0,0 +1,6 @@
+﻿using HeuristicLab.Core;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  public interface IPWROperator : IOperator {
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCreator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCreator.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCreator.cs	(revision 6406)
@@ -0,0 +1,6 @@
+﻿using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  public interface IScheduleCreator : ISolutionCreator, IScheduleOperator {
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCrossover.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCrossover.cs	(revision 6406)
@@ -0,0 +1,6 @@
+﻿using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  public interface IScheduleCrossover : ICrossover, IScheduleOperator {
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleDecoder.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleDecoder.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleDecoder.cs	(revision 6406)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  public interface IScheduleDecoder : IScheduleOperator {
+
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleEncoding.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleEncoding.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleEncoding.cs	(revision 6406)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  public interface IScheduleEncoding : IItem {
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleEvaluationAlgorithm.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleEvaluationAlgorithm.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleEvaluationAlgorithm.cs	(revision 6406)
@@ -0,0 +1,6 @@
+﻿using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  public interface IScheduleEvaluationAlgorithm : ISingleObjectiveEvaluator {
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleEvaluator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleEvaluator.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleEvaluator.cs	(revision 6406)
@@ -0,0 +1,6 @@
+﻿using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  public interface IScheduleEvaluator : ISingleObjectiveEvaluator, IScheduleOperator {
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleManipulator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleManipulator.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleManipulator.cs	(revision 6406)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 IScheduleManipulator : IManipulator, IScheduleOperator {
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleOperator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleOperator.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleOperator.cs	(revision 6406)
@@ -0,0 +1,6 @@
+﻿using HeuristicLab.Core;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  public interface IScheduleOperator : IOperator {
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMCrossover.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMCrossover.cs	(revision 6406)
@@ -0,0 +1,51 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix {
+  [Item("JSMCrossover", "An operator which crosses two JSM representations.")]
+  [StorableClass]
+  public abstract class JSMCrossover : ScheduleCrossover<JSMEncoding>, IJSMOperator {
+
+    [StorableConstructor]
+    protected JSMCrossover(bool deserializing) : base(deserializing) { }
+    protected JSMCrossover(JSMCrossover original, Cloner cloner) : base(original, cloner) { }
+    public JSMCrossover()
+      : base() {
+      ParentsParameter.ActualName = "JobSequenceMatrix";
+      ChildParameter.ActualName = "JobSequenceMatrix";
+    }
+
+    public abstract JSMEncoding Cross(IRandom random, JSMEncoding parent1, JSMEncoding parent2);
+
+    public override IOperation Apply() {
+      ItemArray<JSMEncoding> parents = ParentsParameter.ActualValue;
+
+      ChildParameter.ActualValue =
+        Cross(RandomParameter.ActualValue, parents[0] as JSMEncoding, parents[1] as JSMEncoding);
+
+      return base.Apply();
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMJOXCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMJOXCrossover.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMJOXCrossover.cs	(revision 6406)
@@ -0,0 +1,82 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix {
+  [Item("JSMJobbasedOrderCrossover", "Represents a crossover operation swapping subsequences of the parents to generate offspring.")]
+  [StorableClass]
+  public class JSMJOXCrossover : JSMCrossover {
+    [StorableConstructor]
+    protected JSMJOXCrossover(bool deserializing) : base(deserializing) { }
+    protected JSMJOXCrossover(JSMJOXCrossover original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JSMJOXCrossover(this, cloner);
+    }
+    public JSMJOXCrossover() : base() { }
+
+
+    public static JSMEncoding Apply(IRandom random, JSMEncoding p1, JSMEncoding p2) {
+      JSMEncoding result = new JSMEncoding();
+
+      int nrOfResources = p1.JobSequenceMatrix.Count;
+      int nrOfJobs = p1.JobSequenceMatrix[0].Length;
+
+      //Determine randomly which jobindexes persist
+      BoolArray persist = new BoolArray(nrOfJobs);
+      for (int i = 0; i < persist.Length; i++) {
+        persist[i] = random.Next(2) == 1;
+      }
+
+      bool dominantParent = random.Next(2) == 1;
+      JSMEncoding parent1 = dominantParent ? p1 : p2;
+      JSMEncoding parent2 = dominantParent ? p2 : p1;
+
+      //Fill childmatrix with values
+      for (int resIndex = 0; resIndex < nrOfResources; resIndex++) {
+        result.JobSequenceMatrix.Add(new Permutation(PermutationTypes.Absolute, nrOfJobs));
+        int parent2index = 0;
+        for (int jobIndex = 0; jobIndex < nrOfJobs; jobIndex++) {
+          if (persist[parent1.JobSequenceMatrix[resIndex][jobIndex]])
+            result.JobSequenceMatrix[resIndex][jobIndex] = parent1.JobSequenceMatrix[resIndex][jobIndex];
+          else {
+            while (persist[parent2.JobSequenceMatrix[resIndex][parent2index]])
+              parent2index++;
+            result.JobSequenceMatrix[resIndex][jobIndex] = parent2.JobSequenceMatrix[resIndex][parent2index];
+            parent2index++;
+          }
+        }
+      }
+
+      return result;
+    }
+
+    public override JSMEncoding Cross(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
+      return Apply(random, parent1, parent2);
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMOXCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMOXCrossover.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMOXCrossover.cs	(revision 6406)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix {
+  [Item("JSMOrderCrossover", "Represents a crossover operation swapping sequences of the parents to generate offspring.")]
+  [StorableClass]
+  public class JSMOXCrossover : JSMCrossover {
+    [StorableConstructor]
+    protected JSMOXCrossover(bool deserializing) : base(deserializing) { }
+    protected JSMOXCrossover(JSMOXCrossover original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JSMOXCrossover(this, cloner);
+    }
+    public JSMOXCrossover() : base() { }
+
+
+    public static JSMEncoding Apply(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
+      JSMEncoding result = new JSMEncoding();
+
+      for (int i = 0; i < parent1.JobSequenceMatrix.Count; i++) {
+        result.JobSequenceMatrix.Add(
+          HeuristicLab.Encodings.PermutationEncoding.OrderCrossover.Apply(random,
+          parent1.JobSequenceMatrix[i], parent2.JobSequenceMatrix[i]));
+      }
+
+      return result;
+    }
+
+    public override JSMEncoding Cross(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
+      return Apply(random, parent1, parent2);
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMSXXCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMSXXCrossover.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMSXXCrossover.cs	(revision 6406)
@@ -0,0 +1,94 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.PermutationEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix {
+  [Item("JSMSubsequenceExchangeCrossover", "Represents a crossover operation identifiying and exchanging equal subsequences of the parents to generate offspring.")]
+  [StorableClass]
+  public class JSMSXXCrossover : JSMCrossover {
+    [StorableConstructor]
+    protected JSMSXXCrossover(bool deserializing) : base(deserializing) { }
+    protected JSMSXXCrossover(JSMSXXCrossover original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JSMSXXCrossover(this, cloner);
+    }
+    public JSMSXXCrossover() : base() { }
+
+
+    public static JSMEncoding Apply(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
+      JSMEncoding result = new JSMEncoding();
+      int subSequenceLength = random.Next(parent1.JobSequenceMatrix[0].Length);
+      for (int i = 0; i < parent1.JobSequenceMatrix.Count; i++) {
+        Permutation p1 = (Permutation)parent1.JobSequenceMatrix[i].Clone();
+        Permutation p2 = (Permutation)parent2.JobSequenceMatrix[i].Clone();
+        FindAndExchangeSubsequences(p1, p2, subSequenceLength);
+        result.JobSequenceMatrix.Add(p1);
+      }
+      return result;
+    }
+    private static void FindAndExchangeSubsequences(Permutation p1, Permutation p2, int subSequenceLength) {
+      for (int i = 0; i <= p1.Length - subSequenceLength; i++) {
+        int[] ss1 = GetSubSequenceAtPosition(p1, i, subSequenceLength);
+        for (int j = 0; j <= p2.Length - subSequenceLength; j++) {
+          int[] ss2 = GetSubSequenceAtPosition(p2, j, subSequenceLength);
+          if (AreEqualSubsequences(ss1, ss2)) {
+            ExchangeSubsequences(p1, i, p2, j, subSequenceLength);
+            return;
+          }
+        }
+      }
+    }
+    private static void ExchangeSubsequences(Permutation p1, int index1, Permutation p2, int index2, int subSequenceLength) {
+      Permutation aux = (Permutation)p1.Clone();
+      for (int i = 0; i < subSequenceLength; i++) {
+        p1[i + index1] = p2[i + index2];
+        p2[i + index2] = aux[i + index1];
+      }
+    }
+    private static bool AreEqualSubsequences(int[] ss1, int[] ss2) {
+      int counter = 0;
+      for (int i = 0; i < ss1.Length; i++) {
+        for (int j = 0; j < ss2.Length; j++) {
+          if (ss1[i] == ss2[j])
+            counter++;
+        }
+      }
+      return counter == ss1.Length;
+    }
+    private static int[] GetSubSequenceAtPosition(Permutation p1, int index, int subSequenceLength) {
+      int[] result = new int[subSequenceLength];
+      for (int i = 0; i < subSequenceLength; i++)
+        result[i] = p1[i + index];
+
+      return result;
+    }
+
+    public override JSMEncoding Cross(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
+      return Apply(random, parent1, parent2);
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMEncoding.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMEncoding.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMEncoding.cs	(revision 6406)
@@ -0,0 +1,89 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix {
+  [Item("JobSequenceMatrixEncoding", "Represents an encoding for a scheduling Problem using a list of job sequences to deliver scheduleinformation.")]
+  [StorableClass]
+  public class JSMEncoding : Item, IScheduleEncoding {
+    [Storable]
+    public ItemList<Permutation> JobSequenceMatrix { get; set; }
+
+    [StorableConstructor]
+    protected JSMEncoding(bool deserializing) : base(deserializing) { }
+    protected JSMEncoding(JSMEncoding original, Cloner cloner)
+      : base(original, cloner) {
+      this.JobSequenceMatrix = cloner.Clone(original.JobSequenceMatrix);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JSMEncoding(this, cloner);
+    }
+    public JSMEncoding()
+      : base() {
+      JobSequenceMatrix = new ItemList<Permutation>();
+    }
+
+    public override string ToString() {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("[ ");
+
+      foreach (Permutation p in JobSequenceMatrix) {
+        sb.Append(p.ToString() + " \n");
+      }
+
+      sb.Append("]");
+      return sb.ToString();
+    }
+
+
+    public override bool Equals(object obj) {
+      if (obj.GetType() == typeof(JSMEncoding))
+        return AreEqual(this, obj as JSMEncoding);
+
+      return false;
+    }
+
+    private static bool AreEqual(JSMEncoding jSMEncoding1, JSMEncoding jSMEncoding2) {
+      if (jSMEncoding1.JobSequenceMatrix.Count != jSMEncoding2.JobSequenceMatrix.Count)
+        return false;
+      for (int i = 0; i < jSMEncoding1.JobSequenceMatrix.Count; i++) {
+        if (!AreEqual(jSMEncoding1.JobSequenceMatrix[i], jSMEncoding2.JobSequenceMatrix[i]))
+          return false;
+      }
+      return true;
+    }
+
+    private static bool AreEqual(Permutation p1, Permutation p2) {
+      if (p1.Length != p2.Length)
+        return false;
+      for (int i = 0; i < p1.Length; i++) {
+        if (p1[i] != p2[i])
+          return false;
+      }
+      return true;
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMRandomCreator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMRandomCreator.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMRandomCreator.cs	(revision 6406)
@@ -0,0 +1,78 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix {
+  [Item("JobSequenceMatrixCreator", "Creator class used to create Job Sequence Matrix solutions for standard JobShop scheduling problems.")]
+  [StorableClass]
+  public class JSMRandomCreator : ScheduleCreator<JSMEncoding>, IStochasticOperator {
+    #region Parameter Properties
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
+    public IValueLookupParameter<IntValue> JobsParameter {
+      get { return (IValueLookupParameter<IntValue>)Parameters["Jobs"]; }
+    }
+    public IValueLookupParameter<IntValue> ResourcesParameter {
+      get { return (IValueLookupParameter<IntValue>)Parameters["Resources"]; }
+    }
+    #endregion
+
+
+    [StorableConstructor]
+    protected JSMRandomCreator(bool deserializing) : base(deserializing) { }
+    protected JSMRandomCreator(JSMRandomCreator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JSMRandomCreator(this, cloner);
+    }
+    public JSMRandomCreator()
+      : base() {
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator."));
+      Parameters.Add(new ValueLookupParameter<IntValue>("Jobs", "The number of jobs handled in this problem instance."));
+      Parameters.Add(new ValueLookupParameter<IntValue>("Resources", "The number of resources used in this problem instance."));
+
+      ScheduleEncodingParameter.ActualName = "JobSequenceMatrix";
+    }
+
+
+    protected override JSMEncoding CreateSolution() {
+      JSMEncoding solution = new JSMEncoding();
+      IntValue nrOfJobs = new IntValue(JobsParameter.ActualValue.Value);
+      IntValue nrOfResources = new IntValue(ResourcesParameter.ActualValue.Value);
+
+      for (int i = 0; i < nrOfResources.Value; i++) {
+        solution.JobSequenceMatrix.Add(new Permutation(PermutationTypes.Absolute, nrOfJobs.Value, RandomParameter.ActualValue));
+      }
+
+      return solution;
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMManipulator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMManipulator.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMManipulator.cs	(revision 6406)
@@ -0,0 +1,48 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix {
+  [Item("JSMManipulator", "An operator which manipulates a JSM representation.")]
+  [StorableClass]
+  public abstract class JSMManipulator : ScheduleManipulator<JSMEncoding>, IJSMOperator {
+    [StorableConstructor]
+    protected JSMManipulator(bool deserializing) : base(deserializing) { }
+    protected JSMManipulator(JSMManipulator original, Cloner cloner) : base(original, cloner) { }
+    public JSMManipulator()
+      : base() {
+      ScheduleEncodingParameter.ActualName = "JobSequenceMatrix";
+    }
+
+    protected abstract void Manipulate(IRandom random, JSMEncoding individual);
+
+
+    public override IOperation Apply() {
+      JSMEncoding solution = ScheduleEncodingParameter.ActualValue;
+      Manipulate(RandomParameter.ActualValue, solution);
+      return base.Apply();
+    }
+
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMShiftChangeManipulator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMShiftChangeManipulator.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMShiftChangeManipulator.cs	(revision 6406)
@@ -0,0 +1,71 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix {
+
+  [Item("JSMShiftChangeManipulator", "Represents a manipulation operation where the operations of a randomly determined job are shifted in one direction for all resources.")]
+  [StorableClass]
+  public class JSMShiftChangeManipulator : JSMManipulator {
+    [StorableConstructor]
+    protected JSMShiftChangeManipulator(bool deserializing) : base(deserializing) { }
+    protected JSMShiftChangeManipulator(JSMShiftChangeManipulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JSMShiftChangeManipulator(this, cloner);
+    }
+
+    public JSMShiftChangeManipulator() : base() { }
+
+
+    public static void Apply(IRandom random, JSMEncoding individual) {
+      int nrOfJobs = individual.JobSequenceMatrix[0].Length;
+      int jobIndex = random.Next(nrOfJobs);
+      int signedFactor = random.Next(2);
+      for (int permutationIndex = 0; permutationIndex < individual.JobSequenceMatrix.Count; permutationIndex++) {
+        int i = 0;
+        Permutation currentPermutation = individual.JobSequenceMatrix[permutationIndex];
+        while (i < currentPermutation.Length && currentPermutation[i] != jobIndex)
+          i++;
+        int shift = (signedFactor == 0) ? random.Next(nrOfJobs / 2) * -1 : random.Next(nrOfJobs / 2);
+        int newIndex = shift + i;
+        if (newIndex < 0) newIndex = 0;
+        if (newIndex >= nrOfJobs) newIndex = nrOfJobs - 1;
+        List<int> aux = currentPermutation.ToList<int>();
+        int swap = currentPermutation[i];
+        aux.RemoveAt(i);
+        aux.Insert(newIndex, swap);
+        individual.JobSequenceMatrix[permutationIndex] = new Permutation(PermutationTypes.Absolute, aux.ToArray());
+      }
+    }
+
+    protected override void Manipulate(IRandom random, JSMEncoding individual) {
+      Apply(random, individual);
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMSwapManipulator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMSwapManipulator.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Manipulators/JSMSwapManipulator.cs	(revision 6406)
@@ -0,0 +1,58 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.PermutationEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix {
+
+  [Item("JSMSwapManipulator", "Represents a manipulation operation swapping parts of the individual.")]
+  [StorableClass]
+  public class JSMSwapManipulator : JSMManipulator {
+    [StorableConstructor]
+    protected JSMSwapManipulator(bool deserializing) : base(deserializing) { }
+    protected JSMSwapManipulator(JSMSwapManipulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JSMSwapManipulator(this, cloner);
+    }
+
+    public JSMSwapManipulator() : base() { }
+
+
+    public static void Apply(IRandom random, JSMEncoding individual) {
+      int resourceIndex = random.Next(individual.JobSequenceMatrix.Count);
+      Permutation p = individual.JobSequenceMatrix[resourceIndex];
+      int seqIndex1 = random.Next(p.Length);
+      int seqIndex2 = random.Next(p.Length);
+      int aux = p[seqIndex1];
+      p[seqIndex1] = p[seqIndex2];
+      p[seqIndex2] = aux;
+    }
+
+    protected override void Manipulate(IRandom random, JSMEncoding individual) {
+      Apply(random, individual);
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRCrossover.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRCrossover.cs	(revision 6406)
@@ -0,0 +1,51 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition {
+  [Item("PWRCrossover", "An operator which crosses two JSM representations.")]
+  [StorableClass]
+  public abstract class PWRCrossover : ScheduleCrossover<PWREncoding>, IPWROperator {
+
+    [StorableConstructor]
+    protected PWRCrossover(bool deserializing) : base(deserializing) { }
+    protected PWRCrossover(PWRCrossover original, Cloner cloner) : base(original, cloner) { }
+    public PWRCrossover()
+      : base() {
+      ParentsParameter.ActualName = "PermutationWithRepetition";
+      ChildParameter.ActualName = "PermutationWithRepetition";
+    }
+
+    public abstract PWREncoding Cross(IRandom random, PWREncoding parent1, PWREncoding parent2);
+
+    public override IOperation Apply() {
+      ItemArray<PWREncoding> parents = ParentsParameter.ActualValue;
+
+      ChildParameter.ActualValue =
+        Cross(RandomParameter.ActualValue, parents[0] as PWREncoding, parents[1] as PWREncoding);
+
+      return base.Apply();
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRGOXCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRGOXCrossover.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRGOXCrossover.cs	(revision 6406)
@@ -0,0 +1,96 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition {
+  [Item("PWRGeneralizationOrderCrossover", "Represents a crossover operation swapping sequences of the parents to generate offspring.")]
+  [StorableClass]
+  public class PWRGOXCrossover : PWRCrossover {
+    [StorableConstructor]
+    protected PWRGOXCrossover(bool deserializing) : base(deserializing) { }
+    protected PWRGOXCrossover(PWRGOXCrossover original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PWRGOXCrossover(this, cloner);
+    }
+    public PWRGOXCrossover() : base() { }
+
+    private static int[] GetLookUpForIndividual(List<int> p) {
+      int[] result = new int[p.Count];
+      Dictionary<int, int> lookUpTable = new Dictionary<int, int>();
+
+      for (int i = 0; i < p.Count; i++) {
+        if (!lookUpTable.ContainsKey(p[i]))
+          lookUpTable.Add(p[i], 0);
+        result[i] = lookUpTable[p[i]];
+        lookUpTable[p[i]]++;
+      }
+
+      return result;
+    }
+    public static PWREncoding Apply(IRandom random, PWREncoding parent1, PWREncoding parent2) {
+      PWREncoding result = new PWREncoding();
+
+      List<int> p1 = ((IntegerVector)(parent1.PermutationWithRepetition.Clone())).ToList<int>();
+      List<int> p2 = ((IntegerVector)(parent2.PermutationWithRepetition.Clone())).ToList<int>();
+      List<int> child = new List<int>();
+
+      int[] lookUpArrayP1 = GetLookUpForIndividual(p1);
+      int[] lookUpArrayP2 = GetLookUpForIndividual(p2);
+
+      int xStringLength = p1.Count / 2;
+      int xStringPosition = random.Next(p1.Count / 2);
+
+      //insert elements from parent1 that dont conflict with the "selected" elements form parent2
+      for (int i = 0; i < p1.Count; i++) {
+        bool isSelected = false;
+        for (int j = xStringPosition; j < xStringPosition + xStringLength; j++) {
+          if (p1[i] == p2[j] && lookUpArrayP1[i] == lookUpArrayP2[j])
+            isSelected = true;
+        }
+        if (!isSelected)
+          child.Add(p1[i]);
+      }
+
+      for (int i = xStringPosition; i < xStringPosition + xStringLength; i++) {
+        child.Insert(i, p2[i]);
+      }
+
+      result.PermutationWithRepetition = new IntegerVector(child.ToArray());
+      return result;
+    }
+
+    public override PWREncoding Cross(IRandom random, PWREncoding parent1, PWREncoding parent2) {
+      return Apply(random, parent1, parent2);
+    }
+
+
+
+
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRPPXCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRPPXCrossover.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Crossovers/PWRPPXCrossover.cs	(revision 6406)
@@ -0,0 +1,77 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition {
+  [Item("PWROrderCrossover", "Represents a crossover operation swapping sequences of the parents to generate offspring.")]
+  [StorableClass]
+  public class PWRPPXCrossover : PWRCrossover {
+    [StorableConstructor]
+    protected PWRPPXCrossover(bool deserializing) : base(deserializing) { }
+    protected PWRPPXCrossover(PWRPPXCrossover original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PWRPPXCrossover(this, cloner);
+    }
+    public PWRPPXCrossover() : base() { }
+
+    public static PWREncoding Apply(IRandom random, PWREncoding parent1, PWREncoding parent2) {
+      PWREncoding result = new PWREncoding();
+      List<int> p1 = ((IntegerVector)(parent1.PermutationWithRepetition.Clone())).ToList<int>();
+      List<int> p2 = ((IntegerVector)(parent2.PermutationWithRepetition.Clone())).ToList<int>();
+      List<int> child = new List<int>();
+
+      bool[] lookUpTable = new bool[parent1.PermutationWithRepetition.Length];
+      for (int i = 0; i < lookUpTable.Length; i++) {
+        lookUpTable[i] = random.Next(2) == 1;
+      }
+
+      foreach (bool b in lookUpTable) {
+        if (b) {
+          child.Add(p1[0]);
+          p2.Remove(p1[0]);
+          p1.RemoveAt(0);
+        } else {
+          child.Add(p2[0]);
+          p1.Remove(p2[0]);
+          p2.RemoveAt(0);
+        }
+      }
+
+      result.PermutationWithRepetition = new IntegerVector(child.ToArray());
+
+      return result;
+    }
+
+    public override PWREncoding Cross(IRandom random, PWREncoding parent1, PWREncoding parent2) {
+      return Apply(random, parent1, parent2);
+    }
+
+
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Manipulators/PWRManipulator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Manipulators/PWRManipulator.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Manipulators/PWRManipulator.cs	(revision 6406)
@@ -0,0 +1,48 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition {
+  [Item("PWRManipulator", "An operator which manipulates a PWR representation.")]
+  [StorableClass]
+  public abstract class PWRManipulator : ScheduleManipulator<PWREncoding>, IPWROperator {
+    [StorableConstructor]
+    protected PWRManipulator(bool deserializing) : base(deserializing) { }
+    protected PWRManipulator(PWRManipulator original, Cloner cloner) : base(original, cloner) { }
+    public PWRManipulator()
+      : base() {
+      ScheduleEncodingParameter.ActualName = "PermutationWithRepetition";
+    }
+
+    protected abstract void Manipulate(IRandom random, PWREncoding individual);
+
+
+    public override IOperation Apply() {
+      PWREncoding solution = ScheduleEncodingParameter.ActualValue;
+      Manipulate(RandomParameter.ActualValue, solution);
+      return base.Apply();
+    }
+
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Manipulators/PWRUniformOnePositionManipulator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Manipulators/PWRUniformOnePositionManipulator.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Manipulators/PWRUniformOnePositionManipulator.cs	(revision 6406)
@@ -0,0 +1,64 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition {
+
+  [Item("PWRUniformOnePositionManipulator", "Represents a manipulation operation inserting parts of the individual at another position.")]
+  [StorableClass]
+  public class PWRUniformOnePositionManipulator : PWRManipulator {
+    [StorableConstructor]
+    protected PWRUniformOnePositionManipulator(bool deserializing) : base(deserializing) { }
+    protected PWRUniformOnePositionManipulator(PWRUniformOnePositionManipulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PWRUniformOnePositionManipulator(this, cloner);
+    }
+    public PWRUniformOnePositionManipulator() : base() { }
+
+    public static void Apply(IRandom random, PWREncoding individual) {
+      int cutIndex = random.Next(individual.PermutationWithRepetition.Length);
+      int insertIndex = random.Next(individual.PermutationWithRepetition.Length);
+      List<int> perm = ((IntegerVector)(individual.PermutationWithRepetition.Clone())).ToList<int>();
+      int aux = perm[cutIndex];
+      if (cutIndex > insertIndex) {
+        perm.RemoveAt(cutIndex);
+        perm.Insert(insertIndex, aux);
+      } else {
+        perm.Insert(insertIndex, aux);
+        perm.RemoveAt(cutIndex);
+      }
+      individual.PermutationWithRepetition = new IntegerVector(perm.ToArray());
+    }
+
+    protected override void Manipulate(IRandom random, PWREncoding individual) {
+      Apply(random, individual);
+    }
+
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWREncoding.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWREncoding.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWREncoding.cs	(revision 6406)
@@ -0,0 +1,96 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition {
+  [Item("PermutationWithRepetitionEncoding", "Represents a encoding for a standard JobShop Scheduling Problem.")]
+  [StorableClass]
+  public class PWREncoding : Item, IScheduleEncoding {
+    [Storable]
+    public IntegerVector PermutationWithRepetition { get; set; }
+
+
+    [StorableConstructor]
+    protected PWREncoding(bool deserializing) : base(deserializing) { }
+    protected PWREncoding(PWREncoding original, Cloner cloner)
+      : base(original, cloner) {
+      this.PermutationWithRepetition = cloner.Clone(original.PermutationWithRepetition);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PWREncoding(this, cloner);
+    }
+    public PWREncoding()
+      : base() {
+      PermutationWithRepetition = new IntegerVector();
+    }
+
+    public PWREncoding(int problemDimension, IRandom random)
+      : base() {
+      PermutationWithRepetition = new IntegerVector(problemDimension * problemDimension);
+      int[] lookUpTable = new int[problemDimension];
+
+      for (int i = 0; i < PermutationWithRepetition.Length; i++) {
+        int newValue = random.Next(problemDimension);
+        while (lookUpTable[newValue] >= problemDimension)
+          newValue = random.Next(problemDimension);
+
+        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();
+    }
+
+    public override bool Equals(object obj) {
+      if (obj.GetType() == typeof(PWREncoding))
+        return AreEqual(this, obj as PWREncoding);
+      else
+        return base.Equals(obj);
+    }
+
+    private bool AreEqual(PWREncoding pWREncoding1, PWREncoding pWREncoding2) {
+      if (pWREncoding1.PermutationWithRepetition.Length != pWREncoding2.PermutationWithRepetition.Length)
+        return false;
+      for (int i = 0; i < pWREncoding1.PermutationWithRepetition.Length; i++) {
+        if (pWREncoding1.PermutationWithRepetition[i] != pWREncoding2.PermutationWithRepetition[i])
+          return false;
+      }
+      return true;
+    }
+
+
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWRRandomCreator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWRRandomCreator.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWRRandomCreator.cs	(revision 6406)
@@ -0,0 +1,71 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition {
+  [Item("PermutationWithRepetitionRandomCreator", "Creates PWR-individuals at random.")]
+  [StorableClass]
+  public class PWRRandomCreator : ScheduleCreator<PWREncoding>, IStochasticOperator {
+    public IRandom Random {
+      get { return RandomParameter.ActualValue; }
+    }
+
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
+    public IValueLookupParameter<IntValue> JobsParameter {
+      get { return (IValueLookupParameter<IntValue>)Parameters["Jobs"]; }
+    }
+    public IValueLookupParameter<IntValue> ResourcesParameter {
+      get { return (IValueLookupParameter<IntValue>)Parameters["Resources"]; }
+    }
+
+    [StorableConstructor]
+    protected PWRRandomCreator(bool deserializing) : base(deserializing) { }
+    protected PWRRandomCreator(PWRRandomCreator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PWRRandomCreator(this, cloner);
+    }
+
+    public PWRRandomCreator()
+      : base() {
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator."));
+      Parameters.Add(new ValueLookupParameter<IntValue>("Jobs", "The number of jobs handled in this problem instance."));
+      Parameters.Add(new ValueLookupParameter<IntValue>("Resources", "The number of resources used in this problem instance."));
+
+      ScheduleEncodingParameter.ActualName = "PermutationWithRepetition";
+    }
+
+
+    protected override PWREncoding CreateSolution() {
+      PWREncoding result = new PWREncoding(JobsParameter.ActualValue.Value, Random);
+      return result;
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Plugin.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Plugin.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Plugin.cs	(revision 6406)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.PluginInfrastructure;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  [Plugin("HeuristicLab.Encodings.ScheduleEncoding", "3.3.3.0")]
+  [PluginFile("HeuristicLab.Encodings.ScheduleEncoding-3.3.dll", PluginFileType.Assembly)]
+  public class HeuristicLabEncodingsScheduleEncodingPlugin : PluginBase {
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Plugin.cs.frame
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Plugin.cs.frame	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Plugin.cs.frame	(revision 6406)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.PluginInfrastructure;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  [Plugin("HeuristicLab.Encodings.ScheduleEncoding", "3.3.3.$WCREV$")]
+  [PluginFile("HeuristicLab.Encodings.ScheduleEncoding-3.3.dll", PluginFileType.Assembly)]
+  public class HeuristicLabEncodingsScheduleEncodingPlugin : PluginBase {
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVCrossover.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVCrossover.cs	(revision 6406)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.PriorityRulesVector {
+  [Item("PRVCrossover", "An operator which crosses two PRV representations.")]
+  [StorableClass]
+  public abstract class PRVCrossover : ScheduleCrossover<PRVEncoding>, IPRVOperator {
+    [StorableConstructor]
+    protected PRVCrossover(bool deserializing) : base(deserializing) { }
+    protected PRVCrossover(PRVCrossover original, Cloner cloner) : base(original, cloner) { }
+    public PRVCrossover()
+      : base() {
+      ParentsParameter.ActualName = "PriorityRulesVector";
+      ChildParameter.ActualName = "PriorityRulesVector";
+    }
+
+
+    public abstract PRVEncoding Cross(IRandom random, PRVEncoding parent1, PRVEncoding parent2);
+
+    public override IOperation Apply() {
+      ItemArray<PRVEncoding> parents = ParentsParameter.ActualValue;
+      ChildParameter.ActualValue =
+        Cross(RandomParameter.ActualValue, parents[0] as PRVEncoding, parents[1] as PRVEncoding);
+      return base.Apply();
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVDiscreteCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVDiscreteCrossover.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVDiscreteCrossover.cs	(revision 6406)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.IntegerVectorEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.PriorityRulesVector {
+  [Item("PRVDiscreteCrossover", "Represents a crossover operation swapping sequences of the parents to generate offspring.")]
+  [StorableClass]
+  public class PRVDiscreteCrossover : PRVCrossover {
+    [StorableConstructor]
+    protected PRVDiscreteCrossover(bool deserializing) : base(deserializing) { }
+    protected PRVDiscreteCrossover(PRVDiscreteCrossover original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PRVDiscreteCrossover(this, cloner);
+    }
+    public PRVDiscreteCrossover() : base() { }
+
+
+    public static PRVEncoding Apply(IRandom random, PRVEncoding parent1, PRVEncoding parent2) {
+      return new PRVEncoding(DiscreteCrossover.Apply(random, parent1.PriorityRulesVector, parent2.PriorityRulesVector), parent1.NrOfRules);
+    }
+    public override PRVEncoding Cross(IRandom random, PRVEncoding parent1, PRVEncoding parent2) {
+      return Cross(random, parent1, parent2);
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVSinglePointCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVSinglePointCrossover.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Crossovers/PRVSinglePointCrossover.cs	(revision 6406)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.IntegerVectorEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.PriorityRulesVector {
+  [Item("PRVSinglePointCrossover", "Represents a crossover operation swapping sequences of the parents to generate offspring.")]
+  [StorableClass]
+  public class PRVSinglePointCrossover : PRVCrossover {
+    [StorableConstructor]
+    protected PRVSinglePointCrossover(bool deserializing) : base(deserializing) { }
+    protected PRVSinglePointCrossover(PRVSinglePointCrossover original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PRVSinglePointCrossover(this, cloner);
+    }
+    public PRVSinglePointCrossover() : base() { }
+
+    public static PRVEncoding Apply(IRandom random, PRVEncoding parent1, PRVEncoding parent2) {
+      return new PRVEncoding(SinglePointCrossover.Apply(random, parent1.PriorityRulesVector, parent2.PriorityRulesVector), parent1.NrOfRules);
+    }
+
+    public override PRVEncoding Cross(IRandom random, PRVEncoding parent1, PRVEncoding parent2) {
+      return Cross(random, parent1, parent2);
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Manipulators/PRVManipulator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Manipulators/PRVManipulator.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Manipulators/PRVManipulator.cs	(revision 6406)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.PriorityRulesVector {
+  [Item("PRVManipulator", "An operator which manipulates a PRV representation.")]
+  [StorableClass]
+  public abstract class PRVManipulator : ScheduleManipulator<PRVEncoding>, IPRVOperator {
+    [StorableConstructor]
+    protected PRVManipulator(bool deserializing) : base(deserializing) { }
+    protected PRVManipulator(PRVManipulator original, Cloner cloner) : base(original, cloner) { }
+    public PRVManipulator()
+      : base() {
+      ScheduleEncodingParameter.ActualName = "PriorityRulesVector";
+    }
+
+
+    protected abstract void Manipulate(IRandom random, PRVEncoding individual);
+    public override IOperation Apply() {
+      PRVEncoding solution = ScheduleEncodingParameter.ActualValue;
+      Manipulate(RandomParameter.ActualValue, solution);
+      return base.Apply();
+    }
+
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Manipulators/PRVUniformOnePositionManipulator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Manipulators/PRVUniformOnePositionManipulator.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Manipulators/PRVUniformOnePositionManipulator.cs	(revision 6406)
@@ -0,0 +1,52 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.PriorityRulesVector {
+
+  [Item("PRVUniformOnePositionManipulator", "Represents a manipulation operation inserting parts of the individual at another position.")]
+  [StorableClass]
+  public class PRVUniformOnePositionManipulator : PRVManipulator {
+    [StorableConstructor]
+    protected PRVUniformOnePositionManipulator(bool deserializing) : base(deserializing) { }
+    protected PRVUniformOnePositionManipulator(PRVUniformOnePositionManipulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PRVUniformOnePositionManipulator(this, cloner);
+    }
+    public PRVUniformOnePositionManipulator() : base() { }
+
+
+    public static void Apply(IRandom random, PRVEncoding individual) {
+      UniformOnePositionManipulator.Apply(random, individual.PriorityRulesVector, new IntValue(0), new IntValue(3));
+    }
+
+    protected override void Manipulate(IRandom random, PRVEncoding individual) {
+      Apply(random, individual);
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVEncoding.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVEncoding.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVEncoding.cs	(revision 6406)
@@ -0,0 +1,84 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Data;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.PriorityRulesVector {
+  [Item("PriorityRulesVectorEncoding", "Represents an encoding for a Scheduling Problem.")]
+  [StorableClass]
+  public class PRVEncoding : Item, IScheduleEncoding {
+    [Storable]
+    public IntegerVector PriorityRulesVector { get; set; }
+
+    [Storable]
+    private IntValue nrOfRules;
+    public IntValue NrOfRules {
+      get {
+        return nrOfRules;
+      }
+    }
+
+
+    [StorableConstructor]
+    protected PRVEncoding(bool deserializing) : base(deserializing) { }
+    protected PRVEncoding(PRVEncoding original, Cloner cloner)
+      : base(original, cloner) {
+      this.nrOfRules = cloner.Clone(original.NrOfRules);
+      this.PriorityRulesVector = cloner.Clone(original.PriorityRulesVector);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PRVEncoding(this, cloner);
+    }
+    public PRVEncoding(int nrOfRules)
+      : base() {
+      this.nrOfRules = new IntValue(nrOfRules);
+      this.PriorityRulesVector = new IntegerVector();
+    }
+    public PRVEncoding(IntegerVector iv, IntValue nrOfRules)
+      : base() {
+      this.nrOfRules = (IntValue)nrOfRules.Clone();
+      this.PriorityRulesVector = (IntegerVector)iv.Clone();
+    }
+    public PRVEncoding(int length, IRandom random, int min, int max, IntValue nrOfRules)
+      : base() {
+      this.nrOfRules = (IntValue)nrOfRules.Clone();
+      this.PriorityRulesVector = new IntegerVector(length, random, min, max);
+    }
+
+
+    public override string ToString() {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("[ ");
+
+      foreach (int i in PriorityRulesVector) {
+        sb.Append(i.ToString() + " ");
+      }
+
+      sb.Append("]");
+      return sb.ToString();
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVRandomCreator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVRandomCreator.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVRandomCreator.cs	(revision 6406)
@@ -0,0 +1,74 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+
+namespace HeuristicLab.Encodings.ScheduleEncoding.PriorityRulesVector {
+  [Item("PriorityRulesRandomCreator", "Creator class used to create PRV encoding objects for scheduling problems.")]
+  [StorableClass]
+  public class PRVRandomCreator : ScheduleCreator<PRVEncoding>, IStochasticOperator {
+    [Storable]
+    public IntValue NrOfRules { get; set; }
+
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
+    public IValueLookupParameter<IntValue> JobsParameter {
+      get { return (IValueLookupParameter<IntValue>)Parameters["Jobs"]; }
+    }
+    public IValueLookupParameter<IntValue> ResourcesParameter {
+      get { return (IValueLookupParameter<IntValue>)Parameters["Resources"]; }
+    }
+
+
+    [StorableConstructor]
+    protected PRVRandomCreator(bool deserializing) : base(deserializing) { }
+    protected PRVRandomCreator(PRVRandomCreator original, Cloner cloner)
+      : base(original, cloner) {
+      this.NrOfRules = cloner.Clone(original.NrOfRules);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PRVRandomCreator(this, cloner);
+    }
+    public PRVRandomCreator()
+      : base() {
+      NrOfRules = new IntValue(10);
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator."));
+      Parameters.Add(new ValueLookupParameter<IntValue>("Jobs", "The number of jobs handled in this problem instance."));
+      Parameters.Add(new ValueLookupParameter<IntValue>("Resources", "The number of resources used in this problem instance."));
+      ScheduleEncodingParameter.ActualName = "PriorityRulesVector";
+    }
+
+
+    protected override PRVEncoding CreateSolution() {
+      IntValue nrOfJobs = new IntValue(JobsParameter.ActualValue.Value);
+      IntValue nrOfResources = new IntValue(ResourcesParameter.ActualValue.Value);
+      PRVEncoding solution = new PRVEncoding(nrOfJobs.Value * nrOfResources.Value, RandomParameter.ActualValue, 0, NrOfRules.Value, NrOfRules);
+      return solution;
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Properties/AssemblyInfo.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Properties/AssemblyInfo.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Properties/AssemblyInfo.cs	(revision 6406)
@@ -0,0 +1,57 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Encodings.ScheduleEncoding")]
+[assembly: AssemblyDescription("HeuristicLab schedule encoding and related operators")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("4da6c9ad-b15d-4960-b010-d12318948e2d")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.3.0")]
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Properties/AssemblyInfo.frame	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/Properties/AssemblyInfo.frame	(revision 6406)
@@ -0,0 +1,57 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Encodings.ScheduleEncoding")]
+[assembly: AssemblyDescription("HeuristicLab schedule encoding and related operators")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("4da6c9ad-b15d-4960-b010-d12318948e2d")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCreator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCreator.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCreator.cs	(revision 6406)
@@ -0,0 +1,54 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  [Item("ScheduleCreator", "Represents the generalized form of creators for Scheduling Problems.")]
+  [StorableClass]
+  public abstract class ScheduleCreator<T> : SingleSuccessorOperator, IScheduleCreator where T : Item {
+    public ILookupParameter<T> ScheduleEncodingParameter {
+      get { return (ILookupParameter<T>)Parameters["ScheduleEncoding"]; }
+    }
+
+
+    [StorableConstructor]
+    protected ScheduleCreator(bool deserializing) : base(deserializing) { }
+    protected ScheduleCreator(ScheduleCreator<T> original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public ScheduleCreator()
+      : base() {
+      Parameters.Add(new LookupParameter<T>("ScheduleEncoding", "The new scheduling solutioncandidate."));
+    }
+
+
+    public override IOperation Apply() {
+      ScheduleEncodingParameter.ActualValue = CreateSolution();
+      return base.Apply();
+    }
+    protected abstract T CreateSolution();
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCrossover.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCrossover.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCrossover.cs	(revision 6406)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  [Item("ScheduleCrossover", "A scheduling crossover operation.")]
+  [StorableClass]
+  public abstract class ScheduleCrossover<T> : SingleSuccessorOperator, IScheduleCrossover, IStochasticOperator where T : Item {
+    #region IScheduleCrossover Members
+    public ILookupParameter<ItemArray<T>> ParentsParameter {
+      get { return (ScopeTreeLookupParameter<T>)Parameters["Parents"]; }
+    }
+
+    public ILookupParameter<T> ChildParameter {
+      get { return (ILookupParameter<T>)Parameters["Child"]; }
+    }
+    #endregion
+
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
+
+    [StorableConstructor]
+    protected ScheduleCrossover(bool deserializing) : base(deserializing) { }
+    protected ScheduleCrossover(ScheduleCrossover<T> original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public ScheduleCrossover()
+      : base() {
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
+      Parameters.Add(new ScopeTreeLookupParameter<T>("Parents", "The parent solution which should be crossed."));
+      ParentsParameter.ActualName = "SchedulingSolution";
+      Parameters.Add(new LookupParameter<T>("Child", "The child solution resulting from the crossover."));
+      ChildParameter.ActualName = "SchedulingSolution";
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleDecoder.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleDecoder.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleDecoder.cs	(revision 6406)
@@ -0,0 +1,59 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  [Item("ScheduleDecoder", "A scheduling decoder operator.")]
+  [StorableClass]
+  public abstract class ScheduleDecoder<T> : SingleSuccessorOperator, IScheduleDecoder where T : Item {
+    [StorableConstructor]
+    protected ScheduleDecoder(bool deserializing) : base(deserializing) { }
+    protected ScheduleDecoder(ScheduleDecoder<T> original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    public ILookupParameter<T> ScheduleEncodingParameter {
+      get { return (ILookupParameter<T>)Parameters["ScheduleEncoding"]; }
+    }
+    public ILookupParameter<Schedule> ScheduleParameter {
+      get { return (ILookupParameter<Schedule>)Parameters["Schedule"]; }
+    }
+
+    public ScheduleDecoder()
+      : base() {
+      Parameters.Add(new LookupParameter<T>("ScheduleEncoding", "The new scheduling solution represented as encoding."));
+      Parameters.Add(new LookupParameter<Schedule>("Schedule", "The decoded scheduling solution represented as generalized schedule."));
+    }
+
+    public abstract Schedule CreateScheduleFromEncoding(T solution);
+
+    public override IOperation Apply() {
+      Schedule result = CreateScheduleFromEncoding(ScheduleEncodingParameter.ActualValue);
+      ScheduleParameter.ActualValue = result;
+      return base.Apply();
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Resource.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Resource.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Resource.cs	(revision 6406)
@@ -0,0 +1,79 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Data;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  [Item("ResourceClass", "Represents a resource used in scheduling problems.")]
+  [StorableClass]
+  public class Resource : Item {
+    public Resource(int index)
+      : base() {
+      Index = index;
+      Tasks = new ItemList<ScheduledTask>();
+    }
+    [Storable]
+    public int Index {
+      get;
+      set;
+    }
+    [Storable]
+    public ItemList<ScheduledTask> Tasks {
+      get;
+      set;
+    }
+    public DoubleValue TotalDuration {
+      get {
+        double result = 0;
+        foreach (ScheduledTask t in Tasks) {
+          if (t.EndTime.Value > result)
+            result = t.EndTime.Value;
+        }
+        return new DoubleValue(result);
+      }
+    }
+
+    [StorableConstructor]
+    protected Resource(bool deserializing) : base(deserializing) { }
+    protected Resource(Resource original, Cloner cloner)
+      : base(original, cloner) {
+      this.Index = original.Index;
+      this.Tasks = cloner.Clone(original.Tasks);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Resource(this, cloner);
+    }
+
+    public override string ToString() {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("Resource#" + Index + " [ ");
+      foreach (ScheduledTask t in Tasks) {
+        sb.Append(t.ToString() + " ");
+      }
+      sb.Append("]");
+      return sb.ToString();
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Schedule.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Schedule.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Schedule.cs	(revision 6406)
@@ -0,0 +1,162 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Collections.Generic;
+using System.Text;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  [Item("Schedule", "Represents the general solution for scheduling problems.")]
+  [StorableClass]
+  public class Schedule : NamedItem {
+    #region Properties
+    [Storable]
+    private ItemList<Resource> resources;
+    public ItemList<Resource> Resources {
+      get { return resources; }
+      set {
+        if (resources != null) DeregisterResourcesEvents();
+        resources = value;
+        if (resources != null) RegisterResourcesEvents();
+        OnResourcesChanged();
+      }
+    }
+    [Storable]
+    private DoubleValue quality;
+    public DoubleValue Quality {
+      get { return quality; }
+      set {
+        if (quality != value) {
+          if (quality != null) DeregisterQualityEvents();
+          quality = value;
+          if (quality != null) RegisterQualityEvents();
+          OnQualityChanged();
+        }
+      }
+    }
+    [Storable]
+    private Dictionary<int, ScheduledTask> lastScheduledTaskOfJob;
+    #endregion
+
+    [StorableConstructor]
+    protected Schedule(bool deserializing) : base(deserializing) { }
+    protected Schedule(Schedule original, Cloner cloner)
+      : base(original, cloner) {
+      this.Resources = cloner.Clone(original.Resources);
+      this.Quality = cloner.Clone(original.Quality);
+      this.lastScheduledTaskOfJob = new Dictionary<int, ScheduledTask>(original.lastScheduledTaskOfJob);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Schedule(this, cloner);
+    }
+    public Schedule(int nrOfResources) {
+      Resources = new ItemList<Resource>();
+      for (int i = 0; i < nrOfResources; i++) {
+        Resources.Add(new Resource(i));
+      }
+      lastScheduledTaskOfJob = new Dictionary<int, ScheduledTask>();
+    }
+
+
+    #region Events
+    public event EventHandler QualityChanged;
+    private void OnQualityChanged() {
+      var changed = QualityChanged;
+      if (changed != null)
+        changed(this, EventArgs.Empty);
+    }
+    private void RegisterQualityEvents() {
+      Quality.ValueChanged += new EventHandler(Quality_ValueChanged);
+    }
+    private void DeregisterQualityEvents() {
+      Quality.ValueChanged -= new EventHandler(Quality_ValueChanged);
+    }
+    private void Quality_ValueChanged(object sender, EventArgs e) {
+      OnQualityChanged();
+    }
+
+    public event EventHandler ResourcesChanged;
+    private void OnResourcesChanged() {
+      var changed = ResourcesChanged;
+      if (changed != null)
+        changed(this, EventArgs.Empty);
+    }
+    private void RegisterResourcesEvents() {
+      Resources.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(Resources_PropertyChanged);
+    }
+    private void DeregisterResourcesEvents() {
+      Resources.PropertyChanged -= new System.ComponentModel.PropertyChangedEventHandler(Resources_PropertyChanged);
+    }
+    private void Resources_PropertyChanged(object sender, EventArgs e) {
+      OnResourcesChanged();
+    }
+    #endregion
+
+    public void ScheduleTask(int resNr, double startTime, double duration, int jobNr) {
+      ScheduledTask task = new ScheduledTask(resNr, startTime, duration, jobNr);
+      Resource affectedResource = resources[task.ResourceNr.Value];
+      int i = 0;
+      while (i < affectedResource.Tasks.Count && affectedResource.Tasks[i].StartTime.Value < task.StartTime.Value)
+        i++;
+
+      if (i >= affectedResource.Tasks.Count)
+        affectedResource.Tasks.Add(task);
+      else
+        affectedResource.Tasks.Insert(i, task);
+
+      if (!lastScheduledTaskOfJob.ContainsKey(jobNr))
+        lastScheduledTaskOfJob.Add(jobNr, task);
+      else
+        lastScheduledTaskOfJob[jobNr] = task;
+    }
+
+    public ScheduledTask GetLastScheduledTaskForJobNr(int jobNr) {
+      if (lastScheduledTaskOfJob.ContainsKey(jobNr))
+        return lastScheduledTaskOfJob[jobNr];
+      else
+        return null;
+    }
+
+    public override string ToString() {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("[ ");
+      foreach (Resource r in Resources) {
+        sb.Append(r.ToString() + " \n");
+      }
+      sb.Append("]");
+      return sb.ToString();
+    }
+
+    public double CalculateMakespan() {
+      double quality = 0;
+      foreach (Resource r in Resources) {
+        if (r.TotalDuration.Value > quality) {
+          quality = r.TotalDuration.Value;
+        }
+      }
+      return quality;
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/ScheduledTask.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/ScheduledTask.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/ScheduledTask.cs	(revision 6406)
@@ -0,0 +1,75 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Data;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  [Item("ScheduledTaskClass", "Represents a task that has been scheduled already.")]
+  [StorableClass]
+  public class ScheduledTask : Item {
+    #region Properties
+    [Storable]
+    public IntValue ResourceNr { get; set; }
+    [Storable]
+    public DoubleValue Duration { get; set; }
+    [Storable]
+    public DoubleValue StartTime { get; set; }
+    public DoubleValue EndTime {
+      get {
+        return new DoubleValue(Duration.Value + StartTime.Value);
+      }
+    }
+    [Storable]
+    public IntValue JobNr { get; set; }
+    #endregion
+
+    [StorableConstructor]
+    protected ScheduledTask(bool deserializing) : base(deserializing) { }
+    protected ScheduledTask(ScheduledTask original, Cloner cloner)
+      : base(original, cloner) {
+      this.ResourceNr = cloner.Clone(original.ResourceNr);
+      this.Duration = cloner.Clone(original.Duration);
+      this.StartTime = cloner.Clone(original.StartTime);
+      this.JobNr = cloner.Clone(original.JobNr);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ScheduledTask(this, cloner);
+    }
+
+    public ScheduledTask(int resNr, double startTime, double duration, int jobNr)
+      : base() {
+      Duration = new DoubleValue(duration);
+      ResourceNr = new IntValue(resNr);
+      StartTime = new DoubleValue(startTime);
+      JobNr = new IntValue(jobNr);
+    }
+
+    public override string ToString() {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("[" + JobNr + "," + ResourceNr + "]");
+      return sb.ToString();
+    }
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleManipulator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleManipulator.cs	(revision 6406)
+++ /branches/Scheduling/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleManipulator.cs	(revision 6406)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.ScheduleEncoding {
+  [Item("ScheduleManipulator", "A scheduling manipulation operation.")]
+  [StorableClass]
+  public abstract class ScheduleManipulator<T> : SingleSuccessorOperator, IScheduleManipulator, IStochasticOperator where T : Item {
+    #region IScheduleManipulator Members
+
+    public ILookupParameter<T> ScheduleEncodingParameter {
+      get { return (ILookupParameter<T>)Parameters["ScheduleEncoding"]; }
+    }
+
+    #endregion
+
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
+
+    [StorableConstructor]
+    protected ScheduleManipulator(bool deserializing) : base(deserializing) { }
+    protected ScheduleManipulator(ScheduleManipulator<T> original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public ScheduleManipulator()
+      : base() {
+      Parameters.Add(new LookupParameter<T>("ScheduleEncoding", "The scheduling solution to be manipulated."));
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
+    }
+
+  }
+}
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj	(revision 6406)
@@ -115,11 +115,11 @@
       <Name>HeuristicLab.Encodings.PermutationEncoding-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Encodings.SchedulingEncoding.Views\3.3\HeuristicLab.Encodings.SchedulingEncoding.Views-3.3.csproj">
+    <ProjectReference Include="..\..\HeuristicLab.Encodings.ScheduleEncoding.Views\3.3\HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj">
       <Project>{0C378762-D5DB-488A-8931-2BA42B1B7CBF}</Project>
-      <Name>HeuristicLab.Encodings.SchedulingEncoding.Views-3.3</Name>
+      <Name>HeuristicLab.Encodings.ScheduleEncoding.Views-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Encodings.SchedulingEncoding\3.3\HeuristicLab.Encodings.SchedulingEncoding-3.3.csproj">
+    <ProjectReference Include="..\..\HeuristicLab.Encodings.ScheduleEncoding\3.3\HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj">
       <Project>{17F3EF80-B2C3-4B8D-A4D5-BE9CE3BA2606}</Project>
-      <Name>HeuristicLab.Encodings.SchedulingEncoding-3.3</Name>
+      <Name>HeuristicLab.Encodings.ScheduleEncoding-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj">
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.Designer.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.Designer.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.Designer.cs	(revision 6406)
@@ -1,3 +1,3 @@
-﻿using HeuristicLab.Encodings.SchedulingEncoding.Views;
+﻿using HeuristicLab.Encodings.ScheduleEncoding.Views;
 namespace HeuristicLab.Problems.Scheduling.Views {
   partial class JobShopSchedulingProblemView {
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Plugin.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Plugin.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Plugin.cs	(revision 6406)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Problems.Scheduling.Views {
-  [Plugin("HeuristicLab.Problems.Scheduling.Views", "3.3.3.6294")]
+  [Plugin("HeuristicLab.Problems.Scheduling.Views", "3.3.3.6364")]
   [PluginFile("HeuristicLab.Problems.Scheduling.Views-3.3.dll", PluginFileType.Assembly)]
   public class HeuristicLabProblemsSchedulingViewsPlugin : PluginBase {
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Properties/AssemblyInfo.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Properties/AssemblyInfo.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Properties/AssemblyInfo.cs	(revision 6406)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.0.6294")]
+[assembly: AssemblyFileVersion("3.3.0.6364")]
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Analyzers/BestSchedulingSolutionAnalyzer.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Analyzers/BestSchedulingSolutionAnalyzer.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Analyzers/BestSchedulingSolutionAnalyzer.cs	(revision 6406)
@@ -20,17 +20,14 @@
 #endregion
 
-using System;
-using System.Collections.Generic;
 using System.Linq;
-using System.Text;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.ScheduleEncoding;
 using HeuristicLab.Optimization;
-using HeuristicLab.Core;
+using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Common;
-using HeuristicLab.Parameters;
-using HeuristicLab.Data;
-using HeuristicLab.Encodings.SchedulingEncoding;
 
-namespace HeuristicLab.Problems.Scheduling.Analyzers {
+namespace HeuristicLab.Problems.Scheduling {
 
   [Item("BestSchedulingSolutionAnalyzer", "An operator for analyzing the best solution of Scheduling Problems given in schedule-representation.")]
@@ -53,5 +50,6 @@
     }
 
-    public BestSchedulingSolutionAnalyzer () : base () {
+    public BestSchedulingSolutionAnalyzer()
+      : base() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator."));
     }
@@ -59,5 +57,5 @@
     public override IOperation Apply() {
       ItemArray<DoubleValue> qualities = QualityParameter.ActualValue;
-      ItemArray<Schedule> solutions = SchedulingSolutionParameter.ActualValue;
+      ItemArray<Schedule> solutions = ScheduleParameter.ActualValue;
       ResultCollection results = ResultsParameter.ActualValue;
       bool max = MaximizationParameter.ActualValue.Value;
@@ -79,5 +77,5 @@
       if (bestSolution == null) {
         bestSolution = (Schedule)solutions[i].Clone();
-        bestSolution.Quality.Value = qualities [i].Value;
+        bestSolution.Quality = (DoubleValue)qualities[i].Clone();
         BestSolutionParameter.ActualValue = bestSolution;
         results.Add(new Result("Best Scheduling Solution", bestSolution));
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Analyzers/SchedulingAnalyzer.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Analyzers/SchedulingAnalyzer.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Analyzers/SchedulingAnalyzer.cs	(revision 6406)
@@ -20,19 +20,15 @@
 #endregion
 
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.ScheduleEncoding;
 using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
-using HeuristicLab.Data;
-using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Common;
-using HeuristicLab.Encodings.SchedulingEncoding;
 
-namespace HeuristicLab.Problems.Scheduling.Analyzers {
-  [Item("Scheduling Analyzer", "Represents the generalized form of Analyzers for Scheduling Problems.")]
+namespace HeuristicLab.Problems.Scheduling {
+  [Item("SchedulingAnalyzer", "Represents the generalized form of Analyzers for Scheduling Problems.")]
   [StorableClass]
   public abstract class SchedulingAnalyzer : SingleSuccessorOperator, IAnalyzer {
@@ -62,13 +58,14 @@
       get { return (LookupParameter<Schedule>)Parameters["BestKnownSolution"]; }
     }
-    public ScopeTreeLookupParameter<Schedule> SchedulingSolutionParameter {
-      get { return (ScopeTreeLookupParameter<Schedule>)Parameters["DecodedSchedulingSolution"]; }
+    public ScopeTreeLookupParameter<Schedule> ScheduleParameter {
+      get { return (ScopeTreeLookupParameter<Schedule>)Parameters["Schedule"]; }
     }
     #endregion
 
-    public SchedulingAnalyzer () : base() {
+    public SchedulingAnalyzer()
+      : base() {
       Parameters.Add(new LookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem."));
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The qualities of the JSSP solutions which should be analyzed."));
-      Parameters.Add(new ScopeTreeLookupParameter<Schedule>("DecodedSchedulingSolution", "The solutions from which the best solution has to be chosen from."));
+      Parameters.Add(new ScopeTreeLookupParameter<Schedule>("Schedule", "The solutions from which the best solution has to be chosen from."));
       Parameters.Add(new LookupParameter<Schedule>("BestSolution", "The best JSSP solution."));
       Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the best JSSP solution should be stored."));
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Decoders/GTAlgorithmUtils.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Decoders/GTAlgorithmUtils.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Decoders/GTAlgorithmUtils.cs	(revision 6406)
@@ -1,10 +1,28 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Encodings.SchedulingEncoding;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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 HeuristicLab.Core;
+using HeuristicLab.Encodings.ScheduleEncoding;
 
-namespace HeuristicLab.Problems.Scheduling.Decoders {
+namespace HeuristicLab.Problems.Scheduling {
   public static class GTAlgorithmUtils {
 
@@ -45,7 +63,7 @@
       return result;
     }
-    
+
     public static double ComputeEarliestStartTime(Task t, Schedule schedule) {
-      ScheduledTask previousTask = schedule.GetLastScheduledTaskForJobNr (t.JobNr.Value);
+      ScheduledTask previousTask = schedule.GetLastScheduledTaskForJobNr(t.JobNr.Value);
       Resource affectedResource = schedule.Resources[t.ResourceNr.Value];
       double lastMachineEndTime = affectedResource.TotalDuration.Value;
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMDecoder.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMDecoder.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMDecoder.cs	(revision 6406)
@@ -20,36 +20,19 @@
 #endregion
 
-using System;
 using System.Collections.Generic;
 using System.Linq;
-using System.Text;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Common;
-using HeuristicLab.Data;
 using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Encodings.ScheduleEncoding;
+using HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix;
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
-using HeuristicLab.Encodings.SchedulingEncoding.JobSequenceMatrix;
-using HeuristicLab.Encodings.SchedulingEncoding;
-using HeuristicLab.Problems.Scheduling.Interfaces;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
-namespace HeuristicLab.Problems.Scheduling.Decoders {
-  [Item("Job Sequence Matrix Decoder", "Applies the GifflerThompson algorithm to create an active schedule from a JobSequence Matrix.")]
+namespace HeuristicLab.Problems.Scheduling {
+  [Item("JobSequenceMatrixDecoder", "Applies the GifflerThompson algorithm to create an active schedule from a JobSequence Matrix.")]
   [StorableClass]
-  public class JSMDecoder : SchedulingDecoder<JSMEncoding>, IStochasticOperator, IJSSPOperator {
-    [StorableConstructor]
-    protected JSMDecoder(bool deserializing) : base(deserializing) { }
-    protected JSMDecoder(JSMDecoder original, Cloner cloner)
-      : base(original, cloner) {
-        this.resultingSchedule = cloner.Clone(original.resultingSchedule);
-        this.jobs = cloner.Clone(original.jobs);
-        this.decodingErrorPolicy = original.decodingErrorPolicy;
-        this.forcingStrategy = original.forcingStrategy;
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new JSMDecoder(this, cloner);
-    }
-
+  public class JSMDecoder : ScheduleDecoder<JSMEncoding>, IStochasticOperator, IJSSPOperator {
     public ILookupParameter<IRandom> RandomParameter {
       get { return (LookupParameter<IRandom>)Parameters["Random"]; }
@@ -70,6 +53,19 @@
 
     [Storable]
-    private JSMForcingStrategyTypes forcingStrategy = JSMForcingStrategyTypes.ShiftForcing; 
+    private JSMForcingStrategyTypes forcingStrategy = JSMForcingStrategyTypes.ShiftForcing;
     #endregion
+
+    [StorableConstructor]
+    protected JSMDecoder(bool deserializing) : base(deserializing) { }
+    protected JSMDecoder(JSMDecoder original, Cloner cloner)
+      : base(original, cloner) {
+      this.resultingSchedule = cloner.Clone(original.resultingSchedule);
+      this.jobs = cloner.Clone(original.jobs);
+      this.decodingErrorPolicy = original.decodingErrorPolicy;
+      this.forcingStrategy = original.forcingStrategy;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JSMDecoder(this, cloner);
+    }
 
     public JSMDecoder()
@@ -77,11 +73,12 @@
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
       Parameters.Add(new LookupParameter<ItemList<Job>>("JobData", "Job data taken from the Schedulingproblem - Instance."));
+      ScheduleEncodingParameter.ActualName = "JobSequenceMatrix";
     }
 
-    
+
     private Task SelectTaskFromConflictSet(int conflictedResourceNr, int progressOnConflictedResource, ItemList<Task> conflictSet, ItemList<Permutation> jsm) {
       if (conflictSet.Count == 1)
         return conflictSet[0];
-      
+
       //get solutionCandidate from jobSequencingMatrix
       int solutionCandidateJobNr = jsm[conflictedResourceNr][progressOnConflictedResource];
@@ -104,5 +101,5 @@
     }
     private Task ApplyDecodingErrorPolicy(ItemList<Task> conflictSet, Permutation resource, int progress) {
-      if (decodingErrorPolicy == JSMDecodingErrorPolicyTypes.RandomPolicy) { 
+      if (decodingErrorPolicy == JSMDecodingErrorPolicyTypes.RandomPolicy) {
         //Random
         return conflictSet[RandomParameter.ActualValue.Next(conflictSet.Count - 1)];
@@ -118,5 +115,5 @@
         }
         return conflictSet[RandomParameter.ActualValue.Next(conflictSet.Count - 1)];
-      }    
+      }
     }
     private void ApplyForcingStrategy(ItemList<Permutation> jsm, int conflictedResource, int newResolutionIndex, int progressOnResource, int newResolution) {
@@ -132,9 +129,9 @@
           asList.Insert(progressOnResource, newResolution);
         } else {
-          asList.Insert(progressOnResource, newResolution); 
+          asList.Insert(progressOnResource, newResolution);
           asList.RemoveAt(newResolutionIndex);
         }
-        jsm[conflictedResource] = new Permutation (PermutationTypes.Absolute, asList.ToArray<int>());
-      } 
+        jsm[conflictedResource] = new Permutation(PermutationTypes.Absolute, asList.ToArray<int>());
+      }
     }
 
@@ -143,5 +140,5 @@
 
       jobs = (ItemList<Job>)jobData.Clone();
-      resultingSchedule = new Schedule(new IntValue(jobs[0].Tasks.Count));
+      resultingSchedule = new Schedule(jobs[0].Tasks.Count);
 
       //Reset scheduled tasks in result
@@ -186,5 +183,5 @@
     public override IOperation Apply() {
       return base.Apply();
-    }    
+    }
   }
 }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMDecodingErrorPolicyTypes.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMDecodingErrorPolicyTypes.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMDecodingErrorPolicyTypes.cs	(revision 6406)
@@ -1,8 +1,23 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace HeuristicLab.Problems.Scheduling.Decoders {
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+namespace HeuristicLab.Problems.Scheduling {
   public enum JSMDecodingErrorPolicyTypes {
     RandomPolicy,
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMForcingStrategyTypes.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMForcingStrategyTypes.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Decoders/JSMForcingStrategyTypes.cs	(revision 6406)
@@ -1,8 +1,24 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
 
-namespace HeuristicLab.Problems.Scheduling.Decoders {
+namespace HeuristicLab.Problems.Scheduling {
   public enum JSMForcingStrategyTypes {
     ShiftForcing,
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Decoders/PRVDecoder.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Decoders/PRVDecoder.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Decoders/PRVDecoder.cs	(revision 6406)
@@ -20,182 +20,174 @@
 #endregion
 
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Common;
-using HeuristicLab.Data;
-using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Encodings.ScheduleEncoding;
+using HeuristicLab.Encodings.ScheduleEncoding.PriorityRulesVector;
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
-using HeuristicLab.Problems.Scheduling.Interfaces;
-using HeuristicLab.Encodings.SchedulingEncoding.PriorityRulesVector;
-using HeuristicLab.Encodings.SchedulingEncoding;
-
-namespace HeuristicLab.Problems.Scheduling.Decoders {
-  [Item("Job Sequencing Matrix Decoder", "Applies the GifflerThompson algorithm to create an active schedule from a JobSequencing Matrix.")]
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.Scheduling {
+  [Item("JobSequencingMatrixDecoder", "Applies the GifflerThompson algorithm to create an active schedule from a JobSequencing Matrix.")]
   [StorableClass]
-  public class PRVDecoder : SchedulingDecoder<PRVEncoding>, IStochasticOperator, IJSSPOperator {
+  public class PRVDecoder : ScheduleDecoder<PRVEncoding>, IStochasticOperator, IJSSPOperator {
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
+    public ILookupParameter<ItemList<Job>> JobDataParameter {
+      get { return (LookupParameter<ItemList<Job>>)Parameters["JobData"]; }
+    }
+
+    #region Private Members
+    [Storable]
+    private Schedule resultingSchedule;
+
+    [Storable]
+    private ItemList<Job> jobs;
+    #endregion
+
+    #region Priority Rules
+    //smallest number of remaining tasks
+    private Task FILORule(ItemList<Task> tasks) {
+      Task currentResult = tasks[tasks.Count - 1];
+      return currentResult;
+    }
+
+    //earliest start time
+    private Task ESTRule(ItemList<Task> tasks) {
+      Task currentResult = RandomRule(tasks);
+      double currentEST = double.MaxValue;
+      foreach (Task t in tasks) {
+        double est = GTAlgorithmUtils.ComputeEarliestStartTime(t, resultingSchedule);
+        if (est < currentEST) {
+          currentEST = est;
+          currentResult = t;
+        }
+      }
+      return currentResult;
+    }
+
+    //shortest processingtime
+    private Task SPTRule(ItemList<Task> tasks) {
+      Task currentResult = RandomRule(tasks);
+      foreach (Task t in tasks) {
+        if (t.Duration.Value < currentResult.Duration.Value)
+          currentResult = t;
+      }
+      return currentResult;
+    }
+
+    //longest processing time    
+    private Task LPTRule(ItemList<Task> tasks) {
+      Task currentResult = RandomRule(tasks);
+      foreach (Task t in tasks) {
+        if (t.Duration.Value > currentResult.Duration.Value)
+          currentResult = t;
+      }
+      return currentResult;
+    }
+
+    //most work remaining
+    private Task MWRRule(ItemList<Task> tasks) {
+      Task currentResult = RandomRule(tasks);
+      double currentLargestRemainingProcessingTime = 0;
+      foreach (Task t in tasks) {
+        double remainingProcessingTime = 0;
+        foreach (Task jt in jobs[t.JobNr.Value].Tasks) {
+          if (!jt.IsScheduled.Value)
+            remainingProcessingTime += jt.Duration.Value;
+        }
+        if (remainingProcessingTime > currentLargestRemainingProcessingTime) {
+          currentLargestRemainingProcessingTime = remainingProcessingTime;
+          currentResult = t;
+        }
+      }
+      return currentResult;
+    }
+
+    //least work remaining
+    private Task LWRRule(ItemList<Task> tasks) {
+      Task currentResult = RandomRule(tasks);
+      double currentSmallestRemainingProcessingTime = double.MaxValue;
+      foreach (Task t in tasks) {
+        double remainingProcessingTime = 0;
+        foreach (Task jt in jobs[t.JobNr.Value].Tasks) {
+          if (!jt.IsScheduled.Value)
+            remainingProcessingTime += jt.Duration.Value;
+        }
+        if (remainingProcessingTime < currentSmallestRemainingProcessingTime) {
+          currentSmallestRemainingProcessingTime = remainingProcessingTime;
+          currentResult = t;
+        }
+      }
+      return currentResult;
+    }
+
+    //most operations remaining
+    private Task MORRule(ItemList<Task> tasks) {
+      Task currentResult = RandomRule(tasks);
+      int currentLargestNrOfRemainingTasks = 0;
+      foreach (Task t in tasks) {
+        int nrOfRemainingTasks = 0;
+        foreach (Task jt in jobs[t.JobNr.Value].Tasks) {
+          if (!jt.IsScheduled.Value)
+            nrOfRemainingTasks++;
+        }
+        if (currentLargestNrOfRemainingTasks < nrOfRemainingTasks) {
+          currentLargestNrOfRemainingTasks = nrOfRemainingTasks;
+          currentResult = t;
+        }
+      }
+      return currentResult;
+    }
+
+    //least operationsremaining
+    private Task LORRule(ItemList<Task> tasks) {
+      Task currentResult = RandomRule(tasks);
+      int currentSmallestNrOfRemainingTasks = int.MaxValue;
+      foreach (Task t in tasks) {
+        int nrOfRemainingTasks = 0;
+        foreach (Task jt in jobs[t.JobNr.Value].Tasks) {
+          if (!jt.IsScheduled.Value)
+            nrOfRemainingTasks++;
+        }
+        if (currentSmallestNrOfRemainingTasks > nrOfRemainingTasks) {
+          currentSmallestNrOfRemainingTasks = nrOfRemainingTasks;
+          currentResult = t;
+        }
+      }
+      return currentResult;
+    }
+
+    //first operation in Queue
+    private Task FIFORule(ItemList<Task> tasks) {
+      Task currentResult = tasks[0];
+      return currentResult;
+    }
+
+    //random
+    private Task RandomRule(ItemList<Task> tasks) {
+      Task currentResult = tasks[RandomParameter.ActualValue.Next(tasks.Count)];
+      return currentResult;
+    }
+
+    #endregion
+
     [StorableConstructor]
     protected PRVDecoder(bool deserializing) : base(deserializing) { }
     protected PRVDecoder(PRVDecoder original, Cloner cloner)
       : base(original, cloner) {
-        this.resultingSchedule = cloner.Clone(original.resultingSchedule);
+      this.resultingSchedule = cloner.Clone(original.resultingSchedule);
     }
     public override IDeepCloneable Clone(Cloner cloner) {
       return new PRVDecoder(this, cloner);
     }
-
-    public ILookupParameter<IRandom> RandomParameter {
-      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
-    }
-    public ILookupParameter<ItemList<Job>> JobDataParameter {
-      get { return (LookupParameter<ItemList<Job>>)Parameters["JobData"]; }
-    }
-
-    #region Private Members
-    [Storable]
-    private Schedule resultingSchedule;
-
-    [Storable]
-    private ItemList<Job> jobs;
-    #endregion
-
-    #region Priority Rules
-    //smallest number of remaining tasks
-    private Task FILORule(ItemList<Task> tasks) {
-      Task currentResult = tasks[tasks.Count-1];
-      return currentResult;
-    }
-
-    //earliest start time
-    private Task ESTRule(ItemList<Task> tasks) {
-      Task currentResult = RandomRule(tasks);
-      double currentEST = double.MaxValue;
-      foreach (Task t in tasks) {
-        double est = GTAlgorithmUtils.ComputeEarliestStartTime(t, resultingSchedule);
-        if (est < currentEST) {
-          currentEST = est;
-          currentResult = t;
-        }
-      }
-      return currentResult;
-    }
-   
-    //shortest processingtime
-    private Task SPTRule(ItemList<Task> tasks) {
-      Task currentResult = RandomRule(tasks);
-      foreach (Task t in tasks) {
-        if (t.Duration.Value < currentResult.Duration.Value)
-          currentResult = t;
-      }
-      return currentResult;
-    }
-
-    //longest processing time    
-    private Task LPTRule(ItemList<Task> tasks) {
-      Task currentResult = RandomRule(tasks);
-      foreach (Task t in tasks) {
-        if (t.Duration.Value > currentResult.Duration.Value)
-          currentResult = t;
-      }
-      return currentResult;
-    } 
-
-    //most work remaining
-    private Task MWRRule(ItemList<Task> tasks) {
-      Task currentResult = RandomRule(tasks);
-      double currentLargestRemainingProcessingTime = 0;
-      foreach (Task t in tasks) {
-        double remainingProcessingTime = 0;
-        foreach (Task jt in jobs[t.JobNr.Value].Tasks) {
-          if (!jt.IsScheduled.Value)
-            remainingProcessingTime += jt.Duration.Value;
-        }
-        if (remainingProcessingTime > currentLargestRemainingProcessingTime) {
-          currentLargestRemainingProcessingTime = remainingProcessingTime;
-          currentResult = t;
-        }
-      }
-      return currentResult;
-    }
-   
-    //least work remaining
-    private Task LWRRule(ItemList<Task> tasks) {
-      Task currentResult = RandomRule(tasks);
-      double currentSmallestRemainingProcessingTime = double.MaxValue;
-      foreach (Task t in tasks) {
-        double remainingProcessingTime = 0;
-        foreach (Task jt in jobs[t.JobNr.Value].Tasks) {
-          if (!jt.IsScheduled.Value)
-            remainingProcessingTime += jt.Duration.Value;
-        }
-        if (remainingProcessingTime < currentSmallestRemainingProcessingTime) {
-          currentSmallestRemainingProcessingTime = remainingProcessingTime;
-          currentResult = t;
-        }
-      }
-      return currentResult;
-    }
-
-    //most operations remaining
-    private Task MORRule(ItemList<Task> tasks) {
-      Task currentResult = RandomRule(tasks);
-      int currentLargestNrOfRemainingTasks = 0;
-      foreach (Task t in tasks) {
-        int nrOfRemainingTasks = 0;
-        foreach (Task jt in jobs[t.JobNr.Value].Tasks) {
-          if (!jt.IsScheduled.Value)
-            nrOfRemainingTasks++;
-        }
-        if (currentLargestNrOfRemainingTasks < nrOfRemainingTasks) {
-          currentLargestNrOfRemainingTasks = nrOfRemainingTasks;
-          currentResult = t;
-        }
-      }
-      return currentResult;
-    }
-    
-    //least operationsremaining
-    private Task LORRule(ItemList<Task> tasks) {
-      Task currentResult = RandomRule(tasks);
-      int currentSmallestNrOfRemainingTasks = int.MaxValue;
-      foreach (Task t in tasks) {
-        int nrOfRemainingTasks = 0;
-        foreach (Task jt in jobs[t.JobNr.Value].Tasks) {
-          if (!jt.IsScheduled.Value)
-            nrOfRemainingTasks++;
-        }
-        if (currentSmallestNrOfRemainingTasks > nrOfRemainingTasks) {
-          currentSmallestNrOfRemainingTasks = nrOfRemainingTasks;
-          currentResult = t;
-        }
-      }
-      return currentResult;
-    }
-                
-    //first operation in Queue
-    private Task FIFORule(ItemList<Task> tasks) {
-      Task currentResult = tasks[0];
-      return currentResult;
-    }
-                  
-    //random
-    private Task RandomRule(ItemList<Task> tasks) {
-      Task currentResult = tasks[RandomParameter.ActualValue.Next(tasks.Count)];
-      return currentResult;
-    }
-
-    #endregion
 
     public PRVDecoder()
       : base() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
-      Parameters.Add(new LookupParameter<ItemList<Job>>("JobData", "Job data taken from the JSSP - Instance."));
-    }
-
-
+      Parameters.Add(new LookupParameter<ItemList<Job>>("JobData", "Job data taken from the SchedulingProblem - Instance."));
+      ScheduleEncodingParameter.ActualName = "PriorityRulesVector";
+    }
 
     private Task SelectTaskFromConflictSet(ItemList<Task> conflictSet, int ruleIndex, int nrOfRules) {
@@ -221,5 +213,5 @@
     public override Schedule CreateScheduleFromEncoding(PRVEncoding solution) {
       jobs = (ItemList<Job>)JobDataParameter.ActualValue.Clone();
-      resultingSchedule = new Schedule(new IntValue(jobs[0].Tasks.Count));
+      resultingSchedule = new Schedule(jobs[0].Tasks.Count);
 
       //Reset scheduled tasks in result
@@ -247,5 +239,5 @@
         //STEP 4 - Adding the selected operation to the current schedule
         selectedTask.IsScheduled.Value = true;
-        double startTime = GTAlgorithmUtils.ComputeEarliestStartTime (selectedTask, resultingSchedule);
+        double startTime = GTAlgorithmUtils.ComputeEarliestStartTime(selectedTask, resultingSchedule);
         resultingSchedule.ScheduleTask(selectedTask.ResourceNr.Value, startTime, selectedTask.Duration.Value, selectedTask.JobNr.Value);
 
@@ -259,5 +251,5 @@
     public override IOperation Apply() {
       return base.Apply();
-    } 
+    }
   }
 }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Decoders/PWRDecoder.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Decoders/PWRDecoder.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Decoders/PWRDecoder.cs	(revision 6406)
@@ -20,22 +20,23 @@
 #endregion
 
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Common;
+using HeuristicLab.Encodings.ScheduleEncoding;
+using HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition;
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
-using HeuristicLab.Data;
-using HeuristicLab.Encodings.SchedulingEncoding;
-using HeuristicLab.Encodings.SchedulingEncoding.PermutationWithRepetition;
-using HeuristicLab.Problems.Scheduling.Interfaces;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
-namespace HeuristicLab.Problems.Scheduling.Decoders {
+namespace HeuristicLab.Problems.Scheduling {
   [Item("PWRDecoder", "An item used to convert a PWR-individual into a generalized schedule.")]
   [StorableClass]
-  public class PWRDecoder : SchedulingDecoder<PWREncoding>, IStochasticOperator, IJSSPOperator {
+  public class PWRDecoder : ScheduleDecoder<PWREncoding>, IStochasticOperator, IJSSPOperator {
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
+    public ILookupParameter<ItemList<Job>> JobDataParameter {
+      get { return (LookupParameter<ItemList<Job>>)Parameters["JobData"]; }
+    }
+
     [StorableConstructor]
     protected PWRDecoder(bool deserializing) : base(deserializing) { }
@@ -47,27 +48,21 @@
     }
 
-    public ILookupParameter<IRandom> RandomParameter {
-      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
-    }
-    public ILookupParameter<ItemList<Job>> JobDataParameter {
-      get { return (LookupParameter<ItemList<Job>>)Parameters["JobData"]; }
-    }
-
     public PWRDecoder()
       : base() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
       Parameters.Add(new LookupParameter<ItemList<Job>>("JobData", "Job data taken from the JSSP - Instance."));
+      ScheduleEncodingParameter.ActualName = "PermutationWithRepetition";
     }
 
     public override Schedule CreateScheduleFromEncoding(PWREncoding solution) {
       ItemList<Job> jobs = (ItemList<Job>)JobDataParameter.ActualValue.Clone();
-      Schedule resultingSchedule = new Schedule(new IntValue(jobs[0].Tasks.Count));
+      Schedule resultingSchedule = new Schedule(jobs[0].Tasks.Count);
       foreach (int jobNr in solution.PermutationWithRepetition) {
         int i = 0;
         while (jobs[jobNr].Tasks[i].IsScheduled.Value) i++;
         Task currentTask = jobs[jobNr].Tasks[i];
-        double startTime = GTAlgorithmUtils.ComputeEarliestStartTime (currentTask, resultingSchedule);
+        double startTime = GTAlgorithmUtils.ComputeEarliestStartTime(currentTask, resultingSchedule);
         currentTask.IsScheduled.Value = true;
-        resultingSchedule.ScheduleTask(currentTask.ResourceNr.Value,startTime, currentTask.Duration.Value, currentTask.JobNr.Value);
+        resultingSchedule.ScheduleTask(currentTask.ResourceNr.Value, startTime, currentTask.Duration.Value, currentTask.JobNr.Value);
       }
       return resultingSchedule;
@@ -76,5 +71,5 @@
     public override IOperation Apply() {
       return base.Apply();
-    } 
+    }
   }
 }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MakespanEvaluator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MakespanEvaluator.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MakespanEvaluator.cs	(revision 6406)
@@ -20,17 +20,11 @@
 #endregion
 
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.ScheduleEncoding;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Common;
-using HeuristicLab.Data;
-using HeuristicLab.Optimization;
-using HeuristicLab.Parameters;
-using HeuristicLab.Encodings.SchedulingEncoding;
 
-namespace HeuristicLab.Problems.Scheduling.Evaluators {
+namespace HeuristicLab.Problems.Scheduling {
   [Item("Makespan Evaluator", "Represents an evaluator using the maximum makespan of a schedule.")]
   [StorableClass]
@@ -45,8 +39,8 @@
     }
 
-    public MakespanEvaluator () : base () { }
+    public MakespanEvaluator() : base() { }
 
     protected override DoubleValue evaluate(Schedule schedule) {
-      DoubleValue quality = new DoubleValue (0);
+      DoubleValue quality = new DoubleValue(0);
       foreach (Resource r in schedule.Resources) {
         if (r.TotalDuration.Value > quality.Value) {
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MeanTardinessEvaluator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MeanTardinessEvaluator.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MeanTardinessEvaluator.cs	(revision 6406)
@@ -20,18 +20,12 @@
 #endregion
 
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.ScheduleEncoding;
+using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Common;
-using HeuristicLab.Data;
-using HeuristicLab.Optimization;
-using HeuristicLab.Parameters;
-using HeuristicLab.Encodings.SchedulingEncoding;
-using HeuristicLab.Problems.Scheduling.Interfaces;
 
-namespace HeuristicLab.Problems.Scheduling.Evaluators {
+namespace HeuristicLab.Problems.Scheduling {
   [Item("Mean tardiness Evaluator", "Represents an evaluator using the mean tardiness of a schedule.")]
   [StorableClass]
@@ -57,5 +51,6 @@
     #endregion
 
-    public MeanTardinessEvaluator() : base() {
+    public MeanTardinessEvaluator()
+      : base() {
       Parameters.Add(new LookupParameter<ItemList<Job>>("JobData", "Jobdata defining the precedence relationships and the duration of the tasks in this JSSP-Instance."));
     }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/SchedulingEvaluationAlgorithm.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/SchedulingEvaluationAlgorithm.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/SchedulingEvaluationAlgorithm.cs	(revision 6406)
@@ -20,27 +20,21 @@
 #endregion
 
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.ScheduleEncoding;
 using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Core;
-using HeuristicLab.Common;
-using HeuristicLab.Optimization;
-using HeuristicLab.Data;
-using HeuristicLab.Parameters;
-using HeuristicLab.Encodings.SchedulingEncoding.Interfaces;
-using HeuristicLab.Encodings.SchedulingEncoding;
 
-namespace HeuristicLab.Problems.Scheduling.Evaluators {
+namespace HeuristicLab.Problems.Scheduling {
   [Item("Scheduling Evaluation Algorithm", "Represents a composition of a decoder and an evaluator for scheduling problems.")]
   [StorableClass]
-  public class SchedulingEvaluationAlgorithm : AlgorithmOperator, ISchedulingEvaluationAlgorithm {
+  public class SchedulingEvaluationAlgorithm : AlgorithmOperator, IScheduleEvaluationAlgorithm {
     [StorableConstructor]
     protected SchedulingEvaluationAlgorithm(bool deserializing) : base(deserializing) { }
     protected SchedulingEvaluationAlgorithm(SchedulingEvaluationAlgorithm original, Cloner cloner)
       : base(original, cloner) {
-        this.evaluator = cloner.Clone(original.evaluator);
+      this.evaluator = cloner.Clone(original.evaluator);
     }
     public override IDeepCloneable Clone(Cloner cloner) {
@@ -60,5 +54,5 @@
     }
 
-    public void InitializeOperatorGraph<T>(SchedulingDecoder<T> decoder) where T: Item, ISchedulingEncoding{
+    public void InitializeOperatorGraph<T>(ScheduleDecoder<T> decoder) where T : Item, IScheduleEncoding {
       OperatorGraph.Operators.Clear();
       OperatorGraph.InitialOperator = decoder;
@@ -68,7 +62,7 @@
     public SchedulingEvaluationAlgorithm()
       : base() {
-        Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality value aka fitness value of the solution."));
-        evaluator = new Placeholder();
-        evaluator.OperatorParameter.ActualName = "SolutionEvaluator";
+      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality value aka fitness value of the solution."));
+      evaluator = new Placeholder();
+      evaluator.OperatorParameter.ActualName = "SolutionEvaluator";
     }
 
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/SchedulingEvaluator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/SchedulingEvaluator.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/SchedulingEvaluator.cs	(revision 6406)
@@ -20,22 +20,17 @@
 #endregion
 
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.ScheduleEncoding;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Optimization;
-using HeuristicLab.Data;
-using HeuristicLab.Common;
-using HeuristicLab.Parameters;
-using System;
-using HeuristicLab.Operators;
-using HeuristicLab.Encodings.SchedulingEncoding.Interfaces;
-using HeuristicLab.Encodings.SchedulingEncoding;
-
-
-namespace HeuristicLab.Problems.Scheduling.Evaluators {
+namespace HeuristicLab.Problems.Scheduling {
   [Item("Scheduling Evaluator", "Represents a evaluator class for standard scheduling problems.")]
   [StorableClass]
-  public abstract class SchedulingEvaluator : SingleSuccessorOperator, ISchedulingEvaluator {
+  public abstract class SchedulingEvaluator : SingleSuccessorOperator, IScheduleEvaluator {
     [StorableConstructor]
     protected SchedulingEvaluator(bool deserializing) : base(deserializing) { }
@@ -48,5 +43,5 @@
     }
     public ILookupParameter<DoubleValue> QualityParameter {
-      get { 
+      get {
         if (Parameters.ContainsKey("Quality"))
           return (ILookupParameter<DoubleValue>)Parameters["Quality"];
@@ -55,19 +50,20 @@
       }
     }
-    public ILookupParameter<Schedule> DecodedSchedulingSolutionParameter {
-      get { return (ILookupParameter<Schedule>)Parameters["DecodedSchedulingSolution"]; }
+    public ILookupParameter<Schedule> ScheduleParameter {
+      get { return (ILookupParameter<Schedule>)Parameters["Schedule"]; }
     }
 
-    public SchedulingEvaluator () : base () {
+    public SchedulingEvaluator()
+      : base() {
       Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality value aka fitness value of the solution."));
-      Parameters.Add(new LookupParameter<Schedule>("DecodedSchedulingSolution", "The decoded scheduling solution represented as generalized schedule."));
+      Parameters.Add(new LookupParameter<Schedule>("Schedule", "The decoded scheduling solution represented as generalized schedule."));
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator."));
     }
 
     protected abstract DoubleValue evaluate(Schedule schedule);
-    
+
     public override IOperation Apply() {
-      Schedule decodedSchedulingSolution = DecodedSchedulingSolutionParameter.ActualValue;
-      QualityParameter.ActualValue = evaluate(decodedSchedulingSolution);
+      Schedule schedule = ScheduleParameter.ActualValue;
+      QualityParameter.ActualValue = evaluate(schedule);
       return base.Apply();
     }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj	(revision 6406)
@@ -59,5 +59,4 @@
     <Compile Include="Evaluators\MakespanEvaluator.cs" />
     <Compile Include="Evaluators\SchedulingEvaluator.cs" />
-    <Compile Include="IndexedTaskList.cs" />
     <Compile Include="Interfaces\IJSSPOperator.cs" />
     <Compile Include="Job.cs" />
@@ -103,7 +102,7 @@
       <Name>HeuristicLab.Encodings.PermutationEncoding-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Encodings.SchedulingEncoding\3.3\HeuristicLab.Encodings.SchedulingEncoding-3.3.csproj">
+    <ProjectReference Include="..\..\HeuristicLab.Encodings.ScheduleEncoding\3.3\HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj">
       <Project>{17F3EF80-B2C3-4B8D-A4D5-BE9CE3BA2606}</Project>
-      <Name>HeuristicLab.Encodings.SchedulingEncoding-3.3</Name>
+      <Name>HeuristicLab.Encodings.ScheduleEncoding-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPOperator.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPOperator.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPOperator.cs	(revision 6406)
@@ -1,12 +1,7 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-using HeuristicLab.Parameters;
+﻿using HeuristicLab.Core;
 
-namespace HeuristicLab.Problems.Scheduling.Interfaces {
+namespace HeuristicLab.Problems.Scheduling {
   public interface IJSSPOperator : IOperator {
-     ILookupParameter<ItemList<Job>> JobDataParameter {get;}
+    ILookupParameter<ItemList<Job>> JobDataParameter { get; }
   }
 }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Job.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Job.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Job.cs	(revision 6406)
@@ -20,13 +20,9 @@
 #endregion
 
-using System;
-using System.Collections.Generic;
-using System.Linq;
 using System.Text;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Common;
+using HeuristicLab.Data;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Data;
-using HeuristicLab.Parameters;
 
 namespace HeuristicLab.Problems.Scheduling {
@@ -34,29 +30,24 @@
   [StorableClass]
   public class Job : Item {
+    [Storable]
+    public DoubleValue DueDate { get; set; }
+    [Storable]
+    public IntValue Index { get; set; }
+    [Storable]
+    public ItemList<Task> Tasks { get; set; }
+
     [StorableConstructor]
     protected Job(bool deserializing) : base(deserializing) { }
     protected Job(Job original, Cloner cloner)
       : base(original, cloner) {
-        this.DueDate = cloner.Clone(original.DueDate);
-        this.Index = cloner.Clone(original.Index);
-        this.Tasks = cloner.Clone(original.Tasks);
+      this.DueDate = cloner.Clone(original.DueDate);
+      this.Index = cloner.Clone(original.Index);
+      this.Tasks = cloner.Clone(original.Tasks);
     }
     public override IDeepCloneable Clone(Cloner cloner) {
       return new Job(this, cloner);
     }
-
-    public DoubleValue DueDate { get; set; }
-
-    public IntValue Index {
-      get;
-      set;
-    }
-    public ItemList<Task> Tasks {
-      get;
-      set;
-    }
-
-
-    public Job(IntValue index, DoubleValue dueDate) : base () {
+    public Job(IntValue index, DoubleValue dueDate)
+      : base() {
       Index = index;
       Tasks = new ItemList<Task>();
@@ -72,5 +63,5 @@
       sb.Append("Job#" + Index + " [ ");
       foreach (Task t in Tasks) {
-        sb.Append(t.ToString () + " ");
+        sb.Append(t.ToString() + " ");
       }
       if (DueDate != null)
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs	(revision 6406)
@@ -22,24 +22,16 @@
 using System;
 using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+using System.IO;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+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.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Core;
-using HeuristicLab.Optimization;
-using HeuristicLab.Common;
-using System.Drawing;
-using HeuristicLab.Data;
-using System.IO;
-using HeuristicLab.Problems.Scheduling.Evaluators;
-using HeuristicLab.Parameters;
-using HeuristicLab.Problems.Scheduling.Analyzers;
 using HeuristicLab.PluginInfrastructure;
-using HeuristicLab.Encodings.SchedulingEncoding;
-using HeuristicLab.Encodings.SchedulingEncoding.Interfaces;
-using HeuristicLab.Encodings.SchedulingEncoding.JobSequenceMatrix;
-using HeuristicLab.Encodings.PermutationEncoding;
-using HeuristicLab.Encodings.SchedulingEncoding.PriorityRulesVector;
-using HeuristicLab.Encodings.SchedulingEncoding.PermutationWithRepetition;
-using HeuristicLab.Problems.Scheduling.Decoders;
 
 namespace HeuristicLab.Problems.Scheduling {
@@ -48,81 +40,74 @@
   [StorableClass]
   public sealed class JobShopSchedulingProblem : SchedulingProblem {
+    #region Parameter Properties
+    public ValueParameter<ItemList<Job>> JobDataParameter {
+      get { return (ValueParameter<ItemList<Job>>)Parameters["JobData"]; }
+    }
+    public OptionalValueParameter<Schedule> BestKnownSolutionParameter {
+      get { return (OptionalValueParameter<Schedule>)Parameters["BestKnownSolution"]; }
+    }
+
+    public ValueParameter<IntValue> JobsParameter {
+      get { return (ValueParameter<IntValue>)Parameters["Jobs"]; }
+    }
+    public ValueParameter<IntValue> ResourcesParameter {
+      get { return (ValueParameter<IntValue>)Parameters["Resources"]; }
+    }
+    public ValueParameter<SchedulingEvaluator> SolutionEvaluatorParameter {
+      get { return (ValueParameter<SchedulingEvaluator>)Parameters["SolutionEvaluator"]; }
+    }
+    public ValueParameter<BoolValue> DueDatesParameter {
+      get { return (ValueParameter<BoolValue>)Parameters["DueDates"]; }
+    }
+    #endregion
+
+    #region Properties
+    public ItemList<Job> JobData {
+      get { return JobDataParameter.Value; }
+      set { JobDataParameter.Value = value; }
+    }
+    public Schedule BestKnownSolution {
+      get { return BestKnownSolutionParameter.Value; }
+      set { BestKnownSolutionParameter.Value = value; }
+    }
+    public IntValue Jobs {
+      get { return JobsParameter.Value; }
+      set { JobsParameter.Value = value; }
+    }
+    public IntValue Resources {
+      get { return ResourcesParameter.Value; }
+      set { ResourcesParameter.Value = value; }
+    }
+    public SchedulingEvaluator SolutionEvaluator {
+      get { return SolutionEvaluatorParameter.Value; }
+      set { SolutionEvaluatorParameter.Value = value; }
+    }
+    public BoolValue DueDates {
+      get { return DueDatesParameter.Value; }
+      set { DueDatesParameter.Value = value; }
+    }
+    #endregion
+
+    public JobShopSchedulingProblem()
+      : base(new SchedulingEvaluationAlgorithm(), new JSMRandomCreator()) {
+      Parameters.Add(new ValueParameter<ItemList<Job>>("JobData", "Jobdata defining the precedence relationships and the duration of the tasks in this JSSP-Instance.", new ItemList<Job>()));
+      Parameters.Add(new OptionalValueParameter<Schedule>("BestKnownSolution", "The best known solution of this JSSP instance."));
+
+      Parameters.Add(new ValueParameter<IntValue>("Jobs", "The number of jobs used in this JSSP instance.", new IntValue()));
+      Parameters.Add(new ValueParameter<IntValue>("Resources", "The number of resources used this JSSP instance.", new IntValue()));
+      Parameters.Add(new ValueParameter<BoolValue>("DueDates", "Determines whether the problem instance uses due dates or not.", new BoolValue()));
+      Parameters.Add(new ValueParameter<SchedulingEvaluator>("SolutionEvaluator", "The evaluator used to determine the quality of a solution.", new MakespanEvaluator()));
+
+      InitializeOperators();
+      InitializeProblemInstance();
+    }
+
     [StorableConstructor]
     private JobShopSchedulingProblem(bool deserializing) : base(deserializing) { }
     private JobShopSchedulingProblem(JobShopSchedulingProblem original, Cloner cloner)
       : base(original, cloner) {
-      this.Jobs = cloner.Clone(original.Jobs);
-      this.Resources = cloner.Clone(original.Resources);
-      this.JobData = cloner.Clone(original.JobData);
-      this.SolutionEvaluator = cloner.Clone(original.SolutionEvaluator);
-      this.DueDates = cloner.Clone(original.DueDates);
     }
     public override IDeepCloneable Clone(Cloner cloner) {
       return new JobShopSchedulingProblem(this, cloner);
-    }
-
-
-    #region Parameter Properties
-    public ValueParameter<ItemList<Job>> JobDataParameter {
-      get { return (ValueParameter<ItemList<Job>>)Parameters["JobData"]; }
-    }
-    public OptionalValueParameter<Schedule> BestKnownSolutionParameter {
-      get { return (OptionalValueParameter<Schedule>)Parameters["BestKnownSolution"]; }
-    }
-
-    public ValueParameter<IntValue> JobsParameter {
-      get { return (ValueParameter<IntValue>)Parameters["Jobs"]; }
-    }
-    public ValueParameter<IntValue> ResourcesParameter {
-      get { return (ValueParameter<IntValue>)Parameters["Resources"]; }
-    }
-    public ValueParameter<SchedulingEvaluator> SolutionEvaluatorParameter {
-      get { return (ValueParameter<SchedulingEvaluator>)Parameters["SolutionEvaluator"]; }
-    }
-    public ValueParameter<BoolValue> DueDatesParameter {
-      get { return (ValueParameter<BoolValue>)Parameters["DueDates"]; }
-    } 
-    #endregion
-
-    #region Properties
-    public ItemList<Job> JobData {
-      get { return JobDataParameter.Value; }
-      set { JobDataParameter.Value = value; }
-    }
-    public Schedule BestKnownSolution {
-      get { return BestKnownSolutionParameter.Value; }
-      set { BestKnownSolutionParameter.Value = value; }
-    }
-    public IntValue Jobs {
-      get { return JobsParameter.Value; }
-      set { JobsParameter.Value = value; }
-    }
-    public IntValue Resources {
-      get { return ResourcesParameter.Value; }
-      set { ResourcesParameter.Value = value; }
-    }
-    public SchedulingEvaluator SolutionEvaluator {
-      get { return SolutionEvaluatorParameter.Value; }
-      set { SolutionEvaluatorParameter.Value = value; }
-    }
-    public BoolValue DueDates {
-      get { return DueDatesParameter.Value; }
-      set { DueDatesParameter.Value = value; }
-    }
-    #endregion
-
-
-    public JobShopSchedulingProblem()
-      : base(new SchedulingEvaluationAlgorithm (), new JSMRandomCreator ()) {
-      Parameters.Add(new ValueParameter<ItemList<Job>>("JobData", "Jobdata defining the precedence relationships and the duration of the tasks in this JSSP-Instance.", new ItemList<Job>()));
-      Parameters.Add(new OptionalValueParameter<Schedule>("BestKnownSolution", "The best known solution of this JSSP instance."));
-
-      Parameters.Add(new ValueParameter<IntValue>("Jobs", "The number of jobs used in this JSSP instance.", new IntValue()));
-      Parameters.Add(new ValueParameter<IntValue>("Resources", "The number of resources used this JSSP instance.", new IntValue()));
-      Parameters.Add(new ValueParameter<BoolValue>("DueDates", "Determines whether the problem instance uses due dates or not.", new BoolValue()));
-      Parameters.Add(new ValueParameter<SchedulingEvaluator>("SolutionEvaluator", "The evaluator used to determine the quality of a solution.", new MakespanEvaluator()));
-
-      InitializeOperators();
-      InitializeProblemInstance();
     }
 
@@ -131,11 +116,15 @@
       InitializeOperators();
     }
+
+    protected override void OnEvaluatorChanged() {
+      base.OnEvaluatorChanged();
+    }
     #endregion
 
     #region Helpers
-    private void InitializeProblemInstance () {
-      Jobs = new IntValue (10); 
-      Resources = new IntValue (10); 
-      BestKnownQuality = new DoubleValue (930);
+    private void InitializeProblemInstance() {
+      Jobs = new IntValue(10);
+      Resources = new IntValue(10);
+      BestKnownQuality = new DoubleValue(930);
       JobData = new ItemList<Job>();
       List<string> data = new List<string>
@@ -167,13 +156,16 @@
       if (SolutionCreator.GetType().Equals(typeof(JSMRandomCreator))) {
         Operators.AddRange(ApplicationManager.Manager.GetInstances<IJSMOperator>());
-        ((SchedulingEvaluationAlgorithm)this.EvaluatorParameter.ActualValue).InitializeOperatorGraph<JSMEncoding>(new JSMDecoder());
+        JSMDecoder decoder = new JSMDecoder();
+        ((SchedulingEvaluationAlgorithm)this.EvaluatorParameter.ActualValue).InitializeOperatorGraph<JSMEncoding>(decoder);
       } else {
         if (SolutionCreator.GetType().Equals(typeof(PRVRandomCreator))) {
           Operators.AddRange(ApplicationManager.Manager.GetInstances<IPRVOperator>());
-          ((SchedulingEvaluationAlgorithm)this.EvaluatorParameter.ActualValue).InitializeOperatorGraph<PRVEncoding>(new PRVDecoder());
+          PRVDecoder decoder = new PRVDecoder();
+          ((SchedulingEvaluationAlgorithm)this.EvaluatorParameter.ActualValue).InitializeOperatorGraph<PRVEncoding>(decoder);
         } else {
           if (SolutionCreator.GetType().Equals(typeof(PWRRandomCreator))) {
             Operators.AddRange(ApplicationManager.Manager.GetInstances<IPWROperator>());
-            ((SchedulingEvaluationAlgorithm)this.EvaluatorParameter.ActualValue).InitializeOperatorGraph<PWREncoding>(new PWRDecoder());
+            PWRDecoder decoder = new PWRDecoder();
+            ((SchedulingEvaluationAlgorithm)this.EvaluatorParameter.ActualValue).InitializeOperatorGraph<PWREncoding>(decoder);
           }
         }
@@ -197,11 +189,11 @@
     }
     private int[] GetIntArray(List<string> data) {
-      int[] arr = new int [data.Count];
-      for (int i = 0; i < data.Count; i++ ) {
+      int[] arr = new int[data.Count];
+      for (int i = 0; i < data.Count; i++) {
         arr[i] = Int32.Parse(data[i]);
       }
       return arr;
     }
-    private Job CreateJobFromData (List<string> data, int jobCount)   {
+    private Job CreateJobFromData(List<string> data, int jobCount) {
       DoubleValue dueDate = null;
       int dataCount = data.Count;
@@ -233,11 +225,11 @@
         if (data.Count > 0 && ((int)data[0][0] >= 48 && (int)data[0][0] <= 57)) {
           int jobCount = 0;
-          Jobs = new IntValue (Int32.Parse(data[0]));
-          Resources = new IntValue (Int32.Parse(data[1]));
+          Jobs = new IntValue(Int32.Parse(data[0]));
+          Resources = new IntValue(Int32.Parse(data[1]));
           //data[2] = bestKnownQuality (double)
           //data[3] = dueDates (0|1)
           DueDates.Value = false;
           if (data.Count > 2)
-            BestKnownQualityParameter.ActualValue = new DoubleValue(Double.Parse (data[2]));
+            BestKnownQualityParameter.ActualValue = new DoubleValue(Double.Parse(data[2]));
           if (data.Count > 3 && data[3] == "1")
             DueDates.Value = true;
@@ -265,5 +257,5 @@
       JSMEncoding solution = new JSMEncoding();
       while (!solutionFile.EndOfStream && !solutionFound) {
-        
+
         string line = solutionFile.ReadLine();
         List<string> data = SplitString(line);
@@ -274,5 +266,5 @@
           data = SplitString(line);
           while (data != null && data.Count > 0 && ((int)data[0][0] >= 48 && (int)data[0][0] <= 57)) {
-            Permutation p = new Permutation(PermutationTypes.Absolute, GetIntArray (data));
+            Permutation p = new Permutation(PermutationTypes.Absolute, GetIntArray(data));
             solution.JobSequenceMatrix.Add(p);
 
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Plugin.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Plugin.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Plugin.cs	(revision 6406)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Problems.Scheduling {
-  [Plugin("HeuristicLab.Problems.Scheduling", "3.3.3.6293")]
+  [Plugin("HeuristicLab.Problems.Scheduling", "3.3.3.6364")]
   [PluginFile("HeuristicLab.Problems.Scheduling-3.3.dll", PluginFileType.Assembly)]
   public class HeuristicLabProblemsSchedulingPlugin : PluginBase {
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/SchedulingProblem.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/SchedulingProblem.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/SchedulingProblem.cs	(revision 6406)
@@ -20,18 +20,14 @@
 #endregion
 
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.ScheduleEncoding;
 using HeuristicLab.Optimization;
-using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Common;
-using HeuristicLab.Encodings.SchedulingEncoding.Interfaces;
 
 namespace HeuristicLab.Problems.Scheduling {
-  [Item("Scheduling Problem", "Abstract class that represents a Scheduling Problem")]
+  [Item("SchedulingProblem", "Abstract class that represents a Scheduling Problem")]
   [StorableClass]
-  public abstract class SchedulingProblem : SingleObjectiveHeuristicOptimizationProblem<ISchedulingEvaluationAlgorithm, ISchedulingCreator> {
+  public abstract class SchedulingProblem : SingleObjectiveHeuristicOptimizationProblem<IScheduleEvaluationAlgorithm, IScheduleCreator> {
     [StorableConstructor]
     protected SchedulingProblem(bool deserializing) : base(deserializing) { }
@@ -40,5 +36,5 @@
     }
 
-    protected SchedulingProblem (ISchedulingEvaluationAlgorithm se, ISchedulingCreator sc) : base (se, sc) {}
+    protected SchedulingProblem(IScheduleEvaluationAlgorithm se, IScheduleCreator sc) : base(se, sc) { }
 
   }
Index: /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Task.cs
===================================================================
--- /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Task.cs	(revision 6405)
+++ /branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Task.cs	(revision 6406)
@@ -20,12 +20,9 @@
 #endregion
 
-using System;
-using System.Collections.Generic;
-using System.Linq;
 using System.Text;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Core;
-using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.Scheduling {
@@ -33,4 +30,15 @@
   [StorableClass]
   public class Task : Item {
+    [Storable]
+    public IntValue TaskNr { get; set; }
+    [Storable]
+    public IntValue ResourceNr { get; set; }
+    [Storable]
+    public IntValue JobNr { get; set; }
+    [Storable]
+    public DoubleValue Duration { get; set; }
+    [Storable]
+    public BoolValue IsScheduled { get; set; }
+
     [StorableConstructor]
     protected Task(bool deserializing) : base(deserializing) { }
@@ -48,16 +56,10 @@
 
 
-    public IntValue TaskNr { get; set; }
-    public IntValue ResourceNr { get; set; }
-    public IntValue JobNr { get; set; }
-    public DoubleValue Duration { get; set; }
-    public BoolValue IsScheduled { get; set; }
-
-
-    public Task (int taskNr, int resNr, int jobNr, double duration) : base () {
-      Duration = new DoubleValue (duration);
-      ResourceNr = new IntValue (resNr);
-      JobNr = new IntValue (jobNr);
-      TaskNr = new IntValue (taskNr);
+    public Task(int taskNr, int resNr, int jobNr, double duration)
+      : base() {
+      Duration = new DoubleValue(duration);
+      ResourceNr = new IntValue(resNr);
+      JobNr = new IntValue(jobNr);
+      TaskNr = new IntValue(taskNr);
       IsScheduled = new BoolValue(false);
     }
Index: /branches/Scheduling/HeuristicLab/3.3/Files.txt
===================================================================
--- /branches/Scheduling/HeuristicLab/3.3/Files.txt	(revision 6405)
+++ /branches/Scheduling/HeuristicLab/3.3/Files.txt	(revision 6406)
@@ -33,6 +33,6 @@
 HeuristicLab.Encodings.PermutationEncoding\3.3:HeuristicLab.Encodings.PermutationEncoding-3.3.dll
 HeuristicLab.Encodings.PermutationEncoding.Views\3.3:HeuristicLab.Encodings.PermutationEncoding.Views-3.3.dll
-HeuristicLab.Encodings.SchedulingEncoding\3.3:HeuristicLab.Encodings.SchedulingEncoding-3.3.dll
-HeuristicLab.Encodings.SchedulingEncoding.Views\3.3:HeuristicLab.Encodings.SchedulingEncoding.Views-3.3.dll
+HeuristicLab.Encodings.ScheduleEncoding\3.3:HeuristicLab.Encodings.ScheduleEncoding-3.3.dll
+HeuristicLab.Encodings.ScheduleEncoding.Views\3.3:HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.dll
 HeuristicLab.Encodings.RealVectorEncoding\3.3:HeuristicLab.Encodings.RealVectorEncoding-3.3.dll
 HeuristicLab.Encodings.SymbolicExpressionTreeEncoding\3.3:HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.3.dll
Index: /branches/Scheduling/HeuristicLab/3.3/Tests/HeuristicLab-3.3.Tests.csproj
===================================================================
--- /branches/Scheduling/HeuristicLab/3.3/Tests/HeuristicLab-3.3.Tests.csproj	(revision 6405)
+++ /branches/Scheduling/HeuristicLab/3.3/Tests/HeuristicLab-3.3.Tests.csproj	(revision 6406)
@@ -252,12 +252,4 @@
       <Name>HeuristicLab.Encodings.RealVectorEncoding-3.3</Name>
     </ProjectReference>
-    <ProjectReference Include="..\..\..\HeuristicLab.Encodings.SchedulingEncoding.Views\3.3\HeuristicLab.Encodings.SchedulingEncoding.Views-3.3.csproj">
-      <Project>{0C378762-D5DB-488A-8931-2BA42B1B7CBF}</Project>
-      <Name>HeuristicLab.Encodings.SchedulingEncoding.Views-3.3</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\..\HeuristicLab.Encodings.SchedulingEncoding\3.3\HeuristicLab.Encodings.SchedulingEncoding-3.3.csproj">
-      <Project>{17F3EF80-B2C3-4B8D-A4D5-BE9CE3BA2606}</Project>
-      <Name>HeuristicLab.Encodings.SchedulingEncoding-3.3</Name>
-    </ProjectReference>
     <ProjectReference Include="..\..\..\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views\3.3\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.3.csproj">
       <Project>{6F42C5F8-16CD-43EE-8208-FD4573A69D85}</Project>
