Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/CrossoverPerformanceAnalyzer.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/CrossoverPerformanceAnalyzer.cs	(revision 9210)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/CrossoverPerformanceAnalyzer.cs	(revision 9252)
@@ -133,11 +133,11 @@
       Parameters.Add(new LookupParameter<DoubleValue>("WorstKnownQuality", "The quality of the worst known solution of this problem."));
 
-      worseParentCrossoverPerformancePlot = new ScatterPlotHelper(false, true, true);
-      betterParentCrossoverPerformancePlot = new ScatterPlotHelper(false, true, true);
-      childDiversityToWorseParentHelper = new ScatterPlotHelper(false, true);
-      childDiversityToBetterParentHelper = new ScatterPlotHelper(false, true);
-      unwantedMutationsHelper = new ScatterPlotHelper(false, true);
-      parentDiversityHelper = new ScatterPlotHelper(false, true);
-      parentQualityHelper = new ScatterPlotHelper(false, true, true);
+      worseParentCrossoverPerformancePlot = new ScatterPlotHelper(false, true, true, true);
+      betterParentCrossoverPerformancePlot = new ScatterPlotHelper(false, true, true, true);
+      childDiversityToWorseParentHelper = new ScatterPlotHelper(false, true, false, true);
+      childDiversityToBetterParentHelper = new ScatterPlotHelper(false, true, false, true);
+      unwantedMutationsHelper = new ScatterPlotHelper(false, true, false, true);
+      parentDiversityHelper = new ScatterPlotHelper(false, true, false, true);
+      parentQualityHelper = new ScatterPlotHelper(false, true, true, true);
       successHelper = new DataTableHelper();
       equalParentsHelper = new DataTableHelper();
@@ -320,4 +320,6 @@
       parentQualityHelper.CleanUp();
       unwantedMutationsHelper.CleanUp();
+      successHelper.CleanUpAndCompressData();
+      equalParentsHelper.CleanUpAndCompressData();
     }
   }
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/DataTableHelper.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/DataTableHelper.cs	(revision 9210)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/DataTableHelper.cs	(revision 9252)
@@ -20,7 +20,9 @@
 #endregion
 
+using System.Linq;
 using HeuristicLab.Collections;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
+using HeuristicLab.Data;
 using HeuristicLab.Optimization;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -79,4 +81,55 @@
       return dt.Rows[dataRowNames[0]].Values;
     }
+
+    public void CleanUp() {
+      //remove chart
+      resultsCol[chartName].Value = null;
+      resultsCol.Remove(chartName);
+      dt = null;
+    }
+
+    public void CleanUpAndCompressData() {
+      string[] columnNames = new string[] { "Count", "Minimum", "Maximum", "Average", "Median", "Standard Deviation", "Variance", "25th Percentile", "75th Percentile", "Gradient", "Relative Error", "Avg. of Upper 25 %", " Avg. of Lower 25 %", "Avg. of First 25 %", "Avg. of Last 25 %" };
+
+      foreach (string rowName in dataRowNames) {
+        DataRow curDataRow = dt.Rows[rowName];
+        var values = curDataRow.Values.AsEnumerable();
+
+        double cnt = values.Count();
+        double min = values.Min();
+        double max = values.Max();
+        double avg = values.Average();
+        double median = values.Median();
+        double stdDev = values.StandardDeviation();
+        double variance = values.Variance();
+        double percentile25 = values.Percentile(0.25);
+        double percentile75 = values.Percentile(0.75);
+        double k, d, r;
+        LinearLeastSquaresFitting.Calculate(values.ToArray(), out k, out d);
+        r = LinearLeastSquaresFitting.CalculateError(values.ToArray(), k, d);
+        double lowerAvg = values.OrderBy(x => x).Take((int)(values.Count() * 0.25)).Average();
+        double upperAvg = values.OrderByDescending(x => x).Take((int)(values.Count() * 0.25)).Average();
+        double firstAvg = values.Take((int)(values.Count() * 0.25)).Average();
+        double lastAvg = values.Skip((int)(values.Count() * 0.75)).Average();
+
+        resultsCol.Add(new Result(chartName + " " + rowName + " " + columnNames[0], new DoubleValue(cnt)));
+        resultsCol.Add(new Result(chartName + " " + rowName + " " + columnNames[1], new DoubleValue(min)));
+        resultsCol.Add(new Result(chartName + " " + rowName + " " + columnNames[2], new DoubleValue(max)));
+        resultsCol.Add(new Result(chartName + " " + rowName + " " + columnNames[3], new DoubleValue(avg)));
+        resultsCol.Add(new Result(chartName + " " + rowName + " " + columnNames[4], new DoubleValue(median)));
+        resultsCol.Add(new Result(chartName + " " + rowName + " " + columnNames[5], new DoubleValue(stdDev)));
+        resultsCol.Add(new Result(chartName + " " + rowName + " " + columnNames[6], new DoubleValue(variance)));
+        resultsCol.Add(new Result(chartName + " " + rowName + " " + columnNames[7], new DoubleValue(percentile25)));
+        resultsCol.Add(new Result(chartName + " " + rowName + " " + columnNames[8], new DoubleValue(percentile75)));
+        resultsCol.Add(new Result(chartName + " " + rowName + " " + columnNames[9], new DoubleValue(k)));
+        resultsCol.Add(new Result(chartName + " " + rowName + " " + columnNames[10], new DoubleValue(r)));
+        resultsCol.Add(new Result(chartName + " " + rowName + " " + columnNames[11], new DoubleValue(upperAvg)));
+        resultsCol.Add(new Result(chartName + " " + rowName + " " + columnNames[12], new DoubleValue(lowerAvg)));
+        resultsCol.Add(new Result(chartName + " " + rowName + " " + columnNames[13], new DoubleValue(firstAvg)));
+        resultsCol.Add(new Result(chartName + " " + rowName + " " + columnNames[14], new DoubleValue(lastAvg)));
+      }
+
+      CleanUp();
+    }
   }
 }
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/MutationPerformanceAnalyzer.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/MutationPerformanceAnalyzer.cs	(revision 9210)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/MutationPerformanceAnalyzer.cs	(revision 9252)
@@ -120,6 +120,6 @@
       Parameters.Add(new LookupParameter<DoubleValue>("WorstKnownQuality", "The quality of the worst known solution of this problem."));
 
-      diversityPlotHelper = new ScatterPlotHelper(false, true);
-      qualityPlotHelper = new ScatterPlotHelper(false, true, true);
+      diversityPlotHelper = new ScatterPlotHelper(false, true, false, true);
+      qualityPlotHelper = new ScatterPlotHelper(false, true, true, true);
       successHelper = new DataTableHelper();
     }
@@ -203,4 +203,5 @@
       qualityPlotHelper.CleanUp();
       diversityPlotHelper.CleanUp();
+      successHelper.CleanUpAndCompressData();
     }
 
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/ScatterPlotHelper.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/ScatterPlotHelper.cs	(revision 9210)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/ScatterPlotHelper.cs	(revision 9252)
@@ -51,4 +51,6 @@
     private bool trackMinMaxValues;
     [Storable]
+    private bool compressData;
+    [Storable]
     private double min;
     public double Min {
@@ -81,4 +83,5 @@
       min = original.min;
       max = original.max;
+      compressData = original.compressData;
 
       chartName = original.chartName;
@@ -94,11 +97,13 @@
       min = double.MaxValue;
       max = double.MinValue;
+      compressData = false;
     }
 
-    public ScatterPlotHelper(bool storeHistory, bool createDataTable, bool trackMinMax = false)
+    public ScatterPlotHelper(bool storeHistory, bool createDataTable, bool trackMinMax = false, bool compress = false)
       : base() {
       StoreHistory = storeHistory;
       CreateDataTable = createDataTable;
       trackMinMaxValues = trackMinMax;
+      compressData = compress;
       min = double.MaxValue;
       max = double.MinValue;
@@ -170,4 +175,14 @@
         minMaxDataTableHelper.InitializeChart(Results, chartName + " Scaled Chart", new string[] { yAxisTitle });
         dataTableHelper.GetFirstDataRow().ForEach(x => minMaxDataTableHelper.AddPoint((x - min) / (max - min)));
+
+        dataTableHelper.CleanUp(); //just use the scaled chart and remove the original
+
+        if (compressData) {
+          minMaxDataTableHelper.CleanUpAndCompressData();
+        }
+      }
+
+      if (CreateDataTable && compressData && !trackMinMaxValues) {
+        dataTableHelper.CleanUpAndCompressData();
       }
 
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/SolutionToPopulationAnalyzer.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/SolutionToPopulationAnalyzer.cs	(revision 9210)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/SolutionToPopulationAnalyzer.cs	(revision 9252)
@@ -108,7 +108,7 @@
       Parameters.Add(new LookupParameter<DoubleValue>("WorstKnownQuality", "The quality of the worst known solution of this problem."));
 
-      populationDiversityPlot = new ScatterPlotHelper(false, true);
-      populationQualityPlot = new ScatterPlotHelper(false, true, true);
-      qualityPlot = new ScatterPlotHelper(false, true, true);
+      populationDiversityPlot = new ScatterPlotHelper(false, true, false, true);
+      populationQualityPlot = new ScatterPlotHelper(false, true, true, true);
+      qualityPlot = new ScatterPlotHelper(false, true, true, true);
     }
 
