Index: /trunk/sources/HeuristicLab.Optimization.Operators/3.3/SolutionSimilarityCalculator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Operators/3.3/SolutionSimilarityCalculator.cs	(revision 12125)
+++ /trunk/sources/HeuristicLab.Optimization.Operators/3.3/SolutionSimilarityCalculator.cs	(revision 12126)
@@ -111,6 +111,6 @@
       if (x == null || y == null) return false;
 
-      var q1 = x.Variables[QualityVariableName];
-      var q2 = x.Variables[QualityVariableName];
+      var q1 = x.Variables[QualityVariableName].Value;
+      var q2 = y.Variables[QualityVariableName].Value;
 
       return CheckQualityEquality(q1, q2) && CalculateSolutionSimilarity(x, y).IsAlmost(1.0);
@@ -133,5 +133,5 @@
         }
       }
-      return 0; // throw exception?
+      return 0;
     }
 
@@ -147,5 +147,5 @@
 
       if (da1 != null && da2 != null)
-        return da1.SequenceEqual(da2);
+        return !da1.Zip(da2, Tuple.Create).Any(x => !x.Item1.IsAlmost(x.Item2));
 
       throw new ArgumentException("Could not determine quality equality.");
Index: /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs	(revision 12125)
+++ /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs	(revision 12126)
@@ -252,5 +252,5 @@
       Operators.Add(new KnapsackSimultaneousPathRelinker());
       Operators.Add(new KnapsackSimilarityCalculator());
-      Operators.Add(new QualitySimilarityCalculator { QualityVariableName = SolutionCreator.BinaryVectorParameter.ActualName });
+      Operators.Add(new QualitySimilarityCalculator());
       Operators.Add(new NoSimilarityCalculator());
 
@@ -310,5 +310,5 @@
         op.ParentsParameter.Hidden = true;
       }
-      foreach (KnapsackSimilarityCalculator op in Operators.OfType<KnapsackSimilarityCalculator>()) {
+      foreach (ISolutionSimilarityCalculator op in Operators.OfType<ISolutionSimilarityCalculator>()) {
         op.SolutionVariableName = SolutionCreator.BinaryVectorParameter.ActualName;
         op.QualityVariableName = Evaluator.QualityParameter.ActualName;
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs	(revision 12125)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs	(revision 12126)
@@ -261,5 +261,5 @@
       Operators.Add(new SingleObjectiveTestFunctionPathRelinker());
       Operators.Add(new SingleObjectiveTestFunctionSimilarityCalculator());
-      Operators.Add(new QualitySimilarityCalculator { QualityVariableName = SolutionCreator.RealVectorParameter.ActualName });
+      Operators.Add(new QualitySimilarityCalculator());
       Operators.Add(new NoSimilarityCalculator());
 
@@ -385,8 +385,9 @@
         op.ParentsParameter.Hidden = true;
       }
-      foreach (var op in Operators.OfType<SingleObjectiveTestFunctionSimilarityCalculator>()) {
+      foreach (var op in Operators.OfType<ISolutionSimilarityCalculator>()) {
         op.SolutionVariableName = SolutionCreator.RealVectorParameter.ActualName;
         op.QualityVariableName = Evaluator.QualityParameter.ActualName;
-        op.Bounds = Bounds;
+        var calc = op as SingleObjectiveTestFunctionSimilarityCalculator;
+        if (calc != null) calc.Bounds = Bounds;
       }
     }
Index: /trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs	(revision 12125)
+++ /trunk/sources/HeuristicLab.Problems.TravelingSalesman/3.3/TravelingSalesmanProblem.cs	(revision 12126)
@@ -234,5 +234,5 @@
       Operators.Add(new TSPSimultaneousPathRelinker());
       Operators.Add(new TSPSimilarityCalculator());
-      Operators.Add(new QualitySimilarityCalculator { QualityVariableName = SolutionCreator.PermutationParameter.ActualName });
+      Operators.Add(new QualitySimilarityCalculator());
       Operators.Add(new NoSimilarityCalculator());
 
@@ -359,5 +359,5 @@
         op.ParentsParameter.Hidden = true;
       }
-      foreach (TSPSimilarityCalculator op in Operators.OfType<TSPSimilarityCalculator>()) {
+      foreach (ISolutionSimilarityCalculator op in Operators.OfType<ISolutionSimilarityCalculator>()) {
         op.SolutionVariableName = SolutionCreator.PermutationParameter.ActualName;
         op.QualityVariableName = Evaluator.QualityParameter.ActualName;
