Index: /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableHistoryView.cs
===================================================================
--- /branches/histogram/HeuristicLab.Analysis.Views/3.3/DataTableHistoryView.cs	(revision 6114)
+++ /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 6114)
+++ /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
     }
 
Index: /branches/histogram/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityDistributionAnalyzer.cs
===================================================================
--- /branches/histogram/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityDistributionAnalyzer.cs	(revision 6114)
+++ /branches/histogram/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityDistributionAnalyzer.cs	(revision 6115)
@@ -97,6 +97,6 @@
       } else {
         qualityDistribution = new DataTable("Population Quality Distribution", description);
-        qualityDistribution.VisualProperties.XAxisTitle = IterationsParameter.ActualName;
-        qualityDistribution.VisualProperties.YAxisTitle = QualityParameter.ActualName;
+        qualityDistribution.VisualProperties.XAxisTitle = QualityParameter.ActualName;
+        qualityDistribution.VisualProperties.YAxisTitle = "Frequency";
         results.Add(new Result(HistogramName, description, qualityDistribution));
       }
@@ -108,6 +108,5 @@
       }
       var qualities = QualityParameter.ActualValue;
-      row.Values.Clear();
-      row.Values.AddRange(qualities.Select(x => x.Value));
+      row.Values.Replace(qualities.Select(x => x.Value));
 
       if (StoreHistory) {
Index: /branches/histogram/HeuristicLab.Collections/3.3/ObservableList.cs
===================================================================
--- /branches/histogram/HeuristicLab.Collections/3.3/ObservableList.cs	(revision 6114)
+++ /branches/histogram/HeuristicLab.Collections/3.3/ObservableList.cs	(revision 6115)
@@ -24,4 +24,5 @@
 using System.Collections.Generic;
 using System.ComponentModel;
+using System.Linq;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
@@ -211,4 +212,27 @@
     }
 
+    /// <summary>
+    /// Performs a Clear and an AddRange, but does not fire separate events for those operations
+    /// </summary>
+    /// <param name="collection"></param>
+    public void Replace(IEnumerable<T> collection) {
+      List<IndexedItem<T>> oldItems = null;
+      if (list.Any()) oldItems = list.Select((x, i) => new IndexedItem<T>(i, x)).ToList();
+      else oldItems = new List<IndexedItem<T>>();
+
+      int oldCapacity = list.Capacity;
+      list.Clear();
+      list.AddRange(collection);
+
+      List<IndexedItem<T>> items = null;
+      if (list.Any()) items = list.Select((x, i) => new IndexedItem<T>(i, x)).ToList();
+      else items = new List<IndexedItem<T>>();
+
+      if (oldCapacity != list.Capacity) OnPropertyChanged("Capacity");
+      OnPropertyChanged("Item[]");
+      if (oldItems.Count != items.Count) OnPropertyChanged("Count");
+      OnItemsReplaced(items, oldItems);
+    }
+
     public bool Remove(T item) {
       int index = list.IndexOf(item);
Index: /branches/histogram/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.Designer.cs
===================================================================
--- /branches/histogram/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.Designer.cs	(revision 6114)
+++ /branches/histogram/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.Designer.cs	(revision 6115)
@@ -51,4 +51,5 @@
       this.viewContextMenuStrip = new HeuristicLab.MainForm.WindowsForms.ViewContextMenuStrip();
       this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.configurationLabel = new System.Windows.Forms.Label();
       this.SuspendLayout();
       // 
@@ -86,4 +87,16 @@
       this.viewContextMenuStrip.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.viewContextMenuStrip_ItemClicked);
       // 
+      // configurationLabel
+      // 
+      this.configurationLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.configurationLabel.Image = HeuristicLab.Common.Resources.VSImageLibrary.EditInformation;
+      this.configurationLabel.Location = new System.Drawing.Point(211, 22);
+      this.configurationLabel.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3);
+      this.configurationLabel.Name = "configurationLabel";
+      this.configurationLabel.Size = new System.Drawing.Size(16, 16);
+      this.configurationLabel.TabIndex = 0;
+      this.configurationLabel.Visible = false;
+      this.configurationLabel.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.configurationLabel_MouseDoubleClick);
+      // 
       // ViewHost
       // 
@@ -91,4 +104,5 @@
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
       this.Controls.Add(this.viewsLabel);
+      this.Controls.Add(this.configurationLabel);
       this.Controls.Add(this.messageLabel);
       this.Name = "ViewHost";
@@ -103,4 +117,5 @@
     private System.Windows.Forms.ToolTip toolTip;
     private HeuristicLab.MainForm.WindowsForms.ViewContextMenuStrip viewContextMenuStrip;
+    private System.Windows.Forms.Label configurationLabel;
 
   }
Index: /branches/histogram/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.cs
===================================================================
--- /branches/histogram/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.cs	(revision 6114)
+++ /branches/histogram/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.cs	(revision 6115)
@@ -101,4 +101,6 @@
             }
           } else viewType = null;
+          configurationLabel.Visible = activeView is IConfigureableView;
+          configurationLabel.Enabled = activeView != null && !activeView.Locked;
         }
       }
@@ -189,4 +191,5 @@
     private void activeView_LockedChanged(object sender, EventArgs e) {
       Locked = activeView.Locked;
+      configurationLabel.Enabled = !activeView.Locked;
     }
 
@@ -200,4 +203,5 @@
       base.OnSizeChanged(e);
       viewsLabel.Location = new Point(Width - viewsLabel.Margin.Right - viewsLabel.Width, viewsLabel.Margin.Top);
+      configurationLabel.Location = new Point(Width - configurationLabel.Margin.Right - configurationLabel.Width, viewsLabel.Bottom + viewsLabel.Margin.Bottom + configurationLabel.Margin.Top);
     }
 
@@ -287,4 +291,8 @@
         startDragAndDrop = false;
     }
+
+    private void configurationLabel_MouseDoubleClick(object sender, MouseEventArgs e) {
+      ((IConfigureableView)ActiveView).ShowConfiguration();
+    }
     #endregion
   }
Index: /branches/histogram/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj
===================================================================
--- /branches/histogram/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj	(revision 6114)
+++ /branches/histogram/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj	(revision 6115)
@@ -12,5 +12,6 @@
     <AssemblyName>HeuristicLab.MainForm-3.3</AssemblyName>
     <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
-    <TargetFrameworkProfile></TargetFrameworkProfile>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
     <FileAlignment>512</FileAlignment>
     <SignAssembly>true</SignAssembly>
@@ -111,4 +112,5 @@
   <ItemGroup>
     <None Include="HeuristicLabMainFormPlugin.cs.frame" />
+    <Compile Include="Interfaces\IConfigureableView.cs" />
     <Compile Include="ViewAttribute.cs" />
     <Compile Include="Interfaces\IContentView.cs" />
Index: /branches/histogram/HeuristicLab.MainForm/3.3/Interfaces/IConfigureableView.cs
===================================================================
--- /branches/histogram/HeuristicLab.MainForm/3.3/Interfaces/IConfigureableView.cs	(revision 6115)
+++ /branches/histogram/HeuristicLab.MainForm/3.3/Interfaces/IConfigureableView.cs	(revision 6115)
@@ -0,0 +1,6 @@
+﻿
+namespace HeuristicLab.MainForm {
+  public interface IConfigureableView : IView {
+    void ShowConfiguration();
+  }
+}
Index: /branches/histogram/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs
===================================================================
--- /branches/histogram/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs	(revision 6114)
+++ /branches/histogram/HeuristicLab.Problems.QuadraticAssignment/3.3/QuadraticAssignmentProblem.cs	(revision 6115)
@@ -164,4 +164,10 @@
         Parameters.Add(new OptionalValueParameter<ItemList<Permutation>>("BestKnownSolutions", "The list of best known solutions which is updated whenever a new better solution is found or may be the optimal solution if it is known beforehand.", null));
       }
+      if (Parameters.ContainsKey("DistanceMatrix")) {
+        DoubleMatrix bla = ((ValueParameter<DoubleMatrix>)Parameters["DistanceMatrix"]).Value;
+        Parameters.Remove("DistanceMatrix");
+        Parameters.Add(new ValueParameter<DoubleMatrix>("Distances", "bla", bla));
+      }
+      AttachEventHandlers();
       #endregion
     }
@@ -252,9 +258,4 @@
 
     #region Helpers
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserializationHook() {
-      AttachEventHandlers();
-    }
-
     private void AttachEventHandlers() {
       SolutionCreator.PermutationParameter.ActualNameChanged += new EventHandler(SolutionCreator_PermutationParameter_ActualNameChanged);
