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 8866)
+++ /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/CrossoverPerformanceAnalyzer.cs	(revision 8867)
@@ -35,5 +35,5 @@
   [Item("CrossoverPerformanceAnalyzer", "An operator that analyzes the performance of crossovers.")]
   [StorableClass]
-  public class CrossoverPerformanceAnalyzer : InitializableOperator {
+  public class CrossoverPerformanceAnalyzer : InitializableOperator, IStatefulItem {
     private const string ResultsParameterName = "Results";
     private const string GenerationsParameterName = "Generations";
@@ -226,6 +226,6 @@
       }
 
-      worseQualityPoint = new Point2D<double>(cnt, worseQuality - qualityChild);
-      betterQualityPoint = new Point2D<double>(cnt++, betterQuality - qualityChild);
+      worseQualityPoint = new Point2D<double>(cnt, Math.Abs(worseQuality - qualityChild));
+      betterQualityPoint = new Point2D<double>(cnt++, Math.Abs(betterQuality - qualityChild));
 
       if (GenerationsParameter.ActualValue.Value == lastGeneration) {
@@ -280,4 +280,13 @@
       equalParents = 0;
     }
+
+    public override void ClearState() {
+      betterParentCrossoverPerformancePlot.CleanUp();
+      worseParentCrossoverPerformancePlot.CleanUp();
+      childDiversityToWorseParentHelper.CleanUp();
+      childDiversityToBetterParentHelper.CleanUp();
+      parentDiversityHelper.CleanUp();
+      parentQualityHelper.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 8866)
+++ /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/MutationPerformanceAnalyzer.cs	(revision 8867)
@@ -21,5 +21,4 @@
 
 
-using System.Collections.Generic;
 using System.Linq;
 using HeuristicLab.Common;
@@ -27,5 +26,4 @@
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.PermutationEncoding;
-using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
@@ -35,14 +33,7 @@
   [Item("MutationPerformanceAnalyzer", "An operator that analyzes the performance of mutation.")]
   [StorableClass]
-  public class MutationPerformanceAnalyzer : SingleSuccessorOperator, IAnalyzer {
+  public class MutationPerformanceAnalyzer : InitializableOperator, IStatefulItem {
     private const string ResultsParameterName = "Results";
     private const string GenerationsParameterName = "Generations";
-
-    #region IAnalyzer Members
-    public bool EnabledByDefault {
-      get { return true; }
-    }
-    #endregion
-
 
     #region Parameter properties
@@ -82,9 +73,5 @@
     private ScatterPlotHelper diversityPlotHelper, qualityPlotHelper;
     [Storable]
-    private DataTableHelper avgDataTableHelper;
-    [Storable]
     private int cnt = 0, lastGeneration = 0;
-    [Storable]
-    private List<double> qualityPoints = new List<double>();
 
     [StorableConstructor]
@@ -94,8 +81,6 @@
       diversityPlotHelper = (ScatterPlotHelper)original.diversityPlotHelper.Clone(cloner);
       qualityPlotHelper = (ScatterPlotHelper)original.qualityPlotHelper.Clone(cloner);
-      avgDataTableHelper = (DataTableHelper)original.avgDataTableHelper.Clone(cloner);
       cnt = original.cnt;
       lastGeneration = original.lastGeneration;
-      qualityPoints = new List<double>(original.qualityPoints);
     }
 
@@ -122,5 +107,4 @@
       diversityPlotHelper = new ScatterPlotHelper(false, true);
       qualityPlotHelper = new ScatterPlotHelper(false, true);
-      avgDataTableHelper = new DataTableHelper();
     }
 
@@ -129,10 +113,14 @@
     }
 
-    public override IOperation Apply() {
-      Point2D<double> curPoint, divPoint;
-
+    protected override void InitializeAction() {
       if (SimilarityCalculatorParameter.Value == null) {
         SimilarityCalculatorParameter.Value = OperatorsParameter.ActualValue.OfType<ISingleObjectiveSolutionSimilarityCalculator>().FirstOrDefault();
       }
+      Reset();
+    }
+
+    public override IOperation Apply() {
+      Initialize();
+      Point2D<double> curPoint, divPoint;
 
       var qualityCX = QualityAfterCrossoverParameter.ActualValue.Value;
@@ -144,5 +132,4 @@
         qualityPlotHelper.InitializePlot(Results, "Mutation Quality", "Solution Index", "Absolut Quality Difference");
         diversityPlotHelper.InitializePlot(Results, "Mutation Diversity", "Solution Index", "Diversity");
-        avgDataTableHelper.InitializeChart(Results, "Average Mutation Performance", new string[] { "Average Mutation Performance per Generation" });
 
         Scope permutationBeforeScope = new Scope();
@@ -153,5 +140,5 @@
         divPoint = new Point2D<double>(cnt, SimilarityCalculatorParameter.Value.CalculateSolutionSimilarity(permutationBeforeScope, permutationAfterScope));
         curPoint = new Point2D<double>(cnt++, qualityCX - qualityM);
-        qualityPoints.Add(curPoint.Y);
+
 
         string curGenStr = GenerationsParameter.ActualValue.Value.ToString();
@@ -162,10 +149,6 @@
         if (GenerationsParameter.ActualValue.Value != 0) {
           if (GenerationsParameter.ActualValue.Value > lastGeneration) {
-            double avg = qualityPoints.Average();
-            avgDataTableHelper.AddPoint(avg);
             Reset();
           }
-        } else {
-          Reset();
         }
       }
@@ -177,5 +160,9 @@
       cnt = 0;
       lastGeneration = GenerationsParameter.ActualValue.Value;
-      qualityPoints.Clear();
+    }
+
+    public override void ClearState() {
+      qualityPlotHelper.CleanUp();
+      diversityPlotHelper.CleanUp();
     }
   }
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 8866)
+++ /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/ScatterPlotHelper.cs	(revision 8867)
@@ -133,4 +133,12 @@
       Plot.VisualProperties.YAxisTitle = yAxisTitle;
     }
+
+    public void CleanUp() {
+      if (!StoreHistory && CreateDataTable) {
+        resultsCol[chartName].Value = null;
+        resultsCol.Remove(chartName);
+        plot = null;
+      }
+    }
   }
 }
