Index: /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableView.cs
===================================================================
--- /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableView.cs	(revision 6031)
+++ /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableView.cs	(revision 6032)
@@ -137,4 +137,5 @@
           AddDataRow(row);
         ConfigureChartArea(chart.ChartAreas[0]);
+        RecalculateAxesScale(chart.ChartAreas[0]);
       }
     }
@@ -155,6 +156,6 @@
 
       chart.Series.Add(series);
-      chart.ChartAreas[0].RecalculateAxesScale();
       ConfigureChartArea(chart.ChartAreas[0]);
+      RecalculateAxesScale(chart.ChartAreas[0]);
       UpdateYCursorInterval();
     }
@@ -208,42 +209,64 @@
 
     private void ConfigureChartArea(ChartArea area) {
-      if (Content.VisualProperties.TitleFont != null)
-        chart.Titles[0].Font = Content.VisualProperties.TitleFont;
-      if (!Content.VisualProperties.TitleColor.IsEmpty)
-        chart.Titles[0].ForeColor = Content.VisualProperties.TitleColor;
-
-      if (Content.VisualProperties.AxisTitleFont != null)
-        area.AxisX.TitleFont = Content.VisualProperties.AxisTitleFont;
-      if (!Content.VisualProperties.AxisTitleColor.IsEmpty)
-        area.AxisX.TitleForeColor = Content.VisualProperties.AxisTitleColor;
+      if (Content.VisualProperties.TitleFont != null) chart.Titles[0].Font = Content.VisualProperties.TitleFont;
+      if (!Content.VisualProperties.TitleColor.IsEmpty) chart.Titles[0].ForeColor = Content.VisualProperties.TitleColor;
+
+      if (Content.VisualProperties.AxisTitleFont != null) area.AxisX.TitleFont = Content.VisualProperties.AxisTitleFont;
+      if (!Content.VisualProperties.AxisTitleColor.IsEmpty) area.AxisX.TitleForeColor = Content.VisualProperties.AxisTitleColor;
       area.AxisX.Title = Content.VisualProperties.XAxisTitle;
 
-      if (Content.VisualProperties.AxisTitleFont != null)
-        area.AxisX2.TitleFont = Content.VisualProperties.AxisTitleFont;
-      if (!Content.VisualProperties.AxisTitleColor.IsEmpty)
-        area.AxisX2.TitleForeColor = Content.VisualProperties.AxisTitleColor;
+      if (Content.VisualProperties.AxisTitleFont != null) area.AxisX2.TitleFont = Content.VisualProperties.AxisTitleFont;
+      if (!Content.VisualProperties.AxisTitleColor.IsEmpty) area.AxisX2.TitleForeColor = Content.VisualProperties.AxisTitleColor;
       area.AxisX2.Title = Content.VisualProperties.SecondXAxisTitle;
 
-      if (Content.VisualProperties.AxisTitleFont != null)
-        area.AxisY.TitleFont = Content.VisualProperties.AxisTitleFont;
-      if (!Content.VisualProperties.AxisTitleColor.IsEmpty)
-        area.AxisY.TitleForeColor = Content.VisualProperties.AxisTitleColor;
+      if (Content.VisualProperties.AxisTitleFont != null) area.AxisY.TitleFont = Content.VisualProperties.AxisTitleFont;
+      if (!Content.VisualProperties.AxisTitleColor.IsEmpty) area.AxisY.TitleForeColor = Content.VisualProperties.AxisTitleColor;
       area.AxisY.Title = Content.VisualProperties.YAxisTitle;
 
-      if (Content.VisualProperties.AxisTitleFont != null)
-        area.AxisY2.TitleFont = Content.VisualProperties.AxisTitleFont;
-      if (!Content.VisualProperties.AxisTitleColor.IsEmpty)
-        area.AxisY2.TitleForeColor = Content.VisualProperties.AxisTitleColor;
+      if (Content.VisualProperties.AxisTitleFont != null) area.AxisY2.TitleFont = Content.VisualProperties.AxisTitleFont;
+      if (!Content.VisualProperties.AxisTitleColor.IsEmpty) area.AxisY2.TitleForeColor = Content.VisualProperties.AxisTitleColor;
       area.AxisY2.Title = Content.VisualProperties.SecondYAxisTitle;
-
+    }
+
+    private void RecalculateAxesScale(ChartArea area) {
+      // Reset the axes bounds so that RecalculateAxesScale() will assign new bounds
+      foreach (Axis a in area.Axes) {
+        a.Minimum = double.NaN;
+        a.Maximum = double.NaN;
+      }
       area.RecalculateAxesScale();
-      area.AxisX.Minimum = Content.VisualProperties.XAxisMinimumFixedValue;
-      area.AxisX.Maximum = Content.VisualProperties.XAxisMaximumFixedValue;
-      area.AxisX2.Minimum = Content.VisualProperties.SecondXAxisMinimumFixedValue;
-      area.AxisX2.Maximum = Content.VisualProperties.SecondXAxisMaximumFixedValue;
-      area.AxisY.Minimum = Content.VisualProperties.YAxisMinimumFixedValue;
-      area.AxisY.Maximum = Content.VisualProperties.YAxisMaximumFixedValue;
-      area.AxisY2.Minimum = Content.VisualProperties.SecondYAxisMinimumFixedValue;
-      area.AxisY2.Maximum = Content.VisualProperties.SecondYAxisMaximumFixedValue;
+
+      if (!Content.VisualProperties.XAxisMinimumAuto && !double.IsNaN(Content.VisualProperties.XAxisMinimumFixedValue)) area.AxisX.Minimum = Content.VisualProperties.XAxisMinimumFixedValue;
+      #region Workaround for bug in RecalculateAxesScale() that would assign -1
+      else {
+        if (area.AxisX.IsStartedFromZero
+        && chart.Series.Where(x => x.XAxisType == AxisType.Primary).Any()
+        && chart.Series.Where(x => x.XAxisType == AxisType.Primary).SelectMany(x => x.Points).Any()) {
+          double minX = chart.Series.Where(x => x.XAxisType == AxisType.Primary).SelectMany(x => x.Points).Select(x => x.XValue).Min();
+          if (minX >= 0 && area.AxisX.Minimum < 0) area.AxisX.Minimum = 0;
+        }
+      }
+      #endregion
+      if (!Content.VisualProperties.XAxisMaximumAuto && !double.IsNaN(Content.VisualProperties.XAxisMaximumFixedValue)) area.AxisX.Maximum = Content.VisualProperties.XAxisMaximumFixedValue;
+      if (!Content.VisualProperties.SecondXAxisMinimumAuto && !double.IsNaN(Content.VisualProperties.SecondXAxisMinimumFixedValue)) area.AxisX2.Minimum = Content.VisualProperties.SecondXAxisMinimumFixedValue;
+      #region Workaround for bug in RecalculateAxesScale() that would assign -1
+      else {
+        if (area.AxisX2.IsStartedFromZero
+         && chart.Series.Where(x => x.XAxisType == AxisType.Secondary).Any()
+         && chart.Series.Where(x => x.XAxisType == AxisType.Secondary).SelectMany(x => x.Points).Any()) {
+          double minX2 = chart.Series.Where(x => x.XAxisType == AxisType.Secondary).SelectMany(x => x.Points).Select(x => x.XValue).Min();
+          if (minX2 >= 0 && area.AxisX2.Minimum < 0) area.AxisX2.Minimum = 0;
+        }
+      }
+      #endregion
+      if (!Content.VisualProperties.SecondXAxisMaximumAuto && !double.IsNaN(Content.VisualProperties.SecondXAxisMaximumFixedValue)) area.AxisX2.Maximum = Content.VisualProperties.SecondXAxisMaximumFixedValue;
+      if (!Content.VisualProperties.YAxisMinimumAuto && !double.IsNaN(Content.VisualProperties.YAxisMinimumFixedValue)) area.AxisY.Minimum = Content.VisualProperties.YAxisMinimumFixedValue;
+      if (!Content.VisualProperties.YAxisMaximumAuto && !double.IsNaN(Content.VisualProperties.YAxisMaximumFixedValue)) area.AxisY.Maximum = Content.VisualProperties.YAxisMaximumFixedValue;
+      if (!Content.VisualProperties.SecondYAxisMinimumAuto && !double.IsNaN(Content.VisualProperties.SecondYAxisMinimumFixedValue)) area.AxisY2.Minimum = Content.VisualProperties.SecondYAxisMinimumFixedValue;
+      if (!Content.VisualProperties.SecondYAxisMaximumAuto && !double.IsNaN(Content.VisualProperties.SecondYAxisMaximumFixedValue)) area.AxisY2.Maximum = Content.VisualProperties.SecondYAxisMaximumFixedValue;
+      if (area.AxisX.Minimum > area.AxisX.Maximum) area.AxisX.Maximum = area.AxisX.Minimum + 1;
+      if (area.AxisX2.Minimum > area.AxisX2.Maximum) area.AxisX2.Maximum = area.AxisX2.Minimum + 1;
+      if (area.AxisY.Minimum > area.AxisY.Maximum) area.AxisY.Maximum = area.AxisY.Minimum + 1;
+      if (area.AxisY2.Minimum > area.AxisY2.Maximum) area.AxisY2.Maximum = area.AxisY2.Minimum + 1;
     }
 
@@ -278,5 +301,5 @@
       if (invisibleSeries.Contains(series))
         invisibleSeries.Remove(series);
-      chart.ChartAreas[0].RecalculateAxesScale();
+      RecalculateAxesScale(chart.ChartAreas[0]);
     }
 
@@ -296,4 +319,5 @@
       else {
         ConfigureChartArea(chart.ChartAreas[0]);
+        RecalculateAxesScale(chart.ChartAreas[0]); // axes min/max could have changed
       }
     }
@@ -359,5 +383,5 @@
         ConfigureSeries(series, row);
         FillSeriesWithRowValues(series, row);
-        chart.ChartAreas[0].RecalculateAxesScale();
+        RecalculateAxesScale(chart.ChartAreas[0]);
       }
     }
@@ -383,4 +407,5 @@
             rowSeries.Points.Clear();
             FillSeriesWithRowValues(rowSeries, row);
+            RecalculateAxesScale(chart.ChartAreas[0]);
             UpdateYCursorInterval();
           }
@@ -399,4 +424,5 @@
             rowSeries.Points.Clear();
             FillSeriesWithRowValues(rowSeries, row);
+            RecalculateAxesScale(chart.ChartAreas[0]);
             UpdateYCursorInterval();
           }
@@ -426,4 +452,5 @@
               }
             }
+            RecalculateAxesScale(chart.ChartAreas[0]);
             UpdateYCursorInterval();
           }
@@ -442,4 +469,5 @@
             rowSeries.Points.Clear();
             FillSeriesWithRowValues(rowSeries, row);
+            RecalculateAxesScale(chart.ChartAreas[0]);
             UpdateYCursorInterval();
           }
@@ -459,4 +487,5 @@
             rowSeries.Points.Clear();
             FillSeriesWithRowValues(rowSeries, row);
+            RecalculateAxesScale(chart.ChartAreas[0]);
             UpdateYCursorInterval();
           }
@@ -511,4 +540,5 @@
           FillSeriesWithRowValues(series, row);
           this.chart.Legends[series.Legend].ForeColor = Color.Black;
+          RecalculateAxesScale(chart.ChartAreas[0]);
           UpdateYCursorInterval();
         }
@@ -580,4 +610,13 @@
       else rounding = 10;
       return rounding * base10;
+    }
+
+    private double HumanRoundMax(double max) {
+      double base10;
+      if (max > 0) base10 = Math.Pow(10.0, Math.Floor(Math.Log10(max)));
+      else base10 = Math.Pow(10.0, Math.Ceiling(Math.Log10(-max)));
+      double rounding = (max > 0) ? base10 : -base10;
+      while (rounding < max) rounding += base10;
+      return rounding;
     }
 
Index: /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesControl.Designer.cs
===================================================================
--- /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesControl.Designer.cs	(revision 6031)
+++ /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesControl.Designer.cs	(revision 6032)
@@ -145,5 +145,5 @@
       this.yAxisPrimaryTitleTextBox.Location = new System.Drawing.Point(63, 23);
       this.yAxisPrimaryTitleTextBox.Name = "yAxisPrimaryTitleTextBox";
-      this.yAxisPrimaryTitleTextBox.Size = new System.Drawing.Size(243, 20);
+      this.yAxisPrimaryTitleTextBox.Size = new System.Drawing.Size(221, 20);
       this.yAxisPrimaryTitleTextBox.TabIndex = 1;
       this.yAxisPrimaryTitleTextBox.Validated += new System.EventHandler(this.yPrimaryTitleTextBox_Validated);
@@ -207,5 +207,5 @@
       this.xAxisPrimaryTitleTextBox.Location = new System.Drawing.Point(63, 23);
       this.xAxisPrimaryTitleTextBox.Name = "xAxisPrimaryTitleTextBox";
-      this.xAxisPrimaryTitleTextBox.Size = new System.Drawing.Size(245, 20);
+      this.xAxisPrimaryTitleTextBox.Size = new System.Drawing.Size(221, 20);
       this.xAxisPrimaryTitleTextBox.TabIndex = 1;
       this.xAxisPrimaryTitleTextBox.Validated += new System.EventHandler(this.xPrimaryTitleTextBox_Validated);
@@ -234,5 +234,5 @@
       this.xAxisPrimaryMaximumFixedTextBox.Location = new System.Drawing.Point(126, 2);
       this.xAxisPrimaryMaximumFixedTextBox.Name = "xAxisPrimaryMaximumFixedTextBox";
-      this.xAxisPrimaryMaximumFixedTextBox.Size = new System.Drawing.Size(117, 20);
+      this.xAxisPrimaryMaximumFixedTextBox.Size = new System.Drawing.Size(95, 20);
       this.xAxisPrimaryMaximumFixedTextBox.TabIndex = 2;
       this.xAxisPrimaryMaximumFixedTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.xAxisPrimaryMaximumFixedTextBox_Validating);
@@ -276,5 +276,5 @@
       this.xAxisPrimaryMinimumFixedTextBox.Location = new System.Drawing.Point(126, 2);
       this.xAxisPrimaryMinimumFixedTextBox.Name = "xAxisPrimaryMinimumFixedTextBox";
-      this.xAxisPrimaryMinimumFixedTextBox.Size = new System.Drawing.Size(117, 20);
+      this.xAxisPrimaryMinimumFixedTextBox.Size = new System.Drawing.Size(95, 20);
       this.xAxisPrimaryMinimumFixedTextBox.TabIndex = 2;
       this.xAxisPrimaryMinimumFixedTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.xAxisPrimaryMinimumFixedTextBox_Validating);
@@ -334,5 +334,5 @@
       this.xAxisSecondaryTitleTextBox.Location = new System.Drawing.Point(63, 23);
       this.xAxisSecondaryTitleTextBox.Name = "xAxisSecondaryTitleTextBox";
-      this.xAxisSecondaryTitleTextBox.Size = new System.Drawing.Size(245, 20);
+      this.xAxisSecondaryTitleTextBox.Size = new System.Drawing.Size(221, 20);
       this.xAxisSecondaryTitleTextBox.TabIndex = 1;
       this.xAxisSecondaryTitleTextBox.Validated += new System.EventHandler(this.xSecondaryTitleTextBox_Validated);
@@ -370,5 +370,5 @@
       this.xAxisSecondaryMaximumFixedTextBox.Location = new System.Drawing.Point(126, 2);
       this.xAxisSecondaryMaximumFixedTextBox.Name = "xAxisSecondaryMaximumFixedTextBox";
-      this.xAxisSecondaryMaximumFixedTextBox.Size = new System.Drawing.Size(117, 20);
+      this.xAxisSecondaryMaximumFixedTextBox.Size = new System.Drawing.Size(95, 20);
       this.xAxisSecondaryMaximumFixedTextBox.TabIndex = 2;
       this.xAxisSecondaryMaximumFixedTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.xAxisSecondaryMaximumFixedTextBox_Validating);
@@ -412,5 +412,5 @@
       this.xAxisSecondaryMinimumFixedTextBox.Location = new System.Drawing.Point(126, 2);
       this.xAxisSecondaryMinimumFixedTextBox.Name = "xAxisSecondaryMinimumFixedTextBox";
-      this.xAxisSecondaryMinimumFixedTextBox.Size = new System.Drawing.Size(117, 20);
+      this.xAxisSecondaryMinimumFixedTextBox.Size = new System.Drawing.Size(95, 20);
       this.xAxisSecondaryMinimumFixedTextBox.TabIndex = 2;
       this.xAxisSecondaryMinimumFixedTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.xAxisSecondaryMinimumFixedTextBox_Validating);
@@ -596,5 +596,5 @@
       this.yAxisSecondaryMaximumFixedTextBox.Location = new System.Drawing.Point(126, 2);
       this.yAxisSecondaryMaximumFixedTextBox.Name = "yAxisSecondaryMaximumFixedTextBox";
-      this.yAxisSecondaryMaximumFixedTextBox.Size = new System.Drawing.Size(117, 20);
+      this.yAxisSecondaryMaximumFixedTextBox.Size = new System.Drawing.Size(95, 20);
       this.yAxisSecondaryMaximumFixedTextBox.TabIndex = 2;
       this.yAxisSecondaryMaximumFixedTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.yAxisSecondaryMaximumFixedTextBox_Validating);
@@ -638,5 +638,5 @@
       this.yAxisSecondaryMinimumFixedTextBox.Location = new System.Drawing.Point(126, 2);
       this.yAxisSecondaryMinimumFixedTextBox.Name = "yAxisSecondaryMinimumFixedTextBox";
-      this.yAxisSecondaryMinimumFixedTextBox.Size = new System.Drawing.Size(117, 20);
+      this.yAxisSecondaryMinimumFixedTextBox.Size = new System.Drawing.Size(95, 20);
       this.yAxisSecondaryMinimumFixedTextBox.TabIndex = 2;
       this.yAxisSecondaryMinimumFixedTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.yAxisSecondaryMinimumFixedTextBox_Validating);
@@ -713,5 +713,5 @@
       this.yAxisPrimaryMaximumFixedTextBox.Location = new System.Drawing.Point(126, 2);
       this.yAxisPrimaryMaximumFixedTextBox.Name = "yAxisPrimaryMaximumFixedTextBox";
-      this.yAxisPrimaryMaximumFixedTextBox.Size = new System.Drawing.Size(117, 20);
+      this.yAxisPrimaryMaximumFixedTextBox.Size = new System.Drawing.Size(95, 20);
       this.yAxisPrimaryMaximumFixedTextBox.TabIndex = 2;
       this.yAxisPrimaryMaximumFixedTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.yAxisPrimaryMaximumFixedTextBox_Validating);
@@ -755,5 +755,5 @@
       this.yAxisPrimaryMinimumFixedTextBox.Location = new System.Drawing.Point(126, 2);
       this.yAxisPrimaryMinimumFixedTextBox.Name = "yAxisPrimaryMinimumFixedTextBox";
-      this.yAxisPrimaryMinimumFixedTextBox.Size = new System.Drawing.Size(117, 20);
+      this.yAxisPrimaryMinimumFixedTextBox.Size = new System.Drawing.Size(95, 20);
       this.yAxisPrimaryMinimumFixedTextBox.TabIndex = 2;
       this.yAxisPrimaryMinimumFixedTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.yAxisPrimaryMinimumFixedTextBox_Validating);
Index: /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesControl.cs
===================================================================
--- /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesControl.cs	(revision 6031)
+++ /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableVisualPropertiesControl.cs	(revision 6032)
@@ -161,6 +161,11 @@
         double val;
         if (double.TryParse(tb.Text, out val)) {
-          Content.XAxisMinimumFixedValue = val;
-          errorProvider.SetError(tb, string.Empty);
+          if (val >= Content.XAxisMaximumFixedValue) {
+            errorProvider.SetError(tb, "Number must be smaller than maximum.");
+            e.Cancel = true;
+          } else {
+            Content.XAxisMinimumFixedValue = val;
+            errorProvider.SetError(tb, string.Empty);
+          }
         } else {
           errorProvider.SetError(tb, "Not a valid number.");
@@ -175,6 +180,11 @@
         double val;
         if (double.TryParse(tb.Text, out val)) {
-          Content.XAxisMaximumFixedValue = val;
-          errorProvider.SetError(tb, string.Empty);
+          if (val <= Content.XAxisMinimumFixedValue) {
+            errorProvider.SetError(tb, "Number must be greater than minimum.");
+            e.Cancel = true;
+          } else {
+            Content.XAxisMaximumFixedValue = val;
+            errorProvider.SetError(tb, string.Empty);
+          }
         } else {
           errorProvider.SetError(tb, "Not a valid number.");
@@ -189,6 +199,11 @@
         double val;
         if (double.TryParse(tb.Text, out val)) {
-          Content.SecondXAxisMinimumFixedValue = val;
-          errorProvider.SetError(tb, string.Empty);
+          if (val >= Content.SecondXAxisMaximumFixedValue) {
+            errorProvider.SetError(tb, "Number must be smaller than maximum.");
+            e.Cancel = true;
+          } else {
+            Content.SecondXAxisMinimumFixedValue = val;
+            errorProvider.SetError(tb, string.Empty);
+          }
         } else {
           errorProvider.SetError(tb, "Not a valid number.");
@@ -203,6 +218,11 @@
         double val;
         if (double.TryParse(tb.Text, out val)) {
-          Content.SecondXAxisMaximumFixedValue = val;
-          errorProvider.SetError(tb, string.Empty);
+          if (val <= Content.SecondXAxisMinimumFixedValue) {
+            errorProvider.SetError(tb, "Number must be greater than minimum.");
+            e.Cancel = true;
+          } else {
+            Content.SecondXAxisMaximumFixedValue = val;
+            errorProvider.SetError(tb, string.Empty);
+          }
         } else {
           errorProvider.SetError(tb, "Not a valid number.");
@@ -217,6 +237,11 @@
         double val;
         if (double.TryParse(tb.Text, out val)) {
-          Content.YAxisMinimumFixedValue = val;
-          errorProvider.SetError(tb, string.Empty);
+          if (val >= Content.YAxisMaximumFixedValue) {
+            errorProvider.SetError(tb, "Number must be smaller than maximum.");
+            e.Cancel = true;
+          } else {
+            Content.YAxisMinimumFixedValue = val;
+            errorProvider.SetError(tb, string.Empty);
+          }
         } else {
           errorProvider.SetError(tb, "Not a valid number.");
@@ -231,6 +256,11 @@
         double val;
         if (double.TryParse(tb.Text, out val)) {
-          Content.YAxisMaximumFixedValue = val;
-          errorProvider.SetError(tb, string.Empty);
+          if (val <= Content.YAxisMinimumFixedValue) {
+            errorProvider.SetError(tb, "Number must be greater than minimum.");
+            e.Cancel = true;
+          } else {
+            Content.YAxisMaximumFixedValue = val;
+            errorProvider.SetError(tb, string.Empty);
+          }
         } else {
           errorProvider.SetError(tb, "Not a valid number.");
@@ -245,6 +275,11 @@
         double val;
         if (double.TryParse(tb.Text, out val)) {
-          Content.SecondYAxisMinimumFixedValue = val;
-          errorProvider.SetError(tb, string.Empty);
+          if (val >= Content.SecondYAxisMaximumFixedValue) {
+            errorProvider.SetError(tb, "Number must be smaller than maximum.");
+            e.Cancel = true;
+          } else {
+            Content.SecondYAxisMinimumFixedValue = val;
+            errorProvider.SetError(tb, string.Empty);
+          }
         } else {
           errorProvider.SetError(tb, "Not a valid number.");
@@ -259,6 +294,11 @@
         double val;
         if (double.TryParse(tb.Text, out val)) {
-          Content.SecondYAxisMaximumFixedValue = val;
-          errorProvider.SetError(tb, string.Empty);
+          if (val <= Content.SecondYAxisMinimumFixedValue) {
+            errorProvider.SetError(tb, "Number must be greater than minimum.");
+            e.Cancel = true;
+          } else {
+            Content.SecondYAxisMaximumFixedValue = val;
+            errorProvider.SetError(tb, string.Empty);
+          }
         } else {
           errorProvider.SetError(tb, "Not a valid number.");
Index: /branches/histogram/HeuristicLab.Parameters/3.3/ValueParameter.cs
===================================================================
--- /branches/histogram/HeuristicLab.Parameters/3.3/ValueParameter.cs	(revision 6031)
+++ /branches/histogram/HeuristicLab.Parameters/3.3/ValueParameter.cs	(revision 6032)
@@ -54,10 +54,12 @@
     public ValueParameter(string name, string description, T value) : base(name, description, value) { }
     public ValueParameter(string name, string description, T value, bool getsCollected) : base(name, description, value, getsCollected) { }
+                                                                                  
+    protected T CreateDefaultValue() {
+      Type type = typeof(T);
+      if (type.IsAbstract) return null;
+      ConstructorInfo defaultConstructor = type.GetConstructor(Type.EmptyTypes);
+      if (defaultConstructor == null) return null;
 
-    protected T CreateDefaultValue() {
-      ConstructorInfo defaultConstructor = typeof(T).GetConstructor(Type.EmptyTypes);
-      if (defaultConstructor != null)
-        return (T)defaultConstructor.Invoke(new object[0]);
-      return null;
+      return (T)defaultConstructor.Invoke(new object[0]);
     }
 
