Index: branches/histogram/HeuristicLab.Algorithms.DataAnalysis.Views/3.3/HeuristicLabAlgorithmsDataAnalysisViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.DataAnalysis.Views/3.3/HeuristicLabAlgorithmsDataAnalysisViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.DataAnalysis.Views/3.3/HeuristicLabAlgorithmsDataAnalysisViewsPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Algorithms.DataAnalysis.Views plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Algorithms.DataAnalysis.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Algorithms.DataAnalysis.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Algorithms.DataAnalysis.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Algorithms.DataAnalysis", "3.3")]
Index: branches/histogram/HeuristicLab.Algorithms.DataAnalysis.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.DataAnalysis.Views/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.DataAnalysis.Views/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.3/HeuristicLabAlgorithmsDataAnalysisPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.3/HeuristicLabAlgorithmsDataAnalysisPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.3/HeuristicLabAlgorithmsDataAnalysisPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Algorithms.DataAnalysis plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Algorithms.DataAnalysis", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Algorithms.DataAnalysis", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Algorithms.DataAnalysis-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.4/CrossValidation.cs
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.4/CrossValidation.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.4/CrossValidation.cs	(revision 6195)
@@ -373,7 +373,35 @@
       foreach (IResult result in ExtractAndAggregateResults<PercentValue>(resultCollections))
         results.Add(result.Name, result.Value);
-
+      foreach (IResult result in ExtractAndAggregateRegressionSolutions(resultCollections)) {
+        results.Add(result.Name, result.Value);
+      }
       results.Add("Execution Time", new TimeSpanValue(this.ExecutionTime));
       results.Add("CrossValidation Folds", new RunCollection(runs));
+    }
+
+    private IEnumerable<IResult> ExtractAndAggregateRegressionSolutions(IEnumerable<KeyValuePair<string, IItem>> resultCollections) {
+      Dictionary<string, List<IRegressionSolution>> resultSolutions = new Dictionary<string, List<IRegressionSolution>>();
+      foreach (var result in resultCollections) {
+        var regressionSolution = result.Value as IRegressionSolution;
+        if (regressionSolution != null) {
+          if (resultSolutions.ContainsKey(result.Key)) {
+            resultSolutions[result.Key].Add(regressionSolution);
+          } else {
+            resultSolutions.Add(result.Key, new List<IRegressionSolution>() { regressionSolution });
+          }
+        }
+      }
+      List<IResult> aggregatedResults = new List<IResult>();
+      foreach (KeyValuePair<string, List<IRegressionSolution>> solutions in resultSolutions) {
+        var problemDataClone = (IRegressionProblemData)Problem.ProblemData.Clone();
+        problemDataClone.TrainingPartition.Start = SamplesStart.Value; problemDataClone.TrainingPartition.End = SamplesEnd.Value;
+        problemDataClone.TestPartition.Start = SamplesStart.Value; problemDataClone.TestPartition.End = SamplesEnd.Value;
+        var ensembleSolution = new RegressionEnsembleSolution(solutions.Value.Select(x => x.Model), problemDataClone,
+          solutions.Value.Select(x => x.ProblemData.TrainingPartition),
+          solutions.Value.Select(x => x.ProblemData.TestPartition));
+
+        aggregatedResults.Add(new Result(solutions.Key, ensembleSolution));
+      }
+      return aggregatedResults;
     }
 
Index: branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/LinearDiscriminantAnalysis.cs
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/LinearDiscriminantAnalysis.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/LinearDiscriminantAnalysis.cs	(revision 6195)
@@ -68,7 +68,5 @@
       string targetVariable = problemData.TargetVariable;
       IEnumerable<string> allowedInputVariables = problemData.AllowedInputVariables;
-      int samplesStart = problemData.TrainingPartition.Start;
-      int samplesEnd = problemData.TrainingPartition.End;
-      IEnumerable<int> rows = Enumerable.Range(samplesStart, samplesEnd - samplesStart);
+      IEnumerable<int> rows = problemData.TrainingIndizes;
       int nClasses = problemData.ClassNames.Count();
       double[,] inputMatrix = AlglibUtil.PrepareInputMatrix(dataset, allowedInputVariables.Concat(new string[] { targetVariable }), rows);
Index: branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/LinearRegression.cs
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/LinearRegression.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.4/Linear/LinearRegression.cs	(revision 6195)
@@ -72,7 +72,5 @@
       string targetVariable = problemData.TargetVariable;
       IEnumerable<string> allowedInputVariables = problemData.AllowedInputVariables;
-      int samplesStart = problemData.TrainingPartition.Start;
-      int samplesEnd = problemData.TrainingPartition.End;
-      IEnumerable<int> rows = Enumerable.Range(samplesStart, samplesEnd - samplesStart);
+      IEnumerable<int> rows = problemData.TrainingIndizes;
       double[,] inputMatrix = AlglibUtil.PrepareInputMatrix(dataset, allowedInputVariables.Concat(new string[] { targetVariable }), rows);
       if (inputMatrix.Cast<double>().Any(x => double.IsNaN(x) || double.IsInfinity(x)))
Index: branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorClassification.cs
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorClassification.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorClassification.cs	(revision 6195)
@@ -122,7 +122,5 @@
       Dataset dataset = problemData.Dataset;
       string targetVariable = problemData.TargetVariable;
-      int start = problemData.TrainingPartition.Start;
-      int end = problemData.TrainingPartition.End;
-      IEnumerable<int> rows = Enumerable.Range(start, end - start);
+      IEnumerable<int> rows = problemData.TrainingIndizes;
 
       //extract SVM parameters from scope and set them
Index: branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorRegression.cs
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorRegression.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.4/SupportVectorMachine/SupportVectorRegression.cs	(revision 6195)
@@ -130,7 +130,5 @@
       Dataset dataset = problemData.Dataset;
       string targetVariable = problemData.TargetVariable;
-      int start = problemData.TrainingPartition.Start;
-      int end = problemData.TrainingPartition.End;
-      IEnumerable<int> rows = Enumerable.Range(start, end - start);
+      IEnumerable<int> rows = problemData.TrainingIndizes;
 
       //extract SVM parameters from scope and set them
Index: branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.4/kMeans/KMeansClustering.cs
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.4/kMeans/KMeansClustering.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.DataAnalysis/3.4/kMeans/KMeansClustering.cs	(revision 6195)
@@ -85,7 +85,5 @@
       Dataset dataset = problemData.Dataset;
       IEnumerable<string> allowedInputVariables = problemData.AllowedInputVariables;
-      int start = problemData.TrainingPartition.Start;
-      int end = problemData.TrainingPartition.End;
-      IEnumerable<int> rows = Enumerable.Range(start, end - start);
+      IEnumerable<int> rows = problemData.TrainingIndizes;
       int info;
       double[,] centers;
Index: branches/histogram/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLabAlgorithmsEvolutionStrategyPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLabAlgorithmsEvolutionStrategyPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLabAlgorithmsEvolutionStrategyPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Algorithms.EvolutionStrategy plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Algorithms.EvolutionStrategy", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Algorithms.EvolutionStrategy", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Algorithms.EvolutionStrategy-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
Index: branches/histogram/HeuristicLab.Algorithms.EvolutionStrategy/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.EvolutionStrategy/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.EvolutionStrategy/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLabAlgorithmsGeneticAlgorithmPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLabAlgorithmsGeneticAlgorithmPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLabAlgorithmsGeneticAlgorithmPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Algorithms.GeneticAlgorithm plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Algorithms.GeneticAlgorithm", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Algorithms.GeneticAlgorithm", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Algorithms.GeneticAlgorithm-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
Index: branches/histogram/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLabAlgorithmsLocalSearchPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLabAlgorithmsLocalSearchPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLabAlgorithmsLocalSearchPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Algorithms.LocalSearch plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Algorithms.LocalSearch", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Algorithms.LocalSearch", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Algorithms.LocalSearch-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
Index: branches/histogram/HeuristicLab.Algorithms.LocalSearch/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.LocalSearch/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.LocalSearch/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLabAlgorithmsNSGA2Plugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLabAlgorithmsNSGA2Plugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLabAlgorithmsNSGA2Plugin.cs.frame	(revision 6195)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Algorithms.NSGA2 {
-  [Plugin("HeuristicLab.Algorithms.NSGA2", "Provides the non-dominated sorting genetic algorithm (NSGA-II) as described in Deb et al. 2002. A Fast and Elitist Multiobjective Genetic Algorithm: NSGA-II. IEEE Transactions on Evolutionary Computation, 6(2), pp. 182-197.", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Algorithms.NSGA2", "Provides the non-dominated sorting genetic algorithm (NSGA-II) as described in Deb et al. 2002. A Fast and Elitist Multiobjective Genetic Algorithm: NSGA-II. IEEE Transactions on Evolutionary Computation, 6(2), pp. 182-197.", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Algorithms.NSGA2-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
Index: branches/histogram/HeuristicLab.Algorithms.NSGA2/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.NSGA2/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.NSGA2/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -34,3 +34,3 @@
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLabAlgorithmsOffspringSelectionGeneticAlgorithmPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLabAlgorithmsOffspringSelectionGeneticAlgorithmPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLabAlgorithmsOffspringSelectionGeneticAlgorithmPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
Index: branches/histogram/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLabAlgorithmsParticleSwarmOptimizationPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLabAlgorithmsParticleSwarmOptimizationPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLabAlgorithmsParticleSwarmOptimizationPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Algorithms.ParticleSwarmOptimization plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Algorithms.ParticleSwarmOptimization", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Algorithms.ParticleSwarmOptimization", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
Index: branches/histogram/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLabAlgorithmsSimulatedAnnealingPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLabAlgorithmsSimulatedAnnealingPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLabAlgorithmsSimulatedAnnealingPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Algorithms.SimulatedAnnealing plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Algorithms.SimulatedAnnealing", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Algorithms.SimulatedAnnealing", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Algorithms.SimulatedAnnealing-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
Index: branches/histogram/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLabAlgorithmsTabuSearchPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLabAlgorithmsTabuSearchPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLabAlgorithmsTabuSearchPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Algorithms.TabuSearch plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Algorithms.TabuSearch", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Algorithms.TabuSearch", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Algorithms.TabuSearch-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
Index: branches/histogram/HeuristicLab.Algorithms.TabuSearch/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.TabuSearch/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.TabuSearch/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLabAlgorithmsVariableNeighborhoodSearchPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLabAlgorithmsVariableNeighborhoodSearchPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLabAlgorithmsVariableNeighborhoodSearchPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Algorithms.VariableNeighborhoodSearch plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Algorithms.VariableNeighborhoodSearch", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Algorithms.VariableNeighborhoodSearch", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]  
Index: branches/histogram/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/VariableNeighborhoodSearch.cs
===================================================================
--- branches/histogram/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/VariableNeighborhoodSearch.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/VariableNeighborhoodSearch.cs	(revision 6195)
@@ -35,5 +35,5 @@
 
 namespace HeuristicLab.Algorithms.VariableNeighborhoodSearch {
-  [Item("Variable Neighborhood Search", "A variable neighborhood search algorithm.")]
+  [Item("Variable Neighborhood Search", "A variable neighborhood search algorithm based on the description in Mladenovic, N. and Hansen, P. (1997). Variable neighborhood search. Computers & Operations Research Volume 24, Issue 11, pp. 1097-1100.")]
   [Creatable("Algorithms")]
   [StorableClass]
@@ -166,4 +166,14 @@
     [StorableHook(HookType.AfterDeserialization)]
     private void AfterDeserialization() {
+      if (Parameters["LocalImprovement"] is ValueParameter<ILocalImprovementOperator>) {
+        ILocalImprovementOperator bla = ((ValueParameter<ILocalImprovementOperator>)Parameters["LocalImprovement"]).Value;
+        Parameters.Remove("LocalImprovement");
+        Parameters.Add(new ConstrainedValueParameter<ILocalImprovementOperator>("LocalImprovement", "The local improvement operation"));
+        LocalImprovementParameter.ValidValues.Add(bla);
+        IMultiNeighborhoodShakingOperator bla2 = ((ValueParameter<IMultiNeighborhoodShakingOperator>)Parameters["Shaking"]).Value;
+        Parameters.Remove("Shaking");
+        Parameters.Add(new ConstrainedValueParameter<IMultiNeighborhoodShakingOperator>("ShakingOperator", "The operator that performs the shaking of solutions."));
+        ShakingOperatorParameter.ValidValues.Add(bla2);
+      }
       RegisterEventHandlers();
     }
Index: branches/histogram/HeuristicLab.Analysis.Views/3.3/HeuristicLabAnalysisViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Analysis.Views/3.3/HeuristicLabAnalysisViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Analysis.Views/3.3/HeuristicLabAnalysisViewsPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Analysis.Views plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Analysis.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Analysis.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Analysis.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
Index: branches/histogram/HeuristicLab.Analysis.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Analysis.Views/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Analysis.Views/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Analysis/3.3/HeuristicLabAnalysisPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Analysis/3.3/HeuristicLabAnalysisPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Analysis/3.3/HeuristicLabAnalysisPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Analysis plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Analysis", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Analysis", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Analysis-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.ALGLIB", "3.1")]
Index: branches/histogram/HeuristicLab.Analysis/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Analysis/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Analysis/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Clients.Common/3.3/HeuristicLabClientsCommonPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Clients.Common/3.3/HeuristicLabClientsCommonPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Clients.Common/3.3/HeuristicLabClientsCommonPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Clients.Common plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Clients.Common", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Clients.Common", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Clients.Common-3.3.dll", PluginFileType.Assembly)]
   public class HeuristicLabClientsCommonPlugin : PluginBase {
Index: branches/histogram/HeuristicLab.Clients.Common/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Clients.Common/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Clients.Common/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -55,3 +55,3 @@
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.CodeEditor/3.3/HeuristicLabCodeEditorPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.CodeEditor/3.3/HeuristicLabCodeEditorPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.CodeEditor/3.3/HeuristicLabCodeEditorPlugin.cs.frame	(revision 6195)
@@ -27,5 +27,5 @@
 
 namespace HeuristicLab.CodeEditor {
-  [Plugin("HeuristicLab.CodeEditor", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.CodeEditor", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.CodeEditor-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
Index: branches/histogram/HeuristicLab.CodeEditor/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.CodeEditor/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.CodeEditor/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -51,3 +51,3 @@
 //
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Collections/3.3/HeuristicLabCollectionsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Collections/3.3/HeuristicLabCollectionsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Collections/3.3/HeuristicLabCollectionsPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Collections plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Collections", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Collections", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Collections-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Persistence", "3.3")]
Index: branches/histogram/HeuristicLab.Collections/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Collections/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Collections/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Common.Resources/3.3/HeuristicLabCommonResourcesPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Common.Resources/3.3/HeuristicLabCommonResourcesPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Common.Resources/3.3/HeuristicLabCommonResourcesPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
 
 namespace HeuristicLab.Common.Resources {
-  [Plugin("HeuristicLab.Common.Resources", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Common.Resources", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Common.Resources-3.3.dll", PluginFileType.Assembly)]
   public class HeuristicLabCommonResourcesPlugin : PluginBase {
Index: branches/histogram/HeuristicLab.Common.Resources/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Common.Resources/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Common.Resources/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -31,3 +31,3 @@
 //
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj
===================================================================
--- branches/histogram/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj	(revision 6194)
+++ branches/histogram/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj	(revision 6195)
@@ -121,4 +121,5 @@
     <Compile Include="Content\IStorableContent.cs" />
     <Compile Include="Constants.cs" />
+    <Compile Include="ObjectExtensions.cs" />
     <Compile Include="DeepCloneable.cs" />
     <Compile Include="Content\IContent.cs" />
Index: branches/histogram/HeuristicLab.Common/3.3/HeuristicLabCommonPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Common/3.3/HeuristicLabCommonPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Common/3.3/HeuristicLabCommonPlugin.cs.frame	(revision 6195)
@@ -29,5 +29,5 @@
   /// Plugin class for HeuristicLab.Common plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Common", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Common", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Common-3.3.dll", PluginFileType.Assembly)]
   public class HeuristicLabCommonPlugin : PluginBase {
Index: branches/histogram/HeuristicLab.Common/3.3/ObjectExtensions.cs
===================================================================
--- branches/histogram/HeuristicLab.Common/3.3/ObjectExtensions.cs	(revision 6195)
+++ branches/histogram/HeuristicLab.Common/3.3/ObjectExtensions.cs	(revision 6195)
@@ -0,0 +1,87 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Reflection;
+using System.Threading;
+
+namespace HeuristicLab.Common {
+  public static class ObjectExtensions {
+    public static IEnumerable<object> GetObjectGraphObjects(this object obj) {
+      var objects = new HashSet<object>();
+      obj.CollectObjectGraphObjects(objects);
+      return objects;
+    }
+    /// <summary>
+    /// Types not collected:
+    ///   * System.Delegate
+    ///   * System.EventHandler (+ System.EventHandler<T>)
+    ///   * Primitives (Boolean, Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, IntPtr, UIntPtr, Char, Double, Single)
+    ///   * string, decimal
+    ///   * Arrays of primitives (+ string, decimal)
+    /// Types of which the fields are not further collected:
+    ///   * System.Type
+    ///   * System.Threading.ThreadLocal<T>
+    /// </summary>
+    private static void CollectObjectGraphObjects(this object obj, HashSet<object> objects) {
+      if (obj == null || objects.Contains(obj)) return;
+      if (obj is Delegate || obj is EventHandler) return; 
+      Type type = obj.GetType();
+      if (type.IsSubclassOfRawGeneric(typeof(EventHandler<>))) return;
+      if (type.IsPrimitive || type == typeof(string) || type == typeof(decimal)) return;
+      if (type.IsArray) {
+        Type elementType = type.GetElementType();
+        if (elementType.IsPrimitive || elementType == typeof(string) || elementType == typeof(decimal)) return;
+      }
+
+      objects.Add(obj);
+
+      if (typeof(Type).IsInstanceOfType(obj)) return; // avoid infinite recursion
+      if (type.IsSubclassOfRawGeneric(typeof(ThreadLocal<>))) return; // avoid stack overflow when the field `ConcurrentStack<int> s_availableIndices` grows large
+
+      // performance critical to handle dictionaries in a special way
+      var dictionary = obj as IDictionary;
+      if (dictionary != null) {
+        foreach (object value in dictionary.Keys) {
+          CollectObjectGraphObjects(value, objects);
+        }
+        foreach (object value in dictionary.Values) {
+          CollectObjectGraphObjects(value, objects);
+        }
+        return;
+      }
+
+      if (type.IsArray) {
+        var array = obj as Array;
+        foreach (object value in array) {
+          CollectObjectGraphObjects(value, objects);
+        }
+        return;
+      }
+
+      foreach (FieldInfo f in type.GetAllFields()) {
+        f.GetValue(obj).CollectObjectGraphObjects(objects);
+      }      
+    }
+  }
+}
Index: branches/histogram/HeuristicLab.Common/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Common/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Common/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Common/3.3/TypeExtensions.cs
===================================================================
--- branches/histogram/HeuristicLab.Common/3.3/TypeExtensions.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Common/3.3/TypeExtensions.cs	(revision 6195)
@@ -21,4 +21,6 @@
 
 using System;
+using System.Collections.Generic;
+using System.Reflection;
 using System.Text;
 
@@ -45,4 +47,31 @@
       return sb.ToString();
     }
+
+    public static IEnumerable<FieldInfo> GetAllFields(this Type type) {
+      foreach (var field in type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))
+        yield return field;
+
+      foreach (var field in type.GetFields(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic))
+        yield return field;
+
+      if (type.BaseType != null) {
+        foreach (var field in type.BaseType.GetAllFields())
+          yield return field;
+      }
+    }
+
+    // http://stackoverflow.com/questions/457676/c-reflection-check-if-a-class-is-derived-from-a-generic-class
+    public static bool IsSubclassOfRawGeneric(this Type toCheck, Type generic) {
+      while (toCheck != typeof(object)) {
+        var cur = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck;
+        if (generic == cur) {
+          return true;
+        }
+        toCheck = toCheck.BaseType; // baseType is null when toCheck is an Interface
+        if (toCheck == null)
+          return false;
+      }
+      return false;
+    }
   }
 }
Index: branches/histogram/HeuristicLab.Core.Views/3.3/HeuristicLabCoreViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Core.Views/3.3/HeuristicLabCoreViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Core.Views/3.3/HeuristicLabCoreViewsPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Core.Views plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Core.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Core.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Core.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Core.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Core.Views/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Core.Views/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj
===================================================================
--- branches/histogram/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj	(revision 6194)
+++ branches/histogram/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj	(revision 6195)
@@ -147,4 +147,5 @@
     <Compile Include="Interfaces\IMultiOperator.cs" />
     <Compile Include="Interfaces\IFixedValueParameter.cs" />
+    <Compile Include="Interfaces\IStatefulItem.cs" />
     <Compile Include="OperatorExecutionException.cs" />
     <Compile Include="Interfaces\IScopeTreeLookupParameter.cs" />
Index: branches/histogram/HeuristicLab.Core/3.3/HeuristicLabCorePlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Core/3.3/HeuristicLabCorePlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Core/3.3/HeuristicLabCorePlugin.cs.frame	(revision 6195)
@@ -29,5 +29,5 @@
   /// Plugin class for HeuristicLab.Core plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Core", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Core", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Core-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Core/3.3/Interfaces/IStatefulItem.cs
===================================================================
--- branches/histogram/HeuristicLab.Core/3.3/Interfaces/IStatefulItem.cs	(revision 6195)
+++ branches/histogram/HeuristicLab.Core/3.3/Interfaces/IStatefulItem.cs	(revision 6195)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core {
+  public interface IStatefulItem : IItem {
+    void InitializeState();
+    void ClearState();
+  }
+}
Index: branches/histogram/HeuristicLab.Core/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Core/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Core/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Data.Views/3.3/HeuristicLabDataViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Data.Views/3.3/HeuristicLabDataViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Data.Views/3.3/HeuristicLabDataViewsPlugin.cs.frame	(revision 6195)
@@ -29,5 +29,5 @@
   /// Plugin class for HeuristicLab.Data.Views plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Data.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Data.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Data.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Common", "3.3")]
Index: branches/histogram/HeuristicLab.Data.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Data.Views/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Data.Views/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Data/3.3/HeuristicLabDataPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Data/3.3/HeuristicLabDataPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Data/3.3/HeuristicLabDataPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Data plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Data", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Data", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Data-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Common", "3.3")]
Index: branches/histogram/HeuristicLab.Data/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Data/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Data/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.DebugEngine/3.3/HeuristicLabDebugEnginePlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.DebugEngine/3.3/HeuristicLabDebugEnginePlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.DebugEngine/3.3/HeuristicLabDebugEnginePlugin.cs.frame	(revision 6195)
@@ -24,5 +24,5 @@
 namespace HeuristicLab.DebugEngine {
 
-  [Plugin("HeuristicLab.DebugEngine", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.DebugEngine", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.DebugEngine-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.DebugEngine/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.DebugEngine/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.DebugEngine/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLabEncodingsBinaryVectorEncodingPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLabEncodingsBinaryVectorEncodingPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLabEncodingsBinaryVectorEncodingPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Encodings.BinaryVectorEncoding plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Encodings.BinaryVectorEncoding", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Encodings.BinaryVectorEncoding", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Encodings.BinaryVectorEncoding-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLabEncodingsIntegerVectorEncodingPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLabEncodingsIntegerVectorEncodingPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLabEncodingsIntegerVectorEncodingPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Encodings.IntegerVectorEncoding plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Encodings.IntegerVectorEncoding", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Encodings.IntegerVectorEncoding", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Encodings.IntegerVectorEncoding-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLabEncodingsPermutationEncodingViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLabEncodingsPermutationEncodingViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLabEncodingsPermutationEncodingViewsPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Encodings.PermutationEncoding.Views plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Encodings.PermutationEncoding.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Encodings.PermutationEncoding.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Encodings.PermutationEncoding.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Core", "3.3")]
Index: branches/histogram/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLabEncodingsPermutationEncodingPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLabEncodingsPermutationEncodingPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLabEncodingsPermutationEncodingPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Encodings.PermutationEncoding plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Encodings.PermutationEncoding", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Encodings.PermutationEncoding", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Encodings.PermutationEncoding-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Encodings.PermutationEncoding/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Encodings.PermutationEncoding/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Encodings.PermutationEncoding/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLabEncodingsRealVectorEncodingPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLabEncodingsRealVectorEncodingPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLabEncodingsRealVectorEncodingPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Encodings.RealVectorEncoding plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Encodings.RealVectorEncoding", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Encodings.RealVectorEncoding", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Encodings.RealVectorEncoding-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Encodings.RealVectorEncoding/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Encodings.RealVectorEncoding/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Encodings.RealVectorEncoding/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -55,3 +55,3 @@
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.3/HeuristicLabEncodingsSymbolicExpressionTreeEncodingViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.3/HeuristicLabEncodingsSymbolicExpressionTreeEncodingViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.3/HeuristicLabEncodingsSymbolicExpressionTreeEncodingViewsPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
 
 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views {
-  [Plugin("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -45,3 +45,3 @@
 
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolView.Designer.cs
===================================================================
--- branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolView.Designer.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolView.Designer.cs	(revision 6195)
@@ -80,5 +80,7 @@
       this.initialFrequencyTextBox.Size = new System.Drawing.Size(227, 20);
       this.initialFrequencyTextBox.TabIndex = 4;
-      this.initialFrequencyTextBox.TextChanged += new System.EventHandler(this.initialFrequencyTextBox_TextChanged);
+      this.initialFrequencyTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.initialFrequencyTextBox_KeyDown);
+      this.initialFrequencyTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.initialFrequencyTextBox_Validating);
+      this.initialFrequencyTextBox.Validated += new System.EventHandler(this.initialFrequencyTextBox_Validated);
       // 
       // SymbolView
Index: branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolView.cs
===================================================================
--- branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolView.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolView.cs	(revision 6195)
@@ -25,4 +25,5 @@
 using HeuristicLab.MainForm;
 using HeuristicLab.MainForm.WindowsForms;
+using System.ComponentModel;
 
 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views {
@@ -67,12 +68,28 @@
 
     #region control event handlers
-    private void initialFrequencyTextBox_TextChanged(object sender, EventArgs e) {
+    private void initialFrequencyTextBox_KeyDown(object sender, KeyEventArgs e) {
+      if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return))
+        initialFrequencyLabel.Select();  // select label to validate data
+
+      if (e.KeyCode == Keys.Escape) {
+        initialFrequencyTextBox.Text = Content.InitialFrequency.ToString();
+        initialFrequencyLabel.Select();  // select label to validate data
+      }
+    }
+    private void initialFrequencyTextBox_Validating(object sender, CancelEventArgs e) {
+      double freq;
+      if (double.TryParse(initialFrequencyTextBox.Text, out freq) && freq >= 0.0) {
+        errorProvider.SetError(initialFrequencyTextBox, string.Empty);
+        e.Cancel = false;
+      } else {
+        errorProvider.SetError(initialFrequencyTextBox, "Invalid value");
+        e.Cancel = true;
+      }
+    }
+    private void initialFrequencyTextBox_Validated(object sender, EventArgs e) {
       double freq;
       if (double.TryParse(initialFrequencyTextBox.Text, out freq) && freq >= 0.0) {
         Content.InitialFrequency = freq;
-        errorProvider.SetError(initialFrequencyTextBox, string.Empty);
-      } else {
-        errorProvider.SetError(initialFrequencyTextBox, "Invalid value");
-      }
+      } 
     }
     #endregion
Index: branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/HeuristicLabEncodingsSymbolicExpressionTreeEncodingPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/HeuristicLabEncodingsSymbolicExpressionTreeEncodingPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/HeuristicLabEncodingsSymbolicExpressionTreeEncodingPlugin.cs.frame	(revision 6195)
@@ -26,16 +26,16 @@
 
 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
-  [Plugin("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.3.dll", PluginFileType.Assembly)]
-  [PluginDependency("HeuristicLab.Analysis", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Collections", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Common", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Common.Resources", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Core", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Data", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Operators", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Optimization", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Parameters", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Persistence", "3.3.3.0")]
+  [PluginDependency("HeuristicLab.Analysis", "3.3")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
   public class HeuristicLabEncodingsSymbolicExpressionTreeEncodingPlugin : PluginBase {
   }
Index: branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -45,3 +45,3 @@
 
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLabEncodingsSymbolicExpressionTreeEncodingPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLabEncodingsSymbolicExpressionTreeEncodingPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLabEncodingsSymbolicExpressionTreeEncodingPlugin.cs.frame	(revision 6195)
@@ -28,14 +28,14 @@
   [Plugin("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding","Provides operators and related classes for the symbolic expression tree encoding.", "3.4.0.$WCREV$")]
   [PluginFile("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll", PluginFileType.Assembly)]
-  [PluginDependency("HeuristicLab.Analysis", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Collections", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Common", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Common.Resources", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Core", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Data", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Operators", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Optimization", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Parameters", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Persistence", "3.3.3.0")]
+  [PluginDependency("HeuristicLab.Analysis", "3.3")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
   public class HeuristicLabEncodingsSymbolicExpressionTreeEncodingPlugin : PluginBase {
   }
Index: branches/histogram/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLabMainFormWindowsFormsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLabMainFormWindowsFormsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLabMainFormWindowsFormsPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
 
 namespace HeuristicLab.MainForm.WindowsForms {
-  [Plugin("HeuristicLab.MainForm.WindowsForms", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.MainForm.WindowsForms", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.MainForm.WindowsForms-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Common", "3.3")]
Index: branches/histogram/HeuristicLab.MainForm.WindowsForms/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.MainForm.WindowsForms/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.MainForm.WindowsForms/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.MainForm/3.3/HeuristicLabMainFormPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.MainForm/3.3/HeuristicLabMainFormPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.MainForm/3.3/HeuristicLabMainFormPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
 
 namespace HeuristicLab.MainForm {
-  [Plugin("HeuristicLab.MainForm", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.MainForm", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.MainForm-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Common", "3.3")]
Index: branches/histogram/HeuristicLab.MainForm/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.MainForm/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.MainForm/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Operators.Programmable/3.3/HeuristicLabOperatorsProgrammablePlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Operators.Programmable/3.3/HeuristicLabOperatorsProgrammablePlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Operators.Programmable/3.3/HeuristicLabOperatorsProgrammablePlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
 
 namespace HeuristicLab.Operators.Programmable {
-  [Plugin("HeuristicLab.Operators.Programmable", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Operators.Programmable", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Operators.Programmable-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.CodeEditor", "3.3")]
Index: branches/histogram/HeuristicLab.Operators.Programmable/3.3/ProgrammableSingleSuccessorOperator.cs
===================================================================
--- branches/histogram/HeuristicLab.Operators.Programmable/3.3/ProgrammableSingleSuccessorOperator.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Operators.Programmable/3.3/ProgrammableSingleSuccessorOperator.cs	(revision 6195)
@@ -1,7 +1,28 @@
-﻿
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
 namespace HeuristicLab.Operators.Programmable {
 
Index: branches/histogram/HeuristicLab.Operators.Programmable/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Operators.Programmable/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Operators.Programmable/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/Plugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/Plugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/Plugin.cs.frame	(revision 6195)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Operators.Views.GraphVisualization.Views {
-  [Plugin("HeuristicLab.Operators.Views.GraphVisualization.Views-3.3", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Operators.Views.GraphVisualization.Views-3.3", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLabOperatorsViewsGraphVisualizationPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLabOperatorsViewsGraphVisualizationPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLabOperatorsViewsGraphVisualizationPlugin.cs.frame	(revision 6195)
@@ -29,5 +29,5 @@
   /// Plugin class for HeuristicLab.Operators.Views plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Operators.Views.GraphVisualization", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Operators.Views.GraphVisualization", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Operators.Views.GraphVisualization-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Operators.Views.GraphVisualization/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Operators.Views.GraphVisualization/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Operators.Views.GraphVisualization/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Operators.Views/3.3/HeuristicLabOperatorsViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Operators.Views/3.3/HeuristicLabOperatorsViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Operators.Views/3.3/HeuristicLabOperatorsViewsPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Operators.Views plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Operators.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Operators.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Operators.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Common", "3.3")]
Index: branches/histogram/HeuristicLab.Operators.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Operators.Views/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Operators.Views/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Operators/3.3/HeuristicLabOperatorsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Operators/3.3/HeuristicLabOperatorsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Operators/3.3/HeuristicLabOperatorsPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Operators plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Operators", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Operators", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Operators-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Operators/3.3/Operator.cs
===================================================================
--- branches/histogram/HeuristicLab.Operators/3.3/Operator.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Operators/3.3/Operator.cs	(revision 6195)
@@ -33,5 +33,5 @@
   [Item("Operator", "Base class for operators.")]
   [StorableClass]
-  public abstract class Operator : ParameterizedNamedItem, IOperator {
+  public abstract class Operator : ParameterizedNamedItem, IOperator, IStatefulItem {
     public override Image ItemImage {
       get {
@@ -107,4 +107,9 @@
     }
 
+    public virtual void InitializeState() { }
+    public virtual void ClearState() {
+      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
+    }
+
     public virtual IOperation Execute(IExecutionContext context, CancellationToken cancellationToken) {
       try {
@@ -116,5 +121,6 @@
         OnExecuted();
         return next;
-      } finally {
+      }
+      finally {
         foreach (IParameter param in Parameters)
           param.ExecutionContext = null;
Index: branches/histogram/HeuristicLab.Operators/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Operators/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Operators/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Optimization.Operators/3.3/HeuristicLabOptimizationOperatorsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Optimization.Operators/3.3/HeuristicLabOptimizationOperatorsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Optimization.Operators/3.3/HeuristicLabOptimizationOperatorsPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Optimization.Operators plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Optimization.Operators", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Optimization.Operators", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Optimization.Operators-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Optimization.Operators/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Optimization.Operators/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Optimization.Operators/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Optimization.Views/3.3/HeuristicLabOptimizationViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Optimization.Views/3.3/HeuristicLabOptimizationViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Optimization.Views/3.3/HeuristicLabOptimizationViewsPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Optimization.Views plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Optimization.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Optimization.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Optimization.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Optimization.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Optimization.Views/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Optimization.Views/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Optimization.Views/3.3/RunCollectionBubbleChartView.cs
===================================================================
--- branches/histogram/HeuristicLab.Optimization.Views/3.3/RunCollectionBubbleChartView.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Optimization.Views/3.3/RunCollectionBubbleChartView.cs	(revision 6195)
@@ -227,4 +227,8 @@
       series.Points.Clear();
       runToDataPointMapping.Clear();
+
+      chart.ChartAreas[0].AxisX.IsMarginVisible = xAxisValue != AxisDimension.Index.ToString();
+      chart.ChartAreas[0].AxisY.IsMarginVisible = yAxisValue != AxisDimension.Index.ToString();
+
       if (Content != null) {
         foreach (IRun run in this.Content)
@@ -433,5 +437,5 @@
     #region Drag & drop and tooltip
     private void chart_MouseDoubleClick(object sender, MouseEventArgs e) {
-      HitTestResult h = this.chart.HitTest(e.X, e.Y);
+      HitTestResult h = this.chart.HitTest(e.X, e.Y, ChartElementType.DataPoint);
       if (h.ChartElementType == ChartElementType.DataPoint) {
         IRun run = (IRun)((DataPoint)h.Object).Tag;
@@ -445,4 +449,5 @@
         this.chart.ChartAreas[0].CursorY.SelectionStart = this.chart.ChartAreas[0].CursorY.SelectionEnd;
       }
+      UpdateAxisLabels();
     }
 
@@ -557,10 +562,7 @@
       colorXAxisButton.Enabled = colorYAxisButton.Enabled = axisSelected;
 
-      if (!xAxisComboBox.DroppedDown)
-        xAxisValue = (string)xAxisComboBox.SelectedItem;
-      if (!yAxisComboBox.DroppedDown)
-        yAxisValue = (string)yAxisComboBox.SelectedItem;
-      if (!sizeComboBox.DroppedDown)
-        sizeAxisValue = (string)sizeComboBox.SelectedItem;
+      xAxisValue = (string)xAxisComboBox.SelectedItem;
+      yAxisValue = (string)yAxisComboBox.SelectedItem;
+      sizeAxisValue = (string)sizeComboBox.SelectedItem;
 
       UpdateDataPoints();
@@ -602,5 +604,5 @@
         for (double i = axis.Minimum; i <= axis.Maximum; i += axis.LabelStyle.Interval) {
           TimeSpan time = TimeSpan.FromSeconds(i);
-          string x = string.Format("{0:00}:{1:00}:{2:00}", (int)time.Hours, time.Minutes, time.Seconds);
+          string x = string.Format("{0:00}:{1:00}:{2:00}", time.Hours, time.Minutes, time.Seconds);
           axis.CustomLabels.Add(i - axis.LabelStyle.Interval / 2, i + axis.LabelStyle.Interval / 2, x);
         }
Index: branches/histogram/HeuristicLab.Optimization/3.3/Algorithms/Algorithm.cs
===================================================================
--- branches/histogram/HeuristicLab.Optimization/3.3/Algorithms/Algorithm.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Optimization/3.3/Algorithms/Algorithm.cs	(revision 6195)
@@ -260,6 +260,9 @@
     public event EventHandler Prepared;
     protected virtual void OnPrepared() {
+      ExecutionState = ExecutionState.Prepared;
       ExecutionTime = TimeSpan.Zero;
-      ExecutionState = ExecutionState.Prepared;
+      foreach (IStatefulItem statefulObject in this.GetObjectGraphObjects().OfType<IStatefulItem>()) {
+        statefulObject.InitializeState();
+      }
       EventHandler handler = Prepared;
       if (handler != null) handler(this, EventArgs.Empty);
@@ -280,4 +283,7 @@
     protected virtual void OnStopped() {
       ExecutionState = ExecutionState.Stopped;
+      foreach (IStatefulItem statefulObject in this.GetObjectGraphObjects().OfType<IStatefulItem>()) {
+        statefulObject.ClearState();
+      }
       runsCounter++;
       runs.Add(new Run(string.Format("{0} Run {1}", Name, runsCounter), this));
Index: branches/histogram/HeuristicLab.Optimization/3.3/HeuristicLabOptimizationPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Optimization/3.3/HeuristicLabOptimizationPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Optimization/3.3/HeuristicLabOptimizationPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Optimization plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Optimization", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Optimization", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Optimization-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Optimization/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Optimization/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Optimization/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj
===================================================================
--- branches/histogram/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 6194)
+++ branches/histogram/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 6195)
@@ -116,4 +116,5 @@
     <EmbeddedResource Include="Documents\SGP_SymbReg.hl" />
     <EmbeddedResource Include="Documents\VNS_TSP.hl" />
+    <EmbeddedResource Include="Documents\PSO_Schwefel.hl" />
     <None Include="HeuristicLabOptimizerPlugin.cs.frame" />
     <Compile Include="CreateExperimentDialog.cs">
Index: branches/histogram/HeuristicLab.Optimizer/3.3/HeuristicLabOptimizerPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Optimizer/3.3/HeuristicLabOptimizerPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Optimizer/3.3/HeuristicLabOptimizerPlugin.cs.frame	(revision 6195)
@@ -24,5 +24,5 @@
 
 namespace HeuristicLab.Optimizer {
-  [Plugin("HeuristicLab.Optimizer", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Optimizer", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Optimizer-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Clients.Common", "3.3")]
@@ -39,5 +39,5 @@
   }
 
-  [Application("Optimizer", "HeuristicLab Optimizer 3.3.3.$WCREV$")]
+  [Application("Optimizer", "HeuristicLab Optimizer 3.3.4.$WCREV$")]
   internal class HeuristicLabOptimizerApplication : ApplicationBase {
     public override void Run() {
Index: branches/histogram/HeuristicLab.Optimizer/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Optimizer/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Optimizer/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -55,3 +55,3 @@
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.ParallelEngine/3.3/HeuristicLabParallelEnginePlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.ParallelEngine/3.3/HeuristicLabParallelEnginePlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.ParallelEngine/3.3/HeuristicLabParallelEnginePlugin.cs.frame	(revision 6195)
@@ -29,5 +29,5 @@
   /// Plugin class for HeuristicLab.ParallelEngine plugin.
   /// </summary>
-  [Plugin("HeuristicLab.ParallelEngine", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.ParallelEngine", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.ParallelEngine-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Common", "3.3")]
Index: branches/histogram/HeuristicLab.ParallelEngine/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.ParallelEngine/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.ParallelEngine/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Parameters.Views/3.3/HeuristicLabParametersViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Parameters.Views/3.3/HeuristicLabParametersViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Parameters.Views/3.3/HeuristicLabParametersViewsPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Parameters.Views plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Parameters.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Parameters.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Parameters.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Parameters.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Parameters.Views/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Parameters.Views/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Parameters/3.3/HeuristicLabParametersPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Parameters/3.3/HeuristicLabParametersPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Parameters/3.3/HeuristicLabParametersPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Parameters plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Parameters", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Parameters", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Parameters-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Parameters/3.3/Parameter.cs
===================================================================
--- branches/histogram/HeuristicLab.Parameters/3.3/Parameter.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Parameters/3.3/Parameter.cs	(revision 6195)
@@ -33,5 +33,5 @@
   [Item("Parameter", "A base class for parameters.")]
   [StorableClass]
-  public abstract class Parameter : NamedItem, IParameter {
+  public abstract class Parameter : NamedItem, IParameter, IStatefulItem {
     public override Image ItemImage {
       get {
@@ -126,4 +126,10 @@
     }
 
+    public virtual void InitializeState() { }
+    public virtual void ClearState() {
+      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
+      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
+    }
+
     public override string ToString() {
       return Name;
Index: branches/histogram/HeuristicLab.Parameters/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Parameters/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Parameters/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Persistence.GUI/3.3/HeuristicLabPersistenceGUIPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Persistence.GUI/3.3/HeuristicLabPersistenceGUIPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Persistence.GUI/3.3/HeuristicLabPersistenceGUIPlugin.cs.frame	(revision 6195)
@@ -4,5 +4,5 @@
 namespace HeuristicLab.Persistence.GUI {
 
-  [Plugin("HeuristicLab.Persistence.GUI", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Persistence.GUI", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Persistence.GUI-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
Index: branches/histogram/HeuristicLab.Persistence.GUI/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Persistence.GUI/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Persistence.GUI/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -52,3 +52,3 @@
 //
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj
===================================================================
--- branches/histogram/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj	(revision 6194)
+++ branches/histogram/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj	(revision 6195)
@@ -110,8 +110,4 @@
       <SpecificVersion>False</SpecificVersion>
       <HintPath>..\..\HeuristicLab.PluginInfrastructure\3.3\ICSharpCode.SharpZipLib.dll</HintPath>
-    </Reference>
-    <Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\HeuristicLab.ExtLibs\HeuristicLab.log4net\1.2.10.0\log4net.dll</HintPath>
     </Reference>
     <Reference Include="System" />
Index: branches/histogram/HeuristicLab.Persistence/3.3/HeuristicLabPersistencePlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Persistence/3.3/HeuristicLabPersistencePlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Persistence/3.3/HeuristicLabPersistencePlugin.cs.frame	(revision 6195)
@@ -27,5 +27,5 @@
   /// The plugin for HeuriticLab.Persistence
   /// </summary>
-  [Plugin("HeuristicLab.Persistence", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Persistence", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Persistence-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Tracing", "3.3")]
Index: branches/histogram/HeuristicLab.Persistence/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Persistence/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Persistence/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -52,3 +52,3 @@
 //
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.PluginInfrastructure/3.3/ApplicationManager.cs
===================================================================
--- branches/histogram/HeuristicLab.PluginInfrastructure/3.3/ApplicationManager.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.PluginInfrastructure/3.3/ApplicationManager.cs	(revision 6195)
@@ -28,11 +28,16 @@
   /// </summary>
   public static class ApplicationManager {
-    // the singleton instance is initialized to LightweightApplicationManager as long as no other application manager is registered
-    private static IApplicationManager appManager = new LightweightApplicationManager();
+    // the singleton instance is initialized to LightweightApplicationManager as long as no other application manager is registered    
+    private static IApplicationManager appManager;
+
     /// <summary>
     /// Gets the application manager singleton.
     /// </summary>
     public static IApplicationManager Manager {
-      get { return appManager; }
+      get {
+        if (appManager == null)
+          appManager = new LightweightApplicationManager();
+        return appManager;
+      }
     }
 
@@ -42,5 +47,5 @@
     /// <param name="manager"></param>
     internal static void RegisterApplicationManager(IApplicationManager manager) {
-      if (!(appManager is LightweightApplicationManager)) throw new InvalidOperationException("The application manager has already been set.");
+      if (appManager != null && !(appManager is LightweightApplicationManager)) throw new InvalidOperationException("The application manager has already been set.");
       else {
         appManager = manager;
Index: branches/histogram/HeuristicLab.PluginInfrastructure/3.3/DefaultApplicationManager.cs
===================================================================
--- branches/histogram/HeuristicLab.PluginInfrastructure/3.3/DefaultApplicationManager.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.PluginInfrastructure/3.3/DefaultApplicationManager.cs	(revision 6195)
@@ -21,54 +21,15 @@
 
 using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using HeuristicLab.PluginInfrastructure.Manager;
 
 namespace HeuristicLab.PluginInfrastructure {
 
-  /// <summary>
-  /// The DefaultApplicationManager provides properties to retrieve the list of available plugins and applications.
-  /// It also provides methods for type discovery and instantiation for types declared in plugins.
+  /// <summary>  
   /// The DefaultApplicationManager is registered as ApplicationManager.Manager singleton for each HL application
   /// started via the plugin infrastructure.
   /// </summary>
-  internal sealed class DefaultApplicationManager : MarshalByRefObject, IApplicationManager {
-    /// <summary>
-    /// Fired when a plugin is loaded.
-    /// </summary>
-    internal event EventHandler<PluginInfrastructureEventArgs> PluginLoaded;
-    /// <summary>
-    /// Fired when a plugin is unloaded (when the application terminates).
-    /// </summary>
-    internal event EventHandler<PluginInfrastructureEventArgs> PluginUnloaded;
-
-    // cache for the AssemblyResolveEvent 
-    // which must be handled when assemblies are loaded dynamically after the application start
-    private Dictionary<string, Assembly> loadedAssemblies;
-
-    private List<IPlugin> loadedPlugins;
-
-    private List<PluginDescription> plugins;
-    /// <summary>
-    /// Gets all plugins.
-    /// </summary>
-    public IEnumerable<IPluginDescription> Plugins {
-      get { return plugins.Cast<IPluginDescription>(); }
-    }
-
-    private List<ApplicationDescription> applications;
-    /// <summary>
-    /// Gets all installed applications.
-    /// </summary>
-    public IEnumerable<IApplicationDescription> Applications {
-      get { return applications.Cast<IApplicationDescription>(); }
-    }
+  internal sealed class DefaultApplicationManager : SandboxApplicationManager {
 
     internal DefaultApplicationManager()
       : base() {
-      loadedAssemblies = new Dictionary<string, Assembly>();
-      loadedPlugins = new List<IPlugin>();
       AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => {
         if (loadedAssemblies.ContainsKey(args.Name)) {
@@ -79,244 +40,5 @@
     }
 
-    /// <summary>
-    /// Prepares the application domain for the execution of an HL application.
-    /// Pre-loads all <paramref name="plugins"/>.
-    /// </summary>
-    /// <param name="apps">Enumerable of available HL applications.</param>
-    /// <param name="plugins">Enumerable of plugins that should be pre-loaded.</param>
-    internal void PrepareApplicationDomain(IEnumerable<ApplicationDescription> apps, IEnumerable<PluginDescription> plugins) {
-      this.plugins = new List<PluginDescription>(plugins);
-      this.applications = new List<ApplicationDescription>(apps);
-      ApplicationManager.RegisterApplicationManager(this);
-      LoadPlugins(plugins);
-    }
-
-    /// <summary>
-    /// Loads the <paramref name="plugins"/> into this application domain.
-    /// </summary>
-    /// <param name="plugins">Enumerable of plugins that should be loaded.</param>
-    private void LoadPlugins(IEnumerable<PluginDescription> plugins) {
-      // load all loadable plugins (all dependencies available) into the execution context
-      foreach (var desc in PluginDescriptionIterator.IterateDependenciesBottomUp(plugins.Where(x => x.PluginState != PluginState.Disabled))) {
-        foreach (string fileName in desc.AssemblyLocations) {
-          // load assembly reflection only first to get the full assembly name
-          var reflectionOnlyAssembly = Assembly.ReflectionOnlyLoadFrom(fileName);
-          // load the assembly into execution context using full assembly name
-          var asm = Assembly.Load(reflectionOnlyAssembly.FullName);
-          RegisterLoadedAssembly(asm);
-          // instantiate and load all plugins in this assembly
-          foreach (var plugin in GetInstances<IPlugin>(asm)) {
-            plugin.OnLoad();
-            loadedPlugins.Add(plugin);
-          }
-        }
-        OnPluginLoaded(new PluginInfrastructureEventArgs(desc));
-        desc.Load();
-      }
-    }
-
-    /// <summary>
-    /// Runs the application declared in <paramref name="appInfo"/>.
-    /// This is a synchronous call. When the application is terminated all plugins are unloaded.
-    /// </summary>
-    /// <param name="appInfo">Description of the application to run</param>
-    internal void Run(ApplicationDescription appInfo) {
-      IApplication runnablePlugin = (IApplication)Activator.CreateInstance(appInfo.DeclaringAssemblyName, appInfo.DeclaringTypeName).Unwrap();
-      try {
-        runnablePlugin.Run();
-      }
-      finally {
-        // unload plugins in reverse order
-        foreach (var plugin in loadedPlugins.Reverse<IPlugin>()) {
-          plugin.OnUnload();
-        }
-        foreach (var desc in PluginDescriptionIterator.IterateDependenciesBottomUp(plugins.Where(x => x.PluginState != PluginState.Disabled))) {
-          desc.Unload();
-          OnPluginUnloaded(new PluginInfrastructureEventArgs(desc));
-        }
-      }
-    }
-
-    /// <summary>
-    /// Loads raw assemblies dynamically from a byte array
-    /// </summary>
-    /// <param name="assemblies">bytearray of all raw assemblies that should be loaded</param>
-    internal void LoadAssemblies(IEnumerable<byte[]> assemblies) {
-      foreach (byte[] asm in assemblies) {
-        Assembly loadedAsm = Assembly.Load(asm);
-        RegisterLoadedAssembly(loadedAsm);
-      }
-    }
-
-    // register assembly in the assembly cache for the AssemblyResolveEvent
-    private void RegisterLoadedAssembly(Assembly asm) {
-      if (loadedAssemblies.ContainsKey(asm.FullName) || loadedAssemblies.ContainsKey(asm.GetName().Name)) {
-        throw new ArgumentException("An assembly with the name " + asm.GetName().Name + " has been registered already.", "asm");
-      }
-      loadedAssemblies.Add(asm.FullName, asm);
-      loadedAssemblies.Add(asm.GetName().Name, asm); // add short name
-    }
-
-    /// <summary>
-    /// Creates an instance of all types that are subtypes or the same type of the specified type and declared in <paramref name="plugin"/>
-    /// </summary>
-    /// <typeparam name="T">Most general type.</typeparam>
-    /// <returns>Enumerable of the created instances.</returns>
-    internal static IEnumerable<T> GetInstances<T>(IPluginDescription plugin) where T : class {
-      List<T> instances = new List<T>();
-      foreach (Type t in GetTypes(typeof(T), plugin, true)) {
-        T instance = null;
-        try { instance = (T)Activator.CreateInstance(t); }
-        catch { }
-        if (instance != null) instances.Add(instance);
-      }
-      return instances;
-    }
-    /// <summary>
-    /// Creates an instance of all types declared in assembly <paramref name="asm"/> that are subtypes or the same type of the specified <typeparamref name="type"/>. 
-    /// </summary>
-    /// <typeparam name="T">Most general type.</typeparam>
-    /// <param name="asm">Declaring assembly.</param>
-    /// <returns>Enumerable of the created instances.</returns>
-    private static IEnumerable<T> GetInstances<T>(Assembly asm) where T : class {
-      List<T> instances = new List<T>();
-      foreach (Type t in GetTypes(typeof(T), asm, true)) {
-        T instance = null;
-        try { instance = (T)Activator.CreateInstance(t); }
-        catch { }
-        if (instance != null) instances.Add(instance);
-      }
-      return instances;
-    }
-    /// <summary>
-    /// Creates an instance of all types that are subtypes or the same type of the specified type
-    /// </summary>
-    /// <typeparam name="T">Most general type.</typeparam>
-    /// <returns>Enumerable of the created instances.</returns>
-    internal static IEnumerable<T> GetInstances<T>() where T : class {
-      return from i in GetInstances(typeof(T))
-             select (T)i;
-    }
-
-    /// <summary>
-    /// Creates an instance of all types that are subtypes or the same type of the specified type
-    /// </summary>
-    /// <param name="type">Most general type.</param>
-    /// <returns>Enumerable of the created instances.</returns>
-    internal static IEnumerable<object> GetInstances(Type type) {
-      List<object> instances = new List<object>();
-      foreach (Type t in GetTypes(type, true)) {
-        object instance = null;
-        try { instance = Activator.CreateInstance(t); }
-        catch { }
-        if (instance != null) instances.Add(instance);
-      }
-      return instances;
-    }
-
-    /// <summary>
-    /// Finds all types that are subtypes or equal to the specified type.
-    /// </summary>
-    /// <param name="type">Most general type for which to find matching types.</param>
-    /// <param name="onlyInstantiable">Return only types that are instantiable 
-    /// (interfaces, abstract classes... are not returned)</param>
-    /// <returns>Enumerable of the discovered types.</returns>
-    internal static IEnumerable<Type> GetTypes(Type type, bool onlyInstantiable) {
-      return from asm in AppDomain.CurrentDomain.GetAssemblies()
-             from t in GetTypes(type, asm, onlyInstantiable)
-             select t;
-    }
-
-    internal static IEnumerable<Type> GetTypes(IEnumerable<Type> types, bool onlyInstantiable, bool assignableToAllTypes) {
-      IEnumerable<Type> result = GetTypes(types.First(), onlyInstantiable);
-      foreach (Type type in types.Skip(1)) {
-        IEnumerable<Type> discoveredTypes = GetTypes(type, onlyInstantiable);
-        if (assignableToAllTypes) result = result.Intersect(discoveredTypes);
-        else result = result.Union(discoveredTypes);
-      }
-      return result;
-    }
-
-    /// <summary>
-    /// Finds all types that are subtypes or equal to the specified type if they are part of the given
-    /// <paramref name="pluginDescription"/>.
-    /// </summary>
-    /// <param name="type">Most general type for which to find matching types.</param>
-    /// <param name="pluginDescription">The plugin the subtypes must be part of.</param>
-    /// <param name="onlyInstantiable">Return only types that are instantiable 
-    /// (interfaces, abstract classes... are not returned)</param>
-    /// <returns>Enumerable of the discovered types.</returns>
-    internal static IEnumerable<Type> GetTypes(Type type, IPluginDescription pluginDescription, bool onlyInstantiable) {
-      PluginDescription pluginDesc = (PluginDescription)pluginDescription;
-      return from asm in AppDomain.CurrentDomain.GetAssemblies()
-             where !IsDynamicAssembly(asm)
-             where pluginDesc.AssemblyLocations.Any(location => location.Equals(Path.GetFullPath(asm.Location), StringComparison.CurrentCultureIgnoreCase))
-             from t in GetTypes(type, asm, onlyInstantiable)
-             select t;
-    }
-
-    internal static IEnumerable<Type> GetTypes(IEnumerable<Type> types, IPluginDescription pluginDescription, bool onlyInstantiable, bool assignableToAllTypes) {
-      IEnumerable<Type> result = GetTypes(types.First(), pluginDescription, onlyInstantiable);
-      foreach (Type type in types.Skip(1)) {
-        IEnumerable<Type> discoveredTypes = GetTypes(type, pluginDescription, onlyInstantiable);
-        if (assignableToAllTypes) result = result.Intersect(discoveredTypes);
-        else result = result.Union(discoveredTypes);
-      }
-      return result;
-    }
-
-    private static bool IsDynamicAssembly(Assembly asm) {
-      return (asm is System.Reflection.Emit.AssemblyBuilder) || string.IsNullOrEmpty(asm.Location);
-    }
-
-    /// <summary>
-    /// Gets types that are assignable (same of subtype) to the specified type only from the given assembly.
-    /// </summary>
-    /// <param name="type">Most general type we want to find.</param>
-    /// <param name="assembly">Assembly that should be searched for types.</param>
-    /// <param name="onlyInstantiable">Return only types that are instantiable 
-    /// (interfaces, abstract classes...  are not returned)</param>
-    /// <returns>Enumerable of the discovered types.</returns>
-    private static IEnumerable<Type> GetTypes(Type type, Assembly assembly, bool onlyInstantiable) {
-      return from t in assembly.GetTypes()
-             where CheckTypeCompatibility(type, t)
-             where onlyInstantiable == false ||
-                (!t.IsAbstract && !t.IsInterface && !t.HasElementType)
-             where !IsNonDiscoverableType(t)
-             select BuildType(t, type);
-    }
-
-    private static bool IsNonDiscoverableType(Type t) {
-      return t.GetCustomAttributes(typeof(NonDiscoverableTypeAttribute), false).Any();
-    }
-
-    private static bool CheckTypeCompatibility(Type type, Type other) {
-      if (type.IsAssignableFrom(other))
-        return true;
-      if (type.IsGenericType && other.IsGenericType) {
-        try {
-          if (type.IsAssignableFrom(other.GetGenericTypeDefinition().MakeGenericType(type.GetGenericArguments())))
-            return true;
-        }
-        catch (Exception) { }
-      }
-      return false;
-    }
-    private static Type BuildType(Type type, Type protoType) {
-      if (type.IsGenericType && protoType.IsGenericType)
-        return type.GetGenericTypeDefinition().MakeGenericType(protoType.GetGenericArguments());
-      else
-        return type;
-    }
-
-    private void OnPluginLoaded(PluginInfrastructureEventArgs e) {
-      if (PluginLoaded != null) PluginLoaded(this, e);
-    }
-
-    private void OnPluginUnloaded(PluginInfrastructureEventArgs e) {
-      if (PluginUnloaded != null) PluginUnloaded(this, e);
-    }
-
-    // infinite lease time
+    /// infinite lease time
     /// <summary>
     /// Initializes the life time service with infinite lease time.
@@ -326,43 +48,4 @@
       return null;
     }
-
-    #region IApplicationManager Members
-
-    IEnumerable<T> IApplicationManager.GetInstances<T>() {
-      return GetInstances<T>();
-    }
-
-    IEnumerable<object> IApplicationManager.GetInstances(Type type) {
-      return GetInstances(type);
-    }
-
-    IEnumerable<Type> IApplicationManager.GetTypes(Type type, bool onlyInstantiable) {
-      return GetTypes(type, onlyInstantiable);
-    }
-    IEnumerable<Type> IApplicationManager.GetTypes(IEnumerable<Type> types, bool onlyInstantiable, bool assignableToAllTypes) {
-      return GetTypes(types, onlyInstantiable, assignableToAllTypes);
-    }
-
-    IEnumerable<Type> IApplicationManager.GetTypes(Type type, IPluginDescription plugin, bool onlyInstantiable) {
-      return GetTypes(type, plugin, onlyInstantiable);
-    }
-    IEnumerable<Type> IApplicationManager.GetTypes(IEnumerable<Type> types, IPluginDescription plugin, bool onlyInstantiable, bool assignableToAllTypes) {
-      return GetTypes(types, plugin, onlyInstantiable, assignableToAllTypes);
-    }
-
-
-    /// <summary>
-    /// Finds the plugin that declares the <paramref name="type">type</paramref>.
-    /// </summary>
-    /// <param name="type">The type of interest.</param>
-    /// <returns>The description of the plugin that declares the given type or null if the type has not been declared by a known plugin.</returns>
-    public IPluginDescription GetDeclaringPlugin(Type type) {
-      if (type == null) throw new ArgumentNullException("type");
-      foreach (PluginDescription info in Plugins) {
-        if (info.AssemblyLocations.Contains(Path.GetFullPath(type.Assembly.Location))) return info;
-      }
-      return null;
-    }
-    #endregion
   }
 }
Index: branches/histogram/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj
===================================================================
--- branches/histogram/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj	(revision 6194)
+++ branches/histogram/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj	(revision 6195)
@@ -220,4 +220,5 @@
     <Compile Include="BaseClasses\ApplicationBase.cs" />
     <Compile Include="BaseClasses\PluginBase.cs" />
+    <Compile Include="SandboxApplicationManager.cs" />
     <Compile Include="DefaultApplicationManager.cs" />
     <Compile Include="ErrorHandling\ErrorDialog.cs">
Index: branches/histogram/HeuristicLab.PluginInfrastructure/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.PluginInfrastructure/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.PluginInfrastructure/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -55,3 +55,3 @@
 //
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.PluginInfrastructure/3.3/SandboxApplicationManager.cs
===================================================================
--- branches/histogram/HeuristicLab.PluginInfrastructure/3.3/SandboxApplicationManager.cs	(revision 6195)
+++ branches/histogram/HeuristicLab.PluginInfrastructure/3.3/SandboxApplicationManager.cs	(revision 6195)
@@ -0,0 +1,353 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using HeuristicLab.PluginInfrastructure.Manager;
+
+namespace HeuristicLab.PluginInfrastructure {
+
+  /// <summary>
+  /// The SandboxApplicationManager provides properties to retrieve the list of available plugins and applications.
+  /// It also provides methods for type discovery and instantiation for types declared in plugins.
+  /// The SandboxApplicationManager is used in sandboxed Application Domains where permissions are restricted and
+  /// only partially-trusted code can be executed. 
+  /// </summary>
+  internal class SandboxApplicationManager : MarshalByRefObject, IApplicationManager {
+    /// <summary>
+    /// Fired when a plugin is loaded.
+    /// </summary>
+    internal event EventHandler<PluginInfrastructureEventArgs> PluginLoaded;
+    /// <summary>
+    /// Fired when a plugin is unloaded (when the application terminates).
+    /// </summary>
+    internal event EventHandler<PluginInfrastructureEventArgs> PluginUnloaded;
+
+    // cache for the AssemblyResolveEvent 
+    // which must be handled when assemblies are loaded dynamically after the application start
+    protected internal Dictionary<string, Assembly> loadedAssemblies;
+
+    private List<IPlugin> loadedPlugins;
+
+    private List<PluginDescription> plugins;
+    /// <summary>
+    /// Gets all plugins.
+    /// </summary>
+    public IEnumerable<IPluginDescription> Plugins {
+      get { return plugins.Cast<IPluginDescription>(); }
+    }
+
+    private List<ApplicationDescription> applications;
+    /// <summary>
+    /// Gets all installed applications.
+    /// </summary>
+    public IEnumerable<IApplicationDescription> Applications {
+      get { return applications.Cast<IApplicationDescription>(); }
+    }
+
+    internal SandboxApplicationManager()
+      : base() {
+      loadedAssemblies = new Dictionary<string, Assembly>();
+      loadedPlugins = new List<IPlugin>();
+    }
+
+    /// <summary>
+    /// Prepares the application domain for the execution of an HL application.
+    /// Pre-loads all <paramref name="plugins"/>.
+    /// </summary>
+    /// <param name="apps">Enumerable of available HL applications.</param>
+    /// <param name="plugins">Enumerable of plugins that should be pre-loaded.</param>  
+    internal void PrepareApplicationDomain(IEnumerable<ApplicationDescription> apps, IEnumerable<PluginDescription> plugins) {
+      this.plugins = new List<PluginDescription>(plugins);
+      this.applications = new List<ApplicationDescription>(apps);
+      ApplicationManager.RegisterApplicationManager(this);
+      LoadPlugins(plugins);
+    }
+
+    /// <summary>
+    /// Loads the <paramref name="plugins"/> into this application domain.
+    /// </summary>
+    /// <param name="plugins">Enumerable of plugins that should be loaded.</param>
+    private void LoadPlugins(IEnumerable<PluginDescription> plugins) {
+      // load all loadable plugins (all dependencies available) into the execution context
+      foreach (var desc in PluginDescriptionIterator.IterateDependenciesBottomUp(plugins.Where(x => x.PluginState != PluginState.Disabled))) {
+        foreach (string fileName in desc.AssemblyLocations) {
+          // load assembly reflection only first to get the full assembly name
+          var reflectionOnlyAssembly = Assembly.ReflectionOnlyLoadFrom(fileName);
+          // load the assembly into execution context using full assembly name
+          var asm = Assembly.Load(reflectionOnlyAssembly.FullName);
+          RegisterLoadedAssembly(asm);
+          // instantiate and load all plugins in this assembly
+          foreach (var plugin in GetInstances<IPlugin>(asm)) {
+            plugin.OnLoad();
+            loadedPlugins.Add(plugin);
+          }
+        }
+        OnPluginLoaded(new PluginInfrastructureEventArgs(desc));
+        desc.Load();
+      }
+    }
+
+    /// <summary>
+    /// Runs the application declared in <paramref name="appInfo"/>.
+    /// This is a synchronous call. When the application is terminated all plugins are unloaded.
+    /// </summary>
+    /// <param name="appInfo">Description of the application to run</param>
+    internal void Run(ApplicationDescription appInfo) {
+      IApplication runnablePlugin = (IApplication)Activator.CreateInstance(appInfo.DeclaringAssemblyName, appInfo.DeclaringTypeName).Unwrap();
+      try {
+        runnablePlugin.Run();
+      }
+      finally {
+        // unload plugins in reverse order
+        foreach (var plugin in loadedPlugins.Reverse<IPlugin>()) {
+          plugin.OnUnload();
+        }
+        foreach (var desc in PluginDescriptionIterator.IterateDependenciesBottomUp(plugins.Where(x => x.PluginState != PluginState.Disabled))) {
+          desc.Unload();
+          OnPluginUnloaded(new PluginInfrastructureEventArgs(desc));
+        }
+      }
+    }
+
+    /// <summary>
+    /// Loads raw assemblies dynamically from a byte array
+    /// </summary>
+    /// <param name="assemblies">bytearray of all raw assemblies that should be loaded</param>
+    internal void LoadAssemblies(IEnumerable<byte[]> assemblies) {
+      foreach (byte[] asm in assemblies) {
+        Assembly loadedAsm = Assembly.Load(asm);
+        RegisterLoadedAssembly(loadedAsm);
+      }
+    }
+
+    // register assembly in the assembly cache for the AssemblyResolveEvent
+    private void RegisterLoadedAssembly(Assembly asm) {
+      if (loadedAssemblies.ContainsKey(asm.FullName) || loadedAssemblies.ContainsKey(asm.GetName().Name)) {
+        throw new ArgumentException("An assembly with the name " + asm.GetName().Name + " has been registered already.", "asm");
+      }
+      loadedAssemblies.Add(asm.FullName, asm);
+      loadedAssemblies.Add(asm.GetName().Name, asm); // add short name
+    }
+
+    /// <summary>
+    /// Creates an instance of all types that are subtypes or the same type of the specified type and declared in <paramref name="plugin"/>
+    /// </summary>
+    /// <typeparam name="T">Most general type.</typeparam>
+    /// <returns>Enumerable of the created instances.</returns>
+    internal static IEnumerable<T> GetInstances<T>(IPluginDescription plugin) where T : class {
+      List<T> instances = new List<T>();
+      foreach (Type t in GetTypes(typeof(T), plugin, true)) {
+        T instance = null;
+        try { instance = (T)Activator.CreateInstance(t); }
+        catch { }
+        if (instance != null) instances.Add(instance);
+      }
+      return instances;
+    }
+    /// <summary>
+    /// Creates an instance of all types declared in assembly <paramref name="asm"/> that are subtypes or the same type of the specified <typeparamref name="type"/>. 
+    /// </summary>
+    /// <typeparam name="T">Most general type.</typeparam>
+    /// <param name="asm">Declaring assembly.</param>
+    /// <returns>Enumerable of the created instances.</returns>
+    private static IEnumerable<T> GetInstances<T>(Assembly asm) where T : class {
+      List<T> instances = new List<T>();
+      foreach (Type t in GetTypes(typeof(T), asm, true)) {
+        T instance = null;
+        try { instance = (T)Activator.CreateInstance(t); }
+        catch { }
+        if (instance != null) instances.Add(instance);
+      }
+      return instances;
+    }
+    /// <summary>
+    /// Creates an instance of all types that are subtypes or the same type of the specified type
+    /// </summary>
+    /// <typeparam name="T">Most general type.</typeparam>
+    /// <returns>Enumerable of the created instances.</returns>
+    internal static IEnumerable<T> GetInstances<T>() where T : class {
+      return from i in GetInstances(typeof(T))
+             select (T)i;
+    }
+
+    /// <summary>
+    /// Creates an instance of all types that are subtypes or the same type of the specified type
+    /// </summary>
+    /// <param name="type">Most general type.</param>
+    /// <returns>Enumerable of the created instances.</returns>
+    internal static IEnumerable<object> GetInstances(Type type) {
+      List<object> instances = new List<object>();
+      foreach (Type t in GetTypes(type, true)) {
+        object instance = null;
+        try { instance = Activator.CreateInstance(t); }
+        catch { }
+        if (instance != null) instances.Add(instance);
+      }
+      return instances;
+    }
+
+    /// <summary>
+    /// Finds all types that are subtypes or equal to the specified type.
+    /// </summary>
+    /// <param name="type">Most general type for which to find matching types.</param>
+    /// <param name="onlyInstantiable">Return only types that are instantiable 
+    /// (interfaces, abstract classes... are not returned)</param>
+    /// <returns>Enumerable of the discovered types.</returns>
+    internal static IEnumerable<Type> GetTypes(Type type, bool onlyInstantiable) {
+      return from asm in AppDomain.CurrentDomain.GetAssemblies()
+             from t in GetTypes(type, asm, onlyInstantiable)
+             select t;
+    }
+
+    internal static IEnumerable<Type> GetTypes(IEnumerable<Type> types, bool onlyInstantiable, bool assignableToAllTypes) {
+      IEnumerable<Type> result = GetTypes(types.First(), onlyInstantiable);
+      foreach (Type type in types.Skip(1)) {
+        IEnumerable<Type> discoveredTypes = GetTypes(type, onlyInstantiable);
+        if (assignableToAllTypes) result = result.Intersect(discoveredTypes);
+        else result = result.Union(discoveredTypes);
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Finds all types that are subtypes or equal to the specified type if they are part of the given
+    /// <paramref name="pluginDescription"/>.
+    /// </summary>
+    /// <param name="type">Most general type for which to find matching types.</param>
+    /// <param name="pluginDescription">The plugin the subtypes must be part of.</param>
+    /// <param name="onlyInstantiable">Return only types that are instantiable 
+    /// (interfaces, abstract classes... are not returned)</param>
+    /// <returns>Enumerable of the discovered types.</returns>
+    internal static IEnumerable<Type> GetTypes(Type type, IPluginDescription pluginDescription, bool onlyInstantiable) {
+      PluginDescription pluginDesc = (PluginDescription)pluginDescription;
+      return from asm in AppDomain.CurrentDomain.GetAssemblies()
+             where !IsDynamicAssembly(asm)
+             where pluginDesc.AssemblyLocations.Any(location => location.Equals(Path.GetFullPath(asm.Location), StringComparison.CurrentCultureIgnoreCase))
+             from t in GetTypes(type, asm, onlyInstantiable)
+             select t;
+    }
+
+    internal static IEnumerable<Type> GetTypes(IEnumerable<Type> types, IPluginDescription pluginDescription, bool onlyInstantiable, bool assignableToAllTypes) {
+      IEnumerable<Type> result = GetTypes(types.First(), pluginDescription, onlyInstantiable);
+      foreach (Type type in types.Skip(1)) {
+        IEnumerable<Type> discoveredTypes = GetTypes(type, pluginDescription, onlyInstantiable);
+        if (assignableToAllTypes) result = result.Intersect(discoveredTypes);
+        else result = result.Union(discoveredTypes);
+      }
+      return result;
+    }
+
+    private static bool IsDynamicAssembly(Assembly asm) {
+      return (asm is System.Reflection.Emit.AssemblyBuilder) || string.IsNullOrEmpty(asm.Location);
+    }
+
+    /// <summary>
+    /// Gets types that are assignable (same of subtype) to the specified type only from the given assembly.
+    /// </summary>
+    /// <param name="type">Most general type we want to find.</param>
+    /// <param name="assembly">Assembly that should be searched for types.</param>
+    /// <param name="onlyInstantiable">Return only types that are instantiable 
+    /// (interfaces, abstract classes...  are not returned)</param>
+    /// <returns>Enumerable of the discovered types.</returns>
+    private static IEnumerable<Type> GetTypes(Type type, Assembly assembly, bool onlyInstantiable) {
+      return from t in assembly.GetTypes()
+             where CheckTypeCompatibility(type, t)
+             where onlyInstantiable == false ||
+                (!t.IsAbstract && !t.IsInterface && !t.HasElementType)
+             where !IsNonDiscoverableType(t)
+             select BuildType(t, type);
+    }
+
+
+    private static bool IsNonDiscoverableType(Type t) {
+      return t.GetCustomAttributes(typeof(NonDiscoverableTypeAttribute), false).Any();
+    }
+
+    private static bool CheckTypeCompatibility(Type type, Type other) {
+      if (type.IsAssignableFrom(other))
+        return true;
+      if (type.IsGenericType && other.IsGenericType) {
+        try {
+          if (type.IsAssignableFrom(other.GetGenericTypeDefinition().MakeGenericType(type.GetGenericArguments())))
+            return true;
+        }
+        catch (Exception) { }
+      }
+      return false;
+    }
+    private static Type BuildType(Type type, Type protoType) {
+      if (type.IsGenericType && protoType.IsGenericType)
+        return type.GetGenericTypeDefinition().MakeGenericType(protoType.GetGenericArguments());
+      else
+        return type;
+    }
+
+    private void OnPluginLoaded(PluginInfrastructureEventArgs e) {
+      if (PluginLoaded != null) PluginLoaded(this, e);
+    }
+
+    private void OnPluginUnloaded(PluginInfrastructureEventArgs e) {
+      if (PluginUnloaded != null) PluginUnloaded(this, e);
+    }
+
+    #region IApplicationManager Members
+
+    IEnumerable<T> IApplicationManager.GetInstances<T>() {
+      return GetInstances<T>();
+    }
+
+    IEnumerable<object> IApplicationManager.GetInstances(Type type) {
+      return GetInstances(type);
+    }
+
+    IEnumerable<Type> IApplicationManager.GetTypes(Type type, bool onlyInstantiable) {
+      return GetTypes(type, onlyInstantiable);
+    }
+    IEnumerable<Type> IApplicationManager.GetTypes(IEnumerable<Type> types, bool onlyInstantiable, bool assignableToAllTypes) {
+      return GetTypes(types, onlyInstantiable, assignableToAllTypes);
+    }
+
+    IEnumerable<Type> IApplicationManager.GetTypes(Type type, IPluginDescription plugin, bool onlyInstantiable) {
+      return GetTypes(type, plugin, onlyInstantiable);
+    }
+    IEnumerable<Type> IApplicationManager.GetTypes(IEnumerable<Type> types, IPluginDescription plugin, bool onlyInstantiable, bool assignableToAllTypes) {
+      return GetTypes(types, plugin, onlyInstantiable, assignableToAllTypes);
+    }
+
+    /// <summary>
+    /// Finds the plugin that declares the <paramref name="type">type</paramref>.
+    /// </summary>
+    /// <param name="type">The type of interest.</param>
+    /// <returns>The description of the plugin that declares the given type or null if the type has not been declared by a known plugin.</returns>
+    public IPluginDescription GetDeclaringPlugin(Type type) {
+      if (type == null) throw new ArgumentNullException("type");
+      foreach (PluginDescription info in Plugins) {
+        if (info.AssemblyLocations.Contains(Path.GetFullPath(type.Assembly.Location))) return info;
+      }
+      return null;
+    }
+    #endregion
+  }
+}
Index: branches/histogram/HeuristicLab.PluginInfrastructure/3.3/Sandboxing/SandboxManager.cs
===================================================================
--- branches/histogram/HeuristicLab.PluginInfrastructure/3.3/Sandboxing/SandboxManager.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.PluginInfrastructure/3.3/Sandboxing/SandboxManager.cs	(revision 6195)
@@ -21,77 +21,79 @@
 
 using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
 using System.Reflection;
 using System.Security;
 using System.Security.Permissions;
-using System.Security.Policy;
 using HeuristicLab.PluginInfrastructure.Manager;
 
 namespace HeuristicLab.PluginInfrastructure.Sandboxing {
-  public class SandboxManager {
+  public static class SandboxManager {
 
-    // static class
-    private SandboxManager() { }
+    /// <summary>
+    /// Creates an privileged sandbox, meaning that the executed code is fully trusted and permissions are not restricted.
+    /// This method is a fall back for trusted users in HeuristicLab Hive. 
+    /// </summary>    
+    public static AppDomain CreateAndInitPrivilegedSandbox(string appDomainName, string applicationBase, string configFilePath) {
+      PermissionSet pSet;
+      pSet = new PermissionSet(PermissionState.Unrestricted);
 
-    private static StrongName CreateStrongName(Assembly assembly) {
-      if (assembly == null)
-        throw new ArgumentNullException("assembly");
-
-      AssemblyName assemblyName = assembly.GetName();
-      Trace.Assert(assemblyName != null, "Could not get assembly name");
-
-      // get the public key blob
-      byte[] publicKey = assemblyName.GetPublicKey();
-      if (publicKey == null || publicKey.Length == 0)
-        throw new InvalidOperationException("Assembly is not strongly named");
-
-      StrongNamePublicKeyBlob keyBlob = new StrongNamePublicKeyBlob(publicKey);
-
-      // and create the StrongName
-      return new StrongName(keyBlob, assemblyName.Name, assemblyName.Version);
-    }
-
-    #region ISandboxManager Members
-    public static AppDomain CreateAndInitSandbox(string appDomainName, string applicationBase, string configFilePath) {
-      PermissionSet pset;
-
-      #region permission set for sandbox
-      // Uncomment code for sandboxed appdomain
-      //pset = new PermissionSet(PermissionState.None);
-      //pset.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
-      //pset.AddPermission(new ReflectionPermission(ReflectionPermissionFlag.MemberAccess));
-      //FileIOPermission fPerm = new FileIOPermission(PermissionState.None);
-
-      //foreach (IPluginDescription plugin in ApplicationManager.Manager.Plugins) {
-      //  fPerm.AddPathList(FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery, plugin.Files.ToArray());
-      //}
-
-      //pset.AddPermission(fPerm);
-      #endregion
-
-      #region permission set of unrestricted appdomain
-      // unrestricted appdomain 
-      pset = new PermissionSet(PermissionState.Unrestricted);
-      #endregion
-
-      AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation;
+      AppDomainSetup setup = new AppDomainSetup();
       setup.PrivateBinPath = applicationBase;
       setup.ApplicationBase = applicationBase;
       setup.ConfigurationFile = configFilePath;
 
-      AppDomain applicationDomain = AppDomain.CreateDomain(appDomainName, AppDomain.CurrentDomain.Evidence, setup, pset, CreateStrongName(Assembly.GetExecutingAssembly()));
       Type applicationManagerType = typeof(DefaultApplicationManager);
-      DefaultApplicationManager applicationManager =
-        (DefaultApplicationManager)applicationDomain.CreateInstanceAndUnwrap(applicationManagerType.Assembly.FullName, applicationManagerType.FullName, true, BindingFlags.NonPublic | BindingFlags.Instance, null, null, null, null);
+      AppDomain applicationDomain = AppDomain.CreateDomain(appDomainName, null, setup, pSet, null);
+      DefaultApplicationManager applicationManager = (DefaultApplicationManager)applicationDomain.CreateInstanceAndUnwrap(applicationManagerType.Assembly.FullName, applicationManagerType.FullName, true, BindingFlags.NonPublic | BindingFlags.Instance, null, null, null, null);
+
       PluginManager pm = new PluginManager(applicationBase);
       pm.DiscoverAndCheckPlugins();
-      ApplicationDescription[] apps = pm.Applications.Cast<ApplicationDescription>().ToArray();
-      PluginDescription[] plugins = pm.Plugins.Cast<PluginDescription>().ToArray();
-      applicationManager.PrepareApplicationDomain(apps, plugins);
+      applicationManager.PrepareApplicationDomain(pm.Applications, pm.Plugins);
+
       return applicationDomain;
     }
-    #endregion
+
+    /// <summary>
+    /// Creates a sandbox with restricted permissions.
+    /// Code that is executed in such an AppDomain is partially-trusted and is not allowed to call or override
+    /// methods that require full trust. 
+    /// </summary>    
+    public static AppDomain CreateAndInitSandbox(string appDomainName, string applicationBase, string configFilePath) {
+      PermissionSet pSet;
+
+      pSet = new PermissionSet(PermissionState.None);
+      pSet.AddPermission(new SecurityPermission(PermissionState.None));
+      pSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
+      pSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Infrastructure));
+      pSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.UnmanagedCode));
+      pSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.SerializationFormatter));
+      pSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.ControlAppDomain));
+      //needed for HeuristicLab.Persistence, see DynamicMethod Constructor (String, Type, array<Type []()>[], Type, Boolean)
+      pSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.ControlEvidence));
+
+      ReflectionPermission refPerm = new ReflectionPermission(PermissionState.Unrestricted);
+      pSet.AddPermission(refPerm);
+
+      FileIOPermission ioPerm = new FileIOPermission(PermissionState.None);
+      //allow path discovery for system drive, needed by HeuristicLab.Persistence: Serializer.BuildTypeCache() -> Assembly.CodeBase
+      ioPerm.AddPathList(FileIOPermissionAccess.PathDiscovery, Environment.SystemDirectory.Substring(0, 3));
+      //allow full access to the appdomain's base directory
+      ioPerm.AddPathList(FileIOPermissionAccess.AllAccess, applicationBase);
+      pSet.AddPermission(ioPerm);
+
+      AppDomainSetup setup = new AppDomainSetup();
+      setup.PrivateBinPath = applicationBase;
+      setup.ApplicationBase = applicationBase;
+      setup.ConfigurationFile = configFilePath;
+
+      Type applicationManagerType = typeof(SandboxApplicationManager);
+      AppDomain applicationDomain = AppDomain.CreateDomain(appDomainName, null, setup, pSet, null);
+      SandboxApplicationManager applicationManager = (SandboxApplicationManager)applicationDomain.CreateInstanceAndUnwrap(applicationManagerType.Assembly.FullName, applicationManagerType.FullName, true, BindingFlags.NonPublic | BindingFlags.Instance, null, null, null, null);
+
+      PluginManager pm = new PluginManager(applicationBase);
+      pm.DiscoverAndCheckPlugins();
+      applicationManager.PrepareApplicationDomain(pm.Applications, pm.Plugins);
+
+      return applicationDomain;
+    }
   }
 }
Index: branches/histogram/HeuristicLab.Problems.ArtificialAnt.Views/3.3/HeuristicLabProblemsArtificialAntViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.ArtificialAnt.Views/3.3/HeuristicLabProblemsArtificialAntViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.ArtificialAnt.Views/3.3/HeuristicLabProblemsArtificialAntViewsPlugin.cs.frame	(revision 6195)
@@ -26,14 +26,14 @@
 
 namespace HeuristicLab.Problems.ArtificialAnt.Views {
-  [Plugin("HeuristicLab.Problems.ArtificialAnt.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.ArtificialAnt.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.ArtificialAnt.Views-3.3.dll", PluginFileType.Assembly)]
-  [PluginDependency("HeuristicLab.Core", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Core.Views", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Data", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding","3.3.3.0")]
-  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views","3.3.3.0")]
-  [PluginDependency("HeuristicLab.MainForm", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Problems.ArtificialAnt", "3.3.3.0")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding","3.3")]
+  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views","3.3")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.ArtificialAnt", "3.3")]
   public class HeuristicLabProblemsArtificialAntViewsPlugin : PluginBase {
   }
Index: branches/histogram/HeuristicLab.Problems.ArtificialAnt.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.ArtificialAnt.Views/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.ArtificialAnt.Views/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.ArtificialAnt.Views/3.4/HeuristicLabProblemsArtificialAntViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.ArtificialAnt.Views/3.4/HeuristicLabProblemsArtificialAntViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.ArtificialAnt.Views/3.4/HeuristicLabProblemsArtificialAntViewsPlugin.cs.frame	(revision 6195)
@@ -28,12 +28,12 @@
   [Plugin("HeuristicLab.Problems.ArtificialAnt.Views","Provides views for the artificial ant problem.", "3.4.0.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.ArtificialAnt.Views-3.4.dll", PluginFileType.Assembly)]
-  [PluginDependency("HeuristicLab.Core", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Core.Views", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Data", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding","3.4.0.0")]
-  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views","3.4.0.0")]
-  [PluginDependency("HeuristicLab.MainForm", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Problems.ArtificialAnt", "3.4.0.0")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding","3.4")]
+  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views","3.4")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.ArtificialAnt", "3.4")]
   public class HeuristicLabProblemsArtificialAntViewsPlugin : PluginBase {
   }
Index: branches/histogram/HeuristicLab.Problems.ArtificialAnt/3.3/HeuristicLabProblemsArtificialAntPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.ArtificialAnt/3.3/HeuristicLabProblemsArtificialAntPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.ArtificialAnt/3.3/HeuristicLabProblemsArtificialAntPlugin.cs.frame	(revision 6195)
@@ -26,16 +26,16 @@
 
 namespace HeuristicLab.Problems.ArtificialAnt {
-  [Plugin("HeuristicLab.Problems.ArtificialAnt", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.ArtificialAnt", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.ArtificialAnt-3.3.dll", PluginFileType.Assembly)]
-  [PluginDependency("HeuristicLab.Collections", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Common", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Common.Resources", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Core", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Data", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding","3.3.3.0")]
-  [PluginDependency("HeuristicLab.Operators", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Optimization", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Parameters", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Persistence", "3.3.3.0")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding","3.3")]
+  [PluginDependency("HeuristicLab.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
   public class HeuristicLabProblemsArtificialAntPlugin : PluginBase {
   }
Index: branches/histogram/HeuristicLab.Problems.ArtificialAnt/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.ArtificialAnt/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.ArtificialAnt/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.ArtificialAnt/3.4/HeuristicLabProblemsArtificialAntPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.ArtificialAnt/3.4/HeuristicLabProblemsArtificialAntPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.ArtificialAnt/3.4/HeuristicLabProblemsArtificialAntPlugin.cs.frame	(revision 6195)
@@ -28,14 +28,14 @@
   [Plugin("HeuristicLab.Problems.ArtificialAnt","Provides all necessary classes to solve the artificial ant problem.", "3.4.0.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.ArtificialAnt-3.4.dll", PluginFileType.Assembly)]
-  [PluginDependency("HeuristicLab.Collections", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Common", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Common.Resources", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Core", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Data", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding","3.4.0.0")]
-  [PluginDependency("HeuristicLab.Operators", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Optimization", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Parameters", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Persistence", "3.3.3.0")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding","3.4")]
+  [PluginDependency("HeuristicLab.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
   public class HeuristicLabProblemsArtificialAntPlugin : PluginBase {
   }
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Classification.Views/3.3/HeuristicLabProblemsDataAnalysisClassificationViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Classification.Views/3.3/HeuristicLabProblemsDataAnalysisClassificationViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Classification.Views/3.3/HeuristicLabProblemsDataAnalysisClassificationViewsPlugin.cs.frame	(revision 6195)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Problems.DataAnalysis.Classification.Views {
-  [Plugin("HeuristicLab.Problems.DataAnalysis.Classification.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.DataAnalysis.Classification.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.DataAnalysis.Classification.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Common", "3.3")]
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Classification.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Classification.Views/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Classification.Views/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Classification/3.3/HeuristicLabProblemsDataAnalysisClassificationPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Classification/3.3/HeuristicLabProblemsDataAnalysisClassificationPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Classification/3.3/HeuristicLabProblemsDataAnalysisClassificationPlugin.cs.frame	(revision 6195)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Problems.DataAnalysis.Classification {
-  [Plugin("HeuristicLab.Problems.DataAnalysis.Classification", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.DataAnalysis.Classification", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.DataAnalysis.Classification-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Classification/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Classification/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Classification/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Regression/3.3/HeuristicLabProblemsDataAnalysisRegressionPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Regression/3.3/HeuristicLabProblemsDataAnalysisRegressionPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Regression/3.3/HeuristicLabProblemsDataAnalysisRegressionPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
 
 namespace HeuristicLab.Problems.DataAnalysis.Regression {
-  [Plugin("HeuristicLab.Problems.DataAnalysis.Regression", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.DataAnalysis.Regression", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.DataAnalysis.Regression-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.ALGLIB", "3.1")]
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLabProblemsDataAnalysisSymbolicClassificationPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLabProblemsDataAnalysisSymbolicClassificationPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLabProblemsDataAnalysisSymbolicClassificationPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Classification {
-  [Plugin("HeuristicLab.Problems.DataAnalysis.Symbolic.Classification","Provides classes to perform a symbolic classification (single- or multiobjective).", "3.4.0.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.DataAnalysis.Symbolic.Classification","Provides classes to perform symbolic classification (single- or multiobjective).", "3.4.0.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.ALGLIB", "3.1")]
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/Properties/AssemblyInfo.frame	(revision 6195)
@@ -27,5 +27,5 @@
 // associated with an assembly.
 [assembly: AssemblyTitle("HeuristicLab.Problems.DataAnalysis.Symbolic.Classification")]
-[assembly: AssemblyDescription("Provides classes to perform a symbolic classification (single- or multiobjective).")]
+[assembly: AssemblyDescription("Provides classes to perform symbolic classification (single- or multiobjective).")]
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("")]
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLabProblemsDataAnalysisSymbolicRegressionPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLabProblemsDataAnalysisSymbolicRegressionPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLabProblemsDataAnalysisSymbolicRegressionPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression {
-  [Plugin("HeuristicLab.Problems.DataAnalysis.Symbolic.Regression","Provides classes to perform a symbolic regression (single- or multiobjective).", "3.4.0.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.DataAnalysis.Symbolic.Regression","Provides classes to perform symbolic regression (single- or multiobjective).", "3.4.0.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.ALGLIB", "3.1")]
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/Properties/AssemblyInfo.frame	(revision 6195)
@@ -27,5 +27,5 @@
 // associated with an assembly.
 [assembly: AssemblyTitle("HeuristicLab.Problems.DataAnalysis.Symbolic.Regression")]
-[assembly: AssemblyDescription("Provides classes to perform a symbolic regression (single- or multiobjective).")]
+[assembly: AssemblyDescription("Provides classes to perform symbolic regression (single- or multiobjective).")]
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("")]
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs	(revision 6195)
@@ -29,5 +29,4 @@
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views;
 using HeuristicLab.MainForm.WindowsForms;
-using HeuristicLab.Problems.DataAnalysis.Symbolic;
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
@@ -35,4 +34,5 @@
     private Dictionary<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode> replacementNodes;
     private Dictionary<ISymbolicExpressionTreeNode, double> nodeImpacts;
+    private bool updateInProgress = false;
 
     public InteractiveSymbolicDataAnalysisSolutionSimplifierView() {
@@ -91,14 +91,17 @@
         nodeImpacts = CalculateImpactValues(Content.Model.SymbolicExpressionTree);
 
-        // automatically fold all branches with impact = 1
-        List<ISymbolicExpressionTreeNode> nodeList = Content.Model.SymbolicExpressionTree.Root.GetSubtree(0).IterateNodesPrefix().ToList();
-        foreach (var parent in nodeList) {
-          for (int subTreeIndex = 0; subTreeIndex < parent.SubtreesCount; subTreeIndex++) {
-            var child = parent.GetSubtree(subTreeIndex);
-            if (!(child.Symbol is Constant) && nodeImpacts[child].IsAlmost(0.0)) {
-              SwitchNodeWithReplacementNode(parent, subTreeIndex);
+        if (!updateInProgress) {
+          // automatically fold all branches with impact = 1
+          List<ISymbolicExpressionTreeNode> nodeList = Content.Model.SymbolicExpressionTree.Root.GetSubtree(0).IterateNodesPrefix().ToList();
+          foreach (var parent in nodeList) {
+            for (int subTreeIndex = 0; subTreeIndex < parent.SubtreesCount; subTreeIndex++) {
+              var child = parent.GetSubtree(subTreeIndex);
+              if (!(child.Symbol is Constant) && nodeImpacts[child].IsAlmost(0.0)) {
+                SwitchNodeWithReplacementNode(parent, subTreeIndex);
+              }
             }
           }
         }
+
         // show only interesting part of solution 
         if (tree.Root.SubtreesCount > 1)
@@ -131,6 +134,4 @@
           // only allow to replace nodes for which a replacement value is known (replacement value for ADF nodes are not available)
           if (subTree == visualTreeNode.SymbolicExpressionTreeNode && replacementNodes.ContainsKey(subTree)) {
-            double replacementImpact = nodeImpacts.ContainsKey(replacementNodes[subTree]) ? nodeImpacts[replacementNodes[subTree]] : 0.0;
-            double originalImpact = nodeImpacts.ContainsKey(subTree) ? nodeImpacts[subTree] : 0.0;
             SwitchNodeWithReplacementNode(treeNode, i);
 
@@ -140,11 +141,8 @@
             else
               this.treeChart.Tree = new SymbolicExpressionTree(tree.Root.GetSubtree(0).GetSubtree(0)); // 1st child of RPB
-            if (!(originalImpact.IsAlmost(0.0) && replacementImpact.IsAlmost(0.0))) {
-              // update everything after the change if necessary (impact != 0)            
-              UpdateModel(tree);
-            } else {
-              // both impacts are zero, so we only need to repaint the nodes 
-              PaintNodeImpacts();
-            }
+
+            updateInProgress = true;
+            UpdateModel(tree);
+            updateInProgress = false;
             return; // break all loops
           }
@@ -191,5 +189,5 @@
             visualTree.ToolTip += Environment.NewLine + "Replacement value: " + constantReplacementNode.Value;
           }
-        } 
+        }
       }
       this.PaintCollapsedNodes();
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisAlleleFrequencyAnalyzer.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisAlleleFrequencyAnalyzer.cs	(revision 6195)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisAlleleFrequencyAnalyzer.cs	(revision 6195)
@@ -0,0 +1,103 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Linq;
+using HeuristicLab.Analysis;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
+  [Item("SymbolicDataAnalysisAlleleFrequencyAnalyzer", "")]
+  [StorableClass]
+  public sealed class SymbolicDataAnalysisAlleleFrequencyAnalyzer : AlleleFrequencyAnalyzer<ISymbolicExpressionTree>, ISymbolicDataAnalysisAnalyzer {
+    private const string AlleleTreeDepthParameterName = "AlleleTreeDepth";
+
+    #region parameter properties
+    public IScopeTreeLookupParameter<ISymbolicExpressionTree> SymbolicExpressionTreeParameter {
+      get { return SolutionParameter; }
+    }
+
+    public ILookupParameter<Optimization.ResultCollection> ResultCollectionParameter {
+      get { return ResultsParameter; }
+    }
+
+    public IValueParameter<IntValue> AlleleTreeDepthParameter {
+      get { return (IFixedValueParameter<IntValue>)Parameters[AlleleTreeDepthParameterName]; }
+    }
+    #endregion
+    #region properties
+    public int AlleleTreeDepth {
+      get { return AlleleTreeDepthParameter.Value.Value; }
+      set { AlleleTreeDepthParameter.Value.Value = value; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    private SymbolicDataAnalysisAlleleFrequencyAnalyzer(bool deserializing) : base(deserializing) { }
+    private SymbolicDataAnalysisAlleleFrequencyAnalyzer(SymbolicDataAnalysisAlleleFrequencyAnalyzer original, Cloner cloner) : base(original, cloner) { }
+    public SymbolicDataAnalysisAlleleFrequencyAnalyzer()
+      : base() {
+      Parameters.Add(new FixedValueParameter<IntValue>(AlleleTreeDepthParameterName, "The depth of subtrees that should be considered as allele", new IntValue(2)));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SymbolicDataAnalysisAlleleFrequencyAnalyzer(this, cloner);
+    }
+
+    protected override Allele[] CalculateAlleles(ISymbolicExpressionTree solution) {
+      List<Allele> alleles = new List<Allele>();
+
+      foreach (var subtree in GetAllSubtreesOfDepth(solution, AlleleTreeDepth)) {
+        alleles.Add(GetAlleleFromSubtreeOfDepth(subtree, AlleleTreeDepth));
+      }
+      return alleles.ToArray();
+    }
+
+    private Allele GetAlleleFromSubtreeOfDepth(ISymbolicExpressionTreeNode tree, int d) {
+      string textualRepresentation = GetTextualRepresentationFromSubtreeOfDepth(tree, d);
+      return new Allele(textualRepresentation);
+    }
+
+    private string GetTextualRepresentationFromSubtreeOfDepth(ISymbolicExpressionTreeNode tree, int d) {
+      if (d == 0) return "";
+      StringBuilder builder = new StringBuilder();
+      builder.Append("(" + tree.ToString());
+      for (int i = 0; i < tree.SubtreesCount; i++) {
+        builder.Append(" " + GetTextualRepresentationFromSubtreeOfDepth(tree.GetSubtree(i), d - 1));
+      }
+      builder.Append(")");
+      return builder.ToString();
+    }
+
+    private IEnumerable<ISymbolicExpressionTreeNode> GetAllSubtreesOfDepth(ISymbolicExpressionTree solution, int d) {
+      return from node in solution.IterateNodesPostfix()
+             where node.GetDepth() >= d
+             select node;
+    }
+  }
+}
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisMultiObjectiveValidationAnalyzer.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisMultiObjectiveValidationAnalyzer.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisMultiObjectiveValidationAnalyzer.cs	(revision 6195)
@@ -74,4 +74,5 @@
     public SymbolicDataAnalysisMultiObjectiveValidationAnalyzer()
       : base() {
+      Parameters.Add(new ValueLookupParameter<IRandom>(RandomParameterName, "The random generator to use."));
       Parameters.Add(new LookupParameter<U>(ProblemDataParameterName, "The problem data of the symbolic data analysis problem."));
       Parameters.Add(new LookupParameter<T>(EvaluatorParameterName, "The operator to use for fitness evaluation on the validation partition."));
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 6195)
@@ -120,4 +120,5 @@
     </Compile>
     <Compile Include="Analyzers\SymbolicDataAnalysisVariableFrequencyAnalyzer.cs" />
+    <Compile Include="Analyzers\SymbolicDataAnalysisAlleleFrequencyAnalyzer.cs" />
     <Compile Include="Formatters\SymbolicDataAnalysisExpressionLatexFormatter.cs" />
     <Compile Include="Formatters\SymbolicDataAnalysisExpressionMATLABFormatter.cs" />
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs	(revision 6195)
@@ -202,4 +202,5 @@
       Operators.Add(new SymbolicDataAnalysisVariableFrequencyAnalyzer());
       Operators.Add(new MinAverageMaxSymbolicExpressionTreeLengthAnalyzer());
+      Operators.Add(new SymbolicDataAnalysisAlleleFrequencyAnalyzer());
       ParameterizeOperators();
     }
@@ -297,4 +298,7 @@
         op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
       }
+      foreach (var op in operators.OfType<ISymbolicDataAnalysisAnalyzer>()) {
+        op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
+      }
       foreach (var op in operators.OfType<ISymbolicDataAnalysisValidationAnalyzer<U, T>>()) {
         op.RelativeNumberOfEvaluatedSamplesParameter.ActualName = RelativeNumberOfEvaluatedSamplesParameter.Name;
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/ConstantTreeNode.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/ConstantTreeNode.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/ConstantTreeNode.cs	(revision 6195)
@@ -58,5 +58,5 @@
       base.ResetLocalParameters(random);
       var range = Symbol.MaxValue - Symbol.MinValue;
-      Value = random.NextDouble() * range - Symbol.MinValue;
+      Value = random.NextDouble() * range + Symbol.MinValue;
     }
 
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.3/HeuristicLabProblemsDataAnalysisViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.3/HeuristicLabProblemsDataAnalysisViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.3/HeuristicLabProblemsDataAnalysisViewsPlugin.cs.frame	(revision 6195)
@@ -26,18 +26,18 @@
 
 namespace HeuristicLab.Problems.DataAnalysis.Views {
-  [Plugin("HeuristicLab.Problems.DataAnalysis.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.DataAnalysis.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.DataAnalysis.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.ALGLIB","3.1.0.0")]
-  [PluginDependency("HeuristicLab.Common", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Core", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Core.Views", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Data", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Data.Views", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.MainForm", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Problems.DataAnalysis", "3.3.3.0")]
-  [PluginDependency("HeuristicLab.Problems.DataAnalysis.Regression", "3.3.3.0")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Data.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.DataAnalysis", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.DataAnalysis.Regression", "3.3")]
   [PluginDependency("HeuristicLab.Visualization.ChartControlsExtensions", "3.3")]
   public class HeuristicLabProblemsDataAnalysisViewsPlugin : PluginBase {
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj	(revision 6195)
@@ -158,4 +158,11 @@
       <DependentUpon>ClusteringSolutionView.cs</DependentUpon>
     </Compile>
+    <Compile Include="Interfaces\IRegressionEnsembleSolutionEvaluationView.cs" />
+    <Compile Include="RegressionEnsembleSolutionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="RegressionEnsembleSolutionView.Designer.cs">
+      <DependentUpon>RegressionEnsembleSolutionView.cs</DependentUpon>
+    </Compile>
     <Compile Include="DiscriminantFunctionClassificationSolutionView.cs">
       <SubType>UserControl</SubType>
@@ -186,4 +193,16 @@
     <Compile Include="RegressionSolutionView.Designer.cs">
       <DependentUpon>RegressionSolutionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Regression\RegressionEnsembleSolutionLineChartView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Regression\RegressionEnsembleSolutionLineChartView.Designer.cs">
+      <DependentUpon>RegressionEnsembleSolutionLineChartView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Regression\RegressionEnsembleSolutionScatterPlotView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Regression\RegressionEnsembleSolutionScatterPlotView.Designer.cs">
+      <DependentUpon>RegressionEnsembleSolutionScatterPlotView.cs</DependentUpon>
     </Compile>
     <Compile Include="Regression\RegressionSolutionEstimatedValuesView.cs">
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/Interfaces/IRegressionEnsembleSolutionEvaluationView.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/Interfaces/IRegressionEnsembleSolutionEvaluationView.cs	(revision 6195)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/Interfaces/IRegressionEnsembleSolutionEvaluationView.cs	(revision 6195)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+namespace HeuristicLab.Problems.DataAnalysis.Views {
+  public interface IRegressionEnsembleSolutionEvaluationView : IDataAnalysisSolutionEvaluationView {
+    new IRegressionEnsembleSolution Content { get; set; }
+  }
+}
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionLineChartView.Designer.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionLineChartView.Designer.cs	(revision 6195)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionLineChartView.Designer.cs	(revision 6195)
@@ -0,0 +1,84 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+namespace HeuristicLab.Problems.DataAnalysis.Views {
+  partial class RegressionEnsembleSolutionLineChartView {
+    /// <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() {
+      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+      System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+      this.chart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
+      ((System.ComponentModel.ISupportInitialize)(this.chart)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // chart
+      // 
+      chartArea1.Name = "ChartArea";
+      this.chart.ChartAreas.Add(chartArea1);
+      this.chart.Dock = System.Windows.Forms.DockStyle.Fill;
+      legend1.Alignment = System.Drawing.StringAlignment.Center;
+      legend1.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
+      legend1.Name = "Default";
+      this.chart.Legends.Add(legend1);
+      this.chart.Location = new System.Drawing.Point(0, 0);
+      this.chart.Name = "chart";
+      this.chart.Size = new System.Drawing.Size(358, 225);
+      this.chart.TabIndex = 0;
+      this.chart.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.Chart_MouseDoubleClick);
+      // 
+      // LineChartView
+      // 
+      this.AllowDrop = true;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.chart);
+      this.Name = "LineChartView";
+      this.Size = new System.Drawing.Size(358, 225);
+      ((System.ComponentModel.ISupportInitialize)(this.chart)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart chart;
+  }
+}
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionLineChartView.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionLineChartView.cs	(revision 6195)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionLineChartView.cs	(revision 6195)
@@ -0,0 +1,172 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+using System;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+using System.Windows.Forms.DataVisualization.Charting;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Problems.DataAnalysis.Views {
+  [View("Line Chart")]
+  [Content(typeof(IRegressionEnsembleSolution))]
+  public partial class RegressionEnsembleSolutionLineChartView : ItemView, IRegressionEnsembleSolutionEvaluationView {
+    private const string TARGETVARIABLE_SERIES_NAME = "TargetVariable";
+    private const string ESTIMATEDTRAININGVALUES_SERIES_NAME = "EstimatedValues (training)";
+    private const string ESTIMATEDTESTVALUES_SERIES_NAME = "EstimatedValues (test)";
+
+    public new IRegressionEnsembleSolution Content {
+      get { return (IRegressionEnsembleSolution)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public RegressionEnsembleSolutionLineChartView()
+      : base() {
+      InitializeComponent();
+      //configure axis
+      this.chart.CustomizeAllChartAreas();
+      this.chart.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
+      this.chart.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
+      this.chart.ChartAreas[0].CursorX.Interval = 1;
+
+      this.chart.ChartAreas[0].CursorY.IsUserSelectionEnabled = true;
+      this.chart.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
+      this.chart.ChartAreas[0].CursorY.Interval = 0;
+    }
+
+    private void RedrawChart() {
+      this.chart.Series.Clear();
+      if (Content != null) {
+        this.chart.Series.Add(TARGETVARIABLE_SERIES_NAME);
+        this.chart.Series[TARGETVARIABLE_SERIES_NAME].LegendText = Content.ProblemData.TargetVariable;
+        this.chart.Series[TARGETVARIABLE_SERIES_NAME].ChartType = SeriesChartType.FastLine;
+        this.chart.Series[TARGETVARIABLE_SERIES_NAME].Points.DataBindY(Content.ProblemData.Dataset.GetVariableValues(Content.ProblemData.TargetVariable));
+        this.UpdateStripLines();
+
+        var trainingIndizes = Enumerable.Range(Content.ProblemData.TrainingPartition.Start,
+          Content.ProblemData.TrainingPartition.End - Content.ProblemData.TrainingPartition.Start).ToArray();
+        var testIndizes = Enumerable.Range(Content.ProblemData.TestPartition.Start,
+          Content.ProblemData.TestPartition.End - Content.ProblemData.TestPartition.Start).ToArray();
+        this.chart.Series.Add(ESTIMATEDTRAININGVALUES_SERIES_NAME);
+        this.chart.Series[ESTIMATEDTRAININGVALUES_SERIES_NAME].LegendText = Content.ItemName;
+        this.chart.Series[ESTIMATEDTRAININGVALUES_SERIES_NAME].ChartType = SeriesChartType.FastLine;
+        this.chart.Series[ESTIMATEDTRAININGVALUES_SERIES_NAME].Points.DataBindXY(trainingIndizes, Content.EstimatedTrainingValues.ToArray());
+        this.chart.Series[ESTIMATEDTRAININGVALUES_SERIES_NAME].Tag = Content;
+
+        this.chart.Series.Add(ESTIMATEDTESTVALUES_SERIES_NAME);
+        this.chart.Series[ESTIMATEDTESTVALUES_SERIES_NAME].LegendText = Content.ItemName;
+        this.chart.Series[ESTIMATEDTESTVALUES_SERIES_NAME].ChartType = SeriesChartType.FastLine;
+        this.chart.Series[ESTIMATEDTESTVALUES_SERIES_NAME].Points.DataBindXY(testIndizes, Content.EstimatedTestValues.ToArray());
+        this.chart.Series[ESTIMATEDTESTVALUES_SERIES_NAME].Tag = Content;
+        UpdateCursorInterval();
+      }
+    }
+
+    private void UpdateCursorInterval() {
+      var estimatedValues = this.chart.Series[ESTIMATEDTRAININGVALUES_SERIES_NAME].Points.Select(x => x.YValues[0]).DefaultIfEmpty(1.0);
+      var targetValues = this.chart.Series[TARGETVARIABLE_SERIES_NAME].Points.Select(x => x.YValues[0]).DefaultIfEmpty(1.0);
+      double estimatedValuesRange = estimatedValues.Max() - estimatedValues.Min();
+      double targetValuesRange = targetValues.Max() - targetValues.Min();
+      double interestingValuesRange = Math.Min(Math.Max(targetValuesRange, 1.0), Math.Max(estimatedValuesRange, 1.0));
+      double digits = (int)Math.Log10(interestingValuesRange) - 3;
+      double yZoomInterval = Math.Max(Math.Pow(10, digits), 10E-5);
+      this.chart.ChartAreas[0].CursorY.Interval = yZoomInterval;
+    }
+
+    #region events
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ModelChanged += new EventHandler(Content_ModelChanged);
+      Content.ProblemDataChanged += new EventHandler(Content_ProblemDataChanged);
+    }
+    protected override void DeregisterContentEvents() {
+      base.DeregisterContentEvents();
+      Content.ModelChanged -= new EventHandler(Content_ModelChanged);
+      Content.ProblemDataChanged -= new EventHandler(Content_ProblemDataChanged);
+    }
+
+    private void Content_ProblemDataChanged(object sender, EventArgs e) {
+      RedrawChart();
+    }
+
+    private void Content_ModelChanged(object sender, EventArgs e) {
+      UpdateEstimatedValuesLineChart();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      RedrawChart();
+    }
+
+    private void UpdateEstimatedValuesLineChart() {
+      if (InvokeRequired) Invoke((Action)UpdateEstimatedValuesLineChart);
+      else {
+        if (this.chart.Series.Count > 0) {
+          Series trainingSeries = this.chart.Series[ESTIMATEDTRAININGVALUES_SERIES_NAME];
+          if (trainingSeries != null) {
+            trainingSeries.Points.DataBindY(Content.EstimatedTrainingValues.ToArray());
+            trainingSeries.LegendText = Content.ItemName;
+          }
+          Series testSeries = this.chart.Series[ESTIMATEDTESTVALUES_SERIES_NAME];
+          if (testSeries != null) {
+            testSeries.Points.DataBindY(Content.EstimatedTestValues.ToArray());
+            testSeries.LegendText = Content.ItemName;
+          }
+          this.UpdateStripLines();
+          UpdateCursorInterval();
+        }
+      }
+    }
+
+    private void Chart_MouseDoubleClick(object sender, MouseEventArgs e) {
+      HitTestResult result = chart.HitTest(e.X, e.Y);
+      if (result.ChartArea != null && (result.ChartElementType == ChartElementType.PlottingArea ||
+                                       result.ChartElementType == ChartElementType.Gridlines) ||
+                                       result.ChartElementType == ChartElementType.StripLines) {
+        foreach (var axis in result.ChartArea.Axes)
+          axis.ScaleView.ZoomReset(int.MaxValue);
+      }
+    }
+    #endregion
+
+    private void UpdateStripLines() {
+      //this.chart.ChartAreas[0].AxisX.StripLines.Clear();
+      //this.CreateAndAddStripLine("Training", Color.FromArgb(20, Color.Green),
+      //  Content.ProblemData.TrainingPartition.Start,
+      //  Content.ProblemData.TrainingPartition.End);
+      //this.CreateAndAddStripLine("Test", Color.FromArgb(20, Color.Red),
+      //  Content.ProblemData.TestPartition.Start,
+      //  Content.ProblemData.TestPartition.End);
+    }
+
+    private void CreateAndAddStripLine(string title, Color c, int start, int end) {
+      //StripLine stripLine = new StripLine();
+      //stripLine.BackColor = c;
+      //stripLine.Text = title;
+      //stripLine.Font = new Font("Times New Roman", 12, FontStyle.Bold);
+      //stripLine.StripWidth = end - start;
+      //stripLine.IntervalOffset = start;
+      //this.chart.ChartAreas[0].AxisX.StripLines.Add(stripLine);
+    }
+  }
+}
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionScatterPlotView.Designer.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionScatterPlotView.Designer.cs	(revision 6195)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionScatterPlotView.Designer.cs	(revision 6195)
@@ -0,0 +1,86 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Problems.DataAnalysis.Views {
+  partial class RegressionEnsembleSolutionScatterPlotView {
+    /// <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() {
+      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+      System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+      this.chart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
+      ((System.ComponentModel.ISupportInitialize)(this.chart)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // chart
+      // 
+      chartArea1.Name = "ChartArea";
+      this.chart.ChartAreas.Add(chartArea1);
+      this.chart.Dock = System.Windows.Forms.DockStyle.Fill;
+      legend1.Alignment = System.Drawing.StringAlignment.Center;
+      legend1.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
+      legend1.Name = "Default";
+      this.chart.Legends.Add(legend1);
+      this.chart.Location = new System.Drawing.Point(0, 0);
+      this.chart.Name = "chart";
+      this.chart.Size = new System.Drawing.Size(527, 392);
+      this.chart.TabIndex = 1;
+      this.chart.MouseMove += new System.Windows.Forms.MouseEventHandler(this.chart_MouseMove);
+      this.chart.MouseDown += new System.Windows.Forms.MouseEventHandler(this.chart_MouseDown);
+      this.chart.CustomizeLegend += new System.EventHandler<System.Windows.Forms.DataVisualization.Charting.CustomizeLegendEventArgs>(chart_CustomizeLegend);
+      // 
+      // ScatterPlotView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.chart);
+      this.Name = "ScatterPlotView";
+      this.AllowDrop = true;
+      this.Size = new System.Drawing.Size(527, 392);
+      ((System.ComponentModel.ISupportInitialize)(this.chart)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart chart;
+  }
+}
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionScatterPlotView.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionScatterPlotView.cs	(revision 6195)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionScatterPlotView.cs	(revision 6195)
@@ -0,0 +1,228 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+using System.Windows.Forms.DataVisualization.Charting;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Problems.DataAnalysis.Views {
+  [View("Scatter Plot")]
+  [Content(typeof(IRegressionEnsembleSolution))]
+  public partial class RegressionEnsembleSolutionScatterPlotView : ItemView, IRegressionEnsembleSolutionEvaluationView {
+    private const string ALL_SERIES = "All samples";
+    private const string TRAINING_SERIES = "Training samples";
+    private const string TEST_SERIES = "Test samples";
+
+    public new IRegressionEnsembleSolution Content {
+      get { return (IRegressionEnsembleSolution)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public RegressionEnsembleSolutionScatterPlotView()
+      : base() {
+      InitializeComponent();
+
+      this.chart.Series.Add(ALL_SERIES);
+      this.chart.Series[ALL_SERIES].LegendText = ALL_SERIES;
+      this.chart.Series[ALL_SERIES].ChartType = SeriesChartType.FastPoint;
+
+      this.chart.Series.Add(TRAINING_SERIES);
+      this.chart.Series[TRAINING_SERIES].LegendText = TRAINING_SERIES;
+      this.chart.Series[TRAINING_SERIES].ChartType = SeriesChartType.FastPoint;
+      this.chart.Series[TRAINING_SERIES].Points.Add(1.0);
+
+      this.chart.Series.Add(TEST_SERIES);
+      this.chart.Series[TEST_SERIES].LegendText = TEST_SERIES;
+      this.chart.Series[TEST_SERIES].ChartType = SeriesChartType.FastPoint;
+
+      this.chart.TextAntiAliasingQuality = TextAntiAliasingQuality.High;
+      this.chart.AxisViewChanged += new EventHandler<System.Windows.Forms.DataVisualization.Charting.ViewEventArgs>(chart_AxisViewChanged);
+
+      //configure axis 
+      this.chart.CustomizeAllChartAreas();
+      this.chart.ChartAreas[0].AxisX.Title = "Estimated Values";
+      this.chart.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
+      this.chart.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
+      this.chart.ChartAreas[0].CursorX.Interval = 1;
+      this.chart.ChartAreas[0].CursorY.Interval = 1;
+
+      this.chart.ChartAreas[0].AxisY.Title = "Target Values";
+      this.chart.ChartAreas[0].CursorY.IsUserSelectionEnabled = true;
+      this.chart.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
+      this.chart.ChartAreas[0].AxisY.IsStartedFromZero = true;
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ModelChanged += new EventHandler(Content_ModelChanged);
+      Content.ProblemDataChanged += new EventHandler(Content_ProblemDataChanged);
+    }
+    protected override void DeregisterContentEvents() {
+      base.DeregisterContentEvents();
+      Content.ModelChanged -= new EventHandler(Content_ModelChanged);
+      Content.ProblemDataChanged -= new EventHandler(Content_ProblemDataChanged);
+    }
+
+
+    private void Content_ProblemDataChanged(object sender, EventArgs e) {
+      UpdateChart();
+    }
+    private void Content_ModelChanged(object sender, EventArgs e) {
+      UpdateSeries();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      UpdateChart();
+    }
+
+    private void UpdateChart() {
+      if (InvokeRequired) Invoke((Action)UpdateChart);
+      else {
+        if (Content != null) {
+          this.UpdateSeries();
+          if (!this.chart.Series.Any(s => s.Points.Count > 0))
+            this.ClearChart();
+        }
+      }
+    }
+
+    private void UpdateCursorInterval() {
+      var estimatedValues = this.chart.Series[ALL_SERIES].Points.Select(x => x.XValue).DefaultIfEmpty(1.0);
+      var targetValues = this.chart.Series[ALL_SERIES].Points.Select(x => x.YValues[0]).DefaultIfEmpty(1.0);
+      double estimatedValuesRange = estimatedValues.Max() - estimatedValues.Min();
+      double targetValuesRange = targetValues.Max() - targetValues.Min();
+      double interestingValuesRange = Math.Min(Math.Max(targetValuesRange, 1.0), Math.Max(estimatedValuesRange, 1.0));
+      double digits = (int)Math.Log10(interestingValuesRange) - 3;
+      double zoomInterval = Math.Max(Math.Pow(10, digits), 10E-5);
+      this.chart.ChartAreas[0].CursorX.Interval = zoomInterval;
+      this.chart.ChartAreas[0].CursorY.Interval = zoomInterval;
+    }
+
+
+    private void UpdateSeries() {
+      if (InvokeRequired) Invoke((Action)UpdateSeries);
+      else {
+        string targetVariableName = Content.ProblemData.TargetVariable;
+        Dataset dataset = Content.ProblemData.Dataset;
+        var trainingIndizes = Enumerable.Range(Content.ProblemData.TrainingPartition.Start, Content.ProblemData.TrainingPartition.End - Content.ProblemData.TrainingPartition.Start);
+        var testIndizes = Enumerable.Range(Content.ProblemData.TestPartition.Start, Content.ProblemData.TestPartition.End - Content.ProblemData.TestPartition.Start);
+        if (this.chart.Series[ALL_SERIES].Points.Count > 0)
+          this.chart.Series[ALL_SERIES].Points.DataBindXY(Content.EstimatedValues.ToArray(), "",
+            dataset.GetVariableValues(targetVariableName), "");
+        if (this.chart.Series[TRAINING_SERIES].Points.Count > 0)
+          this.chart.Series[TRAINING_SERIES].Points.DataBindXY(Content.EstimatedTrainingValues.ToArray(), "",
+            dataset.GetEnumeratedVariableValues(targetVariableName, trainingIndizes).ToArray(), "");
+        if (this.chart.Series[TEST_SERIES].Points.Count > 0)
+          this.chart.Series[TEST_SERIES].Points.DataBindXY(Content.EstimatedTestValues.ToArray(), "",
+           dataset.GetEnumeratedVariableValues(targetVariableName, testIndizes).ToArray(), "");
+
+        double max = Math.Max(Content.EstimatedValues.Max(), dataset.GetVariableValues(targetVariableName).Max());
+        double min = Math.Min(Content.EstimatedValues.Min(), dataset.GetVariableValues(targetVariableName).Min());
+
+        max = max + 0.2 * Math.Abs(max);
+        min = min - 0.2 * Math.Abs(min);
+
+        double interestingValuesRange = max - min;
+        int digits = Math.Max(0, 3 - (int)Math.Log10(interestingValuesRange));
+
+        max = Math.Round(max, digits);
+        min = Math.Round(min, digits);
+
+        this.chart.ChartAreas[0].AxisX.Maximum = max;
+        this.chart.ChartAreas[0].AxisX.Minimum = min;
+        this.chart.ChartAreas[0].AxisY.Maximum = max;
+        this.chart.ChartAreas[0].AxisY.Minimum = min;
+        UpdateCursorInterval();
+      }
+    }
+
+    private void ClearChart() {
+      this.chart.Series[ALL_SERIES].Points.Clear();
+      this.chart.Series[TRAINING_SERIES].Points.Clear();
+      this.chart.Series[TEST_SERIES].Points.Clear();
+    }
+
+    private void ToggleSeriesData(Series series) {
+      if (series.Points.Count > 0) {  //checks if series is shown
+        if (this.chart.Series.Any(s => s != series && s.Points.Count > 0)) {
+          series.Points.Clear();
+        }
+      } else if (Content != null) {
+        string targetVariableName = Content.ProblemData.TargetVariable;
+
+        IEnumerable<double> predictedValues = null;
+        IEnumerable<double> targetValues = null; 
+        var trainingIndizes = Enumerable.Range(Content.ProblemData.TrainingPartition.Start, Content.ProblemData.TrainingPartition.End - Content.ProblemData.TrainingPartition.Start);
+        var testIndizes = Enumerable.Range(Content.ProblemData.TestPartition.Start, Content.ProblemData.TestPartition.End - Content.ProblemData.TestPartition.Start);
+
+        switch (series.Name) {
+          case ALL_SERIES:
+            predictedValues = Content.EstimatedValues.ToArray();
+            targetValues = Content.ProblemData.Dataset.GetVariableValues(targetVariableName);
+            break;
+          case TRAINING_SERIES:
+            predictedValues = Content.EstimatedTrainingValues.ToArray();
+            targetValues = Content.ProblemData.Dataset.GetEnumeratedVariableValues(targetVariableName, trainingIndizes).ToArray();
+            break;
+          case TEST_SERIES:
+            predictedValues = Content.EstimatedTestValues.ToArray();
+            targetValues = Content.ProblemData.Dataset.GetEnumeratedVariableValues(targetVariableName, testIndizes).ToArray();
+            break;
+        }
+        series.Points.DataBindXY(predictedValues, "", targetValues, "");
+        this.chart.Legends[series.Legend].ForeColor = Color.Black;
+        UpdateCursorInterval();
+      }
+    }
+
+    private void chart_MouseDown(object sender, MouseEventArgs e) {
+      HitTestResult result = chart.HitTest(e.X, e.Y);
+      if (result.ChartElementType == ChartElementType.LegendItem) {
+        this.ToggleSeriesData(result.Series);
+      }
+    }
+
+    private void chart_MouseMove(object sender, MouseEventArgs e) {
+      HitTestResult result = chart.HitTest(e.X, e.Y);
+      if (result.ChartElementType == ChartElementType.LegendItem)
+        this.Cursor = Cursors.Hand;
+      else
+        this.Cursor = Cursors.Default;
+    }
+
+    private void chart_AxisViewChanged(object sender, System.Windows.Forms.DataVisualization.Charting.ViewEventArgs e) {
+      this.chart.ChartAreas[0].AxisX.ScaleView.Size = e.NewSize;
+      this.chart.ChartAreas[0].AxisY.ScaleView.Size = e.NewSize;
+    }
+
+    private void chart_CustomizeLegend(object sender, CustomizeLegendEventArgs e) {
+      e.LegendItems[0].Cells[1].ForeColor = this.chart.Series[ALL_SERIES].Points.Count == 0 ? Color.Gray : Color.Black;
+      e.LegendItems[1].Cells[1].ForeColor = this.chart.Series[TRAINING_SERIES].Points.Count == 0 ? Color.Gray : Color.Black;
+      e.LegendItems[2].Cells[1].ForeColor = this.chart.Series[TEST_SERIES].Points.Count == 0 ? Color.Gray : Color.Black;
+    }
+  }
+}
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionEstimatedValuesView.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionEstimatedValuesView.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionEstimatedValuesView.cs	(revision 6195)
@@ -92,6 +92,6 @@
             values[row, 0] = target[row];
             values[row, 1] = estimated[row];
-            values[row, 2] = estimated[row] - target[row];
-            values[row, 3] = estimated[row] / target[row] - 1;
+            values[row, 2] = Math.Abs(estimated[row] - target[row]);
+            values[row, 3] = Math.Abs(values[row, 2] / target[row]);
           }
 
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/RegressionEnsembleSolutionView.Designer.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/RegressionEnsembleSolutionView.Designer.cs	(revision 6195)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/RegressionEnsembleSolutionView.Designer.cs	(revision 6195)
@@ -0,0 +1,87 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Problems.DataAnalysis.Views {
+  partial class RegressionEnsembleSolutionView {
+    /// <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() {
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.itemsGroupBox.SuspendLayout();
+      this.detailsGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer
+      // 
+      // 
+      // itemsGroupBox
+      // 
+      this.itemsGroupBox.Text = "Regression Solution";
+      // 
+      // addButton
+      // 
+      this.toolTip.SetToolTip(this.addButton, "Add");
+      // 
+      // removeButton
+      // 
+      this.toolTip.SetToolTip(this.removeButton, "Remove");
+      // 
+      // RegressionSolutionView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "RegressionSolutionView";
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
+      this.itemsGroupBox.ResumeLayout(false);
+      this.detailsGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+  }
+}
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/RegressionEnsembleSolutionView.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/RegressionEnsembleSolutionView.cs	(revision 6195)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis.Views/3.4/RegressionEnsembleSolutionView.cs	(revision 6195)
@@ -0,0 +1,44 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.DataAnalysis.Views {
+  [View("RegressionEnsembleSolution View")]
+  [Content(typeof(RegressionEnsembleSolution), true)]
+  public partial class RegressionEnsembleSolutionView : DataAnalysisSolutionView {
+    public RegressionEnsembleSolutionView() {
+      InitializeComponent();
+
+      var regressionEnsembleSolutionEvaluationViewTypes = ApplicationManager.Manager.GetTypes(typeof(IRegressionEnsembleSolutionEvaluationView), true);
+      foreach (Type viewType in regressionEnsembleSolutionEvaluationViewTypes)
+        AddViewListViewItem(viewType);
+    }
+
+    public new RegressionSolution Content {
+      get { return (RegressionSolution)base.Content; }
+      set { base.Content = value; }
+    }
+  }
+}
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis/3.3/HeuristicLabProblemsDataAnalysisPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis/3.3/HeuristicLabProblemsDataAnalysisPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis/3.3/HeuristicLabProblemsDataAnalysisPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
 
 namespace HeuristicLab.Problems.DataAnalysis {
-  [Plugin("HeuristicLab.Problems.DataAnalysis", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.DataAnalysis", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.DataAnalysis-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.ALGLIB", "3.1")]
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj	(revision 6195)
@@ -109,4 +109,7 @@
   <ItemGroup>
     <Compile Include="DoubleLimit.cs" />
+    <Compile Include="Implementation\Classification\ClassificationEnsembleModel.cs">
+      <SubType>Code</SubType>
+    </Compile>
     <Compile Include="Implementation\Classification\ClassificationProblemData.cs" />
     <Compile Include="Implementation\Classification\ClassificationProblem.cs" />
@@ -115,10 +118,18 @@
     <Compile Include="Implementation\Clustering\ClusteringProblemData.cs" />
     <Compile Include="Implementation\Clustering\ClusteringSolution.cs" />
-    <Compile Include="Implementation\Classification\ClassificationEnsembleModel.cs" />
+    <Compile Include="Implementation\Regression\RegressionEnsembleModel.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Implementation\Regression\RegressionEnsembleSolution.cs" />
+    <Compile Include="Interfaces\Classification\IClassificationEnsembleModel.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Interfaces\Classification\IClassificationEnsembleSolution.cs" />
     <Compile Include="Interfaces\Classification\IDiscriminantFunctionThresholdCalculator.cs" />
-    <Compile Include="Interfaces\Classification\IClassificationEnsembleModel.cs" />
-    <Compile Include="Interfaces\Regression\IRegressionEnsembleModel.cs" />
+    <Compile Include="Interfaces\Regression\IRegressionEnsembleModel.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Interfaces\Regression\IRegressionEnsembleSolution.cs" />
     <Compile Include="OnlineCalculators\OnlineLinearScalingParameterCalculator.cs" />
-    <Compile Include="Implementation\Regression\RegressionEnsembleModel.cs" />
     <Compile Include="Implementation\Classification\DiscriminantFunctionClassificationModel.cs" />
     <Compile Include="Implementation\Classification\DiscriminantFunctionClassificationSolution.cs" />
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleSolution.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleSolution.cs	(revision 6195)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleSolution.cs	(revision 6195)
@@ -0,0 +1,90 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.DataAnalysis {
+  /// <summary>
+  /// Represents classification solutions that contain an ensemble of multiple classification models
+  /// </summary>
+  [StorableClass]
+  [Item("Classification Ensemble Solution", "A classification solution that contains an ensemble of multiple classification models")]
+  // [Creatable("Data Analysis")]
+  public class ClassificationEnsembleSolution : NamedItem, IClassificationEnsembleSolution {
+
+    [Storable]
+    private List<IClassificationModel> models;
+    public IEnumerable<IClassificationModel> Models {
+      get { return new List<IClassificationModel>(models); }
+    }
+    [StorableConstructor]
+    protected ClassificationEnsembleSolution(bool deserializing) : base(deserializing) { }
+    protected ClassificationEnsembleSolution(ClassificationEnsembleSolution original, Cloner cloner)
+      : base(original, cloner) {
+      this.models = original.Models.Select(m => cloner.Clone(m)).ToList();
+    }
+    public ClassificationEnsembleSolution(IEnumerable<IClassificationModel> models)
+      : base() {
+      this.name = ItemName;
+      this.description = ItemDescription;
+      this.models = new List<IClassificationModel>(models);
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ClassificationEnsembleSolution(this, cloner);
+    }
+
+    #region IClassificationEnsembleModel Members
+
+    public IEnumerable<IEnumerable<double>> GetEstimatedClassValueVectors(Dataset dataset, IEnumerable<int> rows) {
+      var estimatedValuesEnumerators = (from model in models
+                                        select model.GetEstimatedClassValues(dataset, rows).GetEnumerator())
+                                       .ToList();
+
+      while (estimatedValuesEnumerators.All(en => en.MoveNext())) {
+        yield return from enumerator in estimatedValuesEnumerators
+                     select enumerator.Current;
+      }
+    }
+
+    #endregion
+
+    #region IClassificationModel Members
+
+    public IEnumerable<double> GetEstimatedClassValues(Dataset dataset, IEnumerable<int> rows) {
+      foreach (var estimatedValuesVector in GetEstimatedClassValueVectors(dataset, rows)) {
+        // return the class which is most often occuring
+        yield return
+          estimatedValuesVector
+          .GroupBy(x => x)
+          .OrderBy(g => -g.Count())
+          .Select(g => g.Key)
+          .First();
+      }
+    }
+
+    #endregion
+  }
+}
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationProblemData.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationProblemData.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationProblemData.cs	(revision 6195)
@@ -37,4 +37,6 @@
     private const string ClassNamesParameterName = "ClassNames";
     private const string ClassificationPenaltiesParameterName = "ClassificationPenalties";
+    private const int MaximumNumberOfClass = 100;
+    private const int InspectedRowsToDetermineTargets = 500;
 
     #region default data
@@ -252,6 +254,8 @@
     public ClassificationProblemData(Dataset dataset, IEnumerable<string> allowedInputVariables, string targetVariable)
       : base(dataset, allowedInputVariables) {
-      var variables = InputVariables.Select(x => x.AsReadOnly()).ToList();
-      Parameters.Add(new ConstrainedValueParameter<StringValue>(TargetVariableParameterName, new ItemSet<StringValue>(variables), variables.Where(x => x.Value == targetVariable).First()));
+      var validTargetVariableValues = CheckVariablesForPossibleTargetVariables(dataset).Select(x => new StringValue(x).AsReadOnly()).ToList();
+      var target = validTargetVariableValues.Where(x => x.Value == targetVariable).DefaultIfEmpty(validTargetVariableValues.First()).First();
+
+      Parameters.Add(new ConstrainedValueParameter<StringValue>(TargetVariableParameterName, new ItemSet<StringValue>(validTargetVariableValues), target));
       Parameters.Add(new FixedValueParameter<StringMatrix>(ClassNamesParameterName, ""));
       Parameters.Add(new FixedValueParameter<DoubleMatrix>(ClassificationPenaltiesParameterName, ""));
@@ -260,4 +264,18 @@
       RegisterParameterEvents();
     }
+
+    private static IEnumerable<string> CheckVariablesForPossibleTargetVariables(Dataset dataset) {
+      var validTargetVariables = from v in dataset.VariableNames
+                                 let DistinctValues = dataset.Rows > InspectedRowsToDetermineTargets ? dataset.GetVariableValues(v, 0, InspectedRowsToDetermineTargets).Distinct().Count()
+                                                                        : dataset.GetVariableValues(v).Distinct().Count()
+                                 where DistinctValues < MaximumNumberOfClass
+                                 select v;
+
+      if (!validTargetVariables.Any())
+        throw new ArgumentException("Import of classification problem data was not successfull, because no target variable was found." +
+          " A target variable must have at most " + MaximumNumberOfClass + " distinct values to be applicable to classification.");
+      return validTargetVariables;
+    }
+
 
     private void ResetTargetVariableDependentMembers() {
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationSolution.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationSolution.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationSolution.cs	(revision 6195)
@@ -30,8 +30,8 @@
 namespace HeuristicLab.Problems.DataAnalysis {
   /// <summary>
-  /// Abstract base class for classification data analysis solutions
+  /// Represents a classification data analysis solution
   /// </summary>
   [StorableClass]
-  public abstract class ClassificationSolution : DataAnalysisSolution, IClassificationSolution {
+  public class ClassificationSolution : DataAnalysisSolution, IClassificationSolution {
     private const string TrainingAccuracyResultName = "Accuracy (training)";
     private const string TestAccuracyResultName = "Accuracy (test)";
@@ -67,4 +67,8 @@
       Add(new Result(TestAccuracyResultName, "Accuracy of the model on the test partition (percentage of correctly classified instances).", new PercentValue()));
       RecalculateResults();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ClassificationSolution(this, cloner);
     }
 
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Clustering/ClusteringSolution.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Clustering/ClusteringSolution.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Clustering/ClusteringSolution.cs	(revision 6195)
@@ -27,8 +27,8 @@
 namespace HeuristicLab.Problems.DataAnalysis {
   /// <summary>
-  /// Abstract base class for clustering data analysis solutions
+  /// Represents a clustering data analysis solution
   /// </summary>
   [StorableClass]
-  public abstract class ClusteringSolution : DataAnalysisSolution, IClusteringSolution {
+  public class ClusteringSolution : DataAnalysisSolution, IClusteringSolution {
 
     [StorableConstructor]
@@ -39,4 +39,8 @@
     public ClusteringSolution(IClusteringModel model, IClusteringProblemData problemData)
       : base(model, problemData) {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ClusteringSolution(this, cloner);
     }
 
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionEnsembleSolution.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionEnsembleSolution.cs	(revision 6195)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionEnsembleSolution.cs	(revision 6195)
@@ -0,0 +1,233 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Problems.DataAnalysis {
+  /// <summary>
+  /// Represents regression solutions that contain an ensemble of multiple regression models
+  /// </summary>
+  [StorableClass]
+  [Item("Regression Ensemble Solution", "A regression solution that contains an ensemble of multiple regression models")]
+  // [Creatable("Data Analysis")]
+  public class RegressionEnsembleSolution : RegressionSolution, IRegressionEnsembleSolution {
+    public new IRegressionEnsembleModel Model {
+      get { return (IRegressionEnsembleModel)base.Model; }
+    }
+
+    [Storable]
+    private Dictionary<IRegressionModel, IntRange> trainingPartitions;
+    [Storable]
+    private Dictionary<IRegressionModel, IntRange> testPartitions;
+
+    [StorableConstructor]
+    protected RegressionEnsembleSolution(bool deserializing) : base(deserializing) { }
+    protected RegressionEnsembleSolution(RegressionEnsembleSolution original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public RegressionEnsembleSolution(IEnumerable<IRegressionModel> models, IRegressionProblemData problemData)
+      : base(new RegressionEnsembleModel(models), problemData) {
+      trainingPartitions = new Dictionary<IRegressionModel, IntRange>();
+      testPartitions = new Dictionary<IRegressionModel, IntRange>();
+      foreach (var model in models) {
+        trainingPartitions[model] = (IntRange)problemData.TrainingPartition.Clone();
+        testPartitions[model] = (IntRange)problemData.TestPartition.Clone();
+      }
+      RecalculateResults();
+    }
+
+    public RegressionEnsembleSolution(IEnumerable<IRegressionModel> models, IRegressionProblemData problemData, IEnumerable<IntRange> trainingPartitions, IEnumerable<IntRange> testPartitions)
+      : base(new RegressionEnsembleModel(models), problemData) {
+      this.trainingPartitions = new Dictionary<IRegressionModel, IntRange>();
+      this.testPartitions = new Dictionary<IRegressionModel, IntRange>();
+      var modelEnumerator = models.GetEnumerator();
+      var trainingPartitionEnumerator = trainingPartitions.GetEnumerator();
+      var testPartitionEnumerator = testPartitions.GetEnumerator();
+      while (modelEnumerator.MoveNext() & trainingPartitionEnumerator.MoveNext() & testPartitionEnumerator.MoveNext()) {
+        this.trainingPartitions[modelEnumerator.Current] = (IntRange)trainingPartitionEnumerator.Current.Clone();
+        this.testPartitions[modelEnumerator.Current] = (IntRange)testPartitionEnumerator.Current.Clone();
+      }
+      if (modelEnumerator.MoveNext() | trainingPartitionEnumerator.MoveNext() | testPartitionEnumerator.MoveNext()) {
+        throw new ArgumentException();
+      }
+
+      RecalculateResults();
+    }
+
+    private void RecalculateResults() {
+      double[] estimatedTrainingValues = EstimatedTrainingValues.ToArray(); // cache values
+      var trainingIndizes = Enumerable.Range(ProblemData.TrainingPartition.Start,
+        ProblemData.TrainingPartition.End - ProblemData.TrainingPartition.Start);
+      IEnumerable<double> originalTrainingValues = ProblemData.Dataset.GetEnumeratedVariableValues(ProblemData.TargetVariable, trainingIndizes);
+      double[] estimatedTestValues = EstimatedTestValues.ToArray(); // cache values
+      IEnumerable<double> originalTestValues = ProblemData.Dataset.GetEnumeratedVariableValues(ProblemData.TargetVariable, ProblemData.TestIndizes);
+
+      OnlineCalculatorError errorState;
+      double trainingMSE = OnlineMeanSquaredErrorCalculator.Calculate(estimatedTrainingValues, originalTrainingValues, out errorState);
+      TrainingMeanSquaredError = errorState == OnlineCalculatorError.None ? trainingMSE : double.NaN;
+      double testMSE = OnlineMeanSquaredErrorCalculator.Calculate(estimatedTestValues, originalTestValues, out errorState);
+      TestMeanSquaredError = errorState == OnlineCalculatorError.None ? testMSE : double.NaN;
+
+      double trainingR2 = OnlinePearsonsRSquaredCalculator.Calculate(estimatedTrainingValues, originalTrainingValues, out errorState);
+      TrainingRSquared = errorState == OnlineCalculatorError.None ? trainingR2 : double.NaN;
+      double testR2 = OnlinePearsonsRSquaredCalculator.Calculate(estimatedTestValues, originalTestValues, out errorState);
+      TestRSquared = errorState == OnlineCalculatorError.None ? testR2 : double.NaN;
+
+      double trainingRelError = OnlineMeanAbsolutePercentageErrorCalculator.Calculate(estimatedTrainingValues, originalTrainingValues, out errorState);
+      TrainingRelativeError = errorState == OnlineCalculatorError.None ? trainingRelError : double.NaN;
+      double testRelError = OnlineMeanAbsolutePercentageErrorCalculator.Calculate(estimatedTestValues, originalTestValues, out errorState);
+      TestRelativeError = errorState == OnlineCalculatorError.None ? testRelError : double.NaN;
+
+      double trainingNMSE = OnlineNormalizedMeanSquaredErrorCalculator.Calculate(estimatedTrainingValues, originalTrainingValues, out errorState);
+      TrainingNormalizedMeanSquaredError = errorState == OnlineCalculatorError.None ? trainingNMSE : double.NaN;
+      double testNMSE = OnlineNormalizedMeanSquaredErrorCalculator.Calculate(estimatedTestValues, originalTestValues, out errorState);
+      TestNormalizedMeanSquaredError = errorState == OnlineCalculatorError.None ? testNMSE : double.NaN;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RegressionEnsembleSolution(this, cloner);
+    }
+
+    public override IEnumerable<double> EstimatedTrainingValues {
+      get {
+        var rows = Enumerable.Range(ProblemData.TrainingPartition.Start, ProblemData.TrainingPartition.End - ProblemData.TrainingPartition.Start);
+        var estimatedValuesEnumerators = (from model in Model.Models
+                                          select new { Model = model, EstimatedValuesEnumerator = model.GetEstimatedValues(ProblemData.Dataset, rows).GetEnumerator() })
+                                         .ToList();
+        var rowsEnumerator = rows.GetEnumerator();
+        while (rowsEnumerator.MoveNext() & estimatedValuesEnumerators.Select(en => en.EstimatedValuesEnumerator.MoveNext()).Aggregate(true, (acc, b) => acc & b)) {
+          int currentRow = rowsEnumerator.Current;
+
+          var selectedEnumerators = from pair in estimatedValuesEnumerators
+                                    where trainingPartitions == null || !trainingPartitions.ContainsKey(pair.Model) ||
+                                         (trainingPartitions[pair.Model].Start <= currentRow && currentRow < trainingPartitions[pair.Model].End)
+                                    select pair.EstimatedValuesEnumerator;
+          yield return AggregateEstimatedValues(selectedEnumerators.Select(x => x.Current));
+        }
+      }
+    }
+
+    public override IEnumerable<double> EstimatedTestValues {
+      get {
+        var estimatedValuesEnumerators = (from model in Model.Models
+                                          select new { Model = model, EstimatedValuesEnumerator = model.GetEstimatedValues(ProblemData.Dataset, ProblemData.TestIndizes).GetEnumerator() })
+                                         .ToList();
+        var rowsEnumerator = ProblemData.TestIndizes.GetEnumerator();
+        while (rowsEnumerator.MoveNext() & estimatedValuesEnumerators.Select(en => en.EstimatedValuesEnumerator.MoveNext()).Aggregate(true, (acc, b) => acc & b)) {
+          int currentRow = rowsEnumerator.Current;
+
+          var selectedEnumerators = from pair in estimatedValuesEnumerators
+                                    where testPartitions == null || !testPartitions.ContainsKey(pair.Model) ||
+                                      (testPartitions[pair.Model].Start <= currentRow && currentRow < testPartitions[pair.Model].End)
+                                    select pair.EstimatedValuesEnumerator;
+
+          yield return AggregateEstimatedValues(selectedEnumerators.Select(x => x.Current));
+        }
+      }
+    }
+
+    public override IEnumerable<double> GetEstimatedValues(IEnumerable<int> rows) {
+      return from xs in GetEstimatedValueVectors(ProblemData.Dataset, rows)
+             select AggregateEstimatedValues(xs);
+    }
+
+    public IEnumerable<IEnumerable<double>> GetEstimatedValueVectors(Dataset dataset, IEnumerable<int> rows) {
+      var estimatedValuesEnumerators = (from model in Model.Models
+                                        select model.GetEstimatedValues(dataset, rows).GetEnumerator())
+                                       .ToList();
+
+      while (estimatedValuesEnumerators.All(en => en.MoveNext())) {
+        yield return from enumerator in estimatedValuesEnumerators
+                     select enumerator.Current;
+      }
+    }
+
+    private double AggregateEstimatedValues(IEnumerable<double> estimatedValues) {
+      return estimatedValues.Average();
+    }
+
+    //[Storable]
+    //private string name;
+    //public string Name {
+    //  get {
+    //    return name;
+    //  }
+    //  set {
+    //    if (value != null && value != name) {
+    //      var cancelEventArgs = new CancelEventArgs<string>(value);
+    //      OnNameChanging(cancelEventArgs);
+    //      if (cancelEventArgs.Cancel == false) {
+    //        name = value;
+    //        OnNamedChanged(EventArgs.Empty);
+    //      }
+    //    }
+    //  }
+    //}
+
+    //public bool CanChangeName {
+    //  get { return true; }
+    //}
+
+    //[Storable]
+    //private string description;
+    //public string Description {
+    //  get {
+    //    return description;
+    //  }
+    //  set {
+    //    if (value != null && value != description) {
+    //      description = value;
+    //      OnDescriptionChanged(EventArgs.Empty);
+    //    }
+    //  }
+    //}
+
+    //public bool CanChangeDescription {
+    //  get { return true; }
+    //}
+
+    //#region events
+    //public event EventHandler<CancelEventArgs<string>> NameChanging;
+    //private void OnNameChanging(CancelEventArgs<string> cancelEventArgs) {
+    //  var listener = NameChanging;
+    //  if (listener != null) listener(this, cancelEventArgs);
+    //}
+
+    //public event EventHandler NameChanged;
+    //private void OnNamedChanged(EventArgs e) {
+    //  var listener = NameChanged;
+    //  if (listener != null) listener(this, e);
+    //}
+
+    //public event EventHandler DescriptionChanged;
+    //private void OnDescriptionChanged(EventArgs e) {
+    //  var listener = DescriptionChanged;
+    //  if (listener != null) listener(this, e);
+    //}
+    // #endregion
+  }
+}
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionSolution.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionSolution.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionSolution.cs	(revision 6195)
@@ -30,8 +30,8 @@
 namespace HeuristicLab.Problems.DataAnalysis {
   /// <summary>
-  /// Abstract base class for regression data analysis solutions
+  /// Represents a regression data analysis solution
   /// </summary>
   [StorableClass]
-  public abstract class RegressionSolution : DataAnalysisSolution, IRegressionSolution {
+  public class RegressionSolution : DataAnalysisSolution, IRegressionSolution {
     private const string TrainingMeanSquaredErrorResultName = "Mean squared error (training)";
     private const string TestMeanSquaredErrorResultName = "Mean squared error (test)";
@@ -55,40 +55,40 @@
     public double TrainingMeanSquaredError {
       get { return ((DoubleValue)this[TrainingMeanSquaredErrorResultName].Value).Value; }
-      private set { ((DoubleValue)this[TrainingMeanSquaredErrorResultName].Value).Value = value; }
+      protected set { ((DoubleValue)this[TrainingMeanSquaredErrorResultName].Value).Value = value; }
     }
 
     public double TestMeanSquaredError {
       get { return ((DoubleValue)this[TestMeanSquaredErrorResultName].Value).Value; }
-      private set { ((DoubleValue)this[TestMeanSquaredErrorResultName].Value).Value = value; }
+      protected set { ((DoubleValue)this[TestMeanSquaredErrorResultName].Value).Value = value; }
     }
 
     public double TrainingRSquared {
       get { return ((DoubleValue)this[TrainingSquaredCorrelationResultName].Value).Value; }
-      private set { ((DoubleValue)this[TrainingSquaredCorrelationResultName].Value).Value = value; }
+      protected set { ((DoubleValue)this[TrainingSquaredCorrelationResultName].Value).Value = value; }
     }
 
     public double TestRSquared {
       get { return ((DoubleValue)this[TestSquaredCorrelationResultName].Value).Value; }
-      private set { ((DoubleValue)this[TestSquaredCorrelationResultName].Value).Value = value; }
+      protected set { ((DoubleValue)this[TestSquaredCorrelationResultName].Value).Value = value; }
     }
 
     public double TrainingRelativeError {
       get { return ((DoubleValue)this[TrainingRelativeErrorResultName].Value).Value; }
-      private set { ((DoubleValue)this[TrainingRelativeErrorResultName].Value).Value = value; }
+      protected set { ((DoubleValue)this[TrainingRelativeErrorResultName].Value).Value = value; }
     }
 
     public double TestRelativeError {
       get { return ((DoubleValue)this[TestRelativeErrorResultName].Value).Value; }
-      private set { ((DoubleValue)this[TestRelativeErrorResultName].Value).Value = value; }
+      protected set { ((DoubleValue)this[TestRelativeErrorResultName].Value).Value = value; }
     }
 
     public double TrainingNormalizedMeanSquaredError {
       get { return ((DoubleValue)this[TrainingNormalizedMeanSquaredErrorResultName].Value).Value; }
-      private set { ((DoubleValue)this[TrainingNormalizedMeanSquaredErrorResultName].Value).Value = value; }
+      protected set { ((DoubleValue)this[TrainingNormalizedMeanSquaredErrorResultName].Value).Value = value; }
     }
 
     public double TestNormalizedMeanSquaredError {
       get { return ((DoubleValue)this[TestNormalizedMeanSquaredErrorResultName].Value).Value; }
-      private set { ((DoubleValue)this[TestNormalizedMeanSquaredErrorResultName].Value).Value = value; }
+      protected set { ((DoubleValue)this[TestNormalizedMeanSquaredErrorResultName].Value).Value = value; }
     }
 
@@ -113,4 +113,8 @@
     }
 
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RegressionSolution(this, cloner);
+    }
+
     protected override void OnProblemDataChanged(EventArgs e) {
       base.OnProblemDataChanged(e);
@@ -122,5 +126,5 @@
     }
 
-    protected void RecalculateResults() {
+    private void RecalculateResults() {
       double[] estimatedTrainingValues = EstimatedTrainingValues.ToArray(); // cache values
       IEnumerable<double> originalTrainingValues = ProblemData.Dataset.GetEnumeratedVariableValues(ProblemData.TargetVariable, ProblemData.TrainingIndizes);
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Classification/IClassificationEnsembleSolution.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Classification/IClassificationEnsembleSolution.cs	(revision 6195)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Classification/IClassificationEnsembleSolution.cs	(revision 6195)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+namespace HeuristicLab.Problems.DataAnalysis {
+  public interface IClassificationEnsembleSolution : IClassificationSolution {
+    IEnumerable<IClassificationModel> Models { get; }
+    IEnumerable<IEnumerable<double>> GetEstimatedClassValueVectors(Dataset dataset, IEnumerable<int> rows);
+  }
+}
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Regression/IRegressionEnsembleSolution.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Regression/IRegressionEnsembleSolution.cs	(revision 6195)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Regression/IRegressionEnsembleSolution.cs	(revision 6195)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using HeuristicLab.Core;
+namespace HeuristicLab.Problems.DataAnalysis {
+  public interface IRegressionEnsembleSolution : IRegressionSolution {
+    IRegressionEnsembleModel Model { get; }
+    IEnumerable<IEnumerable<double>> GetEstimatedValueVectors(Dataset dataset, IEnumerable<int> rows);
+  }
+}
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanAndVarianceCalculator.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanAndVarianceCalculator.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/OnlineCalculators/OnlineMeanAndVarianceCalculator.cs	(revision 6195)
@@ -73,5 +73,5 @@
 
     public void Add(double x) {
-      if (double.IsNaN(x) || double.IsInfinity(x) || (errorState & OnlineCalculatorError.InvalidValueAdded) > 0) {
+      if (double.IsNaN(x) || double.IsInfinity(x) || x > 1E13 || x < -1E13 || (errorState & OnlineCalculatorError.InvalidValueAdded) > 0) {
         errorState = errorState | OnlineCalculatorError.InvalidValueAdded;
         varianceErrorState = errorState | OnlineCalculatorError.InvalidValueAdded;
@@ -84,4 +84,5 @@
           errorState = errorState & (~OnlineCalculatorError.InsufficientElementsAdded);        // n >= 1
         } else {
+
           varianceErrorState = varianceErrorState & (~OnlineCalculatorError.InsufficientElementsAdded);        // n >= 2
           m_newM = m_oldM + (x - m_oldM) / n;
Index: branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Tests/StatisticCalculatorsTest.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Tests/StatisticCalculatorsTest.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.DataAnalysis/3.4/Tests/StatisticCalculatorsTest.cs	(revision 6195)
@@ -78,6 +78,6 @@
           double variance = calculator.Variance;
 
-          Assert.AreEqual(mean_alglib, mean, 1E-6 * scale);
-          Assert.AreEqual(variance_alglib, variance, 1E-6 * scale);
+          Assert.AreEqual(mean_alglib.ToString(), mean.ToString());
+          Assert.AreEqual(variance_alglib.ToString(), variance.ToString());
         }
       }
@@ -109,9 +109,35 @@
             double r2 = r2Calculator.RSquared;
 
-            Assert.AreEqual(r2_alglib, r2, 1E-6 * Math.Max(c1Scale, c2Scale));
+            Assert.AreEqual(r2_alglib.ToString(), r2.ToString());
           }
         }
       }
     }
+    [TestMethod]
+    public void CalculatePearsonsRSquaredOfConstantTest() {
+      System.Random random = new System.Random(31415);
+      int n = 12;
+      int cols = testData.GetLength(1);
+      for (int c1 = 0; c1 < cols; c1++) {
+        double c1Scale = random.NextDouble() * 1E7;
+        double c2Scale = 1.0;
+        IEnumerable<double> x = from rows in Enumerable.Range(0, n)
+                                select testData[rows, c1] * c1Scale;
+        IEnumerable<double> y = (new List<double>() { 150494407424305.44 })
+          .Concat(Enumerable.Repeat(150494407424305.47, n - 1));
+        double[] xs = x.ToArray();
+        double[] ys = y.ToArray();
+        double r2_alglib = alglib.pearsoncorrelation(xs, ys, n);
+        r2_alglib *= r2_alglib;
+
+        var r2Calculator = new OnlinePearsonsRSquaredCalculator();
+        for (int i = 0; i < n; i++) {
+          r2Calculator.Add(xs[i], ys[i]);
+        }
+        double r2 = r2Calculator.RSquared;
+
+        Assert.AreEqual(r2_alglib.ToString(), r2.ToString());
+      }
+    }
   }
 }
Index: branches/histogram/HeuristicLab.Problems.ExternalEvaluation.GP.Views/3.3/HeuristicLabProblemsExternalEvaluationGPViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.ExternalEvaluation.GP.Views/3.3/HeuristicLabProblemsExternalEvaluationGPViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.ExternalEvaluation.GP.Views/3.3/HeuristicLabProblemsExternalEvaluationGPViewsPlugin.cs.frame	(revision 6195)
@@ -27,5 +27,5 @@
 
 namespace HeuristicLab.Problems.ExternalEvaluation.GP.Views {
-  [Plugin("HeuristicLab.Problems.ExternalEvaluation.GP.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.ExternalEvaluation.GP.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.ExternalEvaluation.GP.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Problems.ExternalEvaluation.GP.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.ExternalEvaluation.GP.Views/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.ExternalEvaluation.GP.Views/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -34,3 +34,3 @@
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/HeuristicLabProblemsExternalEvaluationGPPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/HeuristicLabProblemsExternalEvaluationGPPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/HeuristicLabProblemsExternalEvaluationGPPlugin.cs.frame	(revision 6195)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Problems.ExternalEvaluation.GP {
-  [Plugin("HeuristicLab.Problems.ExternalEvaluation.GP", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.ExternalEvaluation.GP", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.ExternalEvaluation.GP-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Common", "3.3")]
Index: branches/histogram/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.ExternalEvaluation.GP/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -34,3 +34,3 @@
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/EvaluationCacheView.Designer.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/EvaluationCacheView.Designer.cs	(revision 6195)
+++ branches/histogram/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/EvaluationCacheView.Designer.cs	(revision 6195)
@@ -0,0 +1,100 @@
+﻿namespace HeuristicLab.Problems.ExternalEvaluation.Views {
+  partial class EvaluationCacheView {
+    /// <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.hits_sizeLabel = new System.Windows.Forms.Label();
+      this.hits_sizeTextBox = new System.Windows.Forms.TextBox();
+      this.clearButton = new System.Windows.Forms.Button();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // parameterCollectionView
+      // 
+      this.parameterCollectionView.Location = new System.Drawing.Point(0, 52);
+      this.parameterCollectionView.Size = new System.Drawing.Size(490, 301);
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      // 
+      // hits_sizeLabel
+      // 
+      this.hits_sizeLabel.AutoSize = true;
+      this.hits_sizeLabel.Location = new System.Drawing.Point(3, 29);
+      this.hits_sizeLabel.Name = "hits_sizeLabel";
+      this.hits_sizeLabel.Size = new System.Drawing.Size(53, 13);
+      this.hits_sizeLabel.TabIndex = 4;
+      this.hits_sizeLabel.Text = "Hits/Size:";
+      // 
+      // hits_sizeTextBox
+      // 
+      this.hits_sizeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.hits_sizeTextBox.Location = new System.Drawing.Point(59, 26);
+      this.hits_sizeTextBox.Name = "hits_sizeTextBox";
+      this.hits_sizeTextBox.ReadOnly = true;
+      this.hits_sizeTextBox.Size = new System.Drawing.Size(379, 20);
+      this.hits_sizeTextBox.TabIndex = 5;
+      // 
+      // clearButton
+      // 
+      this.clearButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.clearButton.Location = new System.Drawing.Point(444, 24);
+      this.clearButton.Name = "clearButton";
+      this.clearButton.Size = new System.Drawing.Size(43, 23);
+      this.clearButton.TabIndex = 6;
+      this.clearButton.Text = "Clear";
+      this.toolTip.SetToolTip(this.clearButton, "Clear");
+      this.clearButton.UseVisualStyleBackColor = true;
+      this.clearButton.Click += new System.EventHandler(this.clearButton_Click);
+      // 
+      // EvaluationCacheView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.hits_sizeTextBox);
+      this.Controls.Add(this.hits_sizeLabel);
+      this.Controls.Add(this.clearButton);
+      this.Name = "EvaluationCacheView";
+      this.Controls.SetChildIndex(this.clearButton, 0);
+      this.Controls.SetChildIndex(this.hits_sizeLabel, 0);
+      this.Controls.SetChildIndex(this.hits_sizeTextBox, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.parameterCollectionView, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label hits_sizeLabel;
+    private System.Windows.Forms.TextBox hits_sizeTextBox;
+    private System.Windows.Forms.Button clearButton;
+  }
+}
Index: branches/histogram/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/EvaluationCacheView.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/EvaluationCacheView.cs	(revision 6195)
+++ branches/histogram/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/EvaluationCacheView.cs	(revision 6195)
@@ -0,0 +1,65 @@
+﻿using System;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Problems.ExternalEvaluation.Views {
+
+  [View("EvaluationCacheView")]
+  [Content(typeof(EvaluationCache), IsDefaultView = true)]
+  public sealed partial class EvaluationCacheView : ParameterizedNamedItemView {
+
+    public new EvaluationCache Content {
+      get { return (EvaluationCache)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public EvaluationCacheView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.SizeChanged -= new System.EventHandler(Content_StatusChanged);
+      Content.HitsChanged -= new System.EventHandler(Content_StatusChanged);
+      Content.ActiveEvalutionsChanged -= new EventHandler(Content_StatusChanged);
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.SizeChanged += new System.EventHandler(Content_StatusChanged);
+      Content.HitsChanged += new System.EventHandler(Content_StatusChanged);
+      Content.ActiveEvalutionsChanged += new EventHandler(Content_StatusChanged);
+    }
+
+    #region Event Handlers (Content)
+    void Content_StatusChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_StatusChanged), sender, e);
+      else
+        hits_sizeTextBox.Text = string.Format("{0}/{1} ({2} active)", Content.Hits, Content.Size, Content.ActiveEvaluations);
+    }
+
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        hits_sizeTextBox.Text = "#/#";
+      } else {
+        Content_StatusChanged(this, EventArgs.Empty);
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      clearButton.Enabled = !ReadOnly && Content != null;
+    }
+
+    #region Event Handlers (child controls)
+    private void clearButton_Click(object sender, EventArgs e) {
+      Content.Reset();
+    }
+    #endregion
+  }
+}
Index: branches/histogram/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/EvaluationCacheView.resx
===================================================================
--- branches/histogram/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/EvaluationCacheView.resx	(revision 6195)
+++ branches/histogram/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/EvaluationCacheView.resx	(revision 6195)
@@ -0,0 +1,129 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>107, 17</value>
+  </metadata>
+  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>107, 17</value>
+  </metadata>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: branches/histogram/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/HeuristicLab.Problems.ExternalEvaluation.Views-3.3.csproj
===================================================================
--- branches/histogram/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/HeuristicLab.Problems.ExternalEvaluation.Views-3.3.csproj	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/HeuristicLab.Problems.ExternalEvaluation.Views-3.3.csproj	(revision 6195)
@@ -111,4 +111,10 @@
   <ItemGroup>
     <None Include="HeuristicLabProblemsExternalEvaluationViewsPlugin.cs.frame" />
+    <Compile Include="EvaluationCacheView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="EvaluationCacheView.Designer.cs">
+      <DependentUpon>EvaluationCacheView.cs</DependentUpon>
+    </Compile>
     <Compile Include="EvaluationServiceClientView.cs">
       <SubType>UserControl</SubType>
@@ -197,4 +203,9 @@
     </BootstrapperPackage>
   </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="EvaluationCacheView.resx">
+      <DependentUpon>EvaluationCacheView.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
Index: branches/histogram/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/HeuristicLabProblemsExternalEvaluationViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/HeuristicLabProblemsExternalEvaluationViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/HeuristicLabProblemsExternalEvaluationViewsPlugin.cs.frame	(revision 6195)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Problems.ExternalEvaluation.Views {
-  [Plugin("HeuristicLab.Problems.ExternalEvaluation.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.ExternalEvaluation.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.ExternalEvaluation.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
Index: branches/histogram/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.ExternalEvaluation.Views/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -33,3 +33,3 @@
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/CachedExternalEvaluator.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/CachedExternalEvaluator.cs	(revision 6195)
+++ branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/CachedExternalEvaluator.cs	(revision 6195)
@@ -0,0 +1,77 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+using System.Threading;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+namespace HeuristicLab.Problems.ExternalEvaluation {
+
+  [Item("CachedExternalEvaluationValuesCollector", "Creates a solution message, and communicates it via the driver to receive a quality message, also keeps a cache of previous evaluation results.")]
+  [StorableClass]
+  public class CachedExternalEvaluator : ExternalEvaluator {
+
+    #region Parameters
+    public ValueLookupParameter<EvaluationCache> CacheParameter {
+      get { return (ValueLookupParameter<EvaluationCache>)Parameters["Cache"]; }
+    }
+    #endregion
+
+    #region Parameter Values
+    protected DoubleValue Quality {
+      get { return QualityParameter.ActualValue; }
+      set { QualityParameter.ActualValue = value; }
+    }
+    protected EvaluationCache Cache {
+      get { return CacheParameter.ActualValue; }
+      set { CacheParameter.ActualValue = value; }
+    }
+    #endregion
+
+    #region Construction & Cloning
+    [StorableConstructor]
+    protected CachedExternalEvaluator(bool deserializing) : base(deserializing) { }
+    protected CachedExternalEvaluator(CachedExternalEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new CachedExternalEvaluator(this, cloner);
+    }
+    public CachedExternalEvaluator()
+      : base() {
+      Parameters.Add(new ValueLookupParameter<EvaluationCache>("Cache", "Cache of previously evaluated solutions"));
+    }
+    #endregion
+
+    public override IOperation Apply() {
+      if (Cache == null)
+        return base.Apply();
+
+      if (Quality == null) Quality = new DoubleValue(0);
+      Quality.Value = Cache.GetValue(BuildSolutionMessage(), m => EvaluateOnNextAvailableClient(m).Quality);
+      if (Successor != null)
+        return ExecutionContext.CreateOperation(Successor);
+      else
+        return null;
+    }
+  }
+}
Index: branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/EvaluationCache.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/EvaluationCache.cs	(revision 6195)
+++ branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/EvaluationCache.cs	(revision 6195)
@@ -0,0 +1,302 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ * 
+ * The LRU cache is based on an idea by Robert Rossney see 
+ * <http://csharp-lru-cache.googlecode.com>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using HeuristicLab.Common;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+namespace HeuristicLab.Problems.ExternalEvaluation {
+
+  [Item("EvaluationCache", "Cache for external evaluation values")]
+  [StorableClass]
+  public class EvaluationCache : ParameterizedNamedItem {
+
+    #region Types
+    private class CacheEntry {
+
+      public string Key { get; private set; }
+      public double Value { get; set; }
+
+      public CacheEntry(string key, double value) {
+        Key = key;
+        Value = value;
+      }
+
+      public CacheEntry(string key) : this(key, 0) { }
+
+      public override bool Equals(object obj) {
+        CacheEntry other = obj as CacheEntry;
+        if (other == null)
+          return false;
+        return Key.Equals(other.Key);
+      }
+
+      public override int GetHashCode() {
+        return Key.GetHashCode();
+      }
+
+      public override string ToString() {
+        return string.Format("{{{0} : {1}}}", Key, Value);
+      }
+    }
+
+    public delegate double Evaluator(SolutionMessage message);
+    #endregion
+
+    #region Fields
+    private LinkedList<CacheEntry> list;
+    private Dictionary<CacheEntry, LinkedListNode<CacheEntry>> index;
+    private HashSet<string> activeEvaluations = new HashSet<string>();
+    private object cacheLock = new object();
+    private object evaluationLock = new object();
+    private AutoResetEvent evaluationDone = new AutoResetEvent(false);
+    #endregion
+
+    #region Properties
+    public override System.Drawing.Image ItemImage {
+      get { return VSImageLibrary.Database; }
+    }
+    public int Size {
+      get {
+        lock (cacheLock) {
+          return index.Count;
+        }
+      }
+    }
+    public int ActiveEvaluations {
+      get {
+        lock (evaluationLock) {
+          return activeEvaluations.Count;
+        }
+      }
+    }
+    [Storable]
+    public int Hits { get; private set; }
+    #endregion
+
+    #region events
+    public event EventHandler SizeChanged;
+    public event EventHandler HitsChanged;
+    public event EventHandler ActiveEvalutionsChanged;
+
+    protected virtual void OnSizeChanged() {
+      EventHandler handler = SizeChanged;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }
+    protected virtual void OnHitsChanged() {
+      EventHandler handler = HitsChanged;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }
+    protected virtual void OnActiveEvalutionsChanged() {
+      EventHandler handler = ActiveEvalutionsChanged;
+      if (handler != null)
+        handler(this, EventArgs.Empty);
+    }
+    #endregion
+
+    #region Parameters
+    public FixedValueParameter<IntValue> CapacityParameter {
+      get { return (FixedValueParameter<IntValue>)Parameters["Capacity"]; }
+    }
+    public FixedValueParameter<BoolValue> PersistentCacheParameter {
+      get { return (FixedValueParameter<BoolValue>)Parameters["PersistentCache"]; }
+    }
+    #endregion
+
+    #region Parameter Values
+    public int Capacity {
+      get { return CapacityParameter.Value.Value; }
+      set { CapacityParameter.Value.Value = value; }
+    }
+    public bool IsPersistent {
+      get { return PersistentCacheParameter.Value.Value; }
+    }
+    #endregion
+
+    #region Persistence
+    [Storable(Name="Cache")]
+    private IEnumerable<KeyValuePair<string, double>> Cache_Persistence {
+      get {
+        if (IsPersistent) {
+          return GetCacheValues();
+        } else {
+          return Enumerable.Empty<KeyValuePair<string, double>>();
+        }
+      }
+      set {
+        SetCacheValues(value);
+      }
+    }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterEvents();
+    }
+    #endregion
+
+    #region Construction & Cloning
+    [StorableConstructor]
+    protected EvaluationCache(bool deserializing) : base(deserializing) { }
+    protected EvaluationCache(EvaluationCache original, Cloner cloner)
+      : base(original, cloner) {
+      SetCacheValues(original.GetCacheValues());
+      RegisterEvents();
+    }
+    public EvaluationCache() {
+      list = new LinkedList<CacheEntry>();
+      index = new Dictionary<CacheEntry, LinkedListNode<CacheEntry>>();
+      Parameters.Add(new FixedValueParameter<IntValue>("Capacity", "Maximum number of cache entries.", new IntValue(10000)));
+      Parameters.Add(new FixedValueParameter<BoolValue>("PersistentCache", "Save cache when serializing object graph?", new BoolValue(false)));
+      RegisterEvents();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EvaluationCache(this, cloner);
+    }
+    #endregion
+
+    #region Event Handling
+    private void RegisterEvents() {
+      CapacityParameter.Value.ValueChanged += new EventHandler(Value_ValueChanged);
+    }
+
+    void Value_ValueChanged(object sender, EventArgs e) {
+      if (Capacity < 0)
+        throw new ArgumentOutOfRangeException("Cache capacity cannot be less than zero");
+      Trim();
+    }
+    #endregion
+
+    #region Methods
+    public void Reset() {
+      lock (cacheLock) {
+        list = new LinkedList<CacheEntry>();
+        index = new Dictionary<CacheEntry, LinkedListNode<CacheEntry>>();
+        Hits = 0;
+      }
+      OnSizeChanged();
+      OnHitsChanged();
+    }
+
+    public double GetValue(SolutionMessage message, Evaluator evaluate) {
+      CacheEntry entry = new CacheEntry(message.ToString());
+      LinkedListNode<CacheEntry> node;
+      bool lockTaken = false;
+      try {
+        Monitor.Enter(cacheLock, ref lockTaken);
+        if (index.TryGetValue(entry, out node)) {
+          list.Remove(node);
+          list.AddLast(node);
+          Hits++;
+          lockTaken = false;
+          Monitor.Exit(cacheLock);
+          OnHitsChanged();
+          return node.Value.Value;
+        } else {
+          lockTaken = false;
+          Monitor.Exit(cacheLock);
+          return Evaluate(message, evaluate, entry);
+        }
+      } finally {
+        if (lockTaken)
+          Monitor.Exit(cacheLock);
+      }
+    }
+
+    private double Evaluate(SolutionMessage message, Evaluator evaluate, CacheEntry entry) {
+      bool lockTaken = false;
+      try {
+        Monitor.Enter(evaluationLock, ref lockTaken);
+        if (activeEvaluations.Contains(entry.Key)) {
+          while (activeEvaluations.Contains(entry.Key)) {
+            lockTaken = false;
+            Monitor.Exit(evaluationLock);
+            evaluationDone.WaitOne();
+            Monitor.Enter(evaluationLock, ref lockTaken);
+          }
+          lock (cacheLock) {
+            return index[entry].Value.Value;
+          }
+        } else {
+          activeEvaluations.Add(entry.Key);
+          lockTaken = false;
+          Monitor.Exit(evaluationLock);
+          OnActiveEvalutionsChanged();
+          try {
+            entry.Value = evaluate(message);
+            lock (cacheLock) {
+              index[entry] = list.AddLast(entry);
+            }
+            Trim();
+          } finally {
+            lock (evaluationLock) {
+              activeEvaluations.Remove(entry.Key);
+              evaluationDone.Set();
+            }
+            OnActiveEvalutionsChanged();
+          }
+          return entry.Value;
+        }
+      } finally {
+        if (lockTaken)
+          Monitor.Exit(evaluationLock);
+      }
+    }
+
+    private void Trim() {
+      lock (cacheLock) {
+        while (list.Count > Capacity) {
+          LinkedListNode<CacheEntry> item = list.First;
+          list.Remove(item);
+          index.Remove(item.Value);
+        }
+      }
+      OnSizeChanged();
+    }
+    private IEnumerable<KeyValuePair<string, double>> GetCacheValues() {
+      lock (cacheLock) {
+        return index.ToDictionary(kvp => kvp.Key.Key, kvp => kvp.Key.Value);
+      }
+    }
+    private void SetCacheValues(IEnumerable<KeyValuePair<string, double>> value) {
+      lock (cacheLock) {
+        list = new LinkedList<CacheEntry>();
+        index = new Dictionary<CacheEntry, LinkedListNode<CacheEntry>>();
+        foreach (var kvp in value) {
+          var entry = new CacheEntry(kvp.Key);
+          entry.Value = kvp.Value;
+          index[entry] = list.AddLast(entry);
+        }
+      }
+    }
+    #endregion
+
+  }
+}
Index: branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/ExternalEvaluationProblem.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/ExternalEvaluationProblem.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/ExternalEvaluationProblem.cs	(revision 6195)
@@ -53,6 +53,6 @@
 
     #region Parameters
-    public IValueParameter<IEvaluationServiceClient> ClientParameter {
-      get { return (IValueParameter<IEvaluationServiceClient>)Parameters["Client"]; }
+    public IValueParameter<CheckedItemCollection<IEvaluationServiceClient>> ClientsParameter {
+      get { return (IValueParameter<CheckedItemCollection<IEvaluationServiceClient>>)Parameters["Clients"]; }
     }
     public IValueParameter<IExternalEvaluationProblemEvaluator> EvaluatorParameter {
@@ -85,4 +85,7 @@
     public ValueParameter<ItemList<IOperator>> OperatorsParameter {
       get { return (ValueParameter<ItemList<IOperator>>)Parameters["Operators"]; }
+    }
+    public OptionalValueParameter<EvaluationCache> CacheParameter {
+      get { return (OptionalValueParameter<EvaluationCache>)Parameters["Cache"]; }
     }
     #endregion
@@ -141,5 +144,5 @@
       UserDefinedSolutionCreator solutionCreator = new UserDefinedSolutionCreator();
 
-      Parameters.Add(new ValueParameter<IEvaluationServiceClient>("Client", "The client that is used to communicate with the external application.", new EvaluationServiceClient()));
+      Parameters.Add(new ValueParameter<CheckedItemCollection<IEvaluationServiceClient>>("Clients", "The clients that are used to communicate with the external application.", new CheckedItemCollection<IEvaluationServiceClient>() { new EvaluationServiceClient() }));
       Parameters.Add(new ValueParameter<IExternalEvaluationProblemEvaluator>("Evaluator", "The evaluator that collects the values to exchange.", evaluator));
       Parameters.Add(new ValueParameter<ISolutionCreator>("SolutionCreator", "An operator to create the solution components.", solutionCreator));
@@ -148,7 +151,23 @@
       Parameters.Add(new OptionalValueParameter<IScope>("BestKnownSolution", "The best known solution for this external evaluation problem."));
       Parameters.Add(new ValueParameter<ItemList<IOperator>>("Operators", "The operators that are passed to the algorithm.", new ItemList<IOperator>()));
+      Parameters.Add(new OptionalValueParameter<EvaluationCache>("Cache", "Cache of previously evaluated solutions."));
 
       InitializeOperators();
       AttachEventHandlers();
+    }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      // BackwardsCompatibility3.3
+      #region Backwards compatible code, remove with 3.4
+      if (!Parameters.ContainsKey("Clients")) {
+        Parameters.Add(new ValueParameter<CheckedItemCollection<IEvaluationServiceClient>>("Clients", "The clients that are used to communicate with the external application.", new CheckedItemCollection<IEvaluationServiceClient>() { new EvaluationServiceClient() }));
+        if (Parameters.ContainsKey("Client")) {
+          var client = ((IValueParameter<IEvaluationServiceClient>)Parameters["Client"]).Value;
+          if (client != null)
+            ClientsParameter.Value = new CheckedItemCollection<IEvaluationServiceClient>() { client };
+          Parameters.Remove("Client");
+        }
+      }
+      #endregion
     }
 
@@ -223,5 +242,5 @@
     }
     private void ParameterizeEvaluator() {
-      Evaluator.ClientParameter.ActualName = ClientParameter.Name;
+      Evaluator.ClientsParameter.ActualName = ClientsParameter.Name;
     }
     private void ParameterizeOperators() {
Index: branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/ExternalEvaluator.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/ExternalEvaluator.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/ExternalEvaluator.cs	(revision 6195)
@@ -21,4 +21,7 @@
 
 using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -32,50 +35,66 @@
   [StorableClass]
   public class ExternalEvaluator : ValuesCollector, IExternalEvaluationProblemEvaluator {
+
+    #region Parameters
     public ILookupParameter<DoubleValue> QualityParameter {
       get { return (ILookupParameter<DoubleValue>)Parameters["Quality"]; }
     }
-    public IValueLookupParameter<IEvaluationServiceClient> ClientParameter {
-      get { return (IValueLookupParameter<IEvaluationServiceClient>)Parameters["Client"]; }
+    public IValueLookupParameter<CheckedItemCollection<IEvaluationServiceClient>> ClientsParameter {
+      get { return (ValueLookupParameter<CheckedItemCollection<IEvaluationServiceClient>>)Parameters["Clients"]; }
     }
-
     public IValueParameter<SolutionMessageBuilder> MessageBuilderParameter {
       get { return (IValueParameter<SolutionMessageBuilder>)Parameters["MessageBuilder"]; }
     }
+    #endregion
 
-    private SolutionMessageBuilder MessageBuilder {
+    #region Parameter Values
+    protected SolutionMessageBuilder MessageBuilder {
       get { return MessageBuilderParameter.Value; }
     }
+    protected CheckedItemCollection<IEvaluationServiceClient> Clients {
+      get { return ClientsParameter.ActualValue; }
+    }
+    #endregion
 
+    #region Fields
+    protected HashSet<IEvaluationServiceClient> activeClients = new HashSet<IEvaluationServiceClient>();
+    protected object clientLock = new object();
+    protected AutoResetEvent clientAvailable = new AutoResetEvent(false);
+    #endregion
+
+    #region Construction & Cloning
     [StorableConstructor]
     protected ExternalEvaluator(bool deserializing) : base(deserializing) { }
     protected ExternalEvaluator(ExternalEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public ExternalEvaluator()
+      : base() {
+      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality of the current solution."));
+      Parameters.Add(new ValueLookupParameter<CheckedItemCollection<IEvaluationServiceClient>>("Clients", "Collection of clients which communicate the the external process. These clients my be contacted in parallel."));
+      Parameters.Add(new ValueParameter<SolutionMessageBuilder>("MessageBuilder", "The message builder that converts from HeuristicLab objects to SolutionMessage representation.", new SolutionMessageBuilder()));
+    }
     public override IDeepCloneable Clone(Cloner cloner) {
       return new ExternalEvaluator(this, cloner);
     }
-    public ExternalEvaluator()
-      : base() {
-      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality of the current solution."));
-      Parameters.Add(new ValueLookupParameter<IEvaluationServiceClient>("Client", "The client that communicates with the external process."));
-      Parameters.Add(new ValueParameter<SolutionMessageBuilder>("MessageBuilder", "The message builder that converts from HeuristicLab objects to SolutionMessage representation.", new SolutionMessageBuilder()));
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      // BackwardsCompatibility3.3
+      #region Backwards compatible code, remove with 3.4
+      if (!Parameters.ContainsKey("Clients")) {
+        Parameters.Add(new ValueLookupParameter<CheckedItemCollection<IEvaluationServiceClient>>("Clients", "Collection of clients which communicate the the external process. These clients my be contacted in parallel."));
+        if (Parameters.ContainsKey("Client")) {
+          var client = ((IValueLookupParameter<IEvaluationServiceClient>)Parameters["Client"]).Value;
+          if (client != null)
+            ClientsParameter.Value = new CheckedItemCollection<IEvaluationServiceClient>() { client };
+          Parameters.Remove("Client");
+        }
+      }
+      #endregion
     }
+    #endregion
 
     public override IOperation Apply() {
-      IEvaluationServiceClient client = ClientParameter.ActualValue;
-      SolutionMessage.Builder protobufBuilder = SolutionMessage.CreateBuilder();
-      protobufBuilder.SolutionId = 0;
-      foreach (IParameter param in CollectedValues) {
-        IItem value = param.ActualValue;
-        if (value != null) {
-          ILookupParameter lookupParam = param as ILookupParameter;
-          string name = lookupParam != null ? lookupParam.TranslatedName : param.Name;
-          try {
-            MessageBuilder.AddToMessage(value, name, protobufBuilder);
-          }
-          catch (ArgumentException ex) {
-            throw new InvalidOperationException("ERROR in " + Name + ": Parameter " + name + " cannot be added to the message.", ex);
-          }
-        }
-      }
-      QualityMessage answer = client.Evaluate(protobufBuilder.Build());
+
+      QualityMessage answer = EvaluateOnNextAvailableClient(BuildSolutionMessage());
+
       if (QualityParameter.ActualValue == null)
         QualityParameter.ActualValue = new DoubleValue(answer.Quality);
@@ -84,4 +103,48 @@
       return base.Apply();
     }
+
+    protected QualityMessage EvaluateOnNextAvailableClient(SolutionMessage message) {
+      IEvaluationServiceClient client = null;
+      lock (clientLock) {
+        client = Clients.CheckedItems.FirstOrDefault(c => !activeClients.Contains(c));
+        while (client == null && Clients.Count > 0) {
+          Monitor.Exit(clientLock);
+          clientAvailable.WaitOne();
+          Monitor.Enter(clientLock);
+          client = Clients.CheckedItems.FirstOrDefault(c => !activeClients.Contains(c));
+        }
+        if (client != null)
+          activeClients.Add(client);
+      }
+      try {
+        return client.Evaluate(message);
+      } finally {
+        lock (clientLock) {
+          activeClients.Remove(client);
+          clientAvailable.Set();
+        }
+      }
+    }
+
+    protected SolutionMessage BuildSolutionMessage() {
+      lock (clientLock) {
+        SolutionMessage.Builder protobufBuilder = SolutionMessage.CreateBuilder();
+        protobufBuilder.SolutionId = 0;
+        foreach (IParameter param in CollectedValues) {
+          IItem value = param.ActualValue;
+          if (value != null) {
+            ILookupParameter lookupParam = param as ILookupParameter;
+            string name = lookupParam != null ? lookupParam.TranslatedName : param.Name;
+            try {
+              MessageBuilder.AddToMessage(value, name, protobufBuilder);
+            } catch (ArgumentException ex) {
+              throw new InvalidOperationException(string.Format("ERROR while building solution message: Parameter {0} cannot be added to the message", name), ex);
+            }
+          }
+        }
+        return protobufBuilder.Build();
+      }
+    }
+
   }
 }
Index: branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/HeuristicLab.Problems.ExternalEvaluation-3.3.csproj
===================================================================
--- branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/HeuristicLab.Problems.ExternalEvaluation-3.3.csproj	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/HeuristicLab.Problems.ExternalEvaluation-3.3.csproj	(revision 6195)
@@ -98,4 +98,5 @@
     </Reference>
     <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
     <Reference Include="System.Xml.Linq">
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
@@ -115,4 +116,6 @@
     <Compile Include="Converters\IntegerConverter.cs" />
     <Compile Include="Converters\StringConverter.cs" />
+    <Compile Include="CachedExternalEvaluator.cs" />
+    <Compile Include="EvaluationCache.cs" />
     <Compile Include="Drivers\EvaluationServiceClient.cs" />
     <Compile Include="Drivers\EvaluationChannel.cs" />
@@ -150,4 +153,8 @@
       <Name>HeuristicLab.Common-3.3</Name>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core.Views\3.3\HeuristicLab.Core.Views-3.3.csproj">
+      <Project>{E226881D-315F-423D-B419-A766FE0D8685}</Project>
+      <Name>HeuristicLab.Core.Views-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
       <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
@@ -165,4 +172,12 @@
       <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>
       <Name>ProtocolBuffers</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj">
+      <Project>{AB687BBE-1BFE-476B-906D-44237135431D}</Project>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
+      <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
+      <Name>HeuristicLab.MainForm-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
Index: branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/HeuristicLabProblemsExternalEvaluationPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/HeuristicLabProblemsExternalEvaluationPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/HeuristicLabProblemsExternalEvaluationPlugin.cs.frame	(revision 6195)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Problems.ExternalEvaluation {
-  [Plugin("HeuristicLab.Problems.ExternalEvaluation", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.ExternalEvaluation", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.ExternalEvaluation-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
Index: branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/Interfaces/IExternalEvaluationProblemEvaluator.cs
===================================================================
--- branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/Interfaces/IExternalEvaluationProblemEvaluator.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/Interfaces/IExternalEvaluationProblemEvaluator.cs	(revision 6195)
@@ -25,5 +25,5 @@
 namespace HeuristicLab.Problems.ExternalEvaluation {
   public interface IExternalEvaluationProblemEvaluator : ISingleObjectiveEvaluator {
-    IValueLookupParameter<IEvaluationServiceClient> ClientParameter { get; }
+    IValueLookupParameter<CheckedItemCollection<IEvaluationServiceClient>> ClientsParameter { get; }
   }
 }
Index: branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.ExternalEvaluation/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -34,3 +34,3 @@
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLabProblemsKnapsackViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLabProblemsKnapsackViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLabProblemsKnapsackViewsPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Problems.Knapsack.Views plugin
   /// </summary>
-  [Plugin("HeuristicLab.Problems.Knapsack.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.Knapsack.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.Knapsack.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Core", "3.3")]
Index: branches/histogram/HeuristicLab.Problems.Knapsack.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.Knapsack.Views/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.Knapsack.Views/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.Knapsack/3.3/HeuristicLabProblemsKnapsackPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.Knapsack/3.3/HeuristicLabProblemsKnapsackPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.Knapsack/3.3/HeuristicLabProblemsKnapsackPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Problems.Knapsack plugin
   /// </summary>
-  [Plugin("HeuristicLab.Problems.Knapsack", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.Knapsack", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.Knapsack-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Problems.Knapsack/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.Knapsack/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.Knapsack/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.OneMax.Views/3.3/HeuristicLabProblemsOneMaxViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.OneMax.Views/3.3/HeuristicLabProblemsOneMaxViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.OneMax.Views/3.3/HeuristicLabProblemsOneMaxViewsPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Problems.OneMax.Views plugin
   /// </summary>
-  [Plugin("HeuristicLab.Problems.OneMax.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.OneMax.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.OneMax.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Common", "3.3")]
Index: branches/histogram/HeuristicLab.Problems.OneMax.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.OneMax.Views/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.OneMax.Views/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.OneMax/3.3/HeuristicLabProblemsOneMaxPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.OneMax/3.3/HeuristicLabProblemsOneMaxPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.OneMax/3.3/HeuristicLabProblemsOneMaxPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Problems.OneMax plugin
   /// </summary>
-  [Plugin("HeuristicLab.Problems.OneMax", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.OneMax", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.OneMax-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Problems.OneMax/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.OneMax/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.OneMax/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/Plugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/Plugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/Plugin.cs.frame	(revision 6195)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Problems.QuadraticAssignment.Views {
-  [Plugin("HeuristicLab.Problems.QuadraticAssignment.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.QuadraticAssignment.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.QuadraticAssignment.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
Index: branches/histogram/HeuristicLab.Problems.QuadraticAssignment/3.3/Plugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.QuadraticAssignment/3.3/Plugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.QuadraticAssignment/3.3/Plugin.cs.frame	(revision 6195)
@@ -23,5 +23,5 @@
 
 namespace HeuristicLab.Problems.QuadraticAssignment {
-  [Plugin("HeuristicLab.Problems.QuadraticAssignment", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.QuadraticAssignment", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.QuadraticAssignment-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Problems.QuadraticAssignment/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.QuadraticAssignment/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.QuadraticAssignment/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -55,3 +55,3 @@
 // [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLabProblemsTestFunctionsViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLabProblemsTestFunctionsViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLabProblemsTestFunctionsViewsPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Problems.TestFunctions.Views plugin
   /// </summary>
-  [Plugin("HeuristicLab.Problems.TestFunctions.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.TestFunctions.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.TestFunctions.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Problems.TestFunctions.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.TestFunctions.Views/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.TestFunctions.Views/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLabProblemsTestFunctionsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLabProblemsTestFunctionsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLabProblemsTestFunctionsPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Problems.TestFunctions plugin
   /// </summary>
-  [Plugin("HeuristicLab.Problems.TestFunctions", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.TestFunctions", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.TestFunctions-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Problems.TestFunctions/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.TestFunctions/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.TestFunctions/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLabProblemsTravelingSalesmanViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLabProblemsTravelingSalesmanViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLabProblemsTravelingSalesmanViewsPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Problems.TravelingSalesman.Views plugin
   /// </summary>
-  [Plugin("HeuristicLab.Problems.TravelingSalesman.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.TravelingSalesman.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.TravelingSalesman.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Common", "3.3")]
Index: branches/histogram/HeuristicLab.Problems.TravelingSalesman.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.TravelingSalesman.Views/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.TravelingSalesman.Views/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLabProblemsTravelingSalesmanPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLabProblemsTravelingSalesmanPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLabProblemsTravelingSalesmanPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Problems.TravelingSalesman plugin
   /// </summary>
-  [Plugin("HeuristicLab.Problems.TravelingSalesman", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.TravelingSalesman", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.TravelingSalesman-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
Index: branches/histogram/HeuristicLab.Problems.TravelingSalesman/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.TravelingSalesman/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.TravelingSalesman/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.VehicleRouting.Views/3.3/HeuristicLabProblemsVehicleRoutingViewsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.VehicleRouting.Views/3.3/HeuristicLabProblemsVehicleRoutingViewsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.VehicleRouting.Views/3.3/HeuristicLabProblemsVehicleRoutingViewsPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Problems.VehicleRouting.Views plugin
   /// </summary>
-  [Plugin("HeuristicLab.Problems.VehicleRouting.Views", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.VehicleRouting.Views", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.VehicleRouting.Views-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
Index: branches/histogram/HeuristicLab.Problems.VehicleRouting.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.VehicleRouting.Views/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.VehicleRouting.Views/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Problems.VehicleRouting/3.3/HeuristicLabProblemsVehicleRoutingPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.VehicleRouting/3.3/HeuristicLabProblemsVehicleRoutingPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.VehicleRouting/3.3/HeuristicLabProblemsVehicleRoutingPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Problems.VehicleRouting plugin
   /// </summary>
-  [Plugin("HeuristicLab.Problems.VehicleRouting", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Problems.VehicleRouting", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Problems.VehicleRouting-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
Index: branches/histogram/HeuristicLab.Problems.VehicleRouting/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Problems.VehicleRouting/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Problems.VehicleRouting/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -53,3 +53,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Random/3.3/HeuristicLabRandomPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Random/3.3/HeuristicLabRandomPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Random/3.3/HeuristicLabRandomPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Random plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Random", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Random", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Random-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Random/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Random/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Random/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Selection/3.3/HeuristicLabSelectionPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Selection/3.3/HeuristicLabSelectionPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Selection/3.3/HeuristicLabSelectionPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Selection plugin.
   /// </summary>
-  [Plugin("HeuristicLab.Selection", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Selection", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Selection-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
Index: branches/histogram/HeuristicLab.Selection/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Selection/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Selection/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Selection/3.3/RandomReplacer.cs
===================================================================
--- branches/histogram/HeuristicLab.Selection/3.3/RandomReplacer.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Selection/3.3/RandomReplacer.cs	(revision 6195)
@@ -65,8 +65,10 @@
       randomSelector.RandomParameter.ActualName = RandomParameter.Name;
       ReplacedSelectorParameter.Value = randomSelector;
+      ReplacedSelectorParameter.Hidden = true;
       BestSelector bestSelector = new BestSelector();
       bestSelector.MaximizationParameter.ActualName = MaximizationParameter.Name;
       bestSelector.QualityParameter.ActualName = QualityParameter.Name;
       SelectedSelectorParameter.Value = bestSelector;
+      SelectedSelectorParameter.Hidden = true;
     }
   }
Index: branches/histogram/HeuristicLab.Selection/3.3/WorstReplacer.cs
===================================================================
--- branches/histogram/HeuristicLab.Selection/3.3/WorstReplacer.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Selection/3.3/WorstReplacer.cs	(revision 6195)
@@ -60,8 +60,10 @@
       worstSelector.QualityParameter.ActualName = QualityParameter.Name;
       ReplacedSelectorParameter.Value = worstSelector;
+      ReplacedSelectorParameter.Hidden = true;
       BestSelector bestSelector = new BestSelector();
       bestSelector.MaximizationParameter.ActualName = MaximizationParameter.Name;
       bestSelector.QualityParameter.ActualName = QualityParameter.Name;
       SelectedSelectorParameter.Value = bestSelector;
+      SelectedSelectorParameter.Hidden = true;
     }
   }
Index: branches/histogram/HeuristicLab.SequentialEngine/3.3/HeuristicLabSequentialEnginePlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.SequentialEngine/3.3/HeuristicLabSequentialEnginePlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.SequentialEngine/3.3/HeuristicLabSequentialEnginePlugin.cs.frame	(revision 6195)
@@ -29,5 +29,5 @@
   /// Plugin class for HeuristicLab.SequentialEngine plugin.
   /// </summary>
-  [Plugin("HeuristicLab.SequentialEngine", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.SequentialEngine", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.SequentialEngine-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Common", "3.3")]
Index: branches/histogram/HeuristicLab.SequentialEngine/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.SequentialEngine/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.SequentialEngine/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Tracing/3.3/HeuristicLab.Hive.log4net.xml
===================================================================
--- branches/histogram/HeuristicLab.Tracing/3.3/HeuristicLab.Hive.log4net.xml	(revision 6194)
+++ 	(revision )
@@ -1,66 +1,0 @@
-﻿<log4net>
-  
-  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
-    <file value="Hive.log" />
-    <appendToFile value="true" />
-    <rollingStyle value="Size" />
-    <maxSizeRollBackups value="10" />
-    <maximumFileSize value="1000KB" />
-    <staticLogFileName value="true" />
-    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
-    <layout type="HeuristicLab.Tracing.MethodCallPatternLayout, HeuristicLab.Tracing-3.2">
-      <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss.ffff} %-4timestamp %-5level %logger.%RM - %message%newline%exception" />
-    </layout>
-  </appender>
-
-  <appender name="ServerRollingFileAppender" type="log4net.Appender.RollingFileAppender">
-    <file value="Hive.Server.log" />
-    <appendToFile value="true" />
-    <rollingStyle value="Size" />
-    <maxSizeRollBackups value="10" />
-    <maximumFileSize value="1000KB" />
-    <staticLogFileName value="true" />
-    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
-    <layout type="HeuristicLab.Tracing.MethodCallPatternLayout, HeuristicLab.Tracing-3.2">
-      <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss.ffff} %-4timestamp %-5level %logger.%RM - %message%newline%exception" />
-    </layout>
-  </appender>
-
-  <appender name="ClientRollingFileAppender" type="log4net.Appender.RollingFileAppender">
-    <file value="Hive.Client.log" />
-    <appendToFile value="true" />
-    <rollingStyle value="Size" />
-    <maxSizeRollBackups value="10" />
-    <maximumFileSize value="1000KB" />
-    <staticLogFileName value="true" />
-    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
-    <layout type="HeuristicLab.Tracing.MethodCallPatternLayout, HeuristicLab.Tracing-3.2">
-      <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss.ffff} %-4timestamp %-5level %logger.%RM - %message%newline%exception" />
-    </layout>
-  </appender>
-  
-  <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
-    <bufferSize value="128" />
-    <lossy value="true" />
-    <evaluator type="log4net.Core.LevelEvaluator">
-        <threshold value="DEBUG"/>
-    </evaluator>
-    <appender-ref ref="RollingFileAppender" />
-  </appender>
-  
-  <root>
-    <level value="INFO" />
-    <appender-ref ref="BufferingForwardingAppender" />
-  </root>
-
-  <logger name="HeuristicLab.Hive.Server">
-    <level value="DEBUG" />
-    <appender-ref ref="ServerRollingFileAppender" />    
-  </logger>
-
-  <logger name="HeuristicLab.Hive.Client">
-    <level value="DEBUG" />
-    <appender-ref ref="ClientRollingFileAppender" />  
-  </logger>
-  
-</log4net>
Index: branches/histogram/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj
===================================================================
--- branches/histogram/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj	(revision 6194)
+++ branches/histogram/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj	(revision 6195)
@@ -96,8 +96,4 @@
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\HeuristicLab.ExtLibs\HeuristicLab.log4net\1.2.10.0\log4net.dll</HintPath>
-    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core">
@@ -115,19 +111,9 @@
   <ItemGroup>
     <None Include="HeuristicLabTracingPlugin.cs.frame" />
-    <Compile Include="HiveLogger.cs" />
+    <Compile Include="HeuristicLabTracingPlugin.cs" />
     <Compile Include="Logger.cs" />
-    <Compile Include="HeuristicLabTracingPlugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Properties\Settings.Designer.cs">
-      <AutoGen>True</AutoGen>
-      <DesignTimeSharedInput>True</DesignTimeSharedInput>
-      <DependentUpon>Settings.settings</DependentUpon>
-    </Compile>
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\HeuristicLab.ExtLibs\HeuristicLab.log4net\1.2.10.0\HeuristicLab.log4net-1.2.10.0.csproj">
-      <Project>{1B3063DB-D71C-4A6A-A359-883E8F53A140}</Project>
-      <Name>HeuristicLab.log4net-1.2.10.0</Name>
-    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
       <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
@@ -139,16 +125,4 @@
     <None Include="HeuristicLab.snk" />
     <None Include="Properties\AssemblyInfo.frame" />
-    <None Include="Properties\Settings.settings">
-      <Generator>SettingsSingleFileGenerator</Generator>
-      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
-    </None>
-    <Content Include="HeuristicLab.log4net.xml">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Content>
-  </ItemGroup>
-  <ItemGroup>
-    <Content Include="HeuristicLab.Hive.log4net.xml">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Content>
   </ItemGroup>
   <ItemGroup>
Index: branches/histogram/HeuristicLab.Tracing/3.3/HeuristicLab.log4net.xml
===================================================================
--- branches/histogram/HeuristicLab.Tracing/3.3/HeuristicLab.log4net.xml	(revision 6194)
+++ 	(revision )
@@ -1,30 +1,0 @@
-﻿<log4net>
-  
-  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
-    <file value="HeuristicLab.log" />
-    <appendToFile value="true" />
-    <rollingStyle value="Size" />
-    <maxSizeRollBackups value="10" />
-    <maximumFileSize value="100KB" />
-    <staticLogFileName value="true" />
-    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
-    <layout type="log4net.Layout.PatternLayout">
-      <conversionPattern value="%-4timestamp [%appdomain/%thread] %-5level %logger %ndc - %message%newline%exception" />
-    </layout>
-  </appender>
-  
-  <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
-    <bufferSize value="128" />
-    <lossy value="true" />
-    <evaluator type="log4net.Core.LevelEvaluator">
-        <threshold value="INFO"/>
-    </evaluator>
-    <appender-ref ref="RollingFileAppender" />
-  </appender>
-  
-  <root>
-    <level value="INFO" />
-    <appender-ref ref="BufferingForwardingAppender" />
-  </root>
-  
-</log4net>
Index: branches/histogram/HeuristicLab.Tracing/3.3/HeuristicLabTracingPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Tracing/3.3/HeuristicLabTracingPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Tracing/3.3/HeuristicLabTracingPlugin.cs.frame	(revision 6195)
@@ -27,8 +27,6 @@
   /// HeuristicLab Tracing Plugin
   /// </summary>  
-  [Plugin("HeuristicLab.Tracing", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Tracing", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Tracing-3.3.dll", PluginFileType.Assembly)]
-  [PluginFile("HeuristicLab.log4net.xml", PluginFileType.Data)]
-  [PluginDependency("HeuristicLab.log4net", "1.2.10.0")]
   public class HeuristicLabPersistencePlugin : PluginBase {}
 
Index: branches/histogram/HeuristicLab.Tracing/3.3/HiveLogger.cs
===================================================================
--- branches/histogram/HeuristicLab.Tracing/3.3/HiveLogger.cs	(revision 6194)
+++ 	(revision )
@@ -1,147 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Diagnostics;
-using System.IO;
-using HeuristicLab.Tracing.Properties;
-using log4net;
-using log4net.Config;
-
-namespace HeuristicLab.Tracing {
-  public class HiveLogger {
-    protected static bool IsConfigured = false;
-    protected static void Configure() {
-      if (IsConfigured) return;
-      IsConfigured = true;
-      if (string.IsNullOrEmpty(Settings.Default.TracingLog4netConfigFile)) {
-        Settings.Default.TracingLog4netConfigFile =
-            "HeuristicLab.Hive.log4net.xml";
-      }
-      XmlConfigurator.ConfigureAndWatch(
-        new FileInfo(Settings.Default.TracingLog4netConfigFile));
-      Info("Hive Logging initialized " + DateTime.Now);
-    }
-
-    public static ILog GetDefaultLogger(int nParents) {
-      Configure();
-      StackFrame frame = new StackFrame(nParents + 1);
-      return LogManager.GetLogger(frame.GetMethod().DeclaringType);
-    }
-
-    public static ILog GetDefaultLogger() {
-      Configure();
-      StackFrame frame = new StackFrame(1);
-      return LogManager.GetLogger(frame.GetMethod().DeclaringType);
-    }
-
-    public static void Debug(object message) {
-      GetDefaultLogger(1).Debug(DateTime.Now + ":" + DateTime.Now.Millisecond + " - " + message);
-    }
-
-    public static void Info(object message) {
-      GetDefaultLogger(1).Info(DateTime.Now + ":" + DateTime.Now.Millisecond + " - " + message);
-    }
-
-    public static void Warn(object message) {
-      GetDefaultLogger(1).Warn(DateTime.Now + ":" + DateTime.Now.Millisecond + " - " + message);
-    }
-
-    public static void Error(object message) {
-      GetDefaultLogger(1).Error(DateTime.Now + ":" + DateTime.Now.Millisecond + " - " + message);
-    }
-
-    public static void Fatal(object message) {
-      GetDefaultLogger(1).Fatal(DateTime.Now + ":" + DateTime.Now.Millisecond + " - " + message);
-    }
-
-    public static void Debug(Type type, object message) {
-      Configure();
-      LogManager.GetLogger(type).Debug(message);
-    }
-
-    public static void Info(Type type, object message) {
-      Configure();
-      LogManager.GetLogger(type).Info(message);
-    }
-
-    public static void Warn(Type type, object message) {
-      Configure();
-      LogManager.GetLogger(type).Warn(message);
-    }
-
-    public static void Error(Type type, object message) {
-      Configure();
-      LogManager.GetLogger(type).Error(message);
-    }
-
-    public static void Fatal(Type type, object message) {
-      Configure();
-      LogManager.GetLogger(type).Fatal(message);
-    }
-
-    public static void Debug(object message, Exception exception) {
-      GetDefaultLogger(1).Debug(message, exception);
-    }
-
-    public static void Info(object message, Exception exception) {
-      GetDefaultLogger(1).Info(message, exception);
-    }
-
-    public static void Warn(object message, Exception exception) {
-      GetDefaultLogger(1).Warn(message, exception);
-    }
-
-    public static void Error(object message, Exception exception) {
-      GetDefaultLogger(1).Error(message, exception);
-    }
-
-    public static void Fatal(object message, Exception exception) {
-      GetDefaultLogger(1).Fatal(message, exception);
-    }
-
-    public static void Debug(Type type, object message, Exception exception) {
-      Configure();
-      LogManager.GetLogger(type).Debug(message, exception);
-    }
-
-    public static void Info(Type type, object message, Exception exception) {
-      Configure();
-      LogManager.GetLogger(type).Info(message, exception);
-    }
-
-    public static void Warn(Type type, object message, Exception exception) {
-      Configure();
-      LogManager.GetLogger(type).Warn(message, exception);
-    }
-
-    public static void Error(Type type, object message, Exception exception) {
-      Configure();
-      LogManager.GetLogger(type).Error(message, exception);
-    }
-
-    public static void Fatal(Type type, object message, Exception exception) {
-      Configure();
-      LogManager.GetLogger(type).Fatal(message, exception);
-    }
-
-  }
-}
Index: branches/histogram/HeuristicLab.Tracing/3.3/Logger.cs
===================================================================
--- branches/histogram/HeuristicLab.Tracing/3.3/Logger.cs	(revision 6194)
+++ branches/histogram/HeuristicLab.Tracing/3.3/Logger.cs	(revision 6195)
@@ -20,210 +20,126 @@
 #endregion
 
+
 using System;
 using System.Diagnostics;
-using System.IO;
-using HeuristicLab.Tracing.Properties;
-using log4net;
-using log4net.Config;
-
 namespace HeuristicLab.Tracing {
 
   /// <summary>
-  /// HeuristicLab Tracing entry point. Default logger. Reads configured tracing
-  /// file and provides automatic logging with reflection of the calling type.
+  /// HeuristicLab.Tracing using System.Diagnostics.Trace.
+  /// Note that tracing is only activated if the DEBUG or TRACE symbol is set. 
+  /// Configuration (type of listener, file name, ...) is done in app.config in the <system.diagnostics> section. 
   /// </summary>
   public class Logger {
 
     /// <summary>
-    /// true if Configure has been called already.
+    /// Issues a debug message.
     /// </summary>
-    protected static bool IsConfigured = false;
-
-    /// <summary>
-    /// Configures this instance: Reads the log file specified in the settings.
-    /// </summary>
-    protected static void Configure() {
-      if (IsConfigured) return;
-      IsConfigured = true;
-      if (string.IsNullOrEmpty(Settings.Default.TracingLog4netConfigFile)) {
-        Settings.Default.TracingLog4netConfigFile =
-            "HeuristicLab.log4net.xml";
-      }
-      XmlConfigurator.ConfigureAndWatch(
-        new FileInfo(Settings.Default.TracingLog4netConfigFile));
-      Info("logging initialized " + DateTime.Now);
+    /// <param name="message">The message.</param>
+    public static void Debug(object message) {
+      StackFrame frame = new StackFrame(1);
+      Trace.TraceInformation("{0} - {1}", frame.GetMethod().DeclaringType, message);
     }
 
     /// <summary>
-    /// Gets the default logger for the calling class n levels up in the
-    /// call hierarchy.
+    /// Issues an informational message. 
     /// </summary>
-    /// <param name="nParents">The number of parent calls.</param>
-    /// <returns>An <see cref="ILog"/> instance.</returns>
-    public static ILog GetDefaultLogger(int nParents) {
-      Configure();
-      StackFrame frame = new StackFrame(nParents + 1);
-      return LogManager.GetLogger(frame.GetMethod().DeclaringType);
+    /// <param name="message">The message.</param>
+    public static void Info(object message) {
+      StackFrame frame = new StackFrame(1);
+      Trace.TraceInformation("{0} - {1}", frame.GetMethod().DeclaringType, message);
     }
 
     /// <summary>
-    /// Gets the default logger: The logger for the class of the
-    /// calling method.
+    /// Issues a warning message.
     /// </summary>
-    /// <returns>An <see cref="ILog"/> instance.</returns>
-    public static ILog GetDefaultLogger() {
-      Configure();
+    /// <param name="message">The message.</param>
+    public static void Warn(object message) {
       StackFrame frame = new StackFrame(1);
-      return LogManager.GetLogger(frame.GetMethod().DeclaringType);
+      Trace.TraceWarning("{0} - {1}", frame.GetMethod().DeclaringType, message);
     }
 
     /// <summary>
-    /// Issues a debug message to the default logger.
+    /// Issues an error message.
     /// </summary>
     /// <param name="message">The message.</param>
-    public static void Debug(object message) {
-      GetDefaultLogger(1).Debug(message);
+    public static void Error(object message) {
+      StackFrame frame = new StackFrame(1);
+      Trace.TraceError("{0} - {1}", frame.GetMethod().DeclaringType, message);
     }
 
     /// <summary>
-    /// Issues an informational message to the default logger.
-    /// </summary>
-    /// <param name="message">The message.</param>
-    public static void Info(object message) {
-      GetDefaultLogger(1).Info(message);
-    }
-
-    /// <summary>
-    /// Issues a warning message to the default logger.
-    /// </summary>
-    /// <param name="message">The message.</param>
-    public static void Warn(object message) {
-      GetDefaultLogger(1).Warn(message);
-    }
-
-    /// <summary>
-    /// Issues an error message to the default logger.
-    /// </summary>
-    /// <param name="message">The message.</param>
-    public static void Error(object message) {
-      GetDefaultLogger(1).Error(message);
-    }
-
-    /// <summary>
-    /// Issues a fatal error message to the default logger.
-    /// </summary>
-    /// <param name="message">The message.</param>
-    public static void Fatal(object message) {
-      GetDefaultLogger(1).Fatal(message);
-    }
-
-    /// <summary>
-    /// Issues a debug message to the logger of the specified type.
+    /// Issues a debug message of the specified type.
     /// </summary>
     /// <param name="type">The type.</param>
     /// <param name="message">The message.</param>
     public static void Debug(Type type, object message) {
-      Configure();
-      LogManager.GetLogger(type).Debug(message);
+      Trace.TraceInformation("{0}: {1}", type, message);
     }
 
     /// <summary>
-    /// Issues an iformational message to the logger of the specified
-    /// type.
+    /// Issues an informational message of the specified type.
     /// </summary>
     /// <param name="type">The type.</param>
     /// <param name="message">The message.</param>
     public static void Info(Type type, object message) {
-      Configure();
-      LogManager.GetLogger(type).Info(message);
+      Trace.TraceInformation("{0}: {1}", type, message);
     }
 
     /// <summary>
-    /// Issues a warning message to the logger of
-    /// the specified type.
+    /// Issues a warning message of the specified type.
     /// </summary>
     /// <param name="type">The type.</param>
     /// <param name="message">The message.</param>
     public static void Warn(Type type, object message) {
-      Configure();
-      LogManager.GetLogger(type).Warn(message);
+      Trace.TraceWarning("{0}: {1}", type, message);
     }
 
     /// <summary>
-    /// Issues an error message to the logger of the specified
-    /// type.
+    /// Issues an error message of the specified type.
     /// </summary>
     /// <param name="type">The type.</param>
     /// <param name="message">The message.</param>
     public static void Error(Type type, object message) {
-      Configure();
-      LogManager.GetLogger(type).Error(message);
+      Trace.TraceError("{0}: {1}", type, message);
     }
 
     /// <summary>
-    /// Issues a fatal error message to the logger of
-    /// the specified type.
-    /// </summary>
-    /// <param name="type">The type.</param>
-    /// <param name="message">The message.</param>
-    public static void Fatal(Type type, object message) {
-      Configure();
-      LogManager.GetLogger(type).Fatal(message);
-    }
-
-    /// <summary>
-    /// Issues a debug message to the default
-    /// logger including an exception.
+    /// Issues a debug message including an exception.
     /// </summary>
     /// <param name="message">The message.</param>
     /// <param name="exception">The exception.</param>
     public static void Debug(object message, Exception exception) {
-      GetDefaultLogger(1).Debug(message, exception);
+      Trace.TraceInformation("{0}: {1}:", message, exception);
     }
 
     /// <summary>
-    /// Issues an informational message to the default
-    /// logger including an exception.
+    /// Issues an informational message including an exception.
     /// </summary>
     /// <param name="message">The message.</param>
-    /// <param name="exception">The exception.</param>
-
+    /// <param name="exception">The exception.</param>        
     public static void Info(object message, Exception exception) {
-      GetDefaultLogger(1).Info(message, exception);
+      Trace.TraceInformation("{0}: {1}:", message, exception);
     }
 
     /// <summary>
-    /// Issues a warning message to the default
-    /// logger including an exception.
+    /// Issues a warning message including an exception.
     /// </summary>
     /// <param name="message">The message.</param>
     /// <param name="exception">The exception.</param>
     public static void Warn(object message, Exception exception) {
-      GetDefaultLogger(1).Warn(message, exception);
+      Trace.TraceWarning("{0}: {1}:", message, exception);
     }
 
     /// <summary>
-    /// Issues an error message to the default
-    /// logger including an exception.
+    /// Issues an error message including an exception.
     /// </summary>
     /// <param name="message">The message.</param>
     /// <param name="exception">The exception.</param>
     public static void Error(object message, Exception exception) {
-      GetDefaultLogger(1).Error(message, exception);
+      Trace.TraceError("{0}: {1}:", message, exception);
     }
 
     /// <summary>
-    /// Issues a fatal error message to the default
-    /// logger including an exception.
-    /// </summary>
-    /// <param name="message">The message.</param>
-    /// <param name="exception">The exception.</param>
-    public static void Fatal(object message, Exception exception) {
-      GetDefaultLogger(1).Fatal(message, exception);
-    }
-
-    /// <summary>
-    /// Issues a debug message to the logger of the specified
-    /// type including an exception.
+    /// Issues a debug message of the specified type including an exception.
     /// </summary>
     /// <param name="type">The type.</param>
@@ -231,11 +147,9 @@
     /// <param name="exception">The exception.</param>
     public static void Debug(Type type, object message, Exception exception) {
-      Configure();
-      LogManager.GetLogger(type).Debug(message, exception);
+      Trace.TraceInformation("{0}: {1}: {2}", type, message, exception);
     }
 
     /// <summary>
-    /// Issues an informational message to the logger of the specified
-    /// type including an exception.
+    /// Issues an informational message of the specified type including an exception.
     /// </summary>
     /// <param name="type">The type.</param>
@@ -243,11 +157,9 @@
     /// <param name="exception">The exception.</param>
     public static void Info(Type type, object message, Exception exception) {
-      Configure();
-      LogManager.GetLogger(type).Info(message, exception);
+      Trace.TraceInformation("{0}: {1}: {2}", type, message, exception);
     }
 
     /// <summary>
-    /// Issues a warning message to the logger of the specified
-    /// type including an exception.
+    /// Issues a warning message of the specified type including an exception.
     /// </summary>
     /// <param name="type">The type.</param>
@@ -255,11 +167,9 @@
     /// <param name="exception">The exception.</param>
     public static void Warn(Type type, object message, Exception exception) {
-      Configure();
-      LogManager.GetLogger(type).Warn(message, exception);
+      Trace.TraceWarning("{0}: {1}: {2}", type, message, exception);
     }
 
     /// <summary>
-    /// Issues an error message to the logger of the specified
-    /// type including an exception.
+    /// Issues an error message of the specified type including an exception.
     /// </summary>
     /// <param name="type">The type.</param>
@@ -267,18 +177,5 @@
     /// <param name="exception">The exception.</param>
     public static void Error(Type type, object message, Exception exception) {
-      Configure();
-      LogManager.GetLogger(type).Error(message, exception);
-    }
-
-    /// <summary>
-    /// Issues a fatal error message to the logger of the specified
-    /// type including an exception.
-    /// </summary>
-    /// <param name="type">The type.</param>
-    /// <param name="message">The message.</param>
-    /// <param name="exception">The exception.</param>
-    public static void Fatal(Type type, object message, Exception exception) {
-      Configure();
-      LogManager.GetLogger(type).Fatal(message, exception);
+      Trace.TraceError("{0}: {1}: {2}", type, message, exception);
     }
   }
Index: branches/histogram/HeuristicLab.Tracing/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Tracing/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Tracing/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -52,3 +52,3 @@
 //
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab.Tracing/3.3/Properties/Settings.Designer.cs
===================================================================
--- branches/histogram/HeuristicLab.Tracing/3.3/Properties/Settings.Designer.cs	(revision 6194)
+++ 	(revision )
@@ -1,38 +1,0 @@
-﻿//------------------------------------------------------------------------------
-// <auto-generated>
-//     This code was generated by a tool.
-//     Runtime Version:4.0.30319.1
-//
-//     Changes to this file may cause incorrect behavior and will be lost if
-//     the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace HeuristicLab.Tracing.Properties {
-    
-    
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
-    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
-        
-        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-        
-        public static Settings Default {
-            get {
-                return defaultInstance;
-            }
-        }
-        
-        [global::System.Configuration.UserScopedSettingAttribute()]
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("")]
-        public string TracingLog4netConfigFile {
-            get {
-                return ((string)(this["TracingLog4netConfigFile"]));
-            }
-            set {
-                this["TracingLog4netConfigFile"] = value;
-            }
-        }
-    }
-}
Index: branches/histogram/HeuristicLab.Tracing/3.3/Properties/Settings.settings
===================================================================
--- branches/histogram/HeuristicLab.Tracing/3.3/Properties/Settings.settings	(revision 6194)
+++ 	(revision )
@@ -1,9 +1,0 @@
-﻿<?xml version='1.0' encoding='utf-8'?>
-<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Tracing.Properties" GeneratedClassName="Settings">
-  <Profiles />
-  <Settings>
-    <Setting Name="TracingLog4netConfigFile" Type="System.String" Scope="User">
-      <Value Profile="(Default)" />
-    </Setting>
-  </Settings>
-</SettingsFile>
Index: branches/histogram/HeuristicLab.Tracing/3.3/app.config
===================================================================
--- branches/histogram/HeuristicLab.Tracing/3.3/app.config	(revision 6194)
+++ branches/histogram/HeuristicLab.Tracing/3.3/app.config	(revision 6195)
@@ -1,15 +1,13 @@
 <?xml version="1.0"?>
-<configuration>
-  <configSections>    
-    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-      <section name="HeuristicLab.Tracing.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
-    </sectionGroup>
-  </configSections>
-  <userSettings>
-    <HeuristicLab.Tracing.Properties.Settings>
-      <setting name="TracingLog4netConfigFile" serializeAs="String">
-        <value/>
-      </setting>
-    </HeuristicLab.Tracing.Properties.Settings>
-  </userSettings>
+<configuration>        
+  <system.diagnostics>
+    <trace autoflush="true" indentsize="4">
+      <listeners>
+        <add name="HeuristicLabListener"
+          type="System.Diagnostics.TextWriterTraceListener"
+          initializeData="HeuristicLab.log" />
+        <remove name="Default" />
+      </listeners>
+    </trace>
+  </system.diagnostics>
 <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
Index: branches/histogram/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLabVisualizationChartControlsExtensionsPlugin.cs.frame
===================================================================
--- branches/histogram/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLabVisualizationChartControlsExtensionsPlugin.cs.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLabVisualizationChartControlsExtensionsPlugin.cs.frame	(revision 6195)
@@ -26,5 +26,5 @@
   /// Plugin class for HeuristicLab.Visualization.ChartControlsExtensions plugin
   /// </summary>  
-  [Plugin("HeuristicLab.Visualization.ChartControlsExtensions", "3.3.3.$WCREV$")]
+  [Plugin("HeuristicLab.Visualization.ChartControlsExtensions", "3.3.4.$WCREV$")]
   [PluginFile("HeuristicLab.Visualization.ChartControlsExtensions-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
Index: branches/histogram/HeuristicLab.Visualization.ChartControlsExtensions/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab.Visualization.ChartControlsExtensions/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab.Visualization.ChartControlsExtensions/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -52,3 +52,3 @@
 //
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/histogram/HeuristicLab/3.3/Properties/AssemblyInfo.frame	(revision 6194)
+++ branches/histogram/HeuristicLab/3.3/Properties/AssemblyInfo.frame	(revision 6195)
@@ -51,4 +51,4 @@
 //      Revision
 //
-[assembly: AssemblyVersion("3.3.3.$WCREV$")]
-[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
+[assembly: AssemblyVersion("3.3.4.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.4.$WCREV$")]
Index: branches/histogram/HeuristicLab/3.3/Tests/SymbolicRegressionTest.cs
===================================================================
--- branches/histogram/HeuristicLab/3.3/Tests/SymbolicRegressionTest.cs	(revision 6194)
+++ branches/histogram/HeuristicLab/3.3/Tests/SymbolicRegressionTest.cs	(revision 6195)
@@ -66,7 +66,7 @@
       TestContext.WriteLine("Runtime: {0}", ga.ExecutionTime.ToString());
 
-      double expectedValidationQuality = 0.74993359405662341;
-      double expectedBestQuality = 0.718883694431814551;
-      double expectedAverageQuality = 0.4678678123964391;
+      double expectedValidationQuality = 0.72902735951261033;
+      double expectedBestQuality = 0.68726148410052335;
+      double expectedAverageQuality = 0.50555375244787948;
       double expectedWorstQuality = 0;
       double bestQuality = (ga.Results["CurrentBestQuality"].Value as DoubleValue).Value;
