Index: branches/PTSP/HeuristicLab.Problems.PTSP/3.3/Moves/TwoPointFiveOpt/PTSPAnalyticalTwoPointFiveMoveEvaluator.cs
===================================================================
--- branches/PTSP/HeuristicLab.Problems.PTSP/3.3/Moves/TwoPointFiveOpt/PTSPAnalyticalTwoPointFiveMoveEvaluator.cs	(revision 13470)
+++ branches/PTSP/HeuristicLab.Problems.PTSP/3.3/Moves/TwoPointFiveOpt/PTSPAnalyticalTwoPointFiveMoveEvaluator.cs	(revision 13470)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.PTSP {
+  [Item("PTSP Analytical 2.5-MoveEvaluator", "Operator that evaluates 2.5-p-opt moves of PTSP by a full solution evaluation.")]
+  [StorableClass]
+  public class PTSPAnalyticalTwoPointFiveMoveEvaluator : AnalyticalPTSPMoveEvaluator, ITwoPointFiveMoveOperator {
+
+    public ILookupParameter<TwoPointFiveMove> TwoPointFiveMoveParameter {
+      get { return (ILookupParameter<TwoPointFiveMove>)Parameters["TwoPointFiveMove"]; }
+    }
+
+    [StorableConstructor]
+    protected PTSPAnalyticalTwoPointFiveMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected PTSPAnalyticalTwoPointFiveMoveEvaluator(PTSPAnalyticalTwoPointFiveMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public PTSPAnalyticalTwoPointFiveMoveEvaluator()
+      : base() {
+      Parameters.Add(new LookupParameter<TwoPointFiveMove>("TwoPointFiveMove", "The move to evaluate."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PTSPAnalyticalTwoPointFiveMoveEvaluator(this, cloner);
+    }
+
+    protected override double EvaluateMove(Permutation permutation, Func<int, int, double> distance, DoubleArray probabilities) {
+      return EvaluateMove(permutation, TwoPointFiveMoveParameter.ActualValue, distance, probabilities);
+    }
+
+    public static double EvaluateMove(Permutation permutation, TwoPointFiveMove move, Func<int, int, double> distance, DoubleArray probabilities) {
+      if (move.IsInvert) {
+        return PTSPAnalyticalInversionMoveEvaluator.EvaluateMove(permutation,
+          new InversionMove(move.Index1, move.Index2, move.Permutation), distance, probabilities);
+      } else {
+        return PTSPAnalyticalInsertionMoveEvaluator.EvaluateMove(permutation,
+          new TranslocationMove(move.Index1, move.Index1, move.Index2), distance, probabilities);
+      }
+    }
+  }
+}
Index: branches/PTSP/HeuristicLab.Problems.PTSP/3.3/Moves/TwoPointFiveOpt/PTSPEstimatedTwoPointFiveMoveEvaluator.cs
===================================================================
--- branches/PTSP/HeuristicLab.Problems.PTSP/3.3/Moves/TwoPointFiveOpt/PTSPEstimatedTwoPointFiveMoveEvaluator.cs	(revision 13470)
+++ branches/PTSP/HeuristicLab.Problems.PTSP/3.3/Moves/TwoPointFiveOpt/PTSPEstimatedTwoPointFiveMoveEvaluator.cs	(revision 13470)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.PTSP {
+  [Item("PTSP Estimated 2.5-MoveEvaluator", "Operator that evaluates 2.5-p-opt moves of PTSP")]
+  [StorableClass]
+  public class PTSPEstimatedTwoPointFiveMoveEvaluator : EstimatedPTSPMoveEvaluator, ITwoPointFiveMoveOperator {
+
+    public ILookupParameter<TwoPointFiveMove> TwoPointFiveMoveParameter {
+      get { return (ILookupParameter<TwoPointFiveMove>)Parameters["TwoPointFiveMove"]; }
+    }
+
+    [StorableConstructor]
+    protected PTSPEstimatedTwoPointFiveMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected PTSPEstimatedTwoPointFiveMoveEvaluator(PTSPEstimatedTwoPointFiveMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
+    public PTSPEstimatedTwoPointFiveMoveEvaluator()
+      : base() {
+      Parameters.Add(new LookupParameter<TwoPointFiveMove>("TwoPointFiveMove", "The move to evaluate."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new PTSPEstimatedTwoPointFiveMoveEvaluator(this, cloner);
+    }
+
+    protected override double EvaluateMove(Permutation permutation, Func<int, int, double> distance, ItemList<BoolArray> realizations) {
+      return EvaluateMove(permutation, TwoPointFiveMoveParameter.ActualValue, distance, realizations);
+    }
+
+    public static double EvaluateMove(Permutation permutation, TwoPointFiveMove move, Func<int, int, double> distance, ItemList<BoolArray> realizations) {
+      if (move.IsInvert) {
+        return PTSPEstimatedInversionMoveEvaluator.EvaluateMove(permutation,
+          new InversionMove(move.Index1, move.Index2, move.Permutation), distance, realizations);
+      } else {
+        return PTSPEstimatedInsertionMoveEvaluator.EvaluateMove(permutation,
+          new TranslocationMove(move.Index1, move.Index1, move.Index2), distance, realizations);
+      }
+    }
+  }
+}
Index: branches/PTSP/HeuristicLab.Problems.PTSP/3.3/Moves/TwoPointFiveOpt/PTSPTwoPointFiveMoveEvaluator.cs
===================================================================
--- branches/PTSP/HeuristicLab.Problems.PTSP/3.3/Moves/TwoPointFiveOpt/PTSPTwoPointFiveMoveEvaluator.cs	(revision 13412)
+++ 	(revision )
@@ -1,86 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2015 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 HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Encodings.PermutationEncoding;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Problems.PTSP {
-  [Item("PTSP 2.5-MoveEvaluator", "Operator that evaluates 2.5-p-opt moves of PTSP")]
-  [StorableClass]
-  public class PTSPTwoPointFiveMoveEvaluator : EstimatedPTSPMoveEvaluator, ITwoPointFiveMoveOperator {
-
-    public ILookupParameter<TwoPointFiveMove> TwoPointFiveMoveParameter {
-      get { return (ILookupParameter<TwoPointFiveMove>)Parameters["TwoPointFiveMove"]; }
-    }
-
-    [StorableConstructor]
-    protected PTSPTwoPointFiveMoveEvaluator(bool deserializing) : base(deserializing) { }
-    protected PTSPTwoPointFiveMoveEvaluator(PTSPTwoPointFiveMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
-    public PTSPTwoPointFiveMoveEvaluator()
-      : base() {
-      Parameters.Add(new LookupParameter<TwoPointFiveMove>("TwoPointFiveMove", "The move to evaluate."));
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new PTSPTwoPointFiveMoveEvaluator(this, cloner);
-    }
-
-    protected override double EvaluateByCoordinates(Permutation permutation, DoubleMatrix coordinates, DistanceCalculator distanceCalculator) {
-      var move = TwoPointFiveMoveParameter.ActualValue;
-      var realizations = RealizationsParameter.ActualValue;
-      return EvaluateByCoordinates(permutation, coordinates, distanceCalculator, move, realizations);
-    }
-
-    public static double EvaluateByCoordinates(Permutation permutation, DoubleMatrix coordinates, DistanceCalculator distanceCalculator, TwoPointFiveMove move, ItemList<BoolArray> realizations) {
-      if (move.IsInvert) {
-        return PTSPEstimatedInversionMoveEvaluator.EvaluateByCoordinates(permutation,
-          new InversionMove(move.Index1, move.Index2, move.Permutation),
-          coordinates, distanceCalculator, realizations);
-      } else {
-        return PTSPEstimatedInsertionMoveEvaluator.EvaluateByCoordinates(permutation,
-          new TranslocationMove(move.Index1, move.Index1, move.Index2),
-          coordinates, distanceCalculator, realizations);
-      }
-    }
-
-    protected override double EvaluateByDistanceMatrix(Permutation permutation, DistanceMatrix distanceMatrix) {
-      var move = TwoPointFiveMoveParameter.ActualValue;
-      var realizations = RealizationsParameter.ActualValue;
-      return EvaluateByDistanceMatrix(permutation, distanceMatrix, move, realizations);
-    }
-
-    public static double EvaluateByDistanceMatrix(Permutation permutation, DistanceMatrix distanceMatrix, TwoPointFiveMove move, ItemList<BoolArray> realizations) {
-      if (move.IsInvert) {
-        return PTSPEstimatedInversionMoveEvaluator.EvaluateByDistanceMatrix(permutation,
-          new InversionMove(move.Index1, move.Index2, move.Permutation),
-          distanceMatrix, realizations);
-      } else {
-        return PTSPEstimatedInsertionMoveEvaluator.EvaluateByDistanceMatrix(permutation,
-          new TranslocationMove(move.Index1, move.Index1, move.Index2),
-          distanceMatrix, realizations);
-      }
-    }
-  }
-}
Index: branches/PTSP/HeuristicLab.Problems.PTSP/3.3/Moves/TwoPointFiveOpt/TwoPointFiveMoveMaker.cs
===================================================================
--- branches/PTSP/HeuristicLab.Problems.PTSP/3.3/Moves/TwoPointFiveOpt/TwoPointFiveMoveMaker.cs	(revision 13412)
+++ branches/PTSP/HeuristicLab.Problems.PTSP/3.3/Moves/TwoPointFiveOpt/TwoPointFiveMoveMaker.cs	(revision 13470)
@@ -71,4 +71,12 @@
       var quality = QualityParameter.ActualValue;
 
+      Apply(permutation, move);
+
+      quality.Value = moveQuality.Value;
+
+      return base.Apply();
+    }
+
+    public static void Apply(Permutation permutation, TwoPointFiveMove move) {
       if (move.IsInvert) {
         InversionManipulator.Apply(permutation, move.Index1, move.Index2);
@@ -76,8 +84,4 @@
         TranslocationManipulator.Apply(permutation, move.Index1, move.Index1, move.Index2);
       }
-
-      quality.Value = moveQuality.Value;
-
-      return base.Apply();
     }
   }
