Index: /trunk/sources/HeuristicLab 3.3.sln
===================================================================
--- /trunk/sources/HeuristicLab 3.3.sln	(revision 9322)
+++ /trunk/sources/HeuristicLab 3.3.sln	(revision 9323)
@@ -28,4 +28,5 @@
 		{B7FA451C-26BF-4EE5-8E0E-BECAADA5B8E9} = {B7FA451C-26BF-4EE5-8E0E-BECAADA5B8E9}
 		{E226881D-315F-423D-B419-A766FE0D8685} = {E226881D-315F-423D-B419-A766FE0D8685}
+		{D34A7620-3E23-40D9-8647-637BE901F271} = {D34A7620-3E23-40D9-8647-637BE901F271}
 		{F62BCD22-FB83-4444-9401-8031C2487A86} = {F62BCD22-FB83-4444-9401-8031C2487A86}
 		{E0B45023-CB84-48A1-A1B7-8295B64B7BAD} = {E0B45023-CB84-48A1-A1B7-8295B64B7BAD}
@@ -376,4 +377,6 @@
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.Instances.Scheduling-3.3", "HeuristicLab.Problems.Instances.Scheduling\3.3\HeuristicLab.Problems.Instances.Scheduling-3.3.csproj", "{9D792B6D-836B-46DC-9D69-50B4B1E7B87F}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.ParallelEngine.Views", "HeuristicLab.ParallelEngine.Views\3.3\HeuristicLab.ParallelEngine.Views.csproj", "{D34A7620-3E23-40D9-8647-637BE901F271}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -386,4 +389,16 @@
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Debug|x64.ActiveCfg = Debug|x64
+		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Debug|x64.Build.0 = Debug|x64
+		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Debug|x86.ActiveCfg = Debug|x86
+		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Debug|x86.Build.0 = Debug|x86
+		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Release|x64.ActiveCfg = Release|x64
+		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Release|x64.Build.0 = Release|x64
+		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Release|x86.ActiveCfg = Release|x86
+		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Release|x86.Build.0 = Release|x86
 		{94186A6A-5176-4402-AE83-886557B53CCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{94186A6A-5176-4402-AE83-886557B53CCA}.Debug|Any CPU.Build.0 = Debug|Any CPU
@@ -506,16 +521,4 @@
 		{6A5F8C2D-B0C3-4B36-BC20-9B1A91EE6DB6}.Release|x86.ActiveCfg = Release|x86
 		{6A5F8C2D-B0C3-4B36-BC20-9B1A91EE6DB6}.Release|x86.Build.0 = Release|x86
-		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Debug|x64.ActiveCfg = Debug|x64
-		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Debug|x64.Build.0 = Debug|x64
-		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Debug|x86.ActiveCfg = Debug|x86
-		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Debug|x86.Build.0 = Debug|x86
-		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Release|Any CPU.Build.0 = Release|Any CPU
-		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Release|x64.ActiveCfg = Release|x64
-		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Release|x64.Build.0 = Release|x64
-		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Release|x86.ActiveCfg = Release|x86
-		{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}.Release|x86.Build.0 = Release|x86
 		{EE2034D9-6E27-48A1-B855-42D45F69A4FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{EE2034D9-6E27-48A1-B855-42D45F69A4FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
@@ -1826,4 +1829,16 @@
 		{9D792B6D-836B-46DC-9D69-50B4B1E7B87F}.Release|x86.ActiveCfg = Release|x86
 		{9D792B6D-836B-46DC-9D69-50B4B1E7B87F}.Release|x86.Build.0 = Release|x86
+		{D34A7620-3E23-40D9-8647-637BE901F271}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D34A7620-3E23-40D9-8647-637BE901F271}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D34A7620-3E23-40D9-8647-637BE901F271}.Debug|x64.ActiveCfg = Debug|x64
+		{D34A7620-3E23-40D9-8647-637BE901F271}.Debug|x64.Build.0 = Debug|x64
+		{D34A7620-3E23-40D9-8647-637BE901F271}.Debug|x86.ActiveCfg = Debug|x86
+		{D34A7620-3E23-40D9-8647-637BE901F271}.Debug|x86.Build.0 = Debug|x86
+		{D34A7620-3E23-40D9-8647-637BE901F271}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D34A7620-3E23-40D9-8647-637BE901F271}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D34A7620-3E23-40D9-8647-637BE901F271}.Release|x64.ActiveCfg = Release|x64
+		{D34A7620-3E23-40D9-8647-637BE901F271}.Release|x64.Build.0 = Release|x64
+		{D34A7620-3E23-40D9-8647-637BE901F271}.Release|x86.ActiveCfg = Release|x86
+		{D34A7620-3E23-40D9-8647-637BE901F271}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: /trunk/sources/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views.csproj
===================================================================
--- /trunk/sources/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views.csproj	(revision 9323)
+++ /trunk/sources/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views.csproj	(revision 9323)
@@ -0,0 +1,163 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{D34A7620-3E23-40D9-8647-637BE901F271}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.ParallelEngine.Views</RootNamespace>
+    <AssemblyName>HeuristicLab.ParallelEngine.Views-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\bin\</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\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ParallelEngineView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ParallelEngineView.Designer.cs">
+      <DependentUpon>ParallelEngineView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Plugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.cs.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>
+      <Private>False</Private>
+    </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>
+      <Private>False</Private>
+    </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>
+      <Private>False</Private>
+    </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>
+      <Private>False</Private>
+    </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>
+      <Private>False</Private>
+    </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>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.ParallelEngine\3.3\HeuristicLab.ParallelEngine-3.3.csproj">
+      <Project>{00814351-4ab8-4088-9b99-f62787b89e93}</Project>
+      <Name>HeuristicLab.ParallelEngine-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186a6a-5176-4402-ae83-886557b53cca}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd
+</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: /trunk/sources/HeuristicLab.ParallelEngine.Views/3.3/ParallelEngineView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.ParallelEngine.Views/3.3/ParallelEngineView.Designer.cs	(revision 9323)
+++ /trunk/sources/HeuristicLab.ParallelEngine.Views/3.3/ParallelEngineView.Designer.cs	(revision 9323)
@@ -0,0 +1,109 @@
+﻿namespace HeuristicLab.ParallelEngine.Views {
+  partial class ParallelEngineView {
+    /// <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.degreeOfParallelizationNumericUpDown = new System.Windows.Forms.NumericUpDown();
+      this.parallelismLabel = new System.Windows.Forms.Label();
+      this.infoLabel = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.degreeOfParallelizationNumericUpDown)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // executionTimeTextBox
+      // 
+      this.executionTimeTextBox.Location = new System.Drawing.Point(132, 0);
+      this.executionTimeTextBox.Size = new System.Drawing.Size(391, 20);
+      // 
+      // logView
+      // 
+      this.logView.Location = new System.Drawing.Point(0, 53);
+      this.logView.Size = new System.Drawing.Size(523, 353);
+      // 
+      // degreeOfParallelizationNumericUpDown
+      // 
+      this.degreeOfParallelizationNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.degreeOfParallelizationNumericUpDown.Enabled = false;
+      this.degreeOfParallelizationNumericUpDown.Location = new System.Drawing.Point(132, 27);
+      this.degreeOfParallelizationNumericUpDown.Minimum = new decimal(new int[] {
+            1,
+            0,
+            0,
+            -2147483648});
+      this.degreeOfParallelizationNumericUpDown.Name = "degreeOfParallelizationNumericUpDown";
+      this.degreeOfParallelizationNumericUpDown.Size = new System.Drawing.Size(363, 20);
+      this.degreeOfParallelizationNumericUpDown.TabIndex = 3;
+      this.degreeOfParallelizationNumericUpDown.Value = new decimal(new int[] {
+            1,
+            0,
+            0,
+            -2147483648});
+      this.degreeOfParallelizationNumericUpDown.ValueChanged += new System.EventHandler(this.degreeOfParallelizationNumericUpDown_ValueChanged);
+      // 
+      // parallelismLabel
+      // 
+      this.parallelismLabel.AutoSize = true;
+      this.parallelismLabel.Location = new System.Drawing.Point(3, 29);
+      this.parallelismLabel.Name = "parallelismLabel";
+      this.parallelismLabel.Size = new System.Drawing.Size(109, 13);
+      this.parallelismLabel.TabIndex = 4;
+      this.parallelismLabel.Text = "Degree of Parallelism:";
+      // 
+      // infoLabel
+      // 
+      this.infoLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.infoLabel.Image = HeuristicLab.Common.Resources.VSImageLibrary.Information;
+      this.infoLabel.Location = new System.Drawing.Point(501, 29);
+      this.infoLabel.Name = "infoLabel";
+      this.infoLabel.Size = new System.Drawing.Size(16, 16);
+      this.infoLabel.TabIndex = 5;
+      this.infoLabel.DoubleClick += new System.EventHandler(this.infoLabel_DoubleClick);
+      // 
+      // ParallelEngineView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.infoLabel);
+      this.Controls.Add(this.parallelismLabel);
+      this.Controls.Add(this.degreeOfParallelizationNumericUpDown);
+      this.Name = "ParallelEngineView";
+      this.Size = new System.Drawing.Size(523, 406);
+      this.Controls.SetChildIndex(this.logView, 0);
+      this.Controls.SetChildIndex(this.degreeOfParallelizationNumericUpDown, 0);
+      this.Controls.SetChildIndex(this.parallelismLabel, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.Controls.SetChildIndex(this.executionTimeLabel, 0);
+      this.Controls.SetChildIndex(this.executionTimeTextBox, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.degreeOfParallelizationNumericUpDown)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.NumericUpDown degreeOfParallelizationNumericUpDown;
+    private System.Windows.Forms.Label parallelismLabel;
+    protected System.Windows.Forms.Label infoLabel;
+  }
+}
Index: /trunk/sources/HeuristicLab.ParallelEngine.Views/3.3/ParallelEngineView.cs
===================================================================
--- /trunk/sources/HeuristicLab.ParallelEngine.Views/3.3/ParallelEngineView.cs	(revision 9323)
+++ /trunk/sources/HeuristicLab.ParallelEngine.Views/3.3/ParallelEngineView.cs	(revision 9323)
@@ -0,0 +1,83 @@
+﻿#region License Information
+
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.ParallelEngine.Views {
+  [View("Parallel Engine View")]
+  [Content(typeof(ParallelEngine), true)]
+  public partial class ParallelEngineView : EngineView {
+    public ParallelEngineView() {
+      InitializeComponent();
+    }
+
+    public new ParallelEngine Content {
+      get { return (ParallelEngine)base.Content; }
+      set { base.Content = value; }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      degreeOfParallelizationNumericUpDown.Enabled = Content != null && !Locked;
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.DegreeOfParallelismChanged += Content_DegreeOfParallelismChanged;
+    }
+    protected override void DeregisterContentEvents() {
+      Content.DegreeOfParallelismChanged -= Content_DegreeOfParallelismChanged;
+      base.DeregisterContentEvents();
+    }
+
+    private void Content_DegreeOfParallelismChanged(object sender, EventArgs e) {
+      degreeOfParallelizationNumericUpDown.Value = Content.DegreeOfParallelism;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content != null) degreeOfParallelizationNumericUpDown.Value = Content.DegreeOfParallelism;
+      else degreeOfParallelizationNumericUpDown.Value = -1;
+    }
+
+    private void degreeOfParallelizationNumericUpDown_ValueChanged(object sender, EventArgs e) {
+      if (Content == null) return;
+      if (degreeOfParallelizationNumericUpDown.Value == 0) {
+        degreeOfParallelizationNumericUpDown.Value = 1;
+        return;
+      }
+      Content.DegreeOfParallelism = (int)degreeOfParallelizationNumericUpDown.Value;
+    }
+
+    protected virtual void infoLabel_DoubleClick(object sender, EventArgs e) {
+      const string caption = "Degree of Parallelism Description";
+      const string description = @"Specifies the maximum degree of parallelization (-1 no limit given) to balance the maximum processor load. For further information see http://msdn.microsoft.com/en-us/library/system.threading.tasks.paralleloptions.maxdegreeofparallelism.aspx";
+      using (TextDialog dialog = new TextDialog(caption, description, true)) {
+        dialog.ShowDialog(this);
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.ParallelEngine.Views/3.3/Plugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.ParallelEngine.Views/3.3/Plugin.cs.frame	(revision 9323)
+++ /trunk/sources/HeuristicLab.ParallelEngine.Views/3.3/Plugin.cs.frame	(revision 9323)
@@ -0,0 +1,39 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.ParallelEngine.Views {
+  /// <summary>
+  /// Plugin class for HeuristicLab.ParallelEngine plugin.
+  /// </summary>
+  [Plugin("HeuristicLab.ParallelEngine.Views", "3.3.7.$WCREV$")]
+  [PluginFile("HeuristicLab.ParallelEngine.Views-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  public class HeuristicLabParallelEnginePlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.ParallelEngine.Views/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.ParallelEngine.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 9323)
+++ /trunk/sources/HeuristicLab.ParallelEngine.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 9323)
@@ -0,0 +1,56 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.ParallelEngine.Views")]
+[assembly: AssemblyDescription("HeuristicLab engine for parallel processing using multiple cores on a shared memory system")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2013 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("74FABFB1-1536-4EB9-9575-910842A476F8")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.7.$WCREV$")]
Index: /trunk/sources/HeuristicLab.ParallelEngine/3.3/ParallelEngine.cs
===================================================================
--- /trunk/sources/HeuristicLab.ParallelEngine/3.3/ParallelEngine.cs	(revision 9322)
+++ /trunk/sources/HeuristicLab.ParallelEngine/3.3/ParallelEngine.cs	(revision 9323)
@@ -37,8 +37,24 @@
   public class ParallelEngine : Engine {
     private CancellationToken cancellationToken;
+    private ParallelOptions parallelOptions;
+
+    [Storable(DefaultValue = -1)]
+    private int degreeOfParallelism;
+    public int DegreeOfParallelism {
+      get { return degreeOfParallelism; }
+      set {
+        if (degreeOfParallelism != value) {
+          degreeOfParallelism = value;
+          OnDegreeOfParallelismChanged();
+        }
+      }
+    }
 
     [StorableConstructor]
     protected ParallelEngine(bool deserializing) : base(deserializing) { }
-    protected ParallelEngine(ParallelEngine original, Cloner cloner) : base(original, cloner) { }
+    protected ParallelEngine(ParallelEngine original, Cloner cloner)
+      : base(original, cloner) {
+      this.DegreeOfParallelism = original.DegreeOfParallelism;
+    }
     public ParallelEngine() : base() { }
 
@@ -47,6 +63,15 @@
     }
 
+    public event EventHandler DegreeOfParallelismChanged;
+    protected void OnDegreeOfParallelismChanged() {
+      var handler = DegreeOfParallelismChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+
     protected override void Run(CancellationToken cancellationToken) {
       this.cancellationToken = cancellationToken;
+      parallelOptions = new ParallelOptions();
+      parallelOptions.MaxDegreeOfParallelism = DegreeOfParallelism;
       Run(ExecutionStack);
     }
@@ -65,13 +90,11 @@
           coll = (OperationCollection)next;
           if (coll.Parallel) {
-            Task[] tasks = new Task[coll.Count];
             Stack<IOperation>[] stacks = new Stack<IOperation>[coll.Count];
             for (int i = 0; i < coll.Count; i++) {
               stacks[i] = new Stack<IOperation>();
               stacks[i].Push(coll[i]);
-              tasks[i] = Task.Factory.StartNew(Run, stacks[i], cancellationToken);
             }
             try {
-              Task.WaitAll(tasks);
+              Parallel.ForEach(stacks, parallelOptions, Run);
             }
             catch (AggregateException ex) {
