Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/AlbaEncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/AlbaEncoding.cs	(revision 17706)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Alba/AlbaEncoding.cs	(revision 17711)
@@ -26,5 +26,4 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Optimization;
 using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
@@ -33,5 +32,5 @@
   [Item("AlbaEncoding", "Represents the encoding for Alba encoded solutions.")]
   [StorableType("9ff9f959-31d2-44e5-8a5e-b122220535c2")]
-  public class AlbaEncoding : Encoding, IVRPEncoding {
+  public sealed class AlbaEncoding : VRPEncoding {
 
     [StorableConstructor]
@@ -60,5 +59,5 @@
       };
     }
-    private void DiscoverOperators() {
+    protected override void DiscoverOperators() {
       var assembly = typeof(IAlbaOperator).Assembly;
       var discoveredTypes = ApplicationManager.Manager.GetTypes(encodingSpecificOperatorTypes, assembly, true, false, false);
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/GVREncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/GVREncoding.cs	(revision 17706)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/GVR/GVREncoding.cs	(revision 17711)
@@ -26,5 +26,4 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Optimization;
 using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
@@ -33,5 +32,5 @@
   [Item("GVR Encoding", "Represents the genetic vehicle representation encoding for GVR encoded solutions.")]
   [StorableType("9ff9f959-31d2-44e5-8a5e-b122220535c2")]
-  public class GVREncoding : Encoding, IVRPEncoding {
+  public class GVREncoding : VRPEncoding {
 
     [StorableConstructor]
@@ -60,5 +59,5 @@
       };
     }
-    private void DiscoverOperators() {
+    protected override void DiscoverOperators() {
       var assembly = typeof(IGVROperator).Assembly;
       var discoveredTypes = ApplicationManager.Manager.GetTypes(encodingSpecificOperatorTypes, assembly, true, false, false);
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/MultiVRPEncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/MultiVRPEncoding.cs	(revision 17706)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/MultiVRPEncoding.cs	(revision 17711)
@@ -26,5 +26,4 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Optimization;
 using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
@@ -33,5 +32,5 @@
   [Item("MultiVRPEncoding", "Represents the combination of all encodings from the VRP.")]
   [StorableType("9ff9f959-31d2-44e5-8a5e-b122220535c2")]
-  public class MultiVRPEncoding : Encoding, IVRPEncoding {
+  public class MultiVRPEncoding : VRPEncoding {
 
     [StorableConstructor]
@@ -58,5 +57,5 @@
       };
     }
-    private void DiscoverOperators() {
+    protected override void DiscoverOperators() {
       var assembly = typeof(IAlbaOperator).Assembly;
       var discoveredTypes = ApplicationManager.Manager.GetTypes(encodingSpecificOperatorTypes, assembly, true, false, false);
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/PotvinEncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/PotvinEncoding.cs	(revision 17706)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Potvin/PotvinEncoding.cs	(revision 17711)
@@ -26,5 +26,4 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Optimization;
 using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
@@ -33,5 +32,5 @@
   [Item("Potvin Encoding", "Represents the Potvin encoding for Potvin encoded solutions.")]
   [StorableType("9ff9f959-31d2-44e5-8a5e-b122220535c2")]
-  public class PotvinEncoding : Encoding, IVRPEncoding {
+  public class PotvinEncoding : VRPEncoding {
 
     [StorableConstructor]
@@ -60,5 +59,5 @@
       };
     }
-    private void DiscoverOperators() {
+    protected override void DiscoverOperators() {
       var assembly = typeof(IPotvinOperator).Assembly;
       var discoveredTypes = ApplicationManager.Manager.GetTypes(encodingSpecificOperatorTypes, assembly, true, false, false);
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/PrinsEncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/PrinsEncoding.cs	(revision 17706)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Prins/PrinsEncoding.cs	(revision 17711)
@@ -26,5 +26,4 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Optimization;
 using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
@@ -33,5 +32,5 @@
   [Item("Prins Encoding", "Represents the Prins encoding for Prins encoded solutions.")]
   [StorableType("9ff9f959-31d2-44e5-8a5e-b122220535c2")]
-  public class PrinsEncoding : Encoding, IVRPEncoding {
+  public class PrinsEncoding : VRPEncoding {
 
     [StorableConstructor]
@@ -60,5 +59,5 @@
       };
     }
-    private void DiscoverOperators() {
+    protected override void DiscoverOperators() {
       var assembly = typeof(IPrinsOperator).Assembly;
       var discoveredTypes = ApplicationManager.Manager.GetTypes(encodingSpecificOperatorTypes, assembly, true, false, false);
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/VRPEncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/VRPEncoding.cs	(revision 17711)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/VRPEncoding.cs	(revision 17711)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 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.Linq;
+using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.Problems.VehicleRouting.Interfaces;
+
+namespace HeuristicLab.Problems.VehicleRouting.Encodings {
+  [Item("VRPEncoding", "")]
+  [StorableType("2bb0d7d5-d842-4cf7-8242-1d49940aa4b6")]
+  public abstract class VRPEncoding : Encoding, IVRPEncoding {
+
+    [StorableConstructor]
+    protected VRPEncoding(StorableConstructorFlag _) : base(_) { }
+    protected VRPEncoding(VRPEncoding original, Cloner cloner) : base(original, cloner) { }
+    protected VRPEncoding(string name) : base(name) { }
+
+    public void FilterOperators(IVRPProblemInstance instance) {
+      DiscoverOperators();
+      var operators = instance.FilterOperators(Operators);
+      foreach (var op in Operators.Except(operators).ToList()) {
+        RemoveOperator(op);
+      }
+    }
+
+    protected abstract void DiscoverOperators();
+  }
+}
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/ZhuEncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/ZhuEncoding.cs	(revision 17706)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/Encodings/Zhu/ZhuEncoding.cs	(revision 17711)
@@ -26,5 +26,4 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Optimization;
 using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.Problems.VehicleRouting.Interfaces;
@@ -33,5 +32,5 @@
   [Item("Zhu Encoding", "Represents the Zhu encoding for Zhu encoded solutions.")]
   [StorableType("9ff9f959-31d2-44e5-8a5e-b122220535c2")]
-  public class ZhuEncoding : Encoding, IVRPEncoding {
+  public class ZhuEncoding : VRPEncoding {
 
     [StorableConstructor]
@@ -60,5 +59,5 @@
       };
     }
-    private void DiscoverOperators() {
+    protected override void DiscoverOperators() {
       var assembly = typeof(IZhuOperator).Assembly;
       var discoveredTypes = ApplicationManager.Manager.GetTypes(encodingSpecificOperatorTypes, assembly, true, false, false);
