Index: /trunk/sources/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj	(revision 11609)
+++ /trunk/sources/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj	(revision 11610)
@@ -209,4 +209,10 @@
       <DependentUpon>DataTableView.cs</DependentUpon>
     </Compile>
+	<Compile Include="HistogramControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="HistogramControl.Designer.cs">
+      <DependentUpon>HistogramControl.cs</DependentUpon>
+    </Compile>
   </ItemGroup>
   <ItemGroup>
Index: /trunk/sources/HeuristicLab.Analysis.Views/3.3/HistogramControl.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Analysis.Views/3.3/HistogramControl.Designer.cs	(revision 11610)
+++ /trunk/sources/HeuristicLab.Analysis.Views/3.3/HistogramControl.Designer.cs	(revision 11610)
@@ -0,0 +1,148 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.Visualization.ChartControlsExtensions;
+
+namespace HeuristicLab.Analysis.Views {
+  partial class HistogramControl {
+    /// <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.components = new System.ComponentModel.Container();
+      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.chart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
+      this.binsNumericUpDown = new System.Windows.Forms.NumericUpDown();
+      this.label1 = new System.Windows.Forms.Label();
+      this.exactCheckBox = new System.Windows.Forms.CheckBox();
+      ((System.ComponentModel.ISupportInitialize)(this.chart)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.binsNumericUpDown)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // chart
+      // 
+      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)));
+      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 = "Default";
+      this.chart.Legends.Add(legend1);
+      this.chart.Location = new System.Drawing.Point(0, 27);
+      this.chart.Name = "chart";
+      series1.ChartArea = "ChartArea1";
+      series1.Legend = "Default";
+      series1.Name = "Series1";
+      this.chart.Series.Add(series1);
+      this.chart.Size = new System.Drawing.Size(465, 336);
+      this.chart.TabIndex = 0;
+      // 
+      // binsNumericUpDown
+      // 
+      this.binsNumericUpDown.Location = new System.Drawing.Point(91, 3);
+      this.binsNumericUpDown.Maximum = new decimal(new int[] {
+            100000,
+            0,
+            0,
+            0});
+      this.binsNumericUpDown.Minimum = new decimal(new int[] {
+            1,
+            0,
+            0,
+            0});
+      this.binsNumericUpDown.Name = "binsNumericUpDown";
+      this.binsNumericUpDown.Size = new System.Drawing.Size(61, 20);
+      this.binsNumericUpDown.TabIndex = 1;
+      this.binsNumericUpDown.Value = new decimal(new int[] {
+            10,
+            0,
+            0,
+            0});
+      this.binsNumericUpDown.ValueChanged += new System.EventHandler(this.binsNumericUpDown_ValueChanged);
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(3, 5);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(82, 13);
+      this.label1.TabIndex = 2;
+      this.label1.Text = "Number of Bins:";
+      // 
+      // exactCheckBox
+      // 
+      this.exactCheckBox.AutoSize = true;
+      this.exactCheckBox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+      this.exactCheckBox.Location = new System.Drawing.Point(158, 4);
+      this.exactCheckBox.Name = "exactCheckBox";
+      this.exactCheckBox.Size = new System.Drawing.Size(56, 17);
+      this.exactCheckBox.TabIndex = 3;
+      this.exactCheckBox.Text = "Exact:";
+      this.exactCheckBox.UseVisualStyleBackColor = true;
+      this.exactCheckBox.CheckedChanged += new System.EventHandler(this.exactCheckBox_CheckedChanged);
+      // 
+      // HistogramControl
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.exactCheckBox);
+      this.Controls.Add(this.label1);
+      this.Controls.Add(this.binsNumericUpDown);
+      this.Controls.Add(this.chart);
+      this.Name = "HistogramControl";
+      this.Size = new System.Drawing.Size(465, 363);
+      ((System.ComponentModel.ISupportInitialize)(this.chart)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.binsNumericUpDown)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private EnhancedChart chart;
+    private System.Windows.Forms.NumericUpDown binsNumericUpDown;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.CheckBox exactCheckBox;
+  }
+}
Index: /trunk/sources/HeuristicLab.Analysis.Views/3.3/HistogramControl.cs
===================================================================
--- /trunk/sources/HeuristicLab.Analysis.Views/3.3/HistogramControl.cs	(revision 11610)
+++ /trunk/sources/HeuristicLab.Analysis.Views/3.3/HistogramControl.cs	(revision 11610)
@@ -0,0 +1,224 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.Analysis.Statistics;
+
+namespace HeuristicLab.Analysis.Views {
+  public partial class HistogramControl : UserControl {
+    protected static readonly string SeriesName = "Histogram";
+
+    protected Dictionary<string, List<double>> points;
+    public int NumberOfBins {
+      get { return (int)binsNumericUpDown.Value; }
+      set { binsNumericUpDown.Value = value; }
+    }
+
+    public int MinimumNumberOfBins {
+      get { return (int)binsNumericUpDown.Minimum; }
+      set { binsNumericUpDown.Minimum = value; }
+    }
+
+    public int MaximumNumberOfBins {
+      get { return (int)binsNumericUpDown.Maximum; }
+      set { binsNumericUpDown.Maximum = value; }
+    }
+
+    public int IncrementNumberOfBins {
+      get { return (int)binsNumericUpDown.Increment; }
+      set { binsNumericUpDown.Increment = value; }
+    }
+
+    public bool CalculateExactBins {
+      get { return exactCheckBox.Checked; }
+      set { exactCheckBox.Checked = value; }
+    }
+
+    public bool ShowExactCheckbox {
+      get { return exactCheckBox.Visible; }
+      set { exactCheckBox.Visible = value; }
+    }
+
+    public HistogramControl() {
+      InitializeComponent();
+      points = new Dictionary<string, List<double>>();
+    }
+
+    protected void InitNewRow(string name) {
+      if (!points.ContainsKey(name)) {
+        points.Add(name, new List<double>());
+      }
+    }
+
+    protected void InitSeries(string name) {
+      if (!chart.Series.Any(x => x.Name == name)) {
+        Series s = chart.Series.Add(name);
+        s.ChartType = SeriesChartType.Column;
+        s.BorderColor = Color.Black;
+        s.BorderWidth = 1;
+        s.BorderDashStyle = ChartDashStyle.Solid;
+      }
+    }
+
+    public void AddPoint(double point) {
+      InitNewRow(SeriesName);
+      InitSeries(SeriesName);
+      points[SeriesName].Add(point);
+      UpdateHistogram();
+    }
+
+    public void AddPoints(IEnumerable<double> points) {
+      InitNewRow(SeriesName);
+      InitSeries(SeriesName);
+      this.points[SeriesName].AddRange(points);
+      UpdateHistogram();
+    }
+
+    public void AddPoint(string name, double point, bool replace = false) {
+      InitNewRow(name);
+      InitSeries(name);
+      if (replace) {
+        points[name].Clear();
+      }
+      points[name].Add(point);
+      UpdateHistogram();
+    }
+
+    public void AddPoints(string name, IEnumerable<double> points, bool replace = false) {
+      InitNewRow(name);
+      InitSeries(name);
+      if (replace) {
+        this.points[name].Clear();
+      }
+      this.points[name].AddRange(points);
+      UpdateHistogram();
+    }
+
+    public void ClearPoints() {
+      points.Clear();
+      UpdateHistogram();
+    }
+
+    protected void UpdateHistogram() {
+      if (InvokeRequired) {
+        Invoke((Action)UpdateHistogram, null);
+        return;
+      }
+
+      double overallMin = double.MaxValue;
+      double overallMax = double.MinValue;
+      int bins = (int)binsNumericUpDown.Value;
+
+      chart.Series.Clear();
+
+      foreach (var point in points) {
+        if (!point.Value.Any()) continue;
+
+        Series histogramSeries = new Series(point.Key);
+        chart.Series.Add(histogramSeries);
+
+        double minValue = point.Value.Min();
+        double maxValue = point.Value.Max();
+        double intervalWidth = (maxValue - minValue) / bins;
+        if (intervalWidth <= 0) continue;
+
+        if (!exactCheckBox.Checked) {
+          intervalWidth = HumanRoundRange(intervalWidth);
+          minValue = Math.Floor(minValue / intervalWidth) * intervalWidth;
+          maxValue = Math.Ceiling(maxValue / intervalWidth) * intervalWidth;
+        }
+
+        double current = minValue, intervalCenter = intervalWidth / 2.0;
+        int count = 0;
+        foreach (double v in point.Value.OrderBy(x => x)) {
+          while (v > current + intervalWidth) {
+            histogramSeries.Points.AddXY(current + intervalCenter, count);
+            current += intervalWidth;
+            count = 0;
+          }
+          count++;
+        }
+        histogramSeries.Points.AddXY(current + intervalCenter, count);
+        histogramSeries["PointWidth"] = "1";
+
+        CalculateDensity(histogramSeries, point.Value);
+
+        overallMax = Math.Max(overallMax, maxValue);
+        overallMin = Math.Min(overallMin, minValue);
+      }
+
+      ChartArea chartArea = chart.ChartAreas[0];
+      chartArea.AxisY.Title = "Frequency";
+
+      double overallIntervalWidth = (overallMax - overallMin) / bins;
+      double axisInterval = overallIntervalWidth;
+      while ((overallMax - overallMin) / axisInterval > 10.0) {
+        axisInterval *= 2.0;
+      }
+      chartArea.AxisX.Interval = axisInterval;
+    }
+
+    protected void CalculateDensity(Series series, List<double> row) {
+      string densitySeriesName = "Density " + series.Name;
+      double stepWidth = series.Points[1].XValue - series.Points[0].XValue;
+
+      if (chart.Series.Any(x => x.Name == densitySeriesName)) {
+        var ds = chart.Series.Single(x => x.Name == densitySeriesName);
+        chart.Series.Remove(ds);
+      }
+
+      var density = NormalDistribution.Density(row.ToArray(), row.Count, stepWidth);
+
+      Series newSeries = new Series(densitySeriesName);
+      newSeries.ChartType = SeriesChartType.FastLine;
+      newSeries.BorderWidth = 2;
+      foreach (var d in density) {
+        newSeries.Points.Add(new DataPoint(d.Item1, d.Item2));
+      }
+
+      chart.Series.Add(newSeries);
+    }
+
+    protected double HumanRoundRange(double range) {
+      double base10 = Math.Pow(10.0, Math.Floor(Math.Log10(range)));
+      double rounding = range / base10;
+      if (rounding <= 1.5) rounding = 1;
+      else if (rounding <= 2.25) rounding = 2;
+      else if (rounding <= 3.75) rounding = 2.5;
+      else if (rounding <= 7.5) rounding = 5;
+      else rounding = 10;
+      return rounding * base10;
+    }
+
+    private void binsNumericUpDown_ValueChanged(object sender, EventArgs e) {
+      UpdateHistogram();
+    }
+
+    private void exactCheckBox_CheckedChanged(object sender, EventArgs e) {
+      UpdateHistogram();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj	(revision 11609)
+++ /trunk/sources/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj	(revision 11610)
@@ -153,4 +153,5 @@
     <Compile Include="QualityAnalysis\QualityDistributionAnalyzer.cs" />
     <Compile Include="QualityAnalysis\ScaledQualityDifferenceAnalyzer.cs" />
+    <Compile Include="Statistics\NormalDistribution.cs" />
     <Compile Include="ValueAnalysis\SingleValueAnalyzer.cs" />
     <Compile Include="ValueAnalysis\MinAverageMaxValueAnalyzer.cs" />
@@ -236,4 +237,5 @@
     </BootstrapperPackage>
   </ItemGroup>
+  <ItemGroup />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
@@ -245,5 +247,5 @@
   -->
   <PropertyGroup>
-   <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
 set ProjectDir=$(ProjectDir)
 set SolutionDir=$(SolutionDir)
@@ -252,5 +254,5 @@
 call PreBuildEvent.cmd
 </PreBuildEvent>
-<PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
+    <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
 export ProjectDir=$(ProjectDir)
 export SolutionDir=$(SolutionDir)
Index: /trunk/sources/HeuristicLab.Analysis/3.3/Statistics/NormalDistribution.cs
===================================================================
--- /trunk/sources/HeuristicLab.Analysis/3.3/Statistics/NormalDistribution.cs	(revision 11610)
+++ /trunk/sources/HeuristicLab.Analysis/3.3/Statistics/NormalDistribution.cs	(revision 11610)
@@ -0,0 +1,68 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.Linq;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Analysis.Statistics {
+  public static class NormalDistribution {
+    public static double[] Density(double[] x, double mean, double stdDev) {
+      double[] result = new double[x.Length];
+
+      for (int i = 0; i < x.Length; i++) {
+        result[i] = (1.0 / (stdDev * Math.Sqrt(2.0 * Math.PI))) *
+                    Math.Exp(-((Math.Pow(x[i] - mean, 2.0)) /
+                               (2.0 * Math.Pow(stdDev, 2.0))));
+      }
+
+      return result;
+    }
+
+    // based on the idea from http://www.statmethods.net/graphs/density.html
+    public static List<Tuple<double, double>> Density(double[] x, int nrOfPoints, double stepWidth) {
+      double[] newX = new double[nrOfPoints];
+      double mean = x.Average();
+      double stdDev = x.StandardDeviation();
+      double margin = stepWidth * 2;
+
+      double dataMin = x.Min() - margin;
+      double dataMax = x.Max() + margin;
+      double diff = (dataMax - dataMin) / nrOfPoints;
+      double cur = dataMin;
+      newX[0] = cur;
+      for (int i = 1; i < nrOfPoints; i++) {
+        cur += diff;
+        newX[i] = cur;
+      }
+
+      var y = Density(newX, mean, stdDev).Select(k => k * stepWidth * x.Length).ToList();
+
+      var points = new List<Tuple<double, double>>();
+      for (int i = 0; i < newX.Length; i++) {
+        points.Add(new Tuple<double, double>(newX[i], y[i]));
+      }
+
+      return points;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj	(revision 11609)
+++ /trunk/sources/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj	(revision 11610)
@@ -127,10 +127,4 @@
       <DependentUpon>GanttChart.cs</DependentUpon>
     </Compile>
-    <Compile Include="HistogramControl.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="HistogramControl.Designer.cs">
-      <DependentUpon>HistogramControl.cs</DependentUpon>
-    </Compile>
     <Compile Include="ImageExportDialog.cs">
       <SubType>Form</SubType>
Index: unk/sources/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HistogramControl.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HistogramControl.Designer.cs	(revision 11609)
+++ 	(revision )
@@ -1,146 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 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.Visualization.ChartControlsExtensions {
-  partial class HistogramControl {
-    /// <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.components = new System.ComponentModel.Container();
-      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.chart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
-      this.binsNumericUpDown = new System.Windows.Forms.NumericUpDown();
-      this.label1 = new System.Windows.Forms.Label();
-      this.exactCheckBox = new System.Windows.Forms.CheckBox();
-      ((System.ComponentModel.ISupportInitialize)(this.chart)).BeginInit();
-      ((System.ComponentModel.ISupportInitialize)(this.binsNumericUpDown)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // chart
-      // 
-      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)));
-      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 = "Default";
-      this.chart.Legends.Add(legend1);
-      this.chart.Location = new System.Drawing.Point(0, 27);
-      this.chart.Name = "chart";
-      series1.ChartArea = "ChartArea1";
-      series1.Legend = "Default";
-      series1.Name = "Series1";
-      this.chart.Series.Add(series1);
-      this.chart.Size = new System.Drawing.Size(465, 336);
-      this.chart.TabIndex = 0;
-      // 
-      // binsNumericUpDown
-      // 
-      this.binsNumericUpDown.Location = new System.Drawing.Point(91, 3);
-      this.binsNumericUpDown.Maximum = new decimal(new int[] {
-            100000,
-            0,
-            0,
-            0});
-      this.binsNumericUpDown.Minimum = new decimal(new int[] {
-            1,
-            0,
-            0,
-            0});
-      this.binsNumericUpDown.Name = "binsNumericUpDown";
-      this.binsNumericUpDown.Size = new System.Drawing.Size(61, 20);
-      this.binsNumericUpDown.TabIndex = 1;
-      this.binsNumericUpDown.Value = new decimal(new int[] {
-            10,
-            0,
-            0,
-            0});
-      this.binsNumericUpDown.ValueChanged += new System.EventHandler(this.binsNumericUpDown_ValueChanged);
-      // 
-      // label1
-      // 
-      this.label1.AutoSize = true;
-      this.label1.Location = new System.Drawing.Point(3, 5);
-      this.label1.Name = "label1";
-      this.label1.Size = new System.Drawing.Size(82, 13);
-      this.label1.TabIndex = 2;
-      this.label1.Text = "Number of Bins:";
-      // 
-      // exactCheckBox
-      // 
-      this.exactCheckBox.AutoSize = true;
-      this.exactCheckBox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
-      this.exactCheckBox.Location = new System.Drawing.Point(158, 4);
-      this.exactCheckBox.Name = "exactCheckBox";
-      this.exactCheckBox.Size = new System.Drawing.Size(56, 17);
-      this.exactCheckBox.TabIndex = 3;
-      this.exactCheckBox.Text = "Exact:";
-      this.exactCheckBox.UseVisualStyleBackColor = true;
-      this.exactCheckBox.CheckedChanged += new System.EventHandler(this.exactCheckBox_CheckedChanged);
-      // 
-      // HistogramControl
-      // 
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
-      this.Controls.Add(this.exactCheckBox);
-      this.Controls.Add(this.label1);
-      this.Controls.Add(this.binsNumericUpDown);
-      this.Controls.Add(this.chart);
-      this.Name = "HistogramControl";
-      this.Size = new System.Drawing.Size(465, 363);
-      ((System.ComponentModel.ISupportInitialize)(this.chart)).EndInit();
-      ((System.ComponentModel.ISupportInitialize)(this.binsNumericUpDown)).EndInit();
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private EnhancedChart chart;
-    private System.Windows.Forms.NumericUpDown binsNumericUpDown;
-    private System.Windows.Forms.Label label1;
-    private System.Windows.Forms.CheckBox exactCheckBox;
-  }
-}
Index: unk/sources/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HistogramControl.cs
===================================================================
--- /trunk/sources/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HistogramControl.cs	(revision 11609)
+++ 	(revision )
@@ -1,208 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2014 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;
-
-namespace HeuristicLab.Visualization.ChartControlsExtensions {
-  public partial class HistogramControl : UserControl {
-    protected static readonly string SeriesName = "Histogram";
-
-    protected Dictionary<string, List<double>> points;
-    public int NumberOfBins {
-      get { return (int)binsNumericUpDown.Value; }
-      set { binsNumericUpDown.Value = value; }
-    }
-
-    public int MinimumNumberOfBins {
-      get { return (int)binsNumericUpDown.Minimum; }
-      set { binsNumericUpDown.Minimum = value; }
-    }
-
-    public int MaximumNumberOfBins {
-      get { return (int)binsNumericUpDown.Maximum; }
-      set { binsNumericUpDown.Maximum = value; }
-    }
-
-    public int IncrementNumberOfBins {
-      get { return (int)binsNumericUpDown.Increment; }
-      set { binsNumericUpDown.Increment = value; }
-    }
-
-    public bool CalculateExactBins {
-      get { return exactCheckBox.Checked; }
-      set { exactCheckBox.Checked = value; }
-    }
-
-    public bool ShowExactCheckbox {
-      get { return exactCheckBox.Visible; }
-      set { exactCheckBox.Visible = value; }
-    }
-
-    public HistogramControl() {
-      InitializeComponent();
-      points = new Dictionary<string, List<double>>();
-      InitializeChart();
-    }
-
-    protected void InitNewRow(string name) {
-      if (!points.ContainsKey(name)) {
-        points.Add(name, new List<double>());
-      }
-    }
-
-    protected void InitSeries(string name) {
-      if (!chart.Series.Any(x => x.Name == name)) {
-        Series s = chart.Series.Add(name);
-        s.ChartType = SeriesChartType.Column;
-        s.BorderColor = Color.Black;
-        s.BorderWidth = 1;
-        s.BorderDashStyle = ChartDashStyle.Solid;
-      }
-    }
-
-    public void AddPoint(double point) {
-      InitNewRow(SeriesName);
-      InitSeries(SeriesName);
-      points[SeriesName].Add(point);
-      UpdateHistogram();
-    }
-
-    public void AddPoints(IEnumerable<double> points) {
-      InitNewRow(SeriesName);
-      InitSeries(SeriesName);
-      this.points[SeriesName].AddRange(points);
-      UpdateHistogram();
-    }
-
-    public void AddPoint(string name, double point, bool replace = false) {
-      InitNewRow(name);
-      InitSeries(name);
-      if (replace) {
-        points[name].Clear();
-      }
-      points[name].Add(point);
-      UpdateHistogram();
-    }
-
-    public void AddPoints(string name, IEnumerable<double> points, bool replace = false) {
-      InitNewRow(name);
-      InitSeries(name);
-      if (replace) {
-        this.points[name].Clear();
-      }
-      this.points[name].AddRange(points);
-      UpdateHistogram();
-    }
-
-    public void ClearPoints() {
-      points.Clear();
-      UpdateHistogram();
-    }
-
-    protected void InitializeChart() {
-      chart.Series.Clear();
-    }
-
-    protected void UpdateHistogram() {
-      if (InvokeRequired) {
-        Invoke((Action)UpdateHistogram, null);
-        return;
-      }
-
-      double overallMin = double.MaxValue;
-      double overallMax = double.MinValue;
-      int bins = (int)binsNumericUpDown.Value;
-
-      chart.Series.Clear();
-
-      foreach (var point in points) {
-        if (!point.Value.Any()) continue;
-
-        Series histogramSeries = new Series(point.Key);
-        chart.Series.Add(histogramSeries);
-
-        double minValue = point.Value.Min();
-        double maxValue = point.Value.Max();
-        double intervalWidth = (maxValue - minValue) / bins;
-        if (intervalWidth <= 0) continue;
-
-        if (!exactCheckBox.Checked) {
-          intervalWidth = HumanRoundRange(intervalWidth);
-          minValue = Math.Floor(minValue / intervalWidth) * intervalWidth;
-          maxValue = Math.Ceiling(maxValue / intervalWidth) * intervalWidth;
-        }
-
-        double current = minValue, intervalCenter = intervalWidth / 2.0;
-        int count = 0;
-        foreach (double v in point.Value.OrderBy(x => x)) {
-          while (v > current + intervalWidth) {
-            histogramSeries.Points.AddXY(current + intervalCenter, count);
-            current += intervalWidth;
-            count = 0;
-          }
-          count++;
-        }
-        histogramSeries.Points.AddXY(current + intervalCenter, count);
-        histogramSeries["PointWidth"] = "1";
-
-        overallMax = Math.Max(overallMax, maxValue);
-        overallMin = Math.Min(overallMin, minValue);
-      }
-
-      ChartArea chartArea = chart.ChartAreas[0];
-      chartArea.AxisY.Title = "Frequency";
-      chartArea.AxisX.Minimum = overallMin;
-      chartArea.AxisX.Maximum = overallMax;
-
-      double overallIntervalWidth = (overallMax - overallMin) / bins;
-
-      double axisInterval = overallIntervalWidth;
-      while ((overallMax - overallMin) / axisInterval > 10.0) {
-        axisInterval *= 2.0;
-      }
-      chartArea.AxisX.Interval = axisInterval;
-    }
-
-    protected double HumanRoundRange(double range) {
-      double base10 = Math.Pow(10.0, Math.Floor(Math.Log10(range)));
-      double rounding = range / base10;
-      if (rounding <= 1.5) rounding = 1;
-      else if (rounding <= 2.25) rounding = 2;
-      else if (rounding <= 3.75) rounding = 2.5;
-      else if (rounding <= 7.5) rounding = 5;
-      else rounding = 10;
-      return rounding * base10;
-    }
-
-    private void binsNumericUpDown_ValueChanged(object sender, EventArgs e) {
-      UpdateHistogram();
-    }
-
-    private void exactCheckBox_CheckedChanged(object sender, EventArgs e) {
-      UpdateHistogram();
-    }
-  }
-}
