Index: branches/GP.Grammar.Editor/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj
===================================================================
--- branches/GP.Grammar.Editor/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj	(revision 6618)
+++ branches/GP.Grammar.Editor/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj	(revision 6675)
@@ -110,4 +110,10 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="SymbolicDataAnalysisSolutionResponseFunctionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="SymbolicDataAnalysisSolutionResponseFunctionView.Designer.cs">
+      <DependentUpon>SymbolicDataAnalysisSolutionResponseFunctionView.cs</DependentUpon>
+    </Compile>
     <Compile Include="TextualSymbolicDataAnalysisModelView.cs">
       <SubType>UserControl</SubType>
@@ -157,4 +163,10 @@
     <Compile Include="Symbols\VariableView.Designer.cs">
       <DependentUpon>VariableView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="VariableTrackbar.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="VariableTrackbar.Designer.cs">
+      <DependentUpon>VariableTrackbar.cs</DependentUpon>
     </Compile>
     <None Include="HeuristicLab.snk" />
Index: branches/GP.Grammar.Editor/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicDataAnalysisSolutionResponseFunctionView.Designer.cs
===================================================================
--- branches/GP.Grammar.Editor/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicDataAnalysisSolutionResponseFunctionView.Designer.cs	(revision 6675)
+++ branches/GP.Grammar.Editor/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicDataAnalysisSolutionResponseFunctionView.Designer.cs	(revision 6675)
@@ -0,0 +1,132 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Symbolic.Views {
+  partial class SymbolicDataAnalysisSolutionResponseFunctionView {
+    /// <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();
+      System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      this.flowLayoutPanel = new System.Windows.Forms.FlowLayoutPanel();
+      this.responseChart = new System.Windows.Forms.DataVisualization.Charting.Chart();
+      this.comboBox = new System.Windows.Forms.ComboBox();
+      this.freeVariableLabel = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.responseChart)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // flowLayoutPanel
+      // 
+      this.flowLayoutPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.flowLayoutPanel.AutoScroll = true;
+      this.flowLayoutPanel.Location = new System.Drawing.Point(3, 202);
+      this.flowLayoutPanel.Name = "flowLayoutPanel";
+      this.flowLayoutPanel.Size = new System.Drawing.Size(261, 268);
+      this.flowLayoutPanel.TabIndex = 2;
+      this.flowLayoutPanel.WrapContents = false;
+      // 
+      // responseChart
+      // 
+      this.responseChart.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)));
+      chartArea1.Name = "ChartArea";
+      this.responseChart.ChartAreas.Add(chartArea1);
+      legend1.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
+      legend1.LegendStyle = System.Windows.Forms.DataVisualization.Charting.LegendStyle.Row;
+      legend1.Name = "Legend";
+      this.responseChart.Legends.Add(legend1);
+      this.responseChart.Location = new System.Drawing.Point(3, 30);
+      this.responseChart.Name = "responseChart";
+      series1.ChartArea = "ChartArea";
+      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastLine;
+      series1.Legend = "Legend";
+      series1.MarkerSize = 3;
+      series1.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Cross;
+      series1.Name = "Model Response";
+      this.responseChart.Series.Add(series1);
+      this.responseChart.Size = new System.Drawing.Size(258, 166);
+      this.responseChart.TabIndex = 3;
+      // 
+      // comboBox
+      // 
+      this.comboBox.FormattingEnabled = true;
+      this.comboBox.Location = new System.Drawing.Point(80, 3);
+      this.comboBox.Name = "comboBox";
+      this.comboBox.Size = new System.Drawing.Size(166, 21);
+      this.comboBox.TabIndex = 4;
+      this.comboBox.SelectedIndexChanged += new System.EventHandler(this.ComboBoxSelectedIndexChanged);
+      // 
+      // freeVariableLabel
+      // 
+      this.freeVariableLabel.AutoSize = true;
+      this.freeVariableLabel.Location = new System.Drawing.Point(3, 6);
+      this.freeVariableLabel.Name = "freeVariableLabel";
+      this.freeVariableLabel.Size = new System.Drawing.Size(71, 13);
+      this.freeVariableLabel.TabIndex = 5;
+      this.freeVariableLabel.Text = "Free variable:";
+      // 
+      // SymbolicDataAnalysisSolutionResponseFunctionView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.freeVariableLabel);
+      this.Controls.Add(this.comboBox);
+      this.Controls.Add(this.responseChart);
+      this.Controls.Add(this.flowLayoutPanel);
+      this.Name = "SymbolicDataAnalysisSolutionResponseFunctionView";
+      this.Size = new System.Drawing.Size(264, 473);
+      ((System.ComponentModel.ISupportInitialize)(this.responseChart)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel;
+    private System.Windows.Forms.DataVisualization.Charting.Chart responseChart;
+    private System.Windows.Forms.ComboBox comboBox;
+    private System.Windows.Forms.Label freeVariableLabel;
+  }
+}
Index: branches/GP.Grammar.Editor/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicDataAnalysisSolutionResponseFunctionView.cs
===================================================================
--- branches/GP.Grammar.Editor/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicDataAnalysisSolutionResponseFunctionView.cs	(revision 6675)
+++ branches/GP.Grammar.Editor/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/SymbolicDataAnalysisSolutionResponseFunctionView.cs	(revision 6675)
@@ -0,0 +1,177 @@
+﻿#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 HeuristicLab.Common;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views;
+using HeuristicLab.MainForm.WindowsForms;
+using System.Windows.Forms.DataVisualization.Charting;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
+  [View("Response Function View")]
+  [Content(typeof(RegressionSolutionBase), false)]
+  public partial class SymbolicDataAnalysisSolutionResponseFunctionView : AsynchronousContentView {
+    private Dictionary<string, List<ISymbolicExpressionTreeNode>> variableNodes;
+    private ISymbolicExpressionTree clonedTree;
+    private Dictionary<string, double> medianValues;
+    public SymbolicDataAnalysisSolutionResponseFunctionView() {
+      InitializeComponent();
+      this.variableNodes = new Dictionary<string, List<ISymbolicExpressionTreeNode>>();
+      medianValues = new Dictionary<string, double>();
+      this.Caption = "Response Function View";
+    }
+
+    public new ISymbolicDataAnalysisSolution Content {
+      get { return (ISymbolicDataAnalysisSolution)base.Content; }
+      set { base.Content = value; }
+    }
+
+    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_ModelChanged(object sender, EventArgs e) {
+      OnModelChanged();
+    }
+    private void Content_ProblemDataChanged(object sender, EventArgs e) {
+      OnProblemDataChanged();
+    }
+
+    protected virtual void OnModelChanged() {
+      this.UpdateView();
+    }
+
+    protected virtual void OnProblemDataChanged() {
+      this.UpdateView();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      this.UpdateView();
+    }
+
+    private void UpdateView() {
+      if (Content != null && Content.Model != null && Content.ProblemData != null) {
+        var referencedVariables =
+       (from varNode in Content.Model.SymbolicExpressionTree.IterateNodesPrefix().OfType<VariableTreeNode>()
+        select varNode.VariableName)
+         .Distinct()
+         .OrderBy(x=>x)
+         .ToList();
+
+        medianValues.Clear();
+        foreach (var variableName in referencedVariables) {
+          medianValues.Add(variableName, Content.ProblemData.Dataset.GetEnumeratedVariableValues(variableName).Median());
+        }
+
+        comboBox.Items.Clear();
+        comboBox.Items.AddRange(referencedVariables.ToArray());
+        comboBox.SelectedIndex = 0;
+      }
+    }
+
+    private void CreateSliders(IEnumerable<string> variableNames) {
+      flowLayoutPanel.Controls.Clear();
+
+      foreach (var variableName in variableNames) {
+        var variableTrackbar = new VariableTrackbar(variableName,
+                                                    Content.ProblemData.Dataset.GetEnumeratedVariableValues(variableName));
+        variableTrackbar.Size = new Size(variableTrackbar.Size.Width, flowLayoutPanel.Size.Height - 23);
+        variableTrackbar.ValueChanged += TrackBarValueChanged;
+        flowLayoutPanel.Controls.Add(variableTrackbar);
+      }
+    }
+
+    private void TrackBarValueChanged(object sender, EventArgs e) {
+      var trackBar = (VariableTrackbar)sender;
+      string variableName = trackBar.VariableName;
+      ChangeVariableValue(variableName, trackBar.Value);
+    }
+
+    private void ChangeVariableValue(string variableName, double value) {
+      foreach (var constNode in variableNodes[variableName].Cast<ConstantTreeNode>())
+        constNode.Value = value;
+
+      UpdateChart();
+    }
+
+    private void UpdateChart() {
+      string freeVariable = (string)comboBox.SelectedItem;
+      IEnumerable<string> fixedVariables = comboBox.Items.OfType<string>()
+        .Except(new string[] { freeVariable });
+
+      var freeVariableValues = Content.ProblemData.Dataset.GetEnumeratedVariableValues(freeVariable, Content.ProblemData.TrainingIndizes).ToArray();
+      var responseValues = Content.Model.Interpreter.GetSymbolicExpressionTreeValues(clonedTree,
+                                                                              Content.ProblemData.Dataset,
+                                                                              Content.ProblemData.TrainingIndizes).ToArray();
+      Array.Sort(freeVariableValues, responseValues);
+      responseChart.Series["Model Response"].Points.DataBindXY(freeVariableValues, responseValues);
+    }
+
+    private ConstantTreeNode MakeConstantTreeNode(double value) {
+      Constant constant = new Constant();
+      constant.MinValue = value - 1;
+      constant.MaxValue = value + 1;
+      ConstantTreeNode constantTreeNode = (ConstantTreeNode)constant.CreateTreeNode();
+      constantTreeNode.Value = value;
+      return constantTreeNode;
+    }
+
+    private void ComboBoxSelectedIndexChanged(object sender, EventArgs e) {
+      string freeVariable = (string)comboBox.SelectedItem;
+      IEnumerable<string> fixedVariables = comboBox.Items.OfType<string>()
+        .Except(new string[] { freeVariable });
+
+      variableNodes.Clear();
+      clonedTree = (ISymbolicExpressionTree)Content.Model.SymbolicExpressionTree.Clone();
+
+      foreach (var varNode in clonedTree.IterateNodesPrefix().OfType<VariableTreeNode>()) {
+        if (fixedVariables.Contains(varNode.VariableName)) {
+          if (!variableNodes.ContainsKey(varNode.VariableName))
+            variableNodes.Add(varNode.VariableName, new List<ISymbolicExpressionTreeNode>());
+
+          int childIndex = varNode.Parent.IndexOfSubtree(varNode);
+          var replacementNode = MakeConstantTreeNode(medianValues[varNode.VariableName]);
+          var parent = varNode.Parent;
+          parent.RemoveSubtree(childIndex);
+          parent.InsertSubtree(childIndex, replacementNode);
+          variableNodes[varNode.VariableName].Add(replacementNode);
+        }
+      }
+
+      CreateSliders(fixedVariables);
+      UpdateChart();
+    }
+  }
+}
Index: branches/GP.Grammar.Editor/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/VariableTrackbar.Designer.cs
===================================================================
--- branches/GP.Grammar.Editor/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/VariableTrackbar.Designer.cs	(revision 6675)
+++ branches/GP.Grammar.Editor/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/VariableTrackbar.Designer.cs	(revision 6675)
@@ -0,0 +1,136 @@
+﻿namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
+  partial class VariableTrackbar {
+    /// <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.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series();
+      this.valueLabel = new System.Windows.Forms.Label();
+      this.valueTextBox = new System.Windows.Forms.TextBox();
+      this.trackBar = new System.Windows.Forms.TrackBar();
+      this.boxPlotChart = new System.Windows.Forms.DataVisualization.Charting.Chart();
+      this.groupBox = new System.Windows.Forms.GroupBox();
+      ((System.ComponentModel.ISupportInitialize)(this.trackBar)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.boxPlotChart)).BeginInit();
+      this.groupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // valueLabel
+      // 
+      this.valueLabel.AutoSize = true;
+      this.valueLabel.Location = new System.Drawing.Point(6, 22);
+      this.valueLabel.Name = "valueLabel";
+      this.valueLabel.Size = new System.Drawing.Size(37, 13);
+      this.valueLabel.TabIndex = 0;
+      this.valueLabel.Text = "Value:";
+      // 
+      // valueTextBox
+      // 
+      this.valueTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueTextBox.Location = new System.Drawing.Point(49, 19);
+      this.valueTextBox.Name = "valueTextBox";
+      this.valueTextBox.ReadOnly = true;
+      this.valueTextBox.Size = new System.Drawing.Size(56, 20);
+      this.valueTextBox.TabIndex = 1;
+      // 
+      // trackBar
+      // 
+      this.trackBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)));
+      this.trackBar.Location = new System.Drawing.Point(6, 45);
+      this.trackBar.Name = "trackBar";
+      this.trackBar.Orientation = System.Windows.Forms.Orientation.Vertical;
+      this.trackBar.Size = new System.Drawing.Size(45, 277);
+      this.trackBar.TabIndex = 2;
+      this.trackBar.TickStyle = System.Windows.Forms.TickStyle.None;
+      this.trackBar.ValueChanged += new System.EventHandler(this.TrackBarValueChanged);
+      // 
+      // boxPlotChart
+      // 
+      this.boxPlotChart.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)));
+      this.boxPlotChart.BackColor = System.Drawing.SystemColors.Control;
+      chartArea1.AxisX.Enabled = System.Windows.Forms.DataVisualization.Charting.AxisEnabled.False;
+      chartArea1.AxisY.Enabled = System.Windows.Forms.DataVisualization.Charting.AxisEnabled.False;
+      chartArea1.BackColor = System.Drawing.SystemColors.Control;
+      chartArea1.BackSecondaryColor = System.Drawing.Color.White;
+      chartArea1.Name = "ChartArea";
+      this.boxPlotChart.ChartAreas.Add(chartArea1);
+      this.boxPlotChart.Location = new System.Drawing.Point(39, 45);
+      this.boxPlotChart.Name = "boxPlotChart";
+      series1.ChartArea = "ChartArea";
+      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.BoxPlot;
+      series1.Name = "BoxPlot";
+      series1.YValuesPerPoint = 6;
+      series2.ChartArea = "ChartArea";
+      series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
+      series2.Enabled = false;
+      series2.Name = "DataSeries";
+      this.boxPlotChart.Series.Add(series1);
+      this.boxPlotChart.Series.Add(series2);
+      this.boxPlotChart.Size = new System.Drawing.Size(66, 277);
+      this.boxPlotChart.TabIndex = 3;
+      this.boxPlotChart.Text = "boxPlotChart";
+      // 
+      // groupBox
+      // 
+      this.groupBox.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.groupBox.Controls.Add(this.valueLabel);
+      this.groupBox.Controls.Add(this.boxPlotChart);
+      this.groupBox.Controls.Add(this.valueTextBox);
+      this.groupBox.Controls.Add(this.trackBar);
+      this.groupBox.Location = new System.Drawing.Point(3, 3);
+      this.groupBox.Name = "groupBox";
+      this.groupBox.Size = new System.Drawing.Size(111, 328);
+      this.groupBox.TabIndex = 4;
+      this.groupBox.TabStop = false;
+      this.groupBox.Text = "groupBox";
+      // 
+      // VariableTrackbar
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.groupBox);
+      this.Name = "VariableTrackbar";
+      this.Size = new System.Drawing.Size(117, 334);
+      ((System.ComponentModel.ISupportInitialize)(this.trackBar)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.boxPlotChart)).EndInit();
+      this.groupBox.ResumeLayout(false);
+      this.groupBox.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label valueLabel;
+    private System.Windows.Forms.TextBox valueTextBox;
+    private System.Windows.Forms.TrackBar trackBar;
+    private System.Windows.Forms.DataVisualization.Charting.Chart boxPlotChart;
+    private System.Windows.Forms.GroupBox groupBox;
+  }
+}
Index: branches/GP.Grammar.Editor/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/VariableTrackbar.cs
===================================================================
--- branches/GP.Grammar.Editor/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/VariableTrackbar.cs	(revision 6675)
+++ branches/GP.Grammar.Editor/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/VariableTrackbar.cs	(revision 6675)
@@ -0,0 +1,62 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Windows.Forms.DataVisualization.Charting;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
+  public partial class VariableTrackbar : UserControl {
+    private readonly string variableName;
+    private const double FACTOR = 1000;
+
+    public double Value {
+      get { return trackBar.Value / FACTOR; }
+    }
+
+    public string VariableName {
+      get { return variableName; }
+    }
+
+    public VariableTrackbar(string variableName, IEnumerable<double> values) {
+      InitializeComponent();
+      this.variableName = variableName;
+      groupBox.Text = variableName;
+      var valuesArr = values.ToArray();
+      this.valueTextBox.Text = string.Format("{0:0.000e+00}", valuesArr.Median());
+      boxPlotChart.Series["DataSeries"].Points.Clear();
+      boxPlotChart.Series["DataSeries"].Points.DataBindY(valuesArr);
+      boxPlotChart.Series["BoxPlot"].ChartType = SeriesChartType.BoxPlot;
+      boxPlotChart.Series["BoxPlot"]["BoxPlotSeries"] = "DataSeries";
+      boxPlotChart.Series["BoxPlot"]["BoxPlotWhiskerPercentile"] = "5";
+      boxPlotChart.Series["BoxPlot"]["BoxPlotPercentile"] = "30";
+      boxPlotChart.Series["BoxPlot"]["BoxPlotShowAverage"] = "true";
+      boxPlotChart.Series["BoxPlot"]["BoxPlotShowMedian"] = "true";
+      boxPlotChart.Series["BoxPlot"]["BoxPlotShowUnusualValues"] = "true";
+      boxPlotChart.ChartAreas[0].AxisY.Minimum = valuesArr.Min() ;
+      boxPlotChart.ChartAreas[0].AxisY.Maximum = valuesArr.Max() ;
+      
+
+      trackBar.Minimum = (int)Math.Round(valuesArr.Min() * FACTOR);
+      trackBar.Maximum = (int)Math.Round(valuesArr.Max() * FACTOR);
+      trackBar.Value = (int)Math.Round(valuesArr.Median() * FACTOR);
+      trackBar.TickStyle = TickStyle.None;
+      trackBar.Tag = variableName;
+    }
+
+    private void TrackBarValueChanged(object sender, EventArgs e) {
+      valueTextBox.Text = string.Format("{0:0.000e+00}", trackBar.Value / FACTOR);
+      RaiseValueChanged(EventArgs.Empty);
+    }
+
+    public event EventHandler ValueChanged;
+    private void RaiseValueChanged(EventArgs e) {
+      var handler = ValueChanged;
+      if (handler != null) handler(this, e);
+    }
+  }
+}
