Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.cs	(revision 4556)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.cs	(revision 4557)
@@ -58,3 +58,3 @@
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.0.4424")]
+[assembly: AssemblyFileVersion("3.3.0.4425")]
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResult.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResult.cs	(revision 4556)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResult.cs	(revision 4557)
@@ -27,6 +27,4 @@
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
 
-  // [chn] Where are those JobResults used? would it make sense to use it instead of JobDto for querying Job-Status? Probably yes
-  // ask gradinger
   [StorableClass]
   [DataContract]
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJob.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJob.cs	(revision 4556)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJob.cs	(revision 4557)
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Diagrams/Services.cd
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Diagrams/Services.cd	(revision 4557)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Diagrams/Services.cd	(revision 4557)
@@ -0,0 +1,59 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<ClassDiagram MajorVersion="1" MinorVersion="1">
+  <Interface Name="HeuristicLab.Hive.Contracts.Interfaces.IClientFacade">
+    <Position X="0.5" Y="0.5" Width="2" />
+    <TypeIdentifier>
+      <HashCode>ABAAMAAAAAQBQQQABCAAAACAAAAAAAAAABAAAAABAAA=</HashCode>
+      <FileName>Interfaces\IClientFacade.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Hive.Contracts.Interfaces.IServerConsoleFacade">
+    <Position X="2.75" Y="4.5" Width="1.75" />
+    <InheritanceLine Type="HeuristicLab.Hive.Contracts.Interfaces.ISlaveManager" FixedToPoint="true">
+      <Path>
+        <Point X="3.875" Y="3.334" />
+        <Point X="3.875" Y="4.5" />
+      </Path>
+    </InheritanceLine>
+    <InheritanceLine Type="HeuristicLab.Hive.Contracts.Interfaces.IJobManager" FixedFromPoint="true" FixedToPoint="true">
+      <Path>
+        <Point X="5.5" Y="3.75" />
+        <Point X="3.875" Y="3.75" />
+        <Point X="3.875" Y="4.5" />
+      </Path>
+    </InheritanceLine>
+    <TypeIdentifier>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAA=</HashCode>
+      <FileName>Interfaces\IServerConsoleFacade.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Hive.Contracts.Interfaces.ISlaveFacade">
+    <Position X="7.75" Y="3.75" Width="2.25" />
+    <TypeIdentifier>
+      <HashCode>AAAAIEAAAAAAAAAAAAEAAACAACAAAAAAAAAAFAABQAA=</HashCode>
+      <FileName>Interfaces\ISlaveFacade.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Hive.Contracts.Interfaces.ISlaveManager">
+    <Position X="2.75" Y="0.5" Width="2.25" />
+    <TypeIdentifier>
+      <HashCode>BAEAAAAEAAEAAAAAAAAAgEABQAAAAAAAAAAAIAAAAAA=</HashCode>
+      <FileName>Interfaces\ISlaveManager.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Hive.Contracts.Interfaces.IJobManager">
+    <Position X="5.5" Y="0.5" Width="1.75" />
+    <TypeIdentifier>
+      <HashCode>ABIAMEAIAAQBQYQABCEAAgCQAAAAAIAAAAIAAAAJCAA=</HashCode>
+      <FileName>Interfaces\IJobManager.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Hive.Contracts.Interfaces.ISlaveCommunicator">
+    <Position X="7.75" Y="0.5" Width="2" />
+    <TypeIdentifier>
+      <HashCode>JAAAAAAAAABAAAAAACAAAAIgAAAAAAAAAgBQAAAgAAA=</HashCode>
+      <FileName>Interfaces\ISlaveCommunicator.cs</FileName>
+    </TypeIdentifier>
+  </Interface>
+  <Font Name="Segoe UI" Size="9" />
+</ClassDiagram>
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HeuristicLab.Hive.Contracts-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HeuristicLab.Hive.Contracts-3.3.csproj	(revision 4556)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HeuristicLab.Hive.Contracts-3.3.csproj	(revision 4557)
@@ -167,4 +167,5 @@
   </ItemGroup>
   <ItemGroup>
+    <None Include="Diagrams\Services.cd" />
     <None Include="HeuristicLab.snk" />
     <None Include="Properties\AssemblyInfo.frame" />
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobView.Designer.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobView.Designer.cs	(revision 4556)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobView.Designer.cs	(revision 4557)
@@ -55,7 +55,7 @@
       this.childHiveJobView = new HeuristicLab.Hive.Experiment.Views.HiveJobListView();
       this.runsTabPage = new System.Windows.Forms.TabPage();
-      this.runCollectionView = new HeuristicLab.Optimization.Views.RunCollectionView();
       this.logTabPage = new System.Windows.Forms.TabPage();
       this.logView = new HeuristicLab.Core.Views.LogView();
+      this.runCollectionViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
       this.jobStatusGroupBox.SuspendLayout();
       this.tabControl.SuspendLayout();
@@ -386,5 +386,5 @@
       // runsTabPage
       // 
-      this.runsTabPage.Controls.Add(this.runCollectionView);
+      this.runsTabPage.Controls.Add(this.runCollectionViewHost);
       this.runsTabPage.Location = new System.Drawing.Point(4, 22);
       this.runsTabPage.Name = "runsTabPage";
@@ -393,17 +393,4 @@
       this.runsTabPage.Text = "Runs";
       this.runsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // runCollectionView
-      // 
-      this.runCollectionView.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.runCollectionView.Caption = "RunCollection View";
-      this.runCollectionView.Content = null;
-      this.runCollectionView.Location = new System.Drawing.Point(3, 3);
-      this.runCollectionView.Name = "runCollectionView";
-      this.runCollectionView.ReadOnly = false;
-      this.runCollectionView.Size = new System.Drawing.Size(613, 486);
-      this.runCollectionView.TabIndex = 0;
       // 
       // logTabPage
@@ -430,4 +417,19 @@
       this.logView.Size = new System.Drawing.Size(613, 486);
       this.logView.TabIndex = 0;
+      // 
+      // runCollectionViewHost
+      // 
+      this.runCollectionViewHost.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.runCollectionViewHost.Caption = "View";
+      this.runCollectionViewHost.Content = null;
+      this.runCollectionViewHost.Enabled = false;
+      this.runCollectionViewHost.Location = new System.Drawing.Point(3, 3);
+      this.runCollectionViewHost.Name = "runCollectionViewHost";
+      this.runCollectionViewHost.ReadOnly = false;
+      this.runCollectionViewHost.Size = new System.Drawing.Size(613, 486);
+      this.runCollectionViewHost.TabIndex = 0;
+      this.runCollectionViewHost.ViewType = null;
       // 
       // HiveJobView
@@ -488,5 +490,5 @@
     private Core.Views.NamedItemView optimizerNamedItemView;
     private System.Windows.Forms.TabPage runsTabPage;
-    private Optimization.Views.RunCollectionView runCollectionView;
+    private MainForm.WindowsForms.ViewHost runCollectionViewHost;
   }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobView.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobView.cs	(revision 4556)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveJobView.cs	(revision 4557)
@@ -80,8 +80,8 @@
       if (Content != null && Content.Job != null && Content.Job.Optimizer != null) {
         optimizerNamedItemView.Content = Content.Job.Optimizer;
-        runCollectionView.Content = Content.Job.Optimizer.Runs;
+        runCollectionViewHost.Content = Content.Job.Optimizer.Runs;
       } else {
         optimizerNamedItemView.Content = null;
-        runCollectionView.Content = null;
+        runCollectionViewHost.Content = null;
       }
     }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HeuristicLab.Hive.Experiment-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HeuristicLab.Hive.Experiment-3.3.csproj	(revision 4556)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HeuristicLab.Hive.Experiment-3.3.csproj	(revision 4557)
@@ -122,12 +122,12 @@
     <Compile Include="HiveJob.cs" />
     <Compile Include="HiveJobList.cs" />
+    <Compile Include="Jobs\JobList.cs" />
+    <Compile Include="Jobs\OptimizerJob.cs" />
     <Compile Include="Progress\IProgress.cs" />
     <Compile Include="Progress\IProgressReporter.cs" />
     <Compile Include="JobResultPoller.cs" />
     <Compile Include="Exceptions\JobResultPollingException.cs" />
-    <Compile Include="Jobs\JobList.cs" />
     <Compile Include="HiveClient.cs" />
     <Compile Include="HiveExperimentList.cs" />
-    <Compile Include="Jobs\OptimizerJob.cs" />
     <Compile Include="HeuristicLabHiveExperimentPlugin.cs" />
     <Compile Include="Exceptions\OptimizerNotFoundException.cs" />
@@ -146,4 +146,5 @@
       <SubType>Designer</SubType>
     </None>
+    <None Include="Jobs.cd" />
     <None Include="HeuristicLab.snk" />
     <None Include="Properties\AssemblyInfo.frame" />
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs	(revision 4556)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs	(revision 4557)
@@ -556,7 +556,11 @@
             this.ExecutionTime = this.HiveJob.JobDto.DateFinished.Value - this.HiveJob.JobDto.DateCreated.Value;
             this.lastUpdateTime = this.HiveJob.JobDto.DateFinished.Value;
+            this.ExecutionState = Core.ExecutionState.Stopped;
+            OnStopped();
           } else {
             this.ExecutionTime = DateTime.Now - this.HiveJob.JobDto.DateCreated.Value;
             this.lastUpdateTime = DateTime.Now;
+            this.ExecutionState = Core.ExecutionState.Started;
+            OnStarted();
           }
 
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveJob.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveJob.cs	(revision 4556)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveJob.cs	(revision 4557)
@@ -180,7 +180,7 @@
         if (Job.Optimizer is Optimization.Experiment) {
           Optimization.Experiment experiment = Job.OptimizerAsExperiment;
-          experiment.Optimizers.ItemsAdded += new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<IOptimizer>>(Optimizers_ItemsAdded);
-          experiment.Optimizers.ItemsReplaced += new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<IOptimizer>>(Optimizers_ItemsReplaced);
-          experiment.Optimizers.ItemsRemoved += new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<IOptimizer>>(Optimizers_ItemsRemoved);
+          experiment.Optimizers.ItemsAdded += new Collections.CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsAdded);
+          experiment.Optimizers.ItemsReplaced += new Collections.CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsReplaced);
+          experiment.Optimizers.ItemsRemoved += new Collections.CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsRemoved);
           experiment.Optimizers.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_CollectionReset);
         } else if (Job.Optimizer is Optimization.BatchRun) {
@@ -191,27 +191,14 @@
 
         Job.ComputeInParallelChanged += new EventHandler(Job_ComputeInParallelChanged);
-      }
-    }
-
-    void batchRun_AlgorithmChanged(object sender, EventArgs e) {
-      if (syncJobsWithOptimizers) {
-        this.childHiveJobs.Clear();
-        UpdateChildHiveJobs();
-      }
-    }
-
-    void batchRun_RepetitionsChanged(object sender, EventArgs e) {
-      if (syncJobsWithOptimizers) {
-        UpdateChildHiveJobs();
-      }
-    }
-
+        Job.ToStringChanged += new EventHandler(Job_ToStringChanged);
+      }
+    }
     private void DergisterOptimizerEvents() {
       if (Job != null && Job.Optimizer is Optimization.Experiment) {
         if (Job.Optimizer is Optimization.Experiment) {
           Optimization.Experiment experiment = Job.OptimizerAsExperiment;
-          experiment.Optimizers.ItemsAdded -= new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<IOptimizer>>(Optimizers_ItemsAdded);
-          experiment.Optimizers.ItemsReplaced -= new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<IOptimizer>>(Optimizers_ItemsReplaced);
-          experiment.Optimizers.ItemsRemoved -= new Collections.CollectionItemsChangedEventHandler<Collections.IndexedItem<IOptimizer>>(Optimizers_ItemsRemoved);
+          experiment.Optimizers.ItemsAdded -= new Collections.CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsAdded);
+          experiment.Optimizers.ItemsReplaced -= new Collections.CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsReplaced);
+          experiment.Optimizers.ItemsRemoved -= new Collections.CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsRemoved);
           experiment.Optimizers.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_CollectionReset);
         } else if (Job.Optimizer is Optimization.BatchRun) {
@@ -222,5 +209,23 @@
 
         Job.ComputeInParallelChanged -= new EventHandler(Job_ComputeInParallelChanged);
-      }
+        Job.ToStringChanged -= new EventHandler(Job_ToStringChanged);
+      }
+    }
+        
+    void batchRun_AlgorithmChanged(object sender, EventArgs e) {
+      if (syncJobsWithOptimizers) {
+        this.childHiveJobs.Clear();
+        UpdateChildHiveJobs();
+      }
+    }
+
+    void batchRun_RepetitionsChanged(object sender, EventArgs e) {
+      if (syncJobsWithOptimizers) {
+        UpdateChildHiveJobs();
+      }
+    }
+    
+    void Job_ToStringChanged(object sender, EventArgs e) {
+      this.OnToStringChanged();
     }
 
@@ -294,13 +299,18 @@
     public void UpdateChildOptimizer(OptimizerJob optimizerJob, Guid childJobId) {
       syncJobsWithOptimizers = false; // don't sync with optimizers during this method
-      ExecutionState executionState = optimizerJob.Optimizer.ExecutionState; // has to be stored before adding the optimizers, because of the sideeffects of updating the optimizers in experiment/batchrun
+      bool childIsFinishedOptimizerDownloaded = false;
 
       if (this.Job.Optimizer is Optimization.Experiment) {
         UpdateOptimizerInExperiment(this.Job.OptimizerAsExperiment, optimizerJob);
-        executionState = ExecutionState.Stopped;
+        childIsFinishedOptimizerDownloaded = true;
       } else if (this.Job.Optimizer is Optimization.BatchRun) {
         UpdateOptimizerInBatchRun(this.Job.OptimizerAsBatchRun, optimizerJob);
-        executionState = ExecutionState.Stopped;
-      }
+        if (this.Job.OptimizerAsBatchRun.Repetitions == this.Job.Optimizer.Runs.Count) {
+          childIsFinishedOptimizerDownloaded = true;
+        }
+      } else {
+        childIsFinishedOptimizerDownloaded = optimizerJob.Optimizer.ExecutionState == ExecutionState.Stopped;
+      }
+
       HiveJob child = this.ChildHiveJobs.Single(j => j.JobDto.Id == childJobId);
       if (!optimizerJob.ComputeInParallel) {
@@ -309,5 +319,5 @@
         child.syncJobsWithOptimizers = true;
       }
-      if (executionState == ExecutionState.Stopped) {
+      if (childIsFinishedOptimizerDownloaded) {
         child.IsFinishedOptimizerDownloaded = true;
       }
@@ -373,5 +383,5 @@
     public override string ToString() {
       if (jobDto != null) {
-        return job.Name;
+        return job.ToString();
       } else {
         return base.ToString();
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs.cd
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs.cd	(revision 4557)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs.cd	(revision 4557)
@@ -0,0 +1,226 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<ClassDiagram MajorVersion="1" MinorVersion="1" MembersFormat="NameAndType">
+  <Class Name="HeuristicLab.Hive.Experiment.HiveExperiment">
+    <Position X="1" Y="1" Width="1.75" />
+    <Members>
+      <Method Name="AllJobsFinished" Hidden="true" />
+      <Method Name="Clone" Hidden="true" />
+      <Method Name="DeregisterHiveJobEvents" Hidden="true" />
+      <Method Name="DeregisterResultPollingEvents" Hidden="true" />
+      <Event Name="ExceptionOccurred" Hidden="true" />
+      <Field Name="executionState" Hidden="true" />
+      <Property Name="ExecutionState" Hidden="true" />
+      <Event Name="ExecutionStateChanged" Hidden="true" />
+      <Field Name="executionTime" Hidden="true" />
+      <Property Name="ExecutionTime" Hidden="true" />
+      <Event Name="ExecutionTimeChanged" Hidden="true" />
+      <Method Name="GetExperiment" Hidden="true" />
+      <Method Name="HiveExperiment" Hidden="true" />
+      <Field Name="hiveExperimentId" Hidden="true" />
+      <Property Name="HiveExperimentId" Hidden="true" />
+      <Field Name="hiveJob" Hidden="true" />
+      <Method Name="HiveJob_JobStateChanged" Hidden="true" />
+      <Event Name="HiveJobChanged" Hidden="true" />
+      <Method Name="InitTimer" Hidden="true" />
+      <Field Name="isPollingResults" Hidden="true" />
+      <Property Name="IsPollingResults" Hidden="true" />
+      <Field Name="isProgressing" Hidden="true" />
+      <Property Name="IsProgressing" Hidden="true" />
+      <Event Name="IsProgressingChanged" Hidden="true" />
+      <Event Name="IsResultsPollingChanged" Hidden="true" />
+      <Field Name="itemDescription" Hidden="true" />
+      <Field Name="itemName" Hidden="true" />
+      <Field Name="jobResultPoller" Hidden="true" />
+      <Method Name="jobResultPoller_ExceptionOccured" Hidden="true" />
+      <Method Name="jobResultPoller_IsPollingChanged" Hidden="true" />
+      <Method Name="jobResultPoller_JobResultReceived" Hidden="true" />
+      <Method Name="jobResultPoller_PollingFinished" Hidden="true" />
+      <Method Name="jobResultPoller_PollingStarted" Hidden="true" />
+      <Field Name="lastUpdateTime" Hidden="true" />
+      <Method Name="LoadChildResults" Hidden="true" />
+      <Method Name="LoadHiveJob" Hidden="true" />
+      <Method Name="LoadOptimizerJob" Hidden="true" />
+      <Field Name="locker" Hidden="true" />
+      <Field Name="log" Hidden="true" />
+      <Method Name="LogMessage" Hidden="true" />
+      <Method Name="OnExceptionOccured" Hidden="true" />
+      <Method Name="OnExecutionStateChanged" Hidden="true" />
+      <Method Name="OnExecutionTimeChanged" Hidden="true" />
+      <Method Name="OnHiveJobChanged" Hidden="true" />
+      <Method Name="OnIsPollingResultsChanged" Hidden="true" />
+      <Method Name="OnIsProgressingChanged" Hidden="true" />
+      <Method Name="OnPaused" Hidden="true" />
+      <Method Name="OnPrepared" Hidden="true" />
+      <Method Name="OnResourceIdsChanged" Hidden="true" />
+      <Method Name="OnStarted" Hidden="true" />
+      <Method Name="OnStopped" Hidden="true" />
+      <Method Name="Pause" Hidden="true" />
+      <Event Name="Paused" Hidden="true" />
+      <Method Name="Prepare" Hidden="true" />
+      <Event Name="Prepared" Hidden="true" />
+      <Field Name="progress" Hidden="true" />
+      <Property Name="Progress" Hidden="true" />
+      <Method Name="RegisterHiveJobEvents" Hidden="true" />
+      <Method Name="RegisterResultPollingEvents" Hidden="true" />
+      <Field Name="resourceIds" Hidden="true" />
+      <Property Name="ResourceIds" Hidden="true" />
+      <Event Name="ResourceIdsChanged" Hidden="true" />
+      <Field Name="rootJobId" Hidden="true" />
+      <Method Name="RunUploadExperiment" Hidden="true" />
+      <Method Name="SetExperiment" Hidden="true" />
+      <Method Name="Start" Hidden="true" />
+      <Event Name="Started" Hidden="true" />
+      <Method Name="StartResultPolling" Hidden="true" />
+      <Method Name="Stop" Hidden="true" />
+      <Event Name="Stopped" Hidden="true" />
+      <Method Name="StopResultPolling" Hidden="true" />
+      <Field Name="timer" Hidden="true" />
+      <Method Name="timer_Elapsed" Hidden="true" />
+      <Method Name="ToHiveExperimentDto" Hidden="true" />
+      <Method Name="ToResourceIdList" Hidden="true" />
+      <Method Name="UpdateFromDto" Hidden="true" />
+      <Method Name="UploadJobWithChildren" Hidden="true" />
+    </Members>
+    <Compartments>
+      <Compartment Name="Fields" Collapsed="true" />
+      <Compartment Name="Methods" Collapsed="true" />
+      <Compartment Name="Events" Collapsed="true" />
+    </Compartments>
+    <TypeIdentifier>
+      <HashCode>gqQ1FyICbCICYIAEUoCISGGQAYoQAmAAOuFABACBi5E=</HashCode>
+      <FileName>HiveExperiment.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" />
+  </Class>
+  <Class Name="HeuristicLab.Hive.Experiment.HiveJob">
+    <Position X="1" Y="2.75" Width="3.25" />
+    <Members>
+      <Method Name="AddChildHiveJob" Hidden="true" />
+      <Method Name="batchRun_AlgorithmChanged" Hidden="true" />
+      <Method Name="batchRun_RepetitionsChanged" Hidden="true" />
+      <Field Name="childHiveJobs" Hidden="true" />
+      <Method Name="Clone" Hidden="true" />
+      <Method Name="DergisterOptimizerEvents" Hidden="true" />
+      <Method Name="GetAllHiveJobs" Hidden="true" />
+      <Method Name="GetAsSerializedJob" Hidden="true" />
+      <Method Name="GetChildByOptimizer" Hidden="true" />
+      <Method Name="GetChildByOptimizerJob" Hidden="true" />
+      <Method Name="GetHiveJobByJobId" Hidden="true" />
+      <Method Name="GetParentByJobId" Hidden="true" />
+      <Method Name="HiveJob" Hidden="true" />
+      <Field Name="isFinishedOptimizerDownloaded" Hidden="true" />
+      <Property Name="IsFinishedOptimizerDownloaded" Hidden="true" />
+      <Event Name="IsFinishedOptimizerDownloadedChanged" Hidden="true" />
+      <Property Name="ItemImage" Hidden="true" />
+      <Field Name="job" Hidden="true" />
+      <Method Name="Job_ComputeInParallelChanged" Hidden="true" />
+      <Event Name="JobChanged" Hidden="true" />
+      <Field Name="jobDto" Hidden="true" />
+      <Event Name="JobDtoChanged" Hidden="true" />
+      <Event Name="JobStateChanged" Hidden="true" />
+      <Field Name="locker" Hidden="true" />
+      <Method Name="LogMessage" Hidden="true" />
+      <Method Name="OnIsFinishedOptimizerDownloadedChanged" Hidden="true" />
+      <Method Name="OnJobChanged" Hidden="true" />
+      <Method Name="OnJobDtoChanged" Hidden="true" />
+      <Method Name="OnJobStateChanged" Hidden="true" />
+      <Method Name="Optimizers_CollectionReset" Hidden="true" />
+      <Method Name="Optimizers_ItemsAdded" Hidden="true" />
+      <Method Name="Optimizers_ItemsRemoved" Hidden="true" />
+      <Method Name="Optimizers_ItemsReplaced" Hidden="true" />
+      <Method Name="RegisterOptimizerEvents" Hidden="true" />
+      <Method Name="RemoveByJobId" Hidden="true" />
+      <Method Name="SetIndexInParentOptimizerList" Hidden="true" />
+      <Field Name="syncJobsWithOptimizers" Hidden="true" />
+      <Method Name="ToString" Hidden="true" />
+      <Method Name="UpdateChildHiveJobs" Hidden="true" />
+      <Method Name="UpdateChildOptimizer" Hidden="true" />
+      <Method Name="UpdateFromJobResult" Hidden="true" />
+      <Method Name="UpdateOptimizerInBatchRun" Hidden="true" />
+      <Method Name="UpdateOptimizerInExperiment" Hidden="true" />
+      <Method Name="UpdateRequiredPlugins" Hidden="true" />
+    </Members>
+    <Compartments>
+      <Compartment Name="Fields" Collapsed="true" />
+      <Compartment Name="Methods" Collapsed="true" />
+    </Compartments>
+    <TypeIdentifier>
+      <HashCode>AMQjASCEiAkBKACkAAWAQAIQEAkiQACGBEkgAAAICVA=</HashCode>
+      <FileName>HiveJob.cs</FileName>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="HeuristicLab.Hive.Experiment.Jobs.OptimizerJob">
+    <Position X="7.25" Y="2.75" Width="2.5" />
+    <Members>
+      <Method Name="AfterDeserialization" Hidden="true" />
+      <Property Name="CanChangeDescription" Hidden="true" />
+      <Property Name="CanChangeName" Hidden="true" />
+      <Method Name="Clone" Hidden="true" />
+      <Field Name="collectChildJobs" Hidden="true" />
+      <Property Name="CollectChildJobs" Hidden="true" />
+      <Field Name="computeInParallel" Hidden="true" />
+      <Event Name="ComputeInParallelChanged" Hidden="true" />
+      <Event Name="DeleteChildJobs" Hidden="true" />
+      <Method Name="DeregisterEvents" Hidden="true" />
+      <Property Name="Description" Hidden="true" />
+      <Event Name="DescriptionChanged" Hidden="true" />
+      <Property Name="ExecutionState" Hidden="true" />
+      <Property Name="ExecutionTime" Hidden="true" />
+      <Property Name="Filename" Hidden="true" />
+      <Event Name="FilenameChanged" Hidden="true" />
+      <Field Name="indexInParentOptimizerList" Hidden="true" />
+      <Property Name="IndexInParentOptimizerList" Hidden="true" />
+      <Property Name="ItemDescription" Hidden="true" />
+      <Property Name="ItemImage" Hidden="true" />
+      <Event Name="ItemImageChanged" Hidden="true" />
+      <Property Name="ItemName" Hidden="true" />
+      <Property Name="ItemVersion" Hidden="true" />
+      <Event Name="JobFailed" Hidden="true" />
+      <Event Name="JobStopped" Hidden="true" />
+      <Field Name="log" Hidden="true" />
+      <Property Name="Log" Hidden="true" />
+      <Property Name="Name" Hidden="true" />
+      <Event Name="NameChanged" Hidden="true" />
+      <Event Name="NameChanging" Hidden="true" />
+      <Event Name="NewChildJob" Hidden="true" />
+      <Method Name="OnComputeInParallelChanged" Hidden="true" />
+      <Method Name="OnDeleteChildJobs" Hidden="true" />
+      <Method Name="OnJobFailed" Hidden="true" />
+      <Method Name="OnJobStopped" Hidden="true" />
+      <Method Name="OnNewChildJob" Hidden="true" />
+      <Method Name="OnOptimizerChanged" Hidden="true" />
+      <Method Name="OnWaitForChildJobs" Hidden="true" />
+      <Field Name="optimizer" Hidden="true" />
+      <Method Name="optimizer_ExceptionOccurred" Hidden="true" />
+      <Method Name="optimizer_Stopped" Hidden="true" />
+      <Property Name="OptimizerAsBatchRun" Hidden="true" />
+      <Property Name="OptimizerAsExperiment" Hidden="true" />
+      <Event Name="OptimizerChanged" Hidden="true" />
+      <Method Name="OptimizerJob" Hidden="true" />
+      <Method Name="Prepare" Hidden="true" />
+      <Method Name="RegisterEvents" Hidden="true" />
+      <Method Name="Resume" Hidden="true" />
+      <Method Name="Run" Hidden="true" />
+      <Method Name="Start" Hidden="true" />
+      <Method Name="Stop" Hidden="true" />
+      <Method Name="ToString" Hidden="true" />
+      <Event Name="ToStringChanged" Hidden="true" />
+      <Event Name="WaitForChildJobs" Hidden="true" />
+    </Members>
+    <TypeIdentifier>
+      <HashCode>EAQdQOAEACsgQCIEIAyACgQABIoS4DYAYAAkAogYBDI=</HashCode>
+      <FileName>Jobs\OptimizerJob.cs</FileName>
+    </TypeIdentifier>
+    <Lollipop Position="0.262" />
+  </Class>
+  <Interface Name="HeuristicLab.Hive.JobBase.IJob" BaseTypeListCollapsed="true">
+    <Position X="4.75" Y="2.75" Width="2.25" />
+    <Members>
+      <Property Name="CollectChildJobs" Hidden="true" />
+      <Property Name="ComputeInParallel" Hidden="true" />
+      <Event Name="ComputeInParallelChanged" Hidden="true" />
+    </Members>
+    <TypeIdentifier />
+  </Interface>
+  <Font Name="Segoe UI" Size="9" />
+</ClassDiagram>
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs/OptimizerJob.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs/OptimizerJob.cs	(revision 4556)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Jobs/OptimizerJob.cs	(revision 4557)
@@ -37,11 +37,7 @@
       set {
         if (value != optimizer) {
-          if (optimizer != null) {
-            DeregisterEvents();
-          }
+          if (optimizer != null) DeregisterEvents();
           optimizer = value;
-          if (optimizer != null) {
-            RegisterEvents();
-          }
+          if (optimizer != null) RegisterEvents();
           OnOptimizerChanged();
         }
@@ -88,5 +84,5 @@
     public OptimizerJob(IOptimizer optimizer)
       : this() {
-      this.optimizer = optimizer;
+      this.Optimizer = optimizer;
 
       if (optimizer is Optimization.Experiment) {
@@ -196,21 +192,18 @@
     #endregion
 
-    #region Events
+    #region Optimizer Events
     protected virtual void RegisterEvents() {
       optimizer.Stopped += new EventHandler(optimizer_Stopped);
       optimizer.ExceptionOccurred += new EventHandler<Common.EventArgs<Exception>>(optimizer_ExceptionOccurred);
-      optimizer.DescriptionChanged += this.DescriptionChanged;
-      optimizer.FilenameChanged += this.FilenameChanged;
-      optimizer.ItemImageChanged += this.ItemImageChanged;
-      optimizer.NameChanged += this.NameChanged;
-      optimizer.NameChanging += this.NameChanging;
-      optimizer.ToStringChanged += this.ToStringChanged;
-    }
-
+      optimizer.DescriptionChanged += new EventHandler(optimizer_DescriptionChanged);
+      optimizer.ItemImageChanged += new EventHandler(optimizer_ItemImageChanged);
+      optimizer.NameChanged += new EventHandler(optimizer_NameChanged);
+      optimizer.NameChanging += new EventHandler<CancelEventArgs<string>>(optimizer_NameChanging);
+      optimizer.ToStringChanged += new EventHandler(optimizer_ToStringChanged);
+    }
     protected virtual void DeregisterEvents() {
       optimizer.Stopped -= new EventHandler(optimizer_Stopped);
-      optimizer.ExceptionOccurred -= new EventHandler<Common.EventArgs<Exception>>(optimizer_ExceptionOccurred);
+      optimizer.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(optimizer_ExceptionOccurred);
       optimizer.DescriptionChanged -= this.DescriptionChanged;
-      optimizer.FilenameChanged -= this.FilenameChanged;
       optimizer.ItemImageChanged -= this.ItemImageChanged;
       optimizer.NameChanged -= this.NameChanged;
@@ -219,4 +212,24 @@
     }
 
+    void optimizer_ToStringChanged(object sender, EventArgs e) {
+      this.OnToStringChanged();
+    }
+
+    void optimizer_NameChanging(object sender, CancelEventArgs<string> e) {
+      this.OnNameChanging(e.Value, e.Cancel);
+    }
+
+    void optimizer_NameChanged(object sender, EventArgs e) {
+      this.OnNameChanged();
+    }
+
+    void optimizer_ItemImageChanged(object sender, EventArgs e) {
+      this.OnItemImageChanged();
+    }
+
+    void optimizer_DescriptionChanged(object sender, EventArgs e) {
+      this.OnDescriptionChanged();
+    }
+
     protected virtual void optimizer_ExceptionOccurred(object sender, Common.EventArgs<Exception> e) {
       OnJobFailed(e);
@@ -227,5 +240,4 @@
     }
     #endregion
-
 
     #region INamedItem Members
@@ -243,5 +255,4 @@
       set { optimizer.Description = value; }
     }
-    public event EventHandler DescriptionChanged;
 
     public string Name {
@@ -249,7 +260,32 @@
       set { optimizer.Name = value; }
     }
+    #endregion
+
+    #region Events
+    public event EventHandler DescriptionChanged;
+    protected virtual void OnDescriptionChanged() {
+      var handler = DescriptionChanged;
+      if(handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ItemImageChanged;
+    protected virtual void OnItemImageChanged() {
+      var handler = ItemImageChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ToStringChanged;
+    protected virtual void OnToStringChanged() {
+      var handler = ToStringChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
     public event EventHandler NameChanged;
-    public event EventHandler<Common.CancelEventArgs<string>> NameChanging;
-
+    protected virtual void OnNameChanged() {
+      var handler = NameChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler<CancelEventArgs<string>> NameChanging;
+    protected virtual void OnNameChanging(string value, bool cancel) {
+      var handler = NameChanging;
+      if (handler != null) handler(this, new CancelEventArgs<string>(value, cancel));
+    }
     #endregion
 
@@ -264,5 +300,4 @@
     }
 
-    public event EventHandler ItemImageChanged;
     public string ItemName {
       get { return optimizer.ItemName; }
@@ -272,15 +307,4 @@
       get { return optimizer.ItemVersion; }
     }
-    public event EventHandler ToStringChanged;
-
-    #endregion
-
-    #region IStorableContent Members
-
-    public string Filename {
-      get;
-      set;
-    }
-    public event EventHandler FilenameChanged;
 
     #endregion
