Index: /branches/HiveHiveEngine/HeuristicLab 3.3.sln
===================================================================
--- /branches/HiveHiveEngine/HeuristicLab 3.3.sln	(revision 7286)
+++ /branches/HiveHiveEngine/HeuristicLab 3.3.sln	(revision 7287)
@@ -272,4 +272,8 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Algorithms.Benchmarks.Views-3.3", "HeuristicLab.Algorithms.Benchmarks.Views\3.3\HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj", "{3C906172-E044-4DF0-B4FD-AA21192D5D3E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.HiveEngine-3.3", "HeuristicLab.HiveEngine\3.3\HeuristicLab.HiveEngine-3.3.csproj", "{2C036542-5451-4A23-AFF6-87575C7BAFE7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.HiveEngine.Views-3.3", "HeuristicLab.HiveEngine.Views\3.3\HeuristicLab.HiveEngine.Views-3.3.csproj", "{E37F15E0-D0D6-4C6E-AD22-0DA514C943A3}"
 EndProject
 Global
@@ -1330,4 +1334,28 @@
 		{3C906172-E044-4DF0-B4FD-AA21192D5D3E}.Release|x86.ActiveCfg = Release|x86
 		{3C906172-E044-4DF0-B4FD-AA21192D5D3E}.Release|x86.Build.0 = Release|x86
+		{2C036542-5451-4A23-AFF6-87575C7BAFE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2C036542-5451-4A23-AFF6-87575C7BAFE7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2C036542-5451-4A23-AFF6-87575C7BAFE7}.Debug|x64.ActiveCfg = Debug|x64
+		{2C036542-5451-4A23-AFF6-87575C7BAFE7}.Debug|x64.Build.0 = Debug|x64
+		{2C036542-5451-4A23-AFF6-87575C7BAFE7}.Debug|x86.ActiveCfg = Debug|x86
+		{2C036542-5451-4A23-AFF6-87575C7BAFE7}.Debug|x86.Build.0 = Debug|x86
+		{2C036542-5451-4A23-AFF6-87575C7BAFE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{2C036542-5451-4A23-AFF6-87575C7BAFE7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2C036542-5451-4A23-AFF6-87575C7BAFE7}.Release|x64.ActiveCfg = Release|x64
+		{2C036542-5451-4A23-AFF6-87575C7BAFE7}.Release|x64.Build.0 = Release|x64
+		{2C036542-5451-4A23-AFF6-87575C7BAFE7}.Release|x86.ActiveCfg = Release|x86
+		{2C036542-5451-4A23-AFF6-87575C7BAFE7}.Release|x86.Build.0 = Release|x86
+		{E37F15E0-D0D6-4C6E-AD22-0DA514C943A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E37F15E0-D0D6-4C6E-AD22-0DA514C943A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E37F15E0-D0D6-4C6E-AD22-0DA514C943A3}.Debug|x64.ActiveCfg = Debug|x64
+		{E37F15E0-D0D6-4C6E-AD22-0DA514C943A3}.Debug|x64.Build.0 = Debug|x64
+		{E37F15E0-D0D6-4C6E-AD22-0DA514C943A3}.Debug|x86.ActiveCfg = Debug|x86
+		{E37F15E0-D0D6-4C6E-AD22-0DA514C943A3}.Debug|x86.Build.0 = Debug|x86
+		{E37F15E0-D0D6-4C6E-AD22-0DA514C943A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E37F15E0-D0D6-4C6E-AD22-0DA514C943A3}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E37F15E0-D0D6-4C6E-AD22-0DA514C943A3}.Release|x64.ActiveCfg = Release|x64
+		{E37F15E0-D0D6-4C6E-AD22-0DA514C943A3}.Release|x64.Build.0 = Release|x64
+		{E37F15E0-D0D6-4C6E-AD22-0DA514C943A3}.Release|x86.ActiveCfg = Release|x86
+		{E37F15E0-D0D6-4C6E-AD22-0DA514C943A3}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: /branches/HiveHiveEngine/HeuristicLab.Clients.Hive/3.3/HiveClient.cs
===================================================================
--- /branches/HiveHiveEngine/HeuristicLab.Clients.Hive/3.3/HiveClient.cs	(revision 7286)
+++ /branches/HiveHiveEngine/HeuristicLab.Clients.Hive/3.3/HiveClient.cs	(revision 7287)
@@ -29,4 +29,5 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
+using HeuristicLab.Optimization;
 using HeuristicLab.PluginInfrastructure;
 using TS = System.Threading.Tasks;
@@ -315,4 +316,5 @@
       finally {
         refreshableJob.IsProgressing = false;
+        refreshableJob.Progress.Finish();
       }
     }
@@ -364,5 +366,12 @@
           taskData = hiveTask.GetAsTaskData(true, out plugins);
         } else {
-          hiveTask.Task.IsParentTask = false;
+          if (hiveTask.ItemTask.Item is EngineAlgorithm && ((EngineAlgorithm)hiveTask.ItemTask.Item).Engine is IHiveEngine) {
+            hiveTask.Task.IsParentTask = true;
+            //TODO: this is a little hack so that this task does not get executed immediately because the taskdata will be uploaded twice
+            hiveTask.Task.State = TaskState.Aborted;
+          } else {
+            hiveTask.Task.IsParentTask = false;
+          }
+
           hiveTask.Task.FinishWhenChildJobsFinished = false;
           taskData = hiveTask.GetAsTaskData(false, out plugins);
@@ -389,4 +398,19 @@
             } else {
               hiveTask.Task.Id = HiveServiceLocator.Instance.CallHiveService((s) => s.AddTask(hiveTask.Task, taskData, groups.ToList()));
+
+              if (hiveTask.Task.State == TaskState.Aborted) {
+                //TODO: this is a very bad hack
+                if (hiveTask.ItemTask.Item is EngineAlgorithm && ((EngineAlgorithm)hiveTask.ItemTask.Item).Engine is IHiveEngine) {
+                  IHiveEngine he = ((EngineAlgorithm)hiveTask.ItemTask.Item).Engine as IHiveEngine;
+                  he.ParentTaskId = hiveTask.Task.Id;
+                  taskData = hiveTask.GetAsTaskData(false, out plugins);
+                  taskData.TaskId = hiveTask.Task.Id;
+
+                  Task t = HiveServiceLocator.Instance.CallHiveService((s) => s.GetTask(hiveTask.Task.Id));
+                  t.State = TaskState.Waiting;
+                  HiveServiceLocator.Instance.CallHiveService((s) => s.UpdateTaskData(t, taskData));
+                }
+              }
+
             }
           }
Index: /branches/HiveHiveEngine/HeuristicLab.HiveEngine.Views/3.3/HeuristicLab.HiveEngine.Views-3.3.csproj
===================================================================
--- /branches/HiveHiveEngine/HeuristicLab.HiveEngine.Views/3.3/HeuristicLab.HiveEngine.Views-3.3.csproj	(revision 7287)
+++ /branches/HiveHiveEngine/HeuristicLab.HiveEngine.Views/3.3/HeuristicLab.HiveEngine.Views-3.3.csproj	(revision 7287)
@@ -0,0 +1,202 @@
+﻿<?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>{E37F15E0-D0D6-4C6E-AD22-0DA514C943A3}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.HiveEngine.Views</RootNamespace>
+    <AssemblyName>HeuristicLab.HiveEngine.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>$(SolutionDir)\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>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\Plugin.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Release\Plugin.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\Plugin.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Release\Plugin.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+    <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="HiveEngineView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="HiveEngineView.Designer.cs">
+      <DependentUpon>HiveEngineView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="HiveEngineView.resx">
+      <DependentUpon>HiveEngineView.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Hive.JobManager\3.3\HeuristicLab.Clients.Hive.JobManager-3.3.csproj">
+      <Project>{DBFD7205-61AF-40EF-8776-3052DEF91CF3}</Project>
+      <Name>HeuristicLab.Clients.Hive.JobManager-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Hive\3.3\HeuristicLab.Clients.Hive-3.3.csproj">
+      <Project>{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB}</Project>
+      <Name>HeuristicLab.Clients.Hive-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <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\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.HiveEngine\3.3\HeuristicLab.HiveEngine-3.3.csproj">
+      <Project>{2C036542-5451-4A23-AFF6-87575C7BAFE7}</Project>
+      <Name>HeuristicLab.HiveEngine-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.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+      <Private>False</Private>
+    </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>
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </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/HiveHiveEngine/HeuristicLab.HiveEngine.Views/3.3/HiveEngineView.Designer.cs
===================================================================
--- /branches/HiveHiveEngine/HeuristicLab.HiveEngine.Views/3.3/HiveEngineView.Designer.cs	(revision 7287)
+++ /branches/HiveHiveEngine/HeuristicLab.HiveEngine.Views/3.3/HiveEngineView.Designer.cs	(revision 7287)
@@ -0,0 +1,235 @@
+﻿using HeuristicLab.Clients.Hive.JobManager.Views;
+namespace HeuristicLab.HiveEngine.Views {
+  partial class HiveEngineView {
+    /// <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.resourceIdsLabel = new System.Windows.Forms.Label();
+      this.resourceIdsTextBox = new System.Windows.Forms.TextBox();
+      this.priorityLabel = new System.Windows.Forms.Label();
+      this.priorityTextBox = new System.Windows.Forms.TextBox();
+      this.label1 = new System.Windows.Forms.Label();
+      this.executionTimeOnHiveTextBox = new System.Windows.Forms.TextBox();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.jobsTabPage = new System.Windows.Forms.TabPage();
+      this.hiveExperimentListView = new HeuristicLab.Clients.Hive.JobManager.Views.RefreshableHiveJobListView();
+      this.logTabPage = new System.Windows.Forms.TabPage();
+      this.logView = new HeuristicLab.Core.Views.LogView();
+      this.executionTimeLabel = new System.Windows.Forms.Label();
+      this.executionTimeTextBox = new System.Windows.Forms.TextBox();
+      this.isPrivilegedCheckBox = new System.Windows.Forms.CheckBox();
+      this.tabControl.SuspendLayout();
+      this.jobsTabPage.SuspendLayout();
+      this.logTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // resourceIdsLabel
+      // 
+      this.resourceIdsLabel.AutoSize = true;
+      this.resourceIdsLabel.Location = new System.Drawing.Point(113, 55);
+      this.resourceIdsLabel.Name = "resourceIdsLabel";
+      this.resourceIdsLabel.Size = new System.Drawing.Size(70, 13);
+      this.resourceIdsLabel.TabIndex = 3;
+      this.resourceIdsLabel.Text = "ResourceIds:";
+      // 
+      // resourceIdsTextBox
+      // 
+      this.resourceIdsTextBox.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.resourceIdsTextBox.Location = new System.Drawing.Point(189, 52);
+      this.resourceIdsTextBox.Name = "resourceIdsTextBox";
+      this.resourceIdsTextBox.Size = new System.Drawing.Size(428, 20);
+      this.resourceIdsTextBox.TabIndex = 4;
+      this.resourceIdsTextBox.Text = "HEAL";
+      this.resourceIdsTextBox.Validated += new System.EventHandler(this.resourceIdsTextBox_Validated);
+      // 
+      // priorityLabel
+      // 
+      this.priorityLabel.AutoSize = true;
+      this.priorityLabel.Location = new System.Drawing.Point(3, 55);
+      this.priorityLabel.Name = "priorityLabel";
+      this.priorityLabel.Size = new System.Drawing.Size(41, 13);
+      this.priorityLabel.TabIndex = 5;
+      this.priorityLabel.Text = "Priority:";
+      // 
+      // priorityTextBox
+      // 
+      this.priorityTextBox.Location = new System.Drawing.Point(50, 52);
+      this.priorityTextBox.Name = "priorityTextBox";
+      this.priorityTextBox.Size = new System.Drawing.Size(57, 20);
+      this.priorityTextBox.TabIndex = 6;
+      this.priorityTextBox.Text = "0";
+      this.priorityTextBox.Validated += new System.EventHandler(this.priorityTextBox_Validated);
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(3, 29);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(123, 13);
+      this.label1.TabIndex = 7;
+      this.label1.Text = "Execution Time on Hive:";
+      // 
+      // executionTimeOnHiveTextBox
+      // 
+      this.executionTimeOnHiveTextBox.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.executionTimeOnHiveTextBox.Location = new System.Drawing.Point(129, 26);
+      this.executionTimeOnHiveTextBox.Name = "executionTimeOnHiveTextBox";
+      this.executionTimeOnHiveTextBox.ReadOnly = true;
+      this.executionTimeOnHiveTextBox.Size = new System.Drawing.Size(577, 20);
+      this.executionTimeOnHiveTextBox.TabIndex = 8;
+      // 
+      // tabControl
+      // 
+      this.tabControl.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.tabControl.Controls.Add(this.jobsTabPage);
+      this.tabControl.Controls.Add(this.logTabPage);
+      this.tabControl.Location = new System.Drawing.Point(3, 78);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(700, 460);
+      this.tabControl.TabIndex = 9;
+      // 
+      // jobsTabPage
+      // 
+      this.jobsTabPage.Controls.Add(this.hiveExperimentListView);
+      this.jobsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.jobsTabPage.Name = "jobsTabPage";
+      this.jobsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.jobsTabPage.Size = new System.Drawing.Size(692, 434);
+      this.jobsTabPage.TabIndex = 0;
+      this.jobsTabPage.Text = "Jobs";
+      this.jobsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // hiveExperimentListView
+      // 
+      this.hiveExperimentListView.Caption = "HiveExperimentList View";
+      this.hiveExperimentListView.Content = null;
+      this.hiveExperimentListView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.hiveExperimentListView.Location = new System.Drawing.Point(3, 3);
+      this.hiveExperimentListView.Name = "hiveExperimentListView";
+      this.hiveExperimentListView.ReadOnly = false;
+      this.hiveExperimentListView.Size = new System.Drawing.Size(686, 428);
+      this.hiveExperimentListView.TabIndex = 0;
+      // 
+      // logTabPage
+      // 
+      this.logTabPage.Controls.Add(this.logView);
+      this.logTabPage.Location = new System.Drawing.Point(4, 22);
+      this.logTabPage.Name = "logTabPage";
+      this.logTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.logTabPage.Size = new System.Drawing.Size(692, 434);
+      this.logTabPage.TabIndex = 1;
+      this.logTabPage.Text = "Log";
+      this.logTabPage.UseVisualStyleBackColor = true;
+      // 
+      // logView
+      // 
+      this.logView.Caption = "SlaveView";
+      this.logView.Content = null;
+      this.logView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.logView.Location = new System.Drawing.Point(3, 3);
+      this.logView.Name = "logView";
+      this.logView.ReadOnly = false;
+      this.logView.Size = new System.Drawing.Size(686, 428);
+      this.logView.TabIndex = 0;
+      // 
+      // executionTimeLabel
+      // 
+      this.executionTimeLabel.AutoSize = true;
+      this.executionTimeLabel.Location = new System.Drawing.Point(4, 6);
+      this.executionTimeLabel.Name = "executionTimeLabel";
+      this.executionTimeLabel.Size = new System.Drawing.Size(83, 13);
+      this.executionTimeLabel.TabIndex = 10;
+      this.executionTimeLabel.Text = "Execution Time:";
+      // 
+      // executionTimeTextBox
+      // 
+      this.executionTimeTextBox.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.executionTimeTextBox.Location = new System.Drawing.Point(129, 3);
+      this.executionTimeTextBox.Name = "executionTimeTextBox";
+      this.executionTimeTextBox.ReadOnly = true;
+      this.executionTimeTextBox.Size = new System.Drawing.Size(577, 20);
+      this.executionTimeTextBox.TabIndex = 11;
+      // 
+      // isPrivilegedCheckBox
+      // 
+      this.isPrivilegedCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.isPrivilegedCheckBox.AutoSize = true;
+      this.isPrivilegedCheckBox.Location = new System.Drawing.Point(623, 54);
+      this.isPrivilegedCheckBox.Name = "isPrivilegedCheckBox";
+      this.isPrivilegedCheckBox.Size = new System.Drawing.Size(80, 17);
+      this.isPrivilegedCheckBox.TabIndex = 13;
+      this.isPrivilegedCheckBox.Text = "IsPrivileged";
+      this.isPrivilegedCheckBox.UseVisualStyleBackColor = true;
+      this.isPrivilegedCheckBox.Validated += new System.EventHandler(this.isPrivilegedCheckBox_Validated);
+      // 
+      // HiveEngineView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.isPrivilegedCheckBox);
+      this.Controls.Add(this.executionTimeTextBox);
+      this.Controls.Add(this.executionTimeLabel);
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.label1);
+      this.Controls.Add(this.executionTimeOnHiveTextBox);
+      this.Controls.Add(this.priorityTextBox);
+      this.Controls.Add(this.priorityLabel);
+      this.Controls.Add(this.resourceIdsLabel);
+      this.Controls.Add(this.resourceIdsTextBox);
+      this.Name = "HiveEngineView";
+      this.Size = new System.Drawing.Size(706, 541);
+      this.tabControl.ResumeLayout(false);
+      this.jobsTabPage.ResumeLayout(false);
+      this.logTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label resourceIdsLabel;
+    private System.Windows.Forms.TextBox resourceIdsTextBox;
+    private System.Windows.Forms.Label priorityLabel;
+    private System.Windows.Forms.TextBox priorityTextBox;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.TextBox executionTimeOnHiveTextBox;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage jobsTabPage;
+    private System.Windows.Forms.TabPage logTabPage;
+    private System.Windows.Forms.Label executionTimeLabel;
+    private System.Windows.Forms.TextBox executionTimeTextBox;
+    private HeuristicLab.Core.Views.LogView logView;
+    private RefreshableHiveJobListView hiveExperimentListView;
+    private System.Windows.Forms.CheckBox isPrivilegedCheckBox;
+  }
+}
Index: /branches/HiveHiveEngine/HeuristicLab.HiveEngine.Views/3.3/HiveEngineView.cs
===================================================================
--- /branches/HiveHiveEngine/HeuristicLab.HiveEngine.Views/3.3/HiveEngineView.cs	(revision 7287)
+++ /branches/HiveHiveEngine/HeuristicLab.HiveEngine.Views/3.3/HiveEngineView.cs	(revision 7287)
@@ -0,0 +1,116 @@
+﻿#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 HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.HiveEngine.Views {
+  [View("Hive Engine View")]
+  [Content(typeof(HiveEngine), IsDefaultView = true)]
+  public sealed partial class HiveEngineView : ItemView {
+    public new HiveEngine Content {
+      get { return (HiveEngine)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public HiveEngineView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.ExecutionTimeOnHiveChanged -= new EventHandler(Content_ExecutionTimeOnHiveChanged);
+      Content.ExecutionTimeChanged -= new EventHandler(Content_ExecutionTimeChanged);
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ExecutionTimeOnHiveChanged += new EventHandler(Content_ExecutionTimeOnHiveChanged);
+      Content.ExecutionTimeChanged += new EventHandler(Content_ExecutionTimeChanged);
+    }
+
+    #region Event Handlers (Content)
+    private void Content_ExecutionTimeChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(Content_ExecutionTimeChanged), sender, e);
+      } else {
+        executionTimeTextBox.Text = Content.ExecutionTime.ToString();
+      }
+    }
+
+    private void Content_ExecutionTimeOnHiveChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(Content_ExecutionTimeOnHiveChanged), sender, e);
+      } else {
+        executionTimeOnHiveTextBox.Text = Content.ExecutionTimeOnHive.ToString();
+      }
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        resourceIdsTextBox.Text = string.Empty;
+        priorityTextBox.Text = string.Empty;
+        executionTimeOnHiveTextBox.Text = string.Empty;
+        isPrivilegedCheckBox.Checked = false;
+        hiveExperimentListView.Content = null;
+        logView.Content = null;
+      } else {
+        resourceIdsTextBox.Text = Content.ResourceNames;
+        priorityTextBox.Text = Content.Priority.ToString();
+        executionTimeOnHiveTextBox.Text = Content.ExecutionTimeOnHive.ToString();
+        isPrivilegedCheckBox.Checked = Content.IsPrivileged;
+        hiveExperimentListView.Content = Content.Jobs;
+        logView.Content = Content.Log;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      // Enable or disable controls based on whether the content is null or the view is set readonly
+      if (Content != null) {
+        resourceIdsTextBox.ReadOnly = this.ReadOnly;
+        priorityTextBox.ReadOnly = this.ReadOnly;
+        isPrivilegedCheckBox.Enabled = Content.IsAllowedPrivileged;
+      } else {
+        resourceIdsTextBox.ReadOnly = false;
+        priorityTextBox.ReadOnly = false;
+        isPrivilegedCheckBox.Enabled = false;
+      }
+    }
+
+    #region Event Handlers (child controls)
+    private void resourceIdsTextBox_Validated(object sender, EventArgs e) {
+      Content.ResourceNames = resourceIdsTextBox.Text;
+    }
+
+    private void priorityTextBox_Validated(object sender, EventArgs e) {
+      Content.Priority = int.Parse(priorityTextBox.Text);
+    }
+
+    private void isPrivilegedCheckBox_Validated(object sender, EventArgs e) {
+      Content.IsPrivileged = isPrivilegedCheckBox.Checked;
+    }
+    #endregion
+  }
+}
Index: /branches/HiveHiveEngine/HeuristicLab.HiveEngine.Views/3.3/HiveEngineView.resx
===================================================================
--- /branches/HiveHiveEngine/HeuristicLab.HiveEngine.Views/3.3/HiveEngineView.resx	(revision 7287)
+++ /branches/HiveHiveEngine/HeuristicLab.HiveEngine.Views/3.3/HiveEngineView.resx	(revision 7287)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/HiveHiveEngine/HeuristicLab.HiveEngine.Views/3.3/Plugin.cs.frame
===================================================================
--- /branches/HiveHiveEngine/HeuristicLab.HiveEngine.Views/3.3/Plugin.cs.frame	(revision 7287)
+++ /branches/HiveHiveEngine/HeuristicLab.HiveEngine.Views/3.3/Plugin.cs.frame	(revision 7287)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.HiveEngine.Views {
+  [Plugin("HeuristicLab.HiveEngine.Views", "3.3.6.$WCREV$")]
+  [PluginFile("HeuristicLab.HiveEngine.Views-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Clients.Hive", "3.3")]
+  [PluginDependency("HeuristicLab.Clients.Hive.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.HiveEngine", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  public class HeuristicLabHiveEngineViewsPlugin : PluginBase {
+  }
+}
Index: /branches/HiveHiveEngine/HeuristicLab.HiveEngine.Views/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/HiveHiveEngine/HeuristicLab.HiveEngine.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 7287)
+++ /branches/HiveHiveEngine/HeuristicLab.HiveEngine.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 7287)
@@ -0,0 +1,57 @@
+﻿#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.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.HiveEngine.Views")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("HEAL")]
+[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("7c14407e-6980-465b-ba3a-4a916d48989b")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.6.$WCREV$")]
Index: /branches/HiveHiveEngine/HeuristicLab.HiveEngine/3.3/Exceptions/HiveEngineException.cs
===================================================================
--- /branches/HiveHiveEngine/HeuristicLab.HiveEngine/3.3/Exceptions/HiveEngineException.cs	(revision 7287)
+++ /branches/HiveHiveEngine/HeuristicLab.HiveEngine/3.3/Exceptions/HiveEngineException.cs	(revision 7287)
@@ -0,0 +1,30 @@
+﻿#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;
+
+namespace HeuristicLab.HiveEngine {
+  public class HiveEngineException : Exception {
+    public HiveEngineException(string message) : base(message) { }
+
+    public HiveEngineException(string message, Exception innerException) : base(message, innerException) { }
+  }
+}
Index: /branches/HiveHiveEngine/HeuristicLab.HiveEngine/3.3/Exceptions/ScopeMergeException.cs
===================================================================
--- /branches/HiveHiveEngine/HeuristicLab.HiveEngine/3.3/Exceptions/ScopeMergeException.cs	(revision 7287)
+++ /branches/HiveHiveEngine/HeuristicLab.HiveEngine/3.3/Exceptions/ScopeMergeException.cs	(revision 7287)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.HiveEngine {
+  [Serializable]
+  public class ScopeMergeException : Exception {
+    public ScopeMergeException() : base() { }
+    public ScopeMergeException(string msg) : base(msg) { }
+    public ScopeMergeException(string msg, Exception e) : base(msg, e) { }
+    protected ScopeMergeException(SerializationInfo info, StreamingContext context) : base(info, context) { }
+
+  }
+}
Index: /branches/HiveHiveEngine/HeuristicLab.HiveEngine/3.3/HeuristicLab.HiveEngine-3.3.csproj
===================================================================
--- /branches/HiveHiveEngine/HeuristicLab.HiveEngine/3.3/HeuristicLab.HiveEngine-3.3.csproj	(revision 7287)
+++ /branches/HiveHiveEngine/HeuristicLab.HiveEngine/3.3/HeuristicLab.HiveEngine-3.3.csproj	(revision 7287)
@@ -0,0 +1,197 @@
+﻿<?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>{2C036542-5451-4A23-AFF6-87575C7BAFE7}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.HiveEngine</RootNamespace>
+    <AssemblyName>HeuristicLab.HiveEngine-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>$(SolutionDir)\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>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\Plugin.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Release\Plugin.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\Plugin.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>$(SolutionDir)\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Release\Plugin.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+    <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Exceptions\ScopeMergeException.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="HiveEngine.cs" />
+    <Compile Include="Exceptions\HiveEngineException.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Common\3.3\HeuristicLab.Clients.Common-3.3.csproj">
+      <Project>{730A9104-D4D1-4360-966B-E49B7571DDA3}</Project>
+      <Name>HeuristicLab.Clients.Common-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Hive\3.3\HeuristicLab.Clients.Hive-3.3.csproj">
+      <Project>{B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB}</Project>
+      <Name>HeuristicLab.Clients.Hive-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <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\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\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.Hive\3.3\HeuristicLab.Hive-3.3.csproj">
+      <Project>{F98A1740-9AC9-4D36-A582-6A2D0D06978D}</Project>
+      <Name>HeuristicLab.Hive-3.3</Name>
+      <Private>False</Private>
+    </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>
+      <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>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Random\3.3\HeuristicLab.Random-3.3.csproj">
+      <Project>{F4539FB6-4708-40C9-BE64-0A1390AEA197}</Project>
+      <Name>HeuristicLab.Random-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.SequentialEngine\3.3\HeuristicLab.SequentialEngine-3.3.csproj">
+      <Project>{DC3D7072-7999-4719-B65D-3997744D5DC1}</Project>
+      <Name>HeuristicLab.SequentialEngine-3.3</Name>
+      <Private>False</Private>
+    </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>
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </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/HiveHiveEngine/HeuristicLab.HiveEngine/3.3/HiveEngine.cs
===================================================================
--- /branches/HiveHiveEngine/HeuristicLab.HiveEngine/3.3/HiveEngine.cs	(revision 7287)
+++ /branches/HiveHiveEngine/HeuristicLab.HiveEngine/3.3/HiveEngine.cs	(revision 7287)
@@ -0,0 +1,423 @@
+﻿#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.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using HeuristicLab.Clients.Common;
+using HeuristicLab.Clients.Hive;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.HiveEngine {
+  /// <summary>
+  /// Represents an engine that executes operations which can be executed in parallel on the hive
+  /// </summary>
+  [StorableClass]
+  [Item("Hive Engine", "Engine for parallel execution on the hive. You need enable `Parallel` for at least one operator in your operator graph to have all childoperations parallelized. Also those childoperations must not have sideeffects on a higher scope.")]
+  public class HiveEngine : Engine, IHiveEngine {
+    private static object locker = new object();
+    private CancellationToken cancellationToken;
+    private bool firstRun = true;
+    AutoResetEvent handle = new AutoResetEvent(false);
+
+    [Storable]
+    public Guid ParentTaskId { get; set; }
+
+    [Storable]
+    private IOperator currentOperator;
+
+    [Storable]
+    private int nrOfSentRuns;
+
+    [Storable]
+    private string username;
+    public string Username {
+      get { return username; }
+      set { username = value; }
+    }
+
+    [Storable]
+    private string password;
+    public string Password {
+      get { return password; }
+      set { password = value; }
+    }
+
+    [Storable]
+    public string ResourceNames { get; set; }
+
+    [Storable]
+    private int priority;
+    public int Priority {
+      get { return priority; }
+      set { priority = value; }
+    }
+
+    [Storable]
+    private TimeSpan executionTimeOnHive;
+    public TimeSpan ExecutionTimeOnHive {
+      get { return executionTimeOnHive; }
+      set {
+        if (value != executionTimeOnHive) {
+          executionTimeOnHive = value;
+          OnExecutionTimeOnHiveChanged();
+        }
+      }
+    }
+
+    [Storable]
+    private bool isPrivileged;
+    public bool IsPrivileged {
+      get { return isPrivileged; }
+      set { isPrivileged = value; }
+    }
+
+    // Task can't be storable, so RefreshableHiveExperiment can't be stored. But as previous runs are only informative it does not matter (only execution time on hive will be wrong because of that -> Todo)
+    private ItemCollection<RefreshableJob> jobs = new ItemCollection<RefreshableJob>();
+    public ItemCollection<RefreshableJob> Jobs {
+      get { return jobs; }
+      set { jobs = value; }
+    }
+
+    private List<Plugin> onlinePlugins;
+    public List<Plugin> OnlinePlugins {
+      get { return onlinePlugins; }
+      set { onlinePlugins = value; }
+    }
+
+    private List<Plugin> alreadyUploadedPlugins;
+    public List<Plugin> AlreadyUploadedPlugins {
+      get { return alreadyUploadedPlugins; }
+      set { alreadyUploadedPlugins = value; }
+    }
+
+    [Storable]
+    private OperationCollection continueCollection = null;
+
+    [Storable]
+    private Guid lastJobGuid = Guid.Empty;
+
+    public bool IsAllowedPrivileged { get; set; }
+
+    #region constructors and cloning
+    public HiveEngine() {
+      this.ResourceNames = "HEAL";
+      this.Priority = 0;
+      this.log = new ThreadSafeLog();
+      this.IsAllowedPrivileged = HiveServiceLocator.Instance.CallHiveService((s) => s.IsAllowedPrivileged());
+      HiveServiceClient cl = ClientFactory.CreateClient<HiveServiceClient, IHiveService>();
+      username = cl.ClientCredentials.UserName.UserName;
+      password = cl.ClientCredentials.UserName.Password;
+    }
+
+    [StorableConstructor]
+    protected HiveEngine(bool deserializing) : base(deserializing) { }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      if (username != string.Empty && password != string.Empty) {
+        HiveServiceLocator.Instance.Username = username;
+        HiveServiceLocator.Instance.Password = password;
+      }
+    }
+
+    protected HiveEngine(HiveEngine original, Cloner cloner)
+      : base(original, cloner) {
+      this.ResourceNames = original.ResourceNames;
+      this.currentOperator = cloner.Clone(original.currentOperator);
+      this.priority = original.priority;
+      this.executionTimeOnHive = original.executionTimeOnHive;
+      this.IsPrivileged = original.IsPrivileged;
+      this.username = original.username;
+      this.password = original.password;
+      this.continueCollection = original.continueCollection;
+      this.lastJobGuid = original.lastJobGuid;
+      this.nrOfSentRuns = original.nrOfSentRuns;
+      this.ParentTaskId = original.ParentTaskId;
+      // do not clone jobs - otherwise they would be sent with every task
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new HiveEngine(this, cloner);
+    }
+    #endregion
+
+    #region Events
+    protected override void OnPrepared() {
+      base.OnPrepared();
+      this.ExecutionTimeOnHive = TimeSpan.Zero;
+      continueCollection = null;
+      lastJobGuid = Guid.Empty;
+    }
+
+    public event EventHandler ExecutionTimeOnHiveChanged;
+    protected virtual void OnExecutionTimeOnHiveChanged() {
+      var handler = ExecutionTimeOnHiveChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+
+    protected override void Run(CancellationToken cancellationToken) {
+      this.cancellationToken = cancellationToken;
+      Run(ExecutionStack);
+    }
+
+    private void Run(object state) {
+      Stack<IOperation> executionStack = (Stack<IOperation>)state;
+      IOperation next;
+      OperationCollection coll;
+      IAtomicOperation operation;
+
+      if (firstRun) {
+        TaskScheduler.UnobservedTaskException += new EventHandler<UnobservedTaskExceptionEventArgs>(TaskScheduler_UnobservedTaskException);
+        this.OnlinePlugins = HiveServiceLocator.Instance.CallHiveService(s => s.GetPlugins()).Where(x => x.Hash != null).ToList();
+        this.AlreadyUploadedPlugins = new List<Plugin>();
+        firstRun = false;
+      }
+
+      while (executionStack.Count > 0) {
+        cancellationToken.ThrowIfCancellationRequested();
+
+        if (continueCollection != null && lastJobGuid != Guid.Empty) {
+          EngineTask[] eTasks = RetrieveResultsFromHive(lastJobGuid);
+          RestoreStateFromExecutedHiveTasks(eTasks, continueCollection);
+          continueCollection = null;
+          lastJobGuid = Guid.Empty;
+        }
+
+        next = executionStack.Pop();
+        if (next is OperationCollection) {
+          coll = (OperationCollection)next;
+
+          if (coll.Parallel) {
+            try {
+              // clone the parent scope here and reuse it for each operation. otherwise for each task the whole scope-tree first needs to be copied and then cleaned, which causes a lot of work for the Garbage Collector
+              IScope parentScopeClone = (IScope)((IAtomicOperation)coll.First()).Scope.Parent.Clone();
+              parentScopeClone.SubScopes.Clear();
+              parentScopeClone.ClearParentScopes();
+
+              EngineTask[] tasks = new EngineTask[coll.Count];
+              for (int i = 0; i < coll.Count; i++) {
+                tasks[i] = new EngineTask(coll[i], new SequentialEngine.SequentialEngine());
+              }
+
+              var experiment = CreateJob();
+              ExecuteOnHive(experiment, tasks, parentScopeClone, new CancellationToken());
+              continueCollection = coll;
+              Pause();
+            }
+            catch {
+              executionStack.Push(coll); throw;
+            }
+          } else {
+            for (int i = coll.Count - 1; i >= 0; i--)
+              if (coll[i] != null) executionStack.Push(coll[i]);
+          }
+        } else if (next is IAtomicOperation) {
+          operation = (IAtomicOperation)next;
+          try {
+            next = operation.Operator.Execute((IExecutionContext)operation, cancellationToken);
+          }
+          catch (Exception ex) {
+            executionStack.Push(operation);
+            if (ex is OperationCanceledException) throw ex;
+            else throw new OperatorExecutionException(operation.Operator, ex);
+          }
+          if (next != null) executionStack.Push(next);
+
+          if (operation.Operator.Breakpoint) {
+            log.LogMessage(string.Format("Breakpoint: {0}", operation.Operator.Name != string.Empty ? operation.Operator.Name : operation.Operator.ItemName));
+            Pause();
+          }
+        }
+      }
+    }
+
+    private void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e) {
+      e.SetObserved(); // avoid crash of process
+    }
+
+    private IRandom FindRandomParameter(IExecutionContext ec) {
+      try {
+        if (ec == null)
+          return null;
+
+        foreach (var p in ec.Parameters) {
+          if (p.Name == "Random" && p is IValueParameter)
+            return ((IValueParameter)p).Value as IRandom;
+        }
+        return FindRandomParameter(ec.Parent);
+      }
+      catch { return null; }
+    }
+
+    private void RestoreStateFromExecutedHiveTasks(EngineTask[] tasks, OperationCollection coll) {
+      IScope[] scopes = new Scope[tasks.Length];
+
+      if (tasks.Count() != coll.Count) {
+        throw new ArgumentException("Retrieved tasks don't match operation collection");
+      }
+
+      int j = 0;
+      foreach (var hiveJob in tasks) {
+        var scope = ((IAtomicOperation)((EngineTask)hiveJob).InitialOperation).Scope;
+        scopes[j++] = scope;
+      }
+
+      for (int i = 0; i < coll.Count; i++) {
+        if (coll[i] is IAtomicOperation) {
+          ExchangeScope(scopes[i], ((IAtomicOperation)coll[i]).Scope);
+        } else if (coll[i] is OperationCollection) {
+          // todo ??
+        }
+      }
+    }
+
+    private static void ExchangeScope(IScope source, IScope target) {
+      target.Variables.Clear();
+      target.Variables.AddRange(source.Variables);
+      target.SubScopes.Clear();
+      target.SubScopes.AddRange(source.SubScopes);
+      // TODO: validate if parent scopes match - otherwise source is invalid
+    }
+
+    /// <summary>
+    /// This method blocks until all jobs are finished
+    /// TODO: Cancelation needs to be refined; all tasks currently stay in Semaphore.WaitOne after cancelation
+    /// </summary>
+    /// <param name="tasks"></param>
+    private void ExecuteOnHive(RefreshableJob refreshableJob, EngineTask[] tasks, IScope parentScopeClone, CancellationToken cancellationToken) {
+      log.LogMessage(string.Format("Executing {0} operations on the hive.", tasks.Length));
+      IScope[] scopes = new Scope[tasks.Length];
+      object locker = new object();
+      var hiveExperiment = refreshableJob.Job;
+
+      try {
+        // create upload-tasks
+        for (int i = 0; i < tasks.Length; i++) {
+          var engineHiveTask = new EngineHiveTask(tasks[i], parentScopeClone);
+          engineHiveTask.Task.Priority = this.Priority;
+          if (ParentTaskId != Guid.Empty) {
+            engineHiveTask.Task.ParentTaskId = ParentTaskId;
+          }
+          refreshableJob.HiveTasks.Add(engineHiveTask);
+
+          // shuffle random variable to avoid the same random sequence in each operation; todo: does not yet work (it cannot find the random variable)
+          IRandom random = FindRandomParameter(tasks[i].InitialOperation as IExecutionContext);
+          if (random != null)
+            random.Reset(random.Next());
+        }
+        HiveClient.StartJob((e) => { log.LogException(e); }, refreshableJob, cancellationToken);
+
+        while (refreshableJob.Job.Id == Guid.Empty) {
+          Thread.Sleep(500);
+        }
+        this.lastJobGuid = refreshableJob.Job.Id;
+        refreshableJob.Progress.Finished += new EventHandler(Progress_Finished);
+        handle.WaitOne();
+        refreshableJob.Progress.Finished -= new EventHandler(Progress_Finished);
+      }
+      catch (OperationCanceledException e) {
+        throw e;
+      }
+      catch (Exception e) {
+        log.LogException(e);
+        throw e;
+      }
+    }
+
+    void Progress_Finished(object sender, EventArgs e) {
+      handle.Set();
+    }
+
+    private EngineTask[] RetrieveResultsFromHive(Guid jobGuid) {
+      Job job = HiveServiceLocator.Instance.CallHiveService<Job>(s => s.GetJob(jobGuid));
+      var allTasks = HiveServiceLocator.Instance.CallHiveService(s => s.GetLightweightJobTasks(job.Id));
+      var totalJobCount = allTasks.Count();
+
+      TaskDownloader downloader = new TaskDownloader(allTasks.Select(x => x.Id));
+      downloader.StartAsync();
+      while (!downloader.IsFinished) {
+        Thread.Sleep(500);
+        if (downloader.IsFaulted) {
+          throw downloader.Exception;
+        }
+      }
+      List<HiveTask> allHiveTasks = downloader.Results.Values.ToList();
+      allHiveTasks.ForEach(x => this.ExecutionTimeOnHive += x.Task.ExecutionTime);
+
+      var failedJobs = allHiveTasks.Where(x => x.Task.State != TaskState.Finished);
+      if (failedJobs.Count() > 0) {
+        throw new HiveEngineException("Task failed: " + failedJobs.First().Task.StateLog.Last().Exception);
+      }
+
+      List<EngineTask> engineTasks = new List<EngineTask>();
+
+      foreach (var hTask in allHiveTasks) {
+        EngineTask ehTask = (EngineTask)hTask.ItemTask;
+        engineTasks.Add(ehTask);
+      }
+
+      jobs.Clear();
+      DeleteHiveExperiment(jobGuid);
+      return engineTasks.ToArray();
+    }
+
+    private RefreshableJob CreateJob() {
+      lock (locker) {
+        var hiveExperiment = new Job();
+        hiveExperiment.Name = "HiveEngine Run " + nrOfSentRuns++;
+        hiveExperiment.DateCreated = DateTime.Now;
+        hiveExperiment.ResourceNames = this.ResourceNames;
+        hiveExperiment.IsPrivileged = this.IsPrivileged;
+        var refreshableHiveExperiment = new RefreshableJob(hiveExperiment);
+        //refreshableHiveExperiment.RefreshAutomatically = false;
+        refreshableHiveExperiment.IsDownloadable = false; // download happens automatically so disable button
+        jobs.Add(refreshableHiveExperiment);
+        return refreshableHiveExperiment;
+      }
+    }
+
+    private void DeleteHiveExperiment(Guid jobId) {
+      HiveClient.TryAndRepeat(() => {
+        HiveServiceLocator.Instance.CallHiveService(s => s.DeleteJob(jobId));
+      }, 5, string.Format("Could not delete jobs"));
+    }
+
+    private List<Guid> GetResourceIds() {
+      return HiveServiceLocator.Instance.CallHiveService(service => {
+        var resourceNames = ResourceNames.Split(';');
+        var resourceIds = new List<Guid>();
+        foreach (var resourceName in resourceNames) {
+          Guid resourceId = service.GetResourceId(resourceName);
+          if (resourceId == Guid.Empty) {
+            throw new ResourceNotFoundException(string.Format("Could not find the resource '{0}'", resourceName));
+          }
+          resourceIds.Add(resourceId);
+        }
+        return resourceIds;
+      });
+    }
+  }
+}
Index: /branches/HiveHiveEngine/HeuristicLab.HiveEngine/3.3/Plugin.cs.frame
===================================================================
--- /branches/HiveHiveEngine/HeuristicLab.HiveEngine/3.3/Plugin.cs.frame	(revision 7287)
+++ /branches/HiveHiveEngine/HeuristicLab.HiveEngine/3.3/Plugin.cs.frame	(revision 7287)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.HiveEngine {
+  [Plugin("HeuristicLab.HiveEngine", "3.3.6.$WCREV$")]
+  [PluginFile("HeuristicLab.HiveEngine-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Clients.Hive", "3.3")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Clients.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Hive", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.Random", "3.3")]
+  [PluginDependency("HeuristicLab.SequentialEngine", "3.3")]
+  public class HeuristicLabHiveEnginePlugin : PluginBase {
+  }
+}
Index: /branches/HiveHiveEngine/HeuristicLab.HiveEngine/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/HiveHiveEngine/HeuristicLab.HiveEngine/3.3/Properties/AssemblyInfo.cs.frame	(revision 7287)
+++ /branches/HiveHiveEngine/HeuristicLab.HiveEngine/3.3/Properties/AssemblyInfo.cs.frame	(revision 7287)
@@ -0,0 +1,57 @@
+﻿#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.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.HiveEngine")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("HEAL")]
+[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("7c14407e-6980-465b-ba3a-4a916d48989b")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.6.$WCREV$")]
Index: /branches/HiveHiveEngine/HeuristicLab.Services.Hive/3.3/HiveDao.cs
===================================================================
--- /branches/HiveHiveEngine/HeuristicLab.Services.Hive/3.3/HiveDao.cs	(revision 7286)
+++ /branches/HiveHiveEngine/HeuristicLab.Services.Hive/3.3/HiveDao.cs	(revision 7287)
@@ -103,4 +103,23 @@
                                || child.State == TaskState.Aborted
                                || child.State == TaskState.Failed).All(x => x)
+                    orderby ar.Task.Priority descending, db.Random()
+                    select DT.Convert.ToDto(ar.Task);
+        return count == 0 ? query.ToArray() : query.Take(count).ToArray();
+      }
+    }
+
+    /// <summary>
+    /// this is for the hive engine
+    /// </summary>    
+    private IEnumerable<DT.Task> GetPausedParentTasks(IEnumerable<Guid> resourceIds, int count) {
+      using (var db = CreateContext()) {
+        var query = from ar in db.AssignedResources
+                    where resourceIds.Contains(ar.ResourceId)
+                       && ar.Task.State == TaskState.Paused
+                       && ar.Task.IsParentTask
+                       && !ar.Task.FinishWhenChildJobsFinished
+                       && (from child in db.Tasks
+                           where child.ParentTaskId == ar.Task.TaskId
+                           select child).All(x => x.State == TaskState.Finished)
                        && (from child in db.Tasks // avoid returning WaitForChildTasks task where no child-task exist (yet)
                            where child.ParentTaskId == ar.Task.TaskId
@@ -115,7 +134,12 @@
       using (var db = CreateContext()) {
         var resourceIds = GetParentResources(slave.Id).Select(r => r.Id);
-        //Originally we checked here if there are parent tasks which should be calculated (with GetParentTasks(resourceIds, count, false);).
-        //Because there is at the moment no case where this makes sense (there don't exist parent tasks which need to be calculated), 
-        //we skip this step because it's wasted runtime
+
+        //check for freshly uploaded hive engine tasks
+        var waitingParentJobs = GetParentTasks(resourceIds, count, false);
+        if (count > 0 && waitingParentJobs.Count() >= count) return waitingParentJobs.Take(count).ToArray();
+
+        //check if there are hive engine tasks which have finished childs 
+        waitingParentJobs = GetPausedParentTasks(resourceIds, count);
+        if (count > 0 && waitingParentJobs.Count() >= count) return waitingParentJobs.Take(count).ToArray();
 
         var query = from ar in db.AssignedResources
Index: /branches/HiveHiveEngine/HeuristicLab.Services.Hive/3.3/HiveService.cs
===================================================================
--- /branches/HiveHiveEngine/HeuristicLab.Services.Hive/3.3/HiveService.cs	(revision 7286)
+++ /branches/HiveHiveEngine/HeuristicLab.Services.Hive/3.3/HiveService.cs	(revision 7287)
@@ -71,5 +71,8 @@
         }
         dao.AddTaskData(taskData);
-        dao.UpdateTaskState(task.Id, DA.TaskState.Waiting, null, userManager.CurrentUserId, null);
+        //TODO: hack!! change this
+        if (task.State != TaskState.Aborted) {
+          dao.UpdateTaskState(task.Id, DA.TaskState.Waiting, null, userManager.CurrentUserId, null);
+        }
         return taskData.TaskId;
       }, false, true);
