Index: branches/HiveStatistics/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/MenuItems/CreateEnsembleMenuItem.cs
===================================================================
--- branches/HiveStatistics/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/MenuItems/CreateEnsembleMenuItem.cs	(revision 11203)
+++ branches/HiveStatistics/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/MenuItems/CreateEnsembleMenuItem.cs	(revision 11205)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2014 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -23,6 +23,5 @@
 using System.Collections.Generic;
 using System.Linq;
-using System.Windows.Forms;
-using HeuristicLab.Core;
+using HeuristicLab.Common;
 using HeuristicLab.MainForm;
 using HeuristicLab.MainForm.WindowsForms;
@@ -31,5 +30,5 @@
 using HeuristicLab.Optimizer;
 
-namespace HeuristicLab.Problems.DataAnalysis.MenuItems {
+namespace HeuristicLab.Problems.DataAnalysis.Views {
   internal class CreateEnsembleMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
     public override string Name {
@@ -37,8 +36,8 @@
     }
     public override IEnumerable<string> Structure {
-      get { return new string[] { "&Edit" }; }
+      get { return new string[] { "&Edit", "&Data Analysis" }; }
     }
     public override int Position {
-      get { return 2500; }
+      get { return 5100; }
     }
     public override string ToolTipText {
@@ -68,9 +67,7 @@
         if (group.All(s => s is IRegressionSolution)) {
           // show all regression ensembles
-          // clone problemdata (N.B. this assumes all solutions are based on the same problem data!)
-          var problemData = (RegressionProblemData)group
-            .OfType<IRegressionSolution>()
-            .First()
-            .ProblemData.Clone();
+          // N.B. this assumes all solutions are based on the same problem data!
+          // the problem data is not cloned because the individual solutions were already cloned
+          var problemData = group.OfType<IRegressionSolution>().First().ProblemData;
           var ensemble = new RegressionEnsembleSolution(problemData);
           ensemble.Name = group.Key + " ensemble";
@@ -81,8 +78,7 @@
         } else if (group.All(s => s is IClassificationSolution)) {
           // show all classification ensembles
-          var problemData = (ClassificationProblemData)group
-            .OfType<IClassificationSolution>()
-            .First()
-            .ProblemData.Clone();
+          // N.B. this assumes all solutions are based on the same problem data!
+          // the problem data is not cloned because the individual solutions were already cloned
+          var problemData = (ClassificationProblemData)group.OfType<IClassificationSolution>().First().ProblemData;
           var ensemble = new ClassificationEnsembleSolution(Enumerable.Empty<IClassificationModel>(), problemData);
           ensemble.Name = group.Key + " ensemble";
@@ -95,6 +91,6 @@
     }
 
-    private IEnumerable<KeyValuePair<string, IItem>> GetDataAnalysisResults(IContentView view) {
-      var empty = Enumerable.Empty<KeyValuePair<string, IItem>>();
+    private IEnumerable<KeyValuePair<string, IDataAnalysisSolution>> GetDataAnalysisResults(IContentView view) {
+      var empty = Enumerable.Empty<KeyValuePair<string, IDataAnalysisSolution>>();
       if (view == null) return empty;
       if (view.Content == null) return empty;
@@ -114,12 +110,15 @@
     }
 
-    private IEnumerable<KeyValuePair<string, IItem>> GetDataAnalysisResults(IEnumerable<IRun> runs) {
+    private IEnumerable<KeyValuePair<string, IDataAnalysisSolution>> GetDataAnalysisResults(IEnumerable<IRun> runs) {
+      var cloner = new Cloner();
       var allResults = from r in runs
+                       where r.Visible
                        select r.Results;
       return from r in allResults
              from result in r
-             let s = result.Value as IDataAnalysisSolution
-             where s != null
-             select result;
+             let solution = result.Value as IDataAnalysisSolution
+             where solution != null
+             let s = (IDataAnalysisSolution)cloner.Clone(result.Value)
+             select new KeyValuePair<string, IDataAnalysisSolution>(result.Key, s);
     }
   }
