Index: branches/Scheduling/HeuristicLab 3.3.sln
===================================================================
--- branches/Scheduling/HeuristicLab 3.3.sln	(revision 6118)
+++ branches/Scheduling/HeuristicLab 3.3.sln	(revision 6121)
@@ -396,4 +396,8 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Operators.Views.GraphVisualization.Views-3.3", "HeuristicLab.Operators.Views.GraphVisualization.Views\3.3\HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj", "{0C39A349-1979-419A-89BD-E4E2F26BD287}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.Scheduling-3.3", "HeuristicLab.Problems.Scheduling\3.3\HeuristicLab.Problems.Scheduling-3.3.csproj", "{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.Scheduling.Views-3.3", "HeuristicLab.Problems.Scheduling.Views\3.3\HeuristicLab.Problems.Scheduling.Views-3.3.csproj", "{78763A4E-E163-48C2-98EB-709760D06F25}"
 EndProject
 Global
@@ -1850,4 +1854,20 @@
 		{0C39A349-1979-419A-89BD-E4E2F26BD287}.Release|x86.ActiveCfg = Release|x86
 		{0C39A349-1979-419A-89BD-E4E2F26BD287}.Release|x86.Build.0 = Release|x86
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Release|x64.ActiveCfg = Release|Any CPU
+		{2BF1D639-1A74-44ED-AAAD-41ECD395AD93}.Release|x86.ActiveCfg = Release|Any CPU
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Release|Any CPU.Build.0 = Release|Any CPU
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Release|x64.ActiveCfg = Release|Any CPU
+		{78763A4E-E163-48C2-98EB-709760D06F25}.Release|x86.ActiveCfg = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
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 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj	(revision 6121)
@@ -0,0 +1,188 @@
+﻿<?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>{78763A4E-E163-48C2-98EB-709760D06F25}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.Scheduling.Views</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.Scheduling.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>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <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="JobShopSchedulingProblemView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="JobShopSchedulingProblemView.Designer.cs">
+      <DependentUpon>JobShopSchedulingProblemView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="JSMEncodingView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="JSMEncodingView.Designer.cs">
+      <DependentUpon>JSMEncodingView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="JSSPJobView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="JSSPJobView.Designer.cs">
+      <DependentUpon>JSSPJobView.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>
+    <Compile Include="SchedulingProblemImportDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="SchedulingProblemImportDialog.Designer.cs">
+      <DependentUpon>SchedulingProblemImportDialog.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.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.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.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>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="JobShopSchedulingProblemView.resx">
+      <DependentUpon>JobShopSchedulingProblemView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="JSMEncodingView.resx">
+      <DependentUpon>JSMEncodingView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ScheduleView.resx">
+      <DependentUpon>ScheduleView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="SchedulingProblemImportDialog.resx">
+      <DependentUpon>SchedulingProblemImportDialog.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.Problems.Scheduling.Views/3.3/JSMEncodingView.Designer.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JSMEncodingView.Designer.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JSMEncodingView.Designer.cs	(revision 6121)
@@ -0,0 +1,72 @@
+﻿namespace HeuristicLab.Problems.Scheduling.Views {
+  partial class JSMEncodingView {
+    /// <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.permutationListBox = new System.Windows.Forms.ListBox();
+      ((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(464, 20);
+      // 
+      // infoLabel
+      // 
+      this.infoLabel.Location = new System.Drawing.Point(528, 3);
+      // 
+      // permutationListBox
+      // 
+      this.permutationListBox.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.permutationListBox.FormattingEnabled = true;
+      this.permutationListBox.Location = new System.Drawing.Point(6, 26);
+      this.permutationListBox.Name = "permutationListBox";
+      this.permutationListBox.Size = new System.Drawing.Size(224, 290);
+      this.permutationListBox.TabIndex = 3;
+      // 
+      // JSMEncodingView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.permutationListBox);
+      this.Name = "JSMEncodingView";
+      this.Size = new System.Drawing.Size(547, 325);
+      this.Controls.SetChildIndex(this.permutationListBox, 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 System.Windows.Forms.ListBox permutationListBox;
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JSMEncodingView.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JSMEncodingView.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JSMEncodingView.cs	(revision 6121)
@@ -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;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.Core;
+using HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix;
+using HeuristicLab.Encodings.PermutationEncoding;
+
+namespace HeuristicLab.Problems.Scheduling.Views {
+  [View("JSMEncoding View")]
+  [Content(typeof(JSMEncoding), true)]
+  public partial class JSMEncodingView : NamedItemView {
+    public JSMEncodingView() {
+      InitializeComponent();
+    }
+
+    public new JSMEncoding Content {
+      get { return (JSMEncoding)base.Content; }
+      set { base.Content = value; }
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        permutationListBox.Items.Clear();
+      } else {
+        foreach (Permutation p in Content.JobSequenceMatrix)
+          permutationListBox.Items.Add(p.ToString ());
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      permutationListBox.Enabled = Content != null;
+    }
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JSMEncodingView.resx
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JSMEncodingView.resx	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JSMEncodingView.resx	(revision 6121)
@@ -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.Problems.Scheduling.Views/3.3/JSSPJobView.Designer.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JSSPJobView.Designer.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JSSPJobView.Designer.cs	(revision 6121)
@@ -0,0 +1,32 @@
+﻿namespace HeuristicLab.Problems.Scheduling.Views {
+  partial class JSSPJobView {
+    /// <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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JSSPJobView.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JSSPJobView.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JSSPJobView.cs	(revision 6121)
@@ -0,0 +1,53 @@
+﻿#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;
+using HeuristicLab.Core.Views;
+using HeuristicLab.Data;
+using HeuristicLab.MainForm;
+using HeuristicLab.Parameters;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.Scheduling.Views {
+  [View("Job View")]
+  [Content(typeof(JSSPJob), true)]
+  public partial class JSSPJobView : NamedItemView {
+    public JSSPJobView() {
+      InitializeComponent();
+    }
+
+    public new JSSPJob Content {
+      get { return (JSSPJob)base.Content; }
+      set { base.Content = value; }
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        //parameterCollectionView.Content = null;
+      } else {
+        //parameterCollectionView.Content = ((IParameterizedNamedItem)Content).Parameters;
+      }
+    }
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.Designer.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.Designer.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.Designer.cs	(revision 6121)
@@ -0,0 +1,153 @@
+﻿namespace HeuristicLab.Problems.Scheduling.Views {
+  partial class JobShopSchedulingProblemView {
+    /// <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.importButton = new System.Windows.Forms.Button();
+      this.parameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
+      this.tabControl1 = new System.Windows.Forms.TabControl();
+      this.tabPage1 = new System.Windows.Forms.TabPage();
+      this.tabPage2 = new System.Windows.Forms.TabPage();
+      this.scheduleView1 = new HeuristicLab.Problems.Scheduling.Views.ScheduleView();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.tabControl1.SuspendLayout();
+      this.tabPage1.SuspendLayout();
+      this.tabPage2.SuspendLayout();
+      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(650, 20);
+      // 
+      // infoLabel
+      // 
+      this.infoLabel.Location = new System.Drawing.Point(714, 3);
+      // 
+      // importButton
+      // 
+      this.importButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.importButton.Location = new System.Drawing.Point(6, 26);
+      this.importButton.Name = "importButton";
+      this.importButton.Size = new System.Drawing.Size(724, 23);
+      this.importButton.TabIndex = 3;
+      this.importButton.Text = "Import";
+      this.importButton.UseVisualStyleBackColor = true;
+      this.importButton.Click += new System.EventHandler(this.importButton_Click);
+      // 
+      // parameterCollectionView
+      // 
+      this.parameterCollectionView.AllowEditingOfHiddenParameters = true;
+      this.parameterCollectionView.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.parameterCollectionView.Caption = "ParameterCollection View";
+      this.parameterCollectionView.Content = null;
+      this.parameterCollectionView.Location = new System.Drawing.Point(3, 0);
+      this.parameterCollectionView.Name = "parameterCollectionView";
+      this.parameterCollectionView.ReadOnly = false;
+      this.parameterCollectionView.Size = new System.Drawing.Size(713, 387);
+      this.parameterCollectionView.TabIndex = 4;
+      // 
+      // tabControl1
+      // 
+      this.tabControl1.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.tabControl1.Controls.Add(this.tabPage1);
+      this.tabControl1.Controls.Add(this.tabPage2);
+      this.tabControl1.Location = new System.Drawing.Point(6, 56);
+      this.tabControl1.Name = "tabControl1";
+      this.tabControl1.SelectedIndex = 0;
+      this.tabControl1.Size = new System.Drawing.Size(724, 413);
+      this.tabControl1.TabIndex = 5;
+      // 
+      // tabPage1
+      // 
+      this.tabPage1.Controls.Add(this.parameterCollectionView);
+      this.tabPage1.Location = new System.Drawing.Point(4, 22);
+      this.tabPage1.Name = "tabPage1";
+      this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
+      this.tabPage1.Size = new System.Drawing.Size(716, 387);
+      this.tabPage1.TabIndex = 0;
+      this.tabPage1.Text = "Problem";
+      this.tabPage1.UseVisualStyleBackColor = true;
+      // 
+      // tabPage2
+      // 
+      this.tabPage2.Controls.Add(this.scheduleView1);
+      this.tabPage2.Location = new System.Drawing.Point(4, 22);
+      this.tabPage2.Name = "tabPage2";
+      this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
+      this.tabPage2.Size = new System.Drawing.Size(716, 387);
+      this.tabPage2.TabIndex = 1;
+      this.tabPage2.Text = "Visualization";
+      this.tabPage2.UseVisualStyleBackColor = true;
+      // 
+      // scheduleView1
+      // 
+      this.scheduleView1.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.scheduleView1.Caption = "Schedule View";
+      this.scheduleView1.Content = null;
+      this.scheduleView1.Location = new System.Drawing.Point(0, 6);
+      this.scheduleView1.Name = "scheduleView1";
+      this.scheduleView1.ReadOnly = false;
+      this.scheduleView1.Size = new System.Drawing.Size(716, 381);
+      this.scheduleView1.TabIndex = 0;
+      // 
+      // JobShopSchedulingProblemView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl1);
+      this.Controls.Add(this.importButton);
+      this.Name = "JobShopSchedulingProblemView";
+      this.Size = new System.Drawing.Size(733, 472);
+      this.Controls.SetChildIndex(this.importButton, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.Controls.SetChildIndex(this.tabControl1, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.tabControl1.ResumeLayout(false);
+      this.tabPage1.ResumeLayout(false);
+      this.tabPage2.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button importButton;
+    private Core.Views.ParameterCollectionView parameterCollectionView;
+    private System.Windows.Forms.TabControl tabControl1;
+    private System.Windows.Forms.TabPage tabPage1;
+    private System.Windows.Forms.TabPage tabPage2;
+    private ScheduleView scheduleView1;
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.cs	(revision 6121)
@@ -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;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.Data;
+using HeuristicLab.MainForm;
+using HeuristicLab.Parameters;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.Scheduling.Views {
+  [View("JobShop Scheduling Problem View")]
+  [Content(typeof(JobShopSchedulingProblem), true)]
+  public partial class JobShopSchedulingProblemView : NamedItemView {
+    public JobShopSchedulingProblemView() {
+      InitializeComponent();
+    }
+    private SchedulingProblemImportDialog spImportDialog;
+
+    public new JobShopSchedulingProblem Content {
+      get { return (JobShopSchedulingProblem)base.Content; }
+      set { base.Content = value; }
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        parameterCollectionView.Content = null;
+        scheduleView1.Content = null;
+      } else {
+        parameterCollectionView.Content = ((IParameterizedNamedItem)Content).Parameters;
+        //TODO: display the current best solution in the view
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      parameterCollectionView.Enabled = Content != null;
+      importButton.Enabled = Content != null && !ReadOnly;
+    }
+
+    private void importButton_Click(object sender, EventArgs e) {
+      if (spImportDialog == null) spImportDialog = new SchedulingProblemImportDialog();
+
+      if (spImportDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          switch (spImportDialog.Format) {
+            case SPFormat.ORLib:
+              Content.ImportFromORLibrary(spImportDialog.SPFileName);
+              break;
+          }
+
+          /* TODO: Implement solution-import in problem-class
+          if (!string.IsNullOrEmpty(spImportDialog.OptimalScheduleFileName))
+            Content.ImportSolution(spImportDialog.OptimalScheduleFileName);
+           * */
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, ex);
+        }
+      }
+    }
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.resx
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.resx	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/JobShopSchedulingProblemView.resx	(revision 6121)
@@ -0,0 +1,129 @@
+﻿<?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="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.Problems.Scheduling.Views/3.3/Plugin.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Plugin.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Plugin.cs	(revision 6121)
@@ -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.Problems.Scheduling.Views {
+  [Plugin("HeuristicLab.Problems.Scheduling.Views", "3.3.3.0")]
+  [PluginFile("HeuristicLab.Problems.Scheduling.Views-3.3.dll", PluginFileType.Assembly)]
+  public class HeuristicLabProblemsSchedulingViewsPlugin : PluginBase {
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Plugin.cs.frame
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Plugin.cs.frame	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Plugin.cs.frame	(revision 6121)
@@ -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.Problems.Scheduling.Views {
+  [Plugin("HeuristicLab.Problems.Scheduling.Views", "3.3.3.$WCREV$")]
+  [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 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Properties/AssemblyInfo.cs	(revision 6121)
@@ -0,0 +1,55 @@
+#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.Reflection;
+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.Problems.Scheduling")]
+[assembly: AssemblyDescription("TODO")]
+[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("ABF1DB5E-5774-48AB-B65A-5CF405C0E2A8")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.0")]
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Properties/AssemblyInfo.frame	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/Properties/AssemblyInfo.frame	(revision 6121)
@@ -0,0 +1,55 @@
+#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.Reflection;
+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.Problems.Scheduling")]
+[assembly: AssemblyDescription("TODO")]
+[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("ABF1DB5E-5774-48AB-B65A-5CF405C0E2A8")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/ScheduleView.Designer.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/ScheduleView.Designer.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/ScheduleView.Designer.cs	(revision 6121)
@@ -0,0 +1,75 @@
+﻿namespace HeuristicLab.Problems.Scheduling.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.parameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
+      ((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);
+      // 
+      // parameterCollectionView
+      // 
+      this.parameterCollectionView.AllowEditingOfHiddenParameters = true;
+      this.parameterCollectionView.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.parameterCollectionView.Caption = "ParameterCollection View";
+      this.parameterCollectionView.Content = null;
+      this.parameterCollectionView.Location = new System.Drawing.Point(6, 29);
+      this.parameterCollectionView.Name = "parameterCollectionView";
+      this.parameterCollectionView.ReadOnly = false;
+      this.parameterCollectionView.Size = new System.Drawing.Size(498, 313);
+      this.parameterCollectionView.TabIndex = 3;
+      // 
+      // ScheduleView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.parameterCollectionView);
+      this.Name = "ScheduleView";
+      this.Size = new System.Drawing.Size(529, 345);
+      this.Controls.SetChildIndex(this.parameterCollectionView, 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 Core.Views.ParameterCollectionView parameterCollectionView;
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/ScheduleView.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/ScheduleView.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/ScheduleView.cs	(revision 6121)
@@ -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 System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.Scheduling.Views {
+  [View("Schedule View")]
+  [Content(typeof(Schedule), true)]
+  public partial class ScheduleView : NamedItemView {
+    public ScheduleView() {
+      InitializeComponent();
+    }
+
+    public new Schedule Content {
+      get { return (Schedule)base.Content; }
+      set { base.Content = value; }
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        parameterCollectionView.Content = null;
+      } else {
+        parameterCollectionView.Content = ((IParameterizedNamedItem)Content).Parameters;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      parameterCollectionView.Enabled = Content != null;
+    }
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/ScheduleView.resx
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/ScheduleView.resx	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/ScheduleView.resx	(revision 6121)
@@ -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.Problems.Scheduling.Views/3.3/SchedulingProblemImportDialog.Designer.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/SchedulingProblemImportDialog.Designer.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/SchedulingProblemImportDialog.Designer.cs	(revision 6121)
@@ -0,0 +1,216 @@
+﻿#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.Views {
+  partial class SchedulingProblemImportDialog {
+    /// <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 Windows Form 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.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SchedulingProblemImportDialog));
+      this.okButton = new System.Windows.Forms.Button();
+      this.cancelButton = new System.Windows.Forms.Button();
+      this.openSchedulingProblemFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.spFileLabel = new System.Windows.Forms.Label();
+      this.openSchedulingProblemFileButton = new System.Windows.Forms.Button();
+      this.spFileTextBox = new System.Windows.Forms.TextBox();
+      this.optimalScheduleFileLabel = new System.Windows.Forms.Label();
+      this.openOptimalScheduleFileButton = new System.Windows.Forms.Button();
+      this.optimalScheduleFileTextBox = new System.Windows.Forms.TextBox();
+      this.openOptimalScheduleFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.clearOptimalScheduleButton = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
+      this.okButton.Enabled = false;
+      this.okButton.Location = new System.Drawing.Point(422, 69);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 9;
+      this.okButton.Text = "&OK";
+      this.okButton.UseVisualStyleBackColor = true;
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.cancelButton.Location = new System.Drawing.Point(499, 69);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 10;
+      this.cancelButton.Text = "&Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      // 
+      // openSchedulingProblemFileDialog
+      // 
+      this.openSchedulingProblemFileDialog.DefaultExt = "scp";
+      this.openSchedulingProblemFileDialog.FileName = "scp";
+      this.openSchedulingProblemFileDialog.Filter = "ORLib Format|*.txt";
+      this.openSchedulingProblemFileDialog.Title = "Open Scheduling Problem File";
+      // 
+      // spFileLabel
+      // 
+      this.spFileLabel.AutoSize = true;
+      this.spFileLabel.Location = new System.Drawing.Point(12, 15);
+      this.spFileLabel.Name = "spFileLabel";
+      this.spFileLabel.Size = new System.Drawing.Size(43, 13);
+      this.spFileLabel.TabIndex = 0;
+      this.spFileLabel.Text = "&SP File:";
+      // 
+      // openSchedulingProblemFileButton
+      // 
+      this.openSchedulingProblemFileButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.openSchedulingProblemFileButton.Image = ((System.Drawing.Image)(resources.GetObject("openSchedulingProblemFileButton.Image")));
+      this.openSchedulingProblemFileButton.Location = new System.Drawing.Point(520, 10);
+      this.openSchedulingProblemFileButton.Name = "openSchedulingProblemFileButton";
+      this.openSchedulingProblemFileButton.Size = new System.Drawing.Size(24, 24);
+      this.openSchedulingProblemFileButton.TabIndex = 2;
+      this.openSchedulingProblemFileButton.UseVisualStyleBackColor = true;
+      this.openSchedulingProblemFileButton.Click += new System.EventHandler(this.openSchedulingProblemFileButton_Click);
+      // 
+      // spFileTextBox
+      // 
+      this.spFileTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.spFileTextBox.Enabled = false;
+      this.spFileTextBox.Location = new System.Drawing.Point(136, 12);
+      this.spFileTextBox.Name = "spFileTextBox";
+      this.spFileTextBox.ReadOnly = true;
+      this.spFileTextBox.Size = new System.Drawing.Size(378, 20);
+      this.spFileTextBox.TabIndex = 1;
+      // 
+      // optimalScheduleFileLabel
+      // 
+      this.optimalScheduleFileLabel.AutoSize = true;
+      this.optimalScheduleFileLabel.Location = new System.Drawing.Point(12, 41);
+      this.optimalScheduleFileLabel.Name = "optimalScheduleFileLabel";
+      this.optimalScheduleFileLabel.Size = new System.Drawing.Size(112, 13);
+      this.optimalScheduleFileLabel.TabIndex = 5;
+      this.optimalScheduleFileLabel.Text = "&Optimal Schedule File:";
+      // 
+      // openOptimalScheduleFileButton
+      // 
+      this.openOptimalScheduleFileButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.openOptimalScheduleFileButton.Image = ((System.Drawing.Image)(resources.GetObject("openOptimalScheduleFileButton.Image")));
+      this.openOptimalScheduleFileButton.Location = new System.Drawing.Point(520, 35);
+      this.openOptimalScheduleFileButton.Name = "openOptimalScheduleFileButton";
+      this.openOptimalScheduleFileButton.Size = new System.Drawing.Size(24, 24);
+      this.openOptimalScheduleFileButton.TabIndex = 7;
+      this.openOptimalScheduleFileButton.UseVisualStyleBackColor = true;
+      this.openOptimalScheduleFileButton.Click += new System.EventHandler(this.openOptimalScheduleFileButton_Click);
+      // 
+      // optimalScheduleFileTextBox
+      // 
+      this.optimalScheduleFileTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.optimalScheduleFileTextBox.Enabled = false;
+      this.optimalScheduleFileTextBox.Location = new System.Drawing.Point(136, 38);
+      this.optimalScheduleFileTextBox.Name = "optimalScheduleFileTextBox";
+      this.optimalScheduleFileTextBox.ReadOnly = true;
+      this.optimalScheduleFileTextBox.Size = new System.Drawing.Size(378, 20);
+      this.optimalScheduleFileTextBox.TabIndex = 6;
+      // 
+      // openOptimalScheduleFileDialog
+      // 
+      this.openOptimalScheduleFileDialog.DefaultExt = "opt";
+      this.openOptimalScheduleFileDialog.FileName = "tour";
+      this.openOptimalScheduleFileDialog.Filter = "Optimal Schedule Files|*.opt";
+      this.openOptimalScheduleFileDialog.SupportMultiDottedExtensions = true;
+      this.openOptimalScheduleFileDialog.Title = "Open Optimal Schedule File";
+      // 
+      // clearOptimalScheduleButton
+      // 
+      this.clearOptimalScheduleButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.clearOptimalScheduleButton.Image = ((System.Drawing.Image)(resources.GetObject("clearOptimalScheduleButton.Image")));
+      this.clearOptimalScheduleButton.Location = new System.Drawing.Point(550, 35);
+      this.clearOptimalScheduleButton.Name = "clearOptimalScheduleButton";
+      this.clearOptimalScheduleButton.Size = new System.Drawing.Size(24, 24);
+      this.clearOptimalScheduleButton.TabIndex = 8;
+      this.clearOptimalScheduleButton.UseVisualStyleBackColor = true;
+      this.clearOptimalScheduleButton.Click += new System.EventHandler(this.clearTourFileButton_Click);
+      // 
+      // SchedulingProblemImportDialog
+      // 
+      this.AcceptButton = this.okButton;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.CancelButton = this.cancelButton;
+      this.ClientSize = new System.Drawing.Size(586, 104);
+      this.Controls.Add(this.optimalScheduleFileTextBox);
+      this.Controls.Add(this.spFileTextBox);
+      this.Controls.Add(this.clearOptimalScheduleButton);
+      this.Controls.Add(this.openOptimalScheduleFileButton);
+      this.Controls.Add(this.openSchedulingProblemFileButton);
+      this.Controls.Add(this.optimalScheduleFileLabel);
+      this.Controls.Add(this.spFileLabel);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.okButton);
+      this.HelpButton = true;
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "SchedulingProblemImportDialog";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Import Scheduling Problem";
+      this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.VRPImportDialog_HelpButtonClicked);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button okButton;
+    private System.Windows.Forms.Button cancelButton;
+    private System.Windows.Forms.OpenFileDialog openSchedulingProblemFileDialog;
+    private System.Windows.Forms.Label spFileLabel;
+    private System.Windows.Forms.Button openSchedulingProblemFileButton;
+    private System.Windows.Forms.TextBox spFileTextBox;
+    private System.Windows.Forms.Label optimalScheduleFileLabel;
+    private System.Windows.Forms.Button openOptimalScheduleFileButton;
+    private System.Windows.Forms.TextBox optimalScheduleFileTextBox;
+    private System.Windows.Forms.OpenFileDialog openOptimalScheduleFileDialog;
+    private System.Windows.Forms.Button clearOptimalScheduleButton;
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/SchedulingProblemImportDialog.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/SchedulingProblemImportDialog.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/SchedulingProblemImportDialog.cs	(revision 6121)
@@ -0,0 +1,86 @@
+﻿#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.ComponentModel;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Problems.Scheduling.Views {
+  public enum SPFormat { Empty, ORLib }
+
+  public sealed partial class SchedulingProblemImportDialog : Form {
+    private string spFileName;
+    public string SPFileName {
+      get { return spFileName; }
+    }
+    private string optimalScheduleFileName;
+    public string OptimalScheduleFileName {
+      get { return optimalScheduleFileName; }
+    }
+    private SPFormat format;
+    public SPFormat Format {
+      get { return format; }
+    }
+
+    public SchedulingProblemImportDialog() {
+      InitializeComponent();
+      spFileName = string.Empty;
+      optimalScheduleFileName = string.Empty;
+      format = SPFormat.Empty;
+    }
+
+    private void openSchedulingProblemFileButton_Click(object sender, EventArgs e) {
+      if (openSchedulingProblemFileDialog.ShowDialog(this) == DialogResult.OK) {
+        spFileTextBox.Text = openSchedulingProblemFileDialog.FileName;
+        spFileTextBox.Enabled = true;
+        spFileName = openSchedulingProblemFileDialog.FileName;
+        okButton.Enabled = true;
+
+        optimalScheduleFileTextBox.Text = string.Empty;
+        optimalScheduleFileName = string.Empty;
+
+        format = (SPFormat)(openSchedulingProblemFileDialog.FilterIndex);
+      }
+    }
+    private void openOptimalScheduleFileButton_Click(object sender, EventArgs e) {
+      if (openOptimalScheduleFileDialog.ShowDialog(this) == DialogResult.OK) {
+        optimalScheduleFileTextBox.Text = openOptimalScheduleFileDialog.FileName;
+        optimalScheduleFileTextBox.Enabled = true;
+        optimalScheduleFileName = openOptimalScheduleFileDialog.FileName;
+      }
+    }
+    private void clearTourFileButton_Click(object sender, EventArgs e) {
+      optimalScheduleFileTextBox.Text = string.Empty;
+      optimalScheduleFileTextBox.Enabled = false;
+      optimalScheduleFileName = string.Empty;
+    }
+
+    private void VRPImportDialog_HelpButtonClicked(object sender, CancelEventArgs e) {
+      if (MessageBox.Show("Do you want to open the HeuristicLab wiki website?", "Help",
+        MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == System.Windows.Forms.DialogResult.Yes) {
+          System.Diagnostics.Process.Start("http://dev.heuristiclab.com/trac/hl/core/wiki/Scheduling%20Problem");
+      }
+    }
+
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/SchedulingProblemImportDialog.resx
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/SchedulingProblemImportDialog.resx	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling.Views/3.3/SchedulingProblemImportDialog.resx	(revision 6121)
@@ -0,0 +1,219 @@
+﻿<?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="openSchedulingProblemFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>244, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="openSchedulingProblemFileButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6
+        JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsQAAALEAGtI711AAACeklE
+        QVQ4T6WTWUiUURiG/4suurJIjUIwskQsEANDqosQpUVNKbdCSRPKrQVDMddmXEedGdcpFXNGnUYdrSzF
+        sEIoFInQcqHE1CwoKsXUUMnt6Z+RLMtA8OK5OZz3Oe/5OEcAhPWwpnBaodZZmqfjWmY5GSo98XJNwq9D
+        1yQIilLhFaYIMIQuxZaZJ4uy6FS1T2BUIUKdNsdPhL9pqpEp/ne18PiiE94RCjzDco0C+rs1zIzXGvkx
+        pmNuRI2+XEG9NjV5NYlXuBLP0DzcQwoQaiuUTI9VrQgvfC5irjeSqrJMKovTURcmU5KbxE15HAWyGNH5
+        e/BCtSab6a+a5ZMXxTD9cdAbsir/CG6Xyvj+qcRY2xBurss28lCfRYNOxr3KdPTqFHQlUspV17mVl0Cx
+        Mg5VdqyxjVBZks7k+3wMtYdaJdRXKVkYksJw6kreiWuD8dAXBa8j6Krx5UqwR4WgVqUwMZAJH+Tcr1bQ
+        /ki+tOnPK7wKhA5v5tvcmHnsxNsKOy6ePTohCvYKpXkSvr2RMtyWSL1OzuKgBHpClwRdwWLwNPPtHsy0
+        HGGy6RCjdfuQhllzxsUs1zBMoUiZyGh3LHe02XQ+E5v0RYqC89AZwOLzk8w+Pc5U82HG6h34Um1LR9pm
+        /N2scLAxsTEKVFlx9LQkcVebBQNJ8FKs+8KH2VZ3pp44Md7gyIjejo+a3fTKTZGE7MJ+j0Xj8lPOz4ih
+        tjyT3gfhdOQIy7TLN9Ai20hj8iZqEsxRx1hw4+oO/F13LjraW7ouC3JSo8mRXCAjNoj4y36GyXLO14VT
+        xw7gfNCO/XbW2FpZYLndjK1bTNhmarLyIa3nKxuyPwG9D9E7Fbto+QAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="openOptimalScheduleFileButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6
+        JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsQAAALEAGtI711AAACeklE
+        QVQ4T6WTWUiUURiG/4suurJIjUIwskQsEANDqosQpUVNKbdCSRPKrQVDMddmXEedGdcpFXNGnUYdrSzF
+        sEIoFInQcqHE1CwoKsXUUMnt6Z+RLMtA8OK5OZz3Oe/5OEcAhPWwpnBaodZZmqfjWmY5GSo98XJNwq9D
+        1yQIilLhFaYIMIQuxZaZJ4uy6FS1T2BUIUKdNsdPhL9pqpEp/ne18PiiE94RCjzDco0C+rs1zIzXGvkx
+        pmNuRI2+XEG9NjV5NYlXuBLP0DzcQwoQaiuUTI9VrQgvfC5irjeSqrJMKovTURcmU5KbxE15HAWyGNH5
+        e/BCtSab6a+a5ZMXxTD9cdAbsir/CG6Xyvj+qcRY2xBurss28lCfRYNOxr3KdPTqFHQlUspV17mVl0Cx
+        Mg5VdqyxjVBZks7k+3wMtYdaJdRXKVkYksJw6kreiWuD8dAXBa8j6Krx5UqwR4WgVqUwMZAJH+Tcr1bQ
+        /ki+tOnPK7wKhA5v5tvcmHnsxNsKOy6ePTohCvYKpXkSvr2RMtyWSL1OzuKgBHpClwRdwWLwNPPtHsy0
+        HGGy6RCjdfuQhllzxsUs1zBMoUiZyGh3LHe02XQ+E5v0RYqC89AZwOLzk8w+Pc5U82HG6h34Um1LR9pm
+        /N2scLAxsTEKVFlx9LQkcVebBQNJ8FKs+8KH2VZ3pp44Md7gyIjejo+a3fTKTZGE7MJ+j0Xj8lPOz4ih
+        tjyT3gfhdOQIy7TLN9Ai20hj8iZqEsxRx1hw4+oO/F13LjraW7ouC3JSo8mRXCAjNoj4y36GyXLO14VT
+        xw7gfNCO/XbW2FpZYLndjK1bTNhmarLyIa3nKxuyPwG9D9E7Fbto+QAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <metadata name="openOptimalScheduleFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <data name="clearOptimalScheduleButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
+        DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp
+        bGUAAEjHnZZ3VFTXFofPvXd6oc0wAlKG3rvAANJ7k15FYZgZYCgDDjM0sSGiAhFFRJoiSFDEgNFQJFZE
+        sRAUVLAHJAgoMRhFVCxvRtaLrqy89/Ly++Osb+2z97n77L3PWhcAkqcvl5cGSwGQyhPwgzyc6RGRUXTs
+        AIABHmCAKQBMVka6X7B7CBDJy82FniFyAl8EAfB6WLwCcNPQM4BOB/+fpFnpfIHomAARm7M5GSwRF4g4
+        JUuQLrbPipgalyxmGCVmvihBEcuJOWGRDT77LLKjmNmpPLaIxTmns1PZYu4V8bZMIUfEiK+ICzO5nCwR
+        3xKxRoowlSviN+LYVA4zAwAUSWwXcFiJIjYRMYkfEuQi4uUA4EgJX3HcVyzgZAvEl3JJS8/hcxMSBXQd
+        li7d1NqaQffkZKVwBALDACYrmcln013SUtOZvBwAFu/8WTLi2tJFRbY0tba0NDQzMv2qUP91829K3NtF
+        ehn4uWcQrf+L7a/80hoAYMyJarPziy2uCoDOLQDI3fti0zgAgKSobx3Xv7oPTTwviQJBuo2xcVZWlhGX
+        wzISF/QP/U+Hv6GvvmckPu6P8tBdOfFMYYqALq4bKy0lTcinZ6QzWRy64Z+H+B8H/nUeBkGceA6fwxNF
+        hImmjMtLELWbx+YKuGk8Opf3n5r4D8P+pMW5FonS+BFQY4yA1HUqQH7tBygKESDR+8Vd/6NvvvgwIH55
+        4SqTi3P/7zf9Z8Gl4iWDm/A5ziUohM4S8jMX98TPEqABAUgCKpAHykAd6ABDYAasgC1wBG7AG/iDEBAJ
+        VgMWSASpgA+yQB7YBApBMdgJ9oBqUAcaQTNoBcdBJzgFzoNL4Bq4AW6D+2AUTIBnYBa8BgsQBGEhMkSB
+        5CEVSBPSh8wgBmQPuUG+UBAUCcVCCRAPEkJ50GaoGCqDqqF6qBn6HjoJnYeuQIPQXWgMmoZ+h97BCEyC
+        qbASrAUbwwzYCfaBQ+BVcAK8Bs6FC+AdcCXcAB+FO+Dz8DX4NjwKP4PnEIAQERqiihgiDMQF8UeikHiE
+        j6xHipAKpAFpRbqRPuQmMorMIG9RGBQFRUcZomxRnqhQFAu1BrUeVYKqRh1GdaB6UTdRY6hZ1Ec0Ga2I
+        1kfboL3QEegEdBa6EF2BbkK3oy+ib6Mn0K8xGAwNo42xwnhiIjFJmLWYEsw+TBvmHGYQM46Zw2Kx8lh9
+        rB3WH8vECrCF2CrsUexZ7BB2AvsGR8Sp4Mxw7rgoHA+Xj6vAHcGdwQ3hJnELeCm8Jt4G749n43PwpfhG
+        fDf+On4Cv0CQJmgT7AghhCTCJkIloZVwkfCA8JJIJKoRrYmBRC5xI7GSeIx4mThGfEuSIemRXEjRJCFp
+        B+kQ6RzpLuklmUzWIjuSo8gC8g5yM/kC+RH5jQRFwkjCS4ItsUGiRqJDYkjiuSReUlPSSXK1ZK5kheQJ
+        yeuSM1J4KS0pFymm1HqpGqmTUiNSc9IUaVNpf+lU6RLpI9JXpKdksDJaMm4ybJkCmYMyF2TGKQhFneJC
+        YVE2UxopFykTVAxVm+pFTaIWU7+jDlBnZWVkl8mGyWbL1sielh2lITQtmhcthVZKO04bpr1borTEaQln
+        yfYlrUuGlszLLZVzlOPIFcm1yd2WeydPl3eTT5bfJd8p/1ABpaCnEKiQpbBf4aLCzFLqUtulrKVFS48v
+        vacIK+opBimuVTyo2K84p6Ss5KGUrlSldEFpRpmm7KicpFyufEZ5WoWiYq/CVSlXOavylC5Ld6Kn0Cvp
+        vfRZVUVVT1Whar3qgOqCmrZaqFq+WpvaQ3WCOkM9Xr1cvUd9VkNFw08jT6NF454mXpOhmai5V7NPc15L
+        Wytca6tWp9aUtpy2l3audov2Ax2yjoPOGp0GnVu6GF2GbrLuPt0berCehV6iXo3edX1Y31Kfq79Pf9AA
+        bWBtwDNoMBgxJBk6GWYathiOGdGMfI3yjTqNnhtrGEcZ7zLuM/5oYmGSYtJoct9UxtTbNN+02/R3Mz0z
+        llmN2S1zsrm7+QbzLvMXy/SXcZbtX3bHgmLhZ7HVosfig6WVJd+y1XLaSsMq1qrWaoRBZQQwShiXrdHW
+        ztYbrE9Zv7WxtBHYHLf5zdbQNtn2iO3Ucu3lnOWNy8ft1OyYdvV2o/Z0+1j7A/ajDqoOTIcGh8eO6o5s
+        xybHSSddpySno07PnU2c+c7tzvMuNi7rXM65Iq4erkWuA24ybqFu1W6P3NXcE9xb3Gc9LDzWepzzRHv6
+        eO7yHPFS8mJ5NXvNelt5r/Pu9SH5BPtU+zz21fPl+3b7wX7efrv9HqzQXMFb0ekP/L38d/s/DNAOWBPw
+        YyAmMCCwJvBJkGlQXlBfMCU4JvhI8OsQ55DSkPuhOqHC0J4wybDosOaw+XDX8LLw0QjjiHUR1yIVIrmR
+        XVHYqLCopqi5lW4r96yciLaILoweXqW9KnvVldUKq1NWn46RjGHGnIhFx4bHHol9z/RnNjDn4rziauNm
+        WS6svaxnbEd2OXuaY8cp40zG28WXxU8l2CXsTphOdEisSJzhunCruS+SPJPqkuaT/ZMPJX9KCU9pS8Wl
+        xqae5Mnwknm9acpp2WmD6frphemja2zW7Fkzy/fhN2VAGasyugRU0c9Uv1BHuEU4lmmfWZP5Jiss60S2
+        dDYvuz9HL2d7zmSue+63a1FrWWt78lTzNuWNrXNaV78eWh+3vmeD+oaCDRMbPTYe3kTYlLzpp3yT/LL8
+        V5vDN3cXKBVsLBjf4rGlpVCikF84stV2a9021DbutoHt5turtn8sYhddLTYprih+X8IqufqN6TeV33za
+        Eb9joNSydP9OzE7ezuFdDrsOl0mX5ZaN7/bb3VFOLy8qf7UnZs+VimUVdXsJe4V7Ryt9K7uqNKp2Vr2v
+        Tqy+XeNc01arWLu9dn4fe9/Qfsf9rXVKdcV17w5wD9yp96jvaNBqqDiIOZh58EljWGPft4xvm5sUmoqb
+        PhziHRo9HHS4t9mqufmI4pHSFrhF2DJ9NProje9cv+tqNWytb6O1FR8Dx4THnn4f+/3wcZ/jPScYJ1p/
+        0Pyhtp3SXtQBdeR0zHYmdo52RXYNnvQ+2dNt293+o9GPh06pnqo5LXu69AzhTMGZT2dzz86dSz83cz7h
+        /HhPTM/9CxEXbvUG9g5c9Ll4+ZL7pQt9Tn1nL9tdPnXF5srJq4yrndcsr3X0W/S3/2TxU/uA5UDHdavr
+        XTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxS
+        fNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+
+        tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/
+        6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAALEAAACxABrSO9dQAAAbVJREFUOE+lk7lLA0EU
+        xuMRcdeYyIBRQcmxURTiEXE8ECQqpAkpJJVNihSKjVjbW1lJChuxtBGUNGKRwj9AvA9QEMRGS01M4YYZ
+        v9nN5twgavGDt/tmvn3HtxbOueU/6JcpGQEpMAfqfyMoLjeAZbYU5iw2ryJe0N6ZVUZJI3JesGrkhYB4
+        GQdHLB7iIId4vUqEkmZRIYvNiY/sFAX0FrrApCYSHeNscZojToKWfIsSm/UkkROXN4GtXMAol5ImJNdY
+        qFcVQoj3wBBI5EUTiB2l7VVvgJI6HBoA51pLkaEvkMbzAZAqZ1N7hZQEWZSqLDIoKnkCxGyw5gKUuHHh
+        CrBsoI2nA3Yh8vCzgPAAJS5wy6c7c69+u/DGmBjum18TWQF1tWdASSefcp5nZt381ic/prqsQW0TOtsX
+        Xkm9ViRMt+jeYgtiz1Md+yBz5pE+Tl3N0cJB3QP2lwHb450iHyfbG3qMgZYKhLMTTn7plfi1Ih8WPFBc
+        sWjPd9Jt/UR144g1yxv/gtj/xnO/jd8o8j3iPuNA2eBg8fdhxy5ytFxAd+Mo2AIzoLVyWCXtCOvL5k78
+        w6/9DUORY3pvwx7IAAAAAElFTkSuQmCC
+</value>
+  </data>
+</root>
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Analyzers/BestSchedulingSolutionAnalyzer.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Analyzers/BestSchedulingSolutionAnalyzer.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Analyzers/BestSchedulingSolutionAnalyzer.cs	(revision 6121)
@@ -0,0 +1,133 @@
+﻿#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.Linq;
+using System.Text;
+using HeuristicLab.Optimization;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+using HeuristicLab.Parameters;
+using HeuristicLab.Data;
+using HeuristicLab.Problems.Scheduling.Encodings;
+
+namespace HeuristicLab.Problems.Scheduling.Analyzers {
+
+  [Item("BestSchedulingSolutionAnalyzer", "An operator for analyzing the best solution of Scheduling Problems given in schedule-representation.")]
+  [StorableClass]
+  public sealed class BestSchedulingSolutionAnalyzer : SchedulingOperator, IAnalyzer, IStochasticOperator {
+    [StorableConstructor]
+    private BestSchedulingSolutionAnalyzer(bool deserializing) : base(deserializing) { }
+    private BestSchedulingSolutionAnalyzer(BestSchedulingSolutionAnalyzer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BestSchedulingSolutionAnalyzer(this, cloner);
+    }
+
+
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
+    public IRandom Random {
+      get { return RandomParameter.ActualValue; }
+    }
+
+
+    public LookupParameter<BoolValue> MaximizationParameter {
+      get { return (LookupParameter<BoolValue>)Parameters["Maximization"]; }
+    }
+    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
+    }
+    public LookupParameter<JSSPEncoding> BestSolutionParameter {
+      get { return (LookupParameter<JSSPEncoding>)Parameters["BestSolution"]; }
+    }
+    public ValueLookupParameter<ResultCollection> ResultsParameter {
+      get { return (ValueLookupParameter<ResultCollection>)Parameters["Results"]; }
+    }
+    public LookupParameter<DoubleValue> BestKnownQualityParameter {
+      get { return (LookupParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
+    }
+    public LookupParameter<JSSPEncoding> BestKnownSolutionParameter {
+      get { return (LookupParameter<JSSPEncoding>)Parameters["BestKnownSolution"]; }
+    }
+    public ScopeTreeLookupParameter<JSSPEncoding> SchedulingSolutionParameter {
+      get { return (ScopeTreeLookupParameter<JSSPEncoding>)Parameters["SchedulingSolution"]; }
+    }
+
+
+
+    public BestSchedulingSolutionAnalyzer () {
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator."));
+
+      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<JSSPEncoding>("SchedulingSolution", "The solutions from which the best solution has to be chosen from."));
+      Parameters.Add(new LookupParameter<JSSPEncoding>("BestSolution", "The best JSSP solution."));
+      Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The result collection where the best JSSP solution should be stored."));
+      Parameters.Add(new LookupParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this JSSP instance."));
+      Parameters.Add(new LookupParameter<JSSPEncoding>("BestKnownSolution", "The best known solution of this JSSP instance."));
+    }
+
+
+    public override IOperation Apply() {
+      IntValue nrOfResources = NrOfResources;
+      ItemList<JSSPJob> jobs = Jobs;
+      ItemArray<DoubleValue> qualities = QualityParameter.ActualValue;
+      ItemArray<JSSPEncoding> solutions = SchedulingSolutionParameter.ActualValue;
+      ResultCollection results = ResultsParameter.ActualValue;
+      bool max = MaximizationParameter.ActualValue.Value;
+      DoubleValue bestKnownQuality = BestKnownQualityParameter.ActualValue;
+
+      int i = -1;
+      if (!max)
+        i = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index;
+      else i = qualities.Select((x, index) => new { index, x.Value }).OrderByDescending(x => x.Value).First().index;
+
+      if (bestKnownQuality == null ||
+          max && qualities[i].Value > bestKnownQuality.Value ||
+          !max && qualities[i].Value < bestKnownQuality.Value) {
+        BestKnownQualityParameter.ActualValue = new DoubleValue(qualities[i].Value);
+        BestKnownSolutionParameter.ActualValue = (JSSPEncoding)solutions[i].Clone();
+      }
+
+      JSSPEncoding bestSolution = BestSolutionParameter.ActualValue;
+      if (bestSolution == null) {
+        bestSolution = (JSSPEncoding)solutions[i].Clone();
+        bestSolution.Quality.Value = qualities [i].Value;
+        BestSolutionParameter.ActualValue = bestSolution;
+        results.Add(new Result("Best Scheduling Solution", bestSolution));
+      } else {
+        if (max && bestSolution.Quality.Value < qualities[i].Value ||
+          !max && bestSolution.Quality.Value > qualities[i].Value) {
+            bestSolution = (JSSPEncoding)solutions[i].Clone();
+          bestSolution.Quality.Value = qualities[i].Value;
+        }
+      }
+
+      return base.Apply();
+    }
+
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPCreator.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPCreator.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPCreator.cs	(revision 6121)
@@ -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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Parameters;
+using HeuristicLab.Problems.Scheduling.Encodings;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings {
+  [Item("JobShop Scheduling Problem Creator", "Represents the generalized form of creators for JobShop Scheduling Problems.")]
+  [StorableClass]
+  public abstract class JSSPCreator<T> : SchedulingCreator where T : JSSPEncoding{
+    [StorableConstructor]
+    protected JSSPCreator(bool deserializing) : base(deserializing) { }
+    protected JSSPCreator(JSSPCreator<T> original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    
+    public ILookupParameter<T> SchedulingSolutionParameter {
+      get { return (ILookupParameter<T>)Parameters["SchedulingSolution"]; }
+    }
+
+    public JSSPCreator() : base (){
+      Parameters.Add(new LookupParameter<T>("SchedulingSolution", "The new scheduling solution."));
+    }
+
+    public override IOperation Apply() {
+      SchedulingSolutionParameter.ActualValue = CreateSolution();
+      return base.Apply();
+    } 
+
+
+    protected abstract T CreateSolution();
+    
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPCrossover.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPCrossover.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPCrossover.cs	(revision 6121)
@@ -0,0 +1,55 @@
+﻿#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.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.Scheduling.Interfaces;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings {
+  [Item("JSSPCrossover", "A scheduling crossover operation.")]
+  [StorableClass]
+  public abstract class JSSPCrossover : SchedulingOperator, IJSSPCrossover {
+    #region IJSSPCrossover Members
+    public ILookupParameter<ItemArray<JSSPEncoding>> ParentsParameter {
+      get { return (ScopeTreeLookupParameter<JSSPEncoding>)Parameters["Parents"]; }
+    }
+
+    public ILookupParameter<JSSPEncoding> ChildParameter {
+      get { return (ILookupParameter<JSSPEncoding>)Parameters["Child"]; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    protected JSSPCrossover(bool deserializing) : base(deserializing) { }
+    protected JSSPCrossover(JSSPCrossover original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public JSSPCrossover()
+      : base() {
+      Parameters.Add(new ScopeTreeLookupParameter<JSSPEncoding>("Parents", "The parent permutations which should be crossed."));
+      ParentsParameter.ActualName = "SchedulingSolution";
+      Parameters.Add(new LookupParameter<JSSPEncoding>("Child", "The child permutation resulting from the crossover."));
+      ChildParameter.ActualName = "SchedulingSolution";
+    }
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPEncoding.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPEncoding.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPEncoding.cs	(revision 6121)
@@ -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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings {
+  [Item("JobShop Scheduling Encoding", "An abstract class that holds all necessary data for solving the standard JobShop Scheduling problem.")]
+  [StorableClass]
+  public abstract class JSSPEncoding : ParameterizedNamedItem {
+    [StorableConstructor]
+    protected JSSPEncoding(bool deserializing) : base(deserializing) { }
+    protected JSSPEncoding(JSSPEncoding original, Cloner cloner)
+      : base(original, cloner) {
+        this.Quality = cloner.Clone(original.Quality);
+    }
+
+    public JSSPEncoding() : base() {
+      Quality = new DoubleValue();
+    }
+
+    [Storable]
+    public DoubleValue Quality {
+      get;
+      set;
+    }
+
+    public abstract Schedule ToSchedule(IntValue nrOfResources, ItemList<JSSPJob> jobs, IRandom random);
+
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPManipulator.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPManipulator.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JSSPManipulator.cs	(revision 6121)
@@ -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.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.Scheduling.Interfaces;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings {
+  [Item("JSSPManipulator", "A JSSP manipulation operation.")]
+  [StorableClass]
+  public abstract class JSSPManipulator : SchedulingOperator, IJSSPManipulator {
+    #region IJSSPManipulator Members
+
+    public ILookupParameter<JSSPEncoding> SchedulingSolutionParameter {
+      get { return (ILookupParameter<JSSPEncoding>)Parameters["SchedulingSolution"]; }
+    }
+
+    #endregion
+
+    [StorableConstructor]
+    protected JSSPManipulator(bool deserializing) : base(deserializing) { }
+    protected JSSPManipulator(JSSPManipulator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public JSSPManipulator()
+      : base() {
+        Parameters.Add(new LookupParameter<JSSPEncoding>("SchedulingEncoding", "The JSSP solution to be manipulated."));
+    }
+
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Crossovers/JSMCrossover.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Crossovers/JSMCrossover.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Crossovers/JSMCrossover.cs	(revision 6121)
@@ -0,0 +1,56 @@
+﻿#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.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.Scheduling.Interfaces;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix.Crossovers {
+  [Item("JSMCrossover", "An operator which crosses two JSM representations.")]
+  [StorableClass]
+  public abstract class JSMCrossover : JSSPCrossover, IStochasticOperator, IJSMOperator {
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
+
+    [StorableConstructor]
+    protected JSMCrossover(bool deserializing) : base(deserializing) { }
+    protected JSMCrossover(JSMCrossover original, Cloner cloner) : base(original, cloner) { }
+    public JSMCrossover()
+      : base() {
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
+    }
+
+    protected abstract JSSPEncoding Crossover(IRandom random, JSMEncoding parent1, JSMEncoding parent2);
+
+    public override IOperation Apply() {
+      ItemArray<JSSPEncoding> parents = ParentsParameter.ActualValue;
+
+      ChildParameter.ActualValue =
+        Crossover(RandomParameter.ActualValue, parents[0] as JSMEncoding, parents[1] as JSMEncoding);
+
+      return base.Apply();
+    }
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Crossovers/JSMSXXCrossover.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Crossovers/JSMSXXCrossover.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Crossovers/JSMSXXCrossover.cs	(revision 6121)
@@ -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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix.Crossovers {
+  [Item("JSM Subsequence Exchange Crossover", "Represents a crossover operation swapping 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 () {}
+
+    protected override JSSPEncoding Crossover(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
+      JSSPEncoding result = parent1;
+
+
+      return result;
+    }
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMDecoder.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMDecoder.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMDecoder.cs	(revision 6121)
@@ -0,0 +1,177 @@
+﻿#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.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix {
+  [Item("Job Sequencing Matrix Decoder", "Applies the GifflerThompson algorithm to create an active schedule from a JobSequencing Matrix.")]
+  [StorableClass]
+  public class JSMDecoder : NamedItem {
+    [StorableConstructor]
+    protected JSMDecoder(bool deserializing) : base(deserializing) { }
+    protected JSMDecoder(JSMDecoder original, Cloner cloner)
+      : base(original, cloner) {
+        this.resultingSchedule = cloner.Clone(original.resultingSchedule);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JSMDecoder(this, cloner);
+    }
+
+    [Storable]
+    private Schedule resultingSchedule;
+
+    [Storable]
+    private IRandom random;
+
+    public JSMDecoder(IntValue nrOfResources, IRandom r)
+      : base() {
+      resultingSchedule = new Schedule(nrOfResources);
+      random = r;
+    }
+
+
+    public Schedule CreateScheduleFromJSM(ItemList<JSSPJob> jobs, ItemList<Permutation> jobSequenceMatrix) {
+      //Reset scheduled tasks in result
+      foreach (JSSPJob j in jobs) {
+        foreach (JSSPTask t in j.Tasks) {
+          t.IsScheduled.Value = false;
+        }
+      }
+
+      //GT-Algorithm
+      //STEP 0 - Compute a list of "earliest operations"
+      ItemList<JSSPTask> earliestTasksList = GetEarliestNotScheduledTasks(jobs);
+      while (earliestTasksList.Count > 0) {
+        //STEP 1 - Get earliest not scheduled operation with minimal earliest completing time
+        JSSPTask minimal = GetTaskWithMinimalEC(earliestTasksList);
+
+        //STEP 2 - Compute a conflict set of all operations that can be scheduled on the machine the previously selected operation runs on
+        ItemList<JSSPTask> conflictSet = GetConflictSetForTask(minimal, earliestTasksList);
+
+        //STEP 3 - Select an operation from the conflict set (various methods depending on how the algorithm should work..)
+        JSSPTask selectedTask = SelectTaskFromConflictSet(minimal.ResourceNr, conflictSet, jobSequenceMatrix);
+
+        //STEP 4 - Adding the selected operation to the current schedule
+        AddTaskToSchedule(selectedTask);
+
+        //STEP 5 - Back to STEP 1
+        earliestTasksList = GetEarliestNotScheduledTasks(jobs);
+      }
+
+      return resultingSchedule;
+    }
+    private ItemList<JSSPTask> GetEarliestNotScheduledTasks(ItemList<JSSPJob> jobs) {
+      ItemList<JSSPTask> result = new ItemList<JSSPTask>();
+      foreach (JSSPJob j in jobs) {
+        foreach (JSSPTask t in j.Tasks) {
+          if (!t.IsScheduled.Value) {
+            result.Add(t);
+            break;
+          }
+        }
+      }
+      return result;
+    }
+    private JSSPTask GetTaskWithMinimalEC(ItemList<JSSPTask> earliestTasksList) {
+      DoubleValue minEct = new DoubleValue(Double.MaxValue);
+      JSSPTask result = null;
+      foreach (JSSPTask t in earliestTasksList) {
+        DoubleValue ect = ComputeEarliestCompletionTime(t);
+        if (ect.Value < minEct.Value) {
+          result = t;
+          minEct = ect;
+        }
+      }
+      return result;
+    }
+    private ItemList<JSSPTask> GetConflictSetForTask(JSSPTask conflictedTask, ItemList<JSSPTask> earliestTasksList) {
+      ItemList<JSSPTask> result = new ItemList<JSSPTask>();
+      DoubleValue conflictedCompletionTime = ComputeEarliestCompletionTime(conflictedTask);
+      result.Add(conflictedTask);
+      foreach (JSSPTask t in earliestTasksList) {
+        if (t.ResourceNr.Value == conflictedTask.ResourceNr.Value) {
+          if (ComputeEarliestStartTime(t).Value < conflictedCompletionTime.Value)
+            result.Add(t);
+        }
+      }
+      return result;
+    }
+    private JSSPTask SelectTaskFromConflictSet(IntValue conflictedResource, ItemList<JSSPTask> conflictSet, ItemList<Permutation> jsm) {
+      JSSPTask result = null;
+      IntValue progressOnResource = new IntValue (resultingSchedule.Resources[conflictedResource.Value].Tasks.Count);
+
+      if (progressOnResource.Value < jsm[conflictedResource.Value].Length) {
+        IntValue solutionCandidateJobNr = new IntValue(jsm[conflictedResource.Value][progressOnResource.Value]);
+        foreach (JSSPTask t in conflictSet) {
+          if (t.Job.JobIndex == solutionCandidateJobNr)
+            result = t;
+        }
+      } else {
+        return null;
+      }
+
+      //Repairing happens here
+      if (result == null) {
+        result = conflictSet[random.Next(conflictSet.Count - 1)];
+        int index = 0;
+        foreach (int jobAssignment in jsm[conflictedResource.Value]) {
+          if (jobAssignment == result.Job.JobIndex.Value)
+            break;
+          index++;
+        }
+        jsm[conflictedResource.Value][index] = jsm[conflictedResource.Value][progressOnResource.Value];
+        jsm[conflictedResource.Value][progressOnResource.Value] = result.Job.JobIndex.Value;
+      }
+       
+
+      return result;
+    }
+    private DoubleValue ComputeEarliestStartTime(JSSPTask t) {
+      Resource affectedResource = resultingSchedule.Resources[t.ResourceNr.Value];
+
+      DoubleValue lastMachineEndTime = affectedResource.TotalDuration;
+      DoubleValue previousJoboperationEndTime = new DoubleValue(double.MinValue);
+      if (t.PreviousTask != null)
+        previousJoboperationEndTime = t.PreviousTask.EndTime;
+
+      return new DoubleValue(Math.Max(previousJoboperationEndTime.Value, lastMachineEndTime.Value));
+    }
+    private DoubleValue ComputeEarliestCompletionTime(JSSPTask t) {
+      return new DoubleValue(ComputeEarliestStartTime(t).Value + t.Duration.Value);
+    }
+    private void AddTaskToSchedule(JSSPTask selectedTask) {
+      Resource affectedResource = resultingSchedule.Resources[selectedTask.ResourceNr.Value];
+      selectedTask.StartTime = ComputeEarliestStartTime(selectedTask);
+      selectedTask.IsScheduled.Value = true;
+      affectedResource.Tasks.Add(selectedTask);
+    }
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMEncoding.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMEncoding.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMEncoding.cs	(revision 6121)
@@ -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;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Data;
+using HeuristicLab.Problems.Scheduling.Encodings;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix {
+  [Item("Job Sequencing Matrix Encoding", "Represents a solution for a standard JobShop Scheduling Problem.")]
+  [StorableClass]
+  public class JSMEncoding : JSSPEncoding{
+    [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);
+    }
+
+    [Storable]
+    public ItemList<Permutation> JobSequenceMatrix { get; set; }
+
+    public JSMEncoding() : base() {
+      JobSequenceMatrix = new ItemList<Permutation>();
+    }
+
+    public override Schedule ToSchedule(IntValue nrOfResources, ItemList<JSSPJob> jobs, IRandom random) {
+      JSMDecoder decoder = new JSMDecoder(nrOfResources, random);
+      return decoder.CreateScheduleFromJSM (jobs, JobSequenceMatrix);
+    }
+
+    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();
+    }
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMRandomCreator.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMRandomCreator.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/JSMRandomCreator.cs	(revision 6121)
@@ -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;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+using HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.PermutationEncoding;
+
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix {
+  [Item("Job Sequencing Matrix Creator", "Creator class used to create Job Sequencing Matrix solutions for standard JobShop scheduling problems.")]
+  [StorableClass]
+  public class JSMRandomCreator : JSSPCreator<JSMEncoding>, IStochasticOperator {
+    [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 ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
+
+    public IRandom Random {
+      get { return RandomParameter.ActualValue; }
+    }
+
+    public JSMRandomCreator()
+      : base() {
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator."));
+    }
+
+
+    protected override JSMEncoding CreateSolution() {
+      JSMEncoding solution = new JSMEncoding();
+      IntValue nrOfJobs = new IntValue (Jobs.Count);
+      IntValue nrOfResources = NrOfResources;
+
+      for (int i = 0; i < nrOfResources.Value; i++) {
+        solution.JobSequenceMatrix.Add(new Permutation(PermutationTypes.Absolute, nrOfJobs.Value, Random));
+      }
+
+      return solution;
+    }
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Manipulators/JSMManipulator.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Manipulators/JSMManipulator.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Manipulators/JSMManipulator.cs	(revision 6121)
@@ -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.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.Scheduling.Encodings;
+using HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix;
+using HeuristicLab.Problems.Scheduling.Interfaces;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix.Manipulators {
+  [Item("AlbaManipulator", "An operator which manipulates a VRP representation.")]
+  [StorableClass]
+  public abstract class JSMManipulator : JSSPManipulator, IStochasticOperator, IJSMOperator {
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
+
+    [StorableConstructor]
+    protected JSMManipulator(bool deserializing) : base(deserializing) { }
+    protected JSMManipulator(JSMManipulator original, Cloner cloner) : base(original, cloner) { }
+    public JSMManipulator()
+      : base() {
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
+    }
+
+    protected abstract JSMEncoding Manipulate(IRandom random, JSMEncoding individual);
+
+
+    public override IOperation Apply() {
+      JSSPEncoding solution = SchedulingSolutionParameter.ActualValue;
+
+      SchedulingSolutionParameter.ActualValue = Manipulate(RandomParameter.ActualValue, solution as JSMEncoding);
+
+      return base.Apply();
+    }
+
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Manipulators/JSMSwapManipulator.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Manipulators/JSMSwapManipulator.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Encodings/JobSequenceMatrix/Manipulators/JSMSwapManipulator.cs	(revision 6121)
@@ -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 System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+using HeuristicLab.Encodings.PermutationEncoding;
+
+namespace HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix.Manipulators {
+
+  [Item("JSM Subsequence Exchange Crossover", "Represents a crossover operation swapping subsequences of the parents to generate offspring.")]
+  [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 () {}
+
+    protected override JSMEncoding Manipulate(IRandom random, JSMEncoding individual) {
+      int resourceIndex = random.Next(individual.JobSequenceMatrix.Count - 1);
+      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;
+      return individual;
+    }
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MakespanEvaluator.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MakespanEvaluator.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MakespanEvaluator.cs	(revision 6121)
@@ -0,0 +1,65 @@
+﻿#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.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+
+namespace HeuristicLab.Problems.Scheduling.Evaluators {
+  [Item("Makespan Evaluator", "Represents an evaluator using the maximum makespan of a schedule.")]
+  [StorableClass]
+  public class MakespanEvaluator : JSSPEvaluator, IStochasticOperator {
+    [StorableConstructor]
+    protected MakespanEvaluator(bool deserializing) : base(deserializing) { }
+    protected MakespanEvaluator(MakespanEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MakespanEvaluator(this, cloner);
+    }
+
+    
+
+    public MakespanEvaluator () : base () { }
+
+
+    protected override DoubleValue evaluate(Schedule schedule) {
+      DoubleValue quality = new DoubleValue (0);
+      foreach (Resource r in schedule.Resources) {
+        if (r.TotalDuration.Value > quality.Value) {
+          quality = r.TotalDuration;
+        }
+      }
+      return quality;
+    }
+
+    public override IOperation Apply() {
+      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 6118)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj	(revision 6121)
@@ -40,4 +40,5 @@
     <Reference Include="System" />
     <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
@@ -47,5 +48,32 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Analyzers\BestSchedulingSolutionAnalyzer.cs" />
+    <Compile Include="Encodings\JobSequenceMatrix\Crossovers\JSMCrossover.cs" />
+    <Compile Include="Encodings\JobSequenceMatrix\Crossovers\JSMSXXCrossover.cs" />
+    <Compile Include="Encodings\JobSequenceMatrix\JSMDecoder.cs" />
+    <Compile Include="Encodings\JobSequenceMatrix\JSMRandomCreator.cs" />
+    <Compile Include="Encodings\JobSequenceMatrix\JSMEncoding.cs" />
+    <Compile Include="Encodings\JobSequenceMatrix\Manipulators\JSMManipulator.cs" />
+    <Compile Include="Encodings\JobSequenceMatrix\Manipulators\JSMSwapManipulator.cs" />
+    <Compile Include="Encodings\JSSPCrossover.cs" />
+    <Compile Include="Encodings\JSSPEncoding.cs" />
+    <Compile Include="Encodings\JSSPCreator.cs" />
+    <Compile Include="Encodings\JSSPManipulator.cs" />
+    <Compile Include="Evaluators\MakespanEvaluator.cs" />
+    <Compile Include="Interfaces\IJSMOperator.cs" />
+    <Compile Include="Interfaces\IJSSPCrossover.cs" />
+    <Compile Include="Interfaces\IJSSPManipulator.cs" />
+    <Compile Include="Resource.cs" />
+    <Compile Include="JSSPEvaluator.cs" />
+    <Compile Include="SchedulingCreator.cs" />
+    <Compile Include="JSSPJob.cs" />
+    <Compile Include="JobShopSchedulingProblem.cs" />
+    <Compile Include="JSSPTask.cs" />
+    <Compile Include="SchedulingOperator.cs" />
+    <Compile Include="SchedulingProblem.cs" />
+    <Compile Include="Task.cs" />
+    <Compile Include="Plugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Schedule.cs" />
   </ItemGroup>
   <ItemGroup>
@@ -55,8 +83,51 @@
   </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.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>
+    <Folder Include="Encodings\PriorityRulesVector\" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSMOperator.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSMOperator.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSMOperator.cs	(revision 6121)
@@ -0,0 +1,10 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.Scheduling.Interfaces {
+  interface IJSMOperator : IOperator {
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPCrossover.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPCrossover.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPCrossover.cs	(revision 6121)
@@ -0,0 +1,14 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Optimization;
+using HeuristicLab.Core;
+using HeuristicLab.Problems.Scheduling.Encodings;
+
+namespace HeuristicLab.Problems.Scheduling.Interfaces {
+  interface IJSSPCrossover : ICrossover{
+    ILookupParameter<ItemArray<JSSPEncoding>> ParentsParameter { get; }
+    ILookupParameter<JSSPEncoding> ChildParameter { get; }
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPManipulator.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPManipulator.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPManipulator.cs	(revision 6121)
@@ -0,0 +1,30 @@
+﻿#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;
+using HeuristicLab.Optimization;
+using HeuristicLab.Problems.Scheduling.Encodings;
+
+namespace HeuristicLab.Problems.Scheduling.Interfaces {
+  public interface IJSSPManipulator : IManipulator {
+    ILookupParameter<JSSPEncoding> SchedulingSolutionParameter { get; }
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JSSPEvaluator.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JSSPEvaluator.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JSSPEvaluator.cs	(revision 6121)
@@ -0,0 +1,81 @@
+﻿#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;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Optimization;
+using HeuristicLab.Data;
+using HeuristicLab.Common;
+using HeuristicLab.Parameters;
+using System;
+using HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix;
+using HeuristicLab.Problems.Scheduling.Encodings;
+
+
+namespace HeuristicLab.Problems.Scheduling {
+  [Item("Scheduling Evaluator", "Represents a general evaluator class for scheduling problems.")]
+  [StorableClass]
+  public abstract class JSSPEvaluator : SchedulingOperator, ISingleObjectiveEvaluator {
+    [StorableConstructor]
+    protected JSSPEvaluator(bool deserializing) : base(deserializing) { }
+    protected JSSPEvaluator(JSSPEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
+    public ILookupParameter<DoubleValue> QualityParameter {
+      get { 
+        if (Parameters.ContainsKey("Quality"))
+          return (ILookupParameter<DoubleValue>)Parameters["Quality"];
+        else
+          return null;
+      }
+    }
+    public ILookupParameter<JSSPEncoding> ScheduleParameter {
+      get { 
+        if (Parameters.ContainsKey("SchedulingSolution"))
+          return (ILookupParameter<JSSPEncoding>)Parameters["SchedulingSolution"];
+        else
+          return null;
+      }
+    }
+    
+    protected abstract DoubleValue evaluate(Schedule schedule);
+
+
+    public JSSPEvaluator () : base () {
+      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality value aka fitness value of the solution."));
+      Parameters.Add(new LookupParameter<JSSPEncoding>("SchedulingSolution", "The object containing all necessary schedule solution data.")); 
+      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator."));
+    }
+    
+
+    public override IOperation Apply() {
+      JSSPEncoding schedulingSolution = ScheduleParameter.ActualValue;
+      QualityParameter.ActualValue = evaluate (schedulingSolution.ToSchedule (NrOfResources, Jobs, RandomParameter.ActualValue));
+      return base.Apply();
+    }
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JSSPJob.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JSSPJob.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JSSPJob.cs	(revision 6121)
@@ -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;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+
+namespace HeuristicLab.Problems.Scheduling {
+  [Item("Job Class", "Represents a composition of tasks that require processing in a job shop scheduling problem.")]
+  [StorableClass]
+  public class JSSPJob : ParameterizedNamedItem {
+    [StorableConstructor]
+    protected JSSPJob(bool deserializing) : base(deserializing) { }
+    protected JSSPJob(JSSPJob original, Cloner cloner)
+      : base(original, cloner) {
+      this.JobIndex = cloner.Clone(original.JobIndex);
+      this.Tasks = cloner.Clone(original.Tasks);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JSSPJob(this, cloner);
+    }
+
+    #region Parameter Properties
+    public ValueParameter<IntValue> JobIndexParameter {
+      get { return (ValueParameter<IntValue>)Parameters["JobIndex"]; }
+    }
+
+    public ValueParameter<ItemList<Task>> TasksParameter {
+      get { return (ValueParameter<ItemList<Task>>)Parameters["Tasks"]; }
+    }
+    #endregion
+
+    #region Properties
+    public IntValue JobIndex {
+      get { return JobIndexParameter.Value; }
+      set { JobIndexParameter.Value = value; }
+    }
+    public ItemList<Task> Tasks {
+      get { return TasksParameter.Value; }
+      set { TasksParameter.Value = value; }
+    }
+    #endregion
+
+
+    public JSSPJob(IntValue ji) {
+      Parameters.Add(new ValueParameter<IntValue>("JobIndex", "The index of the job in the associated JSSP-Instance.", new IntValue()));
+      Parameters.Add(new ValueParameter<ItemList<Task>>("Tasks", "Taskdata defining duration, start-time and resource assignment of the tasks.", new ItemList<Task>()));
+
+      JobIndex = ji;
+      Tasks = new ItemList<Task>();
+    }
+
+
+    public override string ToString() {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("Job" + JobIndex + " [ ");
+      foreach (Task t in Tasks) {
+        sb.Append(t.ToString () + " ");
+      }
+      sb.Append("]");
+      return sb.ToString();
+    }
+
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JSSPTask.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JSSPTask.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JSSPTask.cs	(revision 6121)
@@ -0,0 +1,55 @@
+﻿#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.Linq;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Problems.Scheduling {
+  [Item("Job Shop Scheduling Task Class", "Represents smallest unit for a job shop scheduling problem.")]
+  [StorableClass]
+  public class JSSPTask : Task {
+    [StorableConstructor]
+    protected JSSPTask(bool deserializing) : base(deserializing) { }
+    protected JSSPTask(JSSPTask original, Cloner cloner)
+      : base(original, cloner) {
+      this.Job = cloner.Clone(original.Job);
+      this.PreviousTask = cloner.Clone(original.PreviousTask);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JSSPTask(this, cloner);
+    }
+
+
+
+    public JSSPJob Job { get; set; }
+    public Task PreviousTask { get; set; }
+
+    public JSSPTask (IntValue taskNr, IntValue resNr, DoubleValue duration, JSSPJob j) : base (taskNr, resNr, duration) {
+      Job = j;
+    }
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs	(revision 6121)
@@ -0,0 +1,179 @@
+﻿#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.Linq;
+using System.Text;
+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.Encodings;
+using HeuristicLab.Problems.Scheduling.Evaluators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Problems.Scheduling.Analyzers;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix.Manipulators;
+using HeuristicLab.Problems.Scheduling.Encodings.JobSequenceMatrix.Crossovers;
+using HeuristicLab.Problems.Scheduling.Interfaces;
+
+namespace HeuristicLab.Problems.Scheduling {
+  [Item("JobShop Scheduling Problem", "Represents a standard JobShop Scheduling Problem")]
+  [Creatable("Problems")]
+  [StorableClass]
+  public sealed class JobShopSchedulingProblem : SchedulingProblem {
+    [StorableConstructor]
+    private JobShopSchedulingProblem(bool deserializing) : base(deserializing) { }
+    private JobShopSchedulingProblem(JobShopSchedulingProblem original, Cloner cloner)
+      : base(original, cloner) {
+        operators = original.operators.Select(x => (IOperator)cloner.Clone(x)).ToList();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new JobShopSchedulingProblem(this, cloner);
+    }
+
+
+    #region Parameter Properties
+    public ValueParameter<IntValue> NrOfResourcesParameter {
+      get { return (ValueParameter<IntValue>)Parameters["NrOfResources"]; }
+    }
+    public ValueParameter<ItemList<JSSPJob>> JobsParameter {
+      get { return (ValueParameter<ItemList<JSSPJob>>)Parameters["Jobs"]; }
+    }
+    public OptionalValueParameter<JSSPEncoding> BestKnownSolutionParameter {
+      get { return (OptionalValueParameter<JSSPEncoding>)Parameters["BestKnownSolution"]; }
+    }
+    #endregion
+
+    #region Properties
+    public IntValue NrOfResources {
+      get { return NrOfResourcesParameter.Value; }
+      set { NrOfResourcesParameter.Value = value; }
+    }
+    public ItemList<JSSPJob> Jobs {
+      get { return JobsParameter.Value; }
+      set { JobsParameter.Value = value; }
+    }
+    public JSSPEncoding BestKnownSolution {
+      get { return BestKnownSolutionParameter.Value; }
+      set { BestKnownSolutionParameter.Value = value; }
+    }
+    #endregion
+
+
+    [Storable]
+    private List<IOperator> operators;
+
+
+    public JobShopSchedulingProblem()
+      : base(new MakespanEvaluator (), new JSMRandomCreator ()) {
+        Parameters.Add(new ValueParameter<IntValue>("NrOfResources", "Number of Resources used in this JSSP-Instance.", new IntValue()));
+        Parameters.Add(new ValueParameter<ItemList<JSSPJob>>("Jobs", "Jobdata defining the precedence relationships and the duration of the tasks in this JSSP-Instance.", new ItemList<JSSPJob>()));
+        Parameters.Add(new OptionalValueParameter<JSSPEncoding>("BestKnownSolution", "The best known solution of this JSSP instance."));
+
+        InitializeOperators();
+    }
+
+    #region Events
+    //TODO: Implement event handlers for problem specific events!
+    #endregion
+
+    #region Helpers
+    private void InitializeOperators() {
+      Operators.AddRange(ApplicationManager.Manager.GetInstances<IJSMOperator>());
+      Operators.Add(new BestSchedulingSolutionAnalyzer());
+      //ParameterizeAnalyzer();
+      //ParameterizeOperators();
+    }
+
+    private void AttachEventHandlers() {
+      //TODO: Attach event handlers implemented aabove to appropriate events of the problem.
+    }
+
+    private void ParameterizeOperators() {
+      throw new NotImplementedException();
+    }
+
+    private void ParameterizeAnalyzer() {
+      throw new NotImplementedException();
+    }
+    #endregion
+
+    #region Importmethods
+    private List<string> SplitString(string line) {
+      List<string> data = new List<string>(line.Split(' '));
+      List<string> result = new List<string>();
+
+      foreach (string s in data) {
+        if (!String.IsNullOrEmpty(s) && s != "" && s != " ")
+          result.Add(s);
+      }
+
+      return result;
+    }
+    public void ImportFromORLibrary(string fileName) {
+      if (!File.Exists(fileName))
+        return;
+      StreamReader problemFile = new StreamReader(fileName);
+      //assures that the parser only reads the first problem instance given in the file
+      bool problemFound = false;
+
+      Jobs = new ItemList<JSSPJob>();
+
+      while (!problemFile.EndOfStream && !problemFound) {
+        string line = problemFile.ReadLine();
+        List<string> data = SplitString(line);
+        int taskCount = 0;
+        if (data.Count > 0 && ((int)data[0][0] >= 48 && (int)data[0][0] <= 57)) {
+          NrOfResources = new IntValue(Int32.Parse(data[1]));
+          int jobCount = 0;
+          line = problemFile.ReadLine();
+          data = SplitString(line);
+          while (!problemFile.EndOfStream && data.Count > 0 && ((int)data[0][0] >= 48 && (int)data[0][0] <= 57)) {
+            JSSPJob j = new JSSPJob(new IntValue(jobCount));
+            for (int i = 0; i < data.Count; i++) {
+              JSSPTask t = new JSSPTask(new IntValue (taskCount), new IntValue(Int32.Parse(data[i])), new DoubleValue(Double.Parse(data[i + 1])), j);
+              taskCount++;
+              if (j.Tasks.Count > 0)
+                t.PreviousTask = j.Tasks[j.Tasks.Count - 1];
+              j.Tasks.Add(t);
+              i++;
+            }//for
+            this.Jobs.Add(j);
+            jobCount++;
+            line = problemFile.ReadLine();
+            data = SplitString(line);
+          }//while
+          problemFound = true;
+        }//if
+      }//while
+      problemFile.Close();
+    }
+    #endregion
+
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Resource.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Resource.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Resource.cs	(revision 6121)
@@ -0,0 +1,98 @@
+﻿#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.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Parameters;
+using HeuristicLab.Data;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+
+//ATTENTION! This class may have lots of parallels with the HeuristicLab.Problems.Scheduling.JSSPJob class.
+
+namespace HeuristicLab.Problems.Scheduling {
+  [Item("Resource Class", "Represents a resource used in scheduling problems.")]
+  [StorableClass]
+  public class Resource : ParameterizedNamedItem {
+    [StorableConstructor]
+    protected Resource(bool deserializing) : base(deserializing) { }
+    protected Resource(Resource original, Cloner cloner)
+      : base(original, cloner) {
+      this.ResourceIndex = cloner.Clone(original.ResourceIndex);
+      this.Tasks = cloner.Clone(original.Tasks);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Resource(this, cloner);
+    }
+
+    #region Parameter Properties
+    public ValueParameter<IntValue> ResourceIndexParameter {
+      get { return (ValueParameter<IntValue>)Parameters["ResourceIndex"]; }
+    }
+    public ValueParameter<ItemList<Task>> TasksParameter {
+      get { return (ValueParameter<ItemList<Task>>)Parameters["Tasks"]; }
+    }
+    #endregion
+
+    #region Properties
+    public IntValue ResourceIndex {
+      get { return ResourceIndexParameter.Value; }
+      set { ResourceIndexParameter.Value = value; }
+    }
+    public ItemList<Task> Tasks {
+      get { return TasksParameter.Value; }
+      set { TasksParameter.Value = value; }
+    }
+    public DoubleValue TotalDuration {
+      get {
+        if (Tasks.Count > 0)
+          return new DoubleValue(Tasks[Tasks.Count - 1].EndTime.Value);
+        else
+          return new DoubleValue (0);
+      }
+    }
+    #endregion
+
+
+    public Resource(IntValue ri) {
+      Parameters.Add(new ValueParameter<IntValue>("ResourceIndex", "The index of the resource in the associated Scheduling Problem.", new IntValue()));
+      Parameters.Add(new ValueParameter<ItemList<Task>>("Tasks", "Taskdata defining duration, start-time and resource assignment of the tasks.", new ItemList<Task>()));
+
+      ResourceIndex = ri;
+      Tasks = new ItemList<Task>();
+    }
+
+
+    public override string ToString() {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("Job" + ResourceIndex + " [ ");
+      foreach (Task t in Tasks) {
+        sb.Append(t.ToString() + " ");
+      }
+      sb.Append("]");
+      return sb.ToString();
+    }
+
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Schedule.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Schedule.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Schedule.cs	(revision 6121)
@@ -0,0 +1,91 @@
+﻿#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.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+using HeuristicLab.Data;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Parameters;
+using HeuristicLab.Encodings.PermutationEncoding;
+using System.ComponentModel;
+
+namespace HeuristicLab.Problems.Scheduling {
+  [Item("Schedule Class", "Represents the general solution for scheduling problems.")]
+  [StorableClass]
+  public class Schedule : ParameterizedNamedItem{
+    [StorableConstructor]
+    protected Schedule(bool deserializing) : base(deserializing) { }
+    protected Schedule(Schedule original, Cloner cloner)
+      : base(original, cloner) {
+        this.Resources = cloner.Clone (original.Resources);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Schedule(this, cloner);
+    }
+
+
+    #region Parameter Properties
+    public ValueParameter<ItemList<Resource>> ResourcesParameter {
+      get { return (ValueParameter<ItemList<Resource>>)Parameters["Resources"]; }
+    }
+    #endregion
+
+    #region Properties
+    public ItemList<Resource> Resources {
+      get { return ResourcesParameter.Value; }
+      set { ResourcesParameter.Value = value; }
+    }
+    #endregion
+
+
+    public Schedule(IntValue nrOfResources) {
+      Parameters.Add(new ValueParameter<ItemList<Resource>>("Resources", "Taskdata defining duration, start-time and resource assignment of the tasks.", new ItemList<Resource>()));
+      for (int i = 0; i < nrOfResources.Value; i++) {
+        Resources.Add(new Resource(new IntValue (i)));
+      }
+    }
+
+
+    public event PropertyChangedEventHandler PropertyChanged;
+    private void OnPropertyChanged(string propertyName) {
+      var handler = PropertyChanged;
+      if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
+    }
+
+
+    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();
+    }
+
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/SchedulingCreator.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/SchedulingCreator.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/SchedulingCreator.cs	(revision 6121)
@@ -0,0 +1,46 @@
+﻿#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.Linq;
+using System.Text;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+using HeuristicLab.Parameters;
+
+namespace HeuristicLab.Problems.Scheduling {
+  [Item("Scheduling Problem Creator", "Represents the generalized form of creators for Scheduling Problems.")]
+  [StorableClass]
+  public abstract class SchedulingCreator : SchedulingOperator, ISolutionCreator {
+    [StorableConstructor]
+    protected SchedulingCreator(bool deserializing) : base(deserializing) { }
+    protected SchedulingCreator(SchedulingCreator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+
+    public SchedulingCreator() {
+    }
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/SchedulingOperator.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/SchedulingOperator.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/SchedulingOperator.cs	(revision 6121)
@@ -0,0 +1,69 @@
+﻿#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.Linq;
+using System.Text;
+using HeuristicLab.Operators;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+using HeuristicLab.Parameters;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Problems.Scheduling {
+  [Item("SchedulingOperator", "A scheduling operator.")]
+  [StorableClass]
+  public abstract class SchedulingOperator : SingleSuccessorOperator{
+    [StorableConstructor]
+    protected SchedulingOperator(bool deserializing) : base(deserializing) { }
+    protected SchedulingOperator(SchedulingOperator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    #region Parameter Properties
+    public ILookupParameter<IntValue> NrOfResourcesParameter {
+      get { return (ILookupParameter<IntValue>)Parameters["NrOfResources"]; }
+    }
+    public ILookupParameter<ItemList<JSSPJob>> JobsParameter {
+      get { return (ILookupParameter<ItemList<JSSPJob>>)Parameters["Jobs"]; }
+    }
+    #endregion
+
+    #region Properties
+    public IntValue NrOfResources {
+      get { return NrOfResourcesParameter.ActualValue; }
+    }
+    public ItemList<JSSPJob> Jobs {
+      get { return JobsParameter.ActualValue; }
+    }
+    #endregion
+
+    public SchedulingOperator()
+      : base() {
+      Parameters.Add(new LookupParameter<IntValue>("NrOfResources", "Number of Resources used in this JSSP-Instance."));
+      Parameters.Add(new LookupParameter<ItemList<JSSPJob>>("Jobs", "Jobdata defining the precedence relationships and the duration of the tasks in this JSSP-Instance."));
+    }
+
+
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/SchedulingProblem.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/SchedulingProblem.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/SchedulingProblem.cs	(revision 6121)
@@ -0,0 +1,44 @@
+﻿#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.Linq;
+using System.Text;
+using HeuristicLab.Optimization;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Problems.Scheduling {
+  [Item("Scheduling Problem", "Abstract class that represents a Scheduling Problem")]
+  [StorableClass]
+  public abstract class SchedulingProblem : SingleObjectiveHeuristicOptimizationProblem<JSSPEvaluator, SchedulingCreator> {
+    [StorableConstructor]
+    protected SchedulingProblem(bool deserializing) : base(deserializing) { }
+    protected SchedulingProblem(SchedulingProblem original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    protected SchedulingProblem (JSSPEvaluator se, SchedulingCreator sc) : base (se, sc) {}
+
+  }
+}
Index: branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Task.cs
===================================================================
--- branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Task.cs	(revision 6121)
+++ branches/Scheduling/HeuristicLab.Problems.Scheduling/3.3/Task.cs	(revision 6121)
@@ -0,0 +1,83 @@
+﻿#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.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+using HeuristicLab.Data;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+
+
+namespace HeuristicLab.Problems.Scheduling {
+  [Item("Task Class", "Represents the smallest unit of schedule definitions.")]
+  [StorableClass]
+  public class Task : Item {
+    [StorableConstructor]
+    protected Task(bool deserializing) : base(deserializing) { }
+    protected Task(Task original, Cloner cloner)
+      : base(original, cloner) {
+      this.ResourceNr = cloner.Clone(original.ResourceNr);
+      this.Duration = cloner.Clone(original.Duration);
+      this.StartTime = cloner.Clone(original.StartTime);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Task(this, cloner);
+    }
+
+    public Task () {
+
+    }
+
+    public Task (IntValue taskNr, IntValue resNr, DoubleValue duration) {
+      Duration = duration;
+      ResourceNr = resNr;
+      TaskNr = taskNr;
+      StartTime = new DoubleValue (0);
+      IsScheduled = new BoolValue (false);
+    }
+
+
+    public BoolValue IsScheduled { get; set; }
+    public IntValue TaskNr { get; set; }
+    public IntValue ResourceNr { get; set; }
+    public DoubleValue Duration { get; set; }
+    public DoubleValue StartTime { get; set; }
+    public DoubleValue EndTime { 
+      get { 
+        return new DoubleValue (Duration.Value + StartTime.Value); 
+      } 
+    }
+
+    public override string ToString() {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("[");
+      sb.Append(String.Format ("{0,4}", ResourceNr));
+      sb.Append(";");
+      sb.Append(String.Format ("{0,4}", Duration));
+      sb.Append("]");
+      return sb.ToString();
+    }
+  }
+}
Index: branches/Scheduling/HeuristicLab/3.3/Files.txt
===================================================================
--- branches/Scheduling/HeuristicLab/3.3/Files.txt	(revision 6118)
+++ branches/Scheduling/HeuristicLab/3.3/Files.txt	(revision 6121)
@@ -82,4 +82,6 @@
 HeuristicLab.Problems.QuadraticAssignment\3.3:HeuristicLab.Problems.QuadraticAssignment-3.3.dll
 HeuristicLab.Problems.QuadraticAssignment.Views\3.3:HeuristicLab.Problems.QuadraticAssignment.Views-3.3.dll
+HeuristicLab.Problems.Scheduling\3.3:HeuristicLab.Problems.Scheduling-3.3.dll
+HeuristicLab.Problems.Scheduling.Views\3.3:HeuristicLab.Problems.Scheduling.Views-3.3.dll
 HeuristicLab.Problems.TestFunctions\3.3:HeuristicLab.Problems.TestFunctions-3.3.dll
 HeuristicLab.Problems.TestFunctions.Views\3.3:HeuristicLab.Problems.TestFunctions.Views-3.3.dll
