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 8738)
+++ /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/CrossoverPerformanceAnalyzer.cs	(revision 8739)
@@ -29,8 +29,6 @@
 using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
-using HeuristicLab.Optimization.Operators;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.TravelingSalesman;
 
 namespace HeuristicLab.Analysis.AlgorithmBehavior.Analyzers {
@@ -66,6 +64,9 @@
       get { return (ILookupParameter<DoubleValue>)Parameters["Quality"]; }
     }
-    public IValueParameter<SingleObjectiveSolutionSimilarityCalculator> SimilarityCalculatorParameter {
-      get { return (IValueParameter<SingleObjectiveSolutionSimilarityCalculator>)Parameters["SimilarityCalculator"]; }
+    public IValueParameter<ISingleObjectiveSolutionSimilarityCalculator> SimilarityCalculatorParameter {
+      get { return (IValueParameter<ISingleObjectiveSolutionSimilarityCalculator>)Parameters["SimilarityCalculator"]; }
+    }
+    public ILookupParameter<ItemCollection<IItem>> OperatorsParameter {
+      get { return (ILookupParameter<ItemCollection<IItem>>)Parameters["Operators"]; }
     }
     #endregion
@@ -126,5 +127,6 @@
       QualityParameter.ActualName = "TSPTourLength";
 
-      Parameters.Add(new ValueParameter<SingleObjectiveSolutionSimilarityCalculator>("SimilarityCalculator"));
+      Parameters.Add(new ValueParameter<ISingleObjectiveSolutionSimilarityCalculator>("SimilarityCalculator"));
+      Parameters.Add(new LookupParameter<ItemCollection<IItem>>("Operators", "The operators and items that the problem provides to the algorithms."));
 
       plotHelper = new ScatterPlotHelper(false, true);
@@ -141,6 +143,7 @@
 
     public override IOperation Apply() {
-      SimilarityCalculatorParameter.Value.QualityVariableName = "TSPTourLength";
-      SimilarityCalculatorParameter.Value.SolutionVariableName = "TSPTour";
+      if (SimilarityCalculatorParameter.Value == null) {
+        SimilarityCalculatorParameter.Value = OperatorsParameter.ActualValue.OfType<ISingleObjectiveSolutionSimilarityCalculator>().FirstOrDefault();
+      }
 
       plotHelper.InitializePlot(Results, "Crossover Performance", "Solution Index", "Absolut Quality Difference");
@@ -176,5 +179,5 @@
       qualityPoints.Add(qualityPoint.Y);
 
-      if (TSPSimilarityCalculator.CalculateSimilarity(parent1, parent2) == 1.0) {
+      if (parentDiversity == 1.0) {
         equalParents++;
       }
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 8738)
+++ /branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/MutationPerformanceAnalyzer.cs	(revision 8739)
@@ -66,4 +66,10 @@
       get { return (ILookupParameter<Permutation>)Parameters["PermutationAfterMutation"]; }
     }
+    public ILookupParameter<ItemCollection<IItem>> OperatorsParameter {
+      get { return (ILookupParameter<ItemCollection<IItem>>)Parameters["Operators"]; }
+    }
+    public IValueParameter<ISingleObjectiveSolutionSimilarityCalculator> SimilarityCalculatorParameter {
+      get { return (IValueParameter<ISingleObjectiveSolutionSimilarityCalculator>)Parameters["SimilarityCalculator"]; }
+    }
     #endregion
 
@@ -112,4 +118,7 @@
       PermutationAfterMutationParameter.ActualName = "TSPTour";
 
+      Parameters.Add(new ValueParameter<ISingleObjectiveSolutionSimilarityCalculator>("SimilarityCalculator"));
+      Parameters.Add(new LookupParameter<ItemCollection<IItem>>("Operators", "The operators and items that the problem provides to the algorithms."));
+
       diversityPlotHelper = new ScatterPlotHelper(false, true);
       qualityPlotHelper = new ScatterPlotHelper(false, true);
@@ -124,4 +133,8 @@
       Point2D<double> curPoint, divPoint;
 
+      if (SimilarityCalculatorParameter.Value == null) {
+        SimilarityCalculatorParameter.Value = OperatorsParameter.ActualValue.OfType<ISingleObjectiveSolutionSimilarityCalculator>().FirstOrDefault();
+      }
+
       var qualityCX = QualityAfterCrossoverParameter.ActualValue.Value;
       var qualityM = QualityAfterMutationParameter.ActualValue.Value;
@@ -134,5 +147,10 @@
         avgDataTableHelper.InitializeChart(Results, "Average Mutation Performance", "Average Mutation Performance per Generation");
 
-        divPoint = new Point2D<double>(cnt, TSPSimilarityCalculator.CalculateSimilarity(permutationBefore, permutationAfter));
+        Scope permutationBeforeScope = new Scope();
+        Scope permutationAfterScope = new Scope();
+        permutationBeforeScope.Variables.Add(new Variable(PermutationAfterMutationParameter.ActualName, permutationBefore));
+        permutationAfterScope.Variables.Add(new Variable(PermutationAfterMutationParameter.ActualName, permutationAfter));
+
+        divPoint = new Point2D<double>(cnt, SimilarityCalculatorParameter.Value.CalculateSolutionSimilarity(permutationBeforeScope, permutationAfterScope));
         curPoint = new Point2D<double>(cnt++, qualityCX - qualityM);
         qualityPoints.Add(curPoint.Y);
