Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj	(revision 13704)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj	(revision 13705)
@@ -195,4 +195,10 @@
     <Compile Include="ProblemDataView.Designer.cs">
       <DependentUpon>ProblemDataView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Regression\RegressionEnsembleSolutionModelWeightsView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Regression\RegressionEnsembleSolutionModelWeightsView.Designer.cs">
+      <DependentUpon>RegressionEnsembleSolutionModelWeightsView.cs</DependentUpon>
     </Compile>
     <Compile Include="Regression\RegressionFeatureCorrelationView.cs">
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionModelView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionModelView.cs	(revision 13704)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionModelView.cs	(revision 13705)
@@ -63,8 +63,10 @@
       protected override void SetEnabledStateOfControls() {
         base.SetEnabledStateOfControls();
-        addButton.Enabled = Content != null && !Content.IsReadOnly && !Locked;
-        removeButton.Enabled = Content != null && !Content.IsReadOnly && !Locked && itemsListView.SelectedItems.Count > 0;
+        addButton.Enabled = false;
+        removeButton.Enabled = Content != null && !Content.IsReadOnly && !Locked && !ReadOnly && itemsListView.SelectedItems.Count > 0;
         itemsListView.Enabled = Content != null && !Locked;
         detailsGroupBox.Enabled = Content != null && itemsListView.SelectedItems.Count == 1;
+        sortAscendingButton.Enabled = false;
+        sortDescendingButton.Enabled = false;
       }
 
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionModelWeightsView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionModelWeightsView.Designer.cs	(revision 13705)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionModelWeightsView.Designer.cs	(revision 13705)
@@ -0,0 +1,91 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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 RegressionEnsembleSolutionModelWeightsView {
+    /// <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.arrayView = new HeuristicLab.Data.Views.StringConvertibleArrayView();
+      this.averageEstimatesCheckBox = new System.Windows.Forms.CheckBox();
+      this.SuspendLayout();
+      // 
+      // arrayView
+      // 
+      this.arrayView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.arrayView.Caption = "StringConvertibleArray View";
+      this.arrayView.Content = null;
+      this.arrayView.Location = new System.Drawing.Point(3, 27);
+      this.arrayView.Name = "arrayView";
+      this.arrayView.ReadOnly = false;
+      this.arrayView.Size = new System.Drawing.Size(711, 508);
+      this.arrayView.TabIndex = 0;
+      // 
+      // averageEstimatesCheckBox
+      // 
+      this.averageEstimatesCheckBox.AutoSize = true;
+      this.averageEstimatesCheckBox.Location = new System.Drawing.Point(4, 4);
+      this.averageEstimatesCheckBox.Name = "averageEstimatesCheckBox";
+      this.averageEstimatesCheckBox.Size = new System.Drawing.Size(150, 17);
+      this.averageEstimatesCheckBox.TabIndex = 1;
+      this.averageEstimatesCheckBox.Text = "Average Estimated Values";
+      this.averageEstimatesCheckBox.UseVisualStyleBackColor = true;
+      this.averageEstimatesCheckBox.CheckedChanged += new System.EventHandler(this.averageEstimatesCheckBox_CheckedChanged);
+      // 
+      // RegressionEnsembleSolutionModelWeightsView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.averageEstimatesCheckBox);
+      this.Controls.Add(this.arrayView);
+      this.Name = "RegressionEnsembleSolutionModelWeightsView";
+      this.Size = new System.Drawing.Size(717, 538);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private Data.Views.StringConvertibleArrayView arrayView;
+    private System.Windows.Forms.CheckBox averageEstimatesCheckBox;
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionModelWeightsView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionModelWeightsView.cs	(revision 13705)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionEnsembleSolutionModelWeightsView.cs	(revision 13705)
@@ -0,0 +1,113 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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 System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.Data;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Problems.DataAnalysis.Views {
+  [View("Ensemble Solutions Weights")]
+  [Content(typeof(RegressionEnsembleSolution), false)]
+  internal sealed partial class RegressionEnsembleSolutionModelWeightsView : DataAnalysisSolutionEvaluationView {
+    public override System.Drawing.Image ViewImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Properties; }
+    }
+
+    public RegressionEnsembleSolutionModelWeightsView() {
+      InitializeComponent();
+    }
+
+    public new RegressionEnsembleSolution Content {
+      get { return (RegressionEnsembleSolution)base.Content; }
+      set { base.Content = value; }
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.Model.Changed += Content_ModelChanged;
+    }
+    private void RegisterArrayEvents(DoubleArray array) {
+      array.ItemChanged += DoubleArray_Changed;
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.Model.Changed -= Content_ModelChanged;
+      base.DeregisterContentEvents();
+    }
+    private void DeregisterArrayEvents(DoubleArray array) {
+      array.ItemChanged -= DoubleArray_Changed;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content != null) {
+        if (arrayView.Content != null) DeregisterArrayEvents((DoubleArray)arrayView.Content);
+        var array = new DoubleArray(Content.Model.ModelWeights.ToArray());
+        array.Resizable = false;
+        array.ElementNames = Content.Model.Models.Select(m => m.Name);
+
+        RegisterArrayEvents(array);
+
+        arrayView.Content = array;
+        arrayView.Locked = Content.ProblemData == RegressionEnsembleProblemData.EmptyProblemData;
+        averageEstimatesCheckBox.Checked = Content.Model.AverageModelEstimates;
+      } else {
+        arrayView.Content = null;
+        averageEstimatesCheckBox.Checked = false;
+      }
+    }
+
+    private void Content_ModelChanged(object sender, EventArgs eventArgs) {
+      var array = (DoubleArray)arrayView.Content;
+      var modelWeights = Content.Model.ModelWeights.ToList();
+
+      if (array.Length != modelWeights.Count) {
+        DeregisterArrayEvents(array);
+        array = new DoubleArray(Content.Model.ModelWeights.ToArray());
+        array.Resizable = false;
+        RegisterArrayEvents(array);
+      }
+
+      for (int i = 0; i < modelWeights.Count; i++)
+        array[i] = modelWeights[i];
+
+      array.ElementNames = Content.Model.Models.Select(m => m.Name);
+      averageEstimatesCheckBox.Checked = Content.Model.AverageModelEstimates;
+    }
+
+    private void DoubleArray_Changed(object sender, EventArgs<int> eventArgs) {
+      var array = (DoubleArray)arrayView.Content;
+      var index = eventArgs.Value;
+      var newWeight = array[index];
+      var model = Content.Model.Models.ElementAt(index);
+
+      Content.Model.SetModelWeight(model, newWeight);
+    }
+
+    private void averageEstimatesCheckBox_CheckedChanged(object sender, EventArgs e) {
+      Content.Model.AverageModelEstimates = averageEstimatesCheckBox.Checked;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionEnsembleModel.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionEnsembleModel.cs	(revision 13704)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionEnsembleModel.cs	(revision 13705)
@@ -155,6 +155,7 @@
     public IEnumerable<IEnumerable<double>> GetEstimatedValueVectors(IDataset dataset, IEnumerable<int> rows) {
       var estimatedValuesEnumerators = (from model in models
-                                        select model.GetEstimatedValues(dataset, rows).GetEnumerator())
-                                       .ToList();
+                                        let weight = GetModelWeight(model)
+                                        select model.GetEstimatedValues(dataset, rows).Select(e => weight * e)
+                                        .GetEnumerator()).ToList();
 
       while (estimatedValuesEnumerators.All(en => en.MoveNext())) {
