Index: stable/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionErrorCharacteristicsCurveView.Designer.cs
===================================================================
--- stable/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionErrorCharacteristicsCurveView.Designer.cs	(revision 12702)
+++ stable/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionErrorCharacteristicsCurveView.Designer.cs	(revision 13062)
@@ -46,6 +46,6 @@
     private void InitializeComponent() {
       this.components = new System.ComponentModel.Container();
-      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
-      System.Windows.Forms.DataVisualization.Charting.Legend legend2 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+      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();
       this.label1 = new System.Windows.Forms.Label();
@@ -57,13 +57,14 @@
       // chart
       // 
+      this.chart.AllowDrop = true;
       this.chart.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)));
-      chartArea2.Name = "ChartArea1";
-      this.chart.ChartAreas.Add(chartArea2);
-      legend2.Alignment = System.Drawing.StringAlignment.Center;
-      legend2.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
-      legend2.Name = "Legend1";
-      this.chart.Legends.Add(legend2);
+      chartArea1.Name = "ChartArea1";
+      this.chart.ChartAreas.Add(chartArea1);
+      legend1.Alignment = System.Drawing.StringAlignment.Center;
+      legend1.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
+      legend1.Name = "Legend1";
+      this.chart.Legends.Add(legend1);
       this.chart.Location = new System.Drawing.Point(6, 28);
       this.chart.Name = "chart";
@@ -71,4 +72,6 @@
       this.chart.TabIndex = 0;
       this.chart.Text = "chart";
+      this.chart.DragDrop += new System.Windows.Forms.DragEventHandler(this.chart_DragDrop);
+      this.chart.DragEnter += new System.Windows.Forms.DragEventHandler(this.chart_DragEnter);
       this.chart.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.Chart_MouseDoubleClick);
       this.chart.MouseMove += new System.Windows.Forms.MouseEventHandler(this.chart_MouseMove);
Index: stable/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionErrorCharacteristicsCurveView.cs
===================================================================
--- stable/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionErrorCharacteristicsCurveView.cs	(revision 12702)
+++ stable/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionErrorCharacteristicsCurveView.cs	(revision 13062)
@@ -25,6 +25,8 @@
 using System.Windows.Forms;
 using System.Windows.Forms.DataVisualization.Charting;
+using HeuristicLab.Algorithms.DataAnalysis;
 using HeuristicLab.Common;
 using HeuristicLab.MainForm;
+using HeuristicLab.Optimization;
 
 namespace HeuristicLab.Problems.DataAnalysis.Views {
@@ -62,8 +64,19 @@
     }
 
+    // the view holds one regression solution as content but also contains several other regression solutions for comparison
+    // the following invariants must hold
+    // (Solutions.IsEmpty && Content == null) ||
+    // (Solutions[0] == Content && Solutions.All(s => s.ProblemData.TargetVariable == Content.TargetVariable))
+
     public new IRegressionSolution Content {
       get { return (IRegressionSolution)base.Content; }
       set { base.Content = value; }
     }
+
+    private readonly IList<IRegressionSolution> solutions = new List<IRegressionSolution>();
+    public IEnumerable<IRegressionSolution> Solutions {
+      get { return solutions.AsEnumerable(); }
+    }
+
     public IRegressionProblemData ProblemData {
       get {
@@ -86,9 +99,25 @@
     protected virtual void Content_ModelChanged(object sender, EventArgs e) {
       if (InvokeRequired) Invoke((Action<object, EventArgs>)Content_ModelChanged, sender, e);
-      else UpdateChart();
+      else {
+        // recalculate baseline solutions (for symbolic regression models the features used in the model might have changed)
+        solutions.Clear(); // remove all
+        solutions.Add(Content); // re-add the first solution
+        // and recalculate all other solutions
+        foreach (var sol in CreateBaselineSolutions()) {
+          solutions.Add(sol);
+        }
+        UpdateChart();
+      }
     }
     protected virtual void Content_ProblemDataChanged(object sender, EventArgs e) {
       if (InvokeRequired) Invoke((Action<object, EventArgs>)Content_ProblemDataChanged, sender, e);
       else {
+        // recalculate baseline solutions
+        solutions.Clear(); // remove all
+        solutions.Add(Content); // re-add the first solution
+        // and recalculate all other solutions
+        foreach (var sol in CreateBaselineSolutions()) {
+          solutions.Add(sol);
+        }
         UpdateChart();
       }
@@ -96,4 +125,16 @@
     protected override void OnContentChanged() {
       base.OnContentChanged();
+      // the content object is always stored as the first element in solutions
+      solutions.Clear();
+      ReadOnly = Content == null;
+      if (Content != null) {
+        // recalculate all solutions
+        solutions.Add(Content);
+        if (ProblemData.TrainingIndices.Any()) {
+          foreach (var sol in CreateBaselineSolutions())
+            solutions.Add(sol);
+          // more solutions can be added by drag&drop
+        }
+      }
       UpdateChart();
     }
@@ -109,14 +150,12 @@
       if (cmbSamples.SelectedItem.ToString() == TestSamples && !ProblemData.TestIndices.Any()) return;
 
-      if (Content.ProblemData.TrainingIndices.Any()) {
-        AddRegressionSolution(CreateConstantSolution());
-      }
-
-      AddRegressionSolution(Content);
+      foreach (var sol in Solutions) {
+        AddSeries(sol);
+      }
 
       chart.ChartAreas[0].AxisX.Title = residualComboBox.SelectedItem.ToString();
     }
 
-    protected void AddRegressionSolution(IRegressionSolution solution) {
+    protected void AddSeries(IRegressionSolution solution) {
       if (chart.Series.Any(s => s.Name == solution.Name)) return;
 
@@ -239,5 +278,4 @@
     }
 
-    #region Baseline
     private void Chart_MouseDoubleClick(object sender, MouseEventArgs e) {
       HitTestResult result = chart.HitTest(e.X, e.Y);
@@ -247,12 +285,22 @@
     }
 
-    private ConstantRegressionSolution CreateConstantSolution() {
+    protected virtual IEnumerable<IRegressionSolution> CreateBaselineSolutions() {
+      yield return CreateConstantSolution();
+      yield return CreateLinearSolution();
+    }
+
+    private IRegressionSolution CreateConstantSolution() {
       double averageTrainingTarget = ProblemData.Dataset.GetDoubleValues(ProblemData.TargetVariable, ProblemData.TrainingIndices).Average();
       var model = new ConstantRegressionModel(averageTrainingTarget);
       var solution = new ConstantRegressionSolution(model, (IRegressionProblemData)ProblemData.Clone());
-      solution.Name = "Baseline";
+      solution.Name = "Baseline (constant)";
       return solution;
     }
-    #endregion
+    private IRegressionSolution CreateLinearSolution() {
+      double rmsError, cvRmsError;
+      var solution = LinearRegression.CreateLinearRegressionSolution((IRegressionProblemData)ProblemData.Clone(), out rmsError, out cvRmsError);
+      solution.Name = "Baseline (linear)";
+      return solution;
+    }
 
     private void chart_MouseMove(object sender, MouseEventArgs e) {
@@ -265,4 +313,35 @@
     }
 
+    private void chart_DragDrop(object sender, DragEventArgs e) {
+      if (e.Data.GetDataPresent(HeuristicLab.Common.Constants.DragDropDataFormat)) {
+
+        var data = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat);
+        var dataAsRegressionSolution = data as IRegressionSolution;
+        var dataAsResult = data as IResult;
+
+        if (dataAsRegressionSolution != null) {
+          solutions.Add((IRegressionSolution)dataAsRegressionSolution.Clone());
+        } else if (dataAsResult != null && dataAsResult.Value is IRegressionSolution) {
+          solutions.Add((IRegressionSolution)dataAsResult.Value.Clone());
+        }
+
+        UpdateChart();
+      }
+    }
+
+    private void chart_DragEnter(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      if (!e.Data.GetDataPresent(HeuristicLab.Common.Constants.DragDropDataFormat)) return;
+
+      var data = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat);
+      var dataAsRegressionSolution = data as IRegressionSolution;
+      var dataAsResult = data as IResult;
+
+      if (!ReadOnly &&
+        (dataAsRegressionSolution != null || (dataAsResult != null && dataAsResult.Value is IRegressionSolution))) {
+        e.Effect = DragDropEffects.Copy;
+      }
+    }
+
     private void residualComboBox_SelectedIndexChanged(object sender, EventArgs e) {
       UpdateChart();
