Index: branches/HivePerformance/sources/HeuristicLab.Algorithms.GradientDescent/3.3/Lbfgs.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Algorithms.GradientDescent/3.3/Lbfgs.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Algorithms.GradientDescent/3.3/Lbfgs.cs	(revision 9444)
@@ -22,4 +22,6 @@
 
 using System;
+using System.Linq;
+using HeuristicLab.Analysis;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -51,10 +53,15 @@
     public string Filename { get; set; }
 
+    private const string AnalyzerParameterName = "Analyzer";
     private const string MaxIterationsParameterName = "MaxIterations";
     private const string ApproximateGradientsParameterName = "ApproximateGradients";
     private const string SeedParameterName = "Seed";
     private const string SetSeedRandomlyParameterName = "SetSeedRandomly";
+    private const string GradientCheckStepSizeParameterName = "GradientCheckStepSize";
 
     #region parameter properties
+    public IValueParameter<IMultiAnalyzer> AnalyzerParameter {
+      get { return (IValueParameter<IMultiAnalyzer>)Parameters[AnalyzerParameterName]; }
+    }
     public IValueParameter<IntValue> MaxIterationsParameter {
       get { return (IValueParameter<IntValue>)Parameters[MaxIterationsParameterName]; }
@@ -66,6 +73,13 @@
       get { return (IValueParameter<BoolValue>)Parameters[SetSeedRandomlyParameterName]; }
     }
+    public IValueParameter<DoubleValue> GradientStepSizeParameter {
+      get { return (IValueParameter<DoubleValue>)Parameters[GradientCheckStepSizeParameterName]; }
+    }
     #endregion
     #region properties
+    public IMultiAnalyzer Analyzer {
+      get { return AnalyzerParameter.Value; }
+      set { AnalyzerParameter.Value = value; }
+    }
     public int MaxIterations {
       set { MaxIterationsParameter.Value.Value = value; }
@@ -84,6 +98,4 @@
     [Storable]
     private LbfgsAnalyzer analyzer;
-    [Storable]
-    private LbfgsAnalyzer finalAnalyzer;
     [Storable]
     private Placeholder solutionCreator;
@@ -99,5 +111,4 @@
       updateResults = cloner.Clone(original.updateResults);
       analyzer = cloner.Clone(original.analyzer);
-      finalAnalyzer = cloner.Clone(original.finalAnalyzer);
       solutionCreator = cloner.Clone(original.solutionCreator);
       evaluator = cloner.Clone(original.evaluator);
@@ -106,12 +117,13 @@
     public LbfgsAlgorithm()
       : base() {
-      this.name = ItemName;
-      this.description = ItemDescription;
-
+      Parameters.Add(new ValueParameter<IMultiAnalyzer>(AnalyzerParameterName, "The analyzers that will be executed on the solution.", new MultiAnalyzer()));
       Parameters.Add(new ValueParameter<IntValue>(MaxIterationsParameterName, "The maximal number of iterations for.", new IntValue(20)));
       Parameters.Add(new ValueParameter<IntValue>(SeedParameterName, "The random seed used to initialize the new pseudo random number generator.", new IntValue(0)));
       Parameters.Add(new ValueParameter<BoolValue>(SetSeedRandomlyParameterName, "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true)));
       Parameters.Add(new ValueParameter<BoolValue>(ApproximateGradientsParameterName, "Indicates that gradients should be approximated.", new BoolValue(true)));
-      Parameters[ApproximateGradientsParameterName].Hidden = true; // should not be changed
+      Parameters.Add(new OptionalValueParameter<DoubleValue>(GradientCheckStepSizeParameterName, "Step size for the gradient check (should be used for debugging the gradient calculation only)."));
+      // these parameter should not be changed usually
+      Parameters[ApproximateGradientsParameterName].Hidden = true;
+      Parameters[GradientCheckStepSizeParameterName].Hidden = true;
 
       var randomCreator = new RandomCreator();
@@ -122,6 +134,6 @@
       evaluator = new Placeholder();
       updateResults = new LbfgsUpdateResults();
-      analyzer = new LbfgsAnalyzer();
-      finalAnalyzer = new LbfgsAnalyzer();
+      var analyzerPlaceholder = new Placeholder();
+      var finalAnalyzerPlaceholder = new Placeholder();
 
       OperatorGraph.InitialOperator = randomCreator;
@@ -133,5 +145,5 @@
       randomCreator.Successor = solutionCreator;
 
-      solutionCreator.Name = "Solution Creator (placeholder)";
+      solutionCreator.Name = "(Solution Creator)";
       solutionCreator.Successor = initializer;
 
@@ -145,19 +157,23 @@
       branch.ConditionParameter.ActualName = makeStep.TerminationCriterionParameter.Name;
       branch.FalseBranch = evaluator;
-      branch.TrueBranch = finalAnalyzer;
-
-      evaluator.Name = "Evaluator (placeholder)";
+      branch.TrueBranch = finalAnalyzerPlaceholder;
+
+      evaluator.Name = "(Evaluator)";
       evaluator.Successor = updateResults;
 
       updateResults.StateParameter.ActualName = initializer.StateParameter.Name;
       updateResults.ApproximateGradientsParameter.ActualName = ApproximateGradientsParameterName;
-      updateResults.Successor = analyzer;
-
+      updateResults.Successor = analyzerPlaceholder;
+
+      analyzerPlaceholder.Name = "(Analyzer)";
+      analyzerPlaceholder.OperatorParameter.ActualName = AnalyzerParameterName;
+      analyzerPlaceholder.Successor = makeStep;
+
+      finalAnalyzerPlaceholder.Name = "(Analyzer)";
+      finalAnalyzerPlaceholder.OperatorParameter.ActualName = AnalyzerParameterName;
+      finalAnalyzerPlaceholder.Successor = null;
+
+      analyzer = new LbfgsAnalyzer();
       analyzer.StateParameter.ActualName = initializer.StateParameter.Name;
-      analyzer.Successor = makeStep;
-
-      finalAnalyzer.PointsTableParameter.ActualName = analyzer.PointsTableParameter.ActualName;
-      finalAnalyzer.QualityGradientsTableParameter.ActualName = analyzer.QualityGradientsTableParameter.ActualName;
-      finalAnalyzer.QualitiesTableParameter.ActualName = analyzer.QualitiesTableParameter.ActualName;
     }
 
@@ -185,4 +201,6 @@
         solutionCreator.OperatorParameter.ActualName = Problem.SolutionCreatorParameter.Name;
         evaluator.OperatorParameter.ActualName = Problem.EvaluatorParameter.Name;
+        UpdateAnalyzers();
+        ParameterizeOperators();
       }
     }
@@ -200,6 +218,11 @@
     }
 
+    protected override void Problem_OperatorsChanged(object sender, EventArgs e) {
+      base.Problem_OperatorsChanged(sender, e);
+      UpdateAnalyzers();
+    }
+
     private void RegisterSolutionCreatorEvents() {
-      var realVectorCreator = Problem.SolutionCreator as RealVectorCreator;
+      var realVectorCreator = Problem.SolutionCreator as IRealVectorCreator;
       // ignore if we have a different kind of problem
       if (realVectorCreator != null) {
@@ -214,5 +237,5 @@
 
     protected override void OnStarted() {
-      var realVectorCreator = Problem.SolutionCreator as RealVectorCreator;
+      var realVectorCreator = Problem.SolutionCreator as IRealVectorCreator;
       // must catch the case that user loaded an unsupported problem
       if (realVectorCreator == null)
@@ -225,6 +248,18 @@
     }
 
+    private void UpdateAnalyzers() {
+      Analyzer.Operators.Clear();
+      if (Problem != null) {
+        foreach (var a in Problem.Operators.OfType<IAnalyzer>()) {
+          foreach (var param in a.Parameters.OfType<IScopeTreeLookupParameter>())
+            param.Depth = 0;
+          Analyzer.Operators.Add(a, a.EnabledByDefault);
+        }
+      }
+      Analyzer.Operators.Add(analyzer, analyzer.EnabledByDefault);
+    }
+
     private void ParameterizeOperators() {
-      var realVectorCreator = Problem.SolutionCreator as RealVectorCreator;
+      var realVectorCreator = Problem.SolutionCreator as IRealVectorCreator;
       // ignore if we have a different kind of problem
       if (realVectorCreator != null) {
@@ -233,5 +268,4 @@
         makeStep.PointParameter.ActualName = realVectorParameterName;
         analyzer.PointParameter.ActualName = realVectorParameterName;
-        finalAnalyzer.PointParameter.ActualName = realVectorParameterName;
       }
 
@@ -239,5 +273,4 @@
       updateResults.QualityParameter.ActualName = qualityParameterName;
       analyzer.QualityParameter.ActualName = qualityParameterName;
-      finalAnalyzer.QualityParameter.ActualName = qualityParameterName;
     }
   }
Index: branches/HivePerformance/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsInitializer.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsInitializer.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsInitializer.cs	(revision 9444)
@@ -38,4 +38,5 @@
     private const string IterationsParameterName = "Iterations";
     private const string ApproximateGradientsParameterName = "ApproximateGradients";
+    private const string GradientCheckStepSizeParameterName = "GradientCheckStepSize";
 
     #region Parameter Properties
@@ -53,4 +54,7 @@
     public ILookupParameter<BoolValue> ApproximateGradientsParameter {
       get { return (ILookupParameter<BoolValue>)Parameters[ApproximateGradientsParameterName]; }
+    }
+    public ILookupParameter<DoubleValue> GradientStepSizeParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters[GradientCheckStepSizeParameterName]; }
     }
 
@@ -74,4 +78,5 @@
       Parameters.Add(new LookupParameter<BoolValue>(ApproximateGradientsParameterName,
                                                     "Flag that indicates if gradients should be approximated."));
+      Parameters.Add(new LookupParameter<DoubleValue>(GradientCheckStepSizeParameterName, "Step size for the gradient check (should be used for debugging the gradient calculation only)."));
       // out
       Parameters.Add(new LookupParameter<LbfgsState>(StateParameterName, "The state of the LM-BFGS algorithm."));
@@ -93,5 +98,6 @@
       alglib.minlbfgs.minlbfgssetcond(state, 0.0, 0, 0, Iterations.Value);
       alglib.minlbfgs.minlbfgssetxrep(state, true);
-      // alglib.minlbfgs.minlbfgssetgradientcheck(state, 0.000001);
+      if (GradientStepSizeParameter.ActualValue != null && GradientStepSizeParameter.ActualValue.Value > 0)
+        alglib.minlbfgs.minlbfgssetgradientcheck(state, GradientStepSizeParameter.ActualValue.Value);
 
       PointParameter.ActualValue = new RealVector(initialPoint);
Index: branches/HivePerformance/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsMakeStep.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsMakeStep.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsMakeStep.cs	(revision 9444)
@@ -79,4 +79,12 @@
         alglib.minlbfgs.minlbfgsreport rep = new alglib.minlbfgs.minlbfgsreport();
         alglib.minlbfgs.minlbfgsresults(state.State, ref x, rep);
+        if (rep.terminationtype < 0) {
+          if (rep.terminationtype == -1)
+            throw new OperatorExecutionException(this, "Incorrect parameters were specified.");
+          else if (rep.terminationtype == -2)
+            throw new OperatorExecutionException(this, "Rounding errors prevent further improvement.");
+          else if (rep.terminationtype == -7)
+            throw new OperatorExecutionException(this, "Gradient verification failed.");
+        }
         PointParameter.ActualValue = new RealVector(x);
       }
Index: branches/HivePerformance/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobManagerView.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobManagerView.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveJobManagerView.cs	(revision 9444)
@@ -119,5 +119,5 @@
 
     protected override void OnClosing(FormClosingEventArgs e) {
-      if (Content != null && Content.Jobs.Any(x => x.IsProgressing)) {
+      if (Content != null && Content.Jobs != null && Content.Jobs.Any(x => x.IsProgressing)) {
         DialogResult result = MessageBox.Show("There are still unfinished down/uploads. Are you sure you want to close the window?", "HeuristicLab Hive Job Manager", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
 
@@ -131,5 +131,5 @@
 
     protected override void OnClosed(FormClosedEventArgs e) {
-      if (Content != null) {
+      if (Content != null && Content.Jobs != null) {
         Content.ClearHiveClient();
         Content = null;
Index: branches/HivePerformance/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 9444)
@@ -76,5 +76,4 @@
       Content.ExecutionStateChanged += new EventHandler(Content_ExecutionStateChanged);
       Content.ExecutionTimeChanged += new EventHandler(Content_ExecutionTimeChanged);
-      Content.IsAllowedPrivilegedChanged += new EventHandler(Content_IsAllowedPrivilegedChanged);
       Content.Loaded += new EventHandler(Content_Loaded);
       Content.TaskReceived += new EventHandler(Content_TaskReceived);
@@ -145,5 +144,5 @@
           executionTimeTextBox.Text = Content.ExecutionTime.ToString();
           resourceNamesTextBox.Text = Content.Job.ResourceNames;
-          isPrivilegedCheckBox.Checked = Content.IsAllowedPrivileged;
+          isPrivilegedCheckBox.Checked = Content.Job.IsPrivileged;
           refreshAutomaticallyCheckBox.Checked = Content.RefreshAutomatically;
           logView.Content = Content.Log;
@@ -327,4 +326,5 @@
         runCollectionViewHost.Content = GetAllRunsFromJob(Content);
       }
+      isPrivilegedCheckBox.Checked = Content.Job.IsPrivileged;
     }
 
@@ -368,12 +368,4 @@
       else {
         UpdateStateLogList();
-      }
-    }
-    private void Content_IsAllowedPrivilegedChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_IsAllowedPrivilegedChanged), sender, e);
-      else {
-        isPrivilegedCheckBox.Checked = Content.IsAllowedPrivileged;
-        SetEnabledStateOfControls();
       }
     }
@@ -478,5 +470,5 @@
 
     private void isPrivilegedCheckBox_CheckChanged(object sender, EventArgs e) {
-      if (Content != null && !SuppressEvents) Content.IsAllowedPrivileged = isPrivilegedCheckBox.Checked;
+      if (Content != null && !SuppressEvents) Content.Job.IsPrivileged = isPrivilegedCheckBox.Checked;
     }
 
Index: branches/HivePerformance/sources/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/app.config
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/app.config	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/app.config	(revision 9444)
@@ -20,5 +20,5 @@
     <bindings>
       <wsHttpBinding>
-        <binding name="wsHttpBinding_Hive" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:20:00" sendTimeout="00:20:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
+        <binding name="wsHttpBinding_Hive" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:20:00" sendTimeout="00:20:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Mtom" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
           <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
           <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
Index: branches/HivePerformance/sources/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/app.config
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/app.config	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/app.config	(revision 9444)
@@ -13,5 +13,5 @@
     <bindings>
       <wsHttpBinding>
-        <binding name="wsHttpBinding_Hive" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:20:00" sendTimeout="00:20:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
+        <binding name="wsHttpBinding_Hive" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:20:00" sendTimeout="00:20:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Mtom" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
           <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
           <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
Index: branches/HivePerformance/sources/HeuristicLab.Clients.Hive.Slave/3.3/app.config
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Clients.Hive.Slave/3.3/app.config	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Clients.Hive.Slave/3.3/app.config	(revision 9444)
@@ -24,5 +24,5 @@
     <bindings>
       <wsHttpBinding>
-        <binding name="wsHttpBinding_Hive" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:20:00" sendTimeout="00:20:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
+        <binding name="wsHttpBinding_Hive" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:20:00" sendTimeout="00:20:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Mtom" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
           <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
           <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
Index: branches/HivePerformance/sources/HeuristicLab.Clients.Hive/3.3/HiveClient.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Clients.Hive/3.3/HiveClient.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Clients.Hive/3.3/HiveClient.cs	(revision 9444)
@@ -113,5 +113,5 @@
 
         foreach (var j in jobsLoaded) {
-          jobs.Add(new RefreshableJob(j) { IsAllowedPrivileged = this.isAllowedPrivileged });
+          jobs.Add(new RefreshableJob(j));
         }
       }
@@ -452,4 +452,5 @@
         IDictionary<Guid, HiveTask> allHiveTasks = downloader.Results;
         var parents = allHiveTasks.Values.Where(x => !x.Task.ParentTaskId.HasValue);
+        refreshableJob.Job.IsPrivileged = allHiveTasks.Any(x => x.Value.Task.IsPrivileged);
 
         refreshableJob.Progress.Status = "Downloading/deserializing complete. Displaying tasks...";
Index: branches/HivePerformance/sources/HeuristicLab.Clients.Hive/3.3/RefreshableJob.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Clients.Hive/3.3/RefreshableJob.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Clients.Hive/3.3/RefreshableJob.cs	(revision 9444)
@@ -110,5 +110,5 @@
             }
           } else {
-            StopResultPolling();
+            PauseResultPolling();
           }
         }
@@ -157,15 +157,4 @@
     }
 
-    // may execute jobs with privileged permissions on slaves
-    public bool IsAllowedPrivileged {
-      get { return Job.IsPrivileged; }
-      set {
-        if (value != Job.IsPrivileged) {
-          Job.IsPrivileged = value;
-          OnIsAllowedPrivilegedChanged();
-        }
-      }
-    }
-
     private Progress progress;
     public Progress Progress {
@@ -196,7 +185,7 @@
       this.HiveTasks = new ItemCollection<HiveTask>();
     }
-    public RefreshableJob(Job hiveExperiment) {
+    public RefreshableJob(Job hiveJob) {
       this.refreshAutomatically = true;
-      this.Job = hiveExperiment;
+      this.Job = hiveJob;
       this.log = new ThreadSafeLog();
       this.jobDownloader = new ConcurrentTaskDownloader<ItemTask>(Settings.Default.MaxParallelDownloads, Settings.Default.MaxParallelDownloads);
@@ -239,6 +228,14 @@
     public void StopResultPolling() {
       if (jobResultPoller != null && jobResultPoller.IsPolling) {
+        refreshAutomatically = false;
         jobResultPoller.Stop();
         DeregisterResultPollingEvents();
+        jobResultPoller = null;
+      }
+    }
+
+    public void PauseResultPolling() {
+      if (jobResultPoller != null && jobResultPoller.IsPolling) {
+        jobResultPoller.Stop();
       }
     }
@@ -425,10 +422,4 @@
     }
 
-    public event EventHandler IsAllowedPrivilegedChanged;
-    private void OnIsAllowedPrivilegedChanged() {
-      var handler = IsAllowedPrivilegedChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
     public event EventHandler JobStatisticsChanged;
     private void OnJobStatisticsChanged() {
@@ -515,10 +506,9 @@
     public event EventHandler HiveTasksChanged;
     protected virtual void OnHiveTasksChanged() {
-      StopResultPolling();
       if (this.HiveTasks != null && this.HiveTasks.Count > 0 && this.GetAllHiveTasks().All(x => x.Task.Id != Guid.Empty)) {
         if (IsFinished()) {
           this.ExecutionState = Core.ExecutionState.Stopped;
           this.RefreshAutomatically = false;
-          if (jobResultPoller != null) DeregisterResultPollingEvents();
+          StopResultPolling();
         } else {
           this.RefreshAutomatically = true;
Index: branches/HivePerformance/sources/HeuristicLab.Clients.Hive/3.3/app.config
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Clients.Hive/3.3/app.config	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Clients.Hive/3.3/app.config	(revision 9444)
@@ -48,5 +48,5 @@
                  maxBufferPoolSize="2147483647"
                  maxReceivedMessageSize="2147483647"
-                 messageEncoding="Text"
+                 messageEncoding="Mtom"
                  textEncoding="utf-8"
                  useDefaultWebProxy="true"
Index: branches/HivePerformance/sources/HeuristicLab.Core/3.3/OperatorExecutionException.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Core/3.3/OperatorExecutionException.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Core/3.3/OperatorExecutionException.cs	(revision 9444)
@@ -25,8 +25,10 @@
 namespace HeuristicLab.Core {
   public class OperatorExecutionException : Exception {
-    private IOperator op;
+    private readonly IOperator op;
     public IOperator Operator {
       get { return op; }
     }
+
+    private readonly string message;
     public override string Message {
       get {
@@ -38,5 +40,5 @@
         }
         if (InnerException == null)
-          return base.Message + name + ".";
+          return base.Message + name + message + ".";
         else
           return base.Message + name + ": " + InnerException.Message;
@@ -44,8 +46,10 @@
     }
 
-    public OperatorExecutionException(IOperator op)
+    public OperatorExecutionException(IOperator op) : this(op, string.Empty) { }
+    public OperatorExecutionException(IOperator op, string message)
       : base("An exception was thrown by the operator ") {
       if (op == null) throw new ArgumentNullException();
       this.op = op;
+      this.message = message;
     }
     public OperatorExecutionException(IOperator op, Exception innerException)
Index: branches/HivePerformance/sources/HeuristicLab.Data.Views/3.3/EnhancedStringConvertibleMatrixView.Designer.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Data.Views/3.3/EnhancedStringConvertibleMatrixView.Designer.cs	(revision 9444)
+++ branches/HivePerformance/sources/HeuristicLab.Data.Views/3.3/EnhancedStringConvertibleMatrixView.Designer.cs	(revision 9444)
@@ -0,0 +1,93 @@
+﻿#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
+
+namespace HeuristicLab.Data.Views {
+  partial class EnhancedStringConvertibleMatrixView {
+    /// <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.showHideRows = new System.Windows.Forms.ToolStripMenuItem();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // rowsTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.rowsTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.rowsTextBox, 2);
+      //
+      // dataGridView
+      //
+      this.dataGridView.CellPainting += new System.Windows.Forms.DataGridViewCellPaintingEventHandler(dataGridView_CellPainting);
+      // 
+      // contextMenu
+      // 
+      this.contextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.showHideRows});
+      // 
+      // ShowHideRows
+      // 
+      this.showHideRows.Name = "ShowHideRows";
+      this.showHideRows.Size = new System.Drawing.Size(190, 22);
+      this.showHideRows.Text = "Show / Hide Rows";
+      this.showHideRows.Click += new System.EventHandler(this.ShowHideRows_Click);
+      // 
+      // ColoredStringConvertibleMatrixView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "ColoredStringConvertibleMatrixView";
+      this.ShowRowsAndColumnsTextBox = false;
+      this.ShowStatisticalInformation = false;
+      this.Controls.SetChildIndex(this.statisticsTextBox, 0);
+      this.Controls.SetChildIndex(this.rowsLabel, 0);
+      this.Controls.SetChildIndex(this.columnsLabel, 0);
+      this.Controls.SetChildIndex(this.rowsTextBox, 0);
+      this.Controls.SetChildIndex(this.columnsTextBox, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+    #endregion
+
+    protected System.Windows.Forms.ToolStripMenuItem showHideRows;
+  }
+}
Index: branches/HivePerformance/sources/HeuristicLab.Data.Views/3.3/EnhancedStringConvertibleMatrixView.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Data.Views/3.3/EnhancedStringConvertibleMatrixView.cs	(revision 9444)
+++ branches/HivePerformance/sources/HeuristicLab.Data.Views/3.3/EnhancedStringConvertibleMatrixView.cs	(revision 9444)
@@ -0,0 +1,125 @@
+﻿#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.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Data.Views {
+  public partial class EnhancedStringConvertibleMatrixView : StringConvertibleMatrixView {
+    private bool[] columnVisibility, rowVisibility;
+
+    // sets the visibility of its columns for the next time it is updated
+    public IEnumerable<bool> ColumnVisibility {
+      get { return columnVisibility; }
+      set { columnVisibility = value.ToArray(); }
+    }
+    // sets the visibility of its rows for the next time it is updated
+    public IEnumerable<bool> RowVisibility {
+      get { return rowVisibility; }
+      set { rowVisibility = value.ToArray(); }
+    }
+
+    public double Maximum { get; set; }
+    public double Minimum { get; set; }
+
+    public new DoubleMatrix Content {
+      get { return (DoubleMatrix)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public EnhancedStringConvertibleMatrixView() {
+      InitializeComponent();
+    }
+
+    public void ResetVisibility() {
+      columnVisibility = null;
+      rowVisibility = null;
+    }
+
+    protected override void UpdateColumnHeaders() {
+      base.UpdateColumnHeaders();
+      if (columnVisibility != null && Content != null && columnVisibility.Count() == dataGridView.ColumnCount) {
+        int i = 0;
+        foreach (var visibility in columnVisibility) {
+          dataGridView.Columns[i].Visible = visibility;
+          i++;
+        }
+      }
+    }
+    protected override void UpdateRowHeaders() {
+      if (Content == null) return;
+      if (rowVisibility != null && rowVisibility.Count() != dataGridView.RowCount) return;
+
+      for (int index = 0; index < dataGridView.RowCount; index++) {
+        dataGridView.Rows[index].HeaderCell.Value = Content.RowNames.ElementAt(virtualRowIndices[index]);
+
+        if (rowVisibility != null) {
+          dataGridView.Rows[index].Visible = rowVisibility.ElementAt(virtualRowIndices[index]);
+        } else {
+          dataGridView.Rows[index].Visible = true;
+        }
+      }
+    }
+
+    protected virtual void ShowHideRows_Click(object sender, EventArgs e) {
+      var dialog = new StringConvertibleMatrixRowVisibilityDialog(this.dataGridView.Rows.Cast<DataGridViewRow>());
+      dialog.ShowDialog();
+      RowVisibility = dialog.Visibility;
+    }
+
+    protected override void ShowHideColumns_Click(object sender, EventArgs e) {
+      var dialog = new StringConvertibleMatrixColumnVisibilityDialog(this.dataGridView.Columns.Cast<DataGridViewColumn>());
+      dialog.ShowDialog();
+      ColumnVisibility = dialog.Visibility;
+    }
+
+    protected void dataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) {
+      if (Content == null) return;
+      if (e.RowIndex < 0) return;
+      if (e.ColumnIndex < 0) return;
+      if (e.State.HasFlag(DataGridViewElementStates.Selected)) return;
+      if (!e.PaintParts.HasFlag(DataGridViewPaintParts.Background)) return;
+
+      int rowIndex = virtualRowIndices[e.RowIndex];
+      Color backColor = GetDataPointColor(Content[rowIndex, e.ColumnIndex], Minimum, Maximum);
+      using (Brush backColorBrush = new SolidBrush(backColor)) {
+        e.Graphics.FillRectangle(backColorBrush, e.CellBounds);
+      }
+      e.PaintContent(e.CellBounds);
+      e.Handled = true;
+    }
+
+    protected virtual Color GetDataPointColor(double value, double min, double max) {
+      if (double.IsNaN(value)) {
+        return Color.DarkGray;
+      }
+      IList<Color> colors = ColorGradient.Colors;
+      int index = (int)((colors.Count - 1) * (value - min) / (max - min));
+      if (index >= colors.Count) index = colors.Count - 1;
+      if (index < 0) index = 0;
+      return colors[index];
+    }
+  }
+}
Index: branches/HivePerformance/sources/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj	(revision 9444)
@@ -121,4 +121,10 @@
       <DependentUpon>DoubleRangeView.cs</DependentUpon>
     </Compile>
+    <Compile Include="EnhancedStringConvertibleMatrixView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="EnhancedStringConvertibleMatrixView.Designer.cs">
+      <DependentUpon>EnhancedStringConvertibleMatrixView.cs</DependentUpon>
+    </Compile>
     <Compile Include="IntRangeView.cs">
       <SubType>UserControl</SubType>
Index: branches/HivePerformance/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs	(revision 9444)
@@ -453,4 +453,8 @@
     #endregion
 
+    public int GetRowIndex(int originalIndex) {
+      return virtualRowIndices[originalIndex];
+    }
+
     public class RowComparer : IComparer<int> {
       public RowComparer() {
Index: branches/HivePerformance/sources/HeuristicLab.Data/3.3/StringArray.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Data/3.3/StringArray.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Data/3.3/StringArray.cs	(revision 9444)
@@ -34,4 +34,6 @@
   [StorableClass]
   public class StringArray : Item, IEnumerable<string>, IStringConvertibleArray {
+    private const int maximumToStringLength = 100;
+
     public static new Image StaticItemImage {
       get { return HeuristicLab.Common.Resources.VSImageLibrary.Class; }
@@ -106,10 +108,15 @@
 
     public override string ToString() {
+      if (array.Length == 0) return "[]";
+
       StringBuilder sb = new StringBuilder();
       sb.Append("[");
-      if (array.Length > 0) {
-        sb.Append(array[0]);
-        for (int i = 1; i < array.Length; i++)
-          sb.Append(";").Append(array[i]);
+      sb.Append(array[0]);
+      for (int i = 1; i < array.Length; i++) {
+        sb.Append(";").Append(array[i]);
+        if (sb.Length > maximumToStringLength) {
+          sb.Append("...");
+          break;
+        }
       }
       sb.Append("]");
@@ -150,5 +157,6 @@
       if (ItemChanged != null)
         ItemChanged(this, new EventArgs<int>(index));
-      OnToStringChanged();
+      if (index < maximumToStringLength)
+        OnToStringChanged();
     }
     public event EventHandler Reset;
Index: branches/HivePerformance/sources/HeuristicLab.Data/3.3/StringMatrix.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Data/3.3/StringMatrix.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Data/3.3/StringMatrix.cs	(revision 9444)
@@ -34,4 +34,6 @@
   [StorableClass]
   public class StringMatrix : Item, IEnumerable<string>, IStringConvertibleMatrix {
+    private const int maximumToStringLength = 100;
+
     public static new Image StaticItemImage {
       get { return HeuristicLab.Common.Resources.VSImageLibrary.Class; }
@@ -208,15 +210,21 @@
 
     public override string ToString() {
+      if (matrix.Length == 0) return "[]";
+
       StringBuilder sb = new StringBuilder();
       sb.Append("[");
-      if (matrix.Length > 0) {
-        for (int i = 0; i < Rows; i++) {
-          sb.Append("[").Append(matrix[i, 0]);
-          for (int j = 1; j < Columns; j++)
-            sb.Append(";").Append(matrix[i, j]);
-          sb.Append("]");
+      for (int i = 0; i < Rows; i++) {
+        sb.Append("[").Append(matrix[i, 0]);
+        for (int j = 1; j < Columns; j++)
+          sb.Append(";").Append(matrix[i, j]);
+        sb.Append("]");
+
+        if (sb.Length > maximumToStringLength) {
+          sb.Append("[...]");
+          break;
         }
       }
       sb.Append("]");
+
       return sb.ToString();
     }
@@ -286,5 +294,9 @@
       if (ItemChanged != null)
         ItemChanged(this, new EventArgs<int, int>(rowIndex, columnIndex));
-      OnToStringChanged();
+
+      //approximation to avoid firing of unnecessary ToStringChangedEvents
+      //columnIndex is not used, because always full rows are returned in the ToString method
+      if (rowIndex * Columns < maximumToStringLength)
+        OnToStringChanged();
     }
     public event EventHandler Reset;
Index: branches/HivePerformance/sources/HeuristicLab.Data/3.3/ValueTypeArray.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Data/3.3/ValueTypeArray.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Data/3.3/ValueTypeArray.cs	(revision 9444)
@@ -34,4 +34,6 @@
   [StorableClass]
   public abstract class ValueTypeArray<T> : Item, IEnumerable<T> where T : struct {
+    private const int maximumToStringLength = 100;
+
     public static new Image StaticItemImage {
       get { return HeuristicLab.Common.Resources.VSImageLibrary.Class; }
@@ -99,10 +101,15 @@
 
     public override string ToString() {
+      if (array.Length == 0) return "[]";
+
       StringBuilder sb = new StringBuilder();
       sb.Append("[");
-      if (array.Length > 0) {
-        sb.Append(array[0].ToString());
-        for (int i = 1; i < array.Length; i++)
-          sb.Append(";").Append(array[i].ToString());
+      sb.Append(array[0].ToString());
+      for (int i = 1; i < array.Length; i++) {
+        sb.Append(";").Append(array[i].ToString());
+        if (sb.Length > maximumToStringLength) {
+          sb.Append("...");
+          break;
+        }
       }
       sb.Append("]");
@@ -122,5 +129,6 @@
       if (ItemChanged != null)
         ItemChanged(this, new EventArgs<int>(index));
-      OnToStringChanged();
+      if (index < maximumToStringLength)
+        OnToStringChanged();
     }
     public event EventHandler Reset;
Index: branches/HivePerformance/sources/HeuristicLab.Data/3.3/ValueTypeMatrix.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Data/3.3/ValueTypeMatrix.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Data/3.3/ValueTypeMatrix.cs	(revision 9444)
@@ -34,4 +34,6 @@
   [StorableClass]
   public abstract class ValueTypeMatrix<T> : Item, IEnumerable<T> where T : struct {
+    private const int maximumToStringLength = 100;
+
     public static new Image StaticItemImage {
       get { return HeuristicLab.Common.Resources.VSImageLibrary.Class; }
@@ -194,15 +196,21 @@
 
     public override string ToString() {
+      if (matrix.Length == 0) return "[]";
+
       StringBuilder sb = new StringBuilder();
       sb.Append("[");
-      if (matrix.Length > 0) {
-        for (int i = 0; i < Rows; i++) {
-          sb.Append("[").Append(matrix[i, 0].ToString());
-          for (int j = 1; j < Columns; j++)
-            sb.Append(";").Append(matrix[i, j].ToString());
-          sb.Append("]");
+      for (int i = 0; i < Rows; i++) {
+        sb.Append("[").Append(matrix[i, 0].ToString());
+        for (int j = 1; j < Columns; j++)
+          sb.Append(";").Append(matrix[i, j].ToString());
+        sb.Append("]");
+
+        if (sb.Length > maximumToStringLength) {
+          sb.Append("[...]");
+          break;
         }
       }
       sb.Append("]");
+
       return sb.ToString();
     }
@@ -251,5 +259,9 @@
       if (ItemChanged != null)
         ItemChanged(this, new EventArgs<int, int>(rowIndex, columnIndex));
-      OnToStringChanged();
+
+      //approximation to avoid firing of unnecessary ToStringChangedEvents
+      //columnIndex is not used, because always full rows are returned in the ToString method
+      if (rowIndex * Columns < maximumToStringLength)
+        OnToStringChanged();
     }
     public event EventHandler Reset;
Index: branches/HivePerformance/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionGrammarBase.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionGrammarBase.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionGrammarBase.cs	(revision 9444)
@@ -387,4 +387,16 @@
     private readonly Dictionary<string, int> cachedMinExpressionLength;
     public int GetMinimumExpressionLength(ISymbol symbol) {
+      int res;
+      if (cachedMinExpressionLength.TryGetValue(symbol.Name, out res))
+        return res;
+
+      res = GetMinimumExpressionLengthRec(symbol);
+      foreach (var entry in cachedMinExpressionLength.Where(e => e.Value >= int.MaxValue).ToList()) {
+        if (entry.Key != symbol.Name) cachedMinExpressionLength.Remove(entry.Key);
+      }
+      return res;
+    }
+
+    private int GetMinimumExpressionLengthRec(ISymbol symbol) {
       int temp;
       if (!cachedMinExpressionLength.TryGetValue(symbol.Name, out temp)) {
@@ -393,5 +405,5 @@
                                               let minForSlot = (long)(from s in GetAllowedChildSymbols(symbol, argIndex)
                                                                       where s.InitialFrequency > 0.0
-                                                                      select GetMinimumExpressionLength(s)).DefaultIfEmpty(0).Min()
+                                                                      select GetMinimumExpressionLengthRec(s)).DefaultIfEmpty(0).Min()
                                               select minForSlot).DefaultIfEmpty(0).Sum();
 
@@ -422,4 +434,15 @@
     private readonly Dictionary<string, int> cachedMinExpressionDepth;
     public int GetMinimumExpressionDepth(ISymbol symbol) {
+      int res;
+      if (cachedMinExpressionDepth.TryGetValue(symbol.Name, out res))
+        return res;
+
+      res = GetMinimumExpressionDepthRec(symbol);
+      foreach (var entry in cachedMinExpressionDepth.Where(e => e.Value >= int.MaxValue).ToList()) {
+        if (entry.Key != symbol.Name) cachedMinExpressionDepth.Remove(entry.Key);
+      }
+      return res;
+    }
+    private int GetMinimumExpressionDepthRec(ISymbol symbol) {
       int temp;
       if (!cachedMinExpressionDepth.TryGetValue(symbol.Name, out temp)) {
@@ -428,5 +451,5 @@
                              let minForSlot = (long)(from s in GetAllowedChildSymbols(symbol, argIndex)
                                                      where s.InitialFrequency > 0.0
-                                                     select GetMinimumExpressionDepth(s)).DefaultIfEmpty(0).Min()
+                                                     select GetMinimumExpressionDepthRec(s)).DefaultIfEmpty(0).Min()
                              select minForSlot).DefaultIfEmpty(0).Max();
         cachedMinExpressionDepth[symbol.Name] = (int)Math.Min(minDepth, int.MaxValue);
Index: branches/HivePerformance/sources/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj	(revision 9444)
@@ -263,10 +263,4 @@
       <DependentUpon>RunCollectionDataTableView.cs</DependentUpon>
     </Compile>
-    <Compile Include="TimeLimitRunView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="TimeLimitRunView.Designer.cs">
-      <DependentUpon>TimeLimitRunView.cs</DependentUpon>
-    </Compile>
     <Compile Include="UserDefinedAlgorithmView.cs">
       <SubType>UserControl</SubType>
Index: branches/HivePerformance/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBoxPlotView.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBoxPlotView.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBoxPlotView.cs	(revision 9444)
@@ -328,7 +328,6 @@
       if (!this.categoricalMapping.ContainsKey(dimension)) {
         this.categoricalMapping[dimension] = new Dictionary<object, double>();
-        var orderedCategories = Content.Where(r=> r.Visible).Select(r => Content.GetValue(r, dimension).ToString())
-                                .Distinct()
-                                .OrderBy(x => x, new NaturalStringComparer());
+        var orderedCategories = Content.Where(r => r.Visible && Content.GetValue(r, dimension) != null).Select(r => Content.GetValue(r, dimension).ToString())
+                                       .Distinct().OrderBy(x => x, new NaturalStringComparer());
         int count = 1;
         foreach (var category in orderedCategories) {
@@ -389,5 +388,6 @@
       axis.CustomLabels.Clear();
       if (categoricalMapping.ContainsKey(dimension)) {
-        foreach (var pair in categoricalMapping[dimension]) {
+        int position = 1;
+        foreach (var pair in categoricalMapping[dimension].Where(x => seriesCache.ContainsKey(x.Value))) {
           string labelText = pair.Key.ToString();
           CustomLabel label = new CustomLabel();
@@ -397,7 +397,8 @@
           label.Text = labelText;
           label.GridTicks = GridTickTypes.TickMark;
-          label.FromPosition = pair.Value - 0.5;
-          label.ToPosition = pair.Value + 0.5;
+          label.FromPosition = position - 0.5;
+          label.ToPosition = position + 0.5;
           axis.CustomLabels.Add(label);
+          position++;
         }
       } else if (dimension > 0 && Content.GetValue(0, dimension) is TimeSpanValue) {
Index: branches/HivePerformance/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBubbleChartView.Designer.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBubbleChartView.Designer.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBubbleChartView.Designer.cs	(revision 9444)
@@ -48,5 +48,4 @@
       System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
       System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
-      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RunCollectionBubbleChartView));
       this.yJitterLabel = new System.Windows.Forms.Label();
       this.xJitterlabel = new System.Windows.Forms.Label();
@@ -61,26 +60,28 @@
       this.chart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
       this.openBoxPlotViewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-      this.hideRunToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.hideRunsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
       this.zoomButton = new System.Windows.Forms.RadioButton();
       this.selectButton = new System.Windows.Forms.RadioButton();
       this.radioButtonGroup = new System.Windows.Forms.GroupBox();
-      this.colorDialogButton = new System.Windows.Forms.Button();
+      this.colorRunsButton = new System.Windows.Forms.Button();
       this.colorDialog = new System.Windows.Forms.ColorDialog();
       this.tooltip = new System.Windows.Forms.ToolTip(this.components);
       this.colorXAxisButton = new System.Windows.Forms.Button();
       this.colorYAxisButton = new System.Windows.Forms.Button();
+      this.transparencyTrackBar = new System.Windows.Forms.TrackBar();
+      this.hideRunsButton = new System.Windows.Forms.Button();
       this.noRunsLabel = new System.Windows.Forms.Label();
       this.sizeTrackBar = new System.Windows.Forms.TrackBar();
       this.getDataAsMatrixToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-      this.transparencyTrackBar = new System.Windows.Forms.TrackBar();
       this.transparencyLabel = new System.Windows.Forms.Label();
-      this.colorRunsButton = new System.Windows.Forms.Button();
-      this.hideRunsButton = new System.Windows.Forms.Button();
+      this.unhideAllRunToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.colorResetToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.colorDialogButton = new System.Windows.Forms.Button();
       ((System.ComponentModel.ISupportInitialize)(this.xTrackBar)).BeginInit();
       ((System.ComponentModel.ISupportInitialize)(this.yTrackBar)).BeginInit();
       ((System.ComponentModel.ISupportInitialize)(this.chart)).BeginInit();
       this.radioButtonGroup.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.transparencyTrackBar)).BeginInit();
       ((System.ComponentModel.ISupportInitialize)(this.sizeTrackBar)).BeginInit();
-      ((System.ComponentModel.ISupportInitialize)(this.transparencyTrackBar)).BeginInit();
       this.SuspendLayout();
       // 
@@ -222,10 +223,10 @@
       this.openBoxPlotViewToolStripMenuItem.Click += new System.EventHandler(this.openBoxPlotViewToolStripMenuItem_Click);
       // 
-      // hideRunToolStripMenuItem
-      // 
-      this.hideRunToolStripMenuItem.Name = "hideRunToolStripMenuItem";
-      this.hideRunToolStripMenuItem.Size = new System.Drawing.Size(256, 22);
-      this.hideRunToolStripMenuItem.Text = "Hide Run";
-      this.hideRunToolStripMenuItem.Click += new System.EventHandler(this.hideRunToolStripMenuItem_Click);
+      // hideRunsToolStripMenuItem
+      // 
+      this.hideRunsToolStripMenuItem.Name = "hideRunsToolStripMenuItem";
+      this.hideRunsToolStripMenuItem.Size = new System.Drawing.Size(256, 22);
+      this.hideRunsToolStripMenuItem.Text = "Hide selected Runs";
+      this.hideRunsToolStripMenuItem.Click += new System.EventHandler(this.hideRunsToolStripMenuItem_Click);
       // 
       // zoomButton
@@ -265,17 +266,16 @@
       this.radioButtonGroup.TabStop = false;
       // 
-      // colorDialogButton
-      // 
-      this.colorDialogButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.colorDialogButton.Enabled = false;
-      this.colorDialogButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
-      this.colorDialogButton.Location = new System.Drawing.Point(130, 469);
-      this.colorDialogButton.Name = "colorDialogButton";
-      this.colorDialogButton.Size = new System.Drawing.Size(21, 21);
-      this.colorDialogButton.TabIndex = 20;
-      this.colorDialogButton.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
-      this.tooltip.SetToolTip(this.colorDialogButton, "Choose color");
-      this.colorDialogButton.UseVisualStyleBackColor = true;
-      this.colorDialogButton.Click += new System.EventHandler(this.colorDialogButton_Click);
+      // colorRunsButton
+      // 
+      this.colorRunsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.colorRunsButton.Enabled = false;
+      this.colorRunsButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      this.colorRunsButton.Location = new System.Drawing.Point(130, 469);
+      this.colorRunsButton.Name = "colorRunsButton";
+      this.colorRunsButton.Size = new System.Drawing.Size(21, 21);
+      this.colorRunsButton.TabIndex = 20;
+      this.tooltip.SetToolTip(this.colorRunsButton, "Color all selected runs");
+      this.colorRunsButton.UseVisualStyleBackColor = true;
+      this.colorRunsButton.Click += new System.EventHandler(this.colorRunsButton_Click);
       // 
       // colorDialog
@@ -309,4 +309,31 @@
       this.colorYAxisButton.Click += new System.EventHandler(this.colorYAxisButton_Click);
       // 
+      // transparencyTrackBar
+      // 
+      this.transparencyTrackBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.transparencyTrackBar.LargeChange = 16;
+      this.transparencyTrackBar.Location = new System.Drawing.Point(359, 470);
+      this.transparencyTrackBar.Maximum = 254;
+      this.transparencyTrackBar.Name = "transparencyTrackBar";
+      this.transparencyTrackBar.Size = new System.Drawing.Size(64, 45);
+      this.transparencyTrackBar.TabIndex = 24;
+      this.transparencyTrackBar.TickStyle = System.Windows.Forms.TickStyle.None;
+      this.tooltip.SetToolTip(this.transparencyTrackBar, "Sets the transparency of the colors");
+      this.transparencyTrackBar.ValueChanged += new System.EventHandler(this.transparencyTrackBar_ValueChanged);
+      // 
+      // hideRunsButton
+      // 
+      this.hideRunsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.hideRunsButton.Enabled = false;
+      this.hideRunsButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      this.hideRunsButton.Location = new System.Drawing.Point(177, 469);
+      this.hideRunsButton.Name = "hideRunsButton";
+      this.hideRunsButton.Size = new System.Drawing.Size(43, 21);
+      this.hideRunsButton.TabIndex = 26;
+      this.hideRunsButton.Text = "Hide";
+      this.tooltip.SetToolTip(this.hideRunsButton, "Hides all selected runs");
+      this.hideRunsButton.UseVisualStyleBackColor = true;
+      this.hideRunsButton.Click += new System.EventHandler(this.hideRunsButton_Click);
+      // 
       // noRunsLabel
       // 
@@ -339,17 +366,4 @@
       this.getDataAsMatrixToolStripMenuItem.Click += new System.EventHandler(this.getDataAsMatrixToolStripMenuItem_Click);
       // 
-      // transparencyTrackBar
-      // 
-      this.transparencyTrackBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.transparencyTrackBar.LargeChange = 16;
-      this.transparencyTrackBar.Location = new System.Drawing.Point(359, 470);
-      this.transparencyTrackBar.Maximum = 254;
-      this.transparencyTrackBar.Name = "transparencyTrackBar";
-      this.transparencyTrackBar.Size = new System.Drawing.Size(64, 45);
-      this.transparencyTrackBar.TabIndex = 24;
-      this.transparencyTrackBar.TickStyle = System.Windows.Forms.TickStyle.None;
-      this.tooltip.SetToolTip(this.transparencyTrackBar, "Sets the transparency of the colors");
-      this.transparencyTrackBar.ValueChanged += new System.EventHandler(this.transparencyTrackBar_ValueChanged);
-      // 
       // transparencyLabel
       // 
@@ -362,33 +376,33 @@
       this.transparencyLabel.Text = "Transparency:";
       // 
-      // colorRunsButton
-      // 
-      this.colorRunsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.colorRunsButton.Enabled = false;
-      this.colorRunsButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
-      this.colorRunsButton.Location = new System.Drawing.Point(151, 469);
-      this.colorRunsButton.Name = "colorRunsButton";
-      this.colorRunsButton.Size = new System.Drawing.Size(43, 21);
-      this.colorRunsButton.TabIndex = 25;
-      this.colorRunsButton.Text = "Color";
-      this.colorRunsButton.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-      this.tooltip.SetToolTip(this.colorRunsButton, "Color all selected runs");
-      this.colorRunsButton.UseVisualStyleBackColor = true;
-      this.colorRunsButton.Click += new System.EventHandler(this.colorRunsButton_Click);
-      // 
-      // hideRunsButton
-      // 
-      this.hideRunsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.hideRunsButton.Enabled = false;
-      this.hideRunsButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
-      this.hideRunsButton.Location = new System.Drawing.Point(194, 469);
-      this.hideRunsButton.Name = "hideRunsButton";
-      this.hideRunsButton.Size = new System.Drawing.Size(43, 21);
-      this.hideRunsButton.TabIndex = 26;
-      this.hideRunsButton.Text = "Hide";
-      this.hideRunsButton.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-      this.tooltip.SetToolTip(this.hideRunsButton, "Hides all selected runs");
-      this.hideRunsButton.UseVisualStyleBackColor = true;
-      this.hideRunsButton.Click += new System.EventHandler(this.hideRunsButton_Click);
+      // unhideAllRunToolStripMenuItem
+      // 
+      this.unhideAllRunToolStripMenuItem.Name = "unhideAllRunToolStripMenuItem";
+      this.unhideAllRunToolStripMenuItem.Size = new System.Drawing.Size(256, 22);
+      this.unhideAllRunToolStripMenuItem.Text = "Unhide all";
+      this.unhideAllRunToolStripMenuItem.Click += new System.EventHandler(this.unhideAllRunToolStripMenuItem_Click);
+      // 
+      // colorResetToolStripMenuItem
+      // 
+      this.colorResetToolStripMenuItem.Name = "colorResetToolStripMenuItem";
+      this.colorResetToolStripMenuItem.Size = new System.Drawing.Size(256, 22);
+      this.colorResetToolStripMenuItem.Text = "Color reset";
+      this.colorResetToolStripMenuItem.Click += new System.EventHandler(this.colorResetToolStripMenuItem_Click);
+      // 
+      // colorDialogButton
+      // 
+      this.colorDialogButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.colorDialogButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+      this.colorDialogButton.Enabled = false;
+      this.colorDialogButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.colorDialogButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      this.colorDialogButton.Location = new System.Drawing.Point(150, 469);
+      this.colorDialogButton.Name = "colorDialogButton";
+      this.colorDialogButton.Size = new System.Drawing.Size(14, 21);
+      this.colorDialogButton.TabIndex = 25;
+      this.colorDialogButton.Text = "v";
+      this.tooltip.SetToolTip(this.colorDialogButton, "Choose color");
+      this.colorDialogButton.UseVisualStyleBackColor = true;
+      this.colorDialogButton.Click += new System.EventHandler(this.colorDialogButton_Click);
       // 
       // RunCollectionBubbleChartView
@@ -398,5 +412,4 @@
       this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
       this.Controls.Add(this.hideRunsButton);
-      this.Controls.Add(this.colorRunsButton);
       this.Controls.Add(this.transparencyTrackBar);
       this.Controls.Add(this.sizeTrackBar);
@@ -404,7 +417,6 @@
       this.Controls.Add(this.colorXAxisButton);
       this.Controls.Add(this.noRunsLabel);
-      this.Controls.Add(this.colorDialogButton);
+      this.Controls.Add(this.colorRunsButton);
       this.Controls.Add(this.radioButtonGroup);
-      this.Controls.Add(this.chart);
       this.Controls.Add(this.sizeLabel);
       this.Controls.Add(this.sizeComboBox);
@@ -418,4 +430,6 @@
       this.Controls.Add(this.yAxisComboBox);
       this.Controls.Add(this.yTrackBar);
+      this.Controls.Add(this.colorDialogButton);
+      this.Controls.Add(this.chart);
       this.Name = "RunCollectionBubbleChartView";
       this.Size = new System.Drawing.Size(854, 496);
@@ -425,6 +439,6 @@
       this.radioButtonGroup.ResumeLayout(false);
       this.radioButtonGroup.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.transparencyTrackBar)).EndInit();
       ((System.ComponentModel.ISupportInitialize)(this.sizeTrackBar)).EndInit();
-      ((System.ComponentModel.ISupportInitialize)(this.transparencyTrackBar)).EndInit();
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -447,10 +461,10 @@
     private System.Windows.Forms.RadioButton selectButton;
     private System.Windows.Forms.GroupBox radioButtonGroup;
-    private System.Windows.Forms.Button colorDialogButton;
+    private System.Windows.Forms.Button colorRunsButton;
     private System.Windows.Forms.ColorDialog colorDialog;
     private System.Windows.Forms.ToolTip tooltip;
     private System.Windows.Forms.Label noRunsLabel;
     private System.Windows.Forms.ToolStripMenuItem openBoxPlotViewToolStripMenuItem;
-    private System.Windows.Forms.ToolStripMenuItem hideRunToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem hideRunsToolStripMenuItem;
     private System.Windows.Forms.Button colorXAxisButton;
     private System.Windows.Forms.Button colorYAxisButton;
@@ -459,6 +473,8 @@
     private System.Windows.Forms.TrackBar transparencyTrackBar;
     private System.Windows.Forms.Label transparencyLabel;
-    private System.Windows.Forms.Button colorRunsButton;
     private System.Windows.Forms.Button hideRunsButton;
+    private System.Windows.Forms.ToolStripMenuItem unhideAllRunToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem colorResetToolStripMenuItem;
+    private System.Windows.Forms.Button colorDialogButton;
   }
 }
Index: branches/HivePerformance/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBubbleChartView.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBubbleChartView.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBubbleChartView.cs	(revision 9444)
@@ -56,15 +56,22 @@
     private bool suppressUpdates = false;
 
+    private const double transperencyExponent = 2.5;
+
+    private RunCollectionContentConstraint visibilityConstraint = new RunCollectionContentConstraint() { Active = true };
 
     public RunCollectionBubbleChartView() {
       InitializeComponent();
 
-      chart.ContextMenuStrip.Items.Insert(0, hideRunToolStripMenuItem);
-      chart.ContextMenuStrip.Items.Insert(1, openBoxPlotViewToolStripMenuItem);
-      chart.ContextMenuStrip.Items.Add(getDataAsMatrixToolStripMenuItem);
+      chart.ContextMenuStrip.Items.Insert(0, openBoxPlotViewToolStripMenuItem);
+      chart.ContextMenuStrip.Items.Insert(1, getDataAsMatrixToolStripMenuItem);
+      chart.ContextMenuStrip.Items.Insert(2, new ToolStripSeparator());
+      chart.ContextMenuStrip.Items.Insert(3, hideRunsToolStripMenuItem);
+      chart.ContextMenuStrip.Items.Insert(4, unhideAllRunToolStripMenuItem);
+      chart.ContextMenuStrip.Items.Insert(5, colorResetToolStripMenuItem);
+      chart.ContextMenuStrip.Items.Insert(6, new ToolStripSeparator());
       chart.ContextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(ContextMenuStrip_Opening);
 
-      colorDialog.Color = Color.Black;
-      colorDialogButton.Image = this.GenerateImage(16, 16, this.colorDialog.Color);
+      colorDialog.Color = Color.Orange;
+      colorRunsButton.Image = this.GenerateImage(16, 16, this.colorDialog.Color);
       isSelecting = false;
 
@@ -167,5 +174,5 @@
             point.MarkerStyle = MarkerStyle.Cross;
           } else {
-            point.Color = Color.FromArgb(255 - transparencyTrackBar.Value, ((IRun)point.Tag).Color);
+            point.Color = Color.FromArgb(255 - LogTransform(transparencyTrackBar.Value), ((IRun)point.Tag).Color);
             point.MarkerStyle = MarkerStyle.Circle;
           }
@@ -310,5 +317,5 @@
       double sizeRange = maxSizeValue - minSizeValue;
 
-      const int smallestBubbleSize = 5;
+      const int smallestBubbleSize = 7;
 
       foreach (DataPoint point in series.Points) {
@@ -331,7 +338,4 @@
       var yAxis = this.chart.ChartAreas[0].AxisY;
 
-      SetAutomaticUpdateOfAxis(xAxis, false);
-      SetAutomaticUpdateOfAxis(yAxis, false);
-
       double xAxisRange = xAxis.Maximum - xAxis.Minimum;
       double yAxisRange = yAxis.Maximum - yAxis.Minimum;
@@ -351,4 +355,12 @@
       }
 
+      if (xJitterFactor.IsAlmost(0.0) && yJitterFactor.IsAlmost(0.0)) {
+        SetAutomaticUpdateOfAxis(xAxis, true);
+        SetAutomaticUpdateOfAxis(yAxis, true);
+        chart.ChartAreas[0].RecalculateAxesScale();
+      } else {
+        SetAutomaticUpdateOfAxis(xAxis, false);
+        SetAutomaticUpdateOfAxis(yAxis, false);
+      }
     }
 
@@ -431,7 +443,6 @@
       if (!this.categoricalMapping.ContainsKey(dimension)) {
         this.categoricalMapping[dimension] = new Dictionary<object, double>();
-        var orderedCategories = Content.Where(r => r.Visible).Select(r => Content.GetValue(r, dimension).ToString())
-                                    .Distinct()
-                                    .OrderBy(x => x, new NaturalStringComparer());
+        var orderedCategories = Content.Where(r => r.Visible && Content.GetValue(r, dimension) != null).Select(r => Content.GetValue(r, dimension).ToString())
+                                    .Distinct().OrderBy(x => x, new NaturalStringComparer());
         int count = 1;
         foreach (var category in orderedCategories) {
@@ -535,4 +546,8 @@
       double maxY = Math.Max(yCursor.SelectionStart, yCursor.SelectionEnd);
 
+      if (Control.ModifierKeys != Keys.Control) {
+        ClearSelectedRuns();
+      }
+
       //check for click to select a single model
       if (minX == maxX && minY == maxY) {
@@ -545,10 +560,9 @@
           point.MarkerStyle = MarkerStyle.Cross;
           selectedRuns.Add(run);
-
-        } else ClearSelectedRuns();
+        }
       } else {
         foreach (DataPoint point in this.chart.Series[0].Points) {
-          if (point.XValue < minX || point.XValue >= maxX) continue;
-          if (point.YValues[0] < minY || point.YValues[0] >= maxY) continue;
+          if (point.XValue < minX || point.XValue > maxX) continue;
+          if (point.YValues[0] < minY || point.YValues[0] > maxY) continue;
           point.MarkerStyle = MarkerStyle.Cross;
           point.Color = Color.Red;
@@ -688,6 +702,6 @@
     private void zoomButton_CheckedChanged(object sender, EventArgs e) {
       this.isSelecting = selectButton.Checked;
+      this.colorRunsButton.Enabled = this.isSelecting;
       this.colorDialogButton.Enabled = this.isSelecting;
-      this.colorRunsButton.Enabled = this.isSelecting;
       this.hideRunsButton.Enabled = this.isSelecting;
       this.chart.ChartAreas[0].AxisX.ScaleView.Zoomable = !isSelecting;
@@ -701,30 +715,36 @@
       var chartPos = chart.PointToClient(pos);
 
-      HitTestResult h = this.chart.HitTest(chartPos.X, chartPos.Y);
+      HitTestResult h = this.chart.HitTest(chartPos.X, chartPos.Y, ChartElementType.DataPoint);
       if (h.ChartElementType == ChartElementType.DataPoint) {
         runToHide = (IRun)((DataPoint)h.Object).Tag;
-        hideRunToolStripMenuItem.Visible = true;
+        hideRunsToolStripMenuItem.Visible = true;
       } else {
         runToHide = null;
-        hideRunToolStripMenuItem.Visible = false;
-      }
-
-    }
-    private void hideRunToolStripMenuItem_Click(object sender, EventArgs e) {
-      var constraint = Content.Constraints.OfType<RunCollectionContentConstraint>().FirstOrDefault(c => c.Active);
-      if (constraint == null) {
-        constraint = new RunCollectionContentConstraint();
-        Content.Constraints.Add(constraint);
-        constraint.Active = true;
-      }
-      constraint.ConstraintData.Add(runToHide);
+        hideRunsToolStripMenuItem.Visible = false;
+      }
+    }
+
+    private void unhideAllRunToolStripMenuItem_Click(object sender, EventArgs e) {
+      visibilityConstraint.ConstraintData.Clear();
+      if (Content.Constraints.Contains(visibilityConstraint)) Content.Constraints.Remove(visibilityConstraint);
+    }
+    private void hideRunsToolStripMenuItem_Click(object sender, EventArgs e) {
+      HideRuns(selectedRuns);
+      //could not use ClearSelectedRuns as the runs are not visible anymore
+      selectedRuns.Clear();
     }
     private void hideRunsButton_Click(object sender, EventArgs e) {
-      if (!selectedRuns.Any()) return;
-      var constraint = new RunCollectionContentConstraint();
-      constraint.ConstraintData = new ItemSet<IRun>(selectedRuns);
-      Content.Constraints.Add(constraint);
-      ClearSelectedRuns();
-      constraint.Active = true;
+      HideRuns(selectedRuns);
+      //could not use ClearSelectedRuns as the runs are not visible anymore
+      selectedRuns.Clear();
+    }
+
+    private void HideRuns(IEnumerable<IRun> runs) {
+      visibilityConstraint.Active = false;
+      if (!Content.Constraints.Contains(visibilityConstraint)) Content.Constraints.Add(visibilityConstraint);
+      foreach (var run in selectedRuns) {
+        visibilityConstraint.ConstraintData.Add(run);
+      }
+      visibilityConstraint.Active = true;
     }
 
@@ -733,8 +753,17 @@
         foreach (var point in runToDataPointMapping[run]) {
           point.MarkerStyle = MarkerStyle.Circle;
-          point.Color = Color.FromArgb(255 - transparencyTrackBar.Value, run.Color);
+          point.Color = Color.FromArgb(255 - LogTransform(transparencyTrackBar.Value), run.Color);
         }
       }
       selectedRuns.Clear();
+    }
+
+    // returns a value in [0..255]
+    private int LogTransform(int x) {
+      double min = transparencyTrackBar.Minimum;
+      double max = transparencyTrackBar.Maximum;
+      double r = (x - min) / (max - min);  // r \in [0..1]
+      double l = Math.Max(Math.Min((1.0 - Math.Pow(0.05, r)) / 0.95, 1), 0); // l \in [0..1]
+      return (int)Math.Round(255.0 * l);
     }
 
@@ -791,7 +820,21 @@
 
     #region coloring
+    private void colorResetToolStripMenuItem_Click(object sender, EventArgs e) {
+      Content.UpdateOfRunsInProgress = true;
+
+      IEnumerable<IRun> runs;
+      if (selectedRuns.Any()) runs = selectedRuns;
+      else runs = Content;
+
+      foreach (var run in runs)
+        run.Color = Color.Black;
+      ClearSelectedRuns();
+
+      Content.UpdateOfRunsInProgress = false;
+    }
     private void colorDialogButton_Click(object sender, EventArgs e) {
       if (colorDialog.ShowDialog(this) == DialogResult.OK) {
-        this.colorDialogButton.Image = this.GenerateImage(16, 16, this.colorDialog.Color);
+        this.colorRunsButton.Image = this.GenerateImage(16, 16, this.colorDialog.Color);
+        colorRunsButton_Click(sender, e);
       }
     }
Index: branches/HivePerformance/sources/HeuristicLab.Optimization.Views/3.3/TimeLimitRunView.Designer.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Optimization.Views/3.3/TimeLimitRunView.Designer.cs	(revision 9434)
+++ 	(revision )
@@ -1,361 +1,0 @@
-﻿#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
-
-namespace HeuristicLab.Optimization.Views {
-  partial class TimeLimitRunView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TimeLimitRunView));
-      this.timeLimitLabel = new System.Windows.Forms.Label();
-      this.timeLimitTextBox = new System.Windows.Forms.TextBox();
-      this.label1 = new System.Windows.Forms.Label();
-      this.snapshotsTextBox = new System.Windows.Forms.TextBox();
-      this.storeAlgorithmInEachSnapshotCheckBox = new System.Windows.Forms.CheckBox();
-      this.tabControl = new HeuristicLab.MainForm.WindowsForms.DragOverTabControl();
-      this.algorithmTabPage = new System.Windows.Forms.TabPage();
-      this.algorithmViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.openAlgorithmButton = new System.Windows.Forms.Button();
-      this.newAlgorithmButton = new System.Windows.Forms.Button();
-      this.snapshotsTabPage = new System.Windows.Forms.TabPage();
-      this.snapshotsView = new HeuristicLab.Optimization.Views.RunCollectionView();
-      this.runsTabPage = new System.Windows.Forms.TabPage();
-      this.runsView = new HeuristicLab.Optimization.Views.RunCollectionView();
-      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
-      this.snapshotButton = new System.Windows.Forms.Button();
-      this.sequenceButton = new System.Windows.Forms.Button();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.tabControl.SuspendLayout();
-      this.algorithmTabPage.SuspendLayout();
-      this.snapshotsTabPage.SuspendLayout();
-      this.runsTabPage.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // startButton
-      // 
-      this.startButton.Location = new System.Drawing.Point(0, 440);
-      this.startButton.TabIndex = 9;
-      this.toolTip.SetToolTip(this.startButton, "Start/Resume Optimizer");
-      // 
-      // executionTimeTextBox
-      // 
-      this.executionTimeTextBox.Location = new System.Drawing.Point(412, 444);
-      // 
-      // executionTimeLabel
-      // 
-      this.executionTimeLabel.Location = new System.Drawing.Point(323, 447);
-      // 
-      // pauseButton
-      // 
-      this.pauseButton.Location = new System.Drawing.Point(30, 440);
-      this.pauseButton.TabIndex = 10;
-      this.toolTip.SetToolTip(this.pauseButton, "Pause Optimizer");
-      // 
-      // stopButton
-      // 
-      this.stopButton.Location = new System.Drawing.Point(60, 440);
-      this.stopButton.TabIndex = 11;
-      this.toolTip.SetToolTip(this.stopButton, "Stop Optimizer");
-      // 
-      // resetButton
-      // 
-      this.resetButton.Location = new System.Drawing.Point(90, 440);
-      this.resetButton.TabIndex = 12;
-      this.toolTip.SetToolTip(this.resetButton, "Reset Optimizer");
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      this.nameTextBox.Location = new System.Drawing.Point(69, 0);
-      this.nameTextBox.Size = new System.Drawing.Size(455, 20);
-      // 
-      // infoLabel
-      // 
-      this.infoLabel.Location = new System.Drawing.Point(530, 3);
-      // 
-      // timeLimitLabel
-      // 
-      this.timeLimitLabel.AutoSize = true;
-      this.timeLimitLabel.Location = new System.Drawing.Point(3, 29);
-      this.timeLimitLabel.Name = "timeLimitLabel";
-      this.timeLimitLabel.Size = new System.Drawing.Size(53, 13);
-      this.timeLimitLabel.TabIndex = 3;
-      this.timeLimitLabel.Text = "Time limit:";
-      // 
-      // timeLimitTextBox
-      // 
-      this.timeLimitTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.timeLimitTextBox.Location = new System.Drawing.Point(69, 26);
-      this.timeLimitTextBox.Name = "timeLimitTextBox";
-      this.timeLimitTextBox.Size = new System.Drawing.Size(455, 20);
-      this.timeLimitTextBox.TabIndex = 4;
-      this.timeLimitTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.timeLimitTextBox_Validating);
-      // 
-      // label1
-      // 
-      this.label1.AutoSize = true;
-      this.label1.Location = new System.Drawing.Point(3, 55);
-      this.label1.Name = "label1";
-      this.label1.Size = new System.Drawing.Size(60, 13);
-      this.label1.TabIndex = 5;
-      this.label1.Text = "Snapshots:";
-      // 
-      // snapshotsTextBox
-      // 
-      this.snapshotsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.snapshotsTextBox.Location = new System.Drawing.Point(69, 52);
-      this.snapshotsTextBox.Name = "snapshotsTextBox";
-      this.snapshotsTextBox.Size = new System.Drawing.Size(175, 20);
-      this.snapshotsTextBox.TabIndex = 6;
-      this.snapshotsTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.snapshotsTextBox_Validating);
-      // 
-      // storeAlgorithmInEachSnapshotCheckBox
-      // 
-      this.storeAlgorithmInEachSnapshotCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.storeAlgorithmInEachSnapshotCheckBox.AutoSize = true;
-      this.storeAlgorithmInEachSnapshotCheckBox.Location = new System.Drawing.Point(340, 54);
-      this.storeAlgorithmInEachSnapshotCheckBox.Name = "storeAlgorithmInEachSnapshotCheckBox";
-      this.storeAlgorithmInEachSnapshotCheckBox.Size = new System.Drawing.Size(184, 17);
-      this.storeAlgorithmInEachSnapshotCheckBox.TabIndex = 7;
-      this.storeAlgorithmInEachSnapshotCheckBox.Text = "Store Algorithm in Each Snapshot";
-      this.storeAlgorithmInEachSnapshotCheckBox.UseVisualStyleBackColor = true;
-      this.storeAlgorithmInEachSnapshotCheckBox.CheckedChanged += new System.EventHandler(this.storeAlgorithmInEachSnapshotCheckBox_CheckedChanged);
-      // 
-      // tabControl
-      // 
-      this.tabControl.AllowDrop = true;
-      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.algorithmTabPage);
-      this.tabControl.Controls.Add(this.snapshotsTabPage);
-      this.tabControl.Controls.Add(this.runsTabPage);
-      this.tabControl.Location = new System.Drawing.Point(0, 78);
-      this.tabControl.Name = "tabControl";
-      this.tabControl.SelectedIndex = 0;
-      this.tabControl.Size = new System.Drawing.Size(546, 356);
-      this.tabControl.TabIndex = 8;
-      // 
-      // algorithmTabPage
-      // 
-      this.algorithmTabPage.AllowDrop = true;
-      this.algorithmTabPage.Controls.Add(this.algorithmViewHost);
-      this.algorithmTabPage.Controls.Add(this.openAlgorithmButton);
-      this.algorithmTabPage.Controls.Add(this.newAlgorithmButton);
-      this.algorithmTabPage.Location = new System.Drawing.Point(4, 22);
-      this.algorithmTabPage.Name = "algorithmTabPage";
-      this.algorithmTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.algorithmTabPage.Size = new System.Drawing.Size(538, 330);
-      this.algorithmTabPage.TabIndex = 1;
-      this.algorithmTabPage.Text = "Algorithm";
-      this.algorithmTabPage.UseVisualStyleBackColor = true;
-      this.algorithmTabPage.DragDrop += new System.Windows.Forms.DragEventHandler(this.algorithmTabPage_DragDrop);
-      this.algorithmTabPage.DragEnter += new System.Windows.Forms.DragEventHandler(this.algorithmTabPage_DragEnterOver);
-      this.algorithmTabPage.DragOver += new System.Windows.Forms.DragEventHandler(this.algorithmTabPage_DragEnterOver);
-      // 
-      // algorithmViewHost
-      // 
-      this.algorithmViewHost.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.algorithmViewHost.Caption = "View";
-      this.algorithmViewHost.Content = null;
-      this.algorithmViewHost.Enabled = false;
-      this.algorithmViewHost.Location = new System.Drawing.Point(6, 36);
-      this.algorithmViewHost.Name = "algorithmViewHost";
-      this.algorithmViewHost.ReadOnly = false;
-      this.algorithmViewHost.Size = new System.Drawing.Size(526, 288);
-      this.algorithmViewHost.TabIndex = 2;
-      this.algorithmViewHost.ViewsLabelVisible = true;
-      this.algorithmViewHost.ViewType = null;
-      // 
-      // openAlgorithmButton
-      // 
-      this.openAlgorithmButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Open;
-      this.openAlgorithmButton.Location = new System.Drawing.Point(36, 6);
-      this.openAlgorithmButton.Name = "openAlgorithmButton";
-      this.openAlgorithmButton.Size = new System.Drawing.Size(24, 24);
-      this.openAlgorithmButton.TabIndex = 1;
-      this.toolTip.SetToolTip(this.openAlgorithmButton, "Open Optimizer");
-      this.openAlgorithmButton.UseVisualStyleBackColor = true;
-      this.openAlgorithmButton.Click += new System.EventHandler(this.openAlgorithmButton_Click);
-      // 
-      // newAlgorithmButton
-      // 
-      this.newAlgorithmButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.NewDocument;
-      this.newAlgorithmButton.Location = new System.Drawing.Point(6, 6);
-      this.newAlgorithmButton.Name = "newAlgorithmButton";
-      this.newAlgorithmButton.Size = new System.Drawing.Size(24, 24);
-      this.newAlgorithmButton.TabIndex = 0;
-      this.toolTip.SetToolTip(this.newAlgorithmButton, "New Optimizer");
-      this.newAlgorithmButton.UseVisualStyleBackColor = true;
-      this.newAlgorithmButton.Click += new System.EventHandler(this.newAlgorithmButton_Click);
-      // 
-      // snapshotsTabPage
-      // 
-      this.snapshotsTabPage.Controls.Add(this.snapshotsView);
-      this.snapshotsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.snapshotsTabPage.Name = "snapshotsTabPage";
-      this.snapshotsTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.snapshotsTabPage.Size = new System.Drawing.Size(538, 330);
-      this.snapshotsTabPage.TabIndex = 2;
-      this.snapshotsTabPage.Text = "Snapshots";
-      this.snapshotsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // snapshotsView
-      // 
-      this.snapshotsView.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.snapshotsView.Caption = "RunCollection View";
-      this.snapshotsView.Content = null;
-      this.snapshotsView.Location = new System.Drawing.Point(6, 6);
-      this.snapshotsView.Name = "snapshotsView";
-      this.snapshotsView.ReadOnly = false;
-      this.snapshotsView.Size = new System.Drawing.Size(526, 317);
-      this.snapshotsView.TabIndex = 0;
-      // 
-      // runsTabPage
-      // 
-      this.runsTabPage.Controls.Add(this.runsView);
-      this.runsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.runsTabPage.Name = "runsTabPage";
-      this.runsTabPage.Size = new System.Drawing.Size(538, 330);
-      this.runsTabPage.TabIndex = 3;
-      this.runsTabPage.Text = "Runs";
-      this.runsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // runsView
-      // 
-      this.runsView.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.runsView.Caption = "RunCollection View";
-      this.runsView.Content = null;
-      this.runsView.Location = new System.Drawing.Point(6, 6);
-      this.runsView.Name = "runsView";
-      this.runsView.ReadOnly = false;
-      this.runsView.Size = new System.Drawing.Size(526, 317);
-      this.runsView.TabIndex = 1;
-      // 
-      // openFileDialog
-      // 
-      this.openFileDialog.DefaultExt = "hl";
-      this.openFileDialog.FileName = "Optimizer";
-      this.openFileDialog.Filter = "HeuristicLab Files|*.hl|All Files|*.*";
-      this.openFileDialog.Title = "Open Optimizer";
-      // 
-      // snapshotButton
-      // 
-      this.snapshotButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.snapshotButton.Location = new System.Drawing.Point(120, 440);
-      this.snapshotButton.Name = "snapshotButton";
-      this.snapshotButton.Size = new System.Drawing.Size(24, 24);
-      this.snapshotButton.TabIndex = 13;
-      this.snapshotButton.Text = "Snapshot";
-      this.toolTip.SetToolTip(this.snapshotButton, "Create Snapshot");
-      this.snapshotButton.UseVisualStyleBackColor = true;
-      this.snapshotButton.Click += new System.EventHandler(this.snapshotButton_Click);
-      // 
-      // sequenceButton
-      // 
-      this.sequenceButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.sequenceButton.Location = new System.Drawing.Point(250, 50);
-      this.sequenceButton.Name = "sequenceButton";
-      this.sequenceButton.Size = new System.Drawing.Size(75, 23);
-      this.sequenceButton.TabIndex = 16;
-      this.sequenceButton.Text = "Sequence...";
-      this.sequenceButton.UseVisualStyleBackColor = true;
-      this.sequenceButton.Click += new System.EventHandler(this.sequenceButton_Click);
-      // 
-      // TimeLimitRunView
-      // 
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-      this.Controls.Add(this.sequenceButton);
-      this.Controls.Add(this.snapshotButton);
-      this.Controls.Add(this.tabControl);
-      this.Controls.Add(this.timeLimitTextBox);
-      this.Controls.Add(this.timeLimitLabel);
-      this.Controls.Add(this.label1);
-      this.Controls.Add(this.snapshotsTextBox);
-      this.Controls.Add(this.storeAlgorithmInEachSnapshotCheckBox);
-      this.Name = "TimeLimitRunView";
-      this.Size = new System.Drawing.Size(549, 464);
-      this.Controls.SetChildIndex(this.storeAlgorithmInEachSnapshotCheckBox, 0);
-      this.Controls.SetChildIndex(this.snapshotsTextBox, 0);
-      this.Controls.SetChildIndex(this.label1, 0);
-      this.Controls.SetChildIndex(this.timeLimitLabel, 0);
-      this.Controls.SetChildIndex(this.timeLimitTextBox, 0);
-      this.Controls.SetChildIndex(this.tabControl, 0);
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.infoLabel, 0);
-      this.Controls.SetChildIndex(this.resetButton, 0);
-      this.Controls.SetChildIndex(this.stopButton, 0);
-      this.Controls.SetChildIndex(this.pauseButton, 0);
-      this.Controls.SetChildIndex(this.executionTimeLabel, 0);
-      this.Controls.SetChildIndex(this.executionTimeTextBox, 0);
-      this.Controls.SetChildIndex(this.startButton, 0);
-      this.Controls.SetChildIndex(this.snapshotButton, 0);
-      this.Controls.SetChildIndex(this.sequenceButton, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.tabControl.ResumeLayout(false);
-      this.algorithmTabPage.ResumeLayout(false);
-      this.snapshotsTabPage.ResumeLayout(false);
-      this.runsTabPage.ResumeLayout(false);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Label timeLimitLabel;
-    private System.Windows.Forms.TextBox timeLimitTextBox;
-    private System.Windows.Forms.Label label1;
-    private System.Windows.Forms.TextBox snapshotsTextBox;
-    private System.Windows.Forms.CheckBox storeAlgorithmInEachSnapshotCheckBox;
-    private MainForm.WindowsForms.DragOverTabControl tabControl;
-    private System.Windows.Forms.TabPage algorithmTabPage;
-    private MainForm.WindowsForms.ViewHost algorithmViewHost;
-    private System.Windows.Forms.Button openAlgorithmButton;
-    private System.Windows.Forms.Button newAlgorithmButton;
-    private System.Windows.Forms.TabPage snapshotsTabPage;
-    private RunCollectionView snapshotsView;
-    private System.Windows.Forms.TabPage runsTabPage;
-    private RunCollectionView runsView;
-    private System.Windows.Forms.OpenFileDialog openFileDialog;
-    private System.Windows.Forms.Button snapshotButton;
-    private System.Windows.Forms.Button sequenceButton;
-  }
-}
Index: branches/HivePerformance/sources/HeuristicLab.Optimization.Views/3.3/TimeLimitRunView.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Optimization.Views/3.3/TimeLimitRunView.cs	(revision 9434)
+++ 	(revision )
@@ -1,310 +1,0 @@
-﻿#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.ComponentModel;
-using System.Linq;
-using System.Text.RegularExpressions;
-using System.Windows.Forms;
-using HeuristicLab.Collections;
-using HeuristicLab.Common;
-using HeuristicLab.Common.Resources;
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-using HeuristicLab.MainForm.WindowsForms;
-using HeuristicLab.PluginInfrastructure;
-
-namespace HeuristicLab.Optimization.Views {
-  [View("TimeLimit Run View")]
-  [Content(typeof(TimeLimitRun), IsDefaultView = true)]
-  public partial class TimeLimitRunView : IOptimizerView {
-    protected TypeSelectorDialog algorithmTypeSelectorDialog;
-    protected virtual bool SuppressEvents { get; set; }
-
-    public new TimeLimitRun Content {
-      get { return (TimeLimitRun)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public TimeLimitRunView() {
-      InitializeComponent();
-      snapshotButton.Text = String.Empty;
-      snapshotButton.Image = VSImageLibrary.Camera;
-    }
-
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (algorithmTypeSelectorDialog != null) algorithmTypeSelectorDialog.Dispose();
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    protected override void DeregisterContentEvents() {
-      Content.PropertyChanged -= Content_PropertyChanged;
-      Content.SnapshotTimes.ItemsAdded -= Content_SnapshotTimes_Changed;
-      Content.SnapshotTimes.ItemsMoved -= Content_SnapshotTimes_Changed;
-      Content.SnapshotTimes.ItemsRemoved -= Content_SnapshotTimes_Changed;
-      Content.SnapshotTimes.ItemsReplaced -= Content_SnapshotTimes_Changed;
-      Content.SnapshotTimes.CollectionReset -= Content_SnapshotTimes_Changed;
-      base.DeregisterContentEvents();
-    }
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.PropertyChanged += Content_PropertyChanged;
-      Content.SnapshotTimes.ItemsAdded += Content_SnapshotTimes_Changed;
-      Content.SnapshotTimes.ItemsMoved += Content_SnapshotTimes_Changed;
-      Content.SnapshotTimes.ItemsRemoved += Content_SnapshotTimes_Changed;
-      Content.SnapshotTimes.ItemsReplaced += Content_SnapshotTimes_Changed;
-      Content.SnapshotTimes.CollectionReset += Content_SnapshotTimes_Changed;
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      SuppressEvents = true;
-      try {
-        if (Content == null) {
-          timeLimitTextBox.Text = TimeSpanHelper.FormatNatural(TimeSpan.FromSeconds(60));
-          snapshotsTextBox.Text = String.Empty;
-          storeAlgorithmInEachSnapshotCheckBox.Checked = false;
-          algorithmViewHost.Content = null;
-          snapshotsView.Content = null;
-          runsView.Content = null;
-        } else {
-          timeLimitTextBox.Text = TimeSpanHelper.FormatNatural(Content.MaximumExecutionTime);
-          snapshotsTextBox.Text = String.Join(" ; ", Content.SnapshotTimes.Select(x => TimeSpanHelper.FormatNatural(x, true)));
-          storeAlgorithmInEachSnapshotCheckBox.Checked = Content.StoreAlgorithmInEachSnapshot;
-          algorithmViewHost.Content = Content.Algorithm;
-          snapshotsView.Content = Content.Snapshots;
-          runsView.Content = Content.Runs;
-        }
-      } finally { SuppressEvents = false; }
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      timeLimitTextBox.Enabled = Content != null && !ReadOnly;
-      snapshotsTextBox.Enabled = Content != null && !ReadOnly;
-      storeAlgorithmInEachSnapshotCheckBox.Enabled = Content != null && !ReadOnly;
-      newAlgorithmButton.Enabled = Content != null && !ReadOnly;
-      openAlgorithmButton.Enabled = Content != null && !ReadOnly;
-      algorithmViewHost.Enabled = Content != null;
-      snapshotsView.Enabled = Content != null;
-      runsView.Enabled = Content != null;
-    }
-
-    protected override void SetEnabledStateOfExecutableButtons() {
-      base.SetEnabledStateOfExecutableButtons();
-      snapshotButton.Enabled = Content != null && Content.Algorithm != null && Content.ExecutionState == ExecutionState.Paused;
-    }
-
-    protected override void OnClosed(FormClosedEventArgs e) {
-      if ((Content != null) && (Content.ExecutionState == ExecutionState.Started)) {
-        //The content must be stopped if no other view showing the content is available
-        var optimizers = MainFormManager.MainForm.Views.OfType<IContentView>().Where(v => v != this).Select(v => v.Content).OfType<IAlgorithm>();
-        if (!optimizers.Contains(Content.Algorithm)) {
-          var nestedOptimizers = optimizers.SelectMany(opt => opt.NestedOptimizers);
-          if (!nestedOptimizers.Contains(Content)) Content.Stop();
-        }
-      }
-      base.OnClosed(e);
-    }
-
-    #region Event Handlers
-    #region Content events
-    private void Content_PropertyChanged(object sender, PropertyChangedEventArgs e) {
-      switch (e.PropertyName) {
-        case "MaximumExecutionTime":
-          SuppressEvents = true;
-          try {
-            timeLimitTextBox.Text = TimeSpanHelper.FormatNatural(Content.MaximumExecutionTime);
-          } finally { SuppressEvents = false; }
-          break;
-        case "SnapshotTimes":
-          SuppressEvents = true;
-          try {
-            if (Content.SnapshotTimes.Any())
-              snapshotsTextBox.Text = String.Join(" ; ", Content.SnapshotTimes.Select(x => TimeSpanHelper.FormatNatural(x, true)));
-            else snapshotsTextBox.Text = String.Empty;
-            Content.SnapshotTimes.ItemsAdded += Content_SnapshotTimes_Changed;
-            Content.SnapshotTimes.ItemsMoved += Content_SnapshotTimes_Changed;
-            Content.SnapshotTimes.ItemsRemoved += Content_SnapshotTimes_Changed;
-            Content.SnapshotTimes.ItemsReplaced += Content_SnapshotTimes_Changed;
-            Content.SnapshotTimes.CollectionReset += Content_SnapshotTimes_Changed;
-          } finally { SuppressEvents = false; }
-          break;
-        case "StoreAlgorithmInEachSnapshot":
-          SuppressEvents = true;
-          try {
-            storeAlgorithmInEachSnapshotCheckBox.Checked = Content.StoreAlgorithmInEachSnapshot;
-          } finally { SuppressEvents = false; }
-          break;
-        case "Algorithm":
-          SuppressEvents = true;
-          try {
-            algorithmViewHost.Content = Content.Algorithm;
-          } finally { SuppressEvents = false; }
-          break;
-        case "Snapshots":
-          SuppressEvents = true;
-          try {
-            snapshotsView.Content = Content.Snapshots;
-          } finally { SuppressEvents = false; }
-          break;
-        case "Runs":
-          SuppressEvents = true;
-          try {
-            runsView.Content = Content.Runs;
-          } finally { SuppressEvents = false; }
-          break;
-      }
-    }
-
-    private void Content_SnapshotTimes_Changed(object sender, EventArgs e) {
-      SuppressEvents = true;
-      try {
-        if (Content.SnapshotTimes.Any())
-          snapshotsTextBox.Text = string.Join(" ; ", Content.SnapshotTimes.Select(x => TimeSpanHelper.FormatNatural(x, true)));
-        else snapshotsTextBox.Text = String.Empty;
-      } finally { SuppressEvents = false; }
-    }
-    #endregion
-
-    #region Control events
-    private void timeLimitTextBox_Validating(object sender, CancelEventArgs e) {
-      if (SuppressEvents) return;
-      TimeSpan ts;
-      if (!TimeSpanHelper.TryGetFromNaturalFormat(timeLimitTextBox.Text, out ts)) {
-        e.Cancel = true;
-        errorProvider.SetError(timeLimitTextBox, "Please enter a valid time span, e.g. 60, 20s, 45 seconds, 3h, 1 hour, 4 d, 2 days");
-      } else {
-        Content.MaximumExecutionTime = ts;
-        e.Cancel = false;
-        errorProvider.SetError(timeLimitTextBox, null);
-      }
-    }
-
-    private void snapshotsTextBox_Validating(object sender, CancelEventArgs e) {
-      if (SuppressEvents) return;
-      e.Cancel = false;
-      errorProvider.SetError(snapshotsTextBox, null);
-
-      var snapshotTimes = new ObservableList<TimeSpan>();
-      var matches = Regex.Matches(snapshotsTextBox.Text, @"(\d+[ \t]*\w+)");
-      foreach (Match m in matches) {
-        TimeSpan value;
-        if (!TimeSpanHelper.TryGetFromNaturalFormat(m.Value, out value)) {
-          e.Cancel = !snapshotsTextBox.ReadOnly && snapshotsTextBox.Enabled; // don't cancel an operation that cannot be edited
-          errorProvider.SetError(snapshotsTextBox, "Error parsing " + m.Value + ", please provide a valid time span, e.g. 60, 20s, 45 seconds, 3h, 1 hour, 4 d, 2 days");
-          return;
-        } else {
-          snapshotTimes.Add(value);
-        }
-      }
-      Content.SnapshotTimes = snapshotTimes;
-    }
-
-    private void storeAlgorithmInEachSnapshotCheckBox_CheckedChanged(object sender, EventArgs e) {
-      if (SuppressEvents) return;
-      SuppressEvents = true;
-      try {
-        Content.StoreAlgorithmInEachSnapshot = storeAlgorithmInEachSnapshotCheckBox.Checked;
-      } finally { SuppressEvents = false; }
-    }
-
-    private void newAlgorithmButton_Click(object sender, EventArgs e) {
-      if (algorithmTypeSelectorDialog == null) {
-        algorithmTypeSelectorDialog = new TypeSelectorDialog { Caption = "Select Algorithm" };
-        algorithmTypeSelectorDialog.TypeSelector.Caption = "Available Algorithms";
-        algorithmTypeSelectorDialog.TypeSelector.Configure(typeof(IAlgorithm), false, true);
-      }
-      if (algorithmTypeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
-        try {
-          Content.Algorithm = (IAlgorithm)algorithmTypeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
-        } catch (Exception ex) {
-          ErrorHandling.ShowErrorDialog(this, ex);
-        }
-      }
-    }
-
-    private void openAlgorithmButton_Click(object sender, EventArgs e) {
-      openFileDialog.Title = "Open Algorithm";
-      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
-        newAlgorithmButton.Enabled = openAlgorithmButton.Enabled = false;
-        algorithmViewHost.Enabled = false;
-
-        ContentManager.LoadAsync(openFileDialog.FileName, delegate(IStorableContent content, Exception error) {
-          try {
-            if (error != null) throw error;
-            var algorithm = content as IAlgorithm;
-            if (algorithm == null)
-              MessageBox.Show(this, "The selected file does not contain an algorithm.", "Invalid File", MessageBoxButtons.OK, MessageBoxIcon.Error);
-            else
-              Content.Algorithm = algorithm;
-          } catch (Exception ex) {
-            ErrorHandling.ShowErrorDialog(this, ex);
-          } finally {
-            Invoke(new Action(delegate() {
-              algorithmViewHost.Enabled = true;
-              newAlgorithmButton.Enabled = openAlgorithmButton.Enabled = true;
-            }));
-          }
-        });
-      }
-    }
-
-    private void algorithmTabPage_DragEnterOver(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      if (!ReadOnly && (e.Data.GetData(Constants.DragDropDataFormat) is IAlgorithm)) {
-        if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link;  // ALT key
-        else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
-        else if (e.AllowedEffect.HasFlag(DragDropEffects.Copy)) e.Effect = DragDropEffects.Copy;
-        else if (e.AllowedEffect.HasFlag(DragDropEffects.Move)) e.Effect = DragDropEffects.Move;
-        else if (e.AllowedEffect.HasFlag(DragDropEffects.Link)) e.Effect = DragDropEffects.Link;
-      }
-    }
-
-    private void algorithmTabPage_DragDrop(object sender, DragEventArgs e) {
-      if (e.Effect != DragDropEffects.None) {
-        var algorithm = e.Data.GetData(Constants.DragDropDataFormat) as IAlgorithm;
-        if (e.Effect.HasFlag(DragDropEffects.Copy)) algorithm = (IAlgorithm)algorithm.Clone();
-        Content.Algorithm = algorithm;
-      }
-    }
-
-    private void snapshotButton_Click(object sender, EventArgs e) {
-      Content.Snapshot();
-    }
-
-    private void sequenceButton_Click(object sender, EventArgs e) {
-      using (var dialog = new DefineArithmeticTimeSpanProgressionDialog(TimeSpan.FromSeconds(1), Content.MaximumExecutionTime, TimeSpan.FromSeconds(1))) {
-        if (dialog.ShowDialog() == DialogResult.OK) {
-          if (dialog.Values.Any())
-            Content.SnapshotTimes = new ObservableList<TimeSpan>(dialog.Values);
-          else Content.SnapshotTimes = new ObservableList<TimeSpan>();
-        }
-      }
-    }
-    #endregion
-    #endregion
-  }
-}
Index: branches/HivePerformance/sources/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 9444)
@@ -123,5 +123,4 @@
     <Compile Include="MetaOptimizers\BatchRun.cs" />
     <Compile Include="MetaOptimizers\Experiment.cs" />
-    <Compile Include="MetaOptimizers\TimeLimitRun.cs" />
     <Compile Include="RunCollectionModification\RunCollectionRunRemover.cs" />
     <Compile Include="Plugin.cs" />
Index: branches/HivePerformance/sources/HeuristicLab.Optimization/3.3/MetaOptimizers/TimeLimitRun.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Optimization/3.3/MetaOptimizers/TimeLimitRun.cs	(revision 9434)
+++ 	(revision )
@@ -1,400 +1,0 @@
-﻿#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.ComponentModel;
-using System.Drawing;
-using System.Linq;
-using System.Threading.Tasks;
-using HeuristicLab.Collections;
-using HeuristicLab.Common;
-using HeuristicLab.Common.Resources;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Optimization {
-  /// <summary>
-  /// A run in which an algorithm is executed for a certain maximum time only.
-  /// </summary>
-  [Item("TimeLimit Run", "A run in which an optimizer is executed a certain maximum time.")]
-  [Creatable("Testing & Analysis")]
-  [StorableClass]
-  public sealed class TimeLimitRun : NamedItem, IOptimizer, IStorableContent, INotifyPropertyChanged {
-    public string Filename { get; set; }
-
-    #region ItemImage
-    public static new Image StaticItemImage {
-      get { return VSImageLibrary.Event; }
-    }
-    public override Image ItemImage {
-      get { return (Algorithm != null) ? Algorithm.ItemImage : VSImageLibrary.ExecutableStopped; }
-    }
-    #endregion
-
-    private bool pausedForSnapshot = false;
-    private bool pausedForTermination = false;
-
-    [Storable]
-    private TimeSpan maximumExecutionTime;
-    public TimeSpan MaximumExecutionTime {
-      get { return maximumExecutionTime; }
-      set {
-        if (maximumExecutionTime == value) return;
-        maximumExecutionTime = value;
-        OnPropertyChanged("MaximumExecutionTime");
-      }
-    }
-
-    [Storable]
-    private int snapshotTimesIndex;
-    [Storable]
-    private ObservableList<TimeSpan> snapshotTimes;
-    public ObservableList<TimeSpan> SnapshotTimes {
-      get { return snapshotTimes; }
-      set {
-        if (snapshotTimes == value) return;
-        snapshotTimes = value;
-        snapshotTimes.Sort();
-        FindNextSnapshotTimeIndex(ExecutionTime);
-        OnPropertyChanged("SnapshotTimes");
-      }
-    }
-
-    [Storable]
-    private bool storeAlgorithmInEachSnapshot;
-    [Storable]
-    public bool StoreAlgorithmInEachSnapshot {
-      get { return storeAlgorithmInEachSnapshot; }
-      set {
-        if (storeAlgorithmInEachSnapshot == value) return;
-        storeAlgorithmInEachSnapshot = value;
-        OnPropertyChanged("StoreAlgorithmInEachSnapshot");
-      }
-    }
-
-    [Storable]
-    private RunCollection snapshots;
-    public RunCollection Snapshots {
-      get { return snapshots; }
-      set {
-        if (snapshots == value) return;
-        snapshots = value;
-        OnPropertyChanged("Snapshots");
-      }
-    }
-
-    #region Inherited Properties
-    public ExecutionState ExecutionState {
-      get { return (Algorithm != null) ? Algorithm.ExecutionState : ExecutionState.Stopped; }
-    }
-
-    public TimeSpan ExecutionTime {
-      get { return (Algorithm != null) ? Algorithm.ExecutionTime : TimeSpan.FromSeconds(0); }
-    }
-
-    [Storable]
-    private IAlgorithm algorithm;
-    public IAlgorithm Algorithm {
-      get { return algorithm; }
-      set {
-        if (algorithm == value) return;
-        if (algorithm != null) DeregisterAlgorithmEvents();
-        algorithm = value;
-        if (algorithm != null) {
-          RegisterAlgorithmEvents();
-        }
-        OnPropertyChanged("Algorithm");
-        Prepare();
-      }
-    }
-
-    [Storable]
-    private RunCollection runs;
-    public RunCollection Runs {
-      get { return runs; }
-      private set {
-        if (value == null) throw new ArgumentNullException();
-        if (runs == value) return;
-        runs = value;
-        OnPropertyChanged("Runs");
-      }
-    }
-
-    public IEnumerable<IOptimizer> NestedOptimizers {
-      get {
-        if (Algorithm == null) yield break;
-        yield return Algorithm;
-        foreach (var opt in Algorithm.NestedOptimizers)
-          yield return opt;
-      }
-    }
-    #endregion
-
-    [StorableConstructor]
-    private TimeLimitRun(bool deserializing) : base(deserializing) { }
-    private TimeLimitRun(TimeLimitRun original, Cloner cloner)
-      : base(original, cloner) {
-      maximumExecutionTime = original.maximumExecutionTime;
-      snapshotTimes = new ObservableList<TimeSpan>(original.snapshotTimes);
-      snapshotTimesIndex = original.snapshotTimesIndex;
-      snapshots = cloner.Clone(original.snapshots);
-      storeAlgorithmInEachSnapshot = original.storeAlgorithmInEachSnapshot;
-      algorithm = cloner.Clone(original.algorithm);
-      runs = cloner.Clone(original.runs);
-
-      Initialize();
-    }
-    public TimeLimitRun()
-      : base() {
-      name = ItemName;
-      description = ItemDescription;
-      maximumExecutionTime = TimeSpan.FromMinutes(.5);
-      snapshotTimes = new ObservableList<TimeSpan>(new[] {
-          TimeSpan.FromSeconds(5),
-          TimeSpan.FromSeconds(10),
-          TimeSpan.FromSeconds(15) });
-      snapshotTimesIndex = 0;
-      snapshots = new RunCollection();
-      Runs = new RunCollection { OptimizerName = Name };
-      Initialize();
-    }
-    public TimeLimitRun(string name)
-      : base(name) {
-      description = ItemDescription;
-      maximumExecutionTime = TimeSpan.FromMinutes(.5);
-      snapshotTimes = new ObservableList<TimeSpan>(new[] {
-          TimeSpan.FromSeconds(5),
-          TimeSpan.FromSeconds(10),
-          TimeSpan.FromSeconds(15) });
-      snapshotTimesIndex = 0;
-      Runs = new RunCollection { OptimizerName = Name };
-      Initialize();
-    }
-    public TimeLimitRun(string name, string description)
-      : base(name, description) {
-      maximumExecutionTime = TimeSpan.FromMinutes(.5);
-      snapshotTimes = new ObservableList<TimeSpan>(new[] {
-          TimeSpan.FromSeconds(5),
-          TimeSpan.FromSeconds(10),
-          TimeSpan.FromSeconds(15) });
-      snapshotTimesIndex = 0;
-      Runs = new RunCollection { OptimizerName = Name };
-      Initialize();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      if (ExecutionState == ExecutionState.Started) throw new InvalidOperationException(string.Format("Clone not allowed in execution state \"{0}\".", ExecutionState));
-      return new TimeLimitRun(this, cloner);
-    }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      Initialize();
-    }
-
-    private void Initialize() {
-      if (algorithm != null) RegisterAlgorithmEvents();
-      snapshotTimes.ItemsAdded += snapshotTimes_Changed;
-      snapshotTimes.ItemsMoved += snapshotTimes_Changed;
-      snapshotTimes.ItemsRemoved += snapshotTimes_Changed;
-      snapshotTimes.ItemsReplaced += snapshotTimes_Changed;
-      snapshotTimes.CollectionReset += snapshotTimes_Changed;
-    }
-
-    private void snapshotTimes_Changed(object sender, CollectionItemsChangedEventArgs<IndexedItem<TimeSpan>> e) {
-      if (e.Items.Any()) snapshotTimes.Sort();
-      FindNextSnapshotTimeIndex(ExecutionTime);
-    }
-
-    public void Snapshot() {
-      if (Algorithm == null || Algorithm.ExecutionState != ExecutionState.Paused) throw new InvalidOperationException("Snapshot not allowed in execution states other than Paused");
-      Task.Factory.StartNew(MakeSnapshot);
-    }
-
-    public void Prepare() {
-      Prepare(false);
-    }
-    public void Prepare(bool clearRuns) {
-      Algorithm.Prepare(clearRuns);
-    }
-    public void Start() {
-      Algorithm.Start();
-    }
-    public void Pause() {
-      Algorithm.Pause();
-    }
-    public void Stop() {
-      Algorithm.Stop();
-    }
-
-    #region Events
-    protected override void OnNameChanged() {
-      base.OnNameChanged();
-      runs.OptimizerName = Name;
-    }
-
-    public event PropertyChangedEventHandler PropertyChanged;
-    private void OnPropertyChanged(string property) {
-      var handler = PropertyChanged;
-      if (handler != null) handler(this, new PropertyChangedEventArgs(property));
-    }
-
-    #region IExecutable Events
-    public event EventHandler ExecutionStateChanged;
-    private void OnExecutionStateChanged() {
-      var handler = ExecutionStateChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    public event EventHandler ExecutionTimeChanged;
-    private void OnExecutionTimeChanged() {
-      var handler = ExecutionTimeChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    public event EventHandler Prepared;
-    private void OnPrepared() {
-      var handler = Prepared;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    public event EventHandler Started;
-    private void OnStarted() {
-      var handler = Started;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    public event EventHandler Paused;
-    private void OnPaused() {
-      var handler = Paused;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    public event EventHandler Stopped;
-    private void OnStopped() {
-      var handler = Stopped;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    public event EventHandler<EventArgs<Exception>> ExceptionOccurred;
-    private void OnExceptionOccurred(Exception exception) {
-      var handler = ExceptionOccurred;
-      if (handler != null) handler(this, new EventArgs<Exception>(exception));
-    }
-    #endregion
-
-    #region Algorithm Events
-    private void RegisterAlgorithmEvents() {
-      algorithm.ExceptionOccurred += Algorithm_ExceptionOccurred;
-      algorithm.ExecutionTimeChanged += Algorithm_ExecutionTimeChanged;
-      algorithm.ExecutionStateChanged += Algorithm_ExecutionStateChanged;
-      algorithm.Paused += Algorithm_Paused;
-      algorithm.Prepared += Algorithm_Prepared;
-      algorithm.Started += Algorithm_Started;
-      algorithm.Stopped += Algorithm_Stopped;
-    }
-    private void DeregisterAlgorithmEvents() {
-      algorithm.ExceptionOccurred -= Algorithm_ExceptionOccurred;
-      algorithm.ExecutionTimeChanged -= Algorithm_ExecutionTimeChanged;
-      algorithm.ExecutionStateChanged -= Algorithm_ExecutionStateChanged;
-      algorithm.Paused -= Algorithm_Paused;
-      algorithm.Prepared -= Algorithm_Prepared;
-      algorithm.Started -= Algorithm_Started;
-      algorithm.Stopped -= Algorithm_Stopped;
-    }
-    private void Algorithm_ExceptionOccurred(object sender, EventArgs<Exception> e) {
-      OnExceptionOccurred(e.Value);
-    }
-    private void Algorithm_ExecutionTimeChanged(object sender, EventArgs e) {
-      if (snapshotTimesIndex < SnapshotTimes.Count && ExecutionTime >= SnapshotTimes[snapshotTimesIndex]
-        && !pausedForSnapshot) {
-        pausedForSnapshot = true;
-        Algorithm.Pause();
-      }
-      if (ExecutionTime >= MaximumExecutionTime && !pausedForTermination) {
-        pausedForTermination = true;
-        if (!pausedForSnapshot) Algorithm.Pause();
-      }
-      OnExecutionTimeChanged();
-    }
-    private void Algorithm_ExecutionStateChanged(object sender, EventArgs e) {
-      OnExecutionStateChanged();
-    }
-    private void Algorithm_Paused(object sender, EventArgs e) {
-      var action = pausedForTermination ? ExecutionState.Stopped : (pausedForSnapshot ? ExecutionState.Started : ExecutionState.Paused);
-      if (pausedForSnapshot || pausedForTermination) {
-        pausedForSnapshot = pausedForTermination = false;
-        MakeSnapshot();
-        FindNextSnapshotTimeIndex(ExecutionTime);
-      }
-      OnPaused();
-      if (action == ExecutionState.Started) Algorithm.Start();
-      else if (action == ExecutionState.Stopped) Algorithm.Stop();
-    }
-    private void Algorithm_Prepared(object sender, EventArgs e) {
-      snapshotTimesIndex = 0;
-      snapshots.Clear();
-      OnPrepared();
-    }
-    private void Algorithm_Started(object sender, EventArgs e) {
-      OnStarted();
-    }
-    private void Algorithm_Stopped(object sender, EventArgs e) {
-      var cloner = new Cloner();
-      var algRun = cloner.Clone(Algorithm.Runs.Last());
-      var clonedSnapshots = cloner.Clone(snapshots);
-      algRun.Results.Add("TimeLimitRunSnapshots", clonedSnapshots);
-      Runs.Add(algRun);
-      Algorithm.Runs.Clear();
-      OnStopped();
-    }
-    #endregion
-    #endregion
-
-    private void FindNextSnapshotTimeIndex(TimeSpan reference) {
-      var index = 0;
-      while (index < snapshotTimes.Count && snapshotTimes[index] <= reference) {
-        index++;
-      };
-      snapshotTimesIndex = index;
-    }
-
-    private void MakeSnapshot() {
-      string time = Math.Round(ExecutionTime.TotalSeconds, 1).ToString("0.0");
-      string runName = "Snapshot " + time + "s " + algorithm.Name;
-      Run run;
-      if (StoreAlgorithmInEachSnapshot) {
-        var temporarilySetStoreFlag = !Algorithm.StoreAlgorithmInEachRun;
-        if (temporarilySetStoreFlag) Algorithm.StoreAlgorithmInEachRun = true;
-        run = new Run(runName, Algorithm);
-        if (temporarilySetStoreFlag) Algorithm.StoreAlgorithmInEachRun = false;
-      } else {
-        // duplicate code of Run.Initialize - necessary, because Algorithm property doesn't have a setter
-        run = new Run() { Name = runName };
-        var parameters = new Dictionary<string, IItem>();
-        var results = new Dictionary<string, IItem>();
-        algorithm.CollectParameterValues(parameters);
-        algorithm.CollectResultValues(results);
-        var cloner = new Cloner();
-        foreach (var kvp in parameters.Select(x => new KeyValuePair<string, IItem>(x.Key, cloner.Clone(x.Value))).ToDictionary(x => x.Key, x => x.Value))
-          run.Parameters.Add(kvp);
-        foreach (var kvp in results.Select(x => new KeyValuePair<string, IItem>(x.Key, cloner.Clone(x.Value))).ToDictionary(x => x.Key, x => x.Value))
-          run.Results.Add(kvp);
-      }
-      snapshots.Add(run);
-    }
-  }
-}
Index: branches/HivePerformance/sources/HeuristicLab.ParallelEngine/3.3/ParallelEngine.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.ParallelEngine/3.3/ParallelEngine.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.ParallelEngine/3.3/ParallelEngine.cs	(revision 9444)
@@ -77,4 +77,5 @@
       parallelOptions = new ParallelOptions();
       parallelOptions.MaxDegreeOfParallelism = DegreeOfParallelism;
+      parallelOptions.CancellationToken = cancellationToken;
       Run(ExecutionStack);
     }
@@ -101,5 +102,5 @@
               Parallel.ForEach(stacks, parallelOptions, Run);
             }
-            catch (AggregateException ex) {
+            catch (OperationCanceledException ex) {
               OperationCollection remaining = new OperationCollection() { Parallel = true };
               for (int i = 0; i < stacks.Length; i++) {
Index: branches/HivePerformance/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberArray2XmlSerializerBase.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberArray2XmlSerializerBase.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Persistence/3.3/Default/Xml/Compact/NumberArray2XmlSerializerBase.cs	(revision 9444)
@@ -23,4 +23,5 @@
 using System.Collections;
 using System.Collections.Generic;
+using System.Linq;
 using System.Text;
 using HeuristicLab.Persistence.Auxiliary;
@@ -56,4 +57,6 @@
         lowerBounds[i] = a.GetLowerBound(i);
       }
+      if (lengths.Any(l => l == 0))
+        return new XmlString(sb.ToString());
       int[] positions = (int[])lowerBounds.Clone();
       while (positions[a.Rank - 1] < lengths[a.Rank - 1] + lowerBounds[a.Rank - 1]) {
@@ -102,5 +105,5 @@
           }
         }
-        if (positions[rank - 1] != lowerBounds[rank - 1] + lengths[rank - 1])
+        if (positions[rank - 1] != lowerBounds[rank - 1] + lengths[rank - 1] && lengths.All(l => l != 0))
           throw new PersistenceException("Insufficient number of elements while trying to fill number array.");
         return (T)(object)a;
Index: branches/HivePerformance/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/FeatureCorrelation/AbstractFeatureCorrelationView.Designer.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/FeatureCorrelation/AbstractFeatureCorrelationView.Designer.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/FeatureCorrelation/AbstractFeatureCorrelationView.Designer.cs	(revision 9444)
@@ -60,5 +60,5 @@
       this.progressPanel = new System.Windows.Forms.Panel();
       this.progressLabel = new System.Windows.Forms.Label();
-      this.dataView = new HeuristicLab.Problems.DataAnalysis.Views.EnhancedStringConvertibleMatrixView();
+      this.dataView = new HeuristicLab.Data.Views.EnhancedStringConvertibleMatrixView();
       ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
       ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
@@ -240,5 +240,5 @@
     protected System.Windows.Forms.Panel progressPanel;
     protected System.Windows.Forms.Label progressLabel;
-    protected HeuristicLab.Problems.DataAnalysis.Views.EnhancedStringConvertibleMatrixView dataView;
+    protected HeuristicLab.Data.Views.EnhancedStringConvertibleMatrixView dataView;
 
   }
Index: branches/HivePerformance/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/FeatureCorrelation/EnhancedStringConvertibleMatrixView.Designer.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/FeatureCorrelation/EnhancedStringConvertibleMatrixView.Designer.cs	(revision 9434)
+++ 	(revision )
@@ -1,93 +1,0 @@
-﻿#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
-
-namespace HeuristicLab.Problems.DataAnalysis.Views {
-  partial class EnhancedStringConvertibleMatrixView {
-    /// <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.showHideRows = new System.Windows.Forms.ToolStripMenuItem();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // rowsTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.rowsTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.rowsTextBox, 2);
-      //
-      // dataGridView
-      //
-      this.dataGridView.CellPainting += new System.Windows.Forms.DataGridViewCellPaintingEventHandler(dataGridView_CellPainting);
-      // 
-      // contextMenu
-      // 
-      this.contextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.showHideRows});
-      // 
-      // ShowHideRows
-      // 
-      this.showHideRows.Name = "ShowHideRows";
-      this.showHideRows.Size = new System.Drawing.Size(190, 22);
-      this.showHideRows.Text = "Show / Hide Rows";
-      this.showHideRows.Click += new System.EventHandler(this.ShowHideRows_Click);
-      // 
-      // ColoredStringConvertibleMatrixView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Name = "ColoredStringConvertibleMatrixView";
-      this.ShowRowsAndColumnsTextBox = false;
-      this.ShowStatisticalInformation = false;
-      this.Controls.SetChildIndex(this.statisticsTextBox, 0);
-      this.Controls.SetChildIndex(this.rowsLabel, 0);
-      this.Controls.SetChildIndex(this.columnsLabel, 0);
-      this.Controls.SetChildIndex(this.rowsTextBox, 0);
-      this.Controls.SetChildIndex(this.columnsTextBox, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-    #endregion
-
-    protected System.Windows.Forms.ToolStripMenuItem showHideRows;
-  }
-}
Index: branches/HivePerformance/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/FeatureCorrelation/EnhancedStringConvertibleMatrixView.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/FeatureCorrelation/EnhancedStringConvertibleMatrixView.cs	(revision 9434)
+++ 	(revision )
@@ -1,123 +1,0 @@
-﻿#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.Drawing;
-using System.Linq;
-using System.Windows.Forms;
-using HeuristicLab.Common;
-using HeuristicLab.Data;
-using HeuristicLab.Data.Views;
-
-namespace HeuristicLab.Problems.DataAnalysis.Views {
-  public partial class EnhancedStringConvertibleMatrixView : StringConvertibleMatrixView {
-    private bool[] columnVisibility, rowVisibility;
-
-    // sets the visibility of its columns for the next time it is updated
-    public IEnumerable<bool> ColumnVisibility {
-      get { return columnVisibility; }
-      set { columnVisibility = value.ToArray(); }
-    }
-    // sets the visibility of its rows for the next time it is updated
-    public IEnumerable<bool> RowVisibility {
-      get { return rowVisibility; }
-      set { rowVisibility = value.ToArray(); }
-    }
-
-    public double Maximum { get; set; }
-    public double Minimum { get; set; }
-
-    public new DoubleMatrix Content {
-      get { return (DoubleMatrix)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public EnhancedStringConvertibleMatrixView() {
-      InitializeComponent();
-    }
-
-    public void ResetVisibility() {
-      columnVisibility = null;
-      rowVisibility = null;
-    }
-
-    protected override void UpdateColumnHeaders() {
-      base.UpdateColumnHeaders();
-      if (columnVisibility != null && Content != null && columnVisibility.Count() == dataGridView.ColumnCount) {
-        int i = 0;
-        foreach (var visibility in columnVisibility) {
-          dataGridView.Columns[i].Visible = visibility;
-          i++;
-        }
-      }
-    }
-    protected override void UpdateRowHeaders() {
-      if (rowVisibility == null) return;
-      if (Content == null) return;
-      if (rowVisibility.Count() != dataGridView.RowCount) return;
-
-      for (int index = 0; index < dataGridView.RowCount; index++) {
-        dataGridView.Rows[index].HeaderCell.Value = Content.RowNames.ElementAt(virtualRowIndices[index]);
-        dataGridView.Rows[index].Visible = rowVisibility.ElementAt(virtualRowIndices[index]);
-      }
-    }
-
-    protected virtual void ShowHideRows_Click(object sender, EventArgs e) {
-      var dialog = new StringConvertibleMatrixRowVisibilityDialog(this.dataGridView.Rows.Cast<DataGridViewRow>());
-      dialog.ShowDialog();
-      RowVisibility = dialog.Visibility;
-    }
-
-    protected override void ShowHideColumns_Click(object sender, EventArgs e) {
-      var dialog = new StringConvertibleMatrixColumnVisibilityDialog(this.dataGridView.Columns.Cast<DataGridViewColumn>());
-      dialog.ShowDialog();
-      ColumnVisibility = dialog.Visibility;
-    }
-
-    protected void dataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) {
-      if (Content == null) return;
-      if (e.RowIndex < 0) return;
-      if (e.ColumnIndex < 0) return;
-      if (e.State.HasFlag(DataGridViewElementStates.Selected)) return;
-      if (!e.PaintParts.HasFlag(DataGridViewPaintParts.Background)) return;
-
-      int rowIndex = virtualRowIndices[e.RowIndex];
-      Color backColor = GetDataPointColor(Content[rowIndex, e.ColumnIndex], Minimum, Maximum);
-      using (Brush backColorBrush = new SolidBrush(backColor)) {
-        e.Graphics.FillRectangle(backColorBrush, e.CellBounds);
-      }
-      e.PaintContent(e.CellBounds);
-      e.Handled = true;
-    }
-
-    protected virtual Color GetDataPointColor(double value, double min, double max) {
-      if (double.IsNaN(value)) {
-        return Color.DarkGray;
-      }
-      IList<Color> colors = ColorGradient.Colors;
-      int index = (int)((colors.Count - 1) * (value - min) / (max - min));
-      if (index >= colors.Count) index = colors.Count - 1;
-      if (index < 0) index = 0;
-      return colors[index];
-    }
-  }
-}
Index: branches/HivePerformance/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj	(revision 9444)
@@ -161,10 +161,4 @@
     <Compile Include="DataAnalysisSolutionEvaluationView.Designer.cs">
       <DependentUpon>DataAnalysisSolutionEvaluationView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="FeatureCorrelation\EnhancedStringConvertibleMatrixView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="FeatureCorrelation\EnhancedStringConvertibleMatrixView.Designer.cs">
-      <DependentUpon>EnhancedStringConvertibleMatrixView.cs</DependentUpon>
     </Compile>
     <Compile Include="FeatureCorrelation\FeatureCorrelationCalculator.cs" />
Index: branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/AckleyEvaluator.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/AckleyEvaluator.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/AckleyEvaluator.cs	(revision 9444)
@@ -109,5 +109,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Ackley function at the given point.</returns>
-    public override double EvaluateFunction(RealVector point) {
+    public override double Evaluate(RealVector point) {
       return Apply(point);
     }
Index: branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BealeEvaluator.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BealeEvaluator.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BealeEvaluator.cs	(revision 9444)
@@ -98,5 +98,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Beale function at the given point.</returns>
-    public override double EvaluateFunction(RealVector point) {
+    public override double Evaluate(RealVector point) {
       return Apply(point);
     }
Index: branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BoothEvaluator.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BoothEvaluator.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BoothEvaluator.cs	(revision 9444)
@@ -94,5 +94,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Booth function at the given point.</returns>
-    public override double EvaluateFunction(RealVector point) {
+    public override double Evaluate(RealVector point) {
       return Apply(point);
     }
Index: branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/GriewankEvaluator.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/GriewankEvaluator.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/GriewankEvaluator.cs	(revision 9444)
@@ -133,5 +133,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Griewank function at the given point.</returns>
-    public override double EvaluateFunction(RealVector point) {
+    public override double Evaluate(RealVector point) {
       if (point.Length > 100)
         return Apply(point);
Index: branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/LevyEvaluator.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/LevyEvaluator.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/LevyEvaluator.cs	(revision 9444)
@@ -111,5 +111,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Levy function at the given point.</returns>
-    public override double EvaluateFunction(RealVector point) {
+    public override double Evaluate(RealVector point) {
       return Apply(point);
     }
Index: branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MatyasEvaluator.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MatyasEvaluator.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MatyasEvaluator.cs	(revision 9444)
@@ -93,5 +93,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Matyas function at the given point.</returns>
-    public override double EvaluateFunction(RealVector point) {
+    public override double Evaluate(RealVector point) {
       return Apply(point);
     }
Index: branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MultinormalEvaluator.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MultinormalEvaluator.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/MultinormalEvaluator.cs	(revision 9444)
@@ -101,5 +101,5 @@
 
     private double FastFindOptimum(out RealVector bestSolution) {
-      var optima = centers.Select((c, i) => new { f = EvaluateFunction(c), i }).OrderBy(v => v.f).ToList();
+      var optima = centers.Select((c, i) => new { f = Evaluate(c), i }).OrderBy(v => v.f).ToList();
       if (optima.Count == 0) {
         bestSolution = new RealVector();
@@ -161,5 +161,5 @@
     }
 
-    public override double EvaluateFunction(RealVector point) {
+    public override double Evaluate(RealVector point) {
       double value = 0;
       if (centers.Count == 0) {
Index: branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RandomEvaluator.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RandomEvaluator.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RandomEvaluator.cs	(revision 9444)
@@ -86,5 +86,5 @@
     }
 
-    public override double EvaluateFunction(RealVector point) {
+    public override double Evaluate(RealVector point) {
       return ExecutionContext == null ? new System.Random().NextDouble() : RandomParameter.ActualValue.NextDouble();
     }
Index: branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RastriginEvaluator.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RastriginEvaluator.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RastriginEvaluator.cs	(revision 9444)
@@ -119,5 +119,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Rastrigin function at the given point.</returns>
-    public override double EvaluateFunction(RealVector point) {
+    public override double Evaluate(RealVector point) {
       return Apply(point, A.Value);
     }
Index: branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RosenbrockEvaluator.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RosenbrockEvaluator.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RosenbrockEvaluator.cs	(revision 9444)
@@ -105,5 +105,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Rosenbrock function at the given point.</returns>
-    public override double EvaluateFunction(RealVector point) {
+    public override double Evaluate(RealVector point) {
       return Apply(point);
     }
Index: branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SchwefelEvaluator.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SchwefelEvaluator.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SchwefelEvaluator.cs	(revision 9444)
@@ -96,5 +96,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Schwefel function at the given point.</returns>
-    public override double EvaluateFunction(RealVector point) {
+    public override double Evaluate(RealVector point) {
       return Apply(point);
     }
Index: branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SingleObjectiveTestFunctionProblemEvaluator.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SingleObjectiveTestFunctionProblemEvaluator.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SingleObjectiveTestFunctionProblemEvaluator.cs	(revision 9444)
@@ -84,5 +84,5 @@
     public override IOperation Apply() {
       RealVector point = PointParameter.ActualValue;
-      double quality = EvaluateFunction(point);
+      double quality = Evaluate(point);
       QualityParameter.ActualValue = new DoubleValue(quality);
       return base.Apply();
@@ -90,5 +90,5 @@
 
     public virtual double Evaluate2D(double x, double y) {
-      return EvaluateFunction(new RealVector(new double[] { x, y }));
+      return Evaluate(new RealVector(new double[] { x, y }));
     }
 
@@ -98,5 +98,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the function at the given point.</returns>
-    public abstract double EvaluateFunction(RealVector point);
+    public abstract double Evaluate(RealVector point);
 
     /// <summary>
Index: branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SphereEvaluator.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SphereEvaluator.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SphereEvaluator.cs	(revision 9444)
@@ -132,5 +132,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Sphere function at the given point.</returns>
-    public override double EvaluateFunction(RealVector point) {
+    public override double Evaluate(RealVector point) {
       return Apply(point, C.Value, Alpha.Value);
     }
Index: branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SumSquaresEvaluator.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SumSquaresEvaluator.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/SumSquaresEvaluator.cs	(revision 9444)
@@ -96,5 +96,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Sum Squares function at the given point.</returns>
-    public override double EvaluateFunction(RealVector point) {
+    public override double Evaluate(RealVector point) {
       return Apply(point);
     }
Index: branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/ZakharovEvaluator.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/ZakharovEvaluator.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/ZakharovEvaluator.cs	(revision 9444)
@@ -100,5 +100,5 @@
     /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
     /// <returns>The result value of the Zakharov function at the given point.</returns>
-    public override double EvaluateFunction(RealVector point) {
+    public override double Evaluate(RealVector point) {
       return Apply(point);
     }
Index: branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Improvers/SingleObjectiveTestFunctionImprovementOperator.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Improvers/SingleObjectiveTestFunctionImprovementOperator.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Improvers/SingleObjectiveTestFunctionImprovementOperator.cs	(revision 9444)
@@ -125,5 +125,7 @@
         throw new ArgumentException("Cannot improve solution because it has the wrong type.");
 
-      double bestSolQuality = Evaluator.EvaluateFunction(bestSol);
+      var evaluator = Evaluator;
+
+      double bestSolQuality = evaluator.Evaluate(bestSol);
 
       // create perturbed solutions
@@ -139,5 +141,5 @@
       for (int i = 0; i < ImprovementAttempts.Value; i++) {
         // order according to their objective function value
-        Array.Sort(simplex, (x, y) => Evaluator.EvaluateFunction(x).CompareTo(Evaluator.EvaluateFunction(y)));
+        Array.Sort(simplex, (x, y) => evaluator.Evaluate(x).CompareTo(evaluator.Evaluate(y)));
 
         // calculate centroid
@@ -153,30 +155,30 @@
         for (int j = 0; j < reflectionPoint.Length; j++)
           reflectionPoint[j] = centroid[j] + Alpha.Value * (centroid[j] - simplex[simplex.Length - 1][j]);
-        double reflectionPointQuality = Evaluator.EvaluateFunction(reflectionPoint);
-        if (Evaluator.EvaluateFunction(simplex[0]) <= reflectionPointQuality
-            && reflectionPointQuality < Evaluator.EvaluateFunction(simplex[simplex.Length - 2]))
+        double reflectionPointQuality = evaluator.Evaluate(reflectionPoint);
+        if (evaluator.Evaluate(simplex[0]) <= reflectionPointQuality
+            && reflectionPointQuality < evaluator.Evaluate(simplex[simplex.Length - 2]))
           simplex[simplex.Length - 1] = reflectionPoint;
 
         // expansion
-        if (reflectionPointQuality < Evaluator.EvaluateFunction(simplex[0])) {
+        if (reflectionPointQuality < evaluator.Evaluate(simplex[0])) {
           RealVector expansionPoint = new RealVector(bestSol.Length);
           for (int j = 0; j < expansionPoint.Length; j++)
             expansionPoint[j] = centroid[j] + Beta.Value * (reflectionPoint[j] - centroid[j]);
-          simplex[simplex.Length - 1] = Evaluator.EvaluateFunction(expansionPoint) < reflectionPointQuality ? expansionPoint : reflectionPoint;
+          simplex[simplex.Length - 1] = evaluator.Evaluate(expansionPoint) < reflectionPointQuality ? expansionPoint : reflectionPoint;
         }
 
         // contraction
-        if (Evaluator.EvaluateFunction(simplex[simplex.Length - 2]) <= reflectionPointQuality
-            && reflectionPointQuality < Evaluator.EvaluateFunction(simplex[simplex.Length - 1])) {
+        if (evaluator.Evaluate(simplex[simplex.Length - 2]) <= reflectionPointQuality
+            && reflectionPointQuality < evaluator.Evaluate(simplex[simplex.Length - 1])) {
           RealVector outsideContractionPoint = new RealVector(bestSol.Length);
           for (int j = 0; j < outsideContractionPoint.Length; j++)
             outsideContractionPoint[j] = centroid[j] + Gamma.Value * (reflectionPoint[j] - centroid[j]);
-          if (Evaluator.EvaluateFunction(outsideContractionPoint) <= reflectionPointQuality) {
+          if (evaluator.Evaluate(outsideContractionPoint) <= reflectionPointQuality) {
             simplex[simplex.Length - 1] = outsideContractionPoint;
-            if (Evaluator.EvaluateFunction(reflectionPoint) >= Evaluator.EvaluateFunction(simplex[simplex.Length - 1])) {
+            if (evaluator.Evaluate(reflectionPoint) >= evaluator.Evaluate(simplex[simplex.Length - 1])) {
               RealVector insideContractionPoint = new RealVector(bestSol.Length);
               for (int j = 0; j < insideContractionPoint.Length; j++)
                 insideContractionPoint[j] = centroid[j] - Gamma.Value * (reflectionPoint[j] - centroid[j]);
-              if (Evaluator.EvaluateFunction(insideContractionPoint) < Evaluator.EvaluateFunction(simplex[simplex.Length - 1])) simplex[simplex.Length - 1] = insideContractionPoint;
+              if (evaluator.Evaluate(insideContractionPoint) < evaluator.Evaluate(simplex[simplex.Length - 1])) simplex[simplex.Length - 1] = insideContractionPoint;
             }
           }
Index: branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Interfaces/ISingleObjectiveTestFunctionProblemEvaluator.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Interfaces/ISingleObjectiveTestFunctionProblemEvaluator.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/Interfaces/ISingleObjectiveTestFunctionProblemEvaluator.cs	(revision 9444)
@@ -39,5 +39,5 @@
 
     double Evaluate2D(double x, double y);
-    double EvaluateFunction(RealVector point);
+    double Evaluate(RealVector point);
     RealVector GetBestKnownSolution(int dimension);
   }
Index: branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/MultinormalAdditiveMoveEvaluator.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/MultinormalAdditiveMoveEvaluator.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.TestFunctions/3.3/MoveEvaluators/MultinormalAdditiveMoveEvaluator.cs	(revision 9444)
@@ -55,5 +55,5 @@
       var eval = EvaluatorParameter.ActualValue as MultinormalEvaluator;
       if (eval != null)
-        return eval.EvaluateFunction(wrapper);
+        return eval.Evaluate(wrapper);
       throw new InvalidOperationException("evaluator is not a multinormal evaluator");
     }
Index: branches/HivePerformance/sources/HeuristicLab.Problems.TravelingSalesman/3.3/SimilarityCalculators/TSPSimilarityCalculator.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Problems.TravelingSalesman/3.3/SimilarityCalculators/TSPSimilarityCalculator.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Problems.TravelingSalesman/3.3/SimilarityCalculators/TSPSimilarityCalculator.cs	(revision 9444)
@@ -73,11 +73,11 @@
 
     private static double CalculateRelativeDirected(Permutation left, Permutation right) {
-      int[] edges = new int[right.Length];
-      for (int i = 0; i < right.Length; i++)
-        edges[right[i]] = right[(i + 1) % right.Length];
+      int[] edgesR = CalculateEdgesVector(right);
+      int[] edgesL = CalculateEdgesVector(left);
 
       double similarity = 0.0;
-      for (int i = 0; i < left.Length; i++)
-        if (left[(i + 1) % left.Length] == edges[left[i]]) similarity++;
+      for (int i = 0; i < left.Length; i++) {
+        if (edgesL[i] == edgesR[i]) similarity++;
+      }
 
       return similarity / left.Length;
@@ -85,18 +85,23 @@
 
     private static double CalculateRelativeUndirected(Permutation left, Permutation right) {
-      int[,] edges = new int[right.Length, 2];
-      for (int i = 0; i < right.Length; i++) {
-        edges[right[i], 0] = right[(i + 1) % right.Length];
-        edges[right[i], 1] = right[(i - 1 + right.Length) % right.Length];
-      }
+      int[] edgesR = CalculateEdgesVector(right);
+      int[] edgesL = CalculateEdgesVector(left);
 
       double similarity = 0.0;
       for (int i = 0; i < left.Length; i++) {
-        int targetCity = left[(i + 1) % left.Length];
-        if (targetCity == edges[left[i], 0] || targetCity == edges[left[i], 1])
+        if ((edgesL[i] == edgesR[i]) || (edgesL[edgesR[i]] == i))
           similarity++;
       }
 
       return similarity / left.Length;
+    }
+
+    private static int[] CalculateEdgesVector(Permutation permutation) {
+      // transform path representation into adjacency representation
+      int[] edgesVector = new int[permutation.Length];
+      for (int i = 0; i < permutation.Length - 1; i++)
+        edgesVector[permutation[i]] = permutation[i + 1];
+      edgesVector[permutation[permutation.Length - 1]] = permutation[0];
+      return edgesVector;
     }
 
Index: branches/HivePerformance/sources/HeuristicLab.Services.Hive.Web/Hive-3.3/Web.config
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Services.Hive.Web/Hive-3.3/Web.config	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Services.Hive.Web/Hive-3.3/Web.config	(revision 9444)
@@ -59,5 +59,5 @@
     <bindings>
       <wsHttpBinding>
-        <binding name="WSHttpBinding_IHiveService" receiveTimeout="00:15:00" sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
+        <binding name="WSHttpBinding_IHiveService" messageEncoding="Mtom" receiveTimeout="00:15:00" sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
           <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
           <security mode="Message">
Index: branches/HivePerformance/sources/HeuristicLab.Services.Hive/3.3/Convert.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Services.Hive/3.3/Convert.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Services.Hive/3.3/Convert.cs	(revision 9444)
@@ -67,5 +67,4 @@
         target.LastHeartbeat = source.LastHeartbeat;
         target.State = Convert.ToEntity(source.State);
-        if (target.StateLogs == null) target.StateLogs = new EntitySet<DB.StateLog>();
         foreach (DT.StateLog sl in source.StateLog.Where(x => x.Id == Guid.Empty)) {
           target.StateLogs.Add(Convert.ToEntity(sl));
Index: branches/HivePerformance/sources/HeuristicLab.Services.Hive/3.3/HiveDao.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Services.Hive/3.3/HiveDao.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Services.Hive/3.3/HiveDao.cs	(revision 9444)
@@ -22,4 +22,5 @@
 using System;
 using System.Collections.Generic;
+using System.Data.Linq;
 using System.Linq;
 using System.Linq.Expressions;
@@ -120,4 +121,8 @@
     public void UpdateTaskAndStateLogs(DT.Task dto) {
       using (var db = CreateContext()) {
+        DataLoadOptions dlo = new DataLoadOptions();
+        dlo.LoadWith<Task>(x => x.StateLogs);
+        db.LoadOptions = dlo;
+
         var entity = db.Tasks.FirstOrDefault(x => x.TaskId == dto.Id);
         if (entity == null) db.Tasks.InsertOnSubmit(DT.Convert.ToEntity(dto));
@@ -205,9 +210,4 @@
           DateTime = DateTime.Now
         });
-        db.SubmitChanges();
-      }
-
-      using (var db = CreateContext()) {
-        db.DeferredLoadingEnabled = false;
 
         var task = db.Tasks.SingleOrDefault(x => x.TaskId == taskId);
Index: branches/HivePerformance/sources/HeuristicLab.Services.Hive/3.3/HiveOperationContext.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Services.Hive/3.3/HiveOperationContext.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Services.Hive/3.3/HiveOperationContext.cs	(revision 9444)
@@ -44,5 +44,4 @@
     }
 
-
     public void Attach(OperationContext owner) {
     }
Index: branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/Grammars.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/Grammars.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/Grammars.cs	(revision 9444)
@@ -20,197 +20,10 @@
 #endregion
 
-using System.Collections.Generic;
 using System.Linq;
-using HeuristicLab.Common;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Problems.DataAnalysis.Symbolic;
 
 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding_34.Tests {
   public static class Grammars {
-    [StorableClass]
-    private class Addition : Symbol {
-      private const int minimumArity = 1;
-      private const int maximumArity = byte.MaxValue;
-
-      public override int MinimumArity {
-        get { return minimumArity; }
-      }
-      public override int MaximumArity {
-        get { return maximumArity; }
-      }
-
-      [StorableConstructor]
-      protected Addition(bool deserializing) : base(deserializing) { }
-      protected Addition(Addition original, Cloner cloner) : base(original, cloner) { }
-      public Addition() : base("Addition", "") { }
-      public override IDeepCloneable Clone(Cloner cloner) {
-        return new Addition(this, cloner);
-      }
-    }
-
-    [StorableClass]
-    private class Subtraction : Symbol {
-      private const int minimumArity = 1;
-      private const int maximumArity = byte.MaxValue;
-
-      public override int MinimumArity {
-        get { return minimumArity; }
-      }
-      public override int MaximumArity {
-        get { return maximumArity; }
-      }
-
-      [StorableConstructor]
-      protected Subtraction(bool deserializing) : base(deserializing) { }
-      protected Subtraction(Subtraction original, Cloner cloner) : base(original, cloner) { }
-      public Subtraction() : base("Subtraction", "") { }
-      public override IDeepCloneable Clone(Cloner cloner) {
-        return new Subtraction(this, cloner);
-      }
-    }
-
-    [StorableClass]
-    private class Multiplication : Symbol {
-      private const int minimumArity = 1;
-      private const int maximumArity = byte.MaxValue;
-
-      public override int MinimumArity {
-        get { return minimumArity; }
-      }
-      public override int MaximumArity {
-        get { return maximumArity; }
-      }
-
-      [StorableConstructor]
-      protected Multiplication(bool deserializing) : base(deserializing) { }
-      protected Multiplication(Multiplication original, Cloner cloner) : base(original, cloner) { }
-      public Multiplication() : base("Multiplication", "") { }
-      public override IDeepCloneable Clone(Cloner cloner) {
-        return new Multiplication(this, cloner);
-      }
-    }
-
-    [StorableClass]
-    private class Division : Symbol {
-      private const int minimumArity = 1;
-      private const int maximumArity = byte.MaxValue;
-
-      public override int MinimumArity {
-        get { return minimumArity; }
-      }
-      public override int MaximumArity {
-        get { return maximumArity; }
-      }
-
-      [StorableConstructor]
-      protected Division(bool deserializing) : base(deserializing) { }
-      protected Division(Division original, Cloner cloner) : base(original, cloner) { }
-      public Division() : base("Division", "") { }
-      public override IDeepCloneable Clone(Cloner cloner) {
-        return new Division(this, cloner);
-      }
-    }
-
-    [StorableClass]
-    private class Terminal : Symbol {
-      private const int minimumArity = 0;
-      private const int maximumArity = 0;
-
-      public override int MinimumArity {
-        get { return minimumArity; }
-      }
-      public override int MaximumArity {
-        get { return maximumArity; }
-      }
-
-      [StorableConstructor]
-      protected Terminal(bool deserializing) : base(deserializing) { }
-      protected Terminal(Terminal original, Cloner cloner) : base(original, cloner) { }
-      public Terminal() : base("Terminal", "") { }
-      public override IDeepCloneable Clone(Cloner cloner) {
-        return new Terminal(this, cloner);
-      }
-
-      public override ISymbolicExpressionTreeNode CreateTreeNode() {
-        return new TerminalNode(this);
-      }
-    }
-
-    [StorableClass]
-    private class TerminalNode : SymbolicExpressionTreeTerminalNode {
-      public override bool HasLocalParameters { get { return true; } }
-      private double value;
-      protected TerminalNode(TerminalNode original, Cloner cloner)
-        : base(original, cloner) {
-        this.value = original.value;
-      }
-      [StorableConstructor]
-      protected TerminalNode(bool deserializing) : base(deserializing) { }
-      public TerminalNode(Terminal symbol) : base(symbol) { }
-
-      public override IDeepCloneable Clone(Cloner cloner) {
-        return new TerminalNode(this, cloner);
-      }
-      public override void ResetLocalParameters(Core.IRandom random) {
-        base.ResetLocalParameters(random);
-        value = random.NextDouble();
-      }
-      public override void ShakeLocalParameters(Core.IRandom random, double shakingFactor) {
-        base.ShakeLocalParameters(random, shakingFactor);
-        value = random.NextDouble();
-      }
-      public override string ToString() {
-        return value.ToString("E4");
-      }
-    }
-
-    [StorableClass]
-    private class SimpleArithmeticGrammar : SymbolicExpressionGrammar {
-      [StorableConstructor]
-      protected SimpleArithmeticGrammar(bool deserializing) : base(deserializing) { }
-      protected SimpleArithmeticGrammar(SimpleArithmeticGrammar original, Cloner cloner) : base(original, cloner) { }
-      public SimpleArithmeticGrammar()
-        : base("Grammar for unit tests", "") {
-        Initialize();
-      }
-
-      public override IDeepCloneable Clone(Cloner cloner) {
-        return new SimpleArithmeticGrammar(this, cloner);
-      }
-
-      private void Initialize() {
-        var add = new Addition();
-        var sub = new Subtraction();
-        var mul = new Multiplication();
-        var div = new Division();
-        div.InitialFrequency = 0.0; // disable division symbol
-        var terminal = new Terminal();
-
-        var allSymbols = new List<Symbol>() { add, sub, mul, div, terminal };
-        var functionSymbols = new List<Symbol>() { add, sub, mul, div };
-        foreach (var symb in allSymbols)
-          AddSymbol(symb);
-
-        foreach (var funSymb in functionSymbols) {
-          SetSubtreeCount(funSymb, 1, 3);
-        }
-        SetSubtreeCount(terminal, 0, 0);
-
-        // allow each symbol as child of the start symbol
-        foreach (var symb in allSymbols) {
-          AddAllowedChildSymbol(StartSymbol, symb);
-          AddAllowedChildSymbol(DefunSymbol, symb);
-        }
-
-        // allow each symbol as child of every other symbol (except for terminals that have maxSubtreeCount == 0)
-        foreach (var parent in functionSymbols) {
-          foreach (var child in allSymbols) {
-            AddAllowedChildSymbol(parent, child);
-          }
-        }
-      }
-    }
-
     public static ISymbolicExpressionGrammar CreateSimpleArithmeticGrammar() {
       var g = new TypeCoherentExpressionGrammar();
Index: branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/AckleyEvaluatorTest.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/AckleyEvaluatorTest.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/AckleyEvaluatorTest.cs	(revision 9444)
@@ -92,5 +92,5 @@
       for (int dimension = target.MinimumProblemSize; dimension <= System.Math.Min(10, target.MaximumProblemSize); dimension++) {
         point = target.GetBestKnownSolution(dimension);
-        actual = target.EvaluateFunction(point);
+        actual = target.Evaluate(point);
         Assert.AreEqual(expected, actual);
       }
Index: branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/BealeEvaluatorTest.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/BealeEvaluatorTest.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/BealeEvaluatorTest.cs	(revision 9444)
@@ -92,5 +92,5 @@
       for (int dimension = target.MinimumProblemSize; dimension <= System.Math.Min(10, target.MaximumProblemSize); dimension++) {
         point = target.GetBestKnownSolution(dimension);
-        actual = target.EvaluateFunction(point);
+        actual = target.Evaluate(point);
         Assert.AreEqual(expected, actual);
       }
Index: branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/BoothEvaluatorTest.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/BoothEvaluatorTest.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/BoothEvaluatorTest.cs	(revision 9444)
@@ -92,5 +92,5 @@
       for (int dimension = target.MinimumProblemSize; dimension <= System.Math.Min(10, target.MaximumProblemSize); dimension++) {
         point = target.GetBestKnownSolution(dimension);
-        actual = target.EvaluateFunction(point);
+        actual = target.Evaluate(point);
         Assert.AreEqual(expected, actual);
       }
Index: branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/GriewankEvaluatorTest.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/GriewankEvaluatorTest.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/GriewankEvaluatorTest.cs	(revision 9444)
@@ -92,5 +92,5 @@
       for (int dimension = target.MinimumProblemSize; dimension <= System.Math.Min(10, target.MaximumProblemSize); dimension++) {
         point = target.GetBestKnownSolution(dimension);
-        actual = target.EvaluateFunction(point);
+        actual = target.Evaluate(point);
         Assert.AreEqual(expected, actual);
       }
Index: branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/LevyEvaluatorTest.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/LevyEvaluatorTest.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/LevyEvaluatorTest.cs	(revision 9444)
@@ -92,5 +92,5 @@
       for (int dimension = target.MinimumProblemSize; dimension <= System.Math.Min(10, target.MaximumProblemSize); dimension++) {
         point = target.GetBestKnownSolution(dimension);
-        actual = target.EvaluateFunction(point);
+        actual = target.Evaluate(point);
         Assert.AreEqual(expected, actual);
       }
Index: branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/MatyasEvaluatorTest.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/MatyasEvaluatorTest.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/MatyasEvaluatorTest.cs	(revision 9444)
@@ -92,5 +92,5 @@
       for (int dimension = target.MinimumProblemSize; dimension <= System.Math.Min(10, target.MaximumProblemSize); dimension++) {
         point = target.GetBestKnownSolution(dimension);
-        actual = target.EvaluateFunction(point);
+        actual = target.Evaluate(point);
         Assert.AreEqual(expected, actual);
       }
Index: branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/RastriginEvaluatorTest.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/RastriginEvaluatorTest.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/RastriginEvaluatorTest.cs	(revision 9444)
@@ -92,5 +92,5 @@
       for (int dimension = target.MinimumProblemSize; dimension <= System.Math.Min(10, target.MaximumProblemSize); dimension++) {
         point = target.GetBestKnownSolution(dimension);
-        actual = target.EvaluateFunction(point);
+        actual = target.Evaluate(point);
         Assert.AreEqual(expected, actual);
       }
Index: branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/RosenbrockEvaluatorTest.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/RosenbrockEvaluatorTest.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/RosenbrockEvaluatorTest.cs	(revision 9444)
@@ -92,5 +92,5 @@
       for (int dimension = target.MinimumProblemSize; dimension <= System.Math.Min(10, target.MaximumProblemSize); dimension++) {
         point = target.GetBestKnownSolution(dimension);
-        actual = target.EvaluateFunction(point);
+        actual = target.Evaluate(point);
         Assert.AreEqual(expected, actual);
       }
Index: branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/SphereEvaluatorTest.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/SphereEvaluatorTest.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/SphereEvaluatorTest.cs	(revision 9444)
@@ -92,5 +92,5 @@
       for (int dimension = target.MinimumProblemSize; dimension <= System.Math.Min(10, target.MaximumProblemSize); dimension++) {
         point = target.GetBestKnownSolution(dimension);
-        actual = target.EvaluateFunction(point);
+        actual = target.Evaluate(point);
         Assert.AreEqual(expected, actual);
       }
Index: branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/SumSquaresEvaluatorTest.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/SumSquaresEvaluatorTest.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/SumSquaresEvaluatorTest.cs	(revision 9444)
@@ -92,5 +92,5 @@
       for (int dimension = target.MinimumProblemSize; dimension <= System.Math.Min(10, target.MaximumProblemSize); dimension++) {
         point = target.GetBestKnownSolution(dimension);
-        actual = target.EvaluateFunction(point);
+        actual = target.Evaluate(point);
         Assert.AreEqual(expected, actual);
       }
Index: branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/ZakharovEvaluatorTest.cs
===================================================================
--- branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/ZakharovEvaluatorTest.cs	(revision 9434)
+++ branches/HivePerformance/sources/HeuristicLab.Tests/HeuristicLab.Problems.TestFunctions-3.3/ZakharovEvaluatorTest.cs	(revision 9444)
@@ -92,5 +92,5 @@
       for (int dimension = target.MinimumProblemSize; dimension <= System.Math.Min(10, target.MaximumProblemSize); dimension++) {
         point = target.GetBestKnownSolution(dimension);
-        actual = target.EvaluateFunction(point);
+        actual = target.Evaluate(point);
         Assert.AreEqual(expected, actual);
       }
Index: branches/HivePerformance/sources/PreBuildEvent.cmd
===================================================================
--- branches/HivePerformance/sources/PreBuildEvent.cmd	(revision 9434)
+++ branches/HivePerformance/sources/PreBuildEvent.cmd	(revision 9444)
@@ -1,2 +1,11 @@
 IF EXIST "%ProjectDir%\Properties\AssemblyInfo.cs.frame" SubWCRev "%ProjectDir%\" "%ProjectDir%\Properties\AssemblyInfo.cs.frame" "%ProjectDir%\Properties\AssemblyInfo.cs"
+IF %ERRORLEVEL% NEQ 0 GOTO Error_Handling
 IF EXIST "%ProjectDir%\Plugin.cs.frame" SubWCRev "%ProjectDir%\" "%ProjectDir%\Plugin.cs.frame" "%ProjectDir%\Plugin.cs"
+IF %ERRORLEVEL% NEQ 0 GOTO Error_Handling
+GOTO Done
+
+:Error_Handling
+ECHO There was an error while running subwcrev. Please verify that the *.cs.frame files have been correctly converted to *.cs files, otherwise HeuristicLab won't build. 
+exit 0
+
+:Done
