Index: branches/histogram/HeuristicLab.Analysis/3.3/DataVisualization/Histogram.cs
===================================================================
--- branches/histogram/HeuristicLab.Analysis/3.3/DataVisualization/Histogram.cs	(revision 6012)
+++ 	(revision )
@@ -1,67 +1,0 @@
-﻿#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.Collections.Generic;
-using HeuristicLab.Collections;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Analysis {
-  [Item("Histogram", "Holds data that is to be displayed as a histogram.")]
-  [StorableClass]
-  public class Histogram : NamedItem {
-
-    private ObservableCollection<double> values;
-    public ObservableCollection<double> Values {
-      get { return values; }
-    }
-
-    [Storable(Name = "values")]
-    private IEnumerable<double> StorableValues {
-      get { return values; }
-      set { values = new ObservableCollection<double>(value); }
-    }
-
-    [StorableConstructor]
-    protected Histogram(bool deserializing) : base(deserializing) { }
-    protected Histogram(Histogram original, Cloner cloner)
-      : base(original, cloner) {
-      this.values = new ObservableCollection<double>(original.values);
-    }
-    public Histogram()
-      : base() {
-      values = new ObservableCollection<double>();
-    }
-    public Histogram(string name)
-      : base(name) {
-      values = new ObservableCollection<double>();
-    }
-    public Histogram(string name, string description)
-      : base(description) {
-      values = new ObservableCollection<double>();
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new Histogram(this, cloner);
-    }
-  }
-}
Index: branches/histogram/HeuristicLab.Analysis/3.3/DataVisualization/HistogramHistory.cs
===================================================================
--- branches/histogram/HeuristicLab.Analysis/3.3/DataVisualization/HistogramHistory.cs	(revision 6012)
+++ 	(revision )
@@ -1,49 +1,0 @@
-#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.Collections.Generic;
-using System.Drawing;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Analysis {
-  /// <summary>
-  /// Represents history values of histograms.
-  /// </summary>
-  [Item("HistogramHistory", "Represents history values of histograms.")]
-  [StorableClass]
-  public class HistogramHistory : CheckedItemList<Histogram> {
-    public override Image ItemImage {
-      get { return HeuristicLab.Common.Resources.VSImageLibrary.Cab; }
-    }
-
-    [StorableConstructor]
-    protected HistogramHistory(bool deserializing) : base(deserializing) { }
-    protected HistogramHistory(HistogramHistory original, Cloner cloner) : base(original, cloner) { }
-    public HistogramHistory() : base() { }
-    public HistogramHistory(IEnumerable<Histogram> collection) : base(collection) { }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new HistogramHistory(this, cloner);
-    }
-  }
-}
Index: branches/histogram/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj
===================================================================
--- branches/histogram/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj	(revision 6012)
+++ branches/histogram/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj	(revision 6013)
@@ -118,5 +118,4 @@
     <Compile Include="AlleleFrequencyAnalysis\AlleleFrequencyCollectionHistory.cs" />
     <Compile Include="BestScopeSolutionAnalyzer.cs" />
-    <Compile Include="DataVisualization\HistogramHistory.cs" />
     <Compile Include="DataVisualization\DataRow.cs" />
     <Compile Include="DataVisualization\DataRowVisualProperties.cs" />
@@ -127,5 +126,4 @@
     <Compile Include="DataVisualization\HeatMap.cs" />
     <Compile Include="DataVisualization\HeatMapHistory.cs" />
-    <Compile Include="DataVisualization\Histogram.cs" />
     <Compile Include="MultidimensionalScaling\MultidimensionalScaling.cs" />
     <Compile Include="MultiObjective\RankBasedParetoFrontAnalyzer.cs" />
Index: branches/histogram/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityDistributionAnalyzer.cs
===================================================================
--- branches/histogram/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityDistributionAnalyzer.cs	(revision 6012)
+++ branches/histogram/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityDistributionAnalyzer.cs	(revision 6013)
@@ -30,7 +30,7 @@
 
 namespace HeuristicLab.Analysis.QualityAnalysis {
-  [Item("Quality Distribution Analyzer", "Analyzes the distribution of the quality values in that it adds a Histogram of them into the result collection.")]
+  [Item("QualityDistributionAnalyzer", "Analyzes the distribution of the quality values in that it adds a Histogram of them into the result collection.")]
   [StorableClass]
-  public class QualityDistributionAnalyzer : SingleSuccessorOperator, IAnalyzer {
+  public class QualityDistributionAnalyzer : SingleSuccessorOperator, IAnalyzer, IIterationBasedOperator {
 
     #region Parameter properties
@@ -41,8 +41,27 @@
       get { return (IValueLookupParameter<ResultCollection>)Parameters["Results"]; }
     }
-    public IValueParameter<StringValue> HistogramNameParameter {
-      get { return (IValueParameter<StringValue>)Parameters["HistogramName"]; }
+    private ValueParameter<StringValue> HistogramNameParameter {
+      get { return (ValueParameter<StringValue>)Parameters["HistogramName"]; }
+    }
+    private ValueParameter<BoolValue> StoreHistoryParameter {
+      get { return (ValueParameter<BoolValue>)Parameters["StoreHistory"]; }
+    }
+    public ILookupParameter<IntValue> IterationsParameter {
+      get { return (ILookupParameter<IntValue>)Parameters["Iterations"]; }
+    }
+    public IValueLookupParameter<IntValue> MaximumIterationsParameter {
+      get { return (IValueLookupParameter<IntValue>)Parameters["MaximumIterations"]; }
     }
     #endregion
+
+    public string HistogramName {
+      get { return HistogramNameParameter.Value.Value; }
+      set { HistogramNameParameter.Value.Value = value; }
+    }
+
+    public bool StoreHistory {
+      get { return StoreHistoryParameter.Value.Value; }
+      set { StoreHistoryParameter.Value.Value = value; }
+    }
 
     [StorableConstructor]
@@ -55,5 +74,13 @@
       Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
       Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The results collection where the analysis values should be stored."));
-      Parameters.Add(new ValueParameter<StringValue>("HistogramName", "The name of the histogram that gets injected in to the results collection.", new StringValue("QualityDistribution")));
+      Parameters.Add(new FixedValueParameter<StringValue>("HistogramName", "The name of the histogram that gets injected in to the results collection.", new StringValue("Quality Distribution")));
+      Parameters.Add(new FixedValueParameter<BoolValue>("StoreHistory", "True if the history should be stored in addition to the current distribution", new BoolValue(false)));
+      Parameters.Add(new LookupParameter<IntValue>("Iterations", "Optional: A value indicating the current iteration."));
+      Parameters.Add(new ValueLookupParameter<IntValue>("MaximumIterations", "Unused", new IntValue(-1)));
+
+      QualityParameter.Hidden = true;
+      ResultsParameter.Hidden = true;
+      IterationsParameter.Hidden = true;
+      MaximumIterationsParameter.Hidden = true;
     }
 
@@ -63,20 +90,45 @@
 
     public override IOperation Apply() {
-      HistogramHistory qualityDistribution = null;
+      DataTable qualityDistribution = null;
       ResultCollection results = ResultsParameter.ActualValue;
       string description = "Shows the quality distributions in the current population.";
-      string resultName = HistogramNameParameter.Value.Value;
-      if (results.ContainsKey(resultName)) {
-        qualityDistribution = results[resultName].Value as HistogramHistory;
+      if (results.ContainsKey(HistogramName)) {
+        qualityDistribution = results[HistogramName].Value as DataTable;
       } else {
-        qualityDistribution = new HistogramHistory();
-        results.Add(new Result(resultName, description, qualityDistribution));
+        qualityDistribution = new DataTable("Population Quality Distribution", description);
+        qualityDistribution.VisualProperties.XAxisTitle = IterationsParameter.ActualName;
+        qualityDistribution.VisualProperties.YAxisTitle = QualityParameter.ActualName;
+        results.Add(new Result(HistogramName, description, qualityDistribution));
       }
-      Histogram histogram = new Histogram("History " + qualityDistribution.Count, description);
+      DataRow row;
+      if (!qualityDistribution.Rows.TryGetValue("QualityDistribution", out row)) {
+        row = new DataRow("QualityDistribution");
+        row.VisualProperties.ChartType = DataRowVisualProperties.DataRowChartType.Histogram;
+        qualityDistribution.Rows.Add(row);
+      }
       var qualities = QualityParameter.ActualValue;
-      histogram.Values.Clear();
-      histogram.Values.AddRange(qualities.Select(x => x.Value));
-      qualityDistribution.Add(histogram);
+      row.Values.Clear();
+      row.Values.AddRange(qualities.Select(x => x.Value));
 
+      if (StoreHistory) {
+        string historyResultName = HistogramName + " History";
+        DataTableHistory qdHistory = null;
+        if (results.ContainsKey(historyResultName)) {
+          qdHistory = results[historyResultName].Value as DataTableHistory;
+        } else {
+          qdHistory = new DataTableHistory();
+          results.Add(new Result(historyResultName, qdHistory));
+        }
+        DataTable table = (DataTable)qualityDistribution.Clone();
+        IntValue iteration = IterationsParameter.ActualValue;
+        if (iteration != null) {
+          string iterationName = IterationsParameter.ActualName;
+          if (iterationName.EndsWith("s")) iterationName = iterationName.Remove(iterationName.Length - 1);
+          string appendix = " at " + iterationName + " " + iteration.Value.ToString();
+          table.Name += appendix;
+          table.Rows["QualityDistribution"].Name += appendix;
+        }
+        qdHistory.Add(table);
+      }
       return base.Apply();
     }
