Index: branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableHistoryView.cs
===================================================================
--- branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableHistoryView.cs	(revision 6046)
+++ branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableHistoryView.cs	(revision 6115)
@@ -27,9 +27,25 @@
   [View("DataTableHistory View")]
   [Content(typeof(DataTableHistory), true)]
-  public partial class DataTableHistoryView : MovieView<DataTable> {
+  public partial class DataTableHistoryView : MovieView<DataTable>, IConfigureableView {
     public DataTableHistoryView() {
       InitializeComponent();
       itemsGroupBox.Text = "Data Table";
     }
+
+    public void ShowConfiguration() {
+      DataTable current = viewHost.Content as DataTable;
+      if (current == null) return;
+      using (DataTableVisualPropertiesDialog dialog = new DataTableVisualPropertiesDialog(current)) {
+        if (dialog.ShowDialog() != DialogResult.OK) return;
+        foreach (DataTable dt in Content) {
+          if (current != dt) {
+            dt.VisualProperties = (DataTableVisualProperties)current.VisualProperties.Clone();
+            foreach (DataRow row in current.Rows)
+              dt.Rows[row.Name].VisualProperties = (DataRowVisualProperties)row.VisualProperties.Clone();
+          }
+        }
+      }
+    }
+
   }
 }
Index: branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableView.cs
===================================================================
--- branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableView.cs	(revision 6046)
+++ branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableView.cs	(revision 6115)
@@ -236,28 +236,10 @@
       }
       area.RecalculateAxesScale();
+      area.AxisX.IsMarginVisible = false;
+      area.AxisX2.IsMarginVisible = false;
 
       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;
@@ -575,5 +557,9 @@
       double maxValue = row.Values.Max();
       double intervalWidth = (maxValue - minValue) / bins;
-      if (intervalWidth <= 0) return;
+      if (intervalWidth < 0) return;
+      if (intervalWidth == 0) {
+        series.Points.AddXY(minValue, row.Values.Count);
+        return;
+      }
 
       if (!row.VisualProperties.ExactBins) {
@@ -585,4 +571,5 @@
       double current = minValue, intervalCenter = intervalWidth / 2.0;
       int frequency = 0;
+      series.Points.AddXY(current - intervalCenter, 0); // so that the first column is not visually truncated
       foreach (double v in row.Values.Where(x => !IsInvalidValue(x)).OrderBy(x => x)) {
         while (v > current + intervalWidth) {
@@ -594,4 +581,5 @@
       }
       series.Points.AddXY(current + intervalCenter, frequency);
+      series.Points.AddXY(current + 3 * intervalCenter, 0); // so that the last column is not visually truncated
     }
 
